gpt4 book ai didi

java - 嵌入 Tomcat : NoInitialContextException when trying to get a DataSource

转载 作者:搜寻专家 更新时间:2023-10-31 08:19:54 26 4
gpt4 key购买 nike

我有一个 JSF 网络应用程序,我想使用嵌入式 tomcat 运行它。到目前为止它一直在工作 [包括 JDBCRealm,在以下代码片段的 context.xml 中指定],除了登录后我的代码无法实际获取源中指定的连接资源,抛出 NoInitialContextException。

我可能遗漏了一些明显的东西,但是关于嵌入式 tomcat 的流量似乎很少。 [Tomcat7.0.47, JDK7].

作为per其他 questionsthis site在此站点上,我尝试了多种添加初始环境的变体,但我无法弄清楚这是否真的是我的问题,或者我还没有找到适合此 tomcat 服务器的正确方法,但是.

Tomcat启动代码:

tomcat = new Tomcat();
tomcat.setPort(port);
tomcat.setBaseDir(".");
Context ctx = tomcat.addWebapp("/" + appname, appname);
// The login realm specified in this XML file is a JDBC realm, and the server correctly logs users in, so I believe this is parsed.
ctx.setConfigFile(new URL("file:///home/chunky/src/aqmt/AQMTEmbed/webapps/AQMTWeb/META-INF/context.xml"));

ContextResource resource = new ContextResource();
resource.setName("jdbc/aqmtwebdb");
resource.setAuth("Container");
resource.setType("javax.sql.DataSource");
resource.setScope("Sharable");
resource.setProperty("driverClassName", "com.mysql.jdbc.Driver");
resource.setProperty("url", "jdbc:mysql://localhost:3306/aqmtweb?autoreconnect=true");
resource.setProperty("username", "username");
resource.setProperty("password", "password");
ctx.getNamingResources().addResource(resource);

tomcat.start();

在 web 应用程序本身是这样的:

InitialContext ctx = new InitialContext();
// This line here throws the exception:
DataSource webds = (DataSource)ctx.lookup("java:/comp/env/jdbc/aqmtwebdb");

抛出的异常是:

javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:662)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:307)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:344)
at javax.naming.InitialContext.lookup(InitialContext.java:411)
at org.rand.aqmt.UserBean.<init>(UserBean.java:77)

[其中 UserBean.java:77 行是上面的 ctx.lookup()]

对于如何取得进展,我完全不知所措。

最佳答案

显然我只需要 Tomcat.enableNaming() ,默认情况下未启用。

关于java - 嵌入 Tomcat : NoInitialContextException when trying to get a DataSource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21242733/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com