1

Glassfish組み込みAPIを使用して、jpa-ejb-webプロジェクトをスタンドアロンアプリケーションとしてパッケージ化できるようにしたいと思います。

JPAレイヤーを使用するには、sun-resource.xml構成をデプロイする必要があります。これは、asadminコマンド add-resources path\to\sun-resources.xmlで実行できるはずです。私はそれを行うためにこのコードを持っています:

    String command = "add-resources";
    ParameterMap params = new ParameterMap();
    params.add("", "...\sun-resources.xml" );
    CommandRunner runner = server.getHabitat().getComponent(CommandRunner.class);
    ActionReport report = server.getHabitat().getComponent(ActionReport.class);
    runner.getCommandInvocation(command, report).parameters(params).execute();

しかし、Glassfishはそれを次のように拒否します:

15-Jul-2010 16:34:12 org.glassfish.admin.cli.resources.AddResources execute

重大:リソースの追加で問題が発生しました

java.lang.Exception: ...\gfembed6930201441546233570tmp\lib\dtds\sun-resources_1_4.dtd (The system cannot find the path specified)
        at org.glassfish.admin.cli.resources.ResourcesXMLParser.initProperties(ResourcesXMLParser.java:163)
        at org.glassfish.admin.cli.resources.ResourcesXMLParser.<init>(ResourcesXMLParser.java:109)
        at org.glassfish.admin.cli.resources.ResourcesManager.createResources(ResourcesManager.java:67)
        at org.glassfish.admin.cli.resources.AddResources.execute(AddResources.java:106)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:305)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:320)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1176)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$900(CommandRunnerImpl.java:83)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1235)
        at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1224)
        at javaapplication4.Main.main(Main.java:55)

実際、lib指定されたパスにはディレクトリがありません...

私のコードに何か問題がありますか?(私はglassfish-embedded-all-3.0.1.jarを使用します)

ありがとう

4

2 に答える 2

1

埋め込まれたGlassfishの埋め込みファイルシステムを指定することで解決し、/path/to/my/glassfish/lib/dtds欠落しているファイルをフォルダーに事前に入力しました。

        EmbeddedFileSystem.Builder efsb = new EmbeddedFileSystem.Builder();
        efsb.autoDelete(false);
        efsb.installRoot(new File("/path/to/my/glassfish"), true);

        EmbeddedFileSystem efs = efsb.build();
        Server.Builder builder = new Server.Builder("test");
        builder.embeddedFileSystem(efs);

        builder.logger(true);
        Server server = builder.build();
        server.addContainer(ContainerBuilder.Type.all);
        server.start();

実行の最後にフォルダーを削除しないようにGlassfishに依頼します。

于 2010-07-18T19:40:39.330 に答える
1

これが可能かどうかはわかりませんが、Sun GlassFish Embedded Server API を使用したコマンドの実行asadminでは、そのような使用例 ( を渡すsun-resources.xml) については言及されていません。

domain.xmlただし、ファイルを展開しようとする代わりに、事前構成されたものを使用するsun-resource.xmlと、結果は同様になるはずです。Sun GlassFish Enterprise Server v3 Embedded Server Guideから:

既存のdomain.xmlファイルの使用

既存のdomain.xmlファイルを使用すると、組み込み Enterprise Server をアプリケーションにプログラムで構成する必要がなくなります。アプリケーションは、既存のdomain.xmlファイルからドメイン構成データを取得します。このファイルは、組み込みでない Enterprise Server のインストールの管理インターフェースを使用して作成できます。既存のファイルを指定する には、クラスの 、 、メソッド、またはこれらのメソッドの組み合わせを呼び出し ます domain.xmlinstallRootinstanceRootconfigurationFileEmbeddedFileSystem.Builder

ドキュメントには、これを行う方法を示すコード サンプルが用意されています (非常に簡単なはずです)。

于 2010-07-17T21:26:36.147 に答える