Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Construindo aplicações HTML5 em Java

Construindo aplicações HTML5 em Java

Criar pequenos websites é tarefa trivial para qualquer framework JavaScript moderno. Contudo, implementar e manter uma aplicação web em larga escala é um trabalho muito mais complexo. Java possui reputação de ser uma linguagem estável e robusta, perfeita para grandes aplicações corporativas.

E se pudéssemos compartilhar código Java EE entre cliente e servidor, reutilizando código entre diversas camadas da aplicação?

Nesta palestra você aprenderá como construir aplicações web ricas, type-safe, sem nenhum boilerplate através do modelo de programação do JBoss Errai; e como construir aplicações escaláveis que combinam os melhores aspectos de JavaScript, Java e HTML5.

O público conhecerá os desafios enfrentados na construção de aplicações web em larga escala, como o Errai aborda estes desafios e lições aprendidas direto das trincheiras na construção do framework Uberfire e das aplicações Web do Drools e jBPM.

Eder Ignatowicz

October 11, 2016
Tweet

More Decks by Eder Ignatowicz

Other Decks in Programming

Transcript

  1. Como construimos os workbenches do Drools e do jBPM Eder

    Ignatowicz Sr. Software Engineer JBoss by Red Hat
  2. @Bindable @Entity @NamedQuery( name = "allComplaints", query = "SELECT c

    FROM UserComplaint c ORDER BY c.id" ) public class UserComplaint { @Id @GeneratedValue( strategy = GenerationType.AUTO ) private Long id; @Version private Long version; @NotNull private String name; @Email private String email; private String text; … }
  3. @Templated @Page public class ComplaintForm { @Inject private EntityManager em;

    @EventHandler("submit") private void onSubmit(ClickEvent e) { em.persist(complaint); em.flush(); } }
  4. @Templated @Page public class ComplaintForm { @Inject @Bound @DataField private

    TextBox email; @Inject @Bound @DataField( "name" ) private TextBox username; @Inject @Bound @DataField private TextArea text; @Inject @Model private UserComplaint complaint; @EventHandler( "submit" ) private void onSubmit( ClickEvent e ) { sendToServer( complaint ); } }
  5. Client Shared @Inject
 private Caller<ContactStorageService> contactService; contactService.call( (List<Contact> contacts) ->

    addAll(contacts) ).getAllContacts();
 @Path("/contact")
 public interface ContactStorageService { @GET
 @Produces("application/json")
 List<Contact> getAllContacts();
  6. @Dependent @Templated public class ProjectsView implements ProjectsPresenter.View { private ProjectsPresenter

    presenter; @Inject Document document; @Inject @DataField( "projects-view" ) Div view; @Inject @DataField( "new-project" ) Button newProject; @Inject @DataField( "projects-list" ) UnorderedList projectsList; @Inject Instance<ProjectItem> projects;
  7. package com.acme; @JsType class Foo { public int x; public

    int y; public int sum() { return x + y; } } var foo = new com.acme.Foo(); foo.x = 40; foo.y = 2; foo.sum(); // will return 42!
  8. // in JavaScript com = { acme: {} }; com.acme.Foo

    = function() { this.x = 40; this.y = 2; }; com.acme.Foo.prototype.sum = function() { return this.x + this.y; }; // in Java package com.acme; @JsType(isNative = true) class Foo { public int x; public int y; public native int sum(); } class FooMain { public static void main() { Foo foo = new Foo(); foo.sum(); // will return 42! foo.x = 50; foo.y = 5; foo.sum(); // will return 55! }
  9. Framework para construção de grandes aplicações estilo “workbench" e consoles

    web “Eclipse Like” Modelo de Programação "Opinativo"