查找后从DataSource获取JNDI名称

时间:2018-03-15 13:34:56

标签: java weblogic datasource jndi lookup

我想要实现的是从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,但我找不到从中获取它的方法:

As you can see

我的第一个猜测是做ds.getJndiNames之类的事情,但我只有以下选项:

enter image description here

任何想法怎么做?

1 个答案:

答案 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;
    }
}

希望将来对其他任何人都有帮助: - )