如何从数据源连接确定有关WebLogic数据源的信息?

时间:2014-03-21 15:59:34

标签: java spring weblogic datasource

我在WebLogic中运行了一个Spring应用程序。在我的DAO中,它继承了一个带有返回“javax.sql.DataSource”的方法的基类。我在Spring应用程序上下文中使用“jee:jndi-lookup”间接注入该数据源,以从JNDI获取数据源。当我在调试器中查看它时,它似乎是“weblogic.jdbc.common.internal.RmiDataSource”。

我想知道如何在我的代码中反省数据源,以确定有关我连接的数据库的信息,特别是主机,端口,SID和用户名。有什么方法可以做到吗?

对于某些背景知识,我在我的应用程序中进行了广泛的诊断,以解决数据库连接和查询问题。如果在运行时,我可以从正在使用的数据库连接中内省有关WebLogic数据源的信息,这将非常有用。

正如我所描述的那样,我已经在调试器中确定了实际类型是什么,并且我已经检查了该对象中所有明显的属性以用于投射或反射机会,并且我没有看到任何明显的信息指示,如“主持人“,”“端口”或“SID”。

2 个答案:

答案 0 :(得分:0)

我认为你可以使用反射并调用这个类的所有getter方法 这应该会给你一些有用的信息。但根据这个类的名称,
它看起来像是一个内部WebLogic类,并不是真的为此设计的。
不过,你可以用反射做,你甚至可以用反射调用私有的getter方法。

Java Reflection API

答案 1 :(得分:0)

"对" JEE方法并不关心代码中的这些低级细节。在找出哪些DataSource不起作用后,故障排除问题仅涉及应用程序服务器日志和应用程序服务器配置调整。

从DataSource详细信息中隔离应用程序有几个很好的理由:

  • 你不应该忘记你正在使用的抽象数据源;在同一个类中使用多个DataSource(实际上是多个Connection)是非常不寻常的。
  • 您在应用程序服务器配置中定义了永久数据源配置,它们不是机密或隐藏的。
  • 另一方面,
  • 瞬态数据源状态可通过应用程序服务器工具和日志访问。
  • 第三方面,数据源实现是专有的,需要自由优化;期望他们提供有用的信息是不合理的。
  • 您的应用程序不太可能修复麻烦的数据源;如果可以,它将能够混淆同一应用程序服务器中的其他应用程序。
  • "替换"一个数据源与另一个没有任何意义。
  • 您希望数据源定义根据具体情况而变化的任何情况都应通过其他方式处理,大多数情况下接近DBMS(例如,如果DBMS进程或计算机需要关闭并重新启动,则可以配置服务器作为集群共享相同的IP地址;使用Oracle相对容易。