Use this task to learn how to use Enterprise JavaBeans (EJB) bindings in SCA applications.
Support is provided for EJB bindings in 2.x and 3.0-style beans, for service, reference, and reference target.
The EJB bindings do not support interface.wsdl files.
<?xml version="1.0" encoding="UTF-8"?> <composite xmlns="http://www.osoa.org/xmlns/sca/1.0" targetNamespace="http://neworder/sca/jdbc" name="NewOrderComposite"> <component name="NewOrderEJB3ServiceComponent"> <implementation.java class="neworder.sca.jdbc.NewOrderServiceImpl" requires="managedTransaction.local"/> <service name="NewOrderService" requires="suspendsTransaction"> <interface.java interface="neworder.sca.jdbc.NewOrderService"/> <binding.ejb ejb-version="EJB3"/> </service> </component> </composite>
InitialContext ctxt = new InitialContext(); Object remoteObj = ctxt.lookup("ejb/sca/ejbbinding/NewOrderEJB3ServiceComponent/NewOrderService#neworder.sca.jdbc.NewOrderServiceRemote"); NewOrderServiceRemote newOrderRemote = (NewOrderServiceRemote) PortableRemoteObject.narrow(remoteObj, NewOrderServiceRemote.class);
<?xml version="1.0" encoding="UTF-8"?> <composite xmlns="http://www.osoa.org/xmlns/sca/1.0" targetNamespace="http://erww.workload" name="ConvertComposite"> <component name="ConvertInputOutputServiceComponent"> <implementation.java class="convert.inputoutput.sca.ConvertInputOutputServiceImpl" <reference name="priceQuoteSessionReference"> <interface.java interface="priceQuoteSession.PriceQuoteSession"/> <binding.ejb uri="corbaname:iiop:localhost:2809/NameServiceServerRoot#ejb/session/PriceQuoteSessionFacadeBean"/> </reference> </component> </composite>
Different binding.ejb attributes can be used for service side EJB bindings or reference side EJB bindings. The following information explains how the default value is calculated for each side:
Service side
/sca/ejbbinding/<Component_Name>/<Service_Name>Therefore, the URI can be calculated as:
corbaname:iiop:localhost:2812/NameServiceServerRoot#ejb/sca/ejbbinding/<Component_Name>/<Service_Name>You can use it to look up home.
sca/ejbbinding/<Component_Name>/<Service_Name>The URI can be calculated as:
corbaname:iiop:localhost:2812/NameServiceServerRoot#ejb/sca/ejbbinding/<Component_Name>/<Service_Name>#<package.qualified.interface of SCA Java interface with prefix of Remote or Local to the class nameYou can use it directly to get the business interface.
<session name="ServiceNameBean" component-id="sca/ejbbinding/<Component_Name>/<Service_Name>"/>
The generated enterprise bean for the composite service is in the directory, WAS_HOME\AppServer\profiles\PROFILE_NAME\installedApps\CELL_NAME\COMPOSITE_NAME.ear\. Callers need to include the client required classes, such as remote or home, of the generated bean in the classpath or bundle the classes in the JAR file.
Reference side
uri="corbaname:iiop:host:port/NameServiceServerRoot#ejb/EJB3CounterSample/EJB3Beans.jar/StatelessCounterBean#com.ibm.websphere.ejb3sample.counter.RemoteCounterThere are two enterprise beans implementing the com.ibm.websphere.ejb3sample.counter.RemoteCounter interface. To avoid this issue:
uri="ejb/EJB3CounterSample/EJB3Beans.jar/StatelessCounterBean#com.ibm.websphere.ejb3sample.counter.RemoteCounter"or
uri="cell/clusters/<cluster_name>/ejb/EJB3CounterSample/EJB3Beans.jar/StatelessCounterBean#com.ibm.websphere.ejb3sample.counter.RemoteCounter"or
uri="cell/nodes/<node_name>/servers/<server_name>//ejb/EJB3CounterSample/EJB3Beans.jar/StatelessCounterBean#com.ibm.websphere.ejb3sample.counter.RemoteCounter"
Different patterns of the SCA EJB reference binding URI are based on the user setup and configurations. If the SCA EJB reference binding is accessing a stateless session bean on the same server, the EJB reference binding URI can be designated as the JNDI name, uri="ejb/com/app/resumebank/ResumeBankHome". If the SCA EJB reference binding is referencing another SCA service with an EJB binding in the same server, the URI can be designated as the JNDI name, uri="ejb/com/app/resumebank/ResumeBankHome" or you can use the <reference target=<componentName/serviceName> instead of the URI.
uri="cell/clusters/cluster2/ejb/com/app/resumebank/ResumeBankHome" uri="cell/nodes/<node_name>/servers/<server_name>/ejb/com/app/resumebank/ResumeBankHome"If the EJB reference binding is accessing a stateless session bean on a different cell (cross cell) or a mixed cell, you need to create a namespace binding, either an enterprise bean or Corba type, in the WebSphere® Application Server administrative console and use the name in namespace binding in EJB reference binding URI such as, uri="cell/persistent/<name_in_namespace_binding>". For example, uri="cell/persistent/neworder" where neworder is name in the namespace binding.
Section | Not supported in Feature Pack for SCA v1.0 |
---|---|
2.1 Session Bean Binding Schema | /binding.ejb/@session-type
|
2.3.1 Conversational Nature of Stateful Session Beans | Lines 197-229 |