Skip to content

Latest commit

 

History

History
281 lines (207 loc) · 10.7 KB

portingpackage.adoc

File metadata and controls

281 lines (207 loc) · 10.7 KB

type=page status=published title=Implementing the Porting Package next=commonappdeploy.html prev=building.html ~~ Implementing the Porting Package

11 Implementing the Porting Package

Some functionality in the Jakarta Platform, Enterprise Edition platform is
not completely specified by an API. To handle this situation, the Jakarta
EE test suite defines a set of interfaces in the
`com.sun.cts.porting` package, which serve to abstract any
implementation-specific code. The CTS also provides implementations of
these interfaces to work with the Jakarta Platform, Enterprise Edition CI.

You must create your own implementations of the porting package
interfaces to work with your particular Jakarta Platform, Enterprise
Edition server environment. You also need to create a deployment plan
for each deployable component (EAR, EJB JAR, WAR, and RAR files) in the
test suite as defined by the Jakarta Platform, Enterprise Edition platform.

=======================================================================


[[GFASD]][[overview]]

11.1 Overview
~~~~~~~~~~~~~

The Jakarta Platform, Enterprise Edition CI uses a set of
module-name-with-extension`.sun-`standard-deployment-desc-component-prefix`.xml`
files that are associated with each deployable component. A CTS
`DeploymentInfo` object parses the contents of several runtime XML
files: `sun-application_1_4-0.xml`, `sun-application-client_1_4-0.xml`,
`sun-ejb-jar_2_1-0.xml`, and `sun-web-app_2_4-0.xml`, and makes their
content available to create deployment plans by means of the
`getDeploymentPlan()` method.

To use specific implementations of these classes, you simply modify the
following entries in the `porting class .1` section of the `ts.jte`
environment file to identify the fully-qualified class names:

[source,oac_no_warn]
----
porting.ts.deploy2.class.1=[vendor-deployment-class]
porting.ts.login.class.1=[vendor-login-class]
porting.ts.url.class.1=[vendor-url-class]
porting.ts.jms.class.1=[vendor-jms-class]
porting.ts.HttpsURLConnection.class.1=[vendor-httpsURLConnection-class]
----

The `<TS_HOME>/src/com/sun/ts/lib/porting` directory contains the
interfaces and `Factory` classes for the porting package.


[NOTE]
=======================================================================

You must not modify any of the CTS Release 9 TCK source code. Create your
own implementations of these interfaces and point to them in the
appropriate section of the `ts.jte` file.

=======================================================================


Note the change to the deployment porting property above. It has changed
to be `deploy2`. This is because there is a new deployment porting
interface because of the standardization of a deployment API in Java
Platform, Enterprise Edition. Any functionality that is still not
addressed by this API is part of the new interface
com.sun.ts.lib.porting.TSDeploymentInterface2.

Make sure your porting class implementations meet the following
requirements:

* Implement the following porting interfaces:

** `TSDeploymentInterface2`

** `TSLoginContextInterface`

** `TSURLInterface`

** `TSJMSAdminInterface`

** `TSHttpsURLConnectionInterface`

* Include the implementation of the previous interfaces in the
classpaths of JavaTest, the test clients, and the test server
components:

** In the `ts.harness.classpath` property in the `<TS_HOME>/bin/ts.jte`
file

** In the `CLASSPATH` variable of the `command.testExecute` and
`command.testExecuteAppClient` properties in the `ts.jte` file

** In the classpath of your Jakarta Platform, Enterprise Edition server

Note that because the JavaTest VM calls certain classes in the CTS
porting package directly, porting class implementations are not
permitted to exit the VM (for example, by using the `System.exit` call).

[[GFAUG]][[porting-package-apis]]

11.2 Porting Package APIs
~~~~~~~~~~~~~~~~~~~~~~~~~

The following sections describe the API in the Jakarta EE 9 Platform TCK porting
package. The implementation classes used with the Jakarta Platform,
Enterprise Edition CI are located in the
`<TS_HOME>/src/com/sun/ts/lib/implementation/sun/javaee` directory. You
are encouraged to examine these implementations before you create your
own.

Detailed API documentation for the porting package interfaces is
available in the `<TS_HOME>/docs/api` directory. The API included in
this section are:

* link:#GFASM[TSDeploymentInterface2]
* link:#GKLJO[Ant-Based Deployment Interface]
* link:#GFASI[TSJMSAdminInterface]
* link:#GFATH[TSLoginContextInterface]
* link:#GFATO[TSURLInterface]
* link:#GFASJ[TSHttpsURLConnectionInterface]

[[GFASM]][[tsdeploymentinterface2]]

11.2.1 TSDeploymentInterface2 is removed
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TSDeploymentInterface2 + TSDeployment2 are no longer supported since
the Jakarta Deployment spec is removed.
Please use the `TSDeploymentInterface` instead.
The interface `TSDeploymentInterface`,
which uses only the standard Deployment APIs defined by the Jakarta
Platform, Enterprise Edition platform. The following properties are
still in the `ts.jte` file to reflect this and should not be changed:

----

[[GKLJO]][[ant-based-deployment-interface]]

