【问题标题】:Embedded Glassfish v3: deploying sun-resources.xml programmatically fails嵌入式 Glassfish v3:以编程方式部署 sun-resources.xml 失败
【发布时间】:2010-07-15 15:49:52
【问题描述】:

我希望能够使用 Glassfish 嵌入式 API 将我的 jpa-ejb-web 项目打包为独立应用程序。

要使用 JPA 层,我需要部署 sun-resource.xml 配置,这应该可以通过 asadmin command 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)

谢谢

【问题讨论】:

    标签: jdbc jakarta-ee glassfish java-ee-6 glassfish-embedded


    【解决方案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 在执行结束时不要删除该文件夹。

    【讨论】:

      【解决方案2】:

      我不确定这是否可行,Running asadmin Commands Using the Sun GlassFish Embedded Server API 没有提到这样的用例(通过 sun-resources.xml)。

      但我会使用预配置的domain.xml 而不是尝试部署sun-resource.xml 文件,结果应该是相似的。来自Sun GlassFish Enterprise Server v3 Embedded Server Guide:

      使用现有的domain.xml 文件

      使用现有的domain.xml 文件 无需配置嵌入式 Enterprise Server 以编程方式在 你的申请。你的申请 从获取域配置数据 现有的domain.xml 文件。你可以 使用 管理界面 非嵌入式企业的安装 服务器。指定现有的 domain.xml 文件,调用 installRoot、instanceRoot 或 configurationFile 的方法 EmbeddedFileSystem.Builder 班级或 这些方法的组合。

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

      【讨论】:

      • 我不太同意你回答的第一部分,他们在页面上提供的只是两个例子! +1 但是建议预配置系统的想法
      • @Kevin:正如我所写,我不确定并且我并没有真正使用这个 API(我使用了我在项目中捆绑的 domain.xml)所以我可能是错的。其实,现在回想起来,确实应该是可以的。您是否尝试构建绝对路径?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-27
      • 2012-07-02
      • 1970-01-01
      • 2016-03-05
      • 1970-01-01
      • 1970-01-01
      • 2012-07-02
      相关资源
      最近更新 更多