Javafree

Lazlo

Publicado por Tutoriais Admin em 16/08/2009 - 21.926 visualizações

Por Diêgo Duarte

1. Conceitos

Laszlo: nome da tecnologia e uma marca registrada.

LaszloSystems: empresa que criou e desenvolveu o OpenLaszlo.

OpenLaszlo: plataforma para criação de aplicações ricas para web. É uma implementação da tecnologia Laszlo, e é o produto utilizado no desenvolvimento de aplicações.

 

2. Objetivo

Facilitar a criação interfaces web ricas. Isso é possível utilizando componentes? pré-fabricados? da tecnologia Laszlo que têm características cinemáticas e dinâmicas, tais como deslizar sobre a tela, controle de transparência, alteração de dimensões com clique do mouse dentre outros.

A construção dos aplicativos é feita com a linguagem LZX, mesclando XML e Javascript.

Informam-se os componentes da interface gráfica em linguagem declarativa (LZX), o resultado da compilação é um binário flash (. swf).

O uso de uma linguagem declarativa de alto nível como LZX na construção da camada de apresentação aumenta a produtividade e simplifica a construção. Exemplo, uma tabela com diversas colunas linhas e iterações resume-se em uma linha de declaração. A manutenção também é beneficiada, já que os componentes? pré-fabricados? foram exaustivamente testados e estão livres de bugs.


3. Arquitetura Laszlo

Uma aplicação Laszlo pode ser distribuída de duas formas distintas, executando na máquina do cliente ou em um servidor LPS.

Sem Servidor (Serverless): O programa LZX é compilado, gerando um binário (. swf) que é disponiblizado para download. Após o download o usuário usa o aplicativo localmente semelhante a um programa desktop. Nesta versão diversas funcionalidades do Laszlo não estão disponíveis e a usabilidade é prejudicada, porém o desempenho normalmente é superior.

Cliente-Servidor (Proxied): O cliente faz uma requisição de um LZX através do navegador, o servidor OpenLaszlo compila o LZX quando necessário e devolve um binario flash (. swf) para ser visualizado no navegador do usuário. Esse tipo de arquitetura é mais usual e tem funcionalidades adicionais.


4. Arquitetura cliente-servidor do Laszlo

Aplicações cliente-servidor Laszlo são gerenciadas pelo LPS (Laszlo Presentation Server). O LPS é uma aplicação escrita em java que executa em um Contêiner Web J2EE. Aplicações LZX são compiladas no momento da requisição pelo LPS e distribuídas como binários para serem executadas por um plugin flash que executa no navegador do cliente, isto constitui a interface com o usuário. O ambiente de execução necessário para visualizar os componentes é um naveador com o plugin flash 5 ou superior instalado. Não há nada na arquitetura Laszlo é presa ao flash, no futuro o Laslo pode suportar outros ambientes de execução.

No contexto Laszlo, Cliente sigifica uma aplicação LZX em execução no navegador do cliente e Servidor significa o LPS (Laszlo Presentation Server). Cliente e Servidor se comunicam sob o protocolo HTTP ou HTTPS, o Servidor envia bytecode e o Cliente envia XML. Assim as aplicações mantêm compatibilidade com firewalls coorporativos.

Figura: Arquitetura cliente-serivdor Laszlo:

 

 

4.1 LPS (Laszlo Presentation Server)

Como visto o LPS é uma aplicação J2EE e roda em um Contêiner J2EE. Veja detalhes de funcionalidades do LPS que é dividido em cinco sub-sistemas: Interface Compiler, Media transcoder, Data Manager, Persistent Connection Manager, Cache.

Interface Compiler: Consiste em um compilador de tags LZX e um compilador de scripts. O Interface Compiler invoca o Media Compiler e o Media Manager para compilar mídias e fontes de dados que estão ligados a aplicação.

O compilador de tags LZX e o compilador de scripts converte a aplicação Laszlo para binário flash (*. swf) que será enviado para o ambiente de execução do cliente.

Dependendo de como a aplicação é invocada, a aplicação é transmitida como. swf ou como um html com o. swf embarcado.

