2009-08-31 8 views
2

Nous travaillons au développement d'une application basée sur Java EE. Notre application est compatible avec Java 1.5 et sera déployée vers WAS ND 6.1.0.21 avec les packs de fonctionnalités EBJ 3.0 et Web Services. La configuration est actuellement une cellule avec deux clusters. Chaque cluster aura deux nœuds.Optimisation EJB de WebSphere Application Server

Notre application, ou notre système, comme je devrais plutôt le dire, se décline en deux ou trois parties. Partie 1: Une oreille déployée dans un cluster contenant un code fournisseur tiers associé à un code de personnalisation. Leur code est compatible EJB 2.0 et dispose de nombreuses interfaces Remote Home.

Partie 2: Une oreille déployée sur le même groupe que la première oreille. Cette oreille contient des EBJ 3 qui font des appels dans les EJB 2 fournis par le fournisseur et le code personnalisé. Ces EJB 3 sont utilisés par l'interface utilisateur JSF également fournie avec l'EAR, et certains d'entre eux sont également exposés en tant que services Web (JAX-WS 2.0 avec conformité SOAP 1.2) pour d'autres clients.

Partie 3: Il peut y avoir d'autres services qui ne dépendent pas de notre application de code fournisseur/personnalisé. Ces services seront EJB 3.0 et les services Web déployés sur l'autre cluster.

Selon une recommandation de certains membres du personnel d'IBM sur site, la communication entre les nœuds d'un cluster peut être EJB RMI. Mais si nous traversons des grappes et/ou d'autres cellules, alors la communication devrait être des services Web. Cela dit, certains d'entre nous s'interrogent sur les performances et optimisent la communication pour la rapidité de nos applications qui utiliseront nos services Web et EJB. À l'heure actuelle, la plupart des EJB sont exposés à distance. (et notre fournisseur les a configurés de cette façon, plutôt que d'exposer des interfaces locales). Nous nous demandons si WAS fait des optimisations entre les applications dans le même espace noeud/cluster. Si deux applications sont installées dans la même zone et s'appellent l'une l'autre via une interface home distante, est-ce que WAS a été suffisamment intelligent pour en faire un appel à l'interface locale?

Sont leurs autres techniques d'optimisation? Devrions-nous les considérer? Ne devrions-nous pas? Quels sont les coûts/avantages? La question est la suivante: Supposons que nous développions nos EJB en tant qu'EJB distants, où notre code de contrôleur de l'interface utilisateur parle à nos services Java EXT via EJB3 ... Quelles sont nos options pour l'optimisation des performances lorsque le serveur EJB et le client s'exécutent dans le même conteneur? Comme référence, google m'a fourni une documentation sur l'optimisation des performances websphere datant de 2000 qui explique une configuration d'optimisation que vous pouvez définir pour activer la communication par appel pour la communication EJB lorsqu'ils se trouvent dans la même JVM du serveur d'applications. Il indique ce qui suit:

Comme les EJB sont intrinsèquement indépendants de l'emplacement, ils utilisent un modèle de programmation à distance . Les paramètres de méthode et les valeurs de retour sont sérialisés sur RMI-IIOP et renvoyés par valeur. C'est le modèle intrinsèque RMI "Call By Value". WebSphere fournit l'optimisation des performances «Aucune copie locale» pour l'exécution des EJB et des clients (généralement des servlets) dans la même JVM du serveur d'applications. L'option "No Local Copies" utilise "Appel par référence" et ne crée pas de proxies locaux pour les objets appelés lorsque le client et l'objet distant sont dans le même processus. Selon sur votre charge de travail, cela peut entraîner des économies de frais généraux importants.

Configurer « Pas de copies locales » en ajoutant les deux paramètres de ligne de commande suivante pour la machine virtuelle Java du serveur d'applications:

* -Djavax.rmi.CORBA.UtilClass=com.ibm.CORBA.iiop.Util 
* -Dcom.ibm.CORBA.iiop.noLocalCopies=true 

ATTENTION: L'option de configuration « Aucun des copies locales » améliore les performances en changeant « Appel par Valeur "à" Appel par référence "pour les clients et les EJB dans la même machine virtuelle Java. Un effet secondaire de ceci est que les paramètres de méthode dérivée de l'objet Java (non-primitif) peuvent en fait être modifiés par le bean enterprise appelé. Considérons la Figure 16a:

De plus, nous utiliserons également Process Server 6.2 et WESB 6.2 dans le futur. Des idées? recommandations?

Merci

+0

Je pense que ce paramètre (activer appel par référence) est applicable uniquement pour les interfaces distantes EJB pas pour les interfaces EJB locales. –

Répondre

2

La seule optimisation automatique qui peut vraiment être fait pour EJBs à distance est si elles sont colocalisés (accessible à partir de la même machine virtuelle Java). Dans ce cas, l'ORB court-circuera certains des travaux qui seraient autrement nécessaires si la demande devait traverser le réseau. Il y aura toujours une surcharge ORB nécessaire, y compris la sérialisation des objets (sauf si vous activez noLocalCopies, avec tous les avertissements qu'il apporte). Alternativement, si vous savez que le contrôleur de l'interface utilisateur est co-implanté, vos appels de méthode ne reposent pas sur la copie de paramètres ou de valeurs de retour, et votre interface ne repose pas sur les différences d'exception entre les vues locales et distantes. exposer une sous-interface locale qui sera beaucoup plus rapide que l'accès à distance via l'ORB.

Questions connexes