Comment l'EJB client de localiser le serveur EJB sans url?
Je suis nouveau sur Java EE. À l'heure actuelle j'en suis Java EE 6 Tutoriel, Volume 1 (Concepts de Base de la Bêta) par Sun Microsystems. Pour s'échapper de la monotone de lire de temps en temps je joue avec quelques Java EE projets/codes écrits par d'autres.
Je suis venu de SE. Ma tête est encore rempli avec de SE. Dans le sud-est (à deux niveaux application) j'utilise
DATABASE_URL = "jdbc:mysql://something.db_server.com/db_name"
C'est comment mon client sait où le serveur de base de données.
Dans un exemple en Java EE, j'ai vu
//Access JNDI Initial Context.
Properties p = new Properties();
p.put("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
p.put("java.naming.provider.url","jnp://localhost:1099");
p.put("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");
InitialContext ctx = new InitialContext(p);
//Change jndi name according to your server and ejb
HelloRemote remote = (HelloRemote) ctx.lookup("HelloBean/remote");
msg = "Message From EJB --> " + remote.sayHello();
Ce que je comprends. Le code de l'url et le numéro de port. Il y a cette ligne
p.put("java.naming.provider.url","jnp://localhost:1099");
Côté Client sait où est le serveur par l'url et le port de frapper. Je pense que le code a été écrit à l'époque de Java EE 5.
Aujourd'hui, j'ai trouvé un autre exemple où Netbeans 7, Java EE 6 et GlassFish 3 sont utilisés. Le côté client code
@EJB
private static MySessionRemote mySession;
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
JOptionPane.showMessageDialog(null,
"result = " + mySession.getResult());
}
Voici le lien
http://netbeans.org/kb/docs/javaee/entappclient.html
Pas d'url et le numéro de port donné.
Java EE 6 Développement avec Netbeans 7 par David R. Heffelfinger a un exemple similaire dans le chapitre 7. L'auteur n'explique pas comment c'est fait dans le livre. Je pense qu'il a fait, mais je l'ai probablement manqué...
Ma question est de savoir comment le côté client de localiser le serveur sans l'url? Est-il indiqué dans un de ces fichiers xml? Le Client peut être en Californie et le Serveur GlassFish peut être à New York. Quelqu'un peut-il m'expliquer ou point-à-tutoriel/blog/article où je peux trouver la réponse?
Merci.
Si c'est une application web, alors la réponse est simple: l'EJB client exécute physique de la même machine. Vous ne devez pas confondre les EJB client avec le client HTTP (navigateur web).
Merci pour vos réponses. Il n'est pas d'application web.
OriginalL'auteur S A | 2012-11-30
Vous devez vous connecter pour publier un commentaire.
Il y a deux choses qui sont à faire ici.
La première chose, c'est que la façon dont pour obtenir une référence à une distance d'EJB n'est pas spécifié dans Java EE. Vous êtes à la merci de la façon dont un individu vendeur pense qu'il devrait être fait.
Bien que JNDI est la norme de facto utilisé pour cela, même ce qui, en soi n'est pas obligatoire.
Exemple: JBoss jusqu'à AS7
Dans JBoss as jusqu'à 7, la séquence suivante a été utilisée pour obtenir une référence à distance:
Ici, l'URL du serveur distant est prévue pour le contexte initial et à partir de ce contexte d'un bean est extrait. (Notez que vous devez PAS ajouter le bien connu "java:/" préfixe ici, ou sinon, il sera intercepté par JNDI et résolu localement, malgré le fait que la recherche sur une distance de contexte)
Puisque cette méthode a été tel que mentionné est pas normalisé, un seul fournisseur peut changer complètement entre les versions de mises en œuvre. Même pour les implémentations de la même version Java EE.
Exemple: JBoss AS7
Dans JBoss as 7, JBoss voulais partir JNDI (parce qu'il n'a pas été spécifié que JNDI devait être utilisé) et maintenant il arrive dans environ la façon suivante:
Vous aurez d'abord besoin de mettre un
jboss-ejb-client.properties
fichier sur votre chemin de classe avec le contexte suivant:Et utiliser le code comme le suivant:
Donc, à partir du code, il ne ressemble à aucune URL n'est pas précisée, mais il est statiquement caché dans un fichier de config.
Client De L'Application Conteneur
C'est encore une autre chose. Ce qui est démontré il y a une soi-disant Client de l'Application Conteneur (aka ACC).
Ce qui est différent de l'exemple ci-dessus, où un Java SE application utilisée JNDI pour communiquer avec le serveur distant. Le Client de l'Application Conteneur est un peu d'une obscure chose en Java EE. L'idée semble être que vous téléchargez le client de code dynamique à partir du Serveur (par exemple, une Applet ou Java Web Start app), et qu'il puis comme par magie "sait" où elle provient. Il y a très peu de soutien pour (statique) d'injection dans la classe principale, que vous pouvez utiliser pour injecter à distance haricots directement.
Le Client de l'Application Conteneur est une idée à partir des premiers jours de Java EE et autant que je sache, n'a jamais eu beaucoup d'attention. Après toutes ces années, il n'a jamais avancé beaucoup après sa conception initiale. Puisqu'il nécessite toujours une tonne de fournisseur de choses à faire, je pense que la plupart des gens ne vous embêtez pas avec et il suffit d'utiliser JNDI.
OriginalL'auteur Arjan Tijms
Il y aurait besoin d'être un
jndi.properties
fichier avec les données de configuration. Un client ne peut pas magiquement savoir le serveur de connexion, même si il aurait besoin pour se connecter à un serveur en cours d'exécution sur le même hôte que le client, il peut encore être multiples.L'exemple est très bizarre, les EJB annotation indiquerait qu'il est censé s'exécuter dans un conteneur Java EE, non pas comme une application client.
Je tiens également à noter que l'invocation des Ejb dans les applications client n'est pas vraiment commun; son plus une technologie côté serveur. Si vous souhaitez fournir une interface pour les applications client de son beaucoup plus facile et plus portable à utiliser, par exemple, webservices RESTful par le biais de JAX-RS.
Quelles sont les propriétés de
jndi.properties
pour se connecter à un serveur externe? Pouvez-vous le lien vers la documentation?OriginalL'auteur Gimby