VRaptor 3 - Iniciante

Bom dia pessoal,

Comecei agora a aprender sobre o VRaptor para implementar em uma Organização do Ministério da Defesa.

Como o VRaptor tem suas particularidades estou fazendo perguntas bem iniciantes mesmo até porque se for para implementar o VRaptor aki tem que ser dado um confirmação antes de 12hs de hoje. (HAHAHA)

To sem tempo para ler e pesquisar e como o pessoal daki do fórum criaram o framework creio que respoderão rapidamente.

Só nos testes mesmo a apostila diz:

Mas onde isso é aplicado no web.xml?

<web-app ...>
<!-- configura o controlador do VRaptor -->
<filter>
<filter-name>vraptor</filter-name>
<filter-class>br.com.caelum.vraptor.VRaptor</filter-class>
</filter>
<filter-mapping>
<filter-name>vraptor</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
</web-app>

Não consegui visualizar isso e como o meu exemplo não está rodando creio que tenha a ver.

E so pelo que li e ví a apresentação no http://vimeo.com/5961030 achei muito interessante.

Grato!

Opa,
Da uma olhada na página Comunidade no site do VRaptor.
Ali tem vários links do pessoal que disponibilizou tutoriais sobre o framework.
http://vraptor.caelum.com.br/comunidade.jsp

Um dos links é o meu tutorial de crud completo: http://k2studio.com.br/site/2010/05/introducao-vraptor/

Espero que ajude.

[]´s
Daniel

não precisa mais colocar o pacote base no web.xml… só a configuração do filtro do VRaptor já é o suficiente.

dá uma olhada também na documentação: http://vraptor.caelum.com.br/documentacao/

[]'s

Obrigado pelas dicas! Muito bom mesmo a documentação do VRaptor e o link com o tutorial.

Agora uma pequena dúvida com o persistence.xml. Sempre utilizei o hibernate-cfg.xml e não estou muito familiarizado com o persistence e tals.

Gostaria que quando executasse isso na url do navegador http://localhost:8080/SisReqT7/usuario/manterCadastroUsuario o fluxo abaixo fosse executado.

UsuarioController

@Resource
public class UsuarioController {

	private final GenericDAO dao;
	private final Result result;
	
	public UsuarioController(GenericDAO dao, Result result) {
		this.dao = dao;
		this.result = result;
	}

	
	@Path("/usuario/manterCadastroUsuario")
	public void manterCadastroUsuario() {
		
	}
}

GenericDAO

@Component
public class GenericDAO {

     protected EntityManager manager;

     public GenericDAO() {
          manager = JPAFactory.getEntityManager();
     }

     public BaseEntity insert(BaseEntity entity) {
          manager.getTransaction().begin();
          manager.persist(entity);
          manager.getTransaction().commit();
          return entity;
     }

     public BaseEntity update(BaseEntity entity) {
          manager.getTransaction().begin();
          manager.merge(entity);
          manager.getTransaction().commit();
          return entity;
     }

     public BaseEntity selectById(BaseEntity entity) {
          entity = manager.find(entity.getClass(), entity.getId());
          return entity;
     }

}

JPAFactory

public class JPAFactory {

    private static EntityManagerFactory factory;

    private JPAFactory() {};

    public static EntityManager getEntityManager() {
         if(factory == null) {
              factory = Persistence.createEntityManagerFactory("sisReqT7");
         }
         return factory.createEntityManager();
    }

}

persistence.xml

<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence">
    <persistence-unit name="sisReqT7">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <class>br.mil.mar.setedistnav.divPassagem.entity.OrganizacaoMilitar</class>
    <class>br.mil.mar.setedistnav.divPassagem.entity.PostoGraduacao</class>
    <class>br.mil.mar.setedistnav.divPassagem.entity.Usuario</class>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
            <property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/sisreqt7" />
            <property name="hibernate.connection.driver_class" value="org.postgresql.Driver" />
            <property name="hibernate.connection.username" value="postgres" />
            <property name="hibernate.connection.password" value="postgres" />
            <property name="hbm2ddl.auto" value="update" />
            <property name="show_sql" value="true"/>
         </properties>
     </persistence-unit>
</persistence>

O web.xml está certinho e o jsp está em branco, não tem porque dá erro.

O erro no console é este:

Caused by: javax.persistence.PersistenceException: No Persistence provider for EntityManager named sisReqT7
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:32)
	at br.mil.mar.setedistnav.divPassagem.jpa.JPAFactory.getEntityManager(JPAFactory.java:15)
	at br.mil.mar.setedistnav.divPassagem.dao.GenericDAO.<init>(GenericDAO.java:18)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:126)
	... 59 more

Qual seria o problema aí?

A senha e o usuário do post estão certinhos.

As três classes que estão no persistence.xml tem alguns relacionamentos. O problema seria com isso ou é algo com a conexão?

Agradeço!

onde vc colocou o persistence.xml?

ele precisa estar na pasta META-INF

Pois é. Esse era o problema. Mas tem distinção entre a META-INF do src e a do WebContent ??

Já funcionou aki. Blz. Vou começar a brincar agora.

Meu primeiro projeto com VRaptor. Descobri o que era ontem a noite e hoje já estou desenvolvendo. Muito bom mesmo.

acho que tem diferença sim… não tenho certeza de quais são mas tem diferença

Lucas e demais colegas está tudo rodando legal, fácil fácil!

Agora sobre alguns conceitos gostaria que me ajudassem.

Tipo eu tenho um ENUM de vínculos que deve, ao acionar o método que carrega o formulário de cadastro de usuário, carregar algumas lista para um select no caso. Faço isso como faria no struts por exemplo:

private List<Vinculos>;

//get and set

@Path("/usuario/manterCadastroUsuario")
	public void manterCadastroUsuario() {
	 new ArrayList.......	
         for(Vinculo n : Vinculo.values()) {
			vinculos.add(n);
		}
	}

e no JSP eu posso utilizar um:

 <c:forEach itens="usuario.vinculos" var ......... />

para listar esses valores dentro do select?

é esse o conceito?

Grato!

vc pode fazer isso:

  • no controller:
public void manterDados() {
    List<Vinculo> vinculos = ....
    result.include("vinculos", vinculos);
}

no jsp:

<select name="...">
   <c:forEach items="${vinculos}" var="vinculo">
         <option value="${vinculo.algo}">${vinculo.abc}</option>
   </c:forEach>
</select>

Só para finalizar Rafael.

Eu tenho um GenericDAO e tive a necessidade de criar um UsuarioDAO mas estou tento problemas com o Spring creio eu.

Criei uma classe UsuarioDAO extend GenericDAO.

Marquei a UsuarioDAO como @Component também para injetar no UsuarioController.

Mas quando tente executar alguma coisa recebo:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [br.mil.mar.setedistnav.divPassagem.dao.GenericDAO] is defined: more than one 'primary' bean found among candidates: [genericDAO, usuarioDAO]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.determinePrimaryCandidate(DefaultListableBeanFactory.java:844)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:770)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:680)
	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:771)
	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:691)
	... 45 more

É erro de spring eu acho, mas sou muito fraco com Spring (Por isso dia 27 começo o curso de Spring na caelum aqui em Brasília)

Se puderem me ajudar com mais isso agradeço!

Você deve injetar sempre a classe concreta, e não a genérica. No seu caso UsuarioDAO ao invés de GenericDAO. Além disso remova a anotação @Component do GenericDAO se houver.