Personagens Java vs Personagens Delphi

15/12/2013 at 00:16

Introdução

Programadores Delphi estão acostumados a escrever regras de negócio direto no .pas do form, botões de incluir, alterar, excluir e salvar são casos recorrentes de eventos com regra de negócio. Isso faz sentido para o Delphi, pois não se considerava programação distribuída nem balanceamento de carga, disponibilidade ou escalabilidade horizontal, apenas vertical. Não era esse o objetivo dos softwares a serem desenvolvidos. O Delphi atraiu (propositalmente) no fim da década de 1980, início da década de 1990, programadores Clipper que atuavam em pequenos CPDs de indústrias, comércio e escritórios construindo aplicações monolíticas, maravilhados pela programação visual com drag/drop e SQL. Alguns programadores apostaram alto ao usarem Delphi em aplicações corporativas acreditando nas promessas da Borland/CodeGear/Embarcadero, e no contagiante RAD – Rapid Application Development, acarretando em alto débito técnico.

Bem, se você está aqui, provavelmente se deu mal como eu. Mas nem tudo está perdido, abaixo vou traçar um paralelo didático dos personagens dessas duas plataformas.

Personagens em Paralelo

Considerando apenas J2EE, ou seja, aplicações corporativas predominantemente web, e como exemplo os arquivos Uni1.dfm e Uni1.pas de um novo form Delphi:

  • O Unit1.dfm do Delphi está para a página html
    a diferença é que em Delphi escrevenos o DFM sempre com drag/drop.
  • O Unit1.pas está para o ManagedBean.
  • Os EJBs são como as classes que você implementa no DataSnap
  • A JPA está para o DataModule
    a diferença é que não se escreve SQL mas sim JPQL – Java Persistence Query Language.
  • Uma classe Java anotada com Entity é como se fosse o FieldList do DataSet do Delphi
  • Hibernate, EclipseLink, TopLink, etc., estão para o DBExpress, ADO, BDE, etc., ou seja, é o componente de acesso a banco de dados (relacional ou não)
  • TForm do Delphi não tem nada a ver com a tag form do html, prefiro dizer isso pela pouca semelhança que têm e pela grande confusão que causam quando comparados

Ciclo completo básico

O ciclo completo que a aplicação Java EE com JSF percorre no clique de um botão, p.e., é basicamente:

  • O usuário clica no botão rendezidado em html
  • O ManagedBean responde com um método público que invoca algum método do EJB
  • O EJB processa conforme as regras de negócio e realiza acesso a dados se necessário invocando a camada de acesso a dados que pode ser o Hibernate por exemplo

Importante

O mais importante é vencer o hábito e não implementar regra de negócio no ManagedBean, lugar de regra de negócio é no EJB. Pense sempre que a camada visual pode ser substituída por um WebService, ao fazer isso o ManagedBean não será utilizado, apenas os WebMethods SOAP ou Paths dos EndPoint RESTFul.

Ou seja, @ManagedBean (JSF), @WebService (SOAP) e @Path (REST), nunca devem conter regra de negócio, eles são apenas as classes de interface da sua aplicação, digo interface no sentido de fachada. Essas três classes apontam/usam os mesmos EJB que agregam as regras de negócio num único lugar.

Existirão casos em que essas três classes apenas repassam chamadas para os EJBs, tornando-as aparentemente inúteis, mas isso não é verdade, essa repetição de código é um preço barato a se pagar pela flexibilidade. Lembre-se você está construindo uma aplicação corporativa, pense sempre que ela vai crescer muito e se tornar complexa.

Outro conceito importante, para quem tem afinidade com UML, consideramos a realização do caso de uso como sendo o diagrama de sequência, pois bem, aquela primeira classe do diagrama que recebe os estímulos do ator é o ManagedBean ou o WebService. Portanto em casos de telas complexas o ManagedBean não é uma das classes mais bonitas ela pode ser caótica, o importante é construir e manter os EJBs com bom design de classes, eles são a API, o kernel da aplicação, código puro, nenhum acoplamento com camada visual, de forma que se possa realizar testes unitários inclusive.

Hello World (JSF+Primefaces+EJB+JBoss)

14/08/2013 at 23:26

