0

オブジェクト (EJB が必要な場合) を JNDI を使用して JBoss (5.0) にプラグインするにはどうすればよいでしょうか?

Spring applicationContext.xmlに次の Bean 定義があります。

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>

<tx:annotation-driven transaction-manager="transactionManager" />

<context:annotation-config/>

<bean id="myServiceFacade" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="MyServiceFacadeBean/remote"/>
    <property name="cache" value="true"/>
    <property name="lookupOnStartup" value="true"/>
    <property name="jndiEnvironment">
        <props>
            <prop key="java.naming.factory.initial">org.jnp.interfaces.NamingContextFactory
            </prop>
            <prop key="java.naming.provider.url">localhost:1099</prop>
            <prop key="java.naming.factory.url.pkgs">org.jboss.naming:org.jnp.interfaces
            </prop>
        </props>
    </property>
    <property name="proxyInterface" value="my.company.service.facade.MyServiceFacade"/>
</bean>

JBoss を実行しようとすると、次のようになります。

Caused by: javax.naming.NameNotFoundException: MyServiceFacadeBean/remote
at org.jboss.ha.jndi.HAJNDI.lookupRemotely(HAJNDI.java:264)
at org.jboss.ha.jndi.HAJNDI.lookup(HAJNDI.java:205)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.jboss.ha.framework.interfaces.HARMIClient.invoke(HARMIClient.java:318)
at $Proxy165.lookup(Unknown Source)

オブジェクトを JBoss/JNDI に登録するために追加の手順を実行する必要があるのではないでしょうか?

注: ejb 固有のファイル (jboss.xml、ejb-jar.xml) を JBoss に配置しようとしましたが、役に立ちません。

4

1 に答える 1

0

DataSource でリモートをループアップするにはどうすればよいですか? しかし、MyServiceFacadeBean からは取得できないと確信しています。

applicationContext.xml で:

<property name="jndiName" value="remote"/>

ループアップしながら、

Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/remote");
DataSource ds = (DataSource)envCtx.lookup("remote");

または、中間ステップを作成して、取得するすべてのリソースに「java:comp/env」を指定する必要がないようにすることもできます。

Context ctx = new InitialContext();
Context envCtx = (Context)ctx.lookup("java:comp/remote");
DataSource ds = (DataSource)envCtx.lookup("remote");

それが役に立てば幸い。

于 2012-12-09T12:26:14.570 に答える