2011-07-20 10 views
3

Jetty 6で接続プールを使用したいと思いますが、これまでのところ私は多くの問題を抱えています。Jetty 6:コンテキスト(NoInitialContextException)を作成できません

enter image description here

お知らせdefaultInitCtx =:

私はちょっと疑わしいである、それが例外をスローしませんが、私はコンテキスト変数を検査するとき、私はこれを見る

InitialContext context = new InitialContext(); 

を行いますヌル。私はデータソースを取得しようとした後

ライン:

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 

、私が何かをしなければなりません間違っていますが、私はちょうど何を見つけることができません... 誰かが助けることができれば、私はそれを感謝します!

<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 /桟橋-env.xmlここ

は私のjetty.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> 
+0

このリンクは役に立つと思われます。 http://stackoverflow.com/questions/1525385/noinitialcontextexception-errori/1989115#1989115 –

答えて

0

初期化に使用するfactoryの値を持つjndi.propertiesファイルを作成し、ファイルをクラスパスに配置する必要があります。

あなたは桟橋7を使用している場合、プロパティは

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

PS次のようになります。私はまた、問題に遭遇し、それをこのように修正しました。私は私の目的のために桟橋7を使用していました。古いバージョンを使用している場合は、同じバージョンの値を識別してください(異なる場合)。桟橋6の場合

、私は性質が(私はこれをテストしていません)

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

その後、あなたのクライアントコードで(APIを見て)である必要があり、あなたは工場であるかどうかを確認することができると信じて適切に初期化されました

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); 
} 
+1

答えをありがとう。私のプロジェクトのこの部分は今のところ保留になっていますが、私が開発を再開するときにこれを試してみましょう。私はいくつかの新しい開発があれば、このポストを更新しておきます! – Mathieu

関連する問題