Embora existam inúmeros tutoriais de hello world de java na web com Eclipse, Netbeans, IntelliJ IDEA, etc, mais um amigo me perguntou sobre como iniciar mesmo tendo lido outros tutoriais, e olha que este sujeito não é ruim de pesquisa não hein. O que acontece é que cada pessoa tem lacunas em diferentes pontos num assunto e são necessários várias visões para que elas sejam preenchidas, minha abordagem pode ser a visão que faltava para essa pessoa.

Bem, não vejo mal algum em criar minha abordagem do software mais produzido no mundo o Hello World! Afinal de contas pode ser esta sequência de passos que resolva os seus problemas, se não for, serão as deste amigo, e eu ficarei feliz em poder ajudar.

A IDE que adotei foi o Eclipse, por mais que o Netbeans esteja na “crista da onda”.

O Eclipse parece um daqueles sujeitos truculentos da festa que é mau encarado, mas depois de algumas cervejas e honestidade ele abre um sorrisão e num passa de um coração mole que você pode contar pro que der e vier.

A primeira coisa que você precisa saber dele é que ele precisa de uma JVM para rodar, então baixe o Java se você já não tiver (pouco provável), ele também é modular e é possível montar a IDE com os pacotes estritamente necessários às suas necessidades e habilidades. Com isso o recomendado é baixar o Eclipse Standard e depois a partir do menu Help, opção Eclipse Marketplace baixar e instalar os pacotes necessários. A plataforma que o projeto Eclipse oferece é fantástica e existem outras IDEs baseadas no projeto Eclipse, tais como o gratuito Modelio para modelagem UML, BPMN, etc. além disso a partir da versão Juno é possível customizá-lo visualmente com CSS, então fica pra outro post demonstrar como deixá-lo todo preto mas de forma elegante.

A segunda coisa que você precisa saber é que existem diferentes versões evolutivas dele, as três últimas são Indigo, Juno e Kepler. Qual você deve usar? Sugiro que comece pela mais nova, Kepler, e vá descendo se houverem erros, instabilidades ou incompatibilidade, por exemplo, se você precisar do SDK da Amazon ou Android eles especificam qual versão do Eclipse é suportada as vezes a Kepler ainda não seja.

Existem compilações prontas para tipos específicos de desenvolvimento. Para desenvolvimento web você deve procurar pelo download que possua os termos Java EE  e/ou WTP – Web Tools Platform e/ou Web Applications, e/ou JSF em eclipse.org/downloads.

As distribuições do Eclipse são feitas no formato zip, tem programador que abomina, eu aprecio, pois concede total controle sobre a instalação, principalmente por ter backup fácil e é excelente para trabalhar em equipe, já que depois da configuração inicial necessária ao projeto os outros membros apenas copiam, facilitando inclusive em casos de formatação ou novo equipamento.

Depois dos tropeços que levei, recomendo criar a estrutura de pastas conforme a imagem abaixo. Para entrar no Eclipse utilize o arquivo eclipse.exe e crie um atalho no seu local preferido.

Java-Folder

O Próximo download deve ser da JDK, infelizmente não é possível deixar um link fixo aqui mas vou fazer o possível para indicar como chegar no download correto. Ao acessar a página inicial da Oracle entre no menu Downloads, selecione a opção Java for Developers, você estará então dentro de Java SE downloads, procure por Java Platform (JDK) 7u25 por exemplo, aceite o acordo da licença e clique no link conforme sua plataforma, jdk-7u25-windows-x64.exe por exemplo. Ao instalar a JDK recomendo alterar a pasta conforme a imagem abaixo.

JDK

O terceiro download é do JBoss Application Server 7, mas é mais fácil realizar a partir do Eclipse.

Ao abrir o Eclipse será solicitado a localização do Workbench, mantenha o padrão por enquanto, depois pesquise sobre workbench dentro do site eclipse.org uma hora qualquer, lá você encontrará detalhes.

A tela Welcome é apresentada, explore-a, será produtivo, mas agora clique no batão Workbech.

Workbench

As divisões apresentadas (Project Explorer, Outline, Markers, etc) fazem parte das Perspectivas, a atual deve ser Java EE.

Perspective

O JBoss roda em cima da JDK, ele não consegue funcionar apenas com a JRE comum disponível em qualquer computador. Portanto acesse o menu Window, opção Preferences, item Java, subitem Installed JREs. clique em Search, aponte a pasta c:\Java, aguarde o scanner e marque a JDK como padrão.

