Java 查找后从数据源获取JNDI名称
我想要实现的是从数据源对象中获取作为字符串的JNDI名称 我有以下代码来获取数据源:Java 查找后从数据源获取JNDI名称,java,weblogic,datasource,jndi,lookup,Java,Weblogic,Datasource,Jndi,Lookup,我想要实现的是从数据源对象中获取作为字符串的JNDI名称 我有以下代码来获取数据源: Context ctx = new InitialContext(); DataSource ds = (DataSource) ctx.lookup("java:/comp/env/dataPool"); Myweblogic ejb jar.xml其中设置了JNDI名称: <?xml version="1.0" encoding="UTF-8"?> <weblogic-ejb-jar x
Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:/comp/env/dataPool");
Myweblogic ejb jar.xml
其中设置了JNDI名称:
<?xml version="1.0" encoding="UTF-8"?>
<weblogic-ejb-jar xmlns="http://xmlns.oracle.com/weblogic/weblogic-ejb-jar" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-ejb-jar http://xmlns.oracle.com/weblogic/weblogic-ejb-jar/1.6/weblogic-ejb-jar.xsd">
<weblogic-enterprise-bean>
<ejb-name>AdminBean</ejb-name>
<stateless-session-descriptor></stateless-session-descriptor>
<resource-description>
<res-ref-name>dataPool</res-ref-name>
<jndi-name>jdbc/CARGAS</jndi-name>
</resource-description>
</weblogic-enterprise-bean>
</weblogic-ejb-jar>
AdminBean
数据池
jdbc/CARGAS
因此,当我得到ds
对象时,实际上我可以看到JndiNames,但我找不到从中取出它的方法:
我的第一个猜测是执行类似于ds.getJndiNames
的操作,但我只有以下选项:
有什么办法吗?好的
所以最后我用反射来实现我想要的
以下是我的解决方案:
public String getJndiName() {
try {
Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:/comp/env/dataPool");
Method method = ds.getClass().getMethod("getJNDINames");
String[] jndi = (String[])method.invoke(ds);
return jndi[0];
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
希望它对以后的任何人都有帮助:-)你为什么想要这个?顺便说一句:使用调试器,您可以查看实现,而不是接口。。。你可以一直向下看,但你真的想这样做吗?我想这样做是因为我想根据服务器来分割获得ds的方式。此代码由WebSphere和Weblogic共享,WebSphere喜欢
java:comp/env/dataPool
,而Weblogic想要jndi名称jdbc/CARGAS