2013-12-20 6 views
4

나는이 코드를 사용하여 Oracle UCP를 만들려는 오라클 UCP에 oracle.ucp.jdbc.PoolDataSourceFactory 찾을 수 없습니다 : 내가

<plugin> 
      <groupId>org.apache.felix</groupId> 
      <artifactId>maven-bundle-plugin</artifactId> 
      <version>2.4.0</version> 
      <extensions>true</extensions> 
      <configuration> 
       <instructions> 
        <Embed-Dependency>ucp,ojdbc6</Embed-Dependency> 
        <Import-Package> 
         org.osgi.framework, 
         javax.sql, 
         javax.naming, 
         oracle.jdbc.pool.OracleDataSource, 
         oracle.ucp.jdbc.PoolDataSourceFactory, 
         oracle.ucp.jdbc.PoolDataSourceImpl, 
         javax.naming.spi, 
         javax.management, 
         javax.management.modelmbean, 
         oracle.jdbc.pool 
        </Import-Package> 
        <Include-Resource> 
         ucp-11.2.0.3.jar, 
         ojdbc6-11.2.0.3.jar 
        </Include-Resource> 
        <Bundle-ClassPath> 
         ucp-11.2.0.3.jar, 
         ojdbc6-11.2.0.3.jar, 
         . 
        </Bundle-ClassPath> 
        <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName> 
        <Bundle-Activator>org.test.ucp.activator.Activator</Bundle-Activator> 
       </instructions> 
      </configuration> 
     </plugin> 

을 사용하고

import oracle.ucp.jdbc.PoolDataSource; 
import oracle.ucp.jdbc.PoolDataSourceFactory; 

System.out.println("***** OracleDS_UCP -> start init of PoolDataSource"); 

      PoolDataSource pool = PoolDataSourceFactory.getPoolDataSource(); 
      pool.setConnectionFactoryClassName("oracle.jdbc.pool.OracleDataSource"); 
      pool.setURL("jdbc:oracle:thin:@localhost:1521:XE"); 
      pool.setUser("test"); 
      pool.setPassword("test"); 
      pool.setMaxStatements(10); // the maximum number of statements that may be pooled or cached on a connection. 
      pool.setInitialPoolSize(2); 
      pool.setMinPoolSize(1); 
      pool.setMaxPoolSize(50); 
      pool.setLoginTimeout(60); // one minute 
      pool.setConnectionWaitTimeout(60); // one minute 
      pool.setAbandonedConnectionTimeout(30 * 60); // thirty minutes 
      pool.setMaxIdleTime(60 * 60); // one hour and kill inactive or idle connections 
      pool.setInactiveConnectionTimeout(60 * 60); // one hour and kill inactive or idle connections 
      pool.setConnectionWaitTimeout(0); // do not wait for a used connection to be released by a client. 
      pool.setConnectionHarvestTriggerCount(40); 
      pool.setConnectionHarvestMaxCount(10); 

을하지만 난 코드를 시작할 때 독립 실행 형 번들이 오류 메시지가 나타납니다.

Test Oracle UCP 
ERROR: Bundle ucpTest [21] Error starting inputstream:ucpTest-1.0.jar (org.osgi.framework.BundleExce 
ption: Activator start error in bundle ucpTest [21].) 
java.lang.IllegalArgumentException: interface oracle.ucp.jdbc.LabelableConnection is not visible fro 
m class loader 
     at java.lang.reflect.Proxy$ProxyClassFactory.apply(Unknown Source) 
     at java.lang.reflect.Proxy$ProxyClassFactory.apply(Unknown Source) 
     at java.lang.reflect.WeakCache$Factory.get(Unknown Source) 
     at java.lang.reflect.WeakCache.get(Unknown Source) 
     at java.lang.reflect.Proxy.getProxyClass0(Unknown Source) 
     at java.lang.reflect.Proxy.newProxyInstance(Unknown Source) 
     at oracle.ucp.jdbc.proxy.ConnectionProxyFactory.createConnectionProxy(ConnectionProxyFactory 
.java:78) 
     at oracle.ucp.jdbc.PoolDataSourceImpl.getConnection(PoolDataSourceImpl.java:919) 
     at oracle.ucp.jdbc.PoolDataSourceImpl.getConnection(PoolDataSourceImpl.java:863) 
     at oracle.ucp.jdbc.PoolDataSourceImpl.getConnection(PoolDataSourceImpl.java:855) 
     at org.test.osgi.ucp.impl.OracleDS_UCP.getConnection(OracleDS_UCP.java:26) 
     at org.test.ucp.activator.Activator.testOracleUCP(Activator.java:41) 
     at org.test.ucp.activator.Activator.start(Activator.java:17) 
     at org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:645) 
     at org.apache.felix.framework.Felix.activateBundle(Felix.java:1977) 
     at org.apache.felix.framework.Felix.startBundle(Felix.java:1895) 
     at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1191) 
     at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:295) 
     at java.lang.Thread.run(Unknown Source) 

아마도 UCP를 올바르게 구성하지 않았습니다. 이 문제를 해결할 수 있습니까?

+0

예외의 전체 스택 추적입니까? 이 웹/엔터프라이즈 응용 프로그램 또는 독립 실행 형 응용 프로그램입니까? –

+0

게시물이 업데이트되었습니다. 이것은 독립 실행 형 응용 프로그램입니다. –

+0

pom.xml에 LabelableConnection을 포함하십시오. – TrungTran05T3

답변

2

피터, 저는 UCP에서 일하지 않았습니다. OSGi bundle로 사용할 수 아파치 코 몬즈 DBCP를 사용

  1. 보십시오 : 그러므로 나는 당신에게 전체 솔루션하지만 몇 가지 힌트를 줄 수 없습니다.
  2. BND 구성에서 Import-Package 지시문을 제거해보십시오. BND는 이것을 식별하기 위해 지능적입니다. 그러면 나중에 수입을 조정할 수 있습니다.
  3. 퍼팅 시도해보십시오 DynamicImport-Package : * 당신의 BND 구성 :

    < DynamicImport - 패키지에 지시 > * </DynamicImport-패키지 >

위의 단계를 시도하고 가능한 2 &을 결합 위의 3 번을 읽고 이것이 작동하면 다시보고하십시오.

+0

2 단계와 3 단계는 작동하지 않습니다. –

+0

안녕하세요 피터, http://ww.ethomasjoseph.com/osgi-project.zip에서 Maven 프로젝트로 번들 드라이버, ucp 및 클라이언트 코드를 모두 사용하여 신속하게 작은 데모 애플리케이션을 작성했습니다. 도움이 될 것이다. –

+0

어떤 이유로 NPE가 생깁니다. http://pastebin.com/3ytURu2G –