2017-02-13 15 views
0

karaf上のOSGIバンドルのカスタムロケーションからhibernate.cfg.xmlをロードするために、hibernateを設定する必要があります。私は唯一のオプションであると思われるJARファイルを編集することなく設定を編集できる必要があります。私はHibernateのSessionFactoryをロードするために以下のクラスを使用していますが、このサービスを公開するHibernate OSGIモジュールから返されたSessionFactoryでこれを設定する方法はないようです。私はこの問題を数日間研究してきましたが、解決策を見つけることができません。私はHibernate 4.3.11.Finalを使用しています。すべてのヘルプは非常に多くの仕事と私は問題を解決することができた多くの異なったリードを、以下の何日後おかげで、KARAF OSGIバンドル上のカスタムhibernate.cfg.xmlの位置

パブリッククラスHibernateUtilの{

private static SessionFactory sf; 

public static Session getSession() { 
    return getSessionFactory().openSession(); 
} 

private static SessionFactory getSessionFactory() { 
    if (sf == null) { 
     Bundle thisBundle = FrameworkUtil.getBundle(HibernateUtil.class); 

     BundleContext context = thisBundle.getBundleContext(); 

     ServiceReference sr = context.getServiceReference(SessionFactory.class.getName()); 
     sf = (SessionFactory) context.getService(sr); 
    } 
    return sf; 
} 
+0

私はHibernate 4.3.11.Finalを使用しています –

答えて

0

を高く評価しています。主な考えは、Hibernate OSGIがそれを見つけるためにjarファイルの中になければならないhibernate.cfg.xmlファイルの外にデータベース接続プロパティを格納することでした。それどころか、プロパティファイルは好きな場所に置くことができます。この青写真を使用してJNDIサービスを定義達成するために、次のタグとhibernate.cfg.xmlの上のJNDIサービスを設定:

<property name="connection.datasource">osgi:service/jdbc/mysqlds</property> 

青写真とJNDIサービスを定義するためのコードは、以下であります

<bean id="dataSource" 
    class="org.springframework.jdbc.datasource.SimpleDriverDataSource"> 
     <property name="driverClass" value="${db.driverClass}"/> 
     <property name="url" value="${db.url}"/> 
     <property name="username" value="${db.username}"/> 
     <property name="password" value="${db.password}"/> 
    </bean> 


<service interface="javax.sql.DataSource" ref="dataSource"> 
    <service-properties> 
    <entry key="osgi.jndi.service.name" value="jdbc/mysqlds"/> 
    <entry key="datasource.name" value="MySqlDS"/> 
    </service-properties> 
</service> 

私は、通常、classnotfoundエラーで失敗する多くの異なるDataSourceクラスを使用しようとしました。私のために働いたのはSimpleDriverDataSourceでした。

関連する問題