2016-06-17 5 views
0

私は、KarafでDSA(宣言型サービス)を使用するAries JPAを使用したいと思いますが、私はEMの作成をさらに制御する必要があります。エンティティマネージャファクトリビルダーでAries DSA JPAを使用する方法

私は自分のEMをその場で作成できるように、EntityManagerFacrotyまたはBuilderのインスタンスを取得したいと考えています。

理由は、私は異なるEMを作成するファクトリサービスがあります。クライアントが接続する必要のあるDataSourceに依存しているため、サービスの接続名をハードコードできません。

のようなもの:

@Reference(target = "(osgi.unit.name=my.factory)") 
    protected EntityManagerFactoryBuilder emfb; 

と私はオンデマンドで工場やEMを作るためにそれを使用することができます。 Karafのプロバイダとして日食リンクのセットアップのための

も任意のヒント: *ダービー * MySQLの

感謝。

が少し進歩しました。バンドルにこのユニット名の永続ユニットが含まれている場合、ariesはEMFBをコンポーネントに注入します。

このコンポーネントからDerby/Mysqlへの新しい接続を作成しようとしていますが、eclipseのリンク・プロパティーを使用していますが、ドライバーの不足エラーが発生しています。

eclipselink.jdbc.write-connections.max=10 
javax.persistence.jdbc.url=jdbc\:mysql\://192.168.99.101:3306/database 
eclipselink.jdbc.write-connections.min=1 
eclipselink.ddl-generation=create-or-extend-tables 
javax.persistence.jdbc.user=***** 
javax.persistence.jdbc.password=****** 
eclipselink.jdbc.read-connections.max=10 
eclipselink.logging.level=INFO 
eclipselink.jdbc.read-connections.min=1 

私はそうのようにEntityManagerを作成することができ、新規のEntityManagerFactoryおよびテストを作成するには、これらの設定のプロパティを使用しています:

try { 
    emf = emfb.createEntityManagerFactory(configuration); 
    if (emf.isOpen()) { 
     // test creating a new EM 
     EntityManager em = emf.createEntityManager(); 
     LOGGER.info("EntityManager: [{}]", em); 
     em.close(); 
    } else { 
     LOGGER.error("EMF is closed"); 
    } 
} catch (Exception ex) { 
    LOGGER.error("Exception", ex); 
} 

私はMySQLやダービーのどちらかが(私がしようとしたエラーを取得していますDerbyプロパティ)は定義されていません。

2016-06-23 20:17:48,643 | ERROR | nsole user karaf | FactorySessionProviderImpl  | 374 - factory - 4.1.1 | activate | Exception 
javax.persistence.PersistenceException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.6.1.v20150916-55dc7c3): org.eclipse.persistence.exceptions.DatabaseException 
Internal Exception: java.sql.SQLException: No suitable driver found for jdbc:mysql://192.168.99.101:3306/database?autoReconnect=true&autoReconnectForPools=true 
Error Code: 0 
     at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:815) 
     at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.getAbstractSession(EntityManagerFactoryDelegate.java:205) 
     at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.createEntityManagerImpl(EntityManagerFactoryDelegate.java:305) 
     at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:337) 
     at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:303) 
     at com.factory.FactorySessionProviderImpl.activate(FactorySessionProviderImpl.java:90) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)[:1.8.0_91] 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)[:1.8.0_91] 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.8.0_91] 

私は、PAX-JDBC PAX-JDBC-config設定PAX-JDBC-mysqlのPAX-JDBC-ダービー 用karafの特徴はまた、JPAを持ってインストールし、[OK]を

<feature>jpa</feature> 
    <feature>eclipselink</feature> 
    ... 
+0

OSGi enRouteでは、今後の仕様に沿った良い例を提供するための活動が行われています。 https://github.com/osgi/osgi.enroute.examples.jdbcを参照してください。 –

答えて

0

をEclipseLinkは、問題を見つけました!

これは設定プロパティでした。

javax.persistence.jdbc.driver=com.mysql.jdbc.Driver 
eclipselink.target-database=MySql 
javax.persistence.jdbc.url=jdbc\:mysql\://<address:ip>/datasource?autoReconnect=true&autoReconnectForPools=true 
javax.persistence.jdbc.user=*** 
javax.persistence.jdbc.password=*** 
eclipselink.jdbc.write-connections.max=16 
eclipselink.jdbc.write-connections.min=4 
eclipselink.jdbc.read-connections.max=64 
eclipselink.jdbc.read-connections.min=16 
eclipselink.ddl-generation=create-or-extend-tables 
eclipselink.logging.level=INFO 
関連する問題