| 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. |