Injeção de Dependência

Olá pessoal,

alguém já usou injeção de dependencia com o tomcat 7?

Eu estou iniciando os meus estudos com a injeção de dependencia e não estou conseguindo fazer
funcionar o tomcat 7 com a injeção de dependencia usando o RI do Jboss Weld.

Eu acrescentei as linhas no meu arquivo web.xml

<listener>
        <listener-class>org.jboss.weld.environment.servlet.Listener</listener-class>
</listener>

Eu já baixei todos os jar’s no site: http://seamframework.org/Weld/Downloads

Mas toda hora aparece a seguinte mensagem

Out 25, 2011 1:10:50 AM org.apache.catalina.core.StandardContext listenerStart
Grave: Exception sending context initialized event to listener instance of class org.jboss.weld.environment.servlet.Listener
java.lang.LinkageError: loader constraint violation: when resolving interface method "javax.servlet.jsp.JspApplicationContext.addELResolver(Ljavax/el/ELResolver;)V" the class loader (instance of org/apache/catalina/loader/WebappClassLoader) of the current class, org/jboss/weld/environment/servlet/Listener, and the class loader (instance of org/apache/catalina/loader/StandardClassLoader) for resolved class, javax/servlet/jsp/JspApplicationContext, have different Class objects for the type p.JspApplicationContext.addELResolver(Ljavax/el/ELResolver;)V used in the signature

Será que alguém poderia me dar uma ajuda?

[]'s.

Eu também cheguei a ter esse problema, mas acabei usando o JBoss AS 7, que já tem todos os jars nos módulos dele, então ficou fácil.

No seu caso, parece ter concorrência de jars. Ele reclama de ter duas implementações de javax.servlet.jsp.JspApplicationContext. Revisa suas libs e procura por versões diferentes, ou conflitantes entre sua App e o tomcat.

Olá Guilherme Gomes eu já conferi aqui todos os jars mas não tem jeito o que será que pode estar acontecendo?

No site http://docs.jboss.org/weld/reference/1.0.0/en-US/html/environments.html#d0e4998

fala sobre um jar weld-tomcat-support.jar?

Será que você Guilherme ou alguém poderia me dar uma ajuda?

[]'s.

Realmente é meio chato com o tomcat, por isso que acabei mexendo no JBoss mesmo, já que foi só pra estudos. Tem que fazer essas configurações direitinho e colocar o JAR que você mencionou pra fazer funcionar…

Você realmente precisa usar tomcat pra isso? Vai pro JBoss! Fica muito mais fácil.

Guilherme eu acho que sei porque deve ser o conflito como vc falou com a bibioteca el.jar do tomcat
pois eu vi em um blog que comentava o conflito com essa biblioteca usando o JBoss Weld.

Quando eu removi a biblioteca apareceu a seguinte msg

Out 25, 2011 9:19:15 AM org.apache.catalina.core.StandardContext listenerStart
Grave: Exception sending context initialized event to listener instance of class org.jboss.weld.environment.servlet.Listener
java.lang.NoClassDefFoundError: javax/el/ELContext

vou voltar com o el.jar para pasta lib do tomcat.

Mas ainda não deu certo, será que tem como vc Guilherme ou mais alguém me dar uma ajduda aqui com o tomcat 7?

Eu preciso usar o tomcat.

[]'s.

Imagino que você esteja colocando a el.jar tanto no seu projeto quanto no tomcat. Em vez de retira-la no tomcat, retira no deploy da sua aplicação, deixe apenas a do tomcat.

Oi Guilherme eu não tenho el.jar na minha apicação.

Eu segui os passo do tutorial http://docs.jboss.org/weld/reference/1.0.0/en-US/html/environments.html#d0e4998

e acrescentei as linhas no meu web.xml

<resource-env-ref>

   <resource-env-ref-name>BeanManager</resource-env-ref-name>

   <resource-env-ref-type>

      javax.enterprise.inject.spi.BeanManager

   </resource-env-ref-type>

</resource-env-ref>

e já acrescentei tb o jar weld-tomcat-support.jar mas agora aparece a seguinte mensagem:

Grave: Begin event threw error
java.lang.NoClassDefFoundError: org/apache/AnnotationProcessor

Será que vc Guilherme ou alguém poderia me dar uma ajuda?

[]'s.

Olá Ricardo,

Certo que você já deve ter encontrado a solução, mas fica aqui a dica…
Para quem usa o CDI no servidor Tomcat e quando compila aparece a seguinte mensagem: java.lang.NoClassDefFoundError: org/apache/AnnotationProcessor

Basta criar na pasta src\main\resources\META-INF\services\
um arquivo com o nome “org.jboss.weld.environment.Container”

e em seu conteúdo adicione o seguinte texto: org.jboss.weld.environment.tomcat7.Tomcat7Container