91.4. 例
次の例では、次のように定義された Greater EJB を使用します。
GreaterLocal.java
public interface GreaterLocal {
String hello(String name);
String bye(String name);
}そして実装
GreaterImpl.java
@Stateless
public class GreaterImpl implements GreaterLocal {
public String hello(String name) {
return "Hello " + name;
}
public String bye(String name) {
return "Bye " + name;
}
}91.4.1. Java DSL の使用
この例では、EJB で hello メソッドを呼び出します。この例は Apache OpenEJB を使用した単体テストに基づいているため、OpenEJB 設定を使用して EJB コンポーネントに JndiContext を設定する必要があります。
@Override
protected CamelContext createCamelContext() throws Exception {
CamelContext answer = new DefaultCamelContext();
// enlist EJB component using the JndiContext
EjbComponent ejb = answer.getComponent("ejb", EjbComponent.class);
ejb.setContext(createEjbContext());
return answer;
}
private static Context createEjbContext() throws NamingException {
// here we need to define our context factory to use OpenEJB for our testing
Properties properties = new Properties();
properties.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.LocalInitialContextFactory");
return new InitialContext(properties);
}これで、Camel ルートで EJB を使用する準備が整いました。
from("direct:start")
// invoke the greeter EJB using the local interface and invoke the hello method
.to("ejb:GreaterImplLocal?method=hello")
.to("mock:result");実際のアプリケーションサーバーで
実際のアプリケーションサーバーでは、ほとんどの場合、EJB コンポーネントに JndiContext をセットアップする必要はありません。これは、アプリケーションサーバーと同じ JVM にデフォルトの JndiContext を作成するためです。これにより、通常、JNDI レジストリーにアクセスして EJB をルックアップできます。ただし、リモート JVM などのアプリケーションサーバーにアクセスする必要がある場合は、事前にプロパティーを準備する必要があります。
91.4.2. Spring XML の使用
これは、代わりに Spring XML を使用した同じ例です。
これも単体テストに基づいているため、EJB コンポーネントをセットアップする必要があります。
<!-- setup Camel EJB component -->
<bean id="ejb" class="org.apache.camel.component.ejb.EjbComponent">
<property name="properties" ref="jndiProperties"/>
</bean>
<!-- use OpenEJB context factory -->
<p:properties id="jndiProperties">
<prop key="java.naming.factory.initial">org.apache.openejb.client.LocalInitialContextFactory</prop>
</p:properties>Camel ルートで EJB を使用する準備が整う前に:
<camelContext xmlns="http://camel.apache.org/schema/spring">
<route>
<from uri="direct:start"/>
<to uri="ejb:GreaterImplLocal?method=hello"/>
<to uri="mock:result"/>
</route>
</camelContext>