| type=page |
| status=published |
| title={productName} 7 Embedded Server Guide |
| prev=preface.html |
| ~~~~~~ |
| |
| = {productName} 7 Embedded Server Guide |
| |
| [[GSESG00001]][[gjldt]] |
| |
| |
| [[glassfish-server-open-source-edition-embedded-server-guide]] |
| == 1 {productName} 7 Embedded Server Guide |
| |
| This document explains how to run applications in embedded {productName} and to develop applications in which |
| {productName} is embedded. This document is for software developers |
| who are developing applications to run in embedded {productName}. The |
| ability to program in the Java language is assumed. |
| |
| The following topics are addressed here: |
| |
| * link:#giidt[Introduction to Embedded {productName}] |
| * link:#gkubb[Embedded {productName} File System] |
| * link:#giijw[Including the {productName} Embedded Server API in Applications] |
| * link:#gijhs[Testing Applications with the Maven Plug-in for Embedded {productName}] |
| * link:#gjlde[Using the EJB 3.1 Embeddable API with Embedded {productName}] |
| * link:#gjlfe[Changing Log Levels in Embedded {productName}] |
| * link:#gksmw[Default Java Persistence Data Source for Embedded {productName}] |
| * link:#gihxf[Restrictions for Embedded {productName}] |
| |
| [[giidt]][[GSESG00035]][[introduction-to-embedded-glassfish-server]] |
| |
| === Introduction to Embedded {productName} |
| |
| Embedded {productName} enables you to use |
| {productName} as a library. Embedded {productName} also enables |
| you to run {productName} inside any Virtual Machine for the Java |
| platform (Java Virtual Machine or JVMmachine). |
| |
| No installation or configuration of embedded {productName} is |
| required. The ability to run {productName} inside applications |
| without installation or configuration simplifies the process of bundling |
| {productName} with applications. |
| |
| |
| [NOTE] |
| ==== |
| Embedded {productName} does not run on the Java Platform, Micro Edition (Java ME platform). |
| ==== |
| |
| You can use embedded {productName} in the following ways: |
| |
| * With the Embedded Server API (see link:#giijw[Including the {productName} Embedded Server API in Applications]) |
| * With the Maven Plug-in (see link:#gijhs[Testing Applications with the |
| Maven Plug-in for Embedded {productName}]) |
| * With the EJB 3.1 Embeddable API (see link:#gjlde[Using the EJB 3.1 |
| Embeddable API with Embedded {productName}]) |
| |
| Embedded {productName} provides a plug-in for |
| http://maven.apache.org/[Apache Maven] (`http://maven.apache.org/`). |
| This plug-in simplifies the testing of applications by enabling you to |
| build an application and run it with {productName} on a single |
| system. Testing and debugging are simplified because the need for an |
| installed and configured {productName} is eliminated. Therefore, you |
| can run unit tests automatically in every build. |
| |
| |
| [NOTE] |
| ==== |
| For information on how to embed {productName} in an OSGi environment, |
| see the link:add-on-component-development-guide.html#GSACG[{productName} Add-On |
| Component Development Guide]. |
| ==== |
| |
| |
| [[gkubb]][[GSESG00036]][[embedded-glassfish-server-file-system]] |
| |
| === Embedded {productName} File System |
| |
| The following Embedded {productName} directories and files are |
| important if you are referencing a nonembedded installation of {productName}: |
| |
| * link:#gikqf[Installation Root Directory] |
| * link:#gikvf[Instance Root Directory] |
| * link:#giiak[The `domain.xml` File] |
| |
| [[gikqf]][[GSESG00054]][[installation-root-directory]] |
| |
| ==== Installation Root Directory |
| |
| The installation root directory, represented as as-install, is the |
| parent of the directory that embedded {productName} uses for |
| configuration files. This directory corresponds to the base directory |
| for an installation of {productName}. Configuration files are |
| contained in the following directories in the base directory for an |
| installation of {productName}: |
| |
| * `domains` |
| * `lib` |
| |
| Specify the installation root directory only if you have a valid |
| nonembedded {productName} installation and are using |
| `glassfish-embedded-static-shell.jar`. |
| |
| [[gikvf]][[GSESG00055]][[instance-root-directory]] |
| |
| ==== Instance Root Directory |
| |
| The instance root directory, represented as domain-dir, is the parent |
| directory of a server instance directory. Embedded {productName} uses the server instance directory for domain |
| configuration files. |
| |
| Specify the instance root directory only if you have a valid nonembedded |
| {productName} domain directory and are using |
| `glassfish-embedded-static-shell.jar`. |
| |
| |
| [NOTE] |
| ==== |
| If you have valid nonembedded {productName} as-install and domain-dir |
| directories, specify both in the `BootstrapProperties` and |
| `GlassFishProperties` classes respectively as described in |
| link:#gihyr[Creating and Configuring an Embedded {productName}]. |
| ==== |
| |
| |
| If domain-dir is not specified, {productName} creates a directory |
| named ``gfembed``random-number``tmp`` in a temporary directory, where |
| random-number is a randomly generated 19-digit number. {productName} |
| then copies configuration files into this directory. The temporary |
| directory is the value of the system property `java.io.tmpdir`. You can |
| override this value by specifying the `glassfish.embedded.tmpdir` |
| property in the `GlassFishProperties` class or as a system property. |
| |
| [[giiak]][[GSESG00056]][[the-domain.xml-file]] |
| |
| ==== The `domain.xml` File |
| |
| Using an existing `domain.xml` file avoids the need to configure |
| embedded {productName} programmatically in your application. Your |
| application obtains domain configuration data from an existing |
| `domain.xml` file. You can create this file by using the administrative |
| interfaces of an installation of nonembedded {productName}. To |
| specify an existing `domain.xml` file, invoke the `setConfigFileURI` |
| method of the `GlassFishProperties` class as described in |
| link:#gihyr[Creating and Configuring an Embedded {productName}]. |
| |
| |
| [NOTE] |
| ==== |
| The built-in `domain.xml` file used by default by Embedded {productName} can be downloaded from |
| `http://embedded-glassfish.java.net/domain.xml`. You can customize this |
| file and pass it in using the `setConfigFileURI` method while creating |
| an Embedded {productName}. |
| ==== |
| |
| |
| [[giijw]][[GSESG00037]][[including-the-glassfish-server-embedded-server-api-in-applications]] |
| |
| === Including the {productName} Embedded Server API in Applications |
| |
| {productName} provides an application programming |
| interface (API) for developing applications in which {productName} is |
| embedded. For details, see the `org.glassfish.embeddable` packages at |
| `http://embedded-glassfish.java.net/nonav/apidocs/`. |
| |
| The following topics are addressed here: |
| |
| * link:#giide[Setting the Class Path] |
| * link:#giiky[Creating, Starting, and Stopping Embedded {productName}] |
| * link:#giigc[Deploying and Undeploying an Application in an Embedded |
| {productName}] |
| * link:#gjldy[Running `asadmin` Commands Using the {productName} |
| Embedded Server API] |
| * link:#gikrt[Sample Applications] |
| |
| [[giide]][[GSESG00057]][[setting-the-class-path]] |
| |
| ==== Setting the Class Path |
| |
| To enable your applications to locate the class libraries for embedded |
| {productName}, add one of the following JAR files to your class path: |
| |
| `glassfish-embedded-nucleus.jar`:: |
| Corresponds to the nucleus distribution. Download this file from |
| `http://download.java.net/maven/glassfish/org/glassfish/extras/glassfish-embedded-nucleus/`. |
| `glassfish-embedded-web.jar`:: |
| Contains classes needed for deploying Jakarta EE web applications. |
| Download this file from |
| `http://download.java.net/maven/glassfish/org/glassfish/extras/glassfish-embedded-web/`. |
| `glassfish-embedded-all.jar`:: |
| Contains classes needed for deploying all Jakarta EE application types. |
| Download this file from |
| `http://download.java.net/maven/glassfish/org/glassfish/extras/glassfish-embedded-all/`. |
| `glassfish-embedded-static-shell.jar`:: |
| Contains references to classes needed for deploying all Jakarta EE |
| application types. Must be used with a nonembedded installation of |
| {productName}. Reference this file from the |
| as-install``/lib/embedded`` directory of a nonembedded {productName} |
| installation. Do not move this file or it will not work. For an |
| explanation of as-install, see link:#gikqf[Installation Root |
| Directory]. |
| |
| |
| [NOTE] |
| ==== |
| {productName} only supports use of the |
| `glassfish-embedded-static-shell.jar` file. The other files are part of |
| {productName} and are offered without official support. |
| ==== |
| |
| |
| In addition, add to the class path any other JAR files or classes upon |
| which your applications depend. For example, if an application uses a |
| database other than Java DB, include the Java DataBase Connectivity |
| (JDBC) driver JAR files in the class path. |
| |
| [[giiky]][[GSESG00058]][[creating-starting-and-stopping-embedded-glassfish-server]] |
| |
| ==== Creating, Starting, and Stopping Embedded {productName} |
| |
| Before you can run applications, you must set up and run the embedded |
| {productName}. |
| |
| The following topics are addressed here: |
| |
| * link:#gihyr[Creating and Configuring an Embedded {productName}] |
| * link:#gihyz[Running an Embedded {productName}] |
| |
| [[gihyr]][[GSESG00043]][[creating-and-configuring-an-embedded-glassfish-server]] |
| |
| ===== Creating and Configuring an Embedded {productName} |
| |
| To create and configure an embedded {productName}, perform these |
| tasks: |
| |
| 1. Instantiate the `org.glassfish.embeddable.BootstrapProperties` |
| class. |
| 2. Invoke any methods for configuration settings that you require. This |
| is optional. |
| 3. Invoke the `GlassFishRuntime.bootstrap()` or |
| `GlassFishRuntime.bootstrap(BootstrapProperties)` method to create a |
| `GlassFishRuntime` object. |
| 4. Instantiate the `org.glassfish.embeddable.GlassFishProperties` |
| class. |
| 5. Invoke any methods for configuration settings that you require. This |
| is optional. |
| 6. Invoke the `glassfishRuntime.newGlassFish(GlassFishProperties)` |
| method to create a `GlassFish` object. |
| |
| The methods of the `BootstrapProperties` class for setting the server |
| configuration are listed in the following table. The default value of |
| each configuration setting is also listed. |
| |
| [[sthref4]][[gksir]] |
| |
| Table 1-1 Methods of the `BootstrapProperties` Class |
| |
| [width="100%",cols="<29%,<33%,<38%",options="header",] |
| |=== |
| |Purpose |Method |Default Value |
| |References an existing link:#gikqf[Installation Root Directory], also called as-install |
| a|[source] |
| ---- |
| setInstallRoot(String as-install) |
| ---- |
| |
| |None. If `glassfish-embedded-static-shell.jar` is used, the |
| link:#gikqf[Installation Root Directory] is automatically determined and |
| need not be specified. |
| |=== |
| |
| |
| The methods of the `GlassFishProperties` class for setting the server |
| configuration are listed in the following table. The default value of |
| each configuration setting is also listed. |
| |
| [[sthref5]][[gkskl]] |
| |
| Table 1-2 Methods of the `GlassFishProperties` Class |
| |
| [width="100%",cols="<24%,<37%,<39%",options="header",] |
| |=== |
| |Purpose |Method |Default Value |
| |References an existing link:#gikvf[Instance Root Directory], also |
| called domain-dir |
| a| |
| [source] |
| ---- |
| setInstanceRoot(String domain-dir) |
| ---- |
| |
| a| |
| In order of precedence: |
| |
| * `glassfish.embedded.tmpdir` property value specified in `GlassFishProperties` object |
| * `glassfish.embedded.tmpdir` system property value |
| * `java.io.tmp` system property value |
| * as-install``/domains/domain1`` if a nonembedded installation is referenced |
| |
| |Creates a new or references an existing configuration file |
| a| |
| [source] |
| ---- |
| setConfigFileURI(String configFileURI) |
| ---- |
| a|In order of precedence: |
| |
| * domain-dir``/config/domain.xml`` if domain-dir was set using `setInstanceRoot` |
| * built-in embedded `domain.xml` |
| |
| |Specifies whether the configuration file is read-only |
| a| |
| [source] |
| ---- |
| setConfigFileReadOnly(boolean readOnly) |
| ---- |
| |`true` |
| |
| |Sets the port on which Embedded {productName} listens. |
| |`setPort`(String networkListener, int port) |
| |none |
| |=== |
| |
| [NOTE] |
| ==== |
| Do not use `setPort` if you are using `setInstanceRoot` or `setConfigFileURI`. |
| ==== |
| |
| |
| [[GSESG00005]][[gikmz]] |
| Example 1-1 Creating an Embedded {productName} |
| |
| This example shows code for creating an Embedded {productName}. |
| |
| [source,java] |
| ---- |
| ... |
| import org.glassfish.embeddable.*; |
| ... |
| GlassFish glassfish = GlassFishRuntime.bootstrap().newGlassFish(); |
| glassfish.start(); |
| ... |
| ---- |
| |
| [[GSESG00006]][[gksjo]] |
| Example 1-2 Creating an Embedded {productName} with configuration |
| customizations |
| |
| This example shows code for creating an Embedded {productName} using |
| the existing domain-dir |
| `C:\samples\test\applicationserver\domains\domain1`. |
| |
| [source,java] |
| ---- |
| // ... |
| import org.glassfish.embeddable.*; |
| // ... |
| BootstrapProperties bootstrapProperties = new BootstrapProperties(); |
| bootstrapProperties.setInstallRoot("C:\\samples\\test\\applicationserver"); |
| GlassFishRuntime glassfishRuntime = GlassFishRuntime.bootstrap(bootstrapProperties); |
| |
| GlassFishProperties glassfishProperties = new GlassFishProperties(); |
| glassfishProperties.setInstanceRoot("C:\\samples\\test\\applicationserver\\domains\\domain1"); |
| GlassFish glassfish = glassfishRuntime.newGlassFish(glassfishProperties); |
| |
| glassfish.start(); |
| // ... |
| ---- |
| |
| [[gihyz]][[GSESG00044]][[running-an-embedded-glassfish-server]] |
| |
| ===== Running an Embedded {productName} |
| |
| After you create an embedded {productName} as described in |
| link:#gihyr[Creating and Configuring an Embedded {productName}], you |
| can perform operations such as: |
| |
| * link:#gjkxx[Setting the Port of an Embedded {productName} From an Application] |
| * link:#gihzg[Starting an Embedded {productName} From an Application] |
| * link:#gihzy[Stopping an Embedded {productName} From an Application] |
| |
| [[gjkxx]][[GSESG00002]][[setting-the-port-of-an-embedded-glassfish-server-from-an-application]] |
| |
| Setting the Port of an Embedded {productName} From an Application |
| |
| You must set the server's HTTP or HTTPS port. If you do not set the |
| port, your application fails to start and throws an exception. You can |
| set the port directly or indirectly. |
| |
| [NOTE] |
| ==== |
| Do not use `setPort` if you are using `setInstanceRoot` or |
| `setConfigFileURI`. These methods set the port indirectly. |
| ==== |
| |
| |
| * To set the port directly, invoke the `setPort` method of the |
| `GlassFishProperties` object. |
| * To set the port indirectly, use a `domain.xml` file that sets the |
| port. For more information, see link:#giiak[The `domain.xml` File]. |
| |
| [[GSESG00007]][[gjkxc]] |
| Example 1-3 Setting the port of an Embedded {productName} |
| |
| This example shows code for setting the port of an embedded {productName}. |
| |
| [source,java] |
| ---- |
| ... |
| import org.glassfish.embeddable.*; |
| ... |
| GlassFishProperties glassfishProperties = new GlassFishProperties(); |
| glassfishProperties.setPort("http-listener", 8080); |
| glassfishProperties.setPort("https-listener", 8181); |
| ... |
| ---- |
| |
| [[gihzg]][[GSESG00003]][[starting-an-embedded-glassfish-server-from-an-application]] |
| |
| Starting an Embedded {productName} From an Application |
| |
| To start an embedded {productName}, invoke the `start` method of the |
| `GlassFish` object. |
| |
| [[GSESG00008]][[gilry]] |
| Example 1-4 Starting an Embedded {productName} |
| |
| This example shows code for setting the port and starting an embedded |
| {productName}. This example also includes the code from |
| link:#gikmz[Example 1-1] for creating a `GlassFish` object. |
| |
| [source,java] |
| ---- |
| ... |
| import org.glassfish.embeddable.*; |
| ... |
| GlassFishProperties glassfishProperties = new GlassFishProperties(); |
| glassfishProperties.setPort("http-listener", 8080); |
| glassfishProperties.setPort("https-listener", 8181); |
| ... |
| GlassFish glassfish = GlassFishRuntime.bootstrap().newGlassFish(glassfishProperties); |
| glassfish.start(); |
| ... |
| ---- |
| |
| [[gihzy]][[GSESG00004]][[stopping-an-embedded-glassfish-server-from-an-application]] |
| |
| Stopping an Embedded {productName} From an Application |
| |
| The API for embedded {productName} provides a method for stopping an |
| embedded server. Using this method enables your application to stop the |
| server in an orderly fashion by performing any necessary cleanup steps |
| before stopping the server, for example: |
| |
| * Undeploying deployed applications |
| * Releasing any resources that your application uses |
| |
| To stop an embedded {productName}, invoke the `stop` method of an |
| existing `GlassFish` object. |
| |
| [[GSESG00009]][[gilnz]] |
| Example 1-5 Stopping an Embedded {productName} |
| |
| This example shows code for prompting the user to press the Enter key to |
| stop an embedded {productName}. Code for creating a `GlassFish` |
| object is not shown in this example. For an example of code for creating |
| a `GlassFish` object, see link:#gikmz[Example 1-1]. |
| |
| [source,java] |
| ---- |
| ... |
| import java.io.BufferedReader; |
| ... |
| import org.glassfish.embeddable.*; |
| ... |
| System.out.println("Press Enter to stop server"); |
| // wait for Enter |
| glassfish.stop(); // Stop Embedded GlassFish |
| ... |
| ---- |
| |
| As an alternative, you can use the `dispose` method to stop an embedded |
| {productName} and dispose of the temporary file system. |
| |
| [[giigc]][[GSESG00059]][[deploying-and-undeploying-an-application-in-an-embedded-glassfish-server]] |
| |
| ==== Deploying and Undeploying an Application in an Embedded {productName} |
| |
| Deploying an application installs the files that comprise the |
| application into Embedded {productName} and makes the application |
| ready to run. By default, an application is enabled when it is deployed. |
| |
| The following topics are addressed here: |
| |
| * link:#gilrf[To Deploy an Application From an Archive File or a Directory] |
| * link:#gilpm[Undeploying an Application] |
| * link:#gjrcs[Creating a Scattered Archive] |
| * link:#gkvgc[Creating a Scattered Enterprise Archive] |
| |
| For general information about deploying applications in {productName}, see the link:application-deployment-guide.html#GSDPG[{productName} |
| Application Deployment Guide]. |
| |
| [[gilrf]][[GSESG00021]][[to-deploy-an-application-from-an-archive-file-or-a-directory]] |
| |
| ===== To Deploy an Application From an Archive File or a Directory |
| |
| An archive file contains the resources, deployment descriptor, and |
| classes of an application. The content of the file must be organized in |
| the directory structure that the Jakarta EE specifications define for the |
| type of archive that the file contains. For more information, see |
| "link:application-deployment-guide/deploying-applications.html#GSDPG00004[Deploying Applications]" in {productName} Application Deployment Guide. |
| |
| Deploying an application from a directory enables you to deploy an |
| application without the need to package the application in an archive |
| file. The contents of the directory must match the contents of the |
| expanded Jakarta EE archive file as laid out by the {productName}. The |
| directory must be accessible to the machine on which the deploying |
| application runs. For more information about the requirements for |
| deploying an application from a directory, see "link:application-deployment-guide/deploying-applications.html#GSDPG00043[To |
| Deploy an Application or Module in a Directory Format]" in {productName} Application Deployment Guide. |
| |
| If some of the resources needed by an application are not under the |
| application's directory, see link:#gjrcs[Creating a Scattered Archive]. |
| |
| 1. Instantiate the `java.io.File` class to represent the archive file or directory. |
| |
| 2. Invoke the `getDeployer` method of the `GlassFish` object to get an |
| instance of the `org.glassfish.embeddable.Deployer` class. |
| |
| 3. Invoke the `deploy(File archive, String... params)` method of the |
| instance of the `Deployer` object. + |
| Specify the `java.io.File` class instance you created previously as the |
| first method parameter. + |
| For information about optional parameters you can set, see the |
| descriptions of the |
| link:reference-manual/deploy.html#GSRFM00114[`deploy`(1)] subcommand parameters. |
| Simply quote each parameter in the method, for example `"--force=true"`. |
| |
| [[GSESG00010]][[gioph]] |
| Example 1-6 Deploying an Application From an Archive File |
| |
| This example shows code for deploying an application from the archive |
| file `c:\samples\simple.war` and setting the name, contextroot, and |
| force parameters. This example also includes the code from |
| link:#gikmz[Example 1-1] for creating `GlassFishProperties` and |
| `GlassFish` objects. |
| |
| [source,java] |
| ---- |
| ... |
| import java.io.File; |
| ... |
| import org.glassfish.embeddable.*; |
| ... |
| GlassFishProperties glassfishProperties = new GlassFishProperties(); |
| glassfishProperties.setPort("http-listener", 8080); |
| glassfishProperties.setPort("https-listener", 8181); |
| ... |
| GlassFish glassfish = GlassFishRuntime.bootstrap().newGlassFish(glassfishProperties); |
| glassfish.start(); |
| File war = new File("c:\\samples\\simple.war"); |
| Deployer deployer = glassfish.getDeployer(); |
| deployer.deploy(war, "--name=simple", "--contextroot=simple", "--force=true"); |
| // deployer.deploy(war) can be invoked instead. Other parameters are optional. |
| ... |
| ---- |
| |
| [[gilpm]][[GSESG00045]][[undeploying-an-application]] |
| |
| ===== Undeploying an Application |
| |
| Undeploy an application when the application is no longer required to |
| run in {productName}. For example, before stopping {productName}, |
| undeploy all applications that are running in {productName}. |
| |
| |
| [NOTE] |
| ==== |
| If you reference a nonembedded {productName} installation using the |
| `glassfish-embedded-static-shell.jar` file and do not undeploy your |
| applications in the same server life cycle in which you deployed them, |
| expanded archives for these applications remain under the |
| domain-dir``/applications`` directory. |
| ==== |
| |
| |
| To undeploy an application, invoke the `undeploy` method of an existing |
| `Deployer` object. In the method invocation, pass the name of the |
| application as a parameter. This name is specified when the application |
| is deployed. |
| |
| For information about optional parameters you can set, see the |
| descriptions of the |
| link:reference-manual/deploy.html#GSRFM00114[`deploy`(1)] command parameters. |
| Simply quote each parameter in the method, for example |
| `"--cascade=true"`. |
| |
| To undeploy all deployed applications, invoke the `undeployAll` method |
| of an existing `EmbeddedDeployer` object. This method takes no |
| parameters. |
| |
| [[GSESG00011]][[gilwu]] |
| Example 1-7 Undeploying an Application |
| |
| This example shows code for undeploying the application that was |
| deployed in link:#gioph[Example 1-6]. |
| |
| [source,java] |
| ---- |
| ... |
| import org.glassfish.embeddable.*; |
| ... |
| deployer.undeploy(war, "--droptables=true", "--cascade=true"); |
| ... |
| ---- |
| |
| [[gjrcs]][[GSESG00046]][[creating-a-scattered-archive]] |
| |
| ===== Creating a Scattered Archive |
| |
| Deploying a module from a scattered archive (WAR or JAR) enables you to |
| deploy an unpackaged module whose resources, deployment descriptor, and |
| classes are in any location. Deploying a module from a scattered archive |
| simplifies the testing of a module during development, especially if all |
| the items that the module requires are not available to be packaged. |
| |
| In a scattered archive, these items are not required to be organized in |
| a specific directory structure. Therefore, you must specify the location |
| of the module's resources, deployment descriptor, and classes when |
| deploying the module. |
| |
| To create a scattered archive, perform these tasks: |
| |
| 1. Instantiate the `org.glassfish.embeddable.archive.ScatteredArchive` class. |
| 2. Invoke the `addClassPath` and `addMetadata` methods if you require them. |
| 3. Invoke the `toURI` method to deploy the scattered archive. |
| |
| The methods of this class for setting the scattered archive |
| configuration are listed in the following table. The default value of |
| each configuration setting is also listed. |
| |
| [[sthref6]][[gjrdg]] |
| |
| Table 1-3 Constructors and Methods of the `ScatteredArchive` Class |
| |
| [width="100%",cols="<52%,<38%,<10%",options="header",] |
| |=== |
| |Purpose |Method |Default Value |
| |Creates and names a scattered archive |
| a|[source,java] |
| ---- |
| ScatteredArchive(String name, ScatteredArchive.Type type) |
| ---- |
| |
| |None |
| |
| |Creates and names a scattered archive based on a top-level directory. |
| If the entire module is organized under the topDir, this is the only |
| method necessary. The topDir can be null if other methods specify the |
| remaining parts of the module. |
| a|[source,java] |
| ---- |
| ScatteredArchive(String name, ScatteredArchive.Type type, File topDir) |
| ---- |
| |
| |None |
| |
| |Adds a directory to the classes classpath |
| a|[source,java] |
| ---- |
| addClassPath(File path) |
| ---- |
| |
| |None |
| |
| |Adds a metadata locator |
| a|[source,java] |
| ---- |
| addMetaData(File path) |
| ---- |
| |
| |None |
| |
| |Adds and names a metadata locator |
| a|[source,java] |
| ---- |
| addMetaData(File path, String name) |
| ---- |
| |
| |None |
| |
| |Gets the deployable URI for this scattered archive a| |
| [source,java] |
| ---- |
| toURI() |
| ---- |
| |
| |None |
| |=== |
| |
| |
| [[GSESG00012]][[gjrfq]] |
| Example 1-8 Deploying an Application From a Scattered Archive |
| |
| This example shows code for creating a WAR file and using the |
| `addClassPath` and `addMetadata` methods. This example also includes the |
| code from link:#gioph[Example 1-6] for deploying an application from an |
| archive file. |
| |
| [source,java] |
| ---- |
| ... |
| import java.io.File; |
| ... |
| import org.glassfish.embeddable.*; |
| ... |
| GlassFishProperties glassfishProperties = new GlassFishProperties(); |
| glassfishProperties.setPort("http-listener", 9090); |
| GlassFish glassfish = GlassFishRuntime.bootstrap().newGlassFish(glassfishProperties); |
| glassfish.start(); |
| Deployer deployer = glassfish.getDeployer(); |
| ScatteredArchive archive = new ScatteredArchive("testapp", ScatteredArchive.Type.WAR); |
| // target/classes directory contains complied servlets |
| archive.addClassPath(new File("target", "classes")); |
| // resources/sun-web.xml is the WEB-INF/sun-web.xml |
| archive.addMetadata(new File("resources", "sun-web.xml")); |
| // resources/web.xml is the WEB-INF/web.xml |
| archive.addMetadata(new File("resources", "web.xml")); |
| // Deploy the scattered web archive. |
| String appName = deployer.deploy(archive.toURI(), "--contextroot=hello"); |
| |
| deployer.undeploy(appName); |
| glassfish.stop(); |
| glassfish.dispose(); |
| ... |
| ---- |
| |
| [[gkvgc]][[GSESG00047]][[creating-a-scattered-enterprise-archive]] |
| |
| ===== Creating a Scattered Enterprise Archive |
| |
| Deploying an application from a scattered enterprise archive (EAR) |
| enables you to deploy an unpackaged application whose resources, |
| deployment descriptor, and classes are in any location. Deploying an |
| application from a scattered archive simplifies the testing of an |
| application during development, especially if all the items that the |
| application requires are not available to be packaged. |
| |
| In a scattered archive, these items are not required to be organized in |
| a specific directory structure. Therefore, you must specify the location |
| of the application's resources, deployment descriptor, and classes when |
| deploying the application. |
| |
| To create a scattered enterprise archive, perform these tasks: |
| |
| 1. Instantiate the |
| `org.glassfish.embeddable.archive.ScatteredEnterpriseArchive` class. |
| 2. Invoke the `addArchive` and `addMetadata` methods if you require |
| them. |
| 3. Invoke the `toURI` method to deploy the scattered enterprise |
| archive. |
| |
| The methods of this class for setting the scattered enterprise archive |
| configuration are listed in the following table. The default value of |
| each configuration setting is also listed. |
| |
| [[sthref7]][[gkvgb]] |
| |
| Table 1-4 Constructors and Methods of the `ScatteredEnterpriseArchive` |
| Class |
| |
| [width="99%",cols="<42%,<48%,<10%",options="header",] |
| |=== |
| |Purpose |Method |Default Value |
| |Creates and names a scattered enterprise archive a| |
| [source,java] |
| ---- |
| ScatteredEnterpriseArchive(String name) |
| ---- |
| |
| |None |
| |Adds a module or library a| |
| [source,java] |
| ---- |
| addArchive(File archive) |
| ---- |
| |
| |None |
| |Adds a module or library a| |
| [source,java] |
| ---- |
| addArchive(File archive, String name) |
| ---- |
| |
| |None |
| |Adds a module or library a| |
| [source,java] |
| ---- |
| addArchive(URI URI) |
| ---- |
| |
| |None |
| |Adds a module or library a| |
| [source,java] |
| ---- |
| addArchive(URI URI, String name) |
| ---- |
| |
| |None |
| |Adds a metadata locator a| |
| [source,java] |
| ---- |
| addMetaData(File path) |
| ---- |
| |
| |None |
| |Adds and names a metadata locator a| |
| [source,java] |
| ---- |
| addMetaData(File path, String name) |
| ---- |
| |
| |None |
| |Gets the deployable URI for this scattered archive a| |
| [source,java] |
| ---- |
| toURI() |
| ---- |
| |
| |None |
| |=== |
| |
| |
| [[GSESG00013]][[gkvga]] |
| Example 1-9 Deploying an Application From a Scattered Enterprise Archive |
| |
| This example shows code for creating an EAR file and using the |
| `addArchive` and `addMetadata` methods. This example also includes code |
| similar tolink:#gjrfq[Example 1-8] for creating a scattered archive. |
| |
| [source,java] |
| ---- |
| ... |
| import java.io.File; |
| ... |
| import org.glassfish.embeddable.*; |
| ... |
| GlassFishProperties glassfishProperties = new GlassFishProperties(); |
| glassfishProperties.setPort("http-listener", 9090); |
| GlassFish glassfish = GlassFishRuntime.bootstrap().newGlassFish(glassfishProperties); |
| glassfish.start(); |
| Deployer deployer = glassfish.getDeployer(); |
| |
| // Create a scattered web application. |
| ScatteredArchive webmodule = new ScatteredArchive("testweb", ScatteredArchive.Type.WAR); |
| // target/classes directory contains my complied servlets |
| webmodule.addClassPath(new File("target", "classes")); |
| // resources/sun-web.xml is my WEB-INF/sun-web.xml |
| webmodule.addMetadata(new File("resources", "sun-web.xml")); |
| |
| // Create a scattered enterprise archive. |
| ScatteredEnterpriseArchive archive = new ScatteredEnterpriseArchive("testapp"); |
| // src/application.xml is my META-INF/application.xml |
| archive.addMetadata(new File("src", "application.xml")); |
| // Add scattered web module to the scattered enterprise archive. |
| // src/application.xml references Web module as "scattered.war". |
| //Hence specify the name while adding the archive. |
| archive.addArchive(webmodule.toURI(), "scattered.war"); |
| // lib/mylibrary.jar is a library JAR file. |
| archive.addArchive(new File("lib", "mylibrary.jar")); |
| // target/ejbclasses contain my compiled EJB module. |
| // src/application.xml references EJB module as "ejb.jar". |
| //Hence specify the name while adding the archive. |
| archive.addArchive(new File("target", "ejbclasses"), "ejb.jar"); |
| |
| // Deploy the scattered enterprise archive. |
| String appName = deployer.deploy(archive.toURI()); |
| |
| deployer.undeploy(appName); |
| glassfish.stop(); |
| glassfish.dispose(); |
| ... |
| ---- |
| |
| [[gjldy]][[GSESG00060]][[running-asadmin-commands-using-the-glassfish-server-embedded-server-api]] |
| |
| Running `asadmin` Commands Using the {productName} Embedded Server |
| ==== API |
| |
| Running link:reference-manual/asadmin.html#GSRFM00263[`asadmin`] commands from an application enables |
| the application to configure the embedded {productName} to suit the |
| application's requirements. For example, an application can run the |
| required `asadmin` commands to create a JDBC technology connection to a |
| database. |
| |
| For more information about configuring embedded {productName}, see |
| the link:administration-guide.html#GSADG[{productName} Administration |
| Guide]. For detailed information about `asadmin` commands, see Section 1 |
| of the link:reference-manual.html#GSRFM[{productName} Reference |
| Manual]. |
| |
| |
| [NOTE] |
| ==== |
| Ensure that your application has started an embedded {productName} |
| before the application attempts to run `asadmin` commands. For more |
| information, see link:#gihyz[Running an Embedded {productName}]. |
| ==== |
| |
| |
| The `org.glassfish.embeddable` package contains classes that you can use |
| to run `asadmin` commands. Use the following code examples as templates |
| and change the command name, parameter names, and parameter values as |
| needed. |
| |
| [[GSESG00014]][[gjldj]] |
| Example 1-10 Running an `asadmin create-jdbc-resource` Command |
| |
| This example shows code for running an `asadmin create-jdbc-resource` |
| command. Code for creating and starting the server is not shown in this |
| example. For an example of code for creating and starting the server, |
| see link:#gilry[Example 1-4]. |
| |
| [source,java] |
| ---- |
| ... |
| import org.glassfish.embeddable.*; |
| ... |
| String command = "create-jdbc-resource"; |
| String poolid = "--connectionpoolid=DerbyPool"; |
| String dbname = "jdbc/DerbyPool"; |
| CommandRunner commandRunner = glassfish.getCommandRunner(); |
| CommandResult commandResult = commandRunner.run(command, poolid, dbname); |
| ... |
| ---- |
| |
| [[GSESG00015]][[gjlfm]] |
| Example 1-11 Running an `asadmin set-log-level` Command |
| |
| This example shows code for running an `asadmin set-log-level` command. |
| Code for creating and starting the server is not shown in this example. |
| For an example of code for creating and starting the server, see |
| link:#gilry[Example 1-4]. |
| |
| [source,java] |
| ---- |
| ... |
| import org.glassfish.embeddable.*; |
| ... |
| String command = "set-log-level"; |
| String weblevel = "jakarta.enterprise.system.container.web=FINE"; |
| CommandRunner commandRunner = glassfish.getCommandRunner(); |
| CommandResult commandResult = commandRunner.run(command, weblevel); |
| ... |
| ---- |
| |
| For another way to change log levels, see link:#gjlfe[Changing Log |
| Levels in Embedded {productName}]. |
| |
| [[gikrt]][[GSESG00061]][[sample-applications]] |
| |
| ==== Sample Applications |
| |
| [[GSESG00016]][[gionq]] |
| Example 1-12 Using an Existing `domain.xml` File and Deploying an |
| Application From an Archive File |
| |
| This example shows code for the following: |
| |
| * Using the existing file |
| `c:\myapp\embeddedserver\domains\domain1\config\domain.xml` and |
| preserving this file when the application is stopped. |
| * Deploying an application from the archive file |
| `c:\samples\simple.war`. |
| |
| [source,java] |
| ---- |
| import java.io.File; |
| import java.io.BufferedReader; |
| import org.glassfish.embeddable.*; |
| |
| public class Main { |
| |
| /** |
| * @param args the command line arguments |
| */ |
| public static void main(String[] args) { |
| File configFile = new File ("c:\\myapp\\embeddedserver\\domains\\domain1\\config\\domain.xml"); |
| File war = new File("c:\\samples\\simple.war"); |
| try { |
| GlassFishRuntime glassfishRuntime = GlassFishRuntime.bootstrap(); |
| ... |
| GlassFishProperties glassfishProperties = new GlassFishProperties(); |
| glassfishProperties.setConfigFileURI(configFile.toURI()); |
| glassfishProperties.setConfigFileReadOnly(false); |
| ... |
| GlassFish glassfish = glassfishRuntime.newGlassFish(glassfishProperties); |
| glassfish.start(); |
| |
| Deployer deployer = glassfish.getDeployer(); |
| deployer.deploy(war, "--force=true"); |
| } |
| catch (Exception e) { |
| e.printStackTrace(); |
| } |
| |
| System.out.println("Press Enter to stop server"); |
| // wait for Enter |
| new BufferedReader(new java.io.InputStreamReader(System.in)).readLine(); |
| try { |
| glassfish.dispose(); |
| glassfishRuntime.shutdown(); |
| } |
| catch (Exception e) { |
| e.printStackTrace(); |
| } |
| } |
| } |
| ---- |
| |
| [[gijhs]][[GSESG00038]][[testing-applications-with-the-maven-plug-in-for-embedded-glassfish-server]] |
| |
| === Testing Applications with the Maven Plug-in for Embedded {productName} |
| |
| If you are using http://maven.apache.org/[Apache Maven] |
| (`http://maven.apache.org/`), the plug-in for embedded {productName} |
| simplifies the testing of applications. This plug-in enables you to |
| build and start an unpackaged application with a single Maven goal. |
| |
| The following topics are addressed here: |
| |
| * link:#gihus[To Set Up Your Maven Environment] |
| * link:#giivt[To Build and Start an Application From Maven] |
| * link:#gijly[To Stop Embedded {productName}] |
| * link:#gijjn[To Redeploy an Application That Was Built and Started From Maven] |
| * link:#gjkps[Maven Goals for Embedded {productName}] |
| |
| Predefined Maven goals for embedded {productName} are described in |
| link:#gjkps[Maven Goals for Embedded {productName}]. |
| |
| To use Maven with Embedded {productName} and the EJB 3.1 Embeddable |
| API, see link:#gjxff[Using Maven with the EJB 3.1 Embeddable API and |
| Embedded {productName}]. |
| |
| [[gihus]][[GSESG00022]][[to-set-up-your-maven-environment]] |
| |
| ==== To Set Up Your Maven Environment |
| |
| Setting up your Maven environment enables Maven to download the required |
| embedded {productName} distribution file when you build your project. |
| Setting up your Maven environment also identifies the plug-in that |
| enables you to build and start an unpackaged application with a single |
| Maven goal. |
| |
| [[sthref8]] |
| |
| Before You Begin |
| |
| Ensure that http://maven.apache.org/[Apache Maven] |
| (`http://maven.apache.org/`) is installed. |
| |
| 1. Identify the Maven plug-in for embedded {productName}. |
| + |
| Add the following `plugin` element to your POM file: |
| + |
| [source,xml] |
| ---- |
| ... |
| ... |
| <plugins> |
| ... |
| <plugin> |
| <groupId>org.glassfish</groupId> |
| <artifactId>maven-embedded-glassfish-plugin</artifactId> |
| <version>version</version> |
| </plugin> |
| ... |
| </plugins> |
| ... |
| ---- |
| version:: |
| The version to use. The version of the final promoted build for this |
| release is `3.1.1`. The Maven plug-in is not bound to a specific version |
| of {productName}. You can specify the version you want to use. If |
| no version is specified, a default version is used. |
| |
| 2. Configure the `embedded-glassfish` goal prefix, the application |
| name, and other standard settings. |
| + |
| Add the following `configuration` element to your POM file: |
| + |
| [source,xml] |
| ---- |
| ... |
| <plugins> |
| ... |
| <plugin> |
| ... |
| <configuration> |
| <goalPrefix>embedded-glassfish</goalPrefix> |
| ... |
| <app>target/test.war</app> |
| <port>8080</port> |
| <contextRoot>test</contextRoot> |
| <autoDelete>true</autoDelete> |
| ... |
| </configuration> |
| ... |
| </plugin> |
| ... |
| </plugins> |
| ... |
| ---- |
| app:: |
| In the app parameter, substitute the archive file or directory for your |
| application. The optional port, contextRoot, and autoDelete parameters |
| show example values. For details, see link:#gjkps[Maven Goals for |
| Embedded {productName}]. |
| |
| 3. Perform advanced plug-in configuration. This step is optional. |
| Add the following `configuration` element to your POM file: |
| + |
| [source,xml] |
| ---- |
| ... |
| <plugins> |
| ... |
| <plugin> |
| ... |
| <configuration> |
| <goalPrefix>embedded-glassfish</goalPrefix> |
| <app>target/test.war</app> |
| <name>test</name> |
| <contextRoot>test</contextRoot> |
| <ports> |
| <http-listener>8080</http-listener> |
| <https-listener>8181</https-listener> |
| </ports> |
| <bootstrapProperties> |
| <property>test_key=test_value</property> |
| </bootstrapProperties> |
| <bootstrapPropertiesFile>bootstrap.properties</bootstrapPropertiesFile> |
| <glassfishProperties> |
| <property>embedded-glassfish-config.server.jms-service.jms-host.default_JMS_host.port=17676</property> |
| </glassfishProperties> |
| <glassfishPropertiesFile>glassfish.properties</glassfishPropertiesFile> |
| <systemProperties> |
| <property>ANTLR_USE_DIRECT_CLASS_LOADING=true</property> |
| </systemProperties> |
| <systemPropertiesFile>system.properties</systemPropertiesFile> |
| </configuration> |
| <executions> |
| <execution> |
| <goals> |
| <goal>start</goal> |
| <goal>deploy</goal> |
| <goal>undeploy</goal> |
| <goal>stop</goal> |
| </goals> |
| </execution> |
| </executions> |
| </plugin> |
| ... |
| </plugins> |
| ... |
| ---- |
| |
| 4. Configure Maven goals. |
| Add `execution` elements to your POM file: |
| + |
| [source,xml] |
| ---- |
| ... |
| <plugins> |
| ... |
| <plugin> |
| ... |
| <executions> |
| <execution> |
| <phase>install</phase> |
| <goals> |
| <goal>goal</goal> |
| </goals> |
| </execution> |
| </executions> |
| ... |
| </plugin> |
| ... |
| </plugins> |
| ... |
| ---- |
| goal:: |
| The goal to use. See link:#gjkps[Maven Goals for Embedded {productName}]. |
| |
| 5. Configure the repository. |
| Add the following `repository` element to your POM file: |
| + |
| [source,xml] |
| ---- |
| <pluginRepositories> |
| <pluginRepository> |
| <id>maven2-repository.dev.java.net</id> |
| <name>Java.net Repository for Maven</name> |
| <url>http://download.java.net/maven/glassfish/</url> |
| </pluginRepository> |
| </pluginRepositories> |
| ---- |
| |
| [[GSESG00017]][[gjkod]] |
| Example 1-13 POM File for Configuring Maven to Use Embedded {productName} |
| |
| This example shows a POM file for configuring Maven to use embedded {productName}. |
| |
| [source,xml] |
| ---- |
| <?xml version="1.0" encoding="UTF-8"?> |
| <!-- |
| Line breaks in the following element are for readability purposes only |
| --> |
| <project xmlns="http://maven.apache.org/POM/4.0.0" |
| xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
| xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 |
| http://maven.apache.org/maven-v4_0_0.xsd"> |
| |
| <modelVersion>4.0.0</modelVersion> |
| <groupId>org.glassfish</groupId> |
| <artifactId>maven-glassfish-plugin-tester</artifactId> |
| <version>3.1</version> |
| <name>Maven test</name> |
| <build> |
| <plugins> |
| <plugin> |
| <groupId>org.glassfish</groupId> |
| <artifactId>maven-embedded-glassfish-plugin</artifactId> |
| <version>3.1</version> |
| <configuration> |
| <goalPrefix>embedded-glassfish</goalPrefix> |
| <app>target/test.war</app> |
| <port>8080</port> |
| <contextRoot>test</contextRoot> |
| <autoDelete>true</autoDelete> |
| </configuration> |
| <executions> |
| <execution> |
| <phase>install</phase> |
| <goals> |
| <goal>run</goal> |
| </goals> |
| </execution> |
| </executions> |
| </plugin> |
| </plugins> |
| </build> |
| <pluginRepositories> |
| <pluginRepository> |
| <id>maven2-repository.dev.java.net</id> |
| <name>Java.net Repository for Maven</name> |
| <url>http://download.java.net/maven/glassfish/</url> |
| </pluginRepository> |
| </pluginRepositories> |
| </project> |
| ---- |
| |
| [[giivt]][[GSESG00023]][[to-build-and-start-an-application-from-maven]] |
| |
| ==== To Build and Start an Application From Maven |
| |
| If you are using Maven to manage the development of your application, |
| you can use a Maven goal to build and start the application in embedded |
| {productName}. |
| |
| [[sthref9]] |
| |
| Before You Begin |
| |
| Ensure that your Maven environment is configured, as described in |
| link:#gihus[To Set Up Your Maven Environment]. |
| |
| 1. Include the path to the Maven executable file `mvn` in your path |
| statement. |
| 2. Ensure that the `JAVA_HOME` environment variable is defined. |
| 3. Create a directory for the Maven project for your application. |
| 4. Copy to your project directory the POM file that you created in |
| link:#gihus[To Set Up Your Maven Environment]. |
| 5. Run the following command in your project directory: |
| + |
| [source] |
| ---- |
| mvn install |
| ---- |
| This command performs the following actions: |
| * Installs the Maven repository in a directory named `.m2` under your |
| home directory. |
| * Starts Embedded {productName}. |
| * Deploys your application. |
| + |
| The application continues to run in Embedded {productName} until |
| Embedded {productName} is stopped. |
| |
| [[gijly]][[GSESG00024]][[to-stop-embedded-glassfish-server]] |
| |
| ==== To Stop Embedded {productName} |
| |
| 1. Change to the root directory of the Maven project for your |
| application. |
| 2. Run the Maven goal to stop the application in embedded {productName}. |
| + |
| [source] |
| ---- |
| mvn embedded-glassfish:stop |
| ---- |
| This runs the `stop` method of the `GlassFish` object and any other |
| methods that are required to shut down the server in an orderly fashion. |
| See link:#gihzy[Stopping an Embedded {productName} From an |
| Application]. |
| |
| [[gijjn]][[GSESG00025]][[to-redeploy-an-application-that-was-built-and-started-from-maven]] |
| |
| ==== To Redeploy an Application That Was Built and Started From Maven |
| |
| An application that was built and started from Maven continues to run in |
| Embedded {productName} until Embedded {productName} is stopped. |
| While the application is running, you can test changes to the |
| application by redeploying it. |
| |
| To redeploy, in the window from where the application was built and |
| started from Maven, press Enter. |
| |
| [[gjkps]][[GSESG00062]][[maven-goals-for-embedded-glassfish-server]] |
| |
| ==== Maven Goals for Embedded {productName} |
| |
| You can use the following Maven goals to test your applications with |
| embedded {productName}: |
| |
| * link:#gjkxo[`embedded-glassfish:run` Goal] |
| * link:#gjkwy[`embedded-glassfish:start` Goal] |
| * link:#gjkvc[`embedded-glassfish:deploy` Goal] |
| * link:#gjkvg[`embedded-glassfish:undeploy` Goal] |
| * link:#gjkyl[`embedded-glassfish:stop` Goal] |
| * link:#gjkxq[`embedded-glassfish:admin` Goal] |
| |
| [[gjkxo]][[GSESG00048]][[embedded-glassfishrun-goal]] |
| |
| ===== `embedded-glassfish:run` Goal |
| |
| This goal starts the server and deploys an application. You can redeploy |
| if you change the application. The application can be a packaged archive |
| or a directory that contains an exploded application. You can set the |
| parameters described in the following table. |
| |
| [[sthref10]][[gjkws]] |
| |
| Table 1-5 `embedded-glassfish:run` Parameters |
| |
| [width="100%",cols="<18%,<42%,<40%",options="header",] |
| |=== |
| |Parameter |Default |Description |
| |app |None |The archive file or directory for the application to be deployed. |
| |
| |serverID |`maven` |(optional) The ID of the server to start. |
| |
| |containerType |`all` |(optional) The container to start: `web`, `ejb`, `jpa`, or `all`. |
| |
| |installRoot |None |(optional) The link:#gikqf[Installation Root Directory]. |
| |
| |instanceRoot a| |
| In order of precedence: |
| |
| * `glassfish.embedded.tmpdir` property value specified in `GlassFishProperties` object |
| * `glassfish.embedded.tmpdir` system property value |
| * `java.io.tmp` system property value |
| * as-install``/domains/domain1`` if a nonembedded installation is referenced |
| |
| |(optional) The link:#gikvf[Instance Root Directory] |
| |
| |configFile |domain-dir``/config/domain.xml`` |(optional) The |
| configuration file. |
| |
| |port |None. Must be set explicitly or defined in the configuration |
| file. |The HTTP or HTTPS port. |
| |
| |name a| |
| In order of precedence: |
| |
| * The `application-name` or `module-name` in the deployment descriptor. |
| * The name of the archive file without the extension or the directory name. |
| |
| For more information, see "link:application-deployment-guide/overview.html#GSDPG00323[Naming Standards]" in |
| {productName} Application Deployment Guide. |
| |
| |(optional) The name of the application. |
| |
| |contextRoot |The name of the application. |(optional) The context root |
| of the application. |
| |
| |precompileJsp |`false` |(optional) If `true`, JSP pages are precompiled |
| during deployment. |
| |
| |dbVendorName |None |(optional) The name of the database vendor for |
| which tables can be created. Allowed values are `javadb`, `db2`, |
| `mssql`, `mysql`, `oracle`, `postgresql`, `pointbase`, `derby` (also for |
| CloudScape), and `sybase`, case-insensitive. |
| |
| |createTables |Value of the `create-tables-at-deploy` attribute in |
| `sun-ejb-jar.xml`. |(optional) If `true`, creates database tables during |
| deployment for beans that are automatically mapped by the EJB container. |
| |
| |dropTables |Value of the `drop-tables-at-undeploy` attribute in |
| `sun-ejb-jar.xml`. a| |
| (optional) If `true`, and deployment and undeployment occur in the same |
| JVM session, database tables that were automatically created when the |
| bean(s) were deployed are dropped when the bean(s) are undeployed. |
| |
| If `true`, the name parameter must be specified or tables may not be |
| dropped. |
| |
| |autoDelete |`false` a| |
| (optional) If `true`, deletes the contents of the link:#gikvf[Instance |
| Root Directory] when the server is stopped. |
| |
| Caution: Do not set `autoDelete` to `true` if you are using |
| `installRoot` to refer to a preexisting {productName} installation. |
| |
| |=== |
| |
| |
| [[gjkwy]][[GSESG00049]][[embedded-glassfishstart-goal]] |
| |
| ===== `embedded-glassfish:start` Goal |
| |
| This goal starts the server. You can set the parameters described in the |
| following table. |
| |
| [[sthref11]][[gjkye]] |
| |
| Table 1-6 `embedded-glassfish:start` Parameters |
| |
| [width="100%",cols="<17%,<38%,<45%",options="header",] |
| |=== |
| |Parameter |Default |Description |
| |serverID |`maven` |(optional) The ID of the server to start. |
| |
| |containerType |`all` |(optional) The container to start: `web`, `ejb`, |
| `jpa`, or `all`. |
| |
| |installRoot |None |(optional) The link:#gikqf[Installation Root |
| Directory]. |
| |
| |instanceRoot a| |
| In order of precedence: |
| |
| * `glassfish.embedded.tmpdir` system property value |
| * `java.io.tmpdir` system property value |
| * as-install``/domains/domain1`` |
| |
| |(optional) The link:#gikvf[Instance Root Directory] |
| |
| |configFile |domain-dir`/config/domain.xml` |(optional) The |
| configuration file. |
| |
| |port |None. Must be set explicitly or defined in the configuration |
| file. |The HTTP or HTTPS port. |
| |
| |autoDelete |`false` a| |
| (optional) If `true`, deletes the contents of the link:#gikvf[Instance |
| Root Directory] when the server is stopped. |
| |
| Caution: Do not set `autoDelete` to `true` if you are using |
| `installRoot` to refer to a preexisting {productName} installation. |
| |
| |=== |
| |
| |
| [[gjkvc]][[GSESG00050]][[embedded-glassfishdeploy-goal]] |
| |
| ===== `embedded-glassfish:deploy` Goal |
| |
| This goal deploys an application. You can redeploy if you change the |
| application. The application can be a packaged archive or a directory |
| that contains an exploded application. You can set the parameters |
| described in the following table. |
| |
| [[sthref12]][[gjkvv]] |
| |
| Table 1-7 `embedded-glassfish:deploy` Parameters |
| |
| [width="100%",cols="<18%,<39%,<43%",options="header",] |
| |=== |
| |Parameter |Default |Description |
| |app |None |The archive file or directory for the application to be |
| deployed. |
| |
| |serverID |`maven` |(optional) The ID of the server to start. |
| |
| |name a| |
| In order of precedence: |
| |
| * The `application-name` or `module-name` in the deployment descriptor. |
| * The name of the archive file without the extension or the directory |
| name. |
| |
| For more information, see "link:application-deployment-guide/overview.html#GSDPG00323[Naming Standards]" in |
| {productName} Application Deployment Guide. |
| |
| |(optional) The name of the application. |
| |
| |contextRoot |The name of the application. |(optional) The context root |
| of the application. |
| |
| |precompileJsp |`false` |(optional) If `true`, JSP pages are precompiled |
| during deployment. |
| |
| |dbVendorName |None |(optional) The name of the database vendor for |
| which tables can be created. Allowed values are `javadb`, `db2`, |
| `mssql`, `oracle`, `postgresql`, `pointbase`, `derby` (also for |
| CloudScape), and `sybase`, case-insensitive. |
| |
| |createTables |Value of the `create-tables-at-deploy` attribute in |
| `sun-ejb-jar.xml`. |(optional) If `true`, creates database tables during |
| deployment for beans that are automatically mapped by the EJB container. |
| |=== |
| |
| |
| [[gjkvg]][[GSESG00051]][[embedded-glassfishundeploy-goal]] |
| |
| ===== `embedded-glassfish:undeploy` Goal |
| |
| |
| [NOTE] |
| ==== |
| If you reference a nonembedded {productName} installation using the |
| `glassfish-embedded-static-shell.jar` file and do not undeploy your |
| applications in the same server life cycle in which you deployed them, |
| expanded archives for these applications remain under the |
| domain-dir``/applications`` directory. |
| ==== |
| |
| |
| This goal undeploys an application. You can set the parameters described |
| in the following table. |
| |
| [[sthref13]][[gjkxf]] |
| |
| Table 1-8 `embedded-glassfish:undeploy` Parameters |
| |
| [width="100%",cols="<14%,<34%,<52%",options="header",] |
| |=== |
| |Parameter |Default |Description |
| |name |If the name is omitted, all applications are undeployed. |The |
| name of the application. |
| |
| |serverID |`maven` |(optional) The ID of the server to start. |
| |
| |dropTables |Value of the `drop-tables-at-undeploy` attribute in |
| `sun-ejb-jar.xml`. a| |
| (optional) If `true`, and deployment and undeployment occur in the same |
| JVM session, database tables that were automatically created when the |
| bean(s) were deployed are dropped when the bean(s) are undeployed. |
| |
| If `true`, the name parameter must be specified or tables may not be |
| dropped. |
| |
| |cascade |`false` a| |
| (optional) If `true`, deletes all connection pools and connector |
| resources associated with the resource adapter being undeployed. |
| |
| If `false`, undeployment fails if any pools or resources are still |
| associated with the resource adapter. |
| |
| This attribute is applicable to connectors (resource adapters) and |
| applications with connector modules. |
| |
| |=== |
| |
| |
| [[gjkyl]][[GSESG00052]][[embedded-glassfishstop-goal]] |
| |
| ===== `embedded-glassfish:stop` Goal |
| |
| This goal stops the server. You can set the parameters described in the |
| following table. |
| |
| [[sthref14]][[gjkwm]] |
| |
| Table 1-9 `embedded-glassfish:stop` Parameters |
| |
| [width="100%",cols="<16%,<17%,<67%",options="header",] |
| |=== |
| |Parameter |Default |Description |
| |serverID |`maven` |(optional) The ID of the server to stop. |
| |=== |
| |
| |
| [[gjkxq]][[GSESG00053]][[embedded-glassfishadmin-goal]] |
| |
| ===== `embedded-glassfish:admin` Goal |
| |
| This goal runs a {productName} administration command. You must use |
| either the command and commandParameters parameters in combination or |
| the commandLine parameter. For more information about administration |
| commands, see the link:reference-manual.html#GSRFM[{productName} |
| Reference Manual]. You can set the parameters described in the following |
| table. |
| |
| [[sthref15]][[gjkwe]] |
| |
| Table 1-10 `embedded-glassfish:start` Parameters |
| |
| [width="100%",cols="<24%,<10%,<66%",options="header",] |
| |=== |
| |Parameter |Default |Description |
| |serverID |`maven` |(optional) The ID of the server on which to run the |
| command. |
| |
| |command |None |The name of the command, for example |
| `createJdbcResource`. |
| |
| |commandParameters |None |A map of the command parameters. See the |
| `org.glassfish.embeddable.admin.CommandParameters` class at |
| `http://glassfish.java.net/nonav/docs/v3/api/`. |
| |
| |commandLine |None |The full `asadmin` syntax of the command. |
| |=== |
| |
| |
| [[gjlde]][[GSESG00039]][[using-the-ejb-3.1-embeddable-api-with-embedded-glassfish-server]] |
| |
| === Using the EJB 3.1 Embeddable API with Embedded {productName} |
| |
| The EJB 3.1 Embeddable API is designed for unit testing of EJB modules. |
| You must use this API with a pre-installed, nonembedded {productName} |
| instance. However, you can take advantage of Embedded {productName}'s |
| ease of use by referencing the nonembedded {productName} instance |
| with the `glassfish-embedded-static-shell.jar` file. |
| |
| Embedded {productName} is not related to the EJB 3.1 Embeddable API, |
| but you can use these APIs together. |
| |
| The Maven plug-in does not apply to embeddable EJB applications. |
| However, you can use Maven with the POM file shown in link:#gjxff[Using |
| Maven with the EJB 3.1 Embeddable API and Embedded {productName}]. |
| |
| The EJB 3.1 Embeddable API is described in |
| http://jcp.org/en/jsr/detail?id=318[Java Specification Request (JSR) |
| 318] (`http://jcp.org/en/jsr/detail?id=318`). An `ejb-embedded` sample |
| is included in the samples available at |
| http://www.oracle.com/technetwork/java/javaee/downloads/index.html[Java |
| EE 7 Downloads] |
| (`http://www.oracle.com/technetwork/java/javaee/downloads/index.html`) |
| or |
| http://www.oracle.com/technetwork/java/javaee/documentation/index.html[Code |
| Samples] |
| (`http://www.oracle.com/technetwork/java/javaee/documentation/index.html`). |
| |
| The EJB 3.1 Embeddable API supports all EJB 3.1 Lite features with |
| addition of the EJB timer service and testing of EJB modules packaged in |
| a WAR file. |
| |
| For EJB modules in a WAR file (or an exploded directory), if a web |
| application has one EJB module, and there are no other EJB modules in |
| the classpath, those entries (libraries) are ignored. If there are other |
| EJB modules, a temporary EAR file is created. For EJB modules in a WAR |
| file to be tested, the client code must use EJB modules with interfaces |
| or without annotations. Those EJB modules are not part of the classpath |
| and can't be loaded by the client class loader. |
| |
| The following topics are addressed here: |
| |
| * link:#gjlcr[To Use the EJB 3.1 Embeddable API with Embedded {productName}] |
| * link:#gksnv[EJB 3.1 Embeddable API Properties] |
| * link:#gjxff[Using Maven with the EJB 3.1 Embeddable API and Embedded |
| {productName}] |
| |
| [[gjlcr]][[GSESG00026]][[to-use-the-ejb-3.1-embeddable-api-with-embedded-glassfish-server]] |
| |
| ==== To Use the EJB 3.1 Embeddable API with Embedded {productName} |
| |
| 1. To specify {productName} as the Container Provider, include |
| `glassfish-embedded-static-shell.jar` or `glassfish-embedded-all.jar` in |
| the class path of your embeddable EJB application. |
| + |
| Reference the `glassfish-embedded-static-shell.jar` file from the |
| as-install``/lib/embedded`` directory of a {productName} installation. |
| Do not move this file or it will not work. |
| + |
| See link:#giide[Setting the Class Path] and Section 22.3.3 of the EJB |
| 3.1 Specification, Embeddable Container Bootstrapping. |
| 2. Configure any required resources. |
| + |
| For more information about configuring resources, see the Administration |
| Console Online Help or "link:administration-guide.html#GSADG00298[Resources and Services |
| Administration]" in {productName} Administration |
| Guide. The `jdbc/__default` Java DB database is preconfigured with all |
| distributions of {productName}. However, if you are using |
| `glassfish-embedded-static-shell.jar`, you must start the database |
| manually. |
| + |
| If your embeddable EJB application uses Java Persistence, you do not |
| need to specify a JDBC resource. See link:#gksmw[Default Java |
| Persistence Data Source for Embedded {productName}]. |
| 3. Invoke one of the `createEJBContainer` methods. |
| + |
| |
| [NOTE] |
| ==== |
| Do not deploy your embeddable EJB application or any of its dependent |
| Jakarta EE modules before invoking one of the `createEJBContainer` methods. |
| These methods perform deployment in the background and do not load |
| previously deployed applications or modules. |
| ==== |
| |
| 4. To change the link:#gikvf[Instance Root Directory], set the |
| `org.glassfish.ejb.embedded.glassfish.instance.root` system property |
| value by using the `createEJBContainer``(Map<?, ?> properties)` method. |
| + |
| The default link:#gikvf[Instance Root Directory] location is |
| as-install``/domains/domain1`` if a nonembedded installation is |
| referenced. This system property applies only to embeddable EJB |
| applications used with nonembedded {productName}. |
| 5. Close the EJB container properly to release all acquired resources |
| and threads. |
| |
| [[gksnv]][[GSESG00063]][[ejb-3.1-embeddable-api-properties]] |
| |
| ==== EJB 3.1 Embeddable API Properties |
| |
| Properties that can be passed to the |
| `EJBContainer#createEJBContainer(Properties)` method are summarized in |
| the following table. All properties are in the |
| `org.glassfish.ejb.embedded.glassfish` package. For example, the full |
| name of the `installation.root` property is |
| `org.glassfish.ejb.embedded.glassfish.installation.root`. |
| |
| [[sthref16]][[gksop]] |
| |
| Table 1-11 EJB 3.1 Embeddable API Properties |
| |
| [width="100%",cols="<30%,<39%,<31%",options="header",] |
| |=== |
| |Property |Default |Description |
| |`installation.root` |{productName} installation location from which |
| `glassfish-embedded-static-shell.jar` is referenced |The |
| link:#gikqf[Installation Root Directory]. |
| |
| |`instance.root` a| |
| In order of precedence: |
| |
| * `glassfish.embedded.tmpdir` property value specified in |
| `GlassFishProperties` object |
| * `glassfish.embedded.tmpdir` system property value |
| * `java.io.tmp` system property value |
| * as-install``/domains/domain1`` if a nonembedded installation is referenced |
| |
| |The link:#gikvf[Instance Root Directory]. |
| |
| |`configuration.file` |domain-dir`/config/domain.xml` |The configuration |
| file. |
| |
| |`keep-temporary-files` |`false` |If `true`, keeps temporary files |
| (exploded EAR file and configuration file) created by the embedded EJB |
| container when Embedded {productName} is stopped. |
| |
| |`web.http.port` |None |Enables the web container if set. Needed for |
| testing web services in a WAR file. The value is ignored and can be an |
| empty string. |
| |
| |`instance.reuse` |`false` |If `true`, no changes are made to the |
| existing configuration file, and a temporary server instance is not |
| created for the embedded run. Instead, execution happens against the |
| existing server instance. Do not use this option if the reused server |
| instance could be in use by the running nonembedded {productName}. |
| |
| |`skip-client-modules` |`false` |If `true`, omits modules from the |
| classpath if they are not specified using `EJBContainer.MODULES` and |
| have a manifest file with a `Main-Class` attribute. |
| |=== |
| |
| |
| [[gjxff]][[GSESG00064]][[using-maven-with-the-ejb-3.1-embeddable-api-and-embedded-glassfish-server]] |
| |
| ==== Using Maven with the EJB 3.1 Embeddable API and Embedded {productName} |
| |
| When using Maven with the EJB 3.1 Embeddable API and Embedded {productName}, you cannot use the features of the Maven plug-in. You must start |
| and stop Embedded {productName} manually or programmatically outside |
| of Maven. |
| |
| [[GSESG00018]][[gjxds]] |
| Example 1-14 Maven POM File for Using the EJB 3.1 Embeddable API with |
| Embedded {productName} |
| |
| This example shows a POM file for configuring Maven to use the EJB 3.1 |
| Embeddable API with Embedded {productName}. |
| |
| [source,xml] |
| ---- |
| <!-- |
| Line breaks in the following element are for readability purposes only |
| --> |
| <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 |
| http://maven.apache.org/maven-v4_0_0.xsd"> |
| <modelVersion>4.0.0</modelVersion> |
| <groupId>org.glassfish</groupId> |
| <artifactId>my-ejb-app-tester</artifactId> |
| <version>3.1</version> |
| <name>Maven test</name> |
| <dependencies> |
| <dependency> |
| <groupId>org.glassfish.extras</groupId> |
| <artifactId>glassfish-embedded-static-shell</artifactId> |
| <version>${project.version}</version> |
| <scope>system</scope> |
| <systemPath> |
| ${env.S1AS_HOME}/lib/embedded/glassfish-embedded-static-shell.jar |
| </systemPath> |
| </dependency> |
| <!-- |
| The javaee-api is stripped of any code and is just used to compile your |
| application. The scope provided in Maven means that it is used for compiling, |
| but is also available when testing. For this reason, the javaee-api needs to |
| be below the embedded Glassfish dependency. The javaee-api can actually be |
| omitted when the embedded Glassfish dependency is included, but to keep your |
| project Java-EE 6 rather than GlassFish 3, specification is important. |
| --> |
| <dependency> |
| <groupId>javax</groupId> |
| <artifactId>javaee-api</artifactId> |
| <version>6.0</version> |
| <scope>provided</scope> |
| </dependency> |
| </dependencies> |
| <pluginRepositories> |
| <pluginRepository> |
| <id>maven2-repository.dev.java.net</id> |
| <name>Java.net Repository for Maven</name> |
| <url>http://download.java.net/maven/glassfish/</url> |
| </pluginRepository> |
| </pluginRepositories> |
| </project> |
| ---- |
| |
| If you are using `glassfish-embedded-static-shell.jar`, you can omit the |
| `dependency` element with the `javaee-api` `artifactId` and the |
| `pluginRepositories` element. |
| |
| Set the `S1AS_HOME` environment variable to the installation root |
| directory before running the `mvn clean verify` command. |
| |
| [[gjlfe]][[GSESG00040]][[changing-log-levels-in-embedded-glassfish-server]] |
| |
| === Changing Log Levels in Embedded {productName} |
| |
| To change log levels in Embedded {productName}, you can follow the |
| steps in this section or you can use the Embedded Server API as shown in |
| link:#gjlfm[Example 1-11]. For more information about {productName} |
| logging, see "link:administration-guide/logging.html#GSADG00010[Administering the Logging Service]" in |
| {productName} Administration Guide. |
| |
| You can change log levels in Embedded {productName} in either of the |
| following ways: |
| |
| * Using the {productName} Embedded Server API |
| * Creating a custom logging configuration file |
| |
| Both these ways use logger names. For a list of logger names, use the |
| link:reference-manual/list-log-levels.html#GSRFM00183[`list-log-levels`] subcommand. |
| |
| [[GSESG00019]][[gkrhh]] |
| Example 1-15 Using the {productName} Embedded Server API |
| |
| This example shows how to set log levels using the `getLogger` method in |
| the API. |
| |
| [source,java] |
| ---- |
| import org.glassfish.embeddable.*; |
| |
| // Create Embedded GlassFish |
| GlassFish glassfish = GlassFishRuntime.bootstrap().newGlassFish(); |
| |
| // Set the log levels. For example, set 'deployment' and 'server' log levels to FINEST |
| Logger.getLogger("").getHandlers()[0].setLevel(Level.FINEST); |
| Logger.getLogger("jakarta.enterprise.system.tools.deployment").setLevel(Level.FINEST); |
| Logger.getLogger("jakarta.enterprise.system").setLevel(Level.FINEST); |
| |
| // Start Embedded GlassFish and deploy an application. |
| // You will see all the FINEST logs printed on the console. |
| glassfish.start(); |
| glassfish.getDeployer().deploy(new File("sample.war")); |
| |
| // Dispose Embedded GlassFish |
| glassfish.dispose(); |
| ---- |
| |
| [[GSESG00020]][[gkrgw]] |
| Example 1-16 Creating a Custom Logging Configuration File |
| |
| This example shows the contents of a custom logging configuration file, |
| `customlogging.properties`. |
| |
| [source] |
| ---- |
| handlers= java.util.logging.ConsoleHandler |
| java.util.logging.ConsoleHandler.level = FINEST |
| jakarta.enterprise.system.tools.deployment.level = FINEST |
| jakarta.enterprise.system.level = FINEST |
| ---- |
| |
| Pass the name of this custom logging configuration file to the `java` |
| command when you invoke Embedded {productName}. For example: |
| |
| [source] |
| ---- |
| java -Djava.util.logging.config.file=customlogging.properties MyEmbeddedGlassFish |
| ---- |
| |
| [[gksmw]][[GSESG00041]][[default-java-persistence-data-source-for-embedded-glassfish-server]] |
| |
| === Default Java Persistence Data Source for Embedded {productName} |
| |
| The `jdbc/__default` Java DB database is preconfigured with Embedded |
| {productName}. It is used when an application is deployed in Embedded |
| {productName} that uses Java Persistence but doesn't specify a data |
| source. Embedded {productName} uses the embedded Java DB database |
| created in a temporary domain that is destroyed when Embedded {productName} is stopped. You can use a Java DB database configured with |
| nonembedded {productName} if you explicitly specify the instance root |
| directory or the configuration file. |
| |
| By default, weaving is enabled when the {productName} Embedded Server |
| API is used. To disable weaving, set the |
| `org.glassfish.persistence.embedded.weaving.enabled` property to |
| `false`. |
| |
| [[gihxf]][[GSESG00042]][[restrictions-for-embedded-glassfish-server]] |
| |
| === Restrictions for Embedded {productName} |
| |
| The `glassfish-embedded-web.jar` file for embedded {productName} |
| supports only these features of nonembedded {productName}: |
| |
| * The following web technologies of the Jakarta EE platform: |
| |
| ** Java Servlet API |
| |
| ** JavaServer Pages (JSP) technology |
| |
| ** JavaServer Faces technology |
| * JDBC-technology connection pooling |
| * Java Persistence API |
| * Java Transaction API |
| * Java Transaction Service |
| |
| The `glassfish-embedded-all.jar` and |
| `glassfish-embedded-static-shell.jar` files support all features of |
| nonembedded {productName} with these exceptions: |
| |
| * Installers |
| * Administration Console |
| * Update Tool |
| * Apache Felix OSGi framework |
| * The Maven plug-in for embedded {productName} does not support |
| application clients. |
| * Applications that require ports for communication, such as remote EJB |
| components, do not work with the EJB 3.1 Embeddable API running with |
| embedded {productName} if a nonembedded {productName} is running |
| in parallel. |
| |
| Embedded {productName} requires no installation or configuration. As |
| a result, the following files and directories are absent from the file |
| system until embedded {productName} is started: |
| |
| * `default-web.xml` file |
| * `domain.xml` file |
| * Applications directory |
| * Instance root directory |
| |
| When embedded {productName} is started, the base installation |
| directory that {productName} uses depends on the options with which |
| {productName} is started. If necessary, embedded {productName} |
| creates a base installation directory. Embedded {productName} then |
| copies the following directories and their contents from the Java |
| archive (JAR) file in which embedded {productName} is distributed: |
| |
| * `domains` |
| * `lib` |
| |
| If necessary, {productName} also creates an instance root directory. |