3rdstage's Wiki
Advertisement

Fundamentals

  • Intervals, Durations, Periods
    • An interval in Joda-Time represents an interval of time from one instant to another instant.
    • A duration in Joda-Time represents a duration of time measured in milliseconds. The duration is often obtained from an interval.
    • A period in Joda-Time represents a period of time defined in terms of fields, for example, 3 years 5 months 2 days and 7 hours.

Java EE

Version Specs API Tutorial Documentation Remarks
Java EE 8 Java EE 8 Technologies Java EE 8 Specification APIs
Java EE 7 Java EE 7 Technologies Java EE 7 Specification APIs
Java EE 6 Java EE 6 Technologies The Java EE 6 Tutorial
Java EE 5 Java EE 5 Technologies
Component Description Package Spec API Remarks
Jakarta Activation Defines standard services for MIME type data access Jakarta Activation 2.0 API
Jakarta Annotations Declarative style annotations for common semantic concepts
Jakarta Authentication Low-level container SPI for authentication mechanisms
Jakarta Authorization Low-level container SPI for authorization modules
Jakarta Batch API plus an XML-based batch job specification language jakrta.batch

API Docs and Sources

Java SE

Class Method Description Remarks
java.lang.Object
wait(long timeout)
clone()
hashCode()
finalize()
java.lang.Runtime
addShutdownHook(Thread hook)
java.util.Optional<T> Java 8+

Java EE

Common Libraries

Library Version API Source Maven Remarks Classes
JSR-305 3.0.2 FindBugs-JSR305 3.0.2 API com.google.code.findbugs » jsr305 JSR 305: Annotations for Software Defect Detection @Nonnull, @Nullable, @ParametersAreNonnullByDefault, @ThreadSafe, @NotThreadSafe, @Immutable
javax.inject 1 Package javax.inject API javax.inject » javax.inject » 1 JSR 330: Dependency Injection for Java
Bean Validation 2.0 Bean Validation API 2.0.1.Final javax.validation » validation-api » 2.0.1.Final Bean Validation 2.0 (JSR 380)
JSR 380: Bean Validation 2.0
@NotEmpty, @NotBlank, @Positive, @PositiveOrZero, @Negative, @Min, @Max, @Size, @Pattern
1.1 Bean Validation API 1.1.0.Final javax.validation » validation-api » 1.1.0.Final Bean Validation 1.1 (JSR 349)
JSR 349: Bean Validation 1.1
Hibernate Validator 7.0 Hibernate Validator 7.0.1.Final API org.hibernate » hibernate-validator Hibernate Validator 7.0.1.Final Reference Guide
6.0 Hibernate Validator 6.2.0.Final API org.hibernate » hibernate-validator Hibernate Validator 6.2.0.Final Reference Guide
5.2 Hibernate Validator 5.2.5.Final API org.hibernate » hibernate-validator » 5.2.5.Final Hibernate Validator 5.2.5.Final Reference Guide

JSRs

JSR Description Remarks
JSR 94: Java Rule Engine API Defines a Java runtime API for rule engines.
JSR 250: Common Annotations for the Java Platform Develop annotations for common semantic concepts in the J2SE and J2EE platforms that apply across a variety of individual technologies. @Resource, @Resources, @PostConstruct, @PreDestroy
JSR 303: Bean Validation Define a meta-data model and API for JavaBean validation based on annotations, with overrides and extended meta-data through the use of XML validation descriptors. @Null, @NotNull, @Min, @Max, @Size, @Pattern, @Digits, @Future, @Past
JSR 305: Annotations for Software Defect Detection Work to develop standard annotations (such as @NonNull) that can be applied to Java programs to assist tools that detect software defects. @Nonnull, @Nullable, @Immutable, @ThreadSafe, @NotThreadSafe, @WillClose
JSR 308: Annotations on Java Types Extends the Java annotation syntax to permit annotations on any occurrence of a type. Type Annotations Specification
JSR 330: Dependency Injection for Java
JSR 349: Bean Validation 1.1 Standardizes constraint definition, declaration and validation for the Java platform. Bean Validation API 1.1.0.Final
JSR 352: Batch Applications for the Java Platform
JSR 353: Java API for JSON Processing (JSON-P)
JSR 356: Java API for WebSocket
JSR 380: Bean Validation 2.0 Aims at evolving the Bean Validation specification by leveraging Java 8 language constructs for the purposes of validation. @Null, @NotNull, @Min, @Max, @Size, @Pattern, @Digits, @Future, @Past, @NotEmpty, @NotBlank, @Positive, @PositiveOrZero, @Negative, @NegativeOrZero

Basic

  • Common System Properties
Property Description Values Remarks
file.encoding UTF-8
user.country KR, US
user.language ko, en
user.timezone Asia/Seoul
com.sun.management.jmxremote N/A
com.sun.management.jmxremote.port IP port number
com.sun.management.jmxremote.ssl true, false
com.sun.management.jmxremote.authenticate true, false
com.sun.management.jmxremote.local.only true, false

Data Type

String and Bytes

Typical Code Samples
final byte[][] inputs = {
  "Highway Star".getBytes(),
  "Crazy Train".getBytes(),
  "The Dark Side of the Moon".getBytes(),
  "지상에서 영원으로".getBytes()
};

for(byte[] input: inputs) {
  ...
}

Temporal Data Types

Category Class Description Remarks
JDK Date Represents a specific instant in time, with millisecond precision.
Calendar An abstract class that provides methods for converting between a specific instant in time and a set of calendar fields.
GregorianCalendar Provides the standard calendar system used by most of the world.
SimpleDateFormat Formatting (date → text) and parsing (text → date) dates in a locale-sensitive manner not synchronized (not thread-safe)
JDK 8 Date-Time API Instant An instantaneous point on the time-line. stores a long representing epoch-seconds and an int representing nanosecond-of-second
LocalDate A date without a time-zone in the ISO-8601 calendar system. 2007-12-03
LocalDateTime A date-time without a time-zone in the ISO-8601 calendar system. 2007-12-03T10:15:30
LocalTime A time without a time-zone in the ISO-8601 calendar system. 10:15:30
OffsetDateTime
OffsetTime
ZonedDateTime
ZoneId A time-zone ID Europe/Paris
ZoneOffset A time-zone offset from Greenwich/UTC +02:00
TimeZone Represents a time zone offset, and also figures out daylight savings.
DateTimeFormatter Formatter for printing and parsing date-time objects. A formatter created from a pattern can be used as many times as necessary, it is immutable and is thread-safe.
Apache Commons FastDateFormat A fast and thread-safe version of SimpleDateFormat
FastTimeZone Faster methods to produce custom time zones.
Spring @DateTimeFormat
DateTimeFormat.ISO enum
@JsonFormat
Typical Code Samples
long epochTime = Instant.now().getEpochSecond();    // get epoch time of now in second
long epochMilli = Instant.now().toEpochMilli();     // get epoch time of now in milli-second

