7

私はEJBをSpring(3.1.2)サービスに注入しようとしています(両方とも異なるWARで)両方とも非常に単純です(例を単純化するためにメソッドが削除されています):

EJB:

@Remote
public interface MyBean {
}

@Singleton
public class MyBeanImpl implements MyBean{
}

サービス:

@Service
public class MyServiceImpl implements MyService{
}

一見、物事は非常に単純ですが、私は試しました:

@EJB(lookup = "java:global/ejbApp/MyBeanImpl!com.my.MyBean")
private MyBean myBean;

そしてそれはうまくいきませんでした。それから私も試しました:

@EJB(mappedName = "java:global/ejbApp/MyBeanImpl!com.my.MyBean")
private MyBean myBean;

@Resource(mappedName = "java:global/ejbApp/MyBeanImpl!com.my.MyBean")
private MyBean myBean;

しかし、どちらも機能しませんでした。

以下を使用してEJBを注入することができました。

<jee:jndi-lookup id="myBean" jndi-name="java:global/ejbApp/MyBeanImpl!com.my.MyBean" />

私の春の構成とサービスで:

@Autowired
private MyBean myBean;

しかし、私はこの解決策が本当に好きではありません。たとえば、次のことができるように、注釈にJNDIパスを含めたいと思います。

@EJB(lookup = MyBean.JNDI_NAME)
private MyBean myBean;
4

2 に答える 2

8

私たちは非常に素晴らしくシンプルな解決策を見つけました。Spring構成ファイルに次の情報を入力する必要があります。

<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor">
    <property name="alwaysUseJndiLookup" value="true" />
</bean>

これにより、SpringはJNDIで@Resourceで注釈が付けられたBeanを検索できます。これで、次のことができるようになります。

@Resource(mappedName = MyBean.JNDI_NAME)
private MyBean myBean;
于 2012-10-25T07:19:26.227 に答える
0

XMLを削除することを目指していますか、それともアノテーションにJNDI名を含めることを目指していますか?前者の場合、私はそれをテストしていませんが、動作するはずです:

@Configuration
public class EjbCfg {

    @Bean
    public JndiObjectFactoryBean myBean() {
        JndiObjectFactoryBean factory = new JndiObjectFactoryBean();
        factory.setJndiName(MyBean.JNDI_NAME);
        return factory;
    }

}

今、あなたは単に注入することができます:

@Autowired
private MyBean myBean;
于 2012-10-19T20:55:40.537 に答える