O Media Transcoder converte uma série de componentes de mídia em um formato único para o engine Laszlo do lado do cliente realizar a renderização. Assim o Laszlo consegue exibir vários tipos de mídia com um só gerenciador. Os tipos de mídia suportados são: JPEG, GIF, PNG, MP3, TrueType, and SWF (arte / animação).

 

Data Manager: É compreendido de um compilador de dados, que converte todos os dados dentro de um formato binário compactado legíveis para aplicações Laszlo e para uma série de conectores de dados que permitem que aplicações Laszlo recuperem dados via XML / HTTP.

 

Persistence Connection Manager: Provê serviços de autenticação e de mensagem em tempo real para aplicações Laszlo que necessitem. Na versão atual é uma parte experimental do OpenLaslo e é desaconselhada para uso em produção.

 

Cache: Contém as mais recentes versões compiladas dos aplicativos. A primeira requisição de um usuário gera a compilação do LZX e o. swf resultante é enviado para o usuário, nas próximas requisições pode ser enviado a cópia do. swf armazenada na cache, sem ter de esperar a compilação.

 

Visão da plataforma:

figura: LPS

 

Fluxo de aplicação Laszlo cliente servidor:

figura: Fluxo de dados de uma aplicação Laszlo LPS-Cliente-Servidor

5. Linguagem LXZ

É uma linguagem orientada a objetos que usa XML e Javascript para criar interfaces de aplicações web ricas. Tipicamente essas aplicações são compiladas pelo OpenLaszlo.

A linguagem LZX foi desenvolvida de maneira a utilizar sintaxes e convenções de nomes familiares a desenvolvedores web com intuito de facilitar o aprendizado, porém introduz novos conceitos e capacidades que possibilitam interfaces com usuário mais agradáveis e interativas.

 

5.1. Sintática e Semântica:

 

Em LZX, tags XML são usadas para criar objetos Javascript, e Javascript usado dentro de programas LZX têm função de manipular objetos criados pelas tags. Na maioria dos casos tudo que pode ser feito pelas tags XML pode ser feito usando Javascript e vice-versa. Mas essa equivalência não é total, existem funcionalidades que só podem ser desenvolvidas com Javascript e outras que só são possíveis com tags XML. Quando é possível a utilização de ambas para uma mesma funcionalidade, sempre há uma mais adequada para situação.

 

Funcionalidades básicas: A linguagem LZX

Principais tags:

Tag

Função

 

Todo programa feito em linguagem LZX começa com a tag e termina com seu fechamento & lt; / canvas & gt;

 

Imprime texto na tela

 

Cria um componente window que pode englobar diversos outros componentes. O componente window tem funcionalidade de flutuar sobre a tela, mudar de tamanho, alterar sua transparência, dentre outros.

 

A partir de uma fonte de dados, cria um componente dataset no programa. Outros componentes irão utilizar-lo para exibição dos dados.

 

Cria um componente grid, o qual é usado para exibir dados de um dataset em forma de tabela. O grid possui eventos implementados para ateração dos dados exibidos, ordenação de colunas, dentre outros.

 

Representa cada coluna do componente

 

Observação: As tags xml e seus atributos são case sensitive e sempre devem ser escritas com letras minúsculas, na versão atual do OpenLaszlo o código Javascript não é case sensitive.

<! ? - Listagem codigo fonte demo1 - - >
<canvas width = "1024" height = "768">

<dataset name = "contact" request = "true" type = "http" src="index.jsp" />
<window resizable = "true" width = "500">
<grid datapath = "contact:/*" width = "500" >
<gridtext width = "200" datapath = "@nome">Nome</gridtext>
<gridtext width = "100" datapath = "@telefone">Telefone</gridtext>
<gridtext width = "100" datapath = "@email">Email</gridtext>
</grid>
</window>
</canvas>

 

5.2. Um pouco mais sobre LZX

 

Os programas são construídos usando XML, a linguagem é orientada a objetos e tem características de herança, encapsulamento e polimorfismo.

