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
❏
❏
❏
❏

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