2010-10-03 20 views
1

Je démarre un nouveau projet d'entreprise et utilise Glassfish 3 comme serveur d'application et NetBeans 6.9 comme IDE. J'ai quelques EJBs que je veux accéder à distance d'une application Swing de bureau. TOUJOURS il y a deux options - utilisez la recherche JNDI ou exécutez l'application Swing dans un conteneur client-application et utilisez les annotations @EJB. J'ai essayé avec succès la première option mais j'ai dû copier toutes les bibliothèques glassfish pour satisfaire les dépendances (environ 50MB, que je ne trouve pas normal). Maintenant, j'essaie la deuxième option. Dans NetBeans, je crée un nouveau projet Enterprise Application Client, ajoutez le projet EJB en tant que dépendance et appuyez sur Exécuter. Je reçois l'exception suivante: Sniffers with type [ejb] and type [appclient] should not claim the archive at the same time. Maintenant, si je supprime la case à cocher package, à côté du projet EJB dans les propriétés du projet du client d'application, j'obtiens une exception ClassNotFound différente de mon interface distante. Je me sens un peu coincé :(Pourrait plus certains gars expérimentés, dites-moi comment accéder à leurs EJB à distance, en utilisant Glassfish 3? Comme je l'ai écrit ci-dessus, je réussis avec la première option, mais 50 Mo sont trop dans mon avis pour un simple clientEJB remote application-client

Edit:.? Quelle approche choisir pour le déploiement et l'accès à distance du client, si vous avez la logique métier dans ejbs sur un serveur distant

Merci pour toute suggestion!

Je vous souhaite le meilleur, Petar

+0

Avez-vous téléchargé la version complète ou simplement le profil web? Le 'renifleur' ​​fait partie du conteneur glassfish qui détermine le conteneur à démarrer lorsque vous déployez un fichier jar. Il introspecte le fichier jar pour rechercher des fichiers témoins comme web.xml, etc. Comme sniffer se plaint de ne pas pouvoir trouver le conteneur ejb, je suppose que vous avez peut-être téléchargé le profil web. Essayez d'obtenir la «plate-forme complète» –

+0

J'ai téléchargé la version complète et je pense que le conteneur client se plaint parce qu'il trouve deux choses - ejb et client d'application et il ne sait pas lequel exécuter. Mais comment puis-je référencer mon projet ejb alors? –

+0

@Chuk Voir aussi mon édition. –

Répondre

1

Je pense que la meilleure approche dans votre cas est de créer une servlet (ou un autre composant simple) sur votre serveur et de faire en sorte que ce type parle à votre EJB. Si vous choisissez ce cas, vous isolerez votre communication client/serveur et votre implémentation de la logique métier.

+0

Merci pour la réponse . Mais j'ai choisi EJB, donc la communication à distance est plus facile grâce à une interface @Remote bien définie. De plus, je n'aurai pas d'interface graphique Web, pourquoi créer une servlet puis utiliser la communication HTTP? N'est-ce pas trop bas niveau et artificiel? –

+0

Oui, c'est le cas. Mais si vous voulez éviter toutes les dépendances du serveur d'application, je pense que cela peut être une approche. Bien sûr, le meilleur moyen est d'avoir une vraie communication EJB avec toutes les dépendances dans votre application client. Dans certains cas, cela peut poser un problème (j'ai une application client WebStart avec 87 Mo, mais notre client l'utilise dans un réseau privé, donc ce n'est pas un problème ici). –