Encapsulamento: Cada tag xml é uma classe, cada tag escrita é instância de um objeto sendo o atributo nome a variável de referência para o objeto. Os atributos das tags são variáveis de instância encapsuladas no objeto. Tags (objeto) também podem estar encapsuladas no escopo de outra tag.


<!?- Listagem codigo fonte encapsulamento -->
<view name = "quadro" bgcolor = "#EEEEEE"/>
<text name = "texto1">Olá mundo</text>
<method> quadro.setBGColor ("blue");</method>
</view>


Declaração Classes e uso de Herança: Com a tag é possível declarar novas classes sendo representadas por tags, e com atributo extends, pode-se herdar outra classe de maneira similar ao java.

<!?- Listagem codigo fonte herança -->
<canvas>
<class name = "classemae">
<attribute name = "nome" value = "Oi mundo" type = "string"></attribute>
</class>
<class name = "classefilha" extends = "classemae"/>
<classefilha name = "c" >
<text name = "saida">Algum texto</text>
</classefilha>
<button y = "40" text = "clique" onclick = "canvas.c.saida.setText(canvas.c.nome);"/>
</canvas>

5.3. Lazlo RPC

LaszloRPC ou apenas rpc é o nome usado para definir a implementação e API?s que invocam chamadas remotas de pocesso (RPC) ou serviços pela rede. Atualmente o Laszlo possui 3 implementações, JavaRPC, SOAP e XML-RPC.

JavaRPC permite objetos java do lado do servidor serem acessados, sendo que as classes Java podem estar no mesmo Servlet Contêiner do LPS e ficarem no contexto de sessão (SessionContext) ou em outro Servlet Contêiner na internet e estarem no contexto de aplicação (ServletContext). XML-RCP é uma simples especificação que permite chamadas remotas de processo em diversos sistemas e é transportado via HTTP. SOAP é uma especificação W3C e também usa XML para mandar mensagens pela rede, normalmente é transportado via HTTP, mas não obrigatoriamente, é uma especificação mais complexa que XML-RPC e permite vários modos de operação.

 

Passo a passo para colar lazlo e java usando java RPC

  1. Construir um LZX com seguintes passos:

    1. definir um mapeamento javarpc, tag

    2. definir chamadas remotas e eventos para o mapeamento, tag

    3. definir botão para chamar a remotecall, tag

    4. definir acesso e segurança das classes, tags

    5. definir elementos de exibição de resultados.

  2. Construir a classe java correspondente dentro de WEB-INF / classes

 

JavaRPC

É a funcionalidade que permite o cliente acessar objetos e métodos Java no servidor. A tag é usada para declarar um objeto JavaRPC em LZX, e possui nove atributos que controlam a criação desses objetos.

Atributos:

classname (String): nome da classe java no servidor. (Obrigatório)

atributename ou name (String): nome pelo que sera atribuido o objeto no código LZX (em caso de omissão o atributename é igual a classname)

scope (String): Contexto que o objeto java vai ser armazenado no servidor, os valores possíveis são ?session? (contexto de sessão), ?webapp? (contexto de aplicação) ou ?none? (não é armazenado em nenhum contexto). Ao chamar métodos nos objetos com contextos session ou webapp sempre será utilizada a mesma instância. Objetos com contexto none não possuem instância, logo seus métodos devem ser static para sejam acessados a partir do programa cliente em LZX. (Obrigatório)

loadoption (String): Política de criação de objetos no servidor. Pode assumir os valores ?loadcreate?, ?loadonly? ou ?create?. ?loadcreate? utiliza uma instância existente se houver, caso não exista cria uma nova instância. ?loadonly? tenta utilizar uma instância existente, caso não exista retorna erro. ?create? sempre irá criar uma nova instância.

createargs (Array): Argumentos passados para o método construtor da classe. É um Array podendo conter vários elementos de diversos tipo. Na classe java deverá existir um construtor com parâmetros compatíveis com os elementos do Array.

objetreturntype (String): Assume o valor ?pojo? ou ?javabean?. Quando um método da classe java chamado via rpc retorna um valor, caso objectreturntype = ?pojo? serão retornados somente os valores de membros públicos, caso objectreturntype = ?javabean? serão retornados valores de membros que possuam métodos getters correspondentes.

