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

War es hilfreich?

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 Datei

Verwendung 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 vorhandenen domain.xml Datei.Sie können diese Datei erstellen, indem Sie die administrativen Schnittstellen einer Installation von nicht eingefassten Enterprise -Server verwenden.Um eine vorhandene anzugeben domain.xml Datei, rufen Sie die auf installRoot, instanceRoot, oder configurationFile Methode der EmbeddedFileSystem.Builder Klasse oder eine Kombination dieser Methoden.

Die Dokumentation enthält Codebeispiele, die zeigen, wie das geht (sollte ziemlich einfach sein).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top