2010-08-24 24 views
4

Quelle est la meilleure façon (la plus simple et la plus transparente) de créer une application Java tout en comptant le moins possible sur le serveur d'applications utilisé dans le déploiement? Par exemple, disons que je veux déployer sur Apache Geronimo, et plus tard vouloir utiliser GlassFish, à quel point la transition serait-elle difficile? Quelle est la meilleure façon de résumer l'utilisation de chaque serveur d'applications? Excusez mon ignorance, je suis relativement nouveau au développement de Java. <\/Html> » Je souhaite démarrer un nouveau projet, mais je ne suis pas sûr d'utiliser des API distinctes pour les fonctionnalités dont j'ai besoin ou de les développer au début d'un serveur d'applications choisi.Comment conserver une dépendance minimale au serveur d'applications?

Merci pour votre aide,

Ivan

Répondre

3

Sans trop entrer dans les détails, même si vous pouvez écrire du code Java EE strict, la configuration n'est pas très simple. Chaque serveur d'applications possède son propre ensemble de fichiers de configuration et de conventions de dénomination (par exemple, le format de spécification de l'emplacement de l'AS est différent dans IBM WAS et dans JBOSS). Bien que ceux-ci ne soient pas très importants pour le développement d'applications, une fois en phase de déploiement, ceux-ci deviendront importants. En ce qui concerne les bibliothèques et votre code, tant que vous respectez les normes EJB, vous pourrez exécuter votre application sur la majorité des serveurs d'applications (je connais WAS et JBoss - le code que j'ai écrit n'avait pas changer pour ces serveurs, la configuration cependant, eh bien c'était une bête différente!).

+1

D'accord. Le code de base, par exemple: Struts ou framework MVC, Spring, EJB, servlets, POJOs peuvent être utilisés sur les serveurs d'applications. Si vous avez codé en dur les recherches JNDI vers des sources de données, etc. dans le code, celles-ci changeront. D'autres trucs de config comme pas de threads, config JMS etc. vont tous changer sur chaque AS. – JoseK

+0

Non, le format pour spécifier l'emplacement d'un serveur JNDI n'est pas différent. Les valeurs sont bien. –

+0

Merci pour votre aide les gars. Comme Shengyuan l'a aussi mentionné dans sa réponse, coller autant que possible aux spécifications JEE minimisera le refactoring et la configuration inévitable de la douleur au déploiement. J'ai beaucoup de lecture à faire ...: -/ – imiric

1

De mon expérience avec Jboss et Sun AS, vous devez simplement oublier AS-indépendance.

En SQL, par exemple, vous pouvez faire beaucoup sans utiliser de fonctionnalités spécifiques au fournisseur. Eh bien, ce n'est pas comme ça dans Java EE. Pour Jboss et SAS, même les applications 'bonjour monde' nécessiteront une configuration différente. Et plus d'applications se développent, plus de fonctionnalités spécifiques au fournisseur que vous devez utiliser. En particulier, si vous regardez le tutoriel officiel de Sun Java EE, vous constaterez qu'il utilise des fichiers de configuration spécifiques à SAS (sun-web.xml, sun-ejb-jar.xml, etc) dès le début .

Mais tout ce qui précède s'applique uniquement si vous utilisez toute la gamme de fonctionnalités Java EE (comme EJB, JMS, mbeans). J'ai trouvé que si vous avez juste des servlets/jsps dans une archive de guerre, une telle application peut toujours être très portable.

+0

Vous pouvez écrire du code portable, n'utilisez simplement pas les fonctionnalités spécifiques au serveur d'applications (et les descripteurs de déploiement spécifiques au serveur d'applications sont une autre histoire). –

+1

@Pascal Sachant que votre code est portable ne vous aide pas à réécrire beaucoup de fichiers de configuration. Et même si les descripteurs de configuration ne sont généralement pas énormes, les corriger est souvent délicat. Chaque AS a ses propres "caractéristiques" étranges qui ne sont pas évidentes pour les débutants. –

+0

Avec Java EE, vous pouvez faire beaucoup sans utiliser de fonctionnalité spécifique au fournisseur, je ne suis tout simplement pas d'accord avec vous (et j'ai été impliqué dans suffisamment d'applications Java EE pour savoir que c'est vrai). –

2

Suivez autant que possible les spécifications Java EE, tout en respectant au mieux les spécifications du serveur.

Si nous essayons de savoir quels sont en commun entre là des serveurs d'applications Java EE (JBoss, WAS ...), la réponse est la spécification Java EE qui fournisseurs de serveurs doivent suivre. Si vous avez 2 solutions sur un problème Java EE, vous pouvez vérifier quelle solution est la plus conforme aux spécifications Java EE plutôt que la spécification du serveur.

+0

Si seulement c'était si facile en vrai mot. D'un côté, les fournisseurs interprètent souvent les spécifications différemment. D'un autre côté, JEE fournit un ensemble d'outils plutôt minimal et il est souvent tentant d'utiliser le serveur à son plein potentiel. –

+0

@Nikita Veuillez donner des exemples concrets d'interprétations Java EE. Donnez des exemples concrets de choses que vous ne pouvez pas réaliser avec l'énorme plate-forme Java EE standard en raison de l'ensemble minimal d'outils. Cela ne reflète pas mon expérience. –

+0

@Pascal Avec cette nouvelle fonctionnalité, je devais ajouter quelque chose à jboss.xml, jboss-app.xml ou à d'autres fichiers de configuration spécifiques à jboss. Habituellement, ils sont aussi gros que les fichiers de configuration JEE génériques (ejb-jar.xml, etc.) Pour moi, cela rend la spécification JEE un peu incomplète. –

0

Si vous disposez des ressources, envisagez de développer et de tester plusieurs serveurs d'applications au lieu de votre serveur cible initial. Cela vous permettra de - dès le début - identifier les éléments qui doivent être configurables et coder en conséquence.

Personnellement, je considérerais Glassfish 3.0.1 dans une telle situation que c'est l'implémentation de référence, donc les choses devraient au moins fonctionner là sans aucun effort particulier.