Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
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 = ...
public class ProdutoDao {
private EntityManager entityManager;
// recebe a dependência pronta
public ProdutoDao(EntityMana...
public class ProdutoDao {
private EntityManager entityManager;
public ProdutoDao(EntityManager em) {
this.entityManager = ...
public class ProdutoDao {
private EntityManager entityManager;
@Inject
public ProdutoDao(EntityManager em) {
this.entityMa...
public class ProdutoDao {
@Inject
private EntityManager entityManager;
public void salvar(Produto produto) {
entityManager...
public static ConnectionContainer
putContainerInRequest(HttpServletRequest
request) {
ConnectionContainer container =
new ...
public static Connection
getConnectionFromRequest(HttpServletRequest
request) {
ConnectionContainer con =
(ConnectionConta...
public class ConnectionContainer {
private Connection connection;
public Connection getConnection() {
if (connection == nu...
public Connection getCon(HttpServletRequest
request) throws SQLException {
return getConnectionFromRequest(request);
}
@RequestScoped
public Connection getCon(HttpServletRequest
request) throws SQLException {
return getConnectionFromRequest(...
@Produces
@RequestScoped
public Connection getCon(HttpServletRequest
request) throws SQLException {
return getConnectionFr...
public class JPAUtil {
@Produces @ApplicationScoped
public EntityManagerFactory criaFactory() {
return
Persistence.createE...
<filter>
<init-param>
<param-name>restrictedUrl</param-name>
<param-value>
/sellerOrder.do, /buyerOrder.do,
/clientCategor...
<init-param>
<param-name>restrictedCommands</param-name>
<param-value>
showUserPasswordForm, showOrderHistoryForm,
showUse...
@InterceptorBinding
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface BlockUnloggedUsers {...
@InterceptorBinding
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface BlockUnloggedUsers {...
@InterceptorBinding
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface BlockUnloggedUsers {...
public class BlockedActionsTest {
private Class<?>[] blackListed =
new Class<?>[]{
BuyerOrderAction.class,
ClientCreateAct...
...
Method[] actionMethods =
blockedAction.getMethods();
for (Method method : actionMethods) {
assertNull(
method.getAnnot...
public void
loginIntoSession(LoginAuthentication
loginAuthentication, HttpServletRequest
request, HttpServletResponse resp...
public void
loginIntoSession(LoginAuthentication
loginAuthentication, HttpServletRequest
request, HttpServletResponse resp...
@Inject
private Event<SessionLogin> sessionLoginEvent;
public void algumMetodoInteressado(
@Observers SessionLogin session...
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 mu...
Obrigado!
David Robert
@while42
❏
❏
❏
❏
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014
Upcoming SlideShare
Loading in …5
×

Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014

1,045 views

Published on

Published in: Technology
  • Be the first to like this

Lidando com Java obsoleto: do Struts 1.0 ao CDI - QConSP 2014

  1. 1. Lidando com Java Obsoleto: Do Struts 1.0 ao CDI Java na Crista da Onda
  2. 2. Lidando com Java Obsoleto: Do Struts 1.0 ao VRaptor com CDI Java na Crista da Onda
  3. 3. David Robert davidrobert@gmail.com linkedin.com/in/davidrobert
  4. 4. Lidando com Java Obsoleto Struts & CDI
  5. 5. ❏ ❏ ❏
  6. 6. ❏ ❏ ❏
  7. 7.
  8. 8. ➢ ➢
  9. 9. ➢ ➢ ➢
  10. 10. public class ProdutoDao { public void salvar(Produto produto) { entityManager.persist(produto); } }
  11. 11. public class ProdutoDao { private EntityManager entityManager; public ProdutoDao(EntityManager em) { this.entityManager = em; } public void salvar(Produto produto) { entityManager.persist(produto); } }
  12. 12. 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); } }
  13. 13. public class ProdutoDao { private EntityManager entityManager; public ProdutoDao(EntityManager em) { this.entityManager = em; } public void salvar(Produto produto) { entityManager.persist(produto); } }
  14. 14. public class ProdutoDao { private EntityManager entityManager; @Inject public ProdutoDao(EntityManager em) { this.entityManager = em; } public void salvar(Produto produto) { entityManager.persist(produto); } }
  15. 15. public class ProdutoDao { @Inject private EntityManager entityManager; public void salvar(Produto produto) { entityManager.persist(produto); } }
  16. 16. public static ConnectionContainer putContainerInRequest(HttpServletRequest request) { ConnectionContainer container = new ConnectionContainer(); request.setAttribute(ConnectionFactory. OPEN_IN_VIEW_CONNECTION_CONTAINER, container); return container; }
  17. 17. public static Connection getConnectionFromRequest(HttpServletRequest request) { ConnectionContainer con = (ConnectionContainer)request.getAttribute( OPEN_IN_VIEW_CONNECTION_CONTAINER); return con.getConnection(); }
  18. 18. 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; } }
  19. 19. public Connection getCon(HttpServletRequest request) throws SQLException { return getConnectionFromRequest(request); }
  20. 20. @RequestScoped public Connection getCon(HttpServletRequest request) throws SQLException { return getConnectionFromRequest(request); }
  21. 21. @Produces @RequestScoped public Connection getCon(HttpServletRequest request) throws SQLException { return getConnectionFromRequest(request); }
  22. 22. public class JPAUtil { @Produces @ApplicationScoped public EntityManagerFactory criaFactory() { return Persistence.createEntityManagerFactory("jpa"); } @Produces @RequestScoped public EntityManager criaEM(EntityManagerFactory factory){ return factory.createEntityManager(); } }
  23. 23. <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>
  24. 24. <init-param> <param-name>restrictedCommands</param-name> <param-value> showUserPasswordForm, showOrderHistoryForm, showUserFeedbackEditForm, showUserShopForm, showUserBannerForm, showUserPictureForm, showUserContactInfoForm, ... </param-value> </init-param> </filter>
  25. 25. @InterceptorBinding @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE}) public @interface BlockUnloggedUsers { }
  26. 26. @InterceptorBinding @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE}) public @interface BlockUnloggedUsers { } @BlockUnloggedUsers public class ProductSearchAction { /* ... */ }
  27. 27. @InterceptorBinding @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE}) public @interface BlockUnloggedUsers { } @BlockUnloggedUsers public class ProductSearchAction { /* ... */ }
  28. 28. 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)); ...
  29. 29. ... Method[] actionMethods = blockedAction.getMethods(); for (Method method : actionMethods) { assertNull( method.getAnnotation( UnloggedUsers.class)); } }
  30. 30. 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! }
  31. 31. 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)); }
  32. 32. @Inject private Event<SessionLogin> sessionLoginEvent; public void algumMetodoInteressado( @Observers SessionLogin sessionLogin) { // ... }
  33. 33. JSF Play! Spring VRaptor ???
  34. 34. Quão fácil é trocar um framework? ❏ Desenvolvedores não envolvidos no processo?
  35. 35. Quão fácil é trocar um framework? ❏ Desenvolvedores não envolvidos no processo? ❏ Entregas de produto?
  36. 36. Quão fácil é trocar um framework? ❏ Desenvolvedores não envolvidos no processo? ❏ Entregas de produto? ❏ Ferias coletivas?
  37. 37. 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); }
  38. 38. Obrigado! David Robert @while42
  39. 39. ❏ ❏ ❏ ❏

×