在GWT2.7中运行的Jetty中设置上下文java:comp/env
/web-INF中jetty-web.xml的内容:在GWT2.7中运行的Jetty中设置上下文java:comp/env,gwt,jetty,jndi,Gwt,Jetty,Jndi,/web-INF中jetty-web.xml的内容: org.eclipse.jetty.webapp.webinf配置 org.eclipse.jetty.webapp.WebXmlConfiguration org.eclipse.jetty.webapp.MetaInfConfiguration org.eclipse.jetty.webapp.FragmentConfiguration org.eclipse.jetty.plus.webapp.EnvConfiguration org
org.eclipse.jetty.webapp.webinf配置
org.eclipse.jetty.webapp.WebXmlConfiguration
org.eclipse.jetty.webapp.MetaInfConfiguration
org.eclipse.jetty.webapp.FragmentConfiguration
org.eclipse.jetty.plus.webapp.EnvConfiguration
org.eclipse.jetty.plus.webapp.plus配置
org.eclipse.jetty.webapp.JettyWebXmlConfiguration
java.naming.factory.initial
java.naming.factory.url.pkgs
/WEB-INF中jetty-plus.xml的内容:
org.eclipse.jetty.webapp.FragmentConfiguration
org.eclipse.jetty.plus.webapp.EnvConfiguration
org.eclipse.jetty.plus.webapp.plus配置
这是我在Servlet的init()方法中的调用代码:
Context_initCtx=new InitialContext();
Context _envCtx=(Context)_initCtx.lookup(“java:comp/env”);
它抛出的错误:
javax.naming.NameNotFoundException;剩余名称“env”
位于org.eclipse.jetty.jndi.NamingContext.lookup(NamingContext.java:449)
位于org.eclipse.jetty.jndi.NamingContext.lookup(NamingContext.java:536)
位于org.eclipse.jetty.jndi.NamingContext.lookup(NamingContext.java:551)
位于org.eclipse.jetty.jndi.java.javaRootURLContext.lookup(javaRootURLContext.java:117)
位于javax.naming.InitialContext.lookup(未知源)
我正在运行vanilla GWT 2.7,并试图在服务器代码中使用JNDI查找。
我还将jetty-all-8.1.9.v20130131.jar和jetty-plus-8.1.9.v20130131.jar附加到项目中,因为GWT jar中缺少一些上下文和JNDI类。我尝试在GWT中验证jetty的版本,得到了以下结果:
Server服务器=新服务器(7070);
System.out.println(server.getVersion());
8.y.z-快照
我看到了一个可以通过其他方式配置JNDI的解决方案,但因为我在GWT中运行,所以我只能使用jetty-web.xml和jetty-plus.xml文件
调试servlet时,我将获取以下内容的上下文:
Context\u envCtx=(Context)\u initCtx.lookup(“java:comp”);
但不是为了:
Context\u envCtx=(Context)\u initCtx.lookup(“java:comp/env”);
Stacktrace在上面
我真的被困在这里了。有码头大师吗
编辑1: 添加了jetty-env.xml:
jdbc/DSTest
jdbc:hsqldb:hsql://localhost
sa
下面是我的web.xml:
主数据库
jdbc/DSTest
javax.sql.DataSource
容器
仍然_envCtx为空,下面有一个例外_initCtx.lookup(“java:comp”)返回org.eclipse.jetty.jndi.NamingContext实例
Context_initCtx=new InitialContext();
Context _envCtx=(Context)_initCtx.lookup(“java:comp/env”);
导致
javax.naming.NameNotFoundException;剩余名称“env”
编辑2: 我一定是错过了一些别的东西(基本的)。。。。??!? 我将jetty-env.xml中的那一行更改为:
<Arg><Ref refid="portal"/>jdbc/DSTest</Arg>
jdbc/DSTest
以及doctype:
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
我找不到更适合v8.X的.dtd
仍然存在相同的问题。这不是一种受支持的用法,但应该可以: 但是,您必须使用与Jetty dependencies完全相同的版本,并且 问题是,
java:comp/env
直到:
- 创建了一个引用(在webapp的特定
中,或在顶级服务器xml文件中)jetty env.xml
- 该引用绑定到webapp实例(而不是服务器实例)。请参见
声明中的第一个参数org.eclipse.jetty.plus.jndi.Resource
- 您的WEB应用程序的
声明了一个指向此资源的WEB-INF/WEB.xml
李>
- 您的
错误。更新它DOCTYPE
- 您没有将引用绑定到webapp,事实上,您的XML代码段被配置为绑定到JVM上下文。(参数#1未指定/空)
jdbc/DSTest
jdbc:hsqldb:hsql://localhost
sa
什么对我有效(假设您没有使用SuperDevMode):
-Djava.naming.factory.initial=org.eclipse.jetty.jndi.InitialContextFactory
添加到JVM参数中。(对于gwt maven插件,在extraJvmArgs
中)<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-jndi</artifactId>
<version>8.1.12.v20130726</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-plus</artifactId>
<version>8.1.12.v20130726</version>
<scope>provided</scope>
</dependency>
就这样。谢谢托马斯的提问和回答。我有一个非常相似的情况。很难得到正确的配置组合,但我终于让它工作了。我想我最好把我的发现记录在这里 我这样做是为了设置
GWT2.6
,它使用Jetty 8.1.12v20130726
。我的
目标是为DBCP2
连接池设置JNDI
。我在跑步
GWT
inEclipse
inDevMode
WEB-INF/jetty WEB.xml
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-jndi</artifactId>
<version>8.1.12.v20130726</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-plus</artifactId>
<version>8.1.12.v20130726</version>
<scope>provided</scope>
</dependency>
我使用的是JVM
范围,但在WebAppContext
还请注意,所使用的名称是java:comp/env/jdbc/datalakeDbcp2
(即前缀为java:comp/env/
)
无需更改WebAppClassLoaderExtension——只需使用它即可
作为原始代码:
private class WebAppClassLoaderExtension extends WebAppClassLoader {
private static final String META_INF_SERVICES = "META-INF/services/";
public WebAppClassLoaderExtension() throws IOException {
super(bootStrapOnlyClassLoader, WebAppContextWithReload.this);
}
pom.xml
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-jndi</artifactId>
<version>8.1.12.v20130726</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-plus</artifactId>
<version>8.1.12.v20130726</version>
<scope>provided</scope>
</dependency>
WEB-INF/WEB.xml
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-jndi</artifactId>
<version>8.1.12.v20130726</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-plus</artifactId>
<version>8.1.12.v20130726</version>
<scope>provided</scope>
</dependency>
可能是因为我在我的jettyweb.xml
中使用了VM
范围,所以我这样做了
不需要改变我的想法<
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-jndi</artifactId>
<version>8.1.12.v20130726</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-plus</artifactId>
<version>8.1.12.v20130726</version>
<scope>provided</scope>
</dependency>
-Djava.naming.factory.initial=org.eclipse.jetty.jndi.InitialContextFactory
try {
InitialContext ic = new InitialContext();
DataSource ds
= (DataSource) ic.lookup("java:/comp/env/jdbc/datalakeDbcp2");
conn = ds.getConnection();
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException(e);
};