【问题标题】: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 文件,调用 installRootinstanceRootconfigurationFile 的方法 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
      相关资源
      最近更新 更多