2017-11-10 2 views
0

@BeanInject을 프로세서에 사용하려고하는데 항상 null입니다.캔트를 프로세서에 넣으십시오

RouteBuilder에서 빈에 액세스 할 수 있으며 프로세서 클래스가 RouteBuilder에 정의되어 있지만 프로세서 클래스가 자체 파일에 정의되어 있지 않은 경우 프로세서에서도 액세스 할 수 있습니다.

이 기능이 지원되지 않습니까? 아니면 뭔가 빠졌습니까?

[업데이트] I 아파치 카멜 2.17.2을 사용하고 있는데, 코드가 이하의 코드는 오브젝트 제 1 프로세서의 인스턴스가 아닌 두 번째 인쇄 낙타 예-CDI 로부터 취해진 다. 코드는 단위 테스트에서 실행됩니다. 당신은 CDI 또는 스프링의 IoC 등을 사용 해달라고하면 후자는 가난한 망 대체하고, 전용 -

public class MyRoutes extends RouteBuilder { 
final static Logger LOG = LoggerFactory.getLogger(MyRoutes.class); 

@Inject 
@Uri("timer:foo?period=5000") 
private Endpoint inputEndpoint; 

@Inject 
@Uri("log:output") 
private Endpoint resultEndpoint; 

@BeanInject 
private SomeBean someBean; 

@Override 
public void configure() { 
    from("timer:foo?period=500") 
     .to("bean:counterBean") 
      .process(new Processor(){ 

       @Override 
       public void process(Exchange exchange) throws Exception { 
        LOG.info("[" + someBean + "]"); 
       } 
      }) 
     .process(new MyProcessor()) 
     .to("mock:result"); 
    } 
} 

프로세서는 CDI를 사용하는 경우

public class MyProcessor implements Processor { 
final static Logger LOG = LoggerFactory.getLogger(MyProcessor.class); 

@BeanInject 
private SomeBean someBean; 

@Override 
public void process(Exchange exchange) throws Exception { 
    LOG.info("In processor [" + someBean + "]"); 
} 
} 
+1

당신이 어떤 코드를 보여 주면 사용하는 카멜의 버전과 어떻게 시작/달리는 카멜 –

+0

안녕하세요, 미안, 내가 그랬어 야지. 게시물을 업데이트했습니다. –

답변

1

당신은 낙타의 @BeanInject 이상 @Inject를 사용하여 선호한다 카멜 콩에 사용할 수 있습니다.

다음은 새로운 생성자를 통해 MyProcessor 인스턴스를 직접 생성했기 때문에 문제가 발생했습니다. 그렇다면 인스턴스를 생성하는 표준 Java와 CDI 나 Apache Camel이 아니기 때문에 종속성 주입을 할 수 없습니다.

CDI와 명명 된 빈을 사용할 수 있으며 프로세서에 종속성 삽입을 사용할 수 있습니다 (예 : 표준 CDI 주석 사용). 그리고 프로세서를 @Inject을 통해 RouteBuilder에 삽입하고 Camel 경로에서이 인스턴스를 호출하십시오.

+0

도움 주셔서 감사합니다. Claus. 나는 나의 접근 방식을 다시 생각해야 할 것이다. –

관련 문제