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