2015-02-06 1 views
0

요구 사항 : 자바 응용 프로그램 내에서 데이터베이스 연결을 만듭니다. 모든 Java 애플리케이션에서 동일한 연결을 통해 모든 명령문을 실행해야합니다. 문제 : 생성 된 데이터 소스를 Camel 경로에서 전달하면 분명히 새로운 연결이 생성됩니다.낙타 루트 내에서 db 연결 유지

Oracle 데이터베이스에 대한 연결을 생성하는 DataSource 개체를 사용하고 있습니다. 이 연결에서 나는 여러 문장을 실행합니다.

Connection myConn = myDBDatasource.getConnection() 

두 번째 일환으로, 난 내 길을 내 낙타 경로

SimpleRegistry reg = new SimpleRegistry(); 
reg.put("myDBDatasource", myDBDatasource); 

을 위해 생성 된 데이터 소스를 사용, 난 결국 내 데이터베이스에 끝나는 조회를 작성 빈을 사용합니다.

from("direct:start").bean(MyClass.class, 
"processData").to("jdbc:oracleDataSource?resetAutoCommit=false"); 

그래서이 경우 문제는 전체 응용 프로그램 전체에서 사용하려는 처음부터 새로운 연결을 만듭니다. 일단 Camel이 DB에 라우팅을 수행하면, Camel은 새로운 것을 생성합니다.

질문 1 : 어떻게 든 동일한 Connection (myConn)을 Camel RouteBuilder 내부에서 유지 관리 할 수있는 방법이 있습니까? 질문 2 : 내 데이터 소스가 이미 DefaultAutoCommit (거짓)으로 설정되어 있습니다. RouteBuilder Camel 내부에서이를 무시하고 쿼리를 커밋 할 수 있습니까?

답변

0

마지막으로 내 자신의 사용자 지정 데이터 소스 클래스를 만들고 Spring의 SingleConnectionDataSource에있는 일부를 구현했습니다.

1

Spring의 SingleConnectionDataSource를 사용하거나 커스텀으로 만들 수 있습니다. Camel이 커밋하지 못하게하려면 Connection 프록시를 사용하고 commit()을 비활성화하십시오.

+1

연결 풀링을 살펴 보는 것도 좋은 생각입니까? – vikingsteve

+0

나는 스프링을 사용하지 않는다. 내 프로젝트에 추가 라이브러리를 추가하지 않고 가능한 다른 해결책이 있습니까? – Stephan