2009-11-09 5 views
0

J'ai une application héritée que j'essaye de porter sur Java EE. Actuellement, cette application appelle URL.setURLStreamHandlerFactory() pour enregistrer certains gestionnaires de protocole d'URL personnalisés. Cet appel échoue sous Glassfish v 2.1 et 3 parce que glassfish a déjà enregistré une usine.New URLStreamHandlers dans glassfish

J'ai essayé d'utiliser la propriété système java.protocol.handler.pkgs, mais cela ne fonctionne pas pour moi en raison de problèmes de classloader. Les classes de gestionnaire font toutes partie de l'application et je ne tiens pas à les extraire et à placer un jar dans le classpath du conteneur. J'ai une vague de paquets osgi - apparemment je pourrais écrire un paquet qui traitera les nouveaux protocoles. Je ne tiens pas à faire de cette application web un bundle osgi (une étape à la fois! EE d'abord, puis osgi si le besoin s'en fait sentir).

Est-il possible de placer un fichier jar bundle dans mon répertoire WEB-INF/lib et de le charger en tant que groupe? Le bundle devra importer des paquets à partir des applications web (un autre jar dans WEB-INF/lib ou dans WEB-INF/classes). Je suis prêt à empaqueter cette application comme un EAR si cela fonctionne, je ne peux pas justifier d'osgifier l'application entière sans en savoir plus.

Répondre

1

J'ai résolu mon problème. Apparemment, j'ai eu quelques fils croisés que la propriété système java.protocol.handler.pkgs fonctionne bien. Pour tout le monde qui trébuche, je mets un pot avec mes gestionnaires dans $ DOMAINDIR/lib/ext/ainsi que dans le répertoire WEB-INF/lib de mon WAR. Dans la configuration de mon application, j'ai également mis une option jvm -Djava.protocol.handler.pkgs = my.handlers.pkg.prefix

J'ai remarqué dans glassfish 2.1 cela fonctionne sans l'option jvm si je mets le préfixe Dans un code de démarrage, mais dans glassfish 3, l'option jvm est nécessaire car felix (l'implémentation d'osgi glassfish utilise) consulte seulement la propriété au démarrage du serveur, pas pour chaque requête.