gpt4 book ai didi

java - jetty 6 : Cannot create context (NoInitialContextException)

转载 作者:搜寻专家 更新时间:2023-11-01 03:55:44 28 4
gpt4 key购买 nike

我想在 Jetty 6 中使用连接池,但到目前为止它给我带来了很多麻烦。

我愿意

InitialContext context = new InitialContext();

它没有抛出异常,但是当我检查上下文变量时,我看到了这个,这有点可疑:

enter image description here

注意 defaultInitCtx=null。

我尝试获取数据源后的行:

Datasource dataSource = (DataSource)context.lookup("java:comp/env/MySQLDB");

现在我得到一个异常,说没有初始上下文:

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

显然,我一定做错了什么,但我就是找不到什么......如果有人能提供帮助,我将不胜感激!

这是我的jetty.xml:

<Configure id="Server" class="org.mortbay.jetty.Server">

... (all default except those lines I added)

<Call name="setAttribute">
<Arg>org.eclipse.jetty.webapp.configuration</Arg>
<Arg>
<Array type="java.lang.String">
<Item>org.eclipse.jetty.webapp.WebInfConfiguration</Item>
<Item>org.eclipse.jetty.webapp.WebXmlConfiguration</Item>
<Item>org.eclipse.jetty.webapp.MetaInfConfiguration</Item>
<Item>org.eclipse.jetty.webapp.FragmentConfiguration</Item>
<Item>org.eclipse.jetty.plus.webapp.EnvConfiguration</Item>
<Item>org.eclipse.jetty.plus.webapp.PlusConfiguration</Item>
<Item>org.eclipse.jetty.webapp.JettyWebXmlConfiguration</Item>
<Item>org.eclipse.jetty.webapp.TagLibConfiguration</Item>
</Array>
</Arg>
</Call>
</Configure>

我的WEB-INF/web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web- app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>Test</display-name>
<servlet>
<description></description>
<display-name>Default</display-name>
<servlet-name>Default</servlet-name>
<servlet-class>Default</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Default</servlet-name>
<url-pattern>/Default</url-pattern>
</servlet-mapping>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>MySQLDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>

我的WEB-INF/jetty-env.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">

<Configure class="org.mortbay.jetty.webapp.WebAppContext">
<Set name="ConfigurationClasses">
<Ref id="plusConfig"/>
</Set>


<!-- MySql datasource -->
<New id="MySQLDB" class="org.mortbay.jetty.plus.naming.Resource">
<Arg></Arg>
<Arg>MySQLDB</Arg>
<Arg>
<New class="org.apache.commons.dbcp.BasicDataSourceFactory">
<Set name="driverClassName">com.mysql.jdbc.Driver</Set>
<Set name="url">jdbc:mysql://host_ip</Set>
<Set name="username">username</Set>
<Set name="password">password</Set>
<Set name="auth">Container</Set>
<Set name="maxActive">-1</Set>
<Set name="maxIdle">30</Set>
<Set name="maxWait">10000</Set>
<Set name="minEvictableIdleTimeMillis">600000</Set>
<Set name="name">MySQLDB</Set>
<Set name="removeAbandoned">true</Set>
<Set name="removeAbandonedTimeout">5000</Set>
<Set name="timeBetweenEvictionRunsMillis">10000</Set>
<Set name="type">javax.sql.DataSource</Set>
</New>
</Arg>
</New>

最佳答案

您必须使用用于初始化的工厂值创建 jndi.properties 文件,并将该文件放在类路径中。

如果您使用的是 jetty 7,则属性将为

java.naming.factory.url.pkgs=org.eclipse.jetty.jndi
java.naming.factory.initial=org.eclipse.jetty.jndi.InitialContextFactory

PS:我也遇到了这个问题,并通过这种方式解决了它。我出于我的目的使用 jetty 7。如果您使用的是旧版本,只需确定相同的值(如果它们不同)。

对于 jetty 6,我认为属性应该是(查看 API)(我还没有测试过)

java.naming.factory.url.pkgs=org.mortbay.naming
java.naming.factory.initial=org.mortbay.naming.InitialContextFactory

稍后在您的客户端代码中,您可以检查工厂是否正确初始化

try {
InitialContext ic = new InitialContext();
return (DataSource) ic.lookup("java:comp/env/MySQLDB");
} catch (NamingException e) {
logger.error("JNDI error while retrieving datasource" , e);
throw new Exception(e);
}

关于java - jetty 6 : Cannot create context (NoInitialContextException),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6766512/

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