【发布时间】: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