LocalDateTime birthday = LocalDateTime.of(2012, Month.FEBRUARY, 21, 0, 0, 0);
long birthdayEpoch = birthday.atZone(ZoneId.systemDefault()).toEpochSystem();  // `Instant.from` doesn't support `LocalDateTime` class

Concurrency

  • Valueable classes
Classes Description
java.util.concurrent.locks.Condition Condition factors out the Object monitor methods (wait, notify and notifyAll) into distinct objects to give the effect of having multiple wait-sets per object, by combining them with the use of arbitrary Lock implementations.
com.google.common.util.concurrent.Monitor A synchronization abstraction supporting waiting on arbitrary boolean conditions.
java.util.concurrent.atomic.LongAdder usually preferable to AtomicLong when multiple threads update a common sum that is used for purposes such as collecting statistics

Annotation

Annotations Description Included
java.lang.annotation package @Documented, @Inherited, @Repeatable, @Retention, @Target
Dependency Injection Annotations in Java EE 7 @Inject, @Named, @Qualifier
JSR 305 Annotations for Software Defect Detection 3.0.1 API @Nonnull, @Nullable, @Immutable, @ThreadSafe, @NotThreadSafe, @GuardedBy
Bean Validation API 1.0 Annotations JSR 303: Bean Validation @Null, @NotNull, @Min, @Max, @Size, @Pattern, @Digits, @Future, @Past
Bean Validation API 1.1.0 Annotations JSR 349: Bean Validation 1.1 @Null, @NotNull, @Min, @Max, @Size, @Pattern, @Digits, @Future, @Past
Bean Validation API 2.0 Annotations JSR 380: Bean Validation 2.0 @Null, @NotNull, @Min, @Max, @Size, @Pattern, @Digits, @Future, @Past, @NotEmpty, @NotBlank, @Positive, @PositiveOrZero, @Negative, @NegativeOrZero
Hibernate Validator 5.2.4.Final Annotations
Hibernate Validator 6.1 Annotations
Hibernate Validator 7.0 Annotations
Swagger 1.5 Annotations Annotations for Open API 2.0 @Api, @ApiOperation, @ApiParam, @ApiModel, @ApiModelProperty
Swagger 2.x Annotations Annotations for Open API 3.0 @Operation, @Parameter, @RequestBody, @ApiResponse, @Tag, @Scheme

Reflection

API

Class Method Description Remarks
Array provides static methods to dynamically create and access Java arrays
static Object newInstance​(Class<?> type, int len) Creates a new array with the specified element type and length.

Collection

API

Class Method Description Remarks
Arrays Contains various methods for manipulating arrays binarySearch, fill, parallelSort, sort, stream
static <T> List<T> asList(T...) Returns a fixed-size list backed by the specified array.
Collections Consists exclusively of static methods that operate on or return collections. binarySearch, min, max, sort, reverse, unmodifiableList, unmodifiableMap
static <T> List<T> emptyList() Returns an empty list (immutable). This list is serializable.
static <K,V> Map<K,V> emptyMap() Returns an empty map (immutable). This map is serializable.
static <T> List<T> singletonList(T) Returns an immutable list containing only the specified object.
static <K,V> Map<K,V> singletonMap(K, V) Returns an immutable map, mapping only the specified key to the specified value.
ArrayUtils Operations on arrays, primitive arrays (like int[]) and primitive wrapper arrays (like Integer[]). contains, indexOf, insert, nullToEmpty
static Object[] nullToEmpty(Object[]) Defensive programming technique to change a null reference to an empty one.
CollectionUtils Provides utility methods and decorators for Collection instances.
ListUtils Provides utility methods and decorators for List instances.
static <T> List<T> emptyIfNull(List<T>) Returns an immutable empty list if the argument is null, or the argument itself otherwise.

https://docs.oracle.com/javase/8/docs/api/java/util/Collections.html#emptyList--

Regex

Generic

Enum

Lambda

IO and Networking

API

Class Method Description Remarks
Files consists exclusively of static methods that operate on files, directories, or other types of files.
newInputStream​(Path, OpenOption...) Opens a file, returning an input stream to read from the file. safe for access by multiple concurrent threads
newOutputStream​(Path, OpenOption...) Opens or creates a file, returning an output stream that may be used to write bytes to the file. safe for access by multiple concurrent threads
Paths consists exclusively of static methods that return a Path by converting a path string or URI.

Caching

XML

JDBC

  • JDK and JDBC
JDK JDBC JSR
J2SE 1.4 JDBC 3.0 JSR 54: JDBC 3.0 Specification
Java SE 6 JDBC 4.0 JSR 221: JDBC 4.0 API Specification
Java SE 7 JDBC 4.1
Java SE 8 JDBC 4.2 JSR-000221 JDBC API Specification 4.2 Maintenance Release 2
Database Connection URL Connection Properties Drivers Remarks
Oracle Database OracleDataSource.setConnectionProperties(java.util.Properties value)
DB2 Properties for the IBM Data Server Driver for JDBC and SQLJ
Microsoft SQL Server jdbc:sqlserver://[serverName[\instanceName][:portNumber]][;property=value[;property=value]] Setting the Connection Properties - SQL Server 2008 R2
MySQL jdbc:postgresql://host:port/database[?property=value&property=value...] Driver/Datasource Class Names, URL Syntax and Configuration Properties for Connector/J MySQL Connectors
MariaDB jdbc:postgresql://host:port/database[?property=value&property=value...] Optional URL Parameters MariaDB Connector/J
PostgreSQL jdbc:postgresql://host:port/database[?property=value&property=value...] Connection Parameters PostgreSQL JDBC Driver
HSQLDB Connection properties

Oracle Database

IBM DB2

Microsoft SQL Server

MySQL

HSQLDB

Access

