La procedura guidata Migrazione J2EE supporta la migrazione dei descrittori di distribuzione bean enterprise dalla risorsa EJB del livello di specifica J2EE 1.3 al livello di specifica J2EE 1.4. I bean di sessione privi di stato e i bean basati sui messaggi vengono migrati a J2EE 1.4.
La specifica J2EE 1.4 richiede che una SEI sia definita in un bean di sessione privo di stato, se il bean di sessione deve essere utilizzato come endpoint dei servizi Web. Durante la migrazione di un file JAR EJB, in tutti i bean di sessione del progetto EJB l'endpoint del servizio viene impostato sul nome utilizzato nel descrittore webservices.xml del progetto EJB. Di seguito viene riportato un esempio di come i metadati di un progetto EJB appaiono prima e dopo la migrazione al livello di specifica J2EE 1.4.
Progetto EJB in J2EE 1.3: descrittore webservices.xml con bean di sessione privo di stato utilizzato come service endpoint interface Web prima della migrazione
<?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>I tag <service-endpoint-interface> e <service-impl-bean> dell'esempio precedente definiscono il bean di sessione privo di stato "EchoEJB" come endpoint di un servizio nel descrittore dei servizi Web a livello di specifica J2EE 1.3 prima della migrazione.
Progetto EJB in J2EE 1.4: descrittore di distribuzione EJB per il bean di sessione privo di stato "EchoEJB" con service endpoint interface creata dal processo di migrazione
<?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>Il tag <service-endpoint> dell'esempio precedente definisce "EchoEJB" come endpoint di un servizio nel livello di specifica J2EE 1.4 dopo la migrazione.
I bean basati sui messaggi sono stati introdotti in EJB 2.0 per supportare l'elaborazione di messaggi asincroni da un JMS (Java Message Service). La specifica EJB 2.1 espande la definizione di bean basato sui messaggi in modo che possa supportare qualsiasi sistema di messaggistica, non solo JMS.
Nell'esempio di seguito riportato, gli elementi di un bean di esempio in EJB 2.0 vengono confrontati con il modo in cui gli elementi vengono visualizzati in EJB 2.1
Un esempio di elementi di un bean basato sui messaggi in 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>
Un esempio di elementi di un bean basato sui messaggi in 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>