从Java中的glassfish服务器获取jdbc资源

时间:2016-02-12 23:23:06

标签: java jdbc glassfish datasource

我使用 NetBean 在Java中创建桌面应用程序,我想与 glassfish服务器连接。这是获取DataSource的代码:

private DataSource getDataSourceFromJNDI(String jndiDataSourceName) {
    try {
        Properties p = new Properties();
        p.setProperty(Context.INITIAL_CONTEXT_FACTORY, "com.sun.enterprise.naming.SerialInitContextFactory");
        p.setProperty(Context.STATE_FACTORIES, "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");
        p.setProperty(Context.URL_PKG_PREFIXES, "com.sun.enterprise.naming");
        InitialContext ic = new InitialContext(p);
        return (DataSource) ic.lookup(jndiDataSourceName);
    } catch (NamingException e) {
        log.error("JNDI error while retrieving " + jndiDataSourceName, e);
        throw new AuthorizationException(e);
    }
}

我的资源名称是: pooljdnibd 。在我的代码中,我以不同的方式设置 jdniDataSourceName ,如:

java:comp/env/pooljdnibd
java:global/pooljdnibd
java:jdbc/pooljdnibd
jdbc/pooljdnibd
pooljdnibd

所有人都给我一个例外:

javax.naming.NoInitialContextException: Cannot instantiate class: com.sun.enterprise.naming.SerialInitContextFactory [Root exception is java.lang.ClassNotFoundException: com.sun.enterprise.naming.SerialInitContextFactory]

1 个答案:

答案 0 :(得分:1)

一般情况下,无法访问Glassfish服务器之外的JNDI中注册的Glassfish资源(适用于任何其他Java EE服务器)。

您可以访问的JNDI中的唯一资源是EJB组件(如果它们具有远程接口)。另一种选择是通过HTTP协议(任何类型的服务,如SOAP或REST)创建服务,并连接到它。连接到各种服务的技术当然是不同的。

访问服务器上运行的EJB或服务后,您可以从JNDI中注册的Datasource中检索数据。但是您需要从数据源检索数据,而不是数据源本身。您可以通过从在Glassfish中运行的EJB或服务中发出查询,然后将结果返回到调用该服务的桌面应用程序来实现。