estou trabalhando com vraptor e estou integrando umas tecnologias de webservice a minha aplicação e queria ter no meu webservice injeção de dependencia, como o meu WS é integrado com spring, axo que é possivel, sendo que atualmente quem faz o trabalho de Injeçao de Dependencia é o vRaptor, então dessa forma ele nao consegue efetuar essa injeçao no meu webservice pois nao é o vRaptor que cria, queria saber se é possivel deixar o Spring efetuando a Injeçao de Dependencia tanto no vRaptor quanto no WebService, para poder ter somente o spring cuidando dos dois.
andei lendo sobre providers do vraptor mais não sei se por default já tem alguma configuração pronta do proprio vraptor para isso.
Então cara, o VRaptor USA o Spring para injetar as dependências…
É só vc ver nos jars adicionado no seu projeto…
Você tem 3 possíveis containers:
Spring
Google Guice
Pico container
Se vc tiver o jar do pico, ele vai usar o pico, se vc tiver os jars do Spring, ele vai usar o Spring, se vc tiver os jars do Guice, ele vai usar o Guice…
Tome cuidado para não ter mais de um desses containeres…
então, acabei de olhar aqui e tenho o guice, porem spring e pico, não vejo, preciso deixar o Spring como provider, onde encontro a lib do spring para baixar? e no caso quando baixar, preciso remover esse do guice?
Precisa remover o do guice sim…
Você está usando Maven? Se sim, no seu pom vc pega os jars do Spring…
Se não, os jars do Spring vêm junto com o arquivo do VRaptor…
sem querer ser abusado, mais qual é o nome do .jar do spring que precisa para o provider? pq baixei o vraptor blank e não estou encontrando.
obs: não estou usando maven.
São esses:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>3.0.5.RELEASE</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-asm</artifactId>
<version>3.0.5.RELEASE</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>3.0.5.RELEASE</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.0.5.RELEASE</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>3.0.5.RELEASE</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>3.0.5.RELEASE</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>3.0.5.RELEASE</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.6.9</version>
<optional>true</optional>
</dependency>
Peguei lá no repositório do maven do vraptor: http://search.maven.org/#artifactdetails%7Cbr.com.caelum%7Cvraptor%7C3.5.0%7Cjar
opa, ja vi aqui, ja possuo as libs sim. e acabei de ver:
16:36:10,492 INFO [BasicConfiguration ] Using class br.com.caelum.vraptor.ioc.spring.SpringProvider as Container Provider
queria saber agora como efetuar a injeção de dependencia no webservice, porem a classe que ele vai chamar é meu UsuarioDAO, e usuario dao tem uma Session session no construtor, quando eu fizer a injeção de dependencia no webservice, ele tambem vai setar a sessao igual ele faz no vraptor? ou não?
Bem, vamos aos testes. Primeiramente vou mostrar como está minhas classes:
Meu WS:
@WebService
public class HelloWorldWS {
//DI via Spring
HelloWorldBo helloWorldBo;
private UsuarioRepositorio usuario;
@WebMethod
public int somar(int i, int j) {
return i+j;
}
@WebMethod(exclude=true)
public void setHelloWorldBo(HelloWorldBo helloWorldBo) {
this.helloWorldBo = helloWorldBo;
}
@WebMethod(operationName="getHelloWorld")
public String getHelloWorld() {
return helloWorldBo.getHelloWorld();
}
@WebMethod(operationName="mostraUsuarios")
public int mostraUsuarios() {
System.out.println(usuario);
return usuario.listAll().size();
}
}
meu UsuarioRepositorio:
public interface UsuarioRepositorio extends Repositorio<Usuario> {
public Usuario findUserByEmail(String email);
}
Meu UsuarioDAO que implementa esse Repositorio:
@Component
public class UsuarioDAO extends GenericDAO<Usuario> implements UsuarioRepositorio {
public UsuarioDAO(Session sessao) {
super(Usuario.class, sessao);
}
}
bem, no applicationContext eu fiz o seguinte:
<!-- Definições do JAX-WS + Spring WebService -->
<wss:binding url="/hello">
<wss:service>
<ws:service bean="#helloWs"/>
</wss:service>
</wss:binding>
<!-- Web service methods -->
<bean id="helloWs" class="br.com.rhunificado.webservices.HelloWorldWS">
<property name="helloWorldBo" ref="HelloWorldBo" />
</bean>
<bean id="HelloWorldBo" class="br.com.rhunificado.webservices.HelloWorldBoImpl" />
//<bean id="UsuarioRepositorio" class="br.com.rhunificado.dao.UsuarioDAO" /> comentei para ver o que dava, e dá objeto NULL, se eu descomentar ele quando vai instanciar dá o error "no default constructor" por causa do hibernate session. tem alguma luz?
Acho que você vai precisar criar uma configuração dessa para o Spring reconhecer o seu Session e o SessionFactory…
Não tem como fazer isso por annotation do Spring?
ai que está sou novo nesse mundo kkk, estou aprendendo muuuito agora, porem ainda nao conheço um caminho para isso, por enquanto estou estudando para ver uma possivel solução, uma possivel solução boa e nao uma gambi xD.