Security

                               Java Security
                                   |  
                                   |
            +------------------ JCA/JCE ------------------+
            | Signature                Cipher             |
            | Message Digest           Key Agreement      |
            | Key Script Generator     Key Generator      |
            | Key Factory              Secret Key Factory |
            | Algorithm Parameters     MAC                |
            | Key Store                SPI                |
            +---------------------------------------------+
                                   |
                                   | 
                        CSP (Cryptographic Service Provider)
                                   |
    +---------+--------+-----------+---------+--------+--------+
    |         |        |           |         |        |        |  
 SunPKCS11   SUN   SunRsaSign   SunJSSE   SunJCE  SunMSCAPI  SunEC

API

Class Description Remarks
java.security.Security centralizes all security properties and common security methods. manage providers
java.security.KeyPairGenerator generate pairs of public and private keys. Public key cryptography
javax.crypto.KeyGenerator provides the functionality of a secret (symmetric) key generator. Private key cryptography
javax.crypto.spec.SecretKeySpec pecifies a secret key in a provider-independent fashion.

Jca-key

  • Signing

A call to a sign method resets the signature object to the state it was in when previously initialized for signing via a call to initSign. That is, the object is reset and available to generate another signature with the same private key, if desired, via new calls to update and sign.

A call to the verify method resets the signature object to its state when it was initialized for verification via a call to initVerify. That is, the object is reset and available to verify another signature from the identity whose public key was specified in the call to initVerify.

JCA Providers

Sun PKCS#11

  • Sun PKCS#11 provider : enables existing applications written to the JCA and JCE APIs to access native PKCS#11 tokens.

Internationalization


Formatting

API
Class Package Description Remarks
ResourceBundle java.util
PropertyResourceBundle java.util
MessageFormat java.text
MessageSource org.springframework.context
ResourceBundleMessageSource org.springframework.context.support
ReloadableResourceBundleMessageSource org.springframework.context.support

JMX

  • Enabling built-in JMX agent using system properties
> java MyApplication -Dcom.sun.management.jmxremote.port=3333 \
                     -Dcom.sun.management.jmxremote.ssl=false \
                     -Dcom.sun.management.jmxremote.authenticate=false \
                     -Dcom.sun.management.jmxremote.authenticate=false

JNI

JavaFX

Javadoc

Diagnostics

Expression Language (EL)

JAX-RS

Version Spec API Remarks
Jakarta RESTful Web Services 3.0 JAX-RS 3.0 Spec JAX-RS 3.0 API
Jakarta RESTful Web Services 2.1 JAX-RS 2.1 API
JSR 339: JAX-RS 2.0
JSR 311: JAX-RS
Annotation Description Remarks
@PathParam Binds the value of a URI template parameter or a path segment containing the template parameter to a resource method parameter, resource class field, or resource class bean property.
@QueryParam Binds the value(s) of a HTTP query parameter to a resource method parameter, resource class field, or resource class bean property.
@FormParam Binds the value(s) of a form parameter contained within a request entity body to a resource method parameter.
@MatrixParam Binds the value(s) of a URI matrix parameter to a resource method parameter, resource class field, or resource class bean property.
@HeaderParam Binds the value(s) of a HTTP header to a resource method parameter, resource class field, or resource class bean property.
@CookieParam Binds the value of a HTTP cookie to a resource method parameter, resource class field, or resource class bean property.

Batch

API

Package Classes Description
javax.batch.api package Batchlet, AbstractBatchlet
javax.batch.api.chunk package ItemProcessor, ItemReader, ItemWriter
javax.batch.api.chunk.listener package ItemProcessListener, ItemReadListener, ItemWriteListener
javax.batch.api.listener package JobListener, StepListener
javax.batch.api.partition package
javax.batch.operations package
javax.batch.runtime package JobExecution, JobInstance, StepExecution, BatchStatus
javax.batch.runtime.context package JobContext, StepContext

Logging

Testing

Debugging

AOP

Distributions

GraalVM

misc

Frameworks

IoC

Spring Framework

Guice

Data Access

JPA