Installed JRE

Para instalar o JBoss AS7 acesse o menu Window, opção Preferences, item Server subitem Runtime Environments, clique em Add, clique no link Download additional server adapters, aguarde e quando for possível selecione JBossAS Tools, clique em Next, aceite o contrato e clique em Finish, após o aviso de possível reinício da IDE observe no canto inferior direito que o download foi iniciado em segundo plano, você pode fechar a tela de preferências por enquanto. Alguns segundos depois ele emitirá um alerta sobre o conteúdo do download, ignore isso, mais alguns segundos e ele solicitará ser reiniciado, aceite.

Ao retornar ao Eclipse a barra de botões ficou abarrotada de ícones, se quiser corrigir isso acesse o menu Window opção Customize Perspectives e desmarque a opção JBoss Tools WTP Server Actions. Agora temos que voltar em Runtime Environments, clicar em Add novamente e escolher JBoss 7.1 Runtime dentro da pasta JBoss Community, clique em Next, clique no link Download and install runtime, selecione JBoss AS 7.1.1 (Brontes), clique em Next, aceite o contrato, sugiro configurar a próxima tela conforme imagem abaixo.

Download JBoss AS

Após o download configure a tela conforme a imagem abaixo e tenha especial atenção ao campo JRE, não deixe de selecionar a JDK.

Runtime Environment

Há dois tipos de projeto web java, o mais simples é o Dynamic Web Project, o outro é Enterprise Application Project. Vou utilizar este último, que é recomendado para aplicações corporativas.

Para isso acesse o menu File, submenu New, opção Other. Na caixa de diálogo apresentada selecione a pasta Java EE, dentro dela selecione Enterprise Application Project e clique em Next, configure conforme imagem abaixo e clique em Next.

NewProject

A próxima tela é a de configuração dos projetos que compõem o Hello World. Clique em New Module e desmarque a primeira (Application Client Module) e a última opção (Connector Module). Clique em Finish nas duas telas. O Project Explorer deve ser igual a imagem abaixo.

HelloWorldProjectExplorer

Clique com o botão direito sobre o projeto HelloWorldEJB, selecione a opção New, submenu Session Bean (EJB 3.x), configure conforme a imagem abaixo.

EJB

Clique em Next e preencha o campo Mapped name com helloWorldBean, atenção ao case-sensitive. Recentemente o Java aceita EJB sem interface, mas não vejo motivo algum para ignorar o Design Pattern mais importante de todos, o Strategy (sempre programe para uma interface, mesmo que ela seja uma super-classe).

A classe gerada deve se parecer com o código abaixo, observe que removi os comentários e o construtor desnecessários para a demonstração.

 

A Interface @Local deve se parecer com o código abaixo.

Vamos criar a classe managedbean que é quem controla a interação do usuário, é essa classe que fica entre o xhtml e o EJB. Para isso clique com o botão direito do mouse sobre o projeto HelloWorldWeb, selecione New, opção Class. Configure conforme a imagem abaixo.

ManagedBean

A classe gerada já começa com um aviso da IDE ao grifar de amarelo seu nome, pare o mouse sobre ela e selecione “Add generated serial version ID” na caixa de opções que surgirá. Em seguida escreva o código abaixo.

Clique com o botão direito do mouse em qualquer lugar do editor, selecione “Source”, “Generate Getters and Setters”, selecione apenas o checkbox de greeting e clique em ok.

Clique com o botão direito do mouse sobre o projeto web, selecione “Build Path”, “Configure Build Path”, selecione a aba “Projects”, clique em “Add”, selecione o projeto EJB e clique em ok.

Escreva as anotações @ManagedBean, @ViewScoped e @EJB. A classe deve ficar conforme o código abaixo. Para resolver as dependências tecle a combinação ctrl+shift+o, se for necessário.

Agora vamos instalar o complemento JBoss Tools. Para isso acesse o menu Help, opção Eclipse Marketplace, no campo Find digite JBoss e tecle enter, clique no botão Install do item JBoss Tools (Kepler), confirme a tela seguinte e a seguinte para iniciar o download, após alguns minutos ele emitirá um alerta sobre o conteúdo do download, clique em ok, em seguida ele solicitará o reinício da IDE. A partir de agora seu Eclipse apresentará a página JBoss Central.

