VRaptor3 - Instanciar um "@Component" dentro de um ".jar"

11 respostas
lscosta

Caras, já procurei no fórum sobre esse assunto e não achei. Se já tiver sido discutido, por favor mandem o link!

Temos uma aplicação que deve rodar tanto no GAE quanto em ambiente proprietário, onde faremos a persistência em PostgreSQL via Hibernate.

A interface de persistência é comum aos dois casos, mas a implementação é diferente… A aplicação está sendo construída considerando as restrições do GAE.

Pensei em mover as classes que implementam a persistência para um .JAR, dessa forma eu poderia distribuir a aplicação para diferentes ambientes apenas alterando esses .JARs.

Dessa forma eu teria algo como:

WEB-INF/lib/myapp-hibernate-impl.jar
ou
WEB-INF/lib/myapp-bigtables-impl.jar

Cada distribuição conterá apenas um deles…

Dentro desses .JAR eu tenho “br.com.mycompany.myapp.dao.impl.GpsDao.java” anotada como “@Component

O problema é que o VRaptor (ou Spring) não está enxergando essa classe para injetar no meu código, dando o seguinte erro (resumido):

org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [br.com.mycompany.myapp.dao.IGpsDao] is defined: Unsatisfied dependency of type [interface br.com.mycompany.myapp.dao.IGpsDao]: expected at least 1 matching bean

Isso não deveria funcionar? Estou esquecendo algum ponto? Alguma outra idéia/observação?

Tomei por base a gae-blank app disponibilizada, e funcionava antes dessa alteração.


Obs.: Editei pq esqueci de dizer que era sobre o vraptor3

11 Respostas

Lucas_Cavalcanti

o que está configurado no web.xml?:

<context-param>
    <param-name>br.com.caelum.vraptor.packages</param-name>
    <param-value>!!!o que vc colocou aqui???</param-value>
</context-param>

pra funcionar vc tem que colocar o pacote br.com.mycompany.myapp, e as classes dos dois jars precisam estar abaixo desse pacote…

lscosta

Sim! Como disse, funcionava bem antes de eu mover para o JAR…

<context-param>
		<param-name>br.com.caelum.vraptor.packages</param-name>
		<param-value>br.com.mycompany.myapp</param-value>
	</context-param>

Vocês já fizeram algum teste desse tipo? Haveria porquê não funcionar?

G

Sempre achei que o vraptor fazia scan apenas em classes não empacotadas. Lucas, vocês usam algo próprio no vraptor para scan ou é delegado ao provider?

lscosta

Exato, ao que parece ele está varrendo apenas o “/WEB-INF/classes”

Devia ser assim? Há como contornar isso?

Lucas_Cavalcanti

Você está usando a última versão do VRaptor? com o Spring?

quem faz esse scan é o spring… e pelo que eu me lembre ele fazia scan nos jars também… vou investigar aqui

[]'s

Lucas_Cavalcanti

Tem razão… isso não está funcionando =(

vou marcar como bug e resolver pra próxima versão…

lscosta

Blz, tenho usado a última versão sempre…

Valeu Lucas, me viro até que saia a 3.0.3!

Obrigado, abraço!

Lucas_Cavalcanti

lscosta,

Achei isso no site do spring:

se você está gerando o jar pelo eclipse, vc precisa marcar uma opção chamada “Add directory entries”

fiz o teste aqui e funcionou…
[]'s

lscosta

Na ‘preula’ !!!

Funcionou! Valeu Lucas!!

Paulo_Silveira

vale um cookbook ou comentario em algum lugar da documentacao!

Lucas_Cavalcanti

está nessa página: http://vraptor.caelum.com.br/documentacao/injecao-de-dependencias/ na parte de providers a documentação sobre isso

[]'s

Criado 26 de novembro de 2009
Ultima resposta 29 de nov. de 2009
Respostas 11
Participantes 4