autoload (Boolean): Caso ?true? chama o método load () para instanciar um objeto no estágio incial (declaração da tag). O valor default é ?true?.

secure (Boolean): Se ?true?cria conexão segura HTTPS entre o cliente e o LPS.

secureport (Number): caso secure = ?true? seta a porta da conexão segura no servidor. Não existe valor default para o atributo secureport. A maioria dos servidores usam a porta 443 como default para HTTPS.

 

Read-only properties:

proxy: é o objeto que contém os stubs dos métodos, é criado quando o método load é chamado. Se scope = session ou scope = webapp ele contém todos os métodos públicos correspontentes a classe no servidor. Se scope = none, ou seja, nunca será criado um objeto (utilizado para classes que só possuem métodos static).

 

Eventos do laszlo:

onload: este evento é disparado quando o objeto proxy é retornado para o cliente

onunload: este evento é disparado quando um objeto é destruído no cliente.

ondata: este evento é ligado a uma chamada remota, acontece quando uma chamada remota retorna dados com sucesso. O evento ondata retorna dois argumentos para seu ouvinte (handler) o primeiro é o valor real do retorno, o segundo é a informação da operação que retornou o valor.

onerror: se houve um problema carregando ou descarregando o stub, é disparado esse evento.

 

Methods:

A tag extende a tag, e dela herda dois métodos importantes, load e unload.

load (): quando esse método é chamado o cria-se um objeto da classe correpondente no servidor e o proxy com os stubs no cliente. Após isso é enviado um evento onload ao cliente.

unload (): a chamada a esse método seta nulo no proxy do objeto rpc. A referência do objeto java associado no servidor é removiada. No final é enviado um evento onunload para o cliente.

 

Segurança:

Para segurança, é necessário especificar no código LZX quais classes podem ser acessadas e instanciadas. Isto é feito da seguinte maneira:

<!?- Listagem codigo fonte segurança em javarpc -->
<security>
<allow>
<pattern>^Nome_do_pacote\.Nome_da_classe</pattern>
</allow>
</security>

 

A tag aceita uma expressão regular, isto significa que ^ org \. borland< / pattern> aceita classes cujos nomes totalmente especificados começam com ? org.borland?

Falando menos e mostrando mais...

Exemplo de uso de javarpc:

<!?- Listagem codigo fonte LZX para acessar serviço em Java-->

<canvas>
<security>
<allow>
<pattern>^borcon\.CadastroBean</pattern>
</allow>
</security>

<javarpc name = "cadastro" classname = "borcon.CadastroBean" autoload = "true" scope = "session">
<method event = "ondata" args = "res">
canvas.texto1.setText (res);
</method>
<remotecall funcname = "setIdade" >
<param value = "30" / >
</remotecall>
<remotecall funcname = "getIdade" >
</remotecall>
</javarpc>

<text name = "texto1">Qual a idade? </text>
<button x = "10" y = "40" text = "gravar numero no objeto java" onclick = "canvas.cadastro.setIdade.invoke (); " / >
<button x = "10" y = "80" text = "recuperar numero no objeto java" onclick = "canvas.cadastro.getIdade.invoke (); " / >

</canvas>

Classe Java que é acessada pelo LZX via JavaRPC:

package borcon;

public class CadastroBean {
public Integer idade = null;
  public void setIdade (int idade) {
this.idade = idade;
System.out.printf ("A idade é % s", this.idade.toString ());
}

public String getIdade () {
return this.idade.toString ();
}
}

 

6. Casos de Sucesso:

EarthLink

 

Provedor de conteúdos, notícias, vídeos, notificações de e-mail, previsão do tempo. Construído para usuários de banda larga obter informações de maneira interativa, cinemática e altamente customizada.

BEHR Paint

Sistema delivery de escolha cores de tintas para residências.

Allegra

Sistema em tempo real on-line de mensuração de substâncias alérgicas do ambiente. Verificação de níveis pólen, umidade, temperatura, ácaros e outras substâncias.

Ziff Davis Media

Portal de jogos on-line líder em acessos.

