4

私は過去に J2EE コーディングを行っていた人で、新しい J2EE プロジェクトに取り組むために戻ってきました。2001 年以降、多くのことが変わったので、この非常に基本的な質問をする必要があります。

データベースクラスで次のような構文を使用しています。

@Resource(name = "jdbc/MyDatabase")  
private javax.sql.DataSource dataSource;  

これが新しい機能 (注釈) であることは理解していますが、どのように機能するのかよくわかりません。後で私のクラスで私はこの呼び出しを行います:

Connection c = dataSource.getConnection();  

そして、毎回 NullPointerException をスローします。デバッガーでこれにステップインすると、結局のところ、dataSource は null です。

コードで自分で dataSource を初期化しないのは魔法のようで奇妙に思えます。私が間違っていることは何か分かりますか?

私の web.xml には、リソースを確立するための次のブロックが含まれています。

<resource-env-ref>
    <resource-env-ref-name>jdbc/MyDatabase</resource-env-ref-name>
    <resource-env-ref-type>javax.sql.DataSource</resource-env-ref-type>
</resource-env-ref>

そして、META-INF の context.xml ファイルを使用して、これをコンテキストに追加しました。コンテキスト エントリは次のようになります。

<Resource name="jdbc/MyDatabase" auth="Container" type="javax.sql.DataSource"
    maxActive="100" maxIdle="30" maxWait="10000"
    username="username" password="password" driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://127.0.0.1:3306/mydb?autoReconnect=true"/>

Tomcat 6、MySQL 5、最新の MySQL ドライバー (古い v3 ではなく、最新の v5 ドライバー) を使用しています。

更新: 単純なクラスで使用しているため、これは機能しません。新しいプロジェクトを作成し、それにサーブレットを追加しました。サーブレットで DataSource が null でない。

4

2 に答える 2

6

/conf/context.xmlappserver のファイルまたは webapplication の/META-INF/context.xmlファイルのいずれかに、少なくとも次のものが必要です。

<Resource
    name="jdbc/MyDatabase" 
    type="javax.sql.DataSource"
    driverClassName="com.your.Driver"
    url="jdbc:your://url"
    username="foo"
    password="bar"
/>

http://tomcat.apache.org/tomcat-6.0-doc/jndi-resources-howto.htmlも参照してください。

また、webapp では/WEB-INF/web.xml、以下を定義する必要があります。

<resource-env-ref>
    <resource-env-ref-name>jdbc/MyDatabase</resource-env-ref-name>
    <resource-env-ref-type>javax.sql.DataSource</resource-env-ref-type>
</resource-env-ref>

編集:コーディングを追加するために投稿を編集したことがわかりました。resource-refの代わりに使用したこともわかりますresource-env-ref。1 つ目は外部リソース (read: not webcontainer-managed) を参照し、2 つ目は内部 (環境) リソース (read: webcontainer-managed) を参照します。交換して見てください。

于 2009-11-09T00:51:46.977 に答える
2

あなたの web.xml はリソースを定義していますか? この例を見てください。web.xml または jdbc/MyDatabase を定義するコードを投稿していただけますか?

于 2009-11-09T00:45:00.853 に答える