2014-12-12 4 views
2

Karaf를 사용하는 OSGi 응용 프로그램에서 작업하고 있습니다.OSGi의 PostgreSQL 커넥터

이 응용 프로그램은 최대 절전 모드 4.3을 사용하여 postgresql 데이터베이스에 연결합니다.

내 응용 프로그램은 최대 절전 모드 기본 연결 풀을 사용할 때 작동하지만 JBoss 어드 바이스는 성능이 우수한 시스템에서이 응용 프로그램을 사용하지 않습니다. 그래서 나는 c3p0 연결 풀을 사용하려고합니다.

나는 다음과 같은 번들을 사용

<bundle wrap="yes">hibernate-jpa-2.1-api-1.0.0.Final</bundle> 
<bundle wrap="no">hibernate-core-4.3.7.Final</bundle>  
<bundle wrap="no">hibernate-entitymanager-4.3.7.Final</bundle> 
<bundle wrap="no">hibernate-c3p0-4.3.7.Final</bundle> 
<bundle wrap="no">hibernate-envers-4.3.7.Final</bundle> 
<bundle wrap="no">hibernate-osgi-4.3.7.Final</bundle> 

, 나는 또한 requiered 타사 라이브러리 추가 C3P0를 사용하려면 : 그것은 간단한 항아리의로

<bundle wrap="yes">c3p0-0.9.2.1</bundle> 

wrap 옵션이 "yes"로 설정을 파일.

모든 번들은 karaf에 의해 올바르게로드됩니다.

이제 내 문제는 PostgreSQL 드라이버를 추가하는 것입니다. postgresql-9.3-1102.jdbc41.jar은 번들 (manifest.mf 파일이 아님)입니다. 내 DAO에 의해 호스팅, 조각으로 그것을 만들

  • this tutorial를 사용하여 이클립스 축복하는 포장

    • bundles.xml
    • <bundle wrap="no">postgresql-9.3-1102.jdbc41.jar</bundle>를 사용
    • 그것을 포장 클래스 패스에 추가 :

      나는하려면 시도 -layer bundle

    아무 것도 작동하지 않습니다. 각 시간 C3P0는 접속 풀을 시작하고 올바른 드라이버를 찾을 때, 그것은이 메시지와 함께 실패합니다

    :

    java.sql.SQLException: No suitable driver 
        at java.sql.DriverManager.getDriver(DriverManager.java:278)[:1.7.0_67] 
        at com.mchange.v2.c3p0.DriverManagerDataSource.driver(DriverManagerDataSource.java:240)[98:wrap_file_D_container_karaf_bundles_c3p0-0.9.2.1.jar:0] 
        at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:146)[98:wrap_file_D_trunk_container_karaf_bundles_c3p0-0.9.2.1.jar:0] 
    

    이런 종류의 문제를 찾고, 나는이 추가 수 2 이유가 발견

    • hibernate.connection.url이 잘못되었을 수 있습니다. 하지만 그건 내 사건이 아니야. 나는 그것을 여러 번 점검했다.
    • PostgreSQL의 드라이버는

    은 OSGi 환경에서 최대 절전 모드로 C3P0를 사용하기 위해 마법의 트릭이 있습니까

  • 로드되지 않는 이유는 무엇입니까?

    답변

    3

    이제 PostgreSQL은 OSGi 호환 드라이버를 제공합니다. MVN : 그것은 받는다는 중앙에서 다운로드 할 수 있습니다 아파치 karaf에서 org.postgresql/PostgreSQL을/9.4-1203-jdbc41 그것은 번들은은 OSGi로 된 DataSourceFactory을 제공

    feature:install pax-jdbc-postgresql

    으로 설치할 수 있습니다. 이 메소드를 사용하여 프로그래밍 방식으로 DataSource를 작성할 수 있습니다.

    service:list을 사용하면이 DataSourceFactory의 속성을 볼 수 있습니다.

    또는을 사용하여 pax-jdbc-config를 사용하여 구성에서 데이터 소스를 만들 수 있습니다. osgi.jdbc.driver.class=org.postgresql.Driver을 사용하여 구성에서 PostgreSQL 드라이버를 식별하십시오. 구성을 올바르게 처리 할 수 ​​있으면 코드에서 참조 할 수있는 DataSource 유형의 서비스가 제공됩니다.

    나는 이라는 완전한 것을 가지고 있는데 그것은 postgresql에 적응하기 쉽습니다.

    +0

    @cschneider https://ops4j1.jira.com/wiki/display/PAXJDBC/PostgreSQL+Driver+Adapter의 최신 상태로 응답을 업데이트 할 수 있습니다. postgresql jdbc는 이제 DataSourceFactory를 제공하는 유효한 OSGi 번들입니다. – pd40

    +1

    Makes 감각. 나는 대답을 업데이트했다. –