我想要实现的是从DataSource对象获取JNDI名称作为String。
我有以下代码来获取DataSource:
Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:/comp/env/dataPool");
我的weblogic-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>
所以,当我得到ds
对象时,实际上我可以看到JndiNames,但我找不到从中获取它的方法:
我的第一个猜测是做ds.getJndiNames
之类的事情,但我只有以下选项:
任何想法怎么做?
答案 0 :(得分:1)
确定!
所以最后我用Reflection来实现我想要的目标。
这是我的解决方案:
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;
}
}
希望将来对其他任何人都有帮助: - )