使用 JNDI 的 Hibernate 数据源连接

Hibernate datasource connection with JNDI

提问人:Micah 提问时间:7/3/2018 最后编辑:Azzabi HaythemMicah 更新时间:8/12/2019 访问量:248

问:

我可以使用 JDBC 获得连接

OracleDataSource ds  = (OracleDataSource) Class.forName("oracle.jdbc.pool.OracleConnectionPoolDataSource").newInstance();
//...
Connection connection = ds.getConnection("USER", "PASSWORD");

但是我不能使用 hibernate.connection.datasource 和 jni 为 Hibernate 做到这一点: 我尝试了不同的变体,但它不起作用。

    String var1 = "oracle.jdbc.pool.OracleConnectionPoolDataSource";
    String var2 = "java:/oracle.jdbc.pool.OracleConnectionPoolDataSource";
    String var3 = "java:/oracle/jdbc/pool/OracleConnectionPoolDataSource";
    String var4 = "java:/OracleConnectionPoolDataSource";
    configuration.setProperty("hibernate.connection.datasource",var1);

所有变体在尝试构建 SessionFactory 时都会抛出异常:

 private static SessionFactory createSessionFactory(Configuration configuration) {
    StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder();
    builder.applySettings(configuration.getProperties());
    ServiceRegistry serviceRegistry = builder.build();
    return configuration.buildSessionFactory(serviceRegistry);
}

像这样的例外:

  Exception in thread "main" org.hibernate.engine.jndi.JndiException: Error parsing JNDI name [oracle.jdbc.pool.OracleConnectionPoolDataSource]

它的 Maven 依赖项:

<dependency>
        <groupId>local.ora9iDriver</groupId>
        <artifactId>ora9iDriver</artifactId>
        <version>1.0</version>
        <scope>system</scope>
        <systemPath>C:/Users/micah/.m2/repository/local/ora9iDriver/oraDriver/1.0/ora9i.jar</systemPath>
    </dependency>
    <dependency>
        <groupId>com.oracle</groupId>
        <artifactId>ojdbc14</artifactId>
        <version>9.0.2.0.0</version>
    </dependency>
java oracle hibernate jndi

评论

0赞 DamCx 7/3/2018
您是否指定了数据源?如果是,你在哪里做的?
0赞 Micah 7/3/2018
我想我是在 maven 依赖项上做到的。我想我做到了,因为我可以使用JDBC获得连接。
0赞 Micah 7/3/2018
我可以获取名称的 DataSource 类并创建它的实例。
1赞 DamCx 7/3/2018
当您使用 JNI 时,您需要在某处创建变量。到目前为止,您已经做了什么告诉 maven,您将使用 Oracle JDBC 连接的依赖项。事实上,你让它与意味着依赖关系是好的。现在,您需要在应用程序服务器上的某个位置注册 JNI 名称才能检索它。另一种解决方案是创建一个外部属性文件来获取数据库服务器的 URL,并将其与Class.forName(...)Class.forName(...)
0赞 Micah 7/3/2018
DamCx,您能帮我举例说明注册 JNI 名称并为其字符串引用 hibernate.connection.datasource 设置吗?

答:

1赞 Nirmala 7/12/2018 #1

你能看看 UCP with Hibernate 博客并获得一些指导吗?