java - 使用 Java 从 glassfish 服务器获取 jdbc 资源

标签 java jdbc glassfish datasource

我正在使用 NetBean 在 Java 中创建一个桌面应用程序,并且我想连接 glassfish 服务器。这是我获取数据源的代码:

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

并且都给我一个异常(exception):

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

最佳答案

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

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

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

关于java - 使用 Java 从 glassfish 服务器获取 jdbc 资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35373906/

相关文章:

java - 解析 UTF-8 编码的 XML 文件

java - 将响应 header 添加到 JAX-RS Web 服务

java - Glassfish 3.1.2 build 5 WAR 部署问题

java - 使用 JMX/JMS 向 Web 应用程序的所有 session 广播消息?

java - 在 Debian Linux 机器上用 Java 连接 MS Access

java - 从数据库表中获取结果的更好选择

相同类型的 Java 泛型约束

mysql - 远程 Glassfish 无法连接到 MySQL

Java EE 和 Glassfish

mysql - NetBeans、GlassFish 和 Hibernate JPA