The EJB mediator calls an external Enterprise
JavaBean(EJB) and stores the result in the message payload or in a
message context property. Currently, this mediator supports EJB3
Stateless Session Beans and Stateful Session Beans.
Before Start first look what is EJB Mediator and what is EJB
now Let's see how to Run a Simple Hello Name using EJB Mediator. in
order to run the the sample we need to configure our Environment So the
Requirements are
In the context of EJB the the implementation is focused on statefull
and stateless session beans, so later when dicussing the sample
scenarios and will dig in to the details on how to configure those with
the WSO2 Ejb mediator
So let us now focus now on configuring EJB service invocation with WSO2 ESB.
Configure the ESB
- Please download Jboss 7(jboss-as-7.1.1.Final Latest) we do have test this with different application servers but for this demonstration we will be using Jboss 7 there you need to copy jboss-client.jar to ESB_HOME/repository/components/lib
- Please find the HelloName.jar (Ejb service) you will be find the HelloName jar attached with this article (will discuss what this demo service and its implementation separately) please copy the HelloName.jar file to JBOSS_HOME/standalone/deployments/ and ESB_HOME/repository/components/lib
- As next step you may have to configure AS connection properties and the you will be able define them in synapse.properties (ESB_HOME/repository/conf ) it has following properties which is required to communicate with the AS,depending on the application server which you may use the configuration parameteres might get change, the following is required when you need to connect EJB services hosted in Jboss AS 7
- Start ESB and Jboss AS
Configure Ejb Mediator for stateless bean
Idea
of this demo such as when requests closest location he has to pass the
name and in this scenario when the requests comes first we need to
invoke the sayHello method which is exposed as EJB service, and to
invoke
the method it requires to check HelloWorld so it we picking the name and
pass it to ejb Container and the return result will be assign to the
synapse property context and using
enrich mediator we can transform the incoming request as requires by the
source, let see how this can be configured in ESB level
ejb Proxy
<?xml version="1.0" encoding="UTF-8"?> <proxy xmlns="http://ws.apache.org/ns/synapse" name="ejb" transports="https,http" statistics="disable" trace="disable" startOnLoad="true"> <target> <inSequence> <property name="response" value="init" scope="default" type="STRING"/> <log level="custom"> <property name="response" value="{//name}"/> </log> <ejb beanstalk="jack" class="org.NewBeanRemote" method="sayHello" target="response" jndiName="ejb:/EJBModule3/NewBean!org.NewBeanRemote"> <args> <arg xmlns:m="http://org" value="{//m:name}"/> </args> </ejb> <payloadFactory media-type="xml"> <format> <ejb xmlns=""> <response>$ctx.response</response> </ejb> </format> <args/> </payloadFactory> <respond/> </inSequence> </target> <description/> </proxy>
in above proxy we need to set beanstalk , class, method, target and jndiName we already looked about these parameters in previous post
about EJB Mediator. here my beanstalk id is jack bu we can set unique
id for that the important thing is we are going to use this name in
synapse properties to set the property values. my class name is
org.NewBeanRemote and method name is sayHello . the value which my
method returning is naming as response in target finally we can catch
the jndi name from JBoss server console.
synapse property
synapse.beanstalks=jack synapse.beanstalks.jack.java.naming.factory.url.pkgs=org.jboss.ejb.client.naming synapse.beanstalks.jack.cache.warn.limit.stateless=5 synapse.beanstalks.jack.cache.warn.limit.stateful=5 synapse.beanstalks.jack.cache.timeout.stateless=1 synapse.beanstalks.jack.cache.timeout.stateful=1
after set the synapse properties value we will sent the below request to the proxy which we create as ejb.
Soap Request
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Body> <sayHello xmlns="http://org"> <name>rajjaz</name> </sayHello> </soapenv:Body> </soapenv:Envelope>
if everything success you will get bellow response to your soap Request
Soap Response
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Body> <ejb> <response>Hello rajjaz</response> </ejb> </soapenv:Body> </soapenv:Envelope>
Debug Log
[2015-10-09 10:39:09,699] DEBUG - wire >> "POST /services/ejb.ejbHttpSoap11Endpoint HTTP/1.1[\r][\n]" [2015-10-09 10:39:09,700] DEBUG - wire >> "Accept-Encoding: gzip,deflate[\r][\n]" [2015-10-09 10:39:09,700] DEBUG - wire >> "Content-Type: text/xml;charset=UTF-8[\r][\n]" [2015-10-09 10:39:09,700] DEBUG - wire >> "SOAPAction: "urn:mediate"[\r][\n]" [2015-10-09 10:39:09,701] DEBUG - wire >> "Content-Length: 201[\r][\n]" [2015-10-09 10:39:09,701] DEBUG - wire >> "Host: rajjaz-ThinkPad-T540p:8280[\r][\n]" [2015-10-09 10:39:09,701] DEBUG - wire >> "Connection: Keep-Alive[\r][\n]" [2015-10-09 10:39:09,702] DEBUG - wire >> "User-Agent: Apache-HttpClient/4.1.1 (java 1.5)[\r][\n]" [2015-10-09 10:39:09,702] DEBUG - wire >> "[\r][\n]" [2015-10-09 10:39:09,702] DEBUG - wire >> "<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">[\n]" [2015-10-09 10:39:09,702] DEBUG - wire >> " <soapenv:Body>[\n]" [2015-10-09 10:39:09,702] DEBUG - wire >> " <sayHello xmlns="http://org">[\n]" [2015-10-09 10:39:09,702] DEBUG - wire >> "<name>rajjaz</name>[\n]" [2015-10-09 10:39:09,702] DEBUG - wire >> " </sayHello>[\n]" [2015-10-09 10:39:09,702] DEBUG - wire >> " </soapenv:Body>[\n]" [2015-10-09 10:39:09,703] DEBUG - wire >> "</soapenv:Envelope>" [2015-10-09 10:39:09,707] DEBUG - ProxyServiceMessageReceiver Proxy Service ejb received a new message from : 127.0.0.1 [2015-10-09 10:39:09,708] DEBUG - ProxyServiceMessageReceiver Message To: /services/ejb.ejbHttpSoap11Endpoint [2015-10-09 10:39:09,708] DEBUG - ProxyServiceMessageReceiver SOAPAction: urn:mediate [2015-10-09 10:39:09,708] DEBUG - ProxyServiceMessageReceiver WSA-Action: urn:mediate [2015-10-09 10:39:09,708] DEBUG - ProxyService Setting default fault-sequence for proxy [2015-10-09 10:39:09,708] DEBUG - ProxyServiceMessageReceiver Using the anonymous in-sequence of the proxy service for mediation [2015-10-09 10:39:09,708] DEBUG - SequenceMediator Start : Sequence <anonymous> [2015-10-09 10:39:09,708] DEBUG - SequenceMediator Sequence <SequenceMediator> :: mediate() [2015-10-09 10:39:09,708] DEBUG - SequenceMediator Mediation started from mediator position : 0 [2015-10-09 10:39:09,708] DEBUG - SequenceMediator Building message. Sequence <SequenceMediator> is content aware [2015-10-09 10:39:09,709] DEBUG - PropertyMediator Start : Property mediator [2015-10-09 10:39:09,709] DEBUG - PropertyMediator Setting property : response at scope : default to : init (i.e. constant : init) [2015-10-09 10:39:09,709] DEBUG - PropertyMediator End : Property mediator [2015-10-09 10:39:09,709] DEBUG - LogMediator Start : Log mediator [2015-10-09 10:39:09,709] INFO - LogMediator response = {//name} [2015-10-09 10:39:09,710] DEBUG - LogMediator End : Log mediator [2015-10-09 10:39:09,933] DEBUG - PayloadFactoryMediator #mediate. Transformed payload format>>> <pfPadding><ejb><response>Hello rajjaz</response></ejb></pfPadding> [2015-10-09 10:39:09,933] DEBUG - RespondMediator Start : Respond Mediator [2015-10-09 10:39:09,940] DEBUG - RespondMediator End : Respond Mediator [2015-10-09 10:39:09,940] DEBUG - SequenceMediator End : Sequence <anonymous> [2015-10-09 10:39:09,941] DEBUG - wire << "HTTP/1.1 200 OK[\r][\n]" [2015-10-09 10:39:09,941] DEBUG - wire << "Host: rajjaz-ThinkPad-T540p:8280[\r][\n]" [2015-10-09 10:39:09,941] DEBUG - wire << "SOAPAction: "urn:mediate"[\r][\n]" [2015-10-09 10:39:09,941] DEBUG - wire << "Accept-Encoding: gzip,deflate[\r][\n]" [2015-10-09 10:39:09,941] DEBUG - wire << "Content-Type: text/xml;charset=UTF-8; charset=UTF-8[\r][\n]" [2015-10-09 10:39:09,941] DEBUG - wire << "Date: Fri, 09 Oct 2015 05:09:09 GMT[\r][\n]" [2015-10-09 10:39:09,941] DEBUG - wire << "Transfer-Encoding: chunked[\r][\n]" [2015-10-09 10:39:09,941] DEBUG - wire << "Connection: Keep-Alive[\r][\n]" [2015-10-09 10:39:09,941] DEBUG - wire << "[\r][\n]" [2015-10-09 10:39:09,941] DEBUG - wire << "ce[\r][\n]" [2015-10-09 10:39:09,941] DEBUG - wire << "<?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><ejb><response>Hello rajjaz</response></ejb></soapenv:Body></soapenv:Envelope>[\r][\n]" [2015-10-09 10:39:09,941] DEBUG - wire << "0[\r][\n]" [2015-10-09 10:39:09,941] DEBUG - wire << "[\r][\n]"
References
No comments:
Post a Comment