Greenfish Embedded V3: distribuire risorse solari.xml fallisce a livello programmatico
-
16-09-2020 - |
Domanda
Vorrei essere in grado di confezionare il mio progetto JPA-EJB-Web come un'applicazione standalone, utilizzando API incorporato di Glassfish
Per utilizzare il livello JPA, ho bisogno di distribuire la configurazione Sun-Resource.xml, che dovrebbe essere possibile con Asadmin Command add-resources path\to\sun-resources.xml
.Ho questo codice per farlo:
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();
.
Ma il pesce Glassfish lo rifiuta con:
15-Jul-2010 16:34:12 org.glassfish.admin.cli.resources.AddResources execute
.
Grave: qualcosa è andato storto nelle risorse aggiuntive
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 in effetti, non esiste una directory lib
sul percorso indicato ...
C'è qualcosa di sbagliato nel mio codice?(Io uso Glassfish-Embedded-ALL-3.0.1.jar )
Grazie
Soluzione
L'ho risolto specificando un file system incorporato per il Glassfish incorporato e prepopopolate la cartella /path/to/my/glassfish/lib/dtds
con i file che mancano.
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 chiedendo Glassfish non eliminare la cartella alla fine dell'esecuzione.
Altri suggerimenti
Non sono sicuro che sia possibile, Esecuzione di comandi asadmin
Uso dell'API del server Embedded Sun GlassFish non menziona un caso di utilizzo del genere (passando un sun-resources.xml
).
Ma userei un domain.xml
preconfigurato invece di provare a distribuire un file sun-resource.xml
, il risultato dovrebbe essere simile. Dal Sun GlassFish Enterprise Server V3 Guida al server Embedded :
.Utilizzo di un file
domain.xml
esistenteUtilizzo di un file
domain.xml
esistente evita la necessità di configurare incorporati Il server aziendale è programmaticamente in la tua applicazione. La tua applicazione ottiene i dati di configurazione del dominio da un filedomain.xml
esistente. Puoi Crea questo file usando il Interfacce amministrative di un INSTALLAZIONE DI AZIENDA NONMBEDEDEDDEDED Server. Per specificare un esistentedomain.xml
File, invoca ilinstallRoot
,instanceRoot
o MetodoconfigurationFile
delEmbeddedFileSystem.Builder
Class o una combinazione di questi metodi.
La documentazione fornisce campioni di codice che mostrano come farlo (dovrebbe essere piuttosto semplice).