Out容器JNDI数据源

时间:2009-10-23 19:21:56

标签: java datasource jndi

我想在Java SE应用程序中使用JNDI配置DataSource。这样做的最佳方式是什么?

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

  1. Apache Naming。项目页面有一个配置数据源的特定示例,但看起来项目已经超级旧,不再有效。
  2. JBossNS。看起来使用LocalOnlyContextFactory配置本地JNDI很容易,但我没有找到任何关于如何实际配置数据源的文档。
  3. 如果可能,我还想用JTA事务管理器配置数据源(使用JOTM?)。

4 个答案:

答案 0 :(得分:10)

为什么要使用JNDI呢?如果你有一个提供者,但是有一些替代方案,例如依赖注入(IoC:通过SpringGuice),这并不是一个糟糕的解决方案。

描述了Spring JDBC数据访问here。最棒的是,您可以使用Spring在代码中注入DataSource

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

答案 1 :(得分:4)

这些引用很老但可能有助于使用jnpserver(JBoss命名服务提供程序):

答案 2 :(得分:3)

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

答案 3 :(得分:1)

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

您可以轻松地使用Simple-JNDI以声明方式定义DataSource或连接池,并将其绑定到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