JNDI et javax.sql.Source de données

Je suis quelqu'un que l'habitude de faire de J2EE de codage dans le passé et je suis de retour dans le giron de travailler sur un nouveau projet J2EE. Beaucoup de choses ont changé depuis 2001, j'ai donc besoin de poser cette question très simple.

Je suis en utilisant la syntaxe comme ça dans ma classe de base de données:

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

Je comprends que c'est une nouvelle fonctionnalité (annotations), mais je ne suis pas vraiment sûr de savoir comment il fonctionne. Plus tard, dans ma classe, je fais cet appel:

Connection c = dataSource.getConnection();  

Et il jette un NullPointerException à chaque fois. J'ai pas ça dans le débogueur et comme il s'avère, à la source de données EST nulle.

Il semble magique et étrange que je n'initialisez pas moi-même source de données dans le code. Toute idée de ce que je fais mal?

Mon web.xml contient le bloc suivant pour établir la ressource:

<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>

Et j'ai ajouté à mon Contexte à l'aide d'un context.xml fichier META-INF. Le Contexte de l'entrée ressemble à:

<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"/>

Je suis en utilisant Tomcat 6, MySQL 5, le dernier pilote MySQL (pas les anciennes v3 mais la nouvelle v5 pilote).

Mise à jour: Ce n'est pas de travail pour moi car je l'utilise dans une plaine vieux de la classe. J'ai créé un nouveau projet et de l'ajout d'une servlet. La source de données est non-nulle dans la servlet.

OriginalL'auteur the0ther | 2009-11-09