L'assistant de migration J2EE prend en charge la migration des descripteurs de déploiement de bean enterprise à partir de la ressource EJB au niveau de spécification J2EE 1.3 vers J2EE 1.4. Les beans session sans état et les beans gérés par messages sont migrés vers J2EE 1.4.
La spécification J2EE 1.4 nécessite qu'une interface SEI soit définie sur un bean session sans état si le bean session doit être utilisé comme noeud final de services Web. Lors de la migration d'un fichier JAR EJB, le noeud final de service de tous les beans session du projet EJB a le nom utilisé dans le descripteur webservices.xml du projet EJB. Vous trouverez ci-dessous un exemple de l'aspect des métadonnées d'un projet EJB avant et après la migration vers le niveau de spécification J2EE 1.4.
Projet EJB dans J2EE 1.3 : descripteur webservices.xml avec un bean session sans état utilisé comme interface SEI avant la migration
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE webservices PUBLIC "-//IBM Corporation, Inc.//DTD J2EE Web services 1.0//EN" "http://www.ibm.com/webservices/dtd/j2ee_web_services_1_0.dtd"> <webservices id="WebServices_1084831328093"> <webservice-description id="WebServiceDescription_1084831328093"> <webservice-description-name>EchoEJBService</webservice-description-name> <wsdl-file>META-INF/wsdl/EchoEJB.wsdl</wsdl-file> <jaxrpc-mapping-file>META-INF/EchoEJB_mapping.xml</jaxrpc-mapping-file> <port-component id="PortComponent_1084831328103"> <port-component-name>EchoEJB</port-component-name> <wsdl-port id="WSDLPort_1084831328103"> <namespaceURI>http://test</namespaceURI> <localpart>EchoEJB</localpart> </wsdl-port> <service-endpoint-interface>test.EchoEJB</service-endpoint-interface> <service-impl-bean id="ServiceImplBean_1084831328103"> <ejb-link>EchoEJB</ejb-link> </service-impl-bean> </port-component> </webservice-description> </webservices>Les balises <service-endpoint-interface> et <service-impl-bean> dans l'exemple précédent définissent le bean session sans état "EchoEJB" comme noeud final de service dans le descripteur webservices au niveau de spécification J2EE 1.3 avant la migration.
Projet EJB dans J2EE 1.4 : descripteur de déploiement EJB pour le même bean session sans état "EchoEJB" avec interface SEI créée par le processus de migration
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ejb-jar> <ejb-jar id="ejb-jar_ID" version="2.1" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd"> <display-name> EchoEJBProject</display-name> <enterprise-beans> <session id="EchoEJB"> <ejb-name>EchoEJB</ejb-name> <home>test.EchoEJBHome</home> <remote>test.EchoEJB</remote> <service-endpoint>test.EchoEJB</service-endpoint> <ejb-class>test.EchoEJBBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Container</transaction-type> </session> </enterprise-beans> </ejb-jar>La balise <service-endpoint> de l'exemple précédent définit "EchoEJB" comme noeud final de service dans le niveau de spécification J2EE 1.4 après la migration.
Les beans gérés par messages ont été introduits dans EJB 2.0 afin de prendre en charge le traitement de messages asynchrones à partir d'un service JMS Java Message Service). La spécification EJB 2.1 développe la définition du bean géré par messages afin qu'il puisse prendre en charge tout système de messagerie, et non uniquement JMS.
L'exemple suivant compare les éléments d'un bean exemple dans EJB 2.0 avec l'aspect dans EJB 2.1.
Exemple d'éléments de bean géré par message dans EJB 2.0 :
<message-driven id="Mdb20"> <ejb-name>Mdb</ejb-name> <ejb-class>ejbs.MdbBean</ejb-class> <transaction-type>Bean</transaction-type> <message-selector>mdbMessage</message-selector> <acknowledge-mode>Auto-acknowledge</acknowledge-mode> <message-driven-destination> <destination-type>javax.jms.Topic</destination-type> <subscription-durability>Durable</subscription-durability> </message-driven-destination> </message-driven>
Exemple de bean géré par message dans EJB 2.1 :
<message-driven id="Mdb21"> <ejb-name>Foo/ejb-name> <ejb-class>ejbs.FooBean</ejb-class> <messaging-type>javax.jms.MessageListener</messaging-type> <transaction-type>Bean/transaction-type> <message-destination-type>javax.jms.Topic</message-destination-type> <activation-config> <activation-config-property> <activation-config-property-name>destinationType</activation-config-property-name> <activation-config-property-value>javax.jms.Topic</activation-config-property-value> </activation-config-property> <activation-config-property> <activation-config-property-name>subscriptionDurability</activation-config-property-name> <activation-config-property-value>Durable</activation-config-property-value> </activation-config-property> <activation-config-property> <activation-config-property-name>acknowledgeMode</activation-config-property-name> <activation-config-property-value>AutoAcknowledge</activation-config-property-value> </activation-config-property> <activation-config-property> <activation-config-property-name>messageSelector</activation-config-property-name> <activation-config-property-value>fooSelector</activation-config-property-value> </activation-config-property> </activation-config> </message-driven>