Embedded Glassfish v3:以编程方式部署sun-resources.xml失败

时间:2010-07-15 15:49:52

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

我希望能够通过使用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

严重:add-resources

出了点问题
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

由于

2 个答案:

答案 0 :(得分:1)

我不确定这是可能的,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文件,调用   installRootinstanceRoot或   configurationFile方法   EmbeddedFileSystem.Builder课程或   这些方法的组合。

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

答案 1 :(得分: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在执行结束时不要删除该文件夹。