Java 容器外JNDI数据源

Java 容器外JNDI数据源,java,datasource,jndi,Java,Datasource,Jndi,我想在JavaSE应用程序中使用JNDI配置数据源。最好的方法是什么 到目前为止,我遇到了两个项目: 。项目页面有一个配置数据源的特定示例,但看起来项目非常旧,不再处于活动状态 。使用LocalOnlyContextFactory配置仅本地JNDI似乎很容易,但我还没有找到任何关于如何实际配置数据源的文档 如果可能的话,我还想用一个JTA事务管理器(使用JOTM?)配置数据源。为什么要使用JNDI?如果你有一个提供者,这并不是一个糟糕的解决方案,而是有一些替代方案,比如依赖注入(IoC:via或

我想在JavaSE应用程序中使用JNDI配置数据源。最好的方法是什么

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

  • 。项目页面有一个配置数据源的特定示例,但看起来项目非常旧,不再处于活动状态
  • 。使用
    LocalOnlyContextFactory
    配置仅本地JNDI似乎很容易,但我还没有找到任何关于如何实际配置数据源的文档

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

    为什么要使用JNDI?如果你有一个提供者,这并不是一个糟糕的解决方案,而是有一些替代方案,比如依赖注入(IoC:via或)

    描述了Spring JDBC数据访问。最棒的是,您可以使用Spring将
    数据源
    注入到您的代码中:

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

    这些参考文献非常古老,但可能有助于使用jnpserver(JBoss命名服务提供商):


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

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

        您可以轻松地使用简单的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
        
        现在,您可以通过以下方式从代码内部访问数据源:

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

        有关更多信息,请参见

        我应该在帖子中提到这一点。我正在编写一个将在web应用程序中运行的组件,但我也希望能够从普通JavaSE命令行应用程序和JUnit测试中调用它。我最初的想法是,我应该能够设置必要的环境(JNDI、DBCP、JTA),以便组件代码可以始终依赖这些环境。我不愿意在应用程序中引入全新的框架,如Spring,但这可能是一种选择。您会推荐与此相关的特定Spring文档页面吗?我已经编辑了答案,提供了一个链接和一些操作指示。SpringJDBC非常强大,感谢您提供的详细信息。我没有足够的分数将答案标记为有用:|感谢您将您的叉子添加到此答案中。我用你的叉子用了一段时间。但我在DI模式下使用它(我将JNDI提供给DI框架,并使用简单的JNDI配置文件来轻松配置非容器软件,以避免用户使用DI提供者配置文件)。