apps web em wicket e scala no glassfish java ee 6
TRANSCRIPT
Apps Web em Wicket e Scala no GlassFish JEE 6
Apache Wicket + Scala + Java EE 6
Quem sou eu?
twitter: @brunoborges
[email protected]
Agenda
Desenvolvimento Web
Apache Wicket
Scala
GlassFish Java EE 6
Projeto Gamboa
Desenvolvimento Web gil?
Para a galera dessas tecnologias, sim
Designers vs Developers
De quais projetos estamos falando?
Pixel PerfectAplicao do jeito que o cliente desenhou
Um Web DesignerOu uma equipe s de designers
Prototipao
Alteraes no prottipo refletem na aplicao
O que ajuda o designer?
Isso ajuda tambm... e MUITO
PREVIEW
NO
BROWSER
Fazemos isso?
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());
}
}
StrutsConsulta JDBC ???
Separao de Camadas
Interface do Usurio
Esta camada tambm pode ser quebrada em subcamadasUma para o web designer
Outra para o web developer
preciso uma melhor marcao HTML
Nome:
Isto o que o
Web Designer fazTambm o que o
usurio recebeno browser
E se...
Pudssemos ter uma
tecnologia que no altera
(em quase nada)
o que o Web Designer fez?
Nome:
Nome:
Tipos de Marcao XHTML
Declarativa (Wicket, Tapestry e poucos outros)
Bom para o
Web Designer e
navegador!
Tipos de Marcao XHTML
Imperativa (JSF, Struts, SpringMVC, Play!, Ruby on Rails, PHP, Python ...)
O ser humano no
nasceu para fazer
isso :-(E nenhum navegador
nasceu para
renderizar isso
Apache Wicket
Apache Wicket
Framework Web
Nasceu em 2005
Desde 2008 sob a gerncia da Apache Software Foundation
HTML puroNo utiliza Taglibs
Java puroDesenvolvimento similar ao Swing (calma! No tem GridBagLayout)
Orientado a Componentes
Java + HTML
msg de sistema
+
new Label(msg, We Develop);
=
We Develop
HTML prottipo
/MyHomePage.html
Apache Wicket
msg dinamica
Nome: Email:
Marcao no intrusiva
/MyHomePage.html
Apache Wicket
msg dinamica
Nome: Email:
Toda a lgica da UI: em Java
/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);
}
}
Puro Java e
Orientao a Objetos.
Sem mgica
O mnimo de configurao
wicket.app
org.apache.wicket.protocol.http.WicketFilter
applicationClassName
code.webapp.MyApplication
/MyApplication.java
package code.webapp;
public class MyApplication extends WebApplication {
public Class getHomePage() {
return MyHomePage.class;
}
}
Extensvel
Gmap2 gmap = new Gmap2(map);
page.add(gmap);
Google Maps
Ajax
Suporte nativo
Diversos componentes prontosAlguns com Fallback quando no h suporte Ajax ou total ausncia de JavaScript
Incluso automtica e dinmica de CSS e JavaScript dependidos de componentes
Um console para debug de requisies Ajax
Ajax
// HTML
contagem
incrementar
// 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);
}
});
Composio de Pginas: por herana
Base.htmlLayout.htmlLogin.html
Base.javaLayout.javaLogin.java
Composio de Pginas: por herana
Base.html
Base.java
class Base extends WebPage
Composio de Pginas: por herana
Layout.html
Layout.java
class Layout extends Base
Composio de Pginas: por herana
Login.html
Login.java
class Login extends Layout
Scala
Scala
Linguagem Orientada a ObjetosE no fundo, Java
Linguagem funcional
Estaticamente tipada
extensvelPermite facilmente desenvolver DSLs
var foo = 8foo = bar
Type mismatch;
found: String(bar)
required: Int
Scala: Funes
So representadas como valores tambm, como objetos
val func = () {
println(functional programming)
}
def chamaFuncao(paramFuncao: () Unit) ={
paramFuncao()
}
chamaFuncao(func)
Scala: Construes inteligentes
A linguagem rica em construes 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) = !
Scala: Construes inteligentes
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)
Scala: Construes inteligentes
val map = new HashMap[Int, String]
treasureMap += 1 "Numero 1"
treasureMap += 2 "Numero 2"
treasureMap += 3 "Numero 3"
println(map(2))
// '2' a key, no o indice
// saida: Numero 2
val romanos = Map(1 "I", 2 "II", 3 "III", 4 "IV", 5 "V")
println(romanNumeral(4))
// saida: IV
Wicket+Scala: antes, em Java
/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);
}
}
Depois, em Scala
/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)
}
Scala: Uma DSL para Wicket
/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)
}
GlassFish JavaEE 6
GlassFish
Java EE 6
CDI
Maven Embedded Plugin
Derby
Java EE 6 + Wicket
Usar @Inject ao invs de @EJB
Validao de forms com Bean Validation
JSR303 Validationhttp://www.java.net/blogs/jjviana
No precisa de web.xml
Java EE 6 + Wicket + Scala
Sem mais web.xml
package code.webapp
import javax.servlet.annotation.{ WebFilter, WebInitParam }import org.apache.wicket.protocol.http.WicketFilter
@WebFilter(value = Array("/*"),
initParams = Array( new WebInitParam(name =
"applicationClassName",
value = "code.webapp.MyApplication"), new WebInitParam(name =
"filterMappingUrlPattern", value = "/*")))class MyAppFilter extends
WicketFilter
Scala e Entity Beans JEE6
Usar a anotao @BeanProperty para gerar getters/setters
package code.data
import scala.reflect.BeanPropertyimport javax.persistence.{ Id, GeneratedValue }
trait Identifiable extends Serializable {
@Id @GeneratedValue @BeanProperty var id: String = _
}
Outros links
http://bit.ly/jee6wicketprezi (via @jjviana J1 US)
http://wicket.apache.org
http://github.com/42Lines/wicket-cdi
http://www.gamboa-project.org
Juntando os 3
Apache Wicket
+ Scala
+ JavaEE 6
_________________
Projeto Gamboa
www.gamboa-project.org
Obrigado
Bruno [email protected]
www.cursodewicket.com
Click to edit the outline text formatSecond Outline LevelThird Outline LevelFourth Outline LevelFifth Outline LevelSixth Outline Level