【问题标题】:DataSource naming JBossEAP 6.2 vs Web Logic数据源命名 JBoss EAP 6.2 vs Weblogic
【发布时间】:2014-10-13 01:52:54
【问题描述】:

我正在将一套相关的应用程序从 WebLogic 移植到 JBoss EAP v6.2。

我已经使用 JBoss 命令行界面建立了一个数据源连接,并将它连接到一个 oracle 数据库。此数据库的名称为“mydatasource”,JNDI 名称为 “java:jboss/datasources/mydatasource”按照 JBoss 标准。我可以测试和验证这个数据库连接。

但是,当我尝试移植代码并运行它时,连接不起作用。在 WebLogic 中工作的代码很简单:

    InitialContext ic = new InitialContext() ;
    DataSource ds = (DataSource)ic.lookup(dataSource) ;

dataSource 中的值是“mydatasource”。

这在 Web Logic 中有效,但在 JBoss 中它会抛出 NameNotFoundException

javax.naming.NameNotFoundException: mydatasource-- service jboss.naming.context.java.mydatasource

显然,两台服务器之间的 InitialContext 设置方式有所不同。

但是这个端口涉及大量的小型应用程序,所有这些应用程序都通过上述代码连接到数据源。我不想重写所有代码。

有没有办法通过配置(可能是 InitialContextFactory)来定义初始上下文,这样上面的代码就可以在不重写的情况下工作,或者是否有另一种命名 JBoss 将接受的数据源的方式允许这样的代码以上无需重写即可工作?

还是我们必须硬着头皮接受这段代码需要重写?

更新:是的,我知道只需将“java:jboss/datasources/mydatasource”传递给 InitialContext 查找即可解决问题,但我正在通过配置寻找解决方案,如果有这样的解决方案,而不是通过编码。

【问题讨论】:

  • dataSource 的值是多少?它必须是java:jboss/datasources/mydatasource,因为这是你给它起的名字。在服务器启动时,您应该会在日志中看到绑定数据源名称的列表。
  • 是的,这就是问题所在。不知何故,在 Web Logic 中,InitialContext 能够在没有任何初步样板的情况下仅解析“mydatasource”。我宁愿不更改代码,但我可能不得不这样做。将其设为“java:jboss/datasources/mydatasource”很容易解决问题,但我一直在寻找通过配置而不是编码来处理这个问题的方法,因为我可能必须在数百个地方制作相同的 mod。跨度>

标签: weblogic datasource jndi jboss-eap-6


【解决方案1】:

通过配置正确做到这一点的方法是使用

java:comp/env/jdbc/myDataSource

然后使用 web.xml 中的 resource-ref 将其映射到声明的数据源,并使用 weblogic.xml 或 jboss-web.xml 将其实际映射到真实的数据源

在 weblogic 管理控制台中,当你定义数据源时,它可以是 jdbc/realDataSource

JNDI path Tomcat vs. Jboss

对于weblogichttp://docs.oracle.com/cd/E13222_01/wls/docs103/jdbc_admin/packagedjdbc.html

【讨论】:

  • @Kalpesh_Soni:谢谢。我对您的“JNDI 路径 Tomcat 与 Jboss”链接特别是“选项 2”很感兴趣,但我的一个问题是该页面没有提及它适用的 JBoss 版本。有什么东西不适用于 JBoss EAP 6.2?
  • 我应该提到注解,是的,在迁移旧应用程序时,您应该尽可能使用注解,并且尽可能少使用xml,jboss eap 6+ 是java ee 6 认证的@Resource @EJB @WebServlet 可以工作 - 这是大图 mgreau.com/posts/2013/12/10/…
  • 可以注入不同类型的资源docs.oracle.com/javaee/6/tutorial/doc/bncjk.html
  • @Kalpesh_Soni:您的回答是正确的,尽管最终我们没有使用注解,因为我们移植的大部分代码都允许动态运行时查找变量数据源名称,这与注解不兼容。虽然这段代码可以而且可能应该被重写,但这并不在卡片中。我们将使用的部分是使用 jboss-web.xml 来管理 WebLogic 和 JBoss 之间的不同命名约定,这是我提出问题的动机。谢谢。
猜你喜欢
  • 2015-05-28
  • 2017-01-20
  • 2014-07-28
  • 1970-01-01
  • 2015-08-25
  • 1970-01-01
  • 1970-01-01
  • 2014-10-25
  • 2014-10-07
相关资源
最近更新 更多