11.2.2 Ant-Based Deployment Interface
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

In addition to the Java-based deployment porting interfaces, Jakarta EE 9
CTS introduces an Ant-based porting interface as well. The Java-based
interface is still used for deployment/undeployment during test runs.
The Ant-based interface is used when you want to only deploy/undeploy
archives associated with a subdirectory of tests. The Ant-based
deployment interface is used by the following:

* The `build.special.webservices.clients` target in the
`${ts.home}/bin/build.xml` file +
This target deploys archives to your server implementation and then
builds the client classes that use those archives. You must run this
target before you run the tests under the
`${ts.home}/src/com/sun/ts/tests/webservices12/specialcases` directory.
* The `deploy` and `undeploy` targets in each test subdirectory under
the `${ts.home}/src/com/sun/ts/tests` directory +
To use these targets, which are useful for debugging, you must provide
an Ant-based deployment implementation.

[[GKLJF]][[creating-your-own-ant-based-deployment-implementation]]

11.2.2.1 Creating Your Own Ant-based Deployment Implementation
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

The Ant-based deployment implementation for the Jakarta EE 9 CI is under
`${ts.home}/bin/xml/impl/glassfish` directory. To create your own
implementation, create a `deploy.xml` file under the
`${ts.home}/bin/xml/impl/<vendor-name>` directory. Within the file,
create and implement the -deploy and -undeploy targets.

See `${ts.home}/bin/xml/impl/glassfish/deploy.xml` to see how these
targets are implemented for the Jakarta EE 9 CI .


[NOTE]
=======================================================================

There is also a Java-based implementation of TSDeploymentInterface
(`com.sun.ts.lib.implementation.sun.javaee.glassfish.AutoDeployment`).
This implementation, which leverages the Jakarta EE 9 CI implementation of
the Ant-based deployment interface, calls the Ant targets
programmatically.

=======================================================================


[[GFASI]][[tsjmsadmininterface]]

11.2.3 TSJMSAdminInterface
^^^^^^^^^^^^^^^^^^^^^^^^^^

Jakarta Messaging-administered objects are implementation-specific. For this reason,
the creation of connection factories and destination objects have been
set up as part of the porting package. Each Jakarta Platform, Enterprise
Edition implementation must provide an implementation of the
`TSJMSAdminInterface` to support their own connection factory,
topic/queue creation/deletion semantics.

The `TSJMSAdmin` class acts as a `Factory` object for creating concrete
implementations of `TSJMSAdminInterface`. The concrete implementations
are specified by the `porting.ts.jms.class.1` and
`porting.ts.jms.class.2` properties in the `ts.jte` file.

If you wish to create the Jakarta Messaging-administered objects prior to executing
any tests, you may use the default implementation of
`TSJMSAdminInterface`, `SunRIJMSAdmin.java`, which provides a null
implementation. In the case of the Jakarta Platform, Enterprise Edition CI Eclipse GlassFish 6.0,
the Jakarta Messaging administered objects are created during the execution of the
`config.vi` Ant target.

There are two types of Jakarta Messaging-administered objects:

. A `ConnectionFactory`, which a client uses to create a connection with
a JMS provider
. A `Destination`, which a client uses to specify the destination of
messages it sends and the source of messages it receives

[[GFATH]][[tslogincontextinterface]]

11.2.4 TSLoginContextInterface
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

The `TSLoginContext` class acts as a `Factory` object for creating
concrete implementations of `TSLoginContextInterface`. The concrete
implementations are specified by the `porting.ts.login.class.1` property
in the `ts.jte` file. This class is used to enable a program to login as
a specific user, using the semantics of the Jakarta Platform, Enterprise
Edition CI. The certificate necessary for certificate-based login is
retrieved. The keystore file and keystore password from the properties
that are specified in the `ts.jte` file are used.

[[GFATO]][[tsurlinterface]]

11.2.5 TSURLInterface
^^^^^^^^^^^^^^^^^^^^^

The `TSURL` class acts as a `Factory` object for creating concrete
implementations of `TSURLInterface`. The concrete implementations are
specified by the `porting.ts.url.class.1` property in the `ts.jte` file.
Each Jakarta Platform, Enterprise Edition implementation must provide an
implementation of the `TSURLInterface` to support obtaining URL strings
that are used to access a selected Web component. This implementation
can be replaced if a Jakarta Platform, Enterprise Edition server
implementation requires URLs to be created in a different manner. In
most Jakarta Platform, Enterprise Edition environments, the default
implementation of this class can be used.

[[GFASJ]][[tshttpsurlconnectioninterface]]

11.2.6 TSHttpsURLConnectionInterface
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

The `TSHttpsURLConnection` class acts as a `Factory` object for creating
concrete implementations of `TSHttpsURLConnectionInterface`. The
concrete implementations are specified by the
`porting.ts.HttpsURLConnection.class.1` and `.2` properties in the
`ts.jte` file.

You must provide an implementation of `TSHttpsURLConnectionInterface` to
support the class `HttpsURLConnection`.


[NOTE]
=======================================================================

The `SunRIHttpsURLConnection` implementation class uses
`HttpsURLConnection` from Java SE 8.

=======================================================================