【问题标题】:HIbernate with karaf and MS-sql not working使用 karaf 和 MS-sql 的 HIbernate 不起作用
【发布时间】:2017-04-12 11:00:39
【问题描述】:

我正在将 Hibernate 5 与 MSSQL 2012 连接起来。我能够使用 java 成功连接(主要方法)。但是当我在 Karaf 中部署时,它给了我错误:

Caused by: org.hibernate.boot.registry.classloading.spi.ClassLoadingException: Unable to load class [net.sourceforge.jtds.jdbc.Driver]
    at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:229)
    at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.loadDriverIfPossible(DriverManagerConnectionProviderImpl.java:183)
    at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.buildCreator(DriverManagerConnectionProviderImpl.java:139)
    at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:78)
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:217)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:189)
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.buildJdbcConnectionAccess(JdbcEnvironmentInitiator.java:145)
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:66)
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35)
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:88)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:234)
    ... 61 more
Caused by: java.lang.ClassNotFoundException: Could not load requested class : net.sourceforge.jtds.jdbc.Driver
    at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl$AggregatedClassLoader.findClass(ClassLoaderServiceImpl.java:217)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)[:1.8.0_51]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)[:1.8.0_51]
    at java.lang.Class.forName0(Native Method)[:1.8.0_51]
    at java.lang.Class.forName(Class.java:348)[:1.8.0_51]
    at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:226) 

这是我的 hibernate.cfg 文件:

<hibernate-configuration>
  <session-factory>
    <property name="hibernate.connection.driver_class">net.sourceforge.jtds.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:jtds:sqlserver://<ip>:<port>/<dbname></property>
    <property name="hibernate.connection.username">testuser</property>
    <property name="hibernate.connection.password">abc</property>

    <property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property>


  </session-factory>
</hibernate-configuration>

我在 karaf 中安装了该功能:

wrap:mvn:net.sourceforge.jtds/jtds/1.3.1

但仍然存在错误。存储库还包含类(Driver.class),但我仍然收到此错误。任何人都可以帮我解决这个问题吗?我错过了什么?

【问题讨论】:

    标签: hibernate maven apache-karaf


    【解决方案1】:

    通常在 OSGi 中使用 Driver.class 加载 jdbc 驱动程序不起作用。 相反,您应该使用pax-jdbc-config 来提供作为 OSGi 服务的 DataSource,并使用 Aries JPA 来使休眠完全为 OSGi 做好准备。

    我还没有使用过 MS-SQL,但是 pax-jdbc 也支持它。所以它通常应该工作。

    有关完整示例,请参阅tasklist-ds

    【讨论】:

      猜你喜欢
      • 2016-05-27
      • 1970-01-01
      • 2013-03-16
      • 2011-04-04
      • 1970-01-01
      • 2018-10-22
      • 2018-08-31
      • 1970-01-01
      • 2018-06-28
      相关资源
      最近更新 更多