References
Annotations
Annotation Target Elements Description Remarks
@Table type catalog, schema, name, indexes, uniqueConstraints Specifies the primary table for the annotated entity.
@Id method, field Specifies the primary key of an entity.
@IdClass type Class value Specifies a composite primary key class that is mapped to multiple fields or properties of the entity
@Basic method, field fetch, optional The simplest type of mapping to a database column. @Column
@Column method, field name, nullable, length, precision, scale, unique Specifies the mapped column for a persistent property or field.
@JoinColumn method, field name, referencedColumnName, nullable, @ForeignKey foreignKey Specifies a column for joining an entity association or element collection.
@JoinColumns method, field @JoinColumn[] value, @ForeignKey foreignKey Specifies the mapping for composite foreign keys.
@ForeignKey name Used to specify the handling of foreign key constraints when schema generation is in effect.
@Index columnList, name, unique Used in schema generation to specify creation of an index. @Table.indexes
@Embeddable type N/A Specifies a class whose instances are stored as an intrinsic part of an owning entity and share the identity of the entity
@EmbeddedId method, field N/A Applied to a persistent field or property of an entity class or mapped superclass to denote a composite primary key that is an embeddable class. @Embeddable, @AttributeOverrides, @AttributeOverride
@Embedded method, field N/A Specifies a persistent field or property of an entity whose value is an instance of an embeddable class @Embeddable, @AttributeOverrides, @AttributeOverride
@AttributeOverride type, method, field name, @Column column Used to override the mapping of a Basic (whether explicit or default) property or field or Id property or field.
@AttributeOverrides type, method, field @AttributeOverride[] value Used to override mappings of multiple properties or fields.
@AssociationOverride type, method, field name, @ForeignKey foreignKey, @JoinColumn[] joinColumns Used to override a mapping for an entity relationship.
@AssociationOverrides type, method, field @AssociationOverride[] value Used to override mappings of multiple relationship properties or fields.
@GeneratedValue method, field strategy, generator Provides for the specification of generation strategies for the values of primary keys AUTO, IDENTITY, SEQUENCE, TABLE
@Temporal method, field value Must be specified for persistent fields or properties of type java.util.Date and java.util.Calendar.
@Lob method, field Specifies that a persistent property or field should be persisted as a large object to a database-supported large object type.
@Inheritance type strategy Specifies the inheritance strategy to be used for an entity class hierarchy enum InheritanceType
@Access type, method, field Used to specify an access type to be applied to an entity class, mapped superclass, or embeddable class, or to a specific attribute of such a class. AccessType.FIELD, AccessType.PROPERTY
Types
Class Description Remarks
@TemporalType.DATE Map as java.sql.Date
@TemporalType.TIME Map as java.sql.Time
@TemporalType.TIMESTAMP Map as java.sql.Timestamp
Configuration
Category Property Type/Values Default Description Remarks
Data Source jakarta.persistence.jdbc.driver string Fully qualified name of the driver class.
jakarta.persistence.jdbc.url string driver-specific URL
jakarta.persistence.jdbc.user string
jakarta.persistence.jdbc.password string
Schema Tooling jakarta.persistence.schema-generation.scripts.action none, create, drop-and-create, drop none Specifies which scripts are to be generated by the persistence provider.
jakarta.persistence.schema-generation.scripts.create-target string Specifies either a Writer configured for output of the DDL script or a string specifying the file URL for the DDL script.
jakarta.persistence.schema-generation.scripts.drop-target string Specifies either a Writer configured for output of the DDL script or a string specifying the file URL for the DDL script.
jakarta.persistence.schema-generation.database.action none, create, drop-and-create, drop none Specifies the action to be taken by the persistence provider with regard to the database artifacts
jakarta.persistence.schema-generation.create-source metadata, script, metadata-then-script, script-then-metadata Specifies whether schema generation commands for schema creation are to be determined based on object/relational mapping metadata, DDL scripts, or a combination of the two.
jakarta.persistence.schema-generation.drop-source metadata, script, metadata-then-script, script-then-metadata Specifies whether schema generation commands for schema dropping are to be determined based on object/relational mapping metadata, DDL scripts, or a combination of the two.
jakarta.persistence.schema-generation.create-script-source string Specifies the CREATE script file as either a Reader configured for reading the DDL script file or a string designating a file URL for the DDL script. HBM2DDL_IMPORT_FILES
jakarta.persistence.schema-generation.drop-script-source string Specifies the DROP script file as either a Reader configured for reading the DDL script file or a string designating a file URL for the DDL script.
jakarta.persistence.create-database-schemas boolean false Specify whether database schemas used in the mapping model should be created on export in addition to creating the tables, sequences, etc
jakarta.persistence.sql-load-script-source string Specifying a database initialization script to be run as part of schema-export HBM2DDL_IMPORT_FILES
Runtime jakarta.persistence.lock.timeout integer Value in milliseconds for pessimistic lock timeout. This is a hint only.
jakarta.persistence.query.timeout integer Value in milliseconds for query timeout. This is a hint only.
Readings

Hibernate

References
  • JPA/Hibernate Compatibility
Hibernate Hibernate Annotations JPA Jakarta Persistence JDK Remarks
Hibernate v6.3 (API) org.hibernate.annotations Jakarta Persistence 3.1 (API) Java 11, 17 or 21
Hibernate v5.6 (API) JPA 2.2 (API) Jakarta Persistence 3.0 (API) JDK 8, 11, 17 or 18
Version Getting Started User Guide API Settings
6.4 Hibernate 6.4 Getting Started Hibernate 6.4 User Guide Hibernate 6.4 API Hibernate 6.4 Configuration Settings
5.4 Hibernate 5.4 User Guide Hibernate 5.4 API Hibernate 5.4 Configuration
3.3 Optional configuration
API
Version Package Description
6.3 org.hibernate.annotations A set of mapping annotations which extend the O/R mapping annotations defined by JPA.
org.hibernate.type A Hibernate Type is a strategy for mapping a Java property type to a JDBC type or types.
org.hibernate.dialect Abstracts over the multifarious dialects of SQL understood by the databases supported by Hibernate.
Annotations
Annotation Description Targets Elements Remarks
@Type Specifies a custom UserType for the annotated attribute mapping. value, parameters
@JdbcTypeCode Specifies the JDBC type-code to use for the column mapping. value since 6.0
@ColumnDefault Specifies that a column has a default value specified in DDL. value
@ColumnDefaults
@DialectOverride.ColumnDefault Specializes a ColumnDefault in a certain dialect. method, field Class dialect, @ColumnDefault override
@DialectOverride.ColumnDefaults method, field @DialectOverride.ColumnDefault[] value
@Comment Specifies a comment that will be included in generated DDL. table, column
@Check Specifies a check constraint to be included in the generated DDL. name, constraints
@Checks A list of Checks.
@DialectOverride.Check Specializes a Check in a certain dialect. type, method, field Class dialect, @Check override
@DialectOverride.Checks type, method, field @DialectOverride.Check[] value
Types
Type SQL Type Description Remarks
YesNoType CHAR(1), ENUM('Y','N') 'N'/'n' is false, 'Y'/'y' is true. The uppercase value is written to the database. yes_no
SqlTypes Defines a list of constant type codes used to identify generic SQL types.
SqlTypes.BIGINT generic SQL type BIGINT
SqlTypes.BLOB generic SQL type BLOB
SqlTypes.BOOLEAN generic SQL type BOOLEAN
SqlTypes.CHAR generic SQL type CHAR
SqlTypes.CLOB generic SQL type CLOB
SqlTypes.DATE generic SQL type DATE
SqlTypes.DECIMAL generic SQL type DECIMAL
SqlTypes.INTEGER generic SQL type INTEGER
SqlTypes.LONG32VARCHAR
SqlTypes.LONGVARCHAR generic SQL type LONGVARCHAR
SqlTypes.NUMERIC generic SQL type NUMERIC
SqlTypes.SMALLINT generic SQL type SMALLINT
SqlTypes.TIME generic SQL type TIME
SqlTypes.TIMESTAMP generic SQL type TIMESTAMP
SqlTypes.SMALLINT generic SQL type SMALLINT
SqlTypes.VARCHAR generic SQL type VARCHAR
Strategies
Class Description Remarks
interface PhysicalNamingStrategy A set of rules for determining the physical names of objects in a relational database schema from the logical names specified by the object/relational mappings.
CamelCaseToUnderscoresNamingStrategy from Spring Boot
interface ImplicitNamingStrategy A set of rules for determining the logical name of a mapped relational database object when the mapping for an element of the Java domain model is not explicitly specified, neither in annotations of the Java code, nor in an XML-based mapping document.
interface ColumnOrderingStrategy A pluggable contract that allows ordering of columns within table, constraint and user defined type.
ColumnOrderingStrategyStandard Standard implementation that orders columns by size and name following roughly this ordering: order by max(physicalSizeBytes, 4), physicalSizeBytes > 2048, name
Configuration Settings
Setting Type/Values Default Description Remarks
hibernate.default_catalog string A default database catalog name to use for unqualified database object (table, sequence, …​) names
hibernate.default_schema string A default database schema (owner) name to use for unqualified database object (table, sequence, …​) names
hibernate.column_ordering_strategy string | class default Used to specify the ColumnOrderingStrategy class to use.
hibernate.type.preferred_boolean_jdbc_type Specifies the preferred JDBC type for storing boolean values.
Readings
Tips and Tricks
Customizing mapping between Java types and SQL types for columns

