2017-10-10 9 views
0

나는 2 개의 다른 응용 프로그램을 만들어 그 중 하나에 낙타 컨텍스트를 시작했습니다. 두 번째 응용 프로그램에서 이미 시작된 컨텍스트를 어떻게 사용합니까? 이 다른 응용 프로그램이나 전쟁의 사이에 낙타 컨텍스트를 공유하는 방법

나는 lookUpByname를 사용하여 컨텍스트를 받고()와 JNDI 컨텍스트 낙타 컨텍스트를 바인딩을 시도했지만 기존의 컨텍스트로드 할 수있다.

또한 응용 프로그램 2에 같은 응용 프로그램 1 맥락에서 NameStrategy을 설정하고 얻어서 시도했지만 낙타 자동 DefaultCamelContextNameStrategy에 이름과 접두사를 생성하는 것 같습니다.

code snippet: 

Application 1 : 

public static void main(String[] args) 
{ 
CamelContext ctx = new DefaultCamelContext(); 
String camelContextId= "sample"; 
ctx.setNameStrategy(new DefaultCamelContextNameStrategy(
       camelContextId)); 
ctx.start(); 

} 

Application 2: 
public static void main(String[] args) 
{ 
sampleRouter testobj = new sampleRouter(); 
testobj.test(); 
} 

public class sampleRouter extends RouteBuilder 
{ 

public static CamelContext camelContext; 
public void test() 
try 
{ 

camelContext = getContext(); 
    try { 
     camelContext.stop(); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

매번 새로운 컨텍스트를 만들지 않으려면 다른 응용 프로그램에서 이미 시작된 컨텍스트를 가져 오도록 안내하십시오.

답변

0

이유는 여러 CamelContexts을 피하기 위해 하시겠습니까? 어떤 목표를 성취하려고합니까?
분명한 요구 사항이 없으면 쉽게 도와 드릴 수 없지만 두 가지 아이디어를 제안 해 보겠습니다.

코드를 보면 두 개의 개의 JVM이 있습니다. 두 개의 main 메서드가 있으므로 코드를 살펴 봅니다. 응용 프로그램이 다른 JVM을 실행할 경우
는 통신 계층으로의 ActiveMQ 같은 JMS Message Broker를 사용합니다. 당신이이 전쟁을 배포하는 경우

/를 같은 JVM에서 응용 프로그램은 두 개의 CamelContexts를 사용하여이를 seda-vmdirect-vm처럼, VM 엔드 포인트를 통해 통신 할 수 있습니다.

+0

감사합니다. Alessandro. 우리는 일괄 처리 작업을위한 구현 구성 요소로서 Apache camel을 사용하여 파일을 읽고 쓰고 있습니다. 우리는 스케줄러로 Rundeck을 사용하고 있으며, 여러 작업이 하루 안에 실행되도록 계획되어 있습니다. 우리는 모든 작업에 대해 새로운 컨텍스트를 생성하는 것을 원하지 않습니다. 이미 시작된 컨텍스트를 사용하십시오. 파일 처리를위한 구현 구성 요소로 Camel을 사용합니다. 반대로 낙타가 실행중인 작업을 알 수 없습니다 만 구현 메커니즘 역할에만 Rundeck이 job.File 리더 CamelContext를 얻을 수 및 메타 데이터를 전달하는 작업 낙타 경로를 시작합니다 트리거합니다. – Sat