2017-01-07 12 views
0

Java SE 8のLinux CentOS 7でTomcat(8.5.9)を初めて使用しました。簡単な間違いをしている必要があります。これは、tomcat用のJDBC接続プールを構成する方法のテキストブックの例です。私が間違っている可能性が何WebアプリケーションをTomcatに移植しています:javax.naming.NameNotFoundException:

javax.naming.NameNotFoundException: Name [jdbc/pool1] is not bound in this Context. Unable to find [jdbc]

任意のアイデア:

私はこのエラーがありますか? Tomcatの states It is NOT recommended to place <Context> elements directly in the server.xml file.このように、私のセットアップ:

$ CATALINA_HOME/webappsに/ myappの/ META-INF/context.xmlに以下のとおりである。

<?xml version="1.0" encoding="UTF-8"?> 
<Context> 
    <Resource name="jdbc/pool1" 
      auth="Container" 
      type="javax.sql.DataSource" 
      username="xx" 
      password="xx" 
      driverClassName="oracle.jdbc.OracleDriver" 
      url="xx" 
      maxTotal="256" 
      maxIdle="8" 
      initialSize="4" 
      removeAbandonedTimeout="7200" 
      removeAbandonedOnBorrow="true"/> 

    <Resource name="jdbc/pool2" 
      auth="Container" 
      type="javax.sql.DataSource" 
      username="xx" 
      password="xx" 
      driverClassName="oracle.jdbc.OracleDriver" 
      url="xx" 
      maxTotal="256" 
      maxIdle="8" 
      initialSize="4" 
      removeAbandonedTimeout="7200" 
      removeAbandonedOnBorrow="true"/> 

    <ResourceLink name="jdbc/pool1" 
       global="jdbc/pool1" 
       type="javax.sql.DataSource"/> 

    <ResourceLink name="jdbc/pool2" 
       global="jdbc/pool2" 
       type="javax.sql.DataSource"/> 
</Context> 

$ CATALINA_HOME/webappsに/ myappの/ WEB-INF /ウェブ。次のようにXMLがある:

... 
<resource-ref> 
     <description>xxx</description> 
     <res-ref-name>jdbc/pool1</res-ref-name> 
     <res-type>javax.sql.DataSource</res-type> 
     <res-auth>Container</res-auth> 
    </resource-ref> 
    <resource-ref> 
     <description>xxx</description> 
     <res-ref-name>jdbc/pool1</res-ref-name> 
     <res-type>javax.sql.DataSource</res-type> 
     <res-auth>Container</res-auth> 
</resource-ref> 
... 

例外を引き起こすコード:

Context context = new InitialContext(); 
DataSource ds = (DataSource)context.lookup("jdbc/pool1"); 
conn = ds.getConnection(); 

私は$ CATALINA_HOME/conf/server.xmlをまったく変更していません。私は間違って何かを構成しましたか、別のファイルをどこかに設定していませんか?

UPDATE 1

私は、Tomcatを起動/停止、$ CATALINA_HOME/conf/server.xmlファイルにGlobalNamingResourcesタグに上記ResourceLinksを追加しようとしたが、私は同じエラーを得ました。

UPDATE 2

Iは、次いで、Tomcatを開始/停止、server.xmlファイル(GlobalNamingResourcesタグ)にも上記のcontext.xmlからリソースタグを追加し、同じエラーを得ました。また

Context initCtx = new InitialContext(); 
Context context = (Context) initCtx.lookup("java:comp/env"); 
DataSource ds = (DataSource) context.lookup("jdbc/pool1"); 
conn = ds.getConnection(); 

、ResourceLinksはserver.xmlであってはならない。私は道のJavaを変更することにより、Andreasの専門家の助け(!ありがとう)と協力し、すべてがプールを呼び出しました

UPDATE 3

(彼らは単にtomcatログに警告を生成します)。

+0

例外をスローするコードはありますか? – EJP

+0

@EJP確かに、Update 1のすぐ上に例外をスローするコードを追加しました。 – user46688

答えて

1

$CATALINA_BASE/conf/server.xmlファイルには、完全な<Resource>要素を含める必要があります。また、<Resource>server.xmlに定義されているときに必要なwebappではなく、Tomcatのため、Tomcatの$CATALINA_BASE/libフォルダにJDBCドライバjarファイルを追加することを忘れないでください。

次に、META-INF/context.xmlは、最初に webappがデプロイされたときに使用されるテンプレートです。 $CATALINA_BASE/conf/Catalina/localhost/myapp.xmlにコピーされ、META-INF/context.xmlを変更すると、更新/更新されない可能性があります。

.../Catalina/localhost/myapp.xmlファイルには、server.xmlで使用されている名前にwebappで使用されている名前をマッピングする<ResourceLink>要素を含める必要があります。これら2つの名前を同じにするのは最も簡単ですが、必須ではありません。

<resource-ref>要素がない場合は、WEB-INF/web.xmlの要素が正常に動作しますが、他のサーブレットコンテナとの互換性のために、存在する場合はそれが良いでしょう。

注:$CATALINA_BASEはつまり、あなたが明示的にそれを設定しない限り、Tomcatのは、インストールされているフォルダ、通常$CATALINA_HOMEと同じです。

ので、$CATALINA_BASE/conf/server.xml

<?xml version='1.0' encoding='utf-8'?> 
<Server ...> 
    ... 
    <GlobalNamingResources> 
     ... 
     <Resource name="jdbc/pool1" auth="Container" type="javax.sql.DataSource" ... /> 
     <Resource name="jdbc/pool2" auth="Container" type="javax.sql.DataSource" ... /> 
     ... 
    </GlobalNamingResources> 
    ... 
</Server> 

$CATALINA_BASE/conf/Catalina/localhost/myapp.xml

<?xml version="1.0" encoding="UTF-8"?> 
<Context> 
    <ResourceLink name="jdbc/pool1" global="jdbc/pool1" type="javax.sql.DataSource"/> 
    <ResourceLink name="jdbc/pool2" global="jdbc/pool2" type="javax.sql.DataSource"/> 
</Context> 

$CATALINA_BASE/libojdbcXXX.jarを置きます。

+0

Thanks @Anderas、(1) 'server.xml'ファイルに' context.xml'(2)と同様に '' (3) '$ CATALINA_BASE'を定義していないので、デフォルトで' $ CATALINA_HOME'にする必要があります。(4) '$ CATALINA_HOME 'フォルダにファイルがありません。/conf/catalina/localhost'、Tomcatは何かを置くことになっていますか? – user46688

+1

おそらくそれは変更されました。これは、あなたのケースでは、webappの後に名前が付けられた 'myapp.xml'という名前の' META-INF/context.xml'ファイルをそこにコピーしていました。それを自分でやってみてください。 'META-INF/context.xml'は決して手動で設定された' conf/catalina/localhost/myapp.xml'ファイルを使用しません。これは 'server.xml'ファイルの設定方法に依存するからです。 – Andreas

+1

'conf'ファイル(サブフォルダを含む)を変更するときはTomcatを再起動してください。 – Andreas

関連する問題