Embedded Glassfish v3: deploying sun-resources.xml programmatically fails

ⅰ亾dé卋堺 提交于 2019-12-11 07:26:07

问题


I would like to be able to package my jpa-ejb-web project as a standalone application, by using Glassfish embedded API.

To use the JPA layer, I need to deploy the sun-resource.xml configuration, which should be possible with the asadmin command add-resources path\to\sun-resources.xml. I've this code to do it:

    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();

but Glassfish refuses it with:

15-Jul-2010 16:34:12 org.glassfish.admin.cli.resources.AddResources execute

SEVERE: Something went wrong in 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)

and indeed, there is no lib directory on the indicated path ...

is there something wrong in my code? (I use glassfish-embedded-all-3.0.1.jar)

Thanks


回答1:


I solved it by specifying an Embedded File System for the embedded Glassfish, and prepopulated the /path/to/my/glassfish/lib/dtds folder with the files which were missing.

        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();

and asking Glassfish not to delete the folder at the end of the execution.




回答2:


I'm not sure this is possible, Running asadmin Commands Using the Sun GlassFish Embedded Server API doesn't mention such a use case (passing a sun-resources.xml).

But I would use a preconfigured domain.xml instead of trying to deploy a sun-resource.xml file, the result should be similar. From the Sun GlassFish Enterprise Server v3 Embedded Server Guide:

Using an Existing domain.xml File

Using an existing domain.xml file avoids the need to configure embedded Enterprise Server programmatically in your application. Your application obtains domain configuration data from an existing domain.xml file. You can create this file by using the administrative interfaces of an installation of nonembedded Enterprise Server. To specify an existing domain.xml file, invoke the installRoot, instanceRoot, or configurationFile method of the EmbeddedFileSystem.Builder class or a combination of these methods.

The documentation provides code samples showing how to do this (should be pretty straightforward).



来源:https://stackoverflow.com/questions/3257332/embedded-glassfish-v3-deploying-sun-resources-xml-programmatically-fails

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!