Java 查找后从数据源获取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

我想要实现的是从数据源对象中获取作为字符串的JNDI名称

我有以下代码来获取数据源:

Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:/comp/env/dataPool");
My
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>

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