THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
Wiki Markup |
---|
h2. EJB Component
*Available as of Camel 2.4*
The *ejb:* component binds EJBs to Camel message exchanges.
Maven users will need to add the following dependency to their {{pom.xml}} for this component:
{code:xml}
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-ejb</artifactId>
<version>x.x.x</version>
<!-- use the same version as your Camel core version -->
</dependency>
{code}
h3. URI format
{code}
ejb:ejbName[?options]
{code}
Where *ejbName* can be any string which is used to look up the EJB in the Application Server JNDI [Registry]
h3. Options
{div:class=confluenceTableSmall}
|| Name || Type || Default || Description ||
| {{method}} | {{String}} | {{null}} | The method name that bean will be invoked. If not provided, Camel will try to pick the method itself. In case of ambiguity an exception is thrown. See [Bean Binding] for more details. |
| {{multiParameterArray}} | {{boolean}} | {{false}} | How to treat the parameters which are passed from the message body; if it is {{true}}, the In message body should be an array of parameters. |
{div}
You can append query options to the URI in the following format, {{?option=value&option=value&...}}
The [EJB] component extends the [Bean] component in which most of the details from the [Bean] component applies to this component as well.
h3. Bean Binding
How bean methods to be invoked are chosen (if they are not specified explicitly through the *method* parameter) and how parameter values are constructed from the [Message] are all defined by the [Bean Binding] mechanism which is used throughout all of the various [Bean Integration] mechanisms in Camel.
h3. Examples
In the following examples we use the Greater EJB which is defined as follows:
{snippet:id=e1|lang=java|title=GreaterLocal.java|url=camel/trunk/components/camel-ejb/src/test/java/org/apache/camel/component/ejb/GreaterLocal.java}
And the implementation
{snippet:id=e1|lang=java|title=GreaterImpl.java|url=camel/trunk/components/camel-ejb/src/test/java/org/apache/camel/component/ejb/GreaterImpl.java}
h4. Using Java DSL
In this example we want to invoke the {{hello}} method on the EJB. Since this example is based on an unit test using Apache OpenEJB we have to set a {{JndiContext}} on the [EJB] component with the OpenEJB settings.
{snippet:id=e1|lang=java|url=camel/trunk/components/camel-ejb/src/test/java/org/apache/camel/component/ejb/GreaterCamelEjbTest.java}
Then we are ready to use the EJB in the Camel route:
{snippet:id=e2|lang=java|url=camel/trunk/components/camel-ejb/src/test/java/org/apache/camel/component/ejb/GreaterCamelEjbTest.java}
{tip:title=In a real application server}
In a real application server you most likely do not have to setup a {{JndiContext}} on the [EJB] component as it will create a default {{JndiContext}} on the same JVM as the application server, which usually allows it to access the JNDI registry and lookup the [EJB]s.
However if you need to access a application server on a remote JVM or the likes, you have to prepare the properties beforehand.
{tip}
h4. Using Spring XML
And this is the same example using Spring XML instead:
Again since this is based on an unit test we need to setup the [EJB] component:
{snippet:id=e1|lang=xml|url=camel/trunk/components/camel-ejb/src/test/resources/org/apache/camel/component/ejb/SpringGreaterCamelEjbTest.xml}
Before we are ready to use [EJB] in the Camel routes:
{snippet:id=e2|lang=xml|url=camel/trunk/components/camel-ejb/src/test/resources/org/apache/camel/component/ejb/SpringGreaterCamelEjbTest.xml}
{include:Endpoint See Also}
* [Bean]
* [Bean Binding]
* [Bean Integration]
|