Apresentação tdc como aproveitar os novos recursos do java ee 7
TDC 2015 - Java: from old school to modern art!
-
Upload
marcos-ferreira -
Category
Software
-
view
612 -
download
3
Transcript of TDC 2015 - Java: from old school to modern art!
Globalcode – Open4education
Java – From old school to modern art Marcos Roberto Ferreira
Engenheiro de Software - ContaAzul
• Engenheiro de Software na ContaAzul
• Formado em Sistemas de Informação pela UDESC
• +12 anos XP dev web
• +10 anos XP Java
• Colaborador do GUJavaSC
github.com/Marcosabout.me/marcos.ferreira
QUEM SOU EU?
MARCOS ROBERTO FERREIRA
old school: ContaAzul antes de ser ContaAzul
modern art: ContaAzul Startup
APIs/Projetos usados no ContaAzul
AGENDA…
1
2
3
7
MPE’s que já utilizaram o ContaAzul até agora
+350.000
Novas empresas que começam a usar todo mês
23.000
8
Número de transações financeiras
15.000.000 48.000.000.000Total de transações
Vendas criadas
2.500.000 ~4.000.000Contatos na nossa plataforma
public class MemberServlet extends HTTPServlet{
public void doGet(…) throws IOException{
List<Member> members = memberService.list();
request.setAttribute(“members”, members);
String jsp = “member.jsp";request.getRequestDispatcher( ) .forward( request, response );
}}
<%@ page contentType="text/html; charset=UTF-8"%><html><body>
<c:forEach var="member" items=“{member}”>${member} <br/>
</c:forEach></body>
</body>
18
http://www.jajakarta.org/struts/struts1.2/documentation/ja/target/images/struts.gif http://www.techideator.com/wp-content/uploads/2015/03/Spring-MVC-e1410633092262.png
http://vraptor3.vraptor.org/assets/images/logo.png https://www.playframework.com/assets/images/logos/play_full_color.png
Como resolver o problema?
http://sustainablesurf.org/wp-content/uploads/2011/05/Me-and-shaping-dust.jpg
Construir um framework?
http://sustainablesurf.org/wp-content/uploads/2011/05/Me-and-shaping-dust.jpg
35
private String name;
public String getName() {return name;
}
public void setName(String name) {this.name = name;
}
36
private String name;
public String getName() {return name;
}
public void setName(String name) {this.name = name;
}
@Getter@Setterprivate String name;
38
@Getter@Setterpublic class Member {private Long id;private String name;
}
@Getter@Setter@ToString@EqualsAndHashCodepublic class Member {private Long id;private String name;
}
39
@Getter@Setter@ToString@EqualsAndHashCodepublic class Member {private Long id;private String name;
}
40
@Getter@Setter@ToString@EqualsAndHashCodepublic class Member {private Long id;private String name;
}
@Datapublic class Member {private Long id;private String name;
}
41
public class Member {private Long id;private String name;public Member() {}public Member(Long id, String name) {super();this.id = id;this.name = name;
}}
42
public class Member {private Long id;private String name;public Member() {}public Member(Long id, String name) {super();this.id = id;this.name = name;
}}
@NoArgsConstructor@AllArgsConstructorpublic class Member {private Long id;private String name;
}
44
@Builderpublic class Member {
private Long id;private String name;
}
Member.builder().id(1L).name(“Marcos")
.build();
49
@Path("user")@Produces(APPLICATION_JSON)@Consumes(APPLICATION_JSON)public class UserResource {
@POSTpublic User save(User user){
return userService.save(user);}
@GETpublic List<User> list(){
return userService.list();}
}
REST + JSON
50
@PersistenceContextprivate EntityManager entityManager;
private void save(Long userId, User user) {if (userId == null)entityManager.persist(user);
else {user.setId(userId);entityManager.merge(user);
}}
persitência de dados
51
@Statelesspublic class UserService {
@TransactionAttribute(REQUIRES_NEW)public void save(Long userId, User user) {
…}
}
transações
@Statelesspublic class UserService {public void save(Long userId, User user) {
…}
}
52
@Statelesspublic class PaymentService {@Asynchronouspublic void update(User user){…}
}
@Injectprivate PaymentService paymentService;
public User save(User user) {paymentService.update(user);
}
processamento assíncrono
53
@Statelesspublic class UserJob {
@Schedule(hour="*",minute="*",second="*/20")public void schedule(){…}
}
agendamento
55
new JPAQuery(entityManager).from(member).list(member);
import static org.gujavasc.entities.QMember.member;
56
new JPAQuery(entityManager).from(post).innerJoin(post.member, member).list(QPost.create(member.name, post.title, post.content));
import static org.gujavasc.entities.QMember.member;import static org.gujavasc.entities.QPost.post;
57
new JPAQuery(entityManager).from(post).leftJoin(post.member, member).list(QPost.create(member.name, post.title,
post.content));
import static org.gujavasc.entities.QMember.member;import static org.gujavasc.entities.QPost.post;
58
new JPAQuery(entityManager).from(post).leftJoin(post.member, member).where(post.status.eq(DRAFT)).list(QPost.create(member.name, post.title,
post.content));
import static org.gujavasc.entities.QMember.member;import static org.gujavasc.entities.QPost.post;
59
new JPAUpdateClause(entityManager, post).set(post.status, Status.PUBLISHED).execute();
import static org.gujavasc.entities.QPost.post;
60
new JPADeleteClause(entityManager,post).where(post.status.in(Status.PUBLISHED,Status.DRAFT)).execute();
import static org.gujavasc.entities.QPost.post;