VRaptor4

Embed Size (px)

Citation preview

VRaptor 4

Desenvolvedor Java h mais de 4 anos, commiter no VRaptor 4 e membro ativo da lista de discusso oficial do VRaptor. Entusiasta SEO(Search Engine Optimization).

@renanigt

renanigt

Renan Montenegro

Desenvolvedor Java h 6 anos, graduado em Cincia da Computao, ps graduado em Arquitetura Java, ambas pela Unifor, Coordenador da comunidade JavaCE e Viciado em Testes automatizados.

@matheusmoura

matheusfechine

Matheus Fechine

O que ?

MVC

MVC

Modelo

MVC

Viso

MVC

Controller

Por qu ?

CDI

Extensvel

Cdigo Fluente

Testvel

Servio REST

Controller

@Controllerpublic class UsuarioController {

}

@Controllerpublic class UsuarioController {

public void index() {

}

}

@Controllerpublic class UsuarioController {

public void index() {

}

}

@Controllerpublic class UsuarioController {

public void index() {

}

}

/usuario/index

@Controllerpublic class UsuarioController {

@Path("/inicio")public void index() {

}

}

@Controllerpublic class UsuarioController {

@Path("/inicio")public void index() {

}

}

@Controllerpublic class UsuarioController {

@Path("/inicio")public void index() {

}

}

/inicio

View

@Controllerpublic class UsuarioController {

@Injectprivate Result result;

public void index() {result.include("mensagem", "Pgina Inicial !");}

}

@Controllerpublic class UsuarioController {

@Injectprivate Result result;

public void index() {result.include("mensagem", "Pgina Inicial !");}

}

CDI

@Controllerpublic class UsuarioController {

@Injectprivate Result result;

public void index() {result.include("mensagem", "Pgina Inicial !");}

}

@Controllerpublic class UsuarioController {

@Injectprivate Result result;

public void index() {result.include("mensagem", "Pgina Inicial !");}

}

${mensagem}

index.jsp

CDI@Controllerpublic class UsuarioController {

private Result result;

@Injectpublic UsuarioController(Result result) {this.result = result;}

public UsuarioController() {}

public void index() {result.include("mensagem", "Pgina Inicial !");}

}

@Controllerpublic class UsuarioController {

private Result result;

@Injectpublic UsuarioController(Result result) {this.result = result;}

public UsuarioController() {}

public void index() {result.include("mensagem", "Pgina Inicial !");}

}

/** * @deprecated CDI eyes only. */protected UsuarioController() {this(null);}

Componentes

@RequestScopedpublic class UsuarioDao {

public Usuario pesquisaUsuario(Long id) {//carrega Usurio do banco}

}

@Controllerpublic class UsuarioController {

@Injectprivate UsuarioDao dao;

public void pesquisarUsuario(Long id) {Usuario usuario = dao.pesquisaUsuario(id);}

}

RedirecionamentoeForward

@Postpublic void adiciona(Usuario usuario) {result.redirectTo(this).index();}

Redirect

@Postpublic void adiciona(Usuario usuario) {result.forwardTo(this).index();}

Forward

Formulrio

@Postpublic void adiciona(Usuario usuario) {

}

@Postpublic void adiciona(Usuario usuario) {

}

public class Usuario {

private String login;private String senha;

//getters e setters

}

Validao

@Controllerpublic class UsuarioController {

@Injectprivate Validator validator;

}

SimpleMessage message = new SimpleMessage("Login", "Login no preenchido");

validator.addIf(usuario.getLogin() == null, message);

validator.onErrorRedirectTo(this).index();

@Postpublic void adiciona(Usuario usuario) {SimpleMessage message = new SimpleMessage("Login", "Login no preenchido");validator.addIf(usuario.getLogin() == null, message);validator.onErrorRedirectTo(this).index();}

REST

@Get@Path("/usuario/{id}")public void visualiza(Long id) {

}

@Get("/usuario/{id}")public void visualiza(Long id) {

}

@Post("/usuario")public void adiciona(Usuario usuario) {

}

@Put("/usuario")public void atualiza(Usuario usuario) {

}

@Delete("/usuario")public void remove(Usuario usuario) {

}

Serializao

public void carregaJson(Usuario usuario) { result.use(Results.json()) .from(usuario) .serialize();}

public void carregaXml(Usuario usuario) { result.use(Results.xml()) .from(usuario) .serialize();}

Interceptors

@Interceptspublic class LoginInterceptor {

}

@Interceptspublic class LoginInterceptor {

@BeforeCall public void before() {

}

@AfterCall public void after() {

} @Accepts public boolean accepts(ControllerMethod method) { return method.containsAnnotation(Logado.class); }

}

@Interceptspublic class LoginInterceptor {

@BeforeCall public void before() {

}

@AfterCall public void after() {

} @Accepts public boolean accepts(ControllerMethod method) { return method.containsAnnotation(Logado.class); }

}

@Interceptspublic class LoginInterceptor {

@BeforeCall public void before() {

}

@AfterCall public void after() {

} @Accepts public boolean accepts(ControllerMethod method) { return method.containsAnnotation(Logado.class); }

}

@Interceptspublic class LoginInterceptor {

@BeforeCall public void before() {

}

@AfterCall public void after() {

} @Accepts public boolean accepts(ControllerMethod method) { return method.containsAnnotation(Logado.class); }

}

@AroundCallpublic void intercept(SimpleInterceptorStack stack) { System.out.println("Antes da lgica.");

stack.next(); // continua a execuo System.out.println("Depois da lgica.");}

Testes Unitrios

@Controllerpublic class UsuarioController {

private Result result;

@Injectpublic UsuarioController(Result result) {this.result = result;}

protected UsuarioController() {this(null);}

public void index() {result.include("mensagem", "Pgina Inicial !");}

}

public class UsuarioControllerTest {

private MockResult result;private UsuarioController controller;

@Beforepublic void setUp() {result = new MockResult();controller = new UsuarioController(result);}

@Testpublic void deveriaConterMensagemDeSucesso() {controller.index();

Assert.assertTrue(result.included().containsKey("mensagem"));Assert.assertEquals("Pgina Inicial !", result.included("mensagem"));}

}

public class UsuarioControllerTest {

private MockResult result;private UsuarioController controller;

@Beforepublic void setUp() {result = new MockResult();controller = new UsuarioController(result);}

@Testpublic void deveriaConterMensagemDeSucesso() {controller.index();

Assert.assertTrue(result.included().containsKey("mensagem"));Assert.assertEquals("Pgina Inicial !", result.included("mensagem"));}

}

public class UsuarioControllerTest {

private MockResult result;private UsuarioController controller;

@Beforepublic void setUp() {result = new MockResult();controller = new UsuarioController(result);}

@Testpublic void deveriaConterMensagemDeSucesso() {controller.index();

Assert.assertTrue(result.included().containsKey("mensagem"));Assert.assertEquals("Pgina Inicial !", result.included("mensagem"));}

}

Plugins

vraptor-brutauth

vraptor-jpa

vraptor-hibernate

vraptor-jasperreport

Mais VRaptor 4

www.vraptor.com.br

https://groups.google.com/group/caelum-vraptor

https://github.com/caelum/vraptor4

Dvidas ?