The mapping can be customized through org.hibernate.dialect.Dialect.columnType(int sqlTypeCode) method.
Below is columnType() method of org.hibernate.dialect.PostgreSQLDialect class.

@Override
protected String columnType(int sqlTypeCode) {
  switch (sqlTypeCode) {
    case TINYINT:
      // no tinyint, not even in Postgres 11
      return "smallint";

    // there are no nchar/nvarchar types in Postgres
    case NCHAR:
      return columnType(CHAR);
    case NVARCHAR:
      return columnType(VARCHAR);

    // since there's no real difference between TEXT and VARCHAR,
    // except for the length limit, we can just use 'text' for the
    // "long" string types
    case LONG32VARCHAR:
    case LONG32NVARCHAR:
      return "text";

    case BLOB:
    case CLOB:
    case NCLOB:
      // use oid as the blob/clob type on Postgres because
      // the JDBC driver doesn't allow using bytea/text via
      // LOB APIs
      return "oid";

    // use bytea as the "long" binary type (that there is no
    // real VARBINARY type in Postgres, so we always use this)
    case BINARY:
    case VARBINARY:
    case LONG32VARBINARY:
      return "bytea";

    // We do not use the time with timezone type because PG deprecated it and it
    // lacks certain operations like subtraction
    // case TIME_UTC:
    // return columnType( TIME_WITH_TIMEZONE );

    case TIMESTAMP_UTC:
      return columnType(TIMESTAMP_WITH_TIMEZONE);

    default:
      return super.columnType(sqlTypeCode);
  }
}

iBATIS

MyBatis

MyBatis-Spring

MyBatis-Spring-Boot-Starter

Ebean

MyBatis Type Handlers for JSR 310: Date and Time API

MV*

Stripes

  • http://www.stripesframework.org/
  • Desc. : a presentation framework for building web applications using the latest Java technologies.
  • License : Apache License v2

Integration

Apache Camel

Spring Integration

ActiveMQ

Networking

Netty

Apache MINA

Distributed

Storm

References
Readings

Tips and Tricks

JVM arguments for worker process

The followings are from the Visual VM. Memory options, debugging option and JMX options are specified via worker.childopts in storm.yaml and others are added by supervisor.

-Xmx256m
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=26711
-Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.port=16711
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dlog.level.root=INFO
-Djava.library.path=storm-local\supervisor\stormdist\CalcTopology-16-1440641838\resources\Windows_Server_2012_R2-x86;storm-local\supervisor\stormdist\CalcTopology-16-1440641838\resources;/usr/local/lib:/opt/local/lib:/usr/lib
-Dlogfile.name=CalcTopology-16-1440641838-worker-6711.log
-Dstorm.home=C:\opt\apache-storm-0.10.0-beta1
-Dstorm.conf.file=
-Dstorm.options=
-Dstorm.log.dir=C:\opt\apache-storm-0.10.0-beta1\logs
-Dlogging.sensitivity=S3
-Dlog4j.configurationFile=C:\opt\apache-storm-0.10.0-beta1\log4j2\worker.xml
-Dstorm.id=CalcTopology-16-1440641838
-Dworker.id=0d3f826d-7550-458c-8c0a-dd716f5c0ec8
-Dworker.port=6711

Apache River

Logging

SLF4J

Logback

References
Readings

Log4j

Log4j Extra

Log4j 2

  • http://logging.apache.org/log4j/2.x/
  • Desc. : an upgrade to Log4j that provides significant improvements over its predecessor, Log4j 1.x, and provides many of the improvements available in Logback while fixing some inherent problems in Logback's architecture.

log4jdbc

  • http://code.google.com/p/log4jdbc/
  • Desc. : a Java JDBC driver that can log SQL and/or JDBC calls (and optionally SQL timing information) for other JDBC drivers using the Simple Logging Facade For Java (SLF4J) logging system.

Meta

Bean Validation

  • http://beanvalidation.org/
  • Desc. : provide an object level constraint declaration and validation facility for the Java application developer, as well as a constraint metadata repository and query API.
Readings
Version JSR Bean Validation Spec API Reference Impl. Annotations Remarks
Jakarta Bean Validation 3.0 Jakarta Bean Validation 3.0 Spec (Jul. 2020) API Hibernate Validator 7.2 @Null, @NotNull, @Min, @Max, @Size, @Pattern, @Digits, @Future, @Past, @NotEmpty, @NotBlank, @Positive, @PositiveOrZero, @Negative, @NegativeOrZero
Jakarta Bean Validation 2.0 Jakarta Bean Validation 2.0 Spec (Aug. 2019) API Hibernate Validator 6.2 @Null, @NotNull, @Min, @Max, @Size, @Pattern, @Digits, @Future, @Past, @NotEmpty, @NotBlank, @Positive, @PositiveOrZero, @Negative, @NegativeOrZero
Bean Validation 2.0 JSR 380 Bean Validation Spec 2.0 (Aug. 2017) Hibernate Validator 6.0
Bean Validation 1.1 JSR 349 Bean Validation Spec 1.1 (Apr. 2013) API Hibernate Validator 5.1.1 @Null, @NotNull, @Min, @Max, @Size, @Pattern, @Digits, @Future, @Past
Bean Validation 1.0 JSR 303 Bean Validation Spec 1.0 (Oct. 2019) API Hibernate Validator 4.3 @Null, @NotNull, @Min, @Max, @Size, @Pattern, @Digits, @Future, @Past

Hibernate Validator

Cheker Framework

AOP

AspectJ

Templating