La Quinta Inns

Sistema de mapas interativo, para localização de hotéis nos EUA.

Barclays (BGI)

Portal de análise de investimentos, tendências financeiras, fatores de risco, prospectos.

SBC Yahoo

Ferramenta de personalização de serviços de conteúdo, incluindo previsão do tempo, notícias, esportes, música, filmes, tv e site pessoal.

 

7. Perguntas Freqüentes


O que o afinal há de novo e tão interessante?

É fácil de usar, a construção de aplicativos usando exclusivamente Laszlo com componentes visuais avançados é simples. Com pouco esforço cria-se uma aplicação agradável para o usuário.

É realmente livre? Qual a licença que o Lazlo utiliza? O que eu posso ou não fazer?

Estou preso a um fornecedor? Um projeto desenvolvido com laszlo depende disso para viver?

Sim, está preso a um fornecedor. Apesar de ser um projeto OpenSource sob uma liscensa bem flexível, atualmente só uma empresa desenvolve o produto.

Customizar o Lazlo, compensa? é difícil? Como se faz isso?

Sim, é viável, e a principio não é difícil. É possível alterar os componentes do laszlo para que eles fiquem com a cara da sua empresa ou com a cara do seu cliente.

Tem documentação e bibliografia?

A documentação do site é excelente. A bibliografia é fraca.

Qual a penetração no mercado? Alguém usa isso? Quem ?

Razoável, há pequenas, médias e grandes empresas investindo no OpenLaszlo, tanto no mercado nacional quanto internacional. Vide Casos de Sucesso.

 

Treinamento?

Caro, a própria LaszloSystems oferece cursos via web. Um treinamento on-line do tipo aprenda o básico do básico do laszlo de 2 horas nesta data está cotado a meras 199, 00 doletas.

8. Apêndice A:

Procedimentos de instalação e execução do primeiro LZX no OpenLaszlo:

Há duas possibilidades de instalação, realizando download do OpenLaszlo Development Kit que contém o Tomcat 5.0.24 com o OpenLaszlo 3.0.2 instalada, ou pode-se instalar o OpenLaszlo Servlet Only no seu próprio Contêiner Web realizando download de um arquivo war. A seguir estão os passos para ambas as opções. A primeira opção é ideal para iniciantes na tecnologia, a segunda é ideal para montar uma arquitetura de desenvolvimento ou de produção.

 

I - OpenLaszlo Development Kit

  1. Acesse o site http://www.laszlosystems.com/developers/download/ escolha a opção OpenLaszlo Development Kit (recommended) e realize o download.
  2. Clique duplo no executável de instalação, escolha o diretório de sua preferência e dê seqüência a instalação.

  3. Clique duplo no ícone OpenLaszlo Server que foi criado após a instalação. Após esse passo o Laszlo Presentation Server já estará rodando.

  4. Crie um arquivo chamado texto chamado hello.lzx em [Diretório de Instalação do OpenLaszlo] \ Server \ lps-3.0.2 \ my-apps, insira o seguinte conteúdo e salve.

<canvas>

<text>Hello Word</text>

</canvas>

  1. Abra o navegador e digite o endereço: http://localhost:8080/lps-3.0.2/my-apps/hello.lzx

 

II-OpenLaszlo Servlet Only

  1. Acesse o site http://www.laszlosystems.com/developers/download/ escolha a opção OpenLaszlo Servlet Only e realize o download.
  2. Crie um subdiretório chamado laszlo no diretório de deploy do seu Contêiner Web, [Catalina Home] \ web-apps no caso do Tomcat. Descompacte o arquivo openlaszlo-3.0.2-servlet.war cujo foi realizado o download dentro do diretório criado.

  3. Inicie seu Contêiner Web.

  4. Crie um arquivo chamado texto chamado hello.lzx em [Diretório de deploy do seu Contêiner Web] \ laszlo \ my-apps, insira o seguinte conteúdo e salve.

  5. Abra o navegador e digite o endereço: http://localhost:8080/laszlo/my-apps/hello.lzx

É isso aí, galera!

comentários: 0

Tópicos Relacionados