Glassfish v3 intégré :le déploiement de sun-resources.xml échoue par programme
-
16-09-2020 - |
Question
J'aimerais pouvoir packager mon projet jpa-ejb-web en tant qu'application autonome, en utilisant l'API intégrée de Glassfish.
Pour utiliser la couche JPA, je dois déployer la configuration sun-resource.xml, ce qui devrait être possible avec le commande asadmin add-resources path\to\sun-resources.xml
.J'ai ce code pour le faire :
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();
mais Glassfish le refuse avec :
15-Jul-2010 16:34:12 org.glassfish.admin.cli.resources.AddResources execute
GRAVE:Une erreur s'est produite dans l'ajout de ressources
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)
et en effet, il n'y a pas lib
répertoire sur le chemin indiqué...
y a-t-il quelque chose qui ne va pas dans mon code ?(J'utilise glassfish-embedded-all-3.0.1.jar)
Merci
La solution
Je l'ai résolu en spécifiant un système de fichiers intégré pour le Glassfish intégré, et j'ai prérempli le /path/to/my/glassfish/lib/dtds
dossier avec les fichiers manquants.
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();
et demandant à Glassfish de ne pas supprimer le dossier à la fin de l'exécution.
Autres conseils
Je ne suis pas sûr que ce soit possible, En cours d'exécution asadmin
Commandes utilisant l'API du serveur intégré Sun GlassFish ne mentionne pas un tel cas d'utilisation (passer un sun-resources.xml
).
Mais j'utiliserais un préconfiguré domain.xml
au lieu d'essayer de déployer un sun-resource.xml
fichier, le résultat devrait être similaire.Du Guide du serveur intégré Sun GlassFish Enterprise Server v3:
Utiliser un existant
domain.xml
DéposerUtiliser un existant
domain.xml
Le fichier évite la nécessité de configurer le serveur d'entreprise embarqué par programme dans votre application.Votre application obtient des données de configuration de domaine à partir d'undomain.xml
déposer.Vous pouvez créer ce fichier en utilisant les interfaces administratives d'une installation d'un serveur d'entreprise non emballé.Pour spécifier un existantdomain.xml
fichier, invoquez leinstallRoot
,instanceRoot
, ouconfigurationFile
méthode duEmbeddedFileSystem.Builder
classe ou une combinaison de ces méthodes.
La documentation fournit des exemples de code montrant comment procéder (cela devrait être assez simple).