복붙노트

[SPRING] Spring Bean으로 EJB 3 주입하기

SPRING

Spring Bean으로 EJB 3 주입하기

Spring (3.1.2) 서비스 (둘 다 다른 WAR에 있음)에 EJB를 삽입하려고합니다. 둘 다 매우 간단합니다 (예제를 단순화하기 위해 제거 된 메소드).

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;

해결법

  1. ==============================

    1.우리는 아주 좋은 간단한 해결책을 발견했습니다. 스프링 설정 파일에 다음을 넣어야합니다.

    우리는 아주 좋은 간단한 해결책을 발견했습니다. 스프링 설정 파일에 다음을 넣어야합니다.

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

    그리고 스프링을 사용하면 JNDI에서 @Resource로 주석 처리 된 bean을 검색 할 수 있습니다. 이제는 할 수 있습니다.

    @Resource(mappedName = MyBean.JNDI_NAME)
    private MyBean myBean;
    
  2. ==============================

    2.XML을 없애거나 JNDI 이름을 주석에 넣으려고합니까? 전자의 경우 테스트하지는 않았지만 작동해야합니다.

    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;
    
  3. from https://stackoverflow.com/questions/12963405/injecting-ejb-3-into-spring-bean by cc-by-sa and MIT license