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

Java 如何从数据源连接确定有关WebLogic数据源的信息?,java,spring,weblogic,datasource,Java,Spring,Weblogic,Datasource,我有一个在WebLogic中运行的Spring应用程序。在我的DAO中,它继承了一个基类和一个返回“javax.sql.DataSource”的方法。我在Spring应用程序上下文中使用“jee:jndi查找”间接地注入该数据源,以从jndi获取数据源。当我在调试器中看到它时,它似乎是一个“weblogic.jdbc.common.internal.RmiDataSource” 我想弄清楚如何在代码中内省该数据源,以确定有关连接到的数据库的信息,特别是主机、端口、SID和用户名。我有办法做到吗

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

我想弄清楚如何在代码中内省该数据源,以确定有关连接到的数据库的信息,特别是主机、端口、SID和用户名。我有办法做到吗

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


正如我所描述的,我已经在调试器中确定了实际的类型,并且我已经检查了该对象中的所有明显属性,以寻找强制转换或反射机会,并且我没有看到任何明显的信息指示,如“主机”、“端口”或“SID”.

我认为您可以使用反射并调用该类的所有getter方法。
这会给你一些有用的信息。但是基于这个类的名称,
它看起来像是一个内部WebLogic类,并不是专门为此设计的。
尽管如此,您仍然可以通过反射来实现,甚至可以通过反射调用私有getter方法

正确的JEE方法并不关心代码中的这些低级细节。找出哪个数据源不工作后,故障排除问题只涉及应用程序服务器日志和应用程序服务器配置调整

将应用程序与数据源细节隔离有几个很好的理由:

  • 你不应该忘记你正在使用什么样的抽象数据源;在同一个类中使用多个数据源(事实上,多个连接)是极不寻常的
  • 永久数据源配置已由您在应用程序服务器配置中定义,它们不是机密或隐藏的
  • 另一方面,可以通过应用服务器工具和日志访问瞬态数据源状态
  • 第三方面,数据源实现是专有的,需要自由优化;期望他们提供有用的信息是不合理的
  • 您的应用程序不太可能修复麻烦的数据源;如果可以,它将能够与同一应用服务器中的其他应用程序发生冲突
  • 用另一个数据源“替换”一个数据源没有任何意义
  • 如果您希望数据源的定义根据环境的不同而有所不同,则应通过其他方式处理,主要是靠近DBMS的方式(例如,如果DBMS进程或机器需要关闭和重新启动,您可以将服务器配置为共享相同IP地址的群集;使用Oracle相对容易)

是的,如果我知道该怎么称呼,那就太好了。我只是编辑了这篇文章来强调这一点,但我已经在调试器中检查了对象,我找不到任何线索来说明这些信息可能在哪里。嗯,我以为你知道它在哪里,你只是不知道如何获取它。