15

我想在 Java SE 应用程序中使用 JNDI 配置数据源。做这个的最好方式是什么?

到目前为止,我遇到了 2 个项目:

  1. 阿帕奇命名。项目页面有一个配置数据源的具体示例,但看起来项目超级旧,不再活动。
  2. 老板娘。使用 配置仅限本地的 JNDI 看起来很容易LocalOnlyContextFactory,但我还没有找到任何关于如何实际配置数据源的文档。

如果可能的话,我还想使用 JTA 事务管理器(使用 JOTM?)配置数据源。

4

4 回答 4

10

你为什么要为此使用 JNDI?如果您有提供程序,这并不是一个糟糕的解决方案,而是有其他替代方案,例如依赖注入(IoC:通过SpringGuice)。

此处描述了 Spring JDBC 数据访问。很棒的是,您可以使用 Spring 将 aDataSource注入您的代码中:

<bean class="com.my.Persister">
    <property name="dataSource" ref="dataSource" />
</bean>

可以使用 JNDI 查找来定义数据源:

<jee:jndi-lookup id="dataSource" jndi-name="jdbc/MyDataSource" /> 

在测试环境中,您可以直接注入数据源:

<bean id="dataSource" class="apache.db.PoolingDataSource">
    <!-- config goes here -->
</bean>
于 2009-10-23T20:00:41.943 回答
4

这些参考资料很旧,但可能有助于使用 jnpserver(JBoss 命名服务提供者):

于 2009-10-23T20:17:50.380 回答
3

一个非常易于使用的独立 JNDI 解决方案是simple-jndi。只要您只在单个 JVM 中需要它,它就像一个魅力,因为它是一个没有网络服务器的库。

于 2013-05-11T14:17:28.747 回答
1

klenkes74 引用的 Simple-JNDI 版本不再处于积极开发中。因为我遇到了一些问题,所以我分叉了它,修复了一些错误并实现了一些新功能。我已经将旧版本不仅用于测试,还用于生产,因为我更喜欢服务定位器模式而不是依赖注入,尽管后者现在更流行。

您可以轻松地使用 Simple-JNDI 以声明方式定义数据源或连接池,并将其绑定到 JNDI 上下文。

在你的类路径中定义一个 jndi.properties 文件:

java.naming.factory.initial=org.osjava.sj.SimpleContextFactory
org.osjava.sj.root=[absolute_or_relative_path_to_a_property_file]

属性文件如下所示:

type=javax.sql.DataSource
driver=org.gjt.mm.mysql.Driver
url=jdbc:mysql://localhost/testdb
user=testuser
password=testing

现在您可以通过以下方式从代码内部访问您的 DataSource:

  InitialContext ctxt = new InitialContext();
  DataSource ds = (DataSource) ctxt.lookup("name_of_your_datasource");

有关更多信息,请参阅https://github.com/h-thurow/Simple-JNDI

于 2017-06-24T11:29:21.050 回答