Upgrade and Configure GlassFish

Use this procedure to upgrade GlassFish to use the current EclipseLink version and prepare the connection pool.

Replace the following JAR files from <GLASSFISH_HOME>\glassfish\modules\ with the JAR files from the EclipseLink OSGI bundle:

org.eclipse.persistence.antlr.jar

org.eclipse.persistence.asm.jar

org.eclipse.persistence.core.jar

org.eclipse.persistence.jpa.jar

org.eclipse.persistence.jpa.modelgen.jar

org.eclipse.persistence.oracle.jar

Copy the following JAR file from the EclipseLink OSGI bundle to <GLASSFISH_HOME>\glassfish\modules\:

org.eclipse.persistence.moxy_2.3.0.v20110604-r9504.jar

Use the GlassFish Admin Console to create a new JDBC resource named jdbc/MySports and a new JDBC connection pool named MySportsPool. In this example, we will use the embedded Derby database:

Resource type: javax.sql.DataSource

Datasource classname: org.apache.derby.jdbc.EmbeddedDataSource40 Note: Be sure to edit the JDBC Connection Pool properties to reflect your database connection information. In this example, we will use:

User: APP

Password: APP

ServerName: localhost

DatabaseName: gemini

PortNumber: 1527

Configure Eclipse Environment

Now you can configure Eclipse to run the MySports example.

Add a variable named eclispelink_2.3_jar with the value <ECLIPSELINK OSGI BUNDLE>\org.eclipse.persistence.core_2.3.0.v20110604-r9504.jar. This is used for the javaagent of the test project. You can add this variable by creating a String Substitution variable, as shown here:

Running the Example

Run the MySports AllTests launch target. This will create the database tables and prepare an initial population

Run the MySports Admin application

Run the MySports application

Example Details

MySports Domain (example.mysports.model)

The domain model is that of any arbitrary sports league. The intent is to build an application that captures the state of an arbitrary league and use it in a multitenant application where multiple leagues (tenants) can be hosted. The domain model is intentionally unaware of the potential support for multiple leagues and therefore only models entities that exist within an individual league.

/**
* In the MySports demo a Player entity represents an individual member of a
* team. The Player entity is both multitenant and extensible.
*/
@Entity
@Table(name ="mys_player")
@Multitenant(MultitenantType.SINGLE_TABLE)
@TenantDiscriminatorColumn(name ="LEAGUE_ID", contextProperty = LEAGUE_CONTEXT)
@VirtualAccessMethods
publicclass Player implements Extensible {

Extensible

An application interface used to indicate extensible types and enable their use in the presentation tier. This interface is not required or used by EclipseLink.

Divisions

A non-entity container class used for returning multiple divisions from a JAX-RS call to enable the MOXy marshalling into XML.

Persistence

The persistence layer is the main purpose of this example application. The persistence layer makes use of application bootstrapped persistence contexts with support for an EntityManagerFactory and backing ServerSession (with Cache) per league (tenant). This all bootstrapped off of a single persistence-unit definition.

Runtime Architecture

LeagueRepository

The LeagueRepository is the primary persistence abstraction responsible for league (tenant) specific persistence access managing both JPA persistence units and the MOXy JAXBContext.

JPA Usage

MOXy (JAXB) Usage

The application makes use of EclipseLink MOXy to map its persistent entities into XML within the JAX-RS (RESTful) interface. The mapping is done using an eclipselink-oxm.xml mapping file instead of JAXB annotations.