Eingebetteter Glassfish v3:Die programmgesteuerte Bereitstellung von sun-resources.xml schlägt fehl
-
16-09-2020 - |
Frage
Ich möchte mein jpa-ejb-web-Projekt mithilfe der eingebetteten Glassfish-API als eigenständige Anwendung packen können.
Um die JPA-Ebene zu verwenden, muss ich die Konfiguration sun-resource.xml bereitstellen, was mit dem möglich sein sollte asadmin-Befehl add-resources path\to\sun-resources.xml
.Ich habe diesen Code, um es zu tun:
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();
aber Glassfish lehnt es ab mit:
15-Jul-2010 16:34:12 org.glassfish.admin.cli.resources.AddResources execute
SCHWER:Beim Hinzufügen von Ressourcen ist ein Fehler aufgetreten
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)
und tatsächlich gibt es keine lib
Verzeichnis auf dem angegebenen Pfad ...
Stimmt etwas in meinem Code nicht?(Ich benutze glassfish-embedded-all-3.0.1.jar)
Danke
Lösung
Ich habe es gelöst, indem ich ein eingebettetes Dateisystem für den eingebetteten Glassfish angegeben und das vorab ausgefüllt habe /path/to/my/glassfish/lib/dtds
Ordner mit den fehlenden Dateien.
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();
und Glassfish bitten, den Ordner am Ende der Ausführung nicht zu löschen.
Andere Tipps
Ich bin nicht sicher, ob das möglich ist, Läuft asadmin
Befehle mit der Sun GlassFish Embedded Server API erwähnt einen solchen Anwendungsfall nicht (Übergabe von a sun-resources.xml
).
Aber ich würde ein vorkonfiguriertes verwenden domain.xml
anstatt zu versuchen, a bereitzustellen sun-resource.xml
Datei, das Ergebnis sollte ähnlich sein.Von dem Sun GlassFish Enterprise Server v3 Embedded Server-Handbuch:
Verwendung eines Vorhandenen
domain.xml
DateiVerwendung eines vorhandenen
domain.xml
Die Datei vermeidet die Notwendigkeit, den eingebetteten Enterprise -Server programmgesteuert in Ihrer Anwendung zu konfigurieren.Ihre Anwendung erhält Domänenkonfigurationsdaten von einem vorhandenendomain.xml
Datei.Sie können diese Datei erstellen, indem Sie die administrativen Schnittstellen einer Installation von nicht eingefassten Enterprise -Server verwenden.Um eine vorhandene anzugebendomain.xml
Datei, rufen Sie die aufinstallRoot
,instanceRoot
, oderconfigurationFile
Methode derEmbeddedFileSystem.Builder
Klasse oder eine Kombination dieser Methoden.
Die Dokumentation enthält Codebeispiele, die zeigen, wie das geht (sollte ziemlich einfach sein).