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

我不确定这是否可行,使用 Sun GlassFish 嵌入式服务器 API运行asadmin命令没有提到这样的用例(传递 a sun-resources.xml)。

但是我会使用预配置domain.xml而不是尝试部署sun-resource.xml文件,结果应该是相似的。从Sun GlassFish Enterprise Server v3 嵌入式服务器指南

使用现有domain.xml文件

使用现有domain.xml文件可避免在应用程序中以编程方式配置嵌入式 Enterprise Server。您的应用程序从现有domain.xml文件中获取域配置数据。您可以使用非嵌入式 Enterprise Server 安装的管理界面创建此文件。要指定现有 domain.xml文件,请调用类的 installRootinstanceRootconfigurationFile方法 EmbeddedFileSystem.Builder或这些方法的组合。

该文档提供了代码示例,展示了如何执行此操作(应该非常简单)。

于 2010-07-17T21:26:36.147 回答
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 回答