当前位置: 首页 > 面试题库 >

从jndi.properties注入后,为什么在JNDI中找不到数据源?

喻嘉泽
2023-03-14
问题内容

这是我的persistence.xml

<persistence>
  <persistence-unit name="MyUnit">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <jta-data-source>jdbc/abcDS</jta-data-source>
  </persistence-unit>
</persistence>

jndi.properties文件src/test/resources应在测试期间从中创建数据源,因为缺少具有真实数据源的真实应用服务器:

java.naming.factory.initial=org.apache.openejb.client.LocalInitialContextFactory
jdbc/abcDS=new://Resource?type=DataSource
jdbc/abcDS.JdbcDriver=org.hsqldb.jdbcDriver
jdbc/abcDS.JdbcUrl=jdbc:hsqldb:mem:testdb
jdbc/abcDS.JtaManaged=true
jdbc/abcDS.DefaultAutoCommit=false
jdbc/abcDS.UserName=sa
jdbc/abcDS.Password=

这是测试类:

public class FinderTest {
  @BeforeClass
  public static void startEJB() throws Exception {
    InitialContext ic = new InitialContext();
    ic.lookup("jdbc/abcDS");
  }
}

不幸的是,没有创建数据源,这就是我一直看到的内容:

[...]
javax.naming.NameNotFoundException: Name "jdbc/abcDS" not found.
at org.apache.openejb.core.ivm.naming.IvmContext.federate(IvmContext.java:193)
at org.apache.openejb.core.ivm.naming.IvmContext.lookup(IvmContext.java:150)
at org.apache.openejb.core.ivm.naming.IvmContext.lookup(IvmContext.java:124)
at org.apache.openejb.core.ivm.naming.ContextWrapper.lookup(ContextWrapper.java:115)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at com.XXX.FinderTest.startEJB(FinderTest.java:31)
[...]

我究竟做错了什么?请帮忙!

ps。顺便说一下,这是怎么回事(怎么回事?):

ic.lookup("java:/openejb/Resource/jdbc/abcDS");

问题答案:

查找时应找到 openejb:Resource/jdbc/abcDS

您也可以在TestCase中进行注入。基本上,您:

  1. 添加一个空的src/test/resources/META-INF/application-client.xmlejb-jar.xml
  2. 注释您的测试 @LocalClient
  3. 呼叫 initialContext.bind("inject", this)

请参阅examples.ziptestcase- injection中的示例

编辑 如果查找仍然失败,请发布日志输出(控制台输出)。



 类似资料:
  • 我有一个MS SQLServer 2008 a数据库,名为:“conpool”。并在那里创建了一个具有id、全名和年龄的表。现在,我已经在Netbeans 7.3和Tomcat 7.0.30中的Java中实现了一个连接池,以避免每次都将连接绑定到我的数据库,并且我可以对数据库进行查询。 我的连接池: //------------------------Beginn JDBC连接池---------

  • 问题内容: 谁能帮助解释为什么JNDI应该是公开数据库/ jms等服务的首选方式? 我遇到的所有帖子都谈到了不必加载特定的驱动程序管理器,从连接池中受益等优点,但是可以通过在属性文件中指定驱动程序管理器并使用反射来轻松实现。 连接池也可以通过将正确的实现方式通过spring或其他方式连接到应用Bean中来实现。 那么,为什么使用JNDI会更好呢? 问题答案: 当您必须在不同环境之间移动应用程序时,

  • 我有一个外部字符串资源声明到服务器(JBoss 7.1.1或WA 8)JBoss: 我可以从我的war模块中很好地获得它,如下所示: 但是如果我试图从EJB模块(Maven dependency作为EJB类型)获取它,比如 我得到一个空值! 我错过什么了吗?

  • 我想从sqlite数据库添加的数据中在listview中显示我的所有数据。当我单击save按钮时,它显示一条消息“added successful”。但每次它都显示错误消息“data not found”。为什么不显示listview? 错误显示如下: MyDatabaseHelper.java

  • 我试图向一个URL发送一个AJAX请求,它成功地返回了我试图抓取的内容。但是,当我试图实际拉出HTML的特定部分时,它总是返回None,或者如果我尝试find_all,它返回一个空列表。 下面是我的代码: 如果取消对的注释,将看到它返回none。但是,如果运行,您将返回HTML并可以看到其中的div类。 我已经尝试了很多不同的方法,我开始觉得我的问题不在我所寻找的地方。有什么想法,我如何可以有这个

  • 问题内容: 我正在尝试“将现有项目导入工作区”。作为“根目录”,我选择所有.java(和.class)文件所在的目录。Eclipse告诉我“未找到要导入的项目”。为什么? 问题答案: Eclipse正在寻找eclipse项目,这意味着它正在根目录(和)中搜索特定于Eclipse的文件。您或者给了Eclipse错误的目录(如果要导入一个eclipse项目),或者您实际上想从现有源创建一个新项目(->