J'ai lu à peu près @Resource
annotation de cet article (http://www.infoq.com/articles/spring-2.5-part-1) et souhaite l'utiliser sur Tomcat 6.0.26 et 3.0.3 SpringDataSource pas injecté à @Resource champ annotée avec alwaysUseJndiLookup mise
Mais il ne pas de travail - le champ ds
dans Users
classe n'est pas initialisé et j'ai NullPointerException
lorsque j'essaie de faire une requête.
Fichier src/org/example/db/Users.java
package org.example.db;
import javax.sql.DataSource;
import javax.annotation.Resource;
@Repository
public class Users {
@Resource private DataSource ds;
...
}
Fichier WEB-INF/spring-servlet.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee-2.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:component-scan base-package="org.example.web.controller,org.example.db" />
<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor">
<property name="alwaysUseJndiLookup" value="true" />
</bean>
<jee:jndi-lookup id="ds" jndi-name="java:comp/env/jdbc/mydb" />
</beans>
Fichier WEB-INF/web.xml
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/mydb</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
dans le fichier journal:
DEBUG 2010-09-27 21:56:00,085: Creating shared instance of singleton bean 'ds'
DEBUG 2010-09-27 21:56:00,085: Creating instance of bean 'ds'
DEBUG 2010-09-27 21:56:00,086: Eagerly caching bean 'ds' to allow for resolving potential circular references
DEBUG 2010-09-27 21:56:00,106: Invoking afterPropertiesSet() on bean with name 'ds'
DEBUG 2010-09-27 21:56:00,116: Finished creating instance of bean 'ds'
DEBUG 2010-09-27 21:56:00,149: Found injected element on class [org.example.db.Users]: ResourceElement for private javax.sql.DataSource org.example.db.Users.ds
DEBUG 2010-09-27 21:56:00,152: Found injected element on class [org.example.db.Users]: ResourceElement for private javax.sql.DataSource org.example.db.Users.ds
DEBUG 2010-09-27 21:56:00,161: Processing injected method of bean 'users': ResourceElement for private javax.sql.DataSource org.example.db.Users.ds
DEBUG 2010-09-27 21:56:00,163: Returning cached instance of singleton bean 'ds'
DEBUG 2010-09-27 21:56:00,442: Returning cached instance of singleton bean 'ds'
DEBUG 2010-09-27 21:56:00,593: Rejected bean name 'ds': no URL paths identified
DEBUG 2010-09-27 21:56:00,738: Rejected bean name 'ds': no URL paths identified
Je ne sais pas pourquoi cela ne fonctionne pas. J'ai trouvé dans ce documentation:
REMARQUE: Un défaut CommonAnnotationBeanPostProcessor sera enregistré par les balises XML « contexte:: annotation-config » et « composants d'analyse du contexte ». Supprimez ou désactivez la configuration d'annotation par défaut si vous avez l'intention de spécifier une définition de bean CommonAnnotationBeanPostProcessor personnalisée!
Je pense qu'il peut s'agir de mon problème, mais dans ce cas, je ne sais pas comment "Supprimer ou désactiver la configuration d'annotation par défaut".
Aidez-nous s'il vous plaît. Merci d'avance!
Je ne suis pas sûr que cela résoudra votre problème, pouvez-vous essayer de changer 'ds' à quelque chose d'autre, quelquefois plus de 2 caractères? –
@Jaydeep: merci. Non, rien n'a changé après avoir renommé la variable de ds à dataSource partout. –