FreeMarker

  • http://freemarker.sourceforge.net/
  • Desc. : a "template engine"; a generic tool to generate text output (anything from HTML to autogenerated source code) based on templates.
  • License : liberal BSD-style open source license
  • Written in : Java
References
Class/Interface/Method Description Remarks
Class Configuration The main entry point into the FreeMarker API; encapsulates the configuration settings of FreeMarker, also serves as a central template-loading and caching service. thread-safe, sharable, expensive and meant to be application-level singletons.
public void Configurable.setSetting() Sets a FreeMarker setting by a name and string value.
Class Template Stores an already parsed template, ready to be processed (rendered) for unlimited times, possibly from multiple threads. thread-safe.
Settings
Setting Description Remarks
locale local codes with the usual format in Java, such as "en_US", or since 2.3.26, "JVM default" Configurable.setLocale()
time_zone With the format as TimeZone.getTimeZone(java.lang.String) defines it.
Readings

Rule Engine

Drools
  • http://www.drools.org/
  • Desc. : a Business Rules Management System (BRMS) solution
  • License :
  • Written in :
  • Sources
  • Maven artifacts

Testing

JUnit


JUnit 5

References
Classes/Packages
Class/Package Description Remarks
@TestInstance a type-level annotation that is used to configure the lifecycle of test instances for the annotated test class or test interface TestInstance.Lifecycle.PER_CLASS, TestInstance.Lifecycle.PER_METHOD
@Executuion ExecutionMode.CONCURRENT, ExecutionMode.SAME_THREAD
@Test
@RepeatedTest
@BeforeAll signal that the annotated method should be executed before all tests in the current test class
@BeforeEach signal that the annotated method should be executed before each @Test, @RepeatedTest, @ParameterizedTest, @TestFactory, and @TestTemplate method in the current test class
@AfterEach signal that the annotated method should be executed after each @Test, @RepeatedTest, @ParameterizedTest, @TestFactory, and @TestTemplate method in the current test class
@AfterAll signal that the annotated method should be executed after all tests in the current test class
@ExtendWith a repeatable annotation that is used to register extensions for the annotated test class or test method
JUnitPlatform JUnit 4 based Runner which runs tests on the JUnit Platform in a JUnit 4 environment
Readings

TestNG


Mockito

References
Readings

Springockito


EasyMock


REST Assured

  • Readings
    • RequestSpecBuilder source
      • Both RequestSpecification and RequestSpecification are not immutable nor thread-safe, even worse every call of RequestSpecification.build would return same object.
      • Both RequestSpecification and RequestSpecification should be in method local scope.

Hamcrest


Web Services

Jersey

Batch

Spring Batch

JBeret

  • https://github.com/jberet/jsr352
  • Desc. : an implementation of JSR 352 (Batch Applications for the Java Platform).
  • License : Eclipse Public License 1.0
  • Readings

Security

Apache Shiro

  • http://shiro.apache.org/
  • Desc. : a powerful and easy-to-use Java security framework that performs authentication, authorization, cryptography, and session management.
  • License : Apache License, Version 2.0
  • Readings

Libraries

Fundamental

Apache Commons

Module Description Sources Artifacts Remarks
Lang https://github.com/apache/commons-lang
Collection https://github.com/apache/commons-collections org.apache.commons ≫ commons-collections4

commons-collections ≫ commons-collections

Text
Validator
IO https://github.com/apache/commons-io org.apache.commons ≫ commons-math3
Codec provides implementations of common encoders and decoders such as Base64, Hex, Phonetic and URLs.
Text org.apache.commons » commons-text
Math http://svn.apache.org/viewvc/commons/proper/math/
Module Version API Remarks
Lang 3.10 Commons Lang 3.10 API
3.3.2 Commons Lang 3.3.2 API
Collections 4.1 Commons Collections 4.4 API
4.0 Commons Collections 4.0 API
3.2.2 Commons Collections 3.2.2 API
Validator 1.5.1 Commons Validator 1.5.1 API
1.4.0 Commons Validator 1.4.0 API
IO 2.4 Commons IO 2.4 API
Codec 1.15 Commons Codec 1.15 API
Compress 1.6-SNAPSHOT Commons Compress 1.6-SNAPSHOT API
Text 1.7 Commons Text 1.7 API
Math 3.2 Commons Math 3.2 API
2.2 Commons Math 2.2 API
Configuration 2.0-alpha2 Commons Configuration 2.0-alpha2 API
1.10 Commons Configuration 1.10 API
DBCP 2.1 Apache Commons DBCP 2.1 API
1.4 Commons DBCP 1.4 API
Imaging 1.0-SNAPSHOT Apache Commons Imaging 1.0-SNAPSHOT API
Commons Lang
Class Method Description Remarks
EqualsBuilder
ReflectionToStringBuilder
Validate assists in validating arguments or states via exclusiveBetween, inclusiveBetween, isTrue, notBlank, notEmpty, or validState methods
ArrayUtils
nullToEmpty(String[])
nullToEmpty(T[], Class<T[]>)
toString(Object array) Outputs an array as a String, treating null as an empty array. Multi-dimensional arrays are handled correctly
DateUtils
parseDateStrictly
ExceptionUtils Provides utilities for manipulating and examining Throwable objects.
wrapAndThrow(Throwable throwable) Throw a checked exception without adding the exception to the throws clause of the calling method.
RandomUtils Supplements the standard Random class. nextInt(), nextLong(), nextBytes(), nextBoolean()
RandomStringUtils Generates random Strings
Commons Text
Class Method Description Remarks
WordUtils Operations on Strings that contain words.
capitalize(String str, char... delimiters) Capitalizes all the delimiter separated words in a String. Only the first character of each word is changed.
capitalizeFully(String str, char... delimiters) Converts all the delimiter separated words in a String into capitalized words. Camel-case
Commons IO
Package/Class Description Remarks
org.apache.commons.io.monitor
org.apache.commons.io.FileUtils
org.apache.commons.io.FilenameUtils
org.apache.commons.io.filefilter.DirectoryFileFilter
Commons DBCP
Package/Class Description Remarks
org.apache.commons.dbcp2.BasicDataSource

Commons Collections with Generics

Guava

Eclipse Collections

Javolution

  • http://javolution.org/
  • Desc. : a real-time library aiming to make Java or Java-Like/C++ applications faster and more time predictable.
  • License : BSD License

Kryo

AssertJ

Joda Time

