2017-02-13 17 views
0

Мне нужно настроить hibernate для загрузки hibernate.cfg.xml из пользовательского местоположения в комплекте OSGI на karaf. Мне нужно иметь возможность редактировать конфигурацию без редактирования JAR-файла, который, по-видимому, является единственным доступным вариантом. Я использую следующий класс для загрузки Hibernate SessionFactory, как описано в документации на гибернацию, но, похоже, нет способа настроить это на SessionFactory, возвращаемом модулем OSGI Hibernate, подвергая эту услугу. Я исследовал эту проблему несколько дней, но я не могу найти решение. Я использую Hibernate 4.3.11.Final. Любая помощь очень высоко ценится, спасибоПользовательское местоположение hibernate.cfg.xml в наборе OSGI KARAF

общественного класса 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.cfg.xml, который должен находиться внутри файла jar для Hibernate OSGI, чтобы найти его. В противном случае файл свойств может быть расположен в любом месте. Для достижения этой цели определить сервис JNDI, используя план, то конфиг службу JNDI на hibernate.cfg.xml со следующим тегом:

<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> 

Важно отметить, что я попытался использовать много разных классов DataSource, которые обычно терпят неудачу с ошибкой classnotfound. Единственное, что сработало для меня, было SimpleDriverDataSource

 Смежные вопросы

  • Нет связанных вопросов^_^