我希望能够通过使用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)
由于
答案 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
文件,调用installRoot
,instanceRoot
或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在执行结束时不要删除该文件夹。