Typesafe Config Library

ZeroTurnaround ZIP Library


Concurrency

Prometheus

Jetlang

  • http://code.google.com/p/jetlang/
  • Desc. : a complement to the java.util.concurrent package introduced in 1.5 and should be used for message based concurrency similar to event based actors in Scala.

Functional

RxJava

  • https://github.com/ReactiveX/RxJava
  • Desc. : Apache License 2.0
  • License : a Java VM implementation of Reactive Extensions: a library for composing asynchronous and event-based programs by using observable sequences.

Resilience4j


Annotations

Immutables

Lombok

API
Annotation Description Targets Remarks
@Getter Put on any field to make lombok build a standard getter. FIELD, TYPE @Getter(AccessLevel.NONE)
@Setter Put on any field to make lombok build a standard setter. FIELD, TYPE @Setter(AccessLevel.NONE)
@Data
@Accessors A container for settings for the generation of getters and setters. FIELD, TYPE chain property
@With Put on any field to make lombok build a 'with' - a withX method which produces a clone of this object (except for 1 field which gets a new value) FIELD, TYPE
@AllArgsConstructor Generates an all-args constructor TYPE
@NoArgsConstructor Generates a no-args constructor. TYPE
@RequiredArgsConstructor Generates a constructor with required arguments. Required arguments are final fields and fields with constraints such as @NonNull. TYPE
@EqualsAndHashCode Generates implementations for the equals and hashCode methods inherited by all objects, based on relevant fields. TYPE
@ToString enerates an implementation for the toString method inherited by all objects, consisting of printing the values of relevant fields. TYPE ToString.Include, ToString.Exclude
Configuration
Option Datatype Default Description Remarks
lombok.copyableAnnotations list Lombok will copy any of these annotations from the field to the setter parameter, and to the getter method.
lombok.extern.findbugs.addSuppressFBWarnings boolean false Add the @SuppressFBWarnings annotation which is useful if you want to run FindBugs on your class files.
lombok.addSuppressWarnings boolean true
Features
Feature Description Remarks
@Getter and @Setter Never write public int getFoo() {return foo;} again.
@ToString
@Accessors
@With Immutable 'setters' - methods that create a clone but with one changed field.
Readings
Sample Codes
  • Spring Data MongoDB domain object with Lombok
@Getter
@Setter
@RequiredArgsConstructor
@Accessors(chain = true)
@Document(collection = "transactions")
public class Transaction implements java.io.Serializable{

  @Id
  private final String hash;

  @Field(name = "block_no")
  private long blockNo;

  private long index;

  private String from;

  // denormalized field from account
  @Field("from_is_contr")
  private boolean fromIsContract;

  private String to;

  // denormalized field from account
  @Field("to_is_contr")
  private boolean toIsContract;

  @Getter(AccessLevel.NONE)
  @Setter(AccessLevel.NONE)
  @AccessType(AccessType.Type.FIELD)
  @Field(targetType = DECIMAL128)
  private BigDecimal value;

  public BigInteger getValue() {
    return this.value.toBigInteger();
  }

  public Transaction setValue(BigInteger val) {
    this.value = new BigDecimal(val);
    return this;
  }

  @Indexed
  private Instant at;

}

Reflection

BCEL

ASM

cglib

Javassist

ReflectASM


EL

OGNL (Object Graph Navigation Library)

  • http://commons.apache.org/proper/commons-ognl/
  • Desc. : an expression language for getting and setting properties of Java objects, plus other extras such as list projection and selection and lambda expressions.
  • License : Apache License, Version 2.0

Java Expression Language (JEXL)

  • http://commons.apache.org/jexl/
  • Desc. : a library intended to facilitate the implementation of dynamic and scripting features in applications and frameworks written in Java.

MVEL


Parsing

javaparser

JTidy

HtmlCleaner

jsoup

Rhino

SnakeYAML


XML

JAXP

  • https://jaxp.java.net/
  • Desc. : enables applications to parse, transform, validate and query XML documents using an API that is independent of a particular XML processor implementation.

Xerces2

Xalan

JAXB

EclipseLink MOXy

Saxon

Jaxen

PsychoPath

Woodstox

  • http://woodstox.codehaus.org/
  • Desc. : a high-performance validating namespace-aware StAX-compliant (JSR-173) Open Source XML-processor written in Java.
  • License : LGPL 2.1 and ASL 2.0

JARV

MSV

  • https://msv.java.net/
  • Desc. : a Java technology tool to validate XML documents against several kinds of XML schemas.
  • License : BSD

ph-schematron

xqpretty


JSON

Jackson

References
  • Deserialization Features
    • ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT (default: false)
    • ACCEPT_EMPTY_STRING_AS_NULL_OBJECT (default: false)
Category Class Type Description Remarks
Core ObjectMapper class Provides functionality for reading and writing JSON, either to and from basic POJOs (Plain Old Java Objects), or to and from a general-purpose JSON Tree Model (JsonNode), as well as related functionality for performing conversions. fully thread-safe provided that ALL configuration of the instance occurs before ANY read or write calls.
JsonParser.Feature enum Defines all on/off features for parsers.
JsonGenerator.Feature enum Defines all togglable features for generators.
SerializationFeature enum Defines simple on/off features that affect the way Java objects are serialized.
SerDe DeserializationFeature enum Defines simple on/off features that affect the way Java objects are deserialized from JSON.
MapperFeature enum Defines simple on/off features to set for ObjectMapper, and accessible (but not changeable) via ObjectReader and ObjectWriter
StdSerializer<T> class Base class used by all standard serializers, and can also be used for custom serializers (in fact, this is the recommended base class to use).
StdDeserializer<T> class Base class for common deserializers.
DateSerializer class For efficiency, we will serialize Dates as longs, instead of potentially more readable Strings.
DateDeserializers class Container class for core JDK date/time type deserializers. CalendarDeserializer, DateDeserializer, TimestampDeserializer
LocalDateSerializer class Serializer for Java 8 temporal LocalDates.
LocalDateTimeSerializer class Serializer for Java 8 temporal LocalDateTimes.
LocalDateDeserializer class Deserializer for Java 8 temporal LocalDates.
LocalDateTimeDeserializer class Deserializer for Java 8 temporal LocalDateTimes.
Annotation @JsonSerialize annotation Configuring serialization aspects, by attaching to "getter" methods or fields, or to value classes.
@JsonDeserialize annotation Configuring deserialization aspects, by attaching to "setter" methods or fields, or to value classes.
@JsonProperty annotation Define a non-static method as a "setter" or "getter" for a logical property (depending on its signature), or non-static object field to be used (serialized, deserialized) as a logical property.
@JsonAlias annotation Define one or more alternative names for a property, accepted during deserialization as alternative to the official name.
@JsonTypeInfo annotation Configuring details of if and how type information is used with JSON serialization and deserialization, to preserve information about actual class of Object instances. polymorphic types
@JsonUnwrapped annotation Indicate that a property should be serialized "unwrapped"
Jackson 2.9
Jackson 2.8
Jackson 2.6
Jackson 2.2
Jackson 1.9
Modules
Readings
Databinding
Category Annotation Description Remarks
Serialization Annotations @JsonValue Tells Jackson to use this method to generate the JSON string from the Java object. method level
@JsonSerialize Tells Jackson to use the declared custom serializer during the serialization of the field, which is marked with this annotation.
Deserialization Annotations @JsonCreator Tells Jackson that the JSON properties can be mapped to the fields of a constructor of the POJO.
@JsonDeserialize Tells Jackson to use a custom deserializer while deserializing the JSON to Java object.
General Annotations @JsonProperty Used to map property names with JSON keys during serialization and deserialization.
@JsonFormat
@JsonUnwrapped
SerDe
misc

