1

サーバー上のGlassfish v2.1.1で実行されているアプリケーションがあり、そのポータブル(インストール不要)バージョンを生成しようとしています。別のコンテナー (Glassfish 3、Tomcat など) に移動したくありません。新しい問題やバグが発生するからです。私は同じ容器に固執することを好みます。

Glassfish ディストリビューションの分解を開始しましたが、インストールが必要であることを示唆するパスへの参照がいくつかあります。v2.1.1 に基づいて移植可能な Glassfish の生成に成功した人はいますか?

4

1 に答える 1

-1

GlassFish を埋め込み、組み込み GlassFish にアプリケーションをデプロイする基本的な例:

これらの例は、CLASSPATH で次のいずれかの jar を使用して実行できます。

完全なプロファイル uber jar : http://download.java.net/maven/glassfish/org/glassfish/extras/glassfish-embedded-all/3.1/glassfish-embedded-all-3.1.jar Web プロファイル uber jar: http:/ /download.java.net/maven/glassfish/org/glassfish/extras/glassfish-embedded-web/3.1/glassfish-embedded-web-3.1.jar インストールされた GlassFish のシェル jar : $GF_INSTALLATION/lib/embedded/glassfish-embedded-静的シェル.jar

上記の jar ファイルのいずれかを取得したら、GlassFish をアプリケーションに埋め込むことができます。

import org.glassfish.embeddable.*;

/** Create and start GlassFish */
GlassFish glassfish = GlassFishRuntime.bootstrap().newGlassFish();
glassfish.start();

GlassFish の埋め込み中に 8080 Web コンテナー ポートを開始したい場合、次のようにする必要があります。

import org.glassfish.embeddable.*;

/** Create and start GlassFish which listens at 8080 http port */
GlassFishProperties gfProps = new GlassFishProperties();
gfProps.setPort("http-listener", 8080); // refer JavaDocs for the details of this API.

GlassFish glassfish = GlassFishRuntime.bootstrap().newGlassFish(gfProps);
glassfish.start();

GlassFish を埋め込んで実行したら、以下のコードを使用して、ビルド済みの Java EE アーカイブをデプロイできます。

import org.glassfish.embeddable.*;

// Obtain the deployer from the glassfish which is embedded via the piece of code     above.
Deployer deployer = glassfish.getDeployer();

// syntax of deployment params are same as how they are passed to 'asadmin deploy'  command.
deployer.deploy(new File("simple.war"), "--contextroot=test", "--name=test", "--force=true");

// if you have no deployment params to pass, then simply do this:
deployer.deploy(new File("simple.war")); 

アーカイブが事前に構築されておらず、コンポーネントが複数のディレクトリに散らばっている場合は、散らばったアーカイブ API の使用に興味があるかもしれません。

import org.glassfish.embeddable.*;
import org.glassfish.embeddable.archive.*;

Deployer deployer = glassfish.getDeployer();

// Create a scattered web application.
ScatteredArchive archive = new ScatteredArchive("testapp", ScatteredArchive.Type.WAR);
// target/classes directory contains my complied servlets
archive.addClassPath(new File("target", "classes"));
// resources/sun-web.xml is my WEB-INF/sun-web.xml
archive.addMetadata(new File("resources", "sun-web.xml"));
// resources/MyLogFactory is my META-INF/services/org.apache.commons.logging.LogFactory
archive.addMetadata(new File("resources", "MyLogFactory"), "META-     INF/services/org.apache.commons.logging.LogFactory");

deployer.deploy(archive.toURI())

同様に、散在するエンタープライズ アプリケーション (EAR タイプ) は、次のようにデプロイできます。

import org.glassfish.embeddable.*;
import org.glassfish.embeddable.archive.*;

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");

deployer.deploy(archive.toURI())

最後に、アプリケーションの終わりに向かって、埋め込まれた GlassFish を停止/破棄したいと考えています。

import org.glassfish.embeddable.*;

/** Stop GlassFish */
glassfish.stop(); // you can start it again.

/** Dispose GlassFish */
glassfish.dispose(); // you can not start it again. But you can embed a fresh glassfish     with GlassFishRuntime.bootstrap().newGlassFish()
于 2012-06-15T06:09:00.137 に答える