SlideShare uma empresa Scribd logo
1 de 82
Baixar para ler offline
Lidando com Java
Obsoleto: Do Struts 1.0
ao CDI
Java na Crista da Onda
Lidando com Java
Obsoleto: Do Struts 1.0
ao VRaptor com CDI
Java na Crista da Onda
David Robert
davidrobert@gmail.com
linkedin.com/in/davidrobert
Lidando com Java
Obsoleto
Struts & CDI
❏
❏
❏
❏
❏
❏
➢
➢
➢
➢
➢
➢
public class ProdutoDao {
public void salvar(Produto produto) {
entityManager.persist(produto);
}
}
public class ProdutoDao {
private EntityManager entityManager;
public ProdutoDao(EntityManager em) {
this.entityManager = em;
}
public void salvar(Produto produto) {
entityManager.persist(produto);
}
}
public class ProdutoDao {
private EntityManager entityManager;
// recebe a dependência pronta
public ProdutoDao(EntityManager em) {
this.entityManager = em;
}
// usa a dependência
public void salvar(Produto produto) {
entityManager.persist(produto);
}
}
public class ProdutoDao {
private EntityManager entityManager;
public ProdutoDao(EntityManager em) {
this.entityManager = em;
}
public void salvar(Produto produto) {
entityManager.persist(produto);
}
}
public class ProdutoDao {
private EntityManager entityManager;
@Inject
public ProdutoDao(EntityManager em) {
this.entityManager = em;
}
public void salvar(Produto produto) {
entityManager.persist(produto);
}
}
public class ProdutoDao {
@Inject
private EntityManager entityManager;
public void salvar(Produto produto) {
entityManager.persist(produto);
}
}
public static ConnectionContainer
putContainerInRequest(HttpServletRequest
request) {
ConnectionContainer container =
new ConnectionContainer();
request.setAttribute(ConnectionFactory.
OPEN_IN_VIEW_CONNECTION_CONTAINER,
container);
return container;
}
public static Connection
getConnectionFromRequest(HttpServletRequest
request) {
ConnectionContainer con =
(ConnectionContainer)request.getAttribute(
OPEN_IN_VIEW_CONNECTION_CONTAINER);
return con.getConnection();
}
public class ConnectionContainer {
private Connection connection;
public Connection getConnection() {
if (connection == null) {
try {
connection =
ConnectionFactory.createNewConnection();
} catch (SQLException e) {
logError("Error blah", e);
}
}
return connection;
}
}
public Connection getCon(HttpServletRequest
request) throws SQLException {
return getConnectionFromRequest(request);
}
@RequestScoped
public Connection getCon(HttpServletRequest
request) throws SQLException {
return getConnectionFromRequest(request);
}
@Produces
@RequestScoped
public Connection getCon(HttpServletRequest
request) throws SQLException {
return getConnectionFromRequest(request);
}
public class JPAUtil {
@Produces @ApplicationScoped
public EntityManagerFactory criaFactory() {
return
Persistence.createEntityManagerFactory("jpa");
}
@Produces @RequestScoped
public EntityManager
criaEM(EntityManagerFactory factory){
return factory.createEntityManager();
}
}
<filter>
<init-param>
<param-name>restrictedUrl</param-name>
<param-value>
/sellerOrder.do, /buyerOrder.do,
/clientCategory.do, /clientCreate.do,
/clientEdit.do, /clientSearch.do,
/productCreate.do, ...
</param-value>
</init-param>
<init-param>
<param-name>restrictedCommands</param-name>
<param-value>
showUserPasswordForm, showOrderHistoryForm,
showUserFeedbackEditForm, showUserShopForm,
showUserBannerForm, showUserPictureForm,
showUserContactInfoForm, ...
</param-value>
</init-param>
</filter>
@InterceptorBinding
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface BlockUnloggedUsers { }
@InterceptorBinding
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface BlockUnloggedUsers { }
@BlockUnloggedUsers
public class ProductSearchAction { /* ... */ }
@InterceptorBinding
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface BlockUnloggedUsers { }
@BlockUnloggedUsers
public class ProductSearchAction { /* ... */ }
public class BlockedActionsTest {
private Class<?>[] blackListed =
new Class<?>[]{
BuyerOrderAction.class,
ClientCreateAction.class,
... };
@Test
public void shouldVerifyBlackListedActions(){
for (Class<?> blockedAction : blackListed){
assertNotNull(
blockedAction.getAnnotation(
BlockUnloggedUsers.class));
...
...
Method[] actionMethods =
blockedAction.getMethods();
for (Method method : actionMethods) {
assertNull(
method.getAnnotation(
UnloggedUsers.class));
}
}
public void
loginIntoSession(LoginAuthentication
loginAuthentication, HttpServletRequest
request, HttpServletResponse response) {
UserInfo loginUser =
login.login(loginAuthentication);
SessionUtils.putIntoSession(request,loginUser);
SessionUtils.setLoggedUser(request, loginUser);
// + Código para merge dos carrinhos
// + Código de traqueamento
// = Código Monstro!
}
public void
loginIntoSession(LoginAuthentication
loginAuthentication, HttpServletRequest
request, HttpServletResponse response) {
UserInfo loginUser =
login.login(loginAuthentication);
SessionUtils.putIntoSession(request,loginUser);
SessionUtils.setLoggedUser(request, loginUser);
sessionLoginEvent.fire(
new SessionLogin(
loginUser, request, response));
}
@Inject
private Event<SessionLogin> sessionLoginEvent;
public void algumMetodoInteressado(
@Observers SessionLogin sessionLogin) {
// ...
}
JSF
Play!
Spring
VRaptor
???
Quão fácil é trocar um framework?
❏ Desenvolvedores não envolvidos
no processo?
Quão fácil é trocar um framework?
❏ Desenvolvedores não envolvidos
no processo?
❏ Entregas de produto?
Quão fácil é trocar um framework?
❏ Desenvolvedores não envolvidos
no processo?
❏ Entregas de produto?
❏ Ferias coletivas?
if (analyser.isRouteToVRaptor((HttpServletRequest) req)) {
super.doFilter(req, res, chain);
} else {
Elo7MutableRequest mutableRequest =
new Elo7MutableRequest((HttpServletRequest) req);
Elo7MutableResponse mutableResponse =
new Elo7MutableResponse((HttpServletResponse) res);
StrutsRequestStarted request =
new StrutsRequestStarted(chain, mutableRequest,
mutableResponse);
strutsRequestStartedEvent.fire(request);
chain.doFilter(req, res);
}
Obrigado!
David Robert
@while42
❏
❏
❏
❏

Mais conteúdo relacionado

Semelhante a Lidando com Java Obsoleto: Do Struts 1.0 ao CDI

Persistência com JPA e Hibernate
Persistência com JPA e HibernatePersistência com JPA e Hibernate
Persistência com JPA e HibernateFernando Oliveira
 
Test-Driven Development e sua influência no design
Test-Driven Development e sua influência no designTest-Driven Development e sua influência no design
Test-Driven Development e sua influência no designMaurício Aniche
 
Como conectar programas em linguagem java a bases de dados
Como conectar programas em linguagem java  a bases de dadosComo conectar programas em linguagem java  a bases de dados
Como conectar programas em linguagem java a bases de dadosHenrique Fernandes
 
Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Elton Minetto
 
Vraptor - Alta produtividade no Desenvolvimento Web em Java
Vraptor - Alta produtividade no Desenvolvimento Web em JavaVraptor - Alta produtividade no Desenvolvimento Web em Java
Vraptor - Alta produtividade no Desenvolvimento Web em JavaKaio Valente
 
Android DevConference - SOLID no Android
Android DevConference - SOLID no AndroidAndroid DevConference - SOLID no Android
Android DevConference - SOLID no AndroidiMasters
 
Introdução a programação em Android
Introdução a programação em AndroidIntrodução a programação em Android
Introdução a programação em AndroidPedro Veloso
 
Palestra Novidades da linguagem C# 6
Palestra Novidades da linguagem C# 6Palestra Novidades da linguagem C# 6
Palestra Novidades da linguagem C# 6Renato Haddad
 
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em açãoRafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em açãoRafael Garcia
 
Atividades e Intenções (Android)
Atividades e Intenções (Android)Atividades e Intenções (Android)
Atividades e Intenções (Android)Natanael Fonseca
 
Desmistificando o cairngorm
Desmistificando o cairngormDesmistificando o cairngorm
Desmistificando o cairngormEric Cavalcanti
 
AspectJ — Programação orientada a aspectos em Java
AspectJ — Programação orientada a aspectos em JavaAspectJ — Programação orientada a aspectos em Java
AspectJ — Programação orientada a aspectos em Javaelliando dias
 
Teste de Integracao com DbUnit e JStryker
Teste de Integracao com DbUnit e JStrykerTeste de Integracao com DbUnit e JStryker
Teste de Integracao com DbUnit e JStrykerWashington Botelho
 
(Portuguese) Java EE Poliglota
(Portuguese) Java EE Poliglota(Portuguese) Java EE Poliglota
(Portuguese) Java EE PoliglotaPhil Calçado
 
Seminário sd android_exemplos
Seminário sd android_exemplosSeminário sd android_exemplos
Seminário sd android_exemplosCalvin Rodrigues
 

Semelhante a Lidando com Java Obsoleto: Do Struts 1.0 ao CDI (20)

VRaptor4
VRaptor4VRaptor4
VRaptor4
 
Android na Prática
Android na PráticaAndroid na Prática
Android na Prática
 
Persistência com JPA e Hibernate
Persistência com JPA e HibernatePersistência com JPA e Hibernate
Persistência com JPA e Hibernate
 
Test-Driven Development e sua influência no design
Test-Driven Development e sua influência no designTest-Driven Development e sua influência no design
Test-Driven Development e sua influência no design
 
Como conectar programas em linguagem java a bases de dados
Como conectar programas em linguagem java  a bases de dadosComo conectar programas em linguagem java  a bases de dados
Como conectar programas em linguagem java a bases de dados
 
Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Introdução ao Zend Framework 2
Introdução ao Zend Framework 2
 
Vraptor - Alta produtividade no Desenvolvimento Web em Java
Vraptor - Alta produtividade no Desenvolvimento Web em JavaVraptor - Alta produtividade no Desenvolvimento Web em Java
Vraptor - Alta produtividade no Desenvolvimento Web em Java
 
Android DevConference - SOLID no Android
Android DevConference - SOLID no AndroidAndroid DevConference - SOLID no Android
Android DevConference - SOLID no Android
 
Introdução a programação em Android
Introdução a programação em AndroidIntrodução a programação em Android
Introdução a programação em Android
 
Solid
SolidSolid
Solid
 
Palestra Novidades da linguagem C# 6
Palestra Novidades da linguagem C# 6Palestra Novidades da linguagem C# 6
Palestra Novidades da linguagem C# 6
 
Rafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em açãoRafael Garcia - Yii Framework, principais características e em ação
Rafael Garcia - Yii Framework, principais características e em ação
 
Tutorial Dwr - Configuração e Uso
Tutorial Dwr - Configuração e UsoTutorial Dwr - Configuração e Uso
Tutorial Dwr - Configuração e Uso
 
Atividades e Intenções (Android)
Atividades e Intenções (Android)Atividades e Intenções (Android)
Atividades e Intenções (Android)
 
Desmistificando o cairngorm
Desmistificando o cairngormDesmistificando o cairngorm
Desmistificando o cairngorm
 
AspectJ — Programação orientada a aspectos em Java
AspectJ — Programação orientada a aspectos em JavaAspectJ — Programação orientada a aspectos em Java
AspectJ — Programação orientada a aspectos em Java
 
PHP FrameWARks - FISL
PHP FrameWARks - FISLPHP FrameWARks - FISL
PHP FrameWARks - FISL
 
Teste de Integracao com DbUnit e JStryker
Teste de Integracao com DbUnit e JStrykerTeste de Integracao com DbUnit e JStryker
Teste de Integracao com DbUnit e JStryker
 
(Portuguese) Java EE Poliglota
(Portuguese) Java EE Poliglota(Portuguese) Java EE Poliglota
(Portuguese) Java EE Poliglota
 
Seminário sd android_exemplos
Seminário sd android_exemplosSeminário sd android_exemplos
Seminário sd android_exemplos
 

Mais de David Robert Camargo de Campos

Evolução cultural - Criando Times de Alto Desempenho
Evolução cultural - Criando Times de Alto DesempenhoEvolução cultural - Criando Times de Alto Desempenho
Evolução cultural - Criando Times de Alto DesempenhoDavid Robert Camargo de Campos
 
Evolução cultural - Criando times de alto desempenho
Evolução cultural - Criando times de alto desempenhoEvolução cultural - Criando times de alto desempenho
Evolução cultural - Criando times de alto desempenhoDavid Robert Camargo de Campos
 
O uso de PWA e o futuro do desenvolvimento mobile com React Native e Kotlin
O uso de PWA e o futuro do desenvolvimento mobile com React Native e KotlinO uso de PWA e o futuro do desenvolvimento mobile com React Native e Kotlin
O uso de PWA e o futuro do desenvolvimento mobile com React Native e KotlinDavid Robert Camargo de Campos
 
Evolução cultural: Criando times de alto desempenho no Elo7
Evolução cultural: Criando times de alto desempenho no Elo7Evolução cultural: Criando times de alto desempenho no Elo7
Evolução cultural: Criando times de alto desempenho no Elo7David Robert Camargo de Campos
 
Como um grande sistema REST funciona - arquitetura e desempenho
Como um grande sistema REST funciona - arquitetura e desempenhoComo um grande sistema REST funciona - arquitetura e desempenho
Como um grande sistema REST funciona - arquitetura e desempenhoDavid Robert Camargo de Campos
 
Robustez de Software - Como ouvir menos reclamações dos seus chefes
Robustez de Software - Como ouvir menos reclamações dos seus chefesRobustez de Software - Como ouvir menos reclamações dos seus chefes
Robustez de Software - Como ouvir menos reclamações dos seus chefesDavid Robert Camargo de Campos
 

Mais de David Robert Camargo de Campos (17)

Evolução cultural - Criando Times de Alto Desempenho
Evolução cultural - Criando Times de Alto DesempenhoEvolução cultural - Criando Times de Alto Desempenho
Evolução cultural - Criando Times de Alto Desempenho
 
Evolução cultural - Criando times de alto desempenho
Evolução cultural - Criando times de alto desempenhoEvolução cultural - Criando times de alto desempenho
Evolução cultural - Criando times de alto desempenho
 
Introdução ao kotlin
Introdução ao kotlinIntrodução ao kotlin
Introdução ao kotlin
 
O uso de PWA e o futuro do desenvolvimento mobile com React Native e Kotlin
O uso de PWA e o futuro do desenvolvimento mobile com React Native e KotlinO uso de PWA e o futuro do desenvolvimento mobile com React Native e Kotlin
O uso de PWA e o futuro do desenvolvimento mobile com React Native e Kotlin
 
Evolução cultural: Criando times de alto desempenho no Elo7
Evolução cultural: Criando times de alto desempenho no Elo7Evolução cultural: Criando times de alto desempenho no Elo7
Evolução cultural: Criando times de alto desempenho no Elo7
 
Cultura na engenharia & Impacto no recrutamento
Cultura na engenharia & Impacto no recrutamentoCultura na engenharia & Impacto no recrutamento
Cultura na engenharia & Impacto no recrutamento
 
Os desafios de um chat integrado ao checkout
Os desafios de um chat integrado ao checkoutOs desafios de um chat integrado ao checkout
Os desafios de um chat integrado ao checkout
 
Times de Alta Performance
Times de Alta PerformanceTimes de Alta Performance
Times de Alta Performance
 
Programando em Go
Programando em GoProgramando em Go
Programando em Go
 
An introduction to programming in Go
An introduction to programming in GoAn introduction to programming in Go
An introduction to programming in Go
 
Como um grande sistema REST funciona - arquitetura e desempenho
Como um grande sistema REST funciona - arquitetura e desempenhoComo um grande sistema REST funciona - arquitetura e desempenho
Como um grande sistema REST funciona - arquitetura e desempenho
 
Implementação, design ou arquitetura?
Implementação, design ou arquitetura?Implementação, design ou arquitetura?
Implementação, design ou arquitetura?
 
Construindo um sistema distribuido usando rest
Construindo um sistema distribuido usando restConstruindo um sistema distribuido usando rest
Construindo um sistema distribuido usando rest
 
Como um grande sistema REST funciona
Como um grande sistema REST funcionaComo um grande sistema REST funciona
Como um grande sistema REST funciona
 
Dojo abril
Dojo abrilDojo abril
Dojo abril
 
Dicas para deixar seu código mais Robusto
Dicas para deixar seu código mais RobustoDicas para deixar seu código mais Robusto
Dicas para deixar seu código mais Robusto
 
Robustez de Software - Como ouvir menos reclamações dos seus chefes
Robustez de Software - Como ouvir menos reclamações dos seus chefesRobustez de Software - Como ouvir menos reclamações dos seus chefes
Robustez de Software - Como ouvir menos reclamações dos seus chefes
 

Lidando com Java Obsoleto: Do Struts 1.0 ao CDI