JSON-java

  • https://github.com/stleary/JSON-java
  • Desc. : a reference implementation that demonstrates how to parse JSON documents into Java objects and how to generate new JSON documents from the Java classes.
  • License :
  • Written in : Java
  • Maven artifacts : org.json » json

jsonp

Jayway JsonPath

google-gson

json-schema-validator


Testing

Java Faker

jFairy


Scheduling

Quartz


Networking

Apache HttpComponents

References
API
Class Package Description Remarks
HttpHeaders javax.ws.rs.core An injectable interface that provides access to HTTP header information.
HttpHeaders org.apache.http Constants enumerating the HTTP headers. RFC1945 (HTTP/1.0), RFC2616 (HTTP/1.1), RFC2518 (WebDAV)
MediaType javax.ws.rs.core An abstraction for a media type.
ContentType org.apache.http.entity Content type information consisting of a MIME type and an optional charset.
Readings

OkHttp

JSch


Connectivity

c3p0

  • http://www.mchange.com/projects/c3p0/
  • Desc. : easy-to-use library for making traditional JDBC drivers "enterprise-ready" by augmenting them with functionality defined by the jdbc3 spec and the optional extensions to jdbc2.
  • License : LGPL v.2.1 or the EPL v.1.0
  • Maven artifacts : com.mchange » c3p0

HikariCP

TransactionsEssentials

Jolokia

SAP JCo


Security

Jasypt

  • http://www.jasypt.org/
  • Desc. : a java library which allows the developer to add basic encryption capabilities to his/her projects with minimum effort, and without the need of having deep knowledge on how cryptography works.
  • License : Apache License 2.0
Readings

Bouncy Castle

References
API
ECDSA
Class Description Remakrs
BCECPrivateKey
BCECPublicKey
Readings
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("ECDSA", "BC");
ECGenParameterSpec ecGenParameterSpec = new ECGenParameterSpec("secp256k1");
keyPairGenerator.initialize(ecGenParameterSpec, random);

Spongy Castle

Java JWT

Readings

IAIK PKCS#11 Wrapper

Readings

Image Processing

JavaCV

ImgLib2

JCodec

Xuggler

Humble Video

imgscalr

Marvin

vlcj


Graphics

JGraphX

JFreeChart

JGoodies


Native

JNA

JavaCPP


misc

JUNG

  • http://jung.sourceforge.net/
  • Desc. : a software library that provides a common and extensible language for the modeling, analysis, and visualization of data that can be represented as a graph or network.

GEF

  • http://gef.tigris.org/
  • Desc. : to build a graph editing library that can be used to construct many, high-quality graph editing applications.
  • License : BSD License

SIGAR

  • http://sourceforge.net/projects/sigar/
  • Desc. : a cross-platform, cross-language library and command-line tool for accessing operating system and hardware level information in Java, Perl and .NET.

SvnClientAdapter

Vavr

Tools

Compiler Generator

ANTLR

JavaCC

JBurg

  • http://jburg.sourceforge.net/
  • Desc. : a compiler construction tool that is often used in the compiler's back end to convert a tree-structured representation of a program into machine code.
  • License : Common Public License

Janino

Decompiler

JD Project

  • http://jd.benow.ca/
  • Desc. : aims to develop tools in order to decompile and analyze Java 5 “byte code” and the later versions.
  • License :

JODE

CFR

Bytecode Viewer

Obfuscator

ProGuard

yGuard

  • http://www.yworks.com/en/products_yguard_about.html
  • Desc. : a free Java bytecode obfuscator and shrinker that improves your software deployment by prohibiting unwanted access to your source code and drastically shrinking the processed Jar files at the same time.
  • License :

Code Analysis

FindBugs

Readings
Plug-ins

PMD

References
Readings

SonarQube

References
Parameter Description Remarks
sonar.host.url the server URL
sonar.login the authentication token or login of a SonarQube user with Execute Analysis permission on the project.
sonar.projectKey the project's unique key
sonar.projectName name of the project that will be displayed on the web interface.

JDepend

Checkstyle

Rat

JavaNCSS

Launcher

WinRun4J

Monitoring and Diagnostic

VisualVM

Readings

NetBeans Profiler

Java Mission Control

IBM Health Center

BTrace

Jolokia

jmxtrans

hawtio

  • http://hawt.io/
  • Desc. : a modular web console for managing your Java stuff
  • License : Apache License, v2.0
  • Sources :
  • Maven artifacts

Metrics

Dump Analysis

jhat

IBM HeapAnalyzer

Eclipse Memory Analyzer

IBM Thread and Monitor Dump Analyzer for Java

ThreadLogic

Thread Dump Analyzer

GCViewer

IBM Pattern Modeling and Analysis Tool for Java Garbage Collector

IBM Monitoring and Diagnostic Tools - Garbage Collection and Memory Visualizer

Installer

IzPack

  • http://izpack.org/
  • Desc. : A widely used tool for packaging applications on the Java platform.

Security

KeyStore Explorer

Advertisement