Your SlideShare is downloading. ×
0
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Apps Web em Wicket e Scala no GlassFish Java EE 6

2,556

Published on

Palestra apresentada no JavaOne LA 2011

Palestra apresentada no JavaOne LA 2011

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,556
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
14
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Apps Web em Wicket e Scala no GlassFish JEE 6 Apache Wicket + Scala + Java EE 6
  • 2. Quem sou eu? twitter: @brunoborges www.brunoborges.com [email_address]
  • 3. Agenda <ul><li>Desenvolvimento Web
  • 4. Apache Wicket
  • 5. Scala
  • 6. GlassFish Java EE 6
  • 7. Projeto Gamboa </li></ul>
  • 8. Desenvolvimento Web é ágil? <ul><li>Para a galera dessas tecnologias, sim </li></ul>
  • 9. Designers vs Developers
  • 10. De quais projetos estamos falando? <ul><li>“Pixel Perfect” </li><ul><li>Aplicação do jeito que o cliente desenhou </li></ul></ul><ul><li>Um Web Designer </li><ul><li>Ou uma equipe só de designers </li></ul><li>Prototipação
  • 11. Alterações no protótipo refletem na aplicação </li></ul>
  • 12. O que ajuda o designer?
  • 13. Isso ajuda também... e MUITO PREVIEW NO BROWSER
  • 14. Fazemos isso? <ul>public class LoginAction extends ActionSupport { public void login() { Connection c = getConnection(); Statement st = c.createStatement(); ResultSet rs = st.executeQuery(“SELECT * FROM USUARIO WHERE ID = “+usuario); setAutenticado(rs.hasNext()); } } </ul>Struts Consulta JDBC ???
  • 15. Separação de Camadas
  • 16. Interface do Usuário <ul><li>Esta camada também pode ser quebrada em subcamadas </li><ul><li>Uma para o web designer
  • 17. Outra para o web developer </li></ul></ul>
  • 18. É preciso uma melhor marcação HTML <ul>< html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;> <head><title></title></head> < body > < form > <span>Nome:</span> <input type=&quot;text&quot; /> <input type=&quot;submit&quot; value=&quot;Submit&quot; /> </ form > </ body > </ html > </ul>Isto é o que o Web Designer faz Também é o que o usuário recebe no browser
  • 19. E se... <ul>Pudéssemos ter uma tecnologia que não altera (em “quase” nada) o que o Web Designer fez? </ul>
  • 20. <ul>< html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;> <head><title></title></head> < body > < form > <span>Nome:</span> <input type=&quot;text&quot; /> <input type=&quot;submit&quot; value=&quot;Submit&quot; /> </ form > </ body > </ html > </ul>
  • 21. <ul>< html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;> <head><title></title></head> < body > < form wicket:id=&quot;form&quot; > <span>Nome:</span> <input wicket:id=&quot;nome&quot; type=&quot;text&quot; /> <input type=&quot;submit&quot; value=&quot;Submit&quot; /> </ form > </ body > </ html > </ul>
  • 22. Tipos de Marcação XHTML Declarativa (Wicket, Tapestry e poucos outros) <form action=”salvar”> <input type=”text” name=”nome” /> <input type=”submit” value=”Salvar” /> </form> <form wicket:id=”form” > <input type=”text” wicket:id=”nome” /> <input type=”submit” wicket:id=”salvar” /> </form> Bom para o Web Designer e navegador!
  • 23. Tipos de Marcação XHTML Imperativa (JSF, Struts, SpringMVC, Play!, Ruby on Rails, PHP, Python ...) <form action=”salvar”> <input type=”text” name=”nome” /> <input type=”submit” value=”Salvar” /> </form> < s:form action=”salvar”> < s:input property=”nome” /> < s:submit value=”Salvar” /> </ s:form > O ser humano não nasceu para fazer isso … :-( E nenhum navegador nasceu para renderizar isso …
  • 24. Apache Wicket
  • 25. Apache Wicket <ul><li>Framework Web
  • 26. Nasceu em 2005
  • 27. Desde 2008 sob a gerência da Apache Software Foundation
  • 28. HTML puro </li><ul><li>Não utiliza Taglibs </li></ul><li>Java puro </li><ul><li>Desenvolvimento similar ao Swing (calma! Não tem GridBagLayout) </li></ul><li>Orientado a Componentes </li></ul>
  • 29. Java + HTML <ul><span wicket:id = ” msg ” > msg de sistema </span> + new Label( “ msg ” , “ We Develop ”); = <span> We Develop </span> </ul>
  • 30. HTML protótipo <ul>/MyHomePage.html <html> <head><title>Apache Wicket</title></head> <body> <span>msg dinamica</span> <form> Nome: <input type=”text” /> Email: <input type=”text” /> <input type=”submit” value=”Enviar” /> </form> </body> </html> </ul>
  • 31. Marcação não intrusiva <ul>/MyHomePage.html <html> <head><title>Apache Wicket</title></head> <body> <span wicket:id=” msg ” >msg dinamica</span> <form wicket:id=” form ” > Nome: <input type=”text” wicket:id=” nome ” /> Email: <input type=”text” wicket:id=” email ” /> <input type=”submit” value=”Enviar” /> </form> </body> </html> </ul>
  • 32. Toda a lógica da UI: em Java <ul>/MyHomePage.java public class MyHomePage extends WebPage { public HomePage() { add(new Label ( “msg” , “We Develop!” )); Form form = new Form(“ form ”) { public void onSubmit() { servico.salvar(getModelObject()); } }; form.add(new TextField(“ nome ”)); form.add(new TextField(“ email ”)); add(form); } } </ul>Puro Java e Orientação a Objetos. Sem mágica
  • 33. O mínimo de configuração <ul><filter> <filter-name>wicket.app</filter-name> <filter-class> org.apache.wicket.protocol.http.WicketFilter </filter-class> <init-param> <param-name>applicationClassName</param-name> <param-value>code.webapp.MyApplication</param-value> </init-param> </filter> /MyApplication.java package code.webapp; public class MyApplication extends WebApplication { public Class< MyHomePage > getHomePage() { return MyHomePage .class; } } </ul>
  • 34. Extensível Gmap2 gmap = new Gmap2(“map”); page.add(gmap); <div wicket:id=”map”> Google Maps </div>
  • 35. Ajax <ul><li>Suporte nativo
  • 36. Diversos componentes prontos </li><ul><li>Alguns com “ Fallback ” quando não há suporte Ajax ou total ausência de JavaScript </li></ul><li>Inclusão automática e dinâmica de CSS e JavaScript dependidos de componentes
  • 37. Um console para debug de requisições Ajax </li></ul>
  • 38. Ajax <ul>// HTML < span wicket:id=”counter”>contagem</span> < a href =”#” wicket:id=”counterLink”> incrementar </ a > // JAVA int counter = 0; Label counterLabel = new Label(“ counter ”); add(counterLabel); add(new AjaxLink(“counterLink”) { public vond onClick(AjaxRequestTarget target) { counter++ ; counterLabel .setModelObject( counter ); target.addComponent( counterLabel ); } }); </ul>
  • 39. Composição de Páginas: por herança <ul><li>Base.html </li><ul><li>Layout.html </li><ul><li>Login.html </li></ul></ul><li>Base.java </li><ul><li>Layout.java </li><ul><li>Login.java </li></ul></ul></ul>
  • 40. Composição de Páginas: por herança <ul><li>Base.html <html> <head> … </head> <body> <wicket:child /> </body> </html>
  • 41. Base.java class Base extends WebPage </li></ul>
  • 42. Composição de Páginas: por herança <ul><li>Layout.html <html> <head> … </head> <body> <wicket:extend> <div id=”header”> … </div> <div id=”content”> <wicket:child /> </div> <div id=”footer”> … </div> </wicket:extend> </body> </html>
  • 43. Layout.java class Layout extends Base </li></ul>
  • 44. Composição de Páginas: por herança <ul><li>Login.html <html> <head> … </head> <body> <div id=”header”> … </div> <div id=”content”> <wicket:extend> <form wicket:id=”loginForm”> … </form> </wicket:extend> </div> <div id=”footer”> … </div> </body> </html>
  • 45. Login.java class Login extends Layout </li></ul>
  • 46. Scala
  • 47. Scala <ul><li>Linguagem Orientada a Objetos </li><ul><li>E no fundo, é Java </li></ul><li>Linguagem funcional
  • 48. Estaticamente tipada
  • 49. É extensível </li><ul><li>Permite facilmente desenvolver DSLs </li></ul></ul><ul>var foo = 8 foo = “bar” </ul><ul>Type mismatch; found: String(“bar”) required: Int </ul>
  • 50. Scala: Funções <ul><li>São representadas como valores também, como objetos val func = () ⇒ { println(“functional programming”) } def chamaFuncao(paramFuncao: () ⇒ Unit) ={ paramFuncao() } chamaFuncao(func) </li></ul>
  • 51. Scala: Construções inteligentes <ul><li>A linguagem é rica em construções inteligentes val lista1a9 = 1 to 9 toList lista1a9 .foreach (i ⇒ print(i)) for (i ← lista1a9) { print(i) } val strings = new Array[String](3) strings(0) = “Hello” strings(1) = “World” strings(3) = “!” </li></ul>
  • 52. Scala: Construções inteligentes <ul>val listaA = List(1, 2) val listaB = List(3, 4) val listaC = listaA :: listaB // listaC é uma nova List val listaD = listaC :: 5 print(listaD) // saida: List(1,2,3,4,5) </ul>
  • 53. Scala: Construções inteligentes <ul>val map = new HashMap[Int, String] treasureMap += 1 -> &quot;Numero 1&quot; treasureMap += 2 -> &quot;Numero 2&quot; treasureMap += 3 -> &quot;Numero 3&quot; println(map(2)) // '2' é a key , não o indice // saida: “Numero 2” val romanos = Map(1 -> &quot;I&quot;, 2 -> &quot;II&quot;, 3 -> &quot;III&quot;, 4 -> &quot;IV&quot;, 5 -> &quot;V&quot;) println(romanNumeral(4)) // saida: “IV” </ul>
  • 54. Wicket+Scala: antes, em Java <ul>/MyHomePage.java public class MyHomePage extends WebPage { @Inject private Servico servico; public HomePage() { add(new Label ( “msg” , “We Develop!” )); Form form = new Form(“ form ”) { public void onSubmit() { servico.salvar(getModelObject()); } }; form.add(new TextField(“ nome ”)); form.add(new TextField(“ email ”)); add(form); } } </ul>
  • 55. Depois, em Scala <ul>/MyHomePage.scala class MyHomePage extends WebPage { @Inject var servico = _ add(new Label ( “msg” , “We Develop!” )) object form extends Form(“ form ”) { add(new TextField(“ nome ”)) add(new TextField(“ email ”)) override def onSubmit() = { servico.atualizar() } } add(form) } </ul>
  • 56. Scala: Uma DSL para Wicket <ul>/MyHomePage.scala class MyHomePage extends WebPage with DSLWicket { @Inject var servico = _ label( “msg” , “We Develop!” ) val onsubmit = () ⇒ servico.atualizar() val f = form(“ form ”, onsubmit) f.textField[String](“ nome ”) f.textField[String](“ email ”) } </ul>
  • 57. GlassFish JavaEE 6
  • 58. GlassFish <ul><li>Java EE 6
  • 59. CDI
  • 60. Maven Embedded Plugin
  • 61. Derby </li></ul>
  • 62. Java EE 6 + Wicket <ul><li>Usar @Inject ao invés de @EJB
  • 63. Validação de forms com Bean Validation
  • 64. JSR303 Validation </li><ul><li>http://www.java.net/blogs/jjviana </li></ul><li>Não precisa de web.xml </li></ul>
  • 65. Java EE 6 + Wicket + Scala <ul><li>Sem mais web.xml </li></ul>package code.webapp import javax.servlet.annotation.{ WebFilter, WebInitParam } import org.apache.wicket.protocol.http.WicketFilter @WebFilter(value = Array(&quot;/*&quot;), initParams = Array( new WebInitParam(name = &quot;applicationClassName&quot;, value = &quot;code.webapp.MyApplication&quot;), new WebInitParam(name = &quot;filterMappingUrlPattern&quot;, value = &quot;/*&quot;) )) class MyAppFilter extends WicketFilter
  • 66. Scala e Entity Beans JEE6 <ul><li>Usar a anotação @BeanProperty para gerar getters/setters </li></ul>package code.data import scala.reflect.BeanProperty import javax.persistence.{ Id, GeneratedValue } trait Identifiable extends Serializable { @Id @GeneratedValue @BeanProperty var id: String = _ }
  • 67. Outros links <ul><li>http://bit.ly/jee6wicketprezi (via @jjviana J1 US)
  • 68. http://wicket.apache.org
  • 69. http://github.com/42Lines/wicket-cdi
  • 70. http://www.gamboa-project.org </li></ul>
  • 71. Juntando os 3 Apache Wicket + Scala + JavaEE 6 _________________ Projeto Gamboa www.gamboa-project.org
  • 72. Obrigado Bruno Borges [email_address] www.cursodewicket.com

×