从 Java 中的 glassfish 服务器获取 jdbc 资源
Get a jdbc resource from a glassfish server in Java
我正在使用 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
都给我一个例外:
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 组件,如果它们具有远程接口的话。另一种选择是通过 HTTP 协议(任何类型的服务,例如 SOAP 或 REST)创建服务并连接到它。连接到每种服务的技术当然是不同的。
一旦您访问服务器上的 EJB 或服务 运行,您可以从在 JNDI 中注册的数据源检索数据。但是您需要从数据源而不是数据源本身检索 data。您可以通过从 EJB 或 Glassfish 内的服务 运行 发出查询,然后将 return 结果发送到调用该服务的桌面应用程序来实现。
我正在使用 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
都给我一个例外:
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 组件,如果它们具有远程接口的话。另一种选择是通过 HTTP 协议(任何类型的服务,例如 SOAP 或 REST)创建服务并连接到它。连接到每种服务的技术当然是不同的。
一旦您访问服务器上的 EJB 或服务 运行,您可以从在 JNDI 中注册的数据源检索数据。但是您需要从数据源而不是数据源本身检索 data。您可以通过从 EJB 或 Glassfish 内的服务 运行 发出查询,然后将 return 结果发送到调用该服务的桌面应用程序来实现。