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

Jdbc 嵌入式Glassfish v3:以编程方式部署sun-resources.xml失败,jdbc,jakarta-ee,glassfish,java-ee-6,glassfish-embedded,Jdbc,Jakarta Ee,Glassfish,Java Ee 6,Glassfish Embedded,我希望能够使用Glassfish嵌入式API将我的jpa ejb web项目打包为一个独立的应用程序 要使用JPA层,我需要部署sun-resource.xml配置,这应该可以通过add resources path\To\sun resources.xml实现。我有以下代码来执行此操作: String command = "add-resources"; ParameterMap params = new ParameterMap(); params.add("", "

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

要使用JPA层,我需要部署sun-resource.xml配置,这应该可以通过
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)
java.lang.Exception:…\gfembed69302014546233570tmp\lib\dtds\sun-resources\u 1\u 4.dtd(系统找不到指定的路径)
位于org.glassfish.admin.cli.resources.ResourcesXMLParser.initProperties(ResourcesXMLParser.java:163)
位于org.glassfish.admin.cli.resources.ResourcesXMLParser.(ResourcesXMLParser.java:109)
位于org.glassfish.admin.cli.resources.ResourcesManager.createResources(ResourcesManager.java:67)
位于org.glassfish.admin.cli.resources.AddResources.execute(AddResources.java:106)
位于com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:305)
位于com.sun.enterprise.v3.admin.CommandRunnerImpl.docomand(CommandRunnerImpl.java:320)
位于com.sun.enterprise.v3.admin.CommandRunnerImpl.docomand(CommandRunnerImpl.java:1176)
在com.sun.enterprise.v3.admin.CommandRunnerImpl.access$900(CommandRunnerImpl.java:83)
位于com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1235)
位于com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1224)
位于javaapplication4.Main.Main(Main.java:55)
实际上,在指定的路径上没有
lib
目录

我的代码有问题吗?(我使用)

谢谢

我不确定这是否可行,没有提到这样的用例(传递
sun resources.xml

但是我会使用预配置的
domain.xml
而不是尝试部署
sun resource.xml
文件,结果应该是类似的。从:

使用现有的
domain.xml
文件 使用现有的
domain.xml
文件 避免了配置嵌入式系统的需要 在中以编程方式使用企业服务器 你的申请。你的申请 从中获取域配置数据 现有的
domain.xml
文件。你可以 使用 系统的管理接口 非嵌入式企业的安装 服务器。指定现有的
domain.xml
文件,调用
installRoot
instanceRoot
,或
configurationFile
EmbeddedFileSystem.Builder
class或 这些方法的组合


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

我通过为嵌入式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不要在执行结束时删除文件夹。

我不太同意你回答的第一部分,他们在页面上只提供了两个例子+但是,我建议预先配置system@Kevin:如我所写,我不确定,也没有真正使用此API(我在项目中使用了捆绑的
domain.xml
),因此我可能错了。事实上,现在我重新思考了一下,这确实是可能的。你是否试图建立一条绝对路径?