Incorporado o Glassfish v3:a implantação de sun-resources.xml programaticamente falha
-
16-09-2020 - |
Pergunta
Eu gostaria de ser capaz de pacote de meu jpa-ejb-projeto da web como uma aplicação independente, usando o Glassfish incorporado API.
Para usar o APP camada, eu preciso implantar o sun-resource.xml a configuração, que deve ser possível com a asadmin comando add-resources path\to\sun-resources.xml
.Eu tenho esse código para fazê-lo:
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();
mas o Glassfish recusa com:
15-Jul-2010 16:34:12 org.glassfish.admin.cli.resources.AddResources execute
GRAVE:Algo deu errado em adicionar recursos
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)
e, de fato, não há lib
diretório no caminho indicado ...
há algo de errado no meu código?(Eu uso glassfish-embedded-all-3.0.1.jar)
Obrigado
Solução
Eu resolvi especificando um Arquivo Incorporado de Sistema para o Glassfish embedded, e preenchido o /path/to/my/glassfish/lib/dtds
pasta com os arquivos que estavam faltando.
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();
e pedindo Glassfish de não excluir a pasta no final da execução.
Outras dicas
Eu não tenho certeza se isso é possível, Execução asadmin
Comandos Usando o Sun GlassFish Servidor Embutido da API não mencionar um caso de uso (a passagem de um sun-resources.xml
).
Mas eu gostaria de usar um pré-configurados domain.xml
em vez de tentar implantar uma sun-resource.xml
arquivo, o resultado deve ser semelhante.Do Sun GlassFish Enterprise Server v3 Embedded Server Guia:
Usar uma já Existente
domain.xml
ArquivoUsar uma já existente
domain.xml
arquivo evita a necessidade de configurar incorporado Enterprise Server através de programação no sua aplicação.A sua aplicação obtém os dados de configuração do domínio uma já existentedomain.xml
arquivo.Você pode criar este arquivo usando o interfaces administrativas de um instalação de nonembedded Empresa Server.Para especificar um existentedomain.xml
arquivo, invocar ainstallRoot
,instanceRoot
, ouconfigurationFile
método deEmbeddedFileSystem.Builder
de classe ou uma combinação destes métodos.
A documentação fornece exemplos de código mostrando como fazer isso (é bem simples).