Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  * Copyright (C) 2005-2013 Schlichtherle IT Services.
  * All rights reserved. Use is subject to license terms.
Provides life cycle management for Version-2-with-JSON (V2/JSON) format license keys. License keys are small binary objects which can be stored in a file, a preferences node, the heap or any custom implementation of the interface. License keys pass the following life cycle phases:
  1. Creation,
  2. installation,
  3. viewing,
  4. verification and
  5. uninstallation

... as defined by the and the interfaces. A Free Trial Period (FTP) is configurable with a license consumer manager in order to ease the conversion of prospects to customers. License consumer managers can also get chained in order to unlock application features based on the purchased license keys.

A license is an instance of the class. This class follows the Java Bean pattern and defines common properties for the licensing subject, issue date, issuer, holder, consumer type/amount, validity period and custom data. These properties get initialized and validated whenever a license key gets created. They also get validated whenever a license key gets installed or verified.

A license key gets created from an instance of the License class by applying the following function composition:


When installing or verifying a license key, a duplicate of the original License object gets derived by applying the following (almost inverse) function composition (note that there is no initialization and hence no duplication required):


The validation step is skipped when a license key is just viewed. Encryption is done via JCA with a configurable password based encryption algorithm. Authentication is done via JCA with a configurable key store type and signature algorithm. Encoding is done with java.beans.XMLEncoder for simple, schema-less, yet resilient long term archival.

Applications use the V2JsonLicenseManagementContext class as their starting point for configuring a license vendor or consumer manager. This class can get subclassed to customize special aspects, such as performing additional license validation steps, providing an authoritative clock et al. However, TrueLicense 2 has been designed so that typical applications don't need to subclass or implement any class or interface of its API.

For security, passwords are represented as an instance of the class. Other security critical string (algorithms, paths, etc.) are annotatable with and processible with the TrueLicense Maven Plugin for simple, reliable obfuscation of constant string values in the byte code for license applications.

Warning: To protect against reverse engineering and modification of your application, it is strictly necessary to generally process all byte code which is comprised in your deployment unit with a tool for byte code obfuscation. TrueLicense does not provide general byte code obfuscation because there exist good quality third party tools, e.g. ProGuard.

Christian Schlichtherle
@javax.annotation.ParametersAreNonnullByDefault @javax.annotation.Nonnull
New to GrepCode? Check out our FAQ X