De volta ao projeto clique com o botão direito do mouse sobre o projeto HelloWorldWeb, selecione New e selecione XHTML Page. Preencha o campo File name com index.xhtml, clique em Next, selecione Use XHTML Template, selecione Blank JSF Page e clique em Finish.

Se sua plataforma for x64 o editor com preview do JBoss Tools não funcionará, mas não estamos interessados nisso, contorne este inconveniente temporário acessando a aba Source na parte inferior do editor. A propósito, recomendo clicar com o botão direito do mouse sobre o index.xhtml, selecionar Open With, opção HTML Editor, ele faz tudo que o editor do JBoss faz mas é bem mais leve. Mesmo que o editor visual funcionasse em x64 eu não usaria, pois não acredito em WYSIWYG para HTML, prefiro manter o código totalmente controlado.

Para termos apoio da IDE ao JSF no nosso software precisamos clicar com o botão direito do mouse sobre o projeto web, selecionar o menu “properties”, selecionar “Project Facets” e marcar a opção “Java Server Faces”. O painel inferior de configuração será exibido com o texto “Further configuration available”, clique nele. A configuração a seguir é uma questão de gosto. Prefiro remover /faces/* e acrescentar *.xhtml. O campo “JSF Implementation Library” fica configurado como “Library Provided by Target Runtime”, pois estamos utilizando JBoss e ele já possui as bibliotecas necessárias ao JSF.

JSFCapabilities

Escreva o código abaixo dentro da tag body, que será exibido na página principal.

Acredito que se estudarmos tudo o que é necessário sobre a linha acima, perderemos o foco deste tutorial. Então fica pra próxima.

Para utilizar o Primefaces é preciso baixar a biblioteca no site www.primefaces.org, clique no botão Download, role a página até a sessão Community Downloads e clique no link primefaces-3.4.2.jar, a versão 3.5 já está disponível, mas eu não recomendo ainda. Salve numa pasta confiável do seu computador, eu costumo salvar em C:\Java\download-lib\primefaces.

Além de ser biblioteca ajax o Primefaces também é biblioteca de temas, para escolher uma de sua preferência acesse o site http://www.primefaces.org/showcase-labs/ui/home.jsf, no canto superior direito haverá uma caixa de seleção escrito “aristo”, este é o tema padrão, selecione um de sua preferência e baixe-o no link http://repository.primefaces.org/org/primefaces/themes/, esse local será apresentado em estrutura de diretórios, para baixar o tema bootstrap, por exemplo, acesse a pasta de mesmo nome, em seguida entre na pasta da última versão, e por fim baixe o primeiro arquivo, nesse caso bootstrap-1.0.10.jar. Salve-o na mesma pasta anterior.

Dentro do Eclipse acesse o menu window, opção preferences, digite user lib, haverão dois, selecione o que pertence a Java, clique em new e nomeie por exemplo de Primefaces 3.4.2, clique em ok, e em seguida em Add External JARs, indique os dois pacotes baixados e clique em ok.

Clique com o botão direito do mouse sobre o projeto web, selecione Build Path, Configure Build Path, aba Libraries, Add Library, User Library, Next, marque Primefaces 3.4.2, clique em Finish. Sem fechar a tela de propriedades do projeto procure na lateral esquerda por Deployment Assembly, clique em Add, selecione Java Build Path Entries, next, selecione Primefaces 3.4.2, finish e ok. Configurar o Build Path serve para a IDE reconhecer, em tempo de projeto, as classes que você menciona dos pacotes externos a sua aplicação, já o Deployment Assembly serve para a IDE saber quais bibliotecas você deseja empacotar quando for gerar o deployment para o servidor.

Abra o arquivo web.xml da pasta WebContent/WEB-INF e acrescente as tags abaixo.

Abra o arquivo index.xhtml e acrescente o namespace do primefaces e coloque o greeting dentro do painel como no código abaixo.

Por fim clique com o botão direito do mouse sobre o projeto EAR, selecione “Run As”, “Run on Server”, selecione o JBoss e clique em “Finish”.

Conclusão: da trabalho pra caramba, mas vale a pena, quem chegou até o fim desse tutorial não precisa que eu o convença sobre os benefícios.

Obrigado e até a próxima.