Arquivo da categoria ‘Java’

JSF – Messages – Validação – Java

Publicado: 14 de janeiro de 2015 em Java

A tecnologia JavaServer Faces possui algumas funcionalidades que visam facilitar a validação de campos e economizar tempo do desenvolvedor na criação da interface com o usuário. As tags de mensagens chamadas Message e Messages tem como objetivo exibir mensagens para os elementos de uma pagina web. A tag Messages exibe mensagens de uma vez para todos os elementos da página, enquanto a tag Message exibe mensagem para um elemento especificado pelo seu identificador.

Messages: https://javaserverfaces.java.net/docs/2.0/pdldocs/facelets/h/messages.html

Validando Campos Obrigatórios

1 – Crie um projeto web dinâmico JSF, e utilize os códigos abaixo para a pagina xhtml e para o Managed Bean. Verifique na imagem abaixo que utilizamos a tag Message dentro do PanelGrid para cada elemento de validação requerida:

JSF - Design

JSF – Design

2 – Assim que executamos a aplicação e tentamos enviar os campos com valores nulos as mensagens de validação são exibidas para cada campo que não atende sua requisição:

JSF - Message

JSF – Message

3 – Assim que os valores são inseridos nos campos de preenchimento obrigatório, os dados podem ser enviados com sucesso:

JSF - Requisição Atendida

JSF – Requisição Atendida

Exemplo:

Neste exemplo utilizamos as funcionalidades do JSF para validar campos obrigatórios e exibir mensagens para cada campo.

Managed Bean

package org.desenvolvimento.aberto;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

// Define decoradores
@ManagedBean(name = "Participante")
@RequestScoped
public class Participante {

	// Define atributos privados
	private long id;
	private String nome;
	private String sobrenome;
	private String cargo;
	private double salario;

	// Metodos Getter e Setter
	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getSobrenome() {
		return sobrenome;
	}

	public void setSobrenome(String sobrenome) {
		this.sobrenome = sobrenome;
	}

	public String getCargo() {
		return cargo;
	}

	public void setCargo(String cargo) {
		this.cargo = cargo;
	}

	public double getSalario() {
		return salario;
	}

	public void setSalario(double salario) {
		this.salario = salario;
	}

	// Método de Ação (clique do botão)
	public String Acao() {
		System.out.println("Clique do botão");
		System.out.println("Nome: " + this.getNome() + "\n " +
						   "Sobrenome: " + this.getSobrenome() + "\n " +
						   "Cargo: " + this.getCargo() + "\n " +
						   "Salário: " + this.getSalario() + "\n ");
		return null;
	}
}

JSF – xhtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core">

<f:loadBundle basename="resources.application" var="msg" />

<head>
<title><h:outputText value="#{msg.welcomeTitle}" /></title>
</head>

<h:body>
	<h2>JSF - Desenvolvimento Aberto - Managed Beans -</h2>
	<h3>
		<h:outputText id="lnome" value="Validação - Cadastros:" />
	</h3>
	<h:form>
		<h:panelGrid columns="3" cellpadding="2px">
			<h:outputText id="lnome" value="Nome:" />
			<h:inputText id="tnome" value="#{Participante.nome}" size="30"
				required="true" label="Nome" />
			<h:message for="tnome" style="color:red" />

			<h:outputText id="lsobrenome" value="Sobrenome:" />
			<h:inputText id="tsobrenome" value="#{Participante.sobrenome}"
				size="40" required="true" label="Sobrenome" />
			<h:message for="tsobrenome" style="color:red" />

			<h:outputText id="lcargo" value="Cargo" />
			<h:inputText id="tcargo" value="#{Participante.cargo}" size="25"
				required="true" label="Cargo" />
			<h:message for="tcargo" style="color:red" />

			<h:outputText id="lsalario" value="Salário" />
			<h:inputText id="tsalario" value="#{Participante.salario}"
				required="true" label="Salário" />
			<h:message for="tsalario" style="color:red" />

		</h:panelGrid>
		<br />
		<h:commandButton id="botao" action="#{Participante.Acao}"
			value="Enviar Dados" />
	</h:form>
</h:body>
</html>

Publicidade

JSF – Faces Managed Bean – Java

Publicado: 13 de janeiro de 2015 em Java

Um Managed Bean é implementado por uma classe Java, que é chamada de classe Bean. A classe de nível superior Java é um Bean gerenciado se ele é definido como sendo um Bean gerenciado por qualquer outra especificação de tecnologia Java EE, como a especificação da tecnologia JavaServer Faces, ou se ele atende todas as seguintes condições:

  • Não ser uma classe interna não estática.
  • Ser uma classe concreta ou ser anotada @Decorator.
  • Não ser anotado com uma anotação de definição de componente EJB ou declarada como uma classe de Bean EJB no ejb-jar.xml.
  • Ter um construtor apropriado, a classe deve ter um construtor sem parâmetros ou a classe deve declarar um construtor anotado @Inject.

Uma típica aplicação JavaServer Faces inclui um ou mais Managed Beans, cada um dos quais podem estar associados com os componentes utilizados em uma página particular. Para saber o alcance do escopo de um Managed Bean utilize o link abaixo:

Escopo: JavaServer Faces Managed Bean

Usando um Faces Managed Bean

1 – Crie um novo projeto web dinâmico com a configuração JavaServer Faces utilizando a biblioteca Mojarra da Oracle. Utilize o código abaixo para criar o Managed  Bean e a página principal da sua aplicação. Você pode perceber a cada nova tag que insere no código html, que você conta com as facilidades do JSF para criar sua interface com o usuário de um modo simples e intuitivo:

JSF - Index.xhtml

JSF – Index.xhtml

2 – Rode a aplicação no servidor de aplicação de sua preferencia. Preencha seu nome no campo de texto e clique no botão, assim que o botão é disparado o conteúdo do campo de texto é associado ao Setter do Managed Bean e resgatado através do Getter do método de ação ligado ao botão imprimindo o resultado da ação no console do Eclipse:

JSF - Managed Bean - Console

JSF – Managed Bean – Console

Exemplo:

Neste exemplo utilizamos de modo mais simples o Managed Bean de uma aplicação JSF para exibir os dados entrados pelo usuário através de uma pagina da web.

Java

Managed Bean – Participante

package org.desenvolvimento.aberto;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

// Define decoradores
@ManagedBean(name = "Participante")
@RequestScoped
public class Participante {

	// Define atributos privados
	private long id;
	private String nome;

	// Metodos Getter e Setter
	public long getId() {
		return id;
	}
	public void setId(long id) {
		this.id = id;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}

   public String Acao() {
	   System.out.println("Clique do botão");
	   System.out.println("Nome: " + this.getNome());
	   return null;
   }
}

JSF – index.xhtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core">

<f:loadBundle basename="resources.application" var="msg" />

<head>
<title><h:outputText value="#{msg.welcomeTitle}" /></title>
</head>

<h:body>
	<h2>JSF - Desenvolvimento Aberto - Managed Beans</h2>
	<h3>
		<h:outputText id="lnome" value="Digite o seu nome:" />
	</h3>
	<h:form>
		<h:messages style="color:red" />
		<h:panelGrid columns="3">
			<h:outputText id="lnome" value="Nome:" />
			<h:inputText id="tnome" value="#{Participante.nome}" required="true" />
			<h:commandButton id="botao" action="#{Participante.Acao}"
				value="Enviar Dados" />
		</h:panelGrid>
	</h:form>
</h:body>
</html>

 

O JavaServer Faces é um framework MVC baseado em Java para a construção de interfaces de usuário baseadas em componentes para aplicações web. Possui um modelo de programação dirigido a eventos, abstraindo os detalhes da manipulação dos eventos e organização dos componentes, permitindo que o programador se concentre na lógica da aplicação. Foi formalizada como um padrão através do Java Community Process e faz parte da plataforma Java Enterprise Edition.

O JSF 2 utiliza Facelets como seu sistema de template padrão. Outras tecnologias da camada de visão, como XUL também podem ser empregadas. Em contraste, JSF 1.x utiliza JavaServer Pages (JSP) como seu sistema de template padrão. O JSF é atualmente considerado pela comunidade Java como a última palavra em termos de desenvolvimento de aplicações Web utilizando Java, resultado da experiência e maturidade adquiridas com o JSP/Servlet e Struts.

JSF: http://www.oracle.com/technetwork/java/javaee/javaserverfaces-139869.html

O Facelets é um sistema de template Web de código aberto sob a licença Apache e a tecnologia de processador de visões padrão para o JavaServer Faces (JSF). O Mojarra JavaServer Faces é a implementação open source da Oracle do padrão JSF.

Oracle Mojarra: https://javaserverfaces.java.net/

Criando uma Aplicação Hello World – JSF

1 – Para criar sua primeira aplicação JSF, abra o Eclipse e crie um projeto web dinâmico e na opção configuration, escolha JavaServer Faces 2.2, e clique em próximo duas vezes:

Dynamic Web Project - JSF

Dynamic Web Project – JSF

2 – Na janela Web Module clique em Generate web.xml deployment descriptor e clique em próximo:

JSF - Web.xml

JSF – Web.xml

3 – Nesta janela vamos escolher a biblioteca JSF, clique no botão de download para baixar a biblioteca:

JSF - Capabilities

JSF – Capabilities

4 – Escolha Oracle Mojarra, baixe o arquivo e finalize o projeto:

JSF - Oracle - Mojarra

JSF – Oracle – Mojarra

5 – Um novo projeto com uma aplicação JSF em branco foi criado, você pode expandir as pastas do projeto e encontrar o index.xhtml que possui um exemplo padrão de como utilizar o framework:

Projeto - JSF - index.xhtml

Projeto – JSF – index.xhtml

6 – Uma rápida olhada no código da página e podemos ver que o JSF utiliza as tags especiais do seu framework, elas são ui (Facelets), h (Html) e f (Core). Expanda a pasta Java Resources e clique em Application Properties e você verá que esta é a fonte dos textos exibidos na página:

JSF - Application Properties

JSF – Application Properties

7 – Clique em Add e adicione uma nova propriedade contendo uma saudação:

JSF - Add - Propriedades

JSF – Add – Propriedades

8 – No editor adicione uma nova tag para exibir sua propriedade, utilize o código abaixo para referencia:

JSF - Tags

JSF – Tags

9  – Salva e rode sua aplicação no servidor de aplicação de sua preferencia, neste exemplo utilizamos o Tomcat:

JSF - Tomcat

JSF – Tomcat

10 – Com servidor rodando você pode copiar a url do navegador do Eclipse e testar no seu navegador de preferencia:

JSF - Hello World - Firefox

JSF – Hello World – Firefox

Exemplo:

Neste exemplo criamos um projeto Java EE dinâmico para Web, configuramos a biblioteca JSF Oracle Mojarra e efetuamos uma básica modificação nas propriedades da aplicação para nos familiarizar com as tags do JSF.

Html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core">

<f:loadBundle basename="resources.application" var="msg"/>

<head>
    <title><h:outputText value="#{msg.welcomeTitle}" /></title>
</head>

<body>
<h3><h:outputText value="#{msg.welcomeHeading}" /></h3>
<p><h:outputText value="#{msg.welcomeMessage}" /></p>
<br />
<h2><h:outputText value="#{msg.DevAberto}"  /></h2>
</body>
</html>

Eclipse – GlassFish Tools for Eclipse – Java

Publicado: 23 de dezembro de 2014 em Java

O Glassfish Tools é um conjunto de plug-ins para o Eclipse, que complementa o suporte que existe para o Glassfish Server e tecnologias relacionadas na distribuição padrão Eclipse. Você pode instala-lo facilmente através do Eclipse MaketPlace. As ferramentas para o desenvolvimento de aplicações para GlassFish integram-se com Web Tools no Eclipse e suportam tanto o  GlassFish 4.0 e 3.1. Esses recursos também fazem parte do Oracle Enterprise Pack para Eclipse (OEPE).

Instalando o GlassFish Tools for Eclipse

1 – Abra o Eclipse e no menu Help, escolha Eclipse MarkePlace digite Glassfish e clique em pesquisar, escolha a ferramenta com a versão adequada da sua IDE:

GlassFish - Marketplace

GlassFish – Marketplace

2 – Após a instalação, na aba Server adicione um novo servidor adequado a sua versão:

GlassFish - Server

GlassFish – Server

3 – O Glassfish precisa do Java JDK para poder rodar corretamente, por padrão o Eclipse utiliza o JRE, clique no ícone ao lado da opção de configuração do seu caminho para adicionar uma nova opção, um nova janela irá aparecer, escolha Standard VM e adicione o caminho da instalação do seu JDK:

Java - JDK

Java – JDK

4 – Adicione o local da instalação do Glassfish:

GlassFish - Instalação

GlassFish – Instalação

5 – Escolha o domínio e defina o usuário e  senha para sua instancia, a senha é definida em algumas versões quando você inicia o servidor pela primeira vez, caso sua versão não solicite a mudança de senha, para mudar, após iniciar o servidor abra seu navegador utilizando a porta 4848 e no menu Domain escolha Administrator Password e altere sua senha:

GlassFish - Login

GlassFish – Login

6 – Seu servidor foi criado automaticamente, você pode inicia-lo para testar:

GlassFish Server - OK

GlassFish Server – OK

7 – Agora, crie um novo projeto web dinâmico, atente-se para as configurações do projeto, e o mais IMPORTANTE é não esquecer de definir o arquivo web.xml, para isto clique em próximo duas vezes e marque a opção Generate web.xml deployment descriptor:

GlassFish - Projeto

GlassFish – Projeto

8 – Crie uma nova pagina JSP chamada index.jsp e como você pode ver, diferentemente de outros servidores de aplicação o Glassfish possui a marca registrada da Oracle e lhe proporcionará alguns recursos RAD como um preview para facilitar a criação de sua pagina:

GlassFish - HTML Preview

GlassFish – HTML Preview

9 – Altere sua pagina como no código abaixo e clique em RUN para executar o deploy e rodar sua aplicação:

Glassfish - Web App

Glassfish – Web App

Exemplo:

Neste exemplo vamos criar uma simples pagina JSP para testar a instalação do Glassfish Server:

Java

Hello World Glassfish

<?xml version="1.0" encoding="ISO-8859-1" ?>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Desenvolvimento Aberto</title>
</head>
<body>
<h1>Desenvolvimento Aberto</h1>
<h2>Oracle - GlassFish Open Source Edition 4.1</h2>
<h3>Hello World! GlassFish</h3>
</body>
</html>

O GlassFish é a primeira implementação mundial da plataforma Java Enterprise Edition, sendo referência da plataforma e, como tal, suporta EJB, JPA, JSF, JMS, RMI, JSP, servlets, etc. Isto permite aos desenvolvedores criar aplicativos empresariais que são portáteis e escaláveis, e que se integram com tecnologias legadas . Componentes opcionais também podem ser instalados para serviços adicionais.

O GlassFish é baseado em código fonte liberado pelo sistema de persistência TopLink da Sun e Oracle Corporation. Ele usa um derivado do Apache Tomcat como o contêiner Servlet para servir conteúdo Web, com um componente adicional chamado Grizzly que usa Java New I/O (NIO) para escalabilidade e velocidade.

A versão com suporte é chamado o Oracle GlassFish Server. O GlassFish é um software livre, com regido sob duas licenças de software livre: o Common Development and Distribution License (CDDL) e da Licença Pública Geral GNU (GPL).

Glassfish OpenSource Edition: https://glassfish.java.net/download.html

Oracle Glassfish Server: http://www.oracle.com/technetwork/middleware/glassfish/overview/index.html

Instalando o Glassfish Open Source Edition

Antes de baixar o Glassfish verifique se já não o possui pois ele é instalado através de vários pacotes Java EE, inclusive com o a IDE NetBeans, ele está localizado na pasta arquivos de programas.

1 – Caso não o possua você deve efetuar o download e descompacta-lo na pasta de sua preferencia:

Glassfish - Open Source Edition

Glassfish – Open Source Edition

2 –  O Glassfish roda na porta 8080, caso já possua um servidor rodando nesta mesma porta, você precisa reconfigurar a portar para o glassfish. No diretório de sua instalação glassfish\domains\domain1\config abra o arquivo domain.xml e mude as portas, utilize a imagem abaixo para referencia. Caso não tenha nenhum outro servidor utilizando a porta 8080 ignore este passo:

Glassfish - Porta

Glassfish – Porta

3 – Na pasta glassfish\bin utilize este comando para iniciar o servidor: asadmin start-domain:

Inicia Servidor

Inicia Servidor

4 – Para testar abra o seu navegador e insira o endereço do servidor local com a porta que você definiu:

Glassfish - Localhost:9080

Glassfish – Localhost:9080

Pronto! Seu servidor Glassfish já esta funcionando corretamente, você pode instalar as ferramentas para o Eclipse e criar suas aplicações. Para saber como instalar o Glassfish Tools for Eclipse clique aqui.

Eclipse – JBoss Tools for Eclipse – Java

Publicado: 21 de dezembro de 2014 em Java

O JBoss Tools é um conjunto de plug-ins para o Eclipse, que complementa o suporte que existe para o JBoss e tecnologias relacionadas na distribuição padrão Eclipse. Você pode instala-lo facilmente através do Eclipse MaketPlace.

Instalando o JBoss Tools for Eclipse

1 – Abra o Eclipse e no menu Help, escolha Eclipse MarkePlace digite JBoss e clique em pesquisar, escolha a ferramenta com a versão adequada da sua IDE:

Eclipse MarketPlace

Eclipse MarketPlace

2 – Após a instalação, na aba Server adicione um novo servidor adequado a sua versão:

Novo Servidor

Novo Servidor

3 – A configuração padrão já comtempla um servidor local, clique em próximo:

Servidor Local

Servidor Local

4 – Você deve apontar a pasta que contem a instalação do seu servidor JBoss e a versão do seu JRE:

JBoss - Servidor e JDK

JBoss – Servidor e JRE

5 – Após o servidor ser configurado você pode inicia-lo para testar:

JBoss - Servidor

JBoss – Servidor

6 – Crie um novo projeto dinâmico para Web e atente-se se está utilizando as configurações adequadas para o servidor JBoss, use a imagem abaixa para referencia:

Projeto - Web - JBoss

Projeto – Web – JBoss

7 – Utilize o código abaixo e rode sua aplicação, selecione o servidor JBoss e clique em finish:

Selecione o Servidor

Selecione o Servidor

8 – Pronto sua aplicação web está rodando utilizando o JBoss Enterprise Application  Platform:

Aplicação - JBoss Enterprise Platform

Aplicação – JBoss Enterprise Platform

Para saber mais sobre JBoss Enterprise Application Platform você pode utilizar a documentação oficial:

JBoss EAP: https://access.redhat.com/documentation/en-US/JBoss_Enterprise_Application_Platform/

Exemplo:

Neste exemplo vamos criar um simples Servlet para testar a instalação do JBoss EAP:

Java

Hello World JBoss

package org.desenvolvimento.aberto;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/HelloWorldJBoss")
public class HelloWorldJBoss extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public HelloWorldJBoss() {
		super();
	}

	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		// Cria Página HTML Dinâmica
		response.setContentType("text/html");

		PrintWriter html = response.getWriter();

		html.println("<html>");
		html.println("<body>");
		html.println("<h1>Desenvolvimento Aberto - Java</h1>");
		html.println("<h2>JBoss Application Server Platform</h2>");
		html.println("<h3>Redhat - Instalação: Standalone</h3>");
		html.println("</form>");
		html.println("</body>");
		html.println("</html>");
	}

}

JBoss Enterprise Application Platform – Java

Publicado: 21 de dezembro de 2014 em Java

O JBoss Enterprise Application Platform é uma plataforma de código aberto baseada em Java EE de execução do servidor de aplicativos baseado em assinatura usado para criação, implantação e hospedagem de aplicações e serviços Java altamente transacionais.  O JBoss Enterprise Application Platform é parte do portfólio JBoss Enterprise Middleware de software. Como é baseado em Java, o servidor de aplicações JBoss opera em varias plataformas e pode ser utilizado em qualquer sistema operacional que suporte Java. O JBoss Enterprise Application Platform foi desenvolvido pela JBoss, atualmente uma divisão da Red Hat.

JBoss Enterprise Application Platform: http://jbossas.jboss.org/downloads

Instalando e testando o JBoss EAP

1 – Baixe o JBoss EAP e descompacte-o em uma pasta de sua preferencia:

JBoss - EAP -Download

JBoss – EAP -Download

2 – O JBoss EAP roda na porta 8080, caso já possua um servidor rodando nesta mesma porta, você precisa reconfigurar a portar para o JBoss. No diretório de sua instalação standalone\configuration abra o arquivo standoalone.xml e mude as portas, utilize a imagem abaixo para referencia. Caso não tenha nenhum outro servidor utilizando a porta 8080 ignore este passo:

Reconfigurando porta

Reconfigurando porta

3 – Na pasta bin do seu servidor rode o arquivo standalone.bat através da linha de comando:

JBoss: Instancia StandAlone

JBoss: Instancia StandAlone

4 – Abra o seu navegador e use digite o endereço do servidor local na porta que você configurou:

JBoss - Localhost:5080

JBoss – Localhost:5080

Pronto! Seu servidor JBoss já esta funcionando corretamente, você pode instalar o JBoss Developer Studio ou as ferramentas para o Eclipse e criar suas aplicações. Para saber como instalar o JBoss Tools for Eclipse clique aqui.

O Apache Maven é uma ferramenta de gerenciamento de projetos e compressão indispensável no gerenciamento de projetos de todos os tamanhos. O Maven também torna o trabalho do desenvolvedor muito mais fácil quando você precisa utilizar frameworks e bibliotecas diversas que não estão incluídos por padrão no pacote Java que você utiliza. Para começar a fazer uso dos recursos que o Maven nos proporciona vamos utilizar o framework Hibernate e uma biblioteca de acesso a dados da Oracle para criar uma simples aplicação web com o servidor de aplicação Tomcat.

O que é Hibernate?

O Hibernate é um framework para o mapeamento objeto-relacional escrito na linguagem Java, que facilita o mapeamento dos atributos entre uma base tradicional de dados relacionais e o modelo do objeto de uma aplicação, mediante o uso de arquivos (XML) ou anotações Java.

Hibernate: http://hibernate.org/

Configurando o Eclipse e o Maven para criar uma aplicação Web

Nosso foco principal é mostrar como utilizar o Maven para adicionar dependências e mostrar como funciona os pacotes que o Maven utiliza sem que tenhamos que baixa-los e instala-los e também como configurar o Eclipse para que o Tomcat consiga trabalhar em conjunto com o Maven. Não se preocupe em entender todo o código abaixo pois não focaremos em como utilizar o Hibernate agora, futuramente teremos vários outros posts que o contemplarão.

1 – Crie um projeto Maven com o artefato maven-archetype-webapp e o configure adicionado o servidor Tomcat ao Build Path, caso não saiba como fazer isto veja nosso post anterior sobre como utilizar o Maven e o Tomcat clicando aqui.

  • Com o projeto criado, clique com o botão direito no seu projeto e escolha Maven->Add Dependency.
  • Digite a palavra hibernate e encontre org.hibernate hibernate-core.
  • Expanda e selecione sua ultima versão final.
Hibernate Core

Hibernate Core

2 – Por padrão os downloads estão desabilitados, precisamos habilita-los para podermos utilizar outras dependências. No menu Window->Preferences digite “maven” e posicione o cursor no tópico Maven e marque os tópicos como na figura abaixo e aguarde o download, talvez precise reinicializar o Eclipse:

Maven - Preferencias

Maven – Preferencias

3 – Após o carregamento completo das configurações do Eclipse, continue a adicionar mais dependências, desta vez escolha hibernate-validator:

Hibernate Validator

Hibernate Validator

4 – Em seguida adicione hibernate Entity-manager:

Hibernate Entity Manager

Hibernate Entity Manager

5 – Por ultimo adicione Oracle ojdbc14:

Oracle - ojdbc14

Oracle – ojdbc14

6 – Agora abra seu arquivo chamado pom.xml e constatará que ocorreu um erro ao adicionar o driver da Oracle, isto porque o Maven não consegue baixa-lo. Você precisa de um Login gratuito da Oracle para baixar o driver e precisa instala-lo manualmente no Maven, utilize o link abaixo para baixar o arquivo:

ojdbc14: http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-10201-088211.html

Para instalar utilize a linha de comando abaixo, atente-se as versões no arquivo pom.xml:

mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc14  -Dversion=10.2.0.4.0 -Dpackaging=jar -Dfile=ojdbc14.jar -DgeneratePom=true

Use a imagem abaixo para referencia de como instalar a dependência:

Oracle - ojdbc14

Oracle – ojdbc14

Após instalar com sucesso volte ao Eclipse, clique com o botão direito no seu projeto e escolha Maven->Update Project o erro deve desaparecer.

7 – O Tomcat por padrão não consegue utilizar as dependências que o Maven possui, você precisa mudar a configuração. Com o botão direito no seu projeto escolha propriedades e Deployment Assembly:

  • Clique em Add.
  • Escolha Java Build Path Entries.
  • Escolha Maven Dependencies e finalize.
Web Deployment Assembly

Web Deployment Assembly

8 – Crie os arquivos para cada código abaixo e rode sua aplicação utilizando o Hibernate para ler um registro do banco de dados:

Maven - Tomcat - Hibernate - Oracle

Maven – Tomcat – Hibernate – Oracle

Exemplo:

Neste exemplo utilizamos o Maven para localizar as dependências necessárias para nosso projeto sem que precisássemos instala-las manualmente. Crie cada arquivo com seu respectivo tipo, utilize a imagem acima para verificar como fica a arvore do seu projeto. Rode o Servlet chamado HelloWorldHibernate.java.

Oracle

-- Cria tabela de funcionários
create table Funcionarios(
  ID_Funcionario  NUMBER(5),
  Nome            VARCHAR2(30),
  Sobrenome       VARCHAR2(70),
  Cargo           VARCHAR2(30),
  Salario         NUMBER(9,2));

-- Insere dados na tabela
INSERT INTO FUNCIONARIOS VALUES  (10, 'John', 'Lennon', 'Compositor', 1234.55);

XML – hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>

<session-factory>
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:xe</property>
<property name="hibernate.connection.username">user</property>
<property name="hibernate.connection.password">pass</property>
<property name="hibernate.connection.pool_size">10</property>
<property name="show_sql">true</property>
<property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property>
<property name="hibernate.current_session_context_class">thread</property>

<mapping class="org.desenvolvimento.aberto.Funcionario" />

</session-factory>
</hibernate-configuration>

Java

Servlet – Hello World Hibernate

package org.desenvolvimento.aberto;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.hibernate.Session;

public class HelloWorldHibernate extends HttpServlet {

	private static final long serialVersionUID = 1L;

	public HelloWorldHibernate() {
		super();
	}

	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		// Abre sessão recuperando a conexão
		Session session = HibernateFactory.getSessionFactory().openSession();

		// Inicia transação
		session.beginTransaction();

		// Cria objeto de negocio
		Funcionario funcionario = new Funcionario();

		// Adiciona sessão ao objeto
		funcionario = (Funcionario) session.load(Funcionario.class, 10);

		// Cria conteudo HTML
		response.setContentType("text/html");

		PrintWriter html = response.getWriter();

		// Retorna valores do objeto
		html.println("<html>");
		html.println("<body>");
		html.println("<h1>Desenvolvimento Aberto</h1>");
		html.println("<h2>Maven - Dependências ADD: Hibernate Framework: </h2>");
		html.println(funcionario.getId() + " - ");
		html.println(funcionario.getNome() + " ");
		html.println(funcionario.getSobrenome() + " - ");
		html.println(funcionario.getCargo() + " - ");
		html.println(funcionario.getSalario());
		html.println("</body>");
		html.println("</html>");

		// Encerra sessão
		session.getTransaction().commit();

	}

}

Hibernate – Session Factory

package org.desenvolvimento.aberto;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateFactory {

	// Cria objeto da sessão
	private static final SessionFactory sessionFactory = buildSessionFactory();

	// Constroi sessão
	private static SessionFactory buildSessionFactory() {
		try {
			// buildSessionFactory não será utilizado em versões superiores
			// Veremos outros métodos para criar um Factory
			// Não é necessário incluir o "hibernate.cfg.xml" no configure()
            // Incluímos somente a nível de fácil entendimento da chamada da configuração.
			// Você pode retirar a chamada.
			return new Configuration().configure("hibernate.cfg.xml").buildSessionFactory();
		} catch (Throwable ex) {
			// Em caso de erro
			System.err.println("Initial SessionFactory creation failed." + ex);
			throw new ExceptionInInitializerError(ex);
		}
	}

	// Retorna Factory da sessão
	public static SessionFactory getSessionFactory() {
		return sessionFactory;
	}

	// Encerra Sessão
	public static void shutdown() {
		getSessionFactory().close();
	}

}

Objeto de negocio – Funcionário

package org.desenvolvimento.aberto;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

// Define Entidade e tabela
@Entity
@Table(name = "funcionarios")
public class Funcionario {

	// Define atributos e decoradores Hibernate como ID e colunas
	@Id
	@GeneratedValue
	@Column(name = "ID_FUNCIONARIO")
	private int id;

	@Column(name = "NOME")
	private String nome;

	@Column(name = "SOBRENOME")
	private String sobrenome;

	@Column(name = "CARGO")
	private String Cargo;

	@Column(name = "SALARIO")
	private double salario;

	// Métodos Getter e Setter
	public long getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getSobrenome() {
		return sobrenome;
	}

	public void setSobrenome(String sobrenome) {
		this.sobrenome = sobrenome;
	}

	public String getCargo() {
		return Cargo;
	}

	public void setCargo(String cargo) {
		Cargo = cargo;
	}

	public double getSalario() {
		return salario;
	}

	public void setSalario(double salario) {
		this.salario = salario;
	}

}

No ciência da computação, Data Access Object é um padrão para um objeto que fornece uma interface abstrata para algum tipo de banco de dados ou outro mecanismo de persistência e que permite separar regras de negócio das regras de acesso a banco de dados. A vantagem de usar objetos de acesso a dados é a separação simples e rigorosa entre duas partes importantes de uma aplicação que não devem e não podem conhecer quase que nada uma da outra, e que podem evoluir frequentemente e independentemente.

O DAO implementa o mecanismo de acesso necessário para trabalhar com a fonte de dados. A fonte de dados pode ser um armazenamento persistente como um RDBMS, um serviço externo, como uma troca de B2B, um repositório como um banco de dados LDAP, um serviço de negócios acessado via CORBA, Internet Inter-ORB Protocol (IIOP) ou soquetes de baixo nível. O componente de negócio que se baseia no DAO usa a interface mais simples exposta pelo DAO para seus clientes.

CRUD - DAO

CRUD – DAO

DAO Pattern

O DAO é um padrão flexível e não uma regra ele é utilizado em conjunto com Factory Pattern e Broker Pattern (veja Patterns relacionados no link abaixo) por isto é comum você encontrar algumas variações de sua implementação, o padrão possui quatro especificações para que possa ser utilizado corretamente elas são: DataAccessObject, DataSourceObject, BussinesObject e TransferObject.

  1. DataAccessObjecté o objeto principal desse padrão. O Data Access Object abstrai a implementação fundamental de acesso a dados para o Business Objects para permitir acesso transparente à fonte de dados.
  2. DataSourceObjectrepresenta uma implementação da fonte de dados. Uma fonte de dados pode ser uma base de dados tal como um RDBMS, repositório XML, e assim por diante.
  3. BussinesObject – o objeto de negócios representa o dados do cliente. É o objeto que requer acesso à fonte de dados para obter e armazenar dados.
  4. TransferObjectrepresenta um objeto de transferência usado como um suporte de dados. O Data Access Object pode usar um objeto de transferência para retornar dados para o cliente. O Data Access Object também pode receber os dados do cliente em um objeto de transferência para atualizar os dados na fonte de dados.

DAO Pattern: http://www.oracle.com/technetwork/java/dataaccessobject-138824.html

CRUD – DAO

CRUD acrónimo de Create, Read, Update e Delete, utiliza as quatro operações básicas  para criação, consulta, atualização e exclusão de dados.

Através do padrão DAO vamos utilizar as operações CRUD para manipular dados no banco de dados. O DAO é um Patter J2EE, mas como ele separa as regras de negocio do acesso a dados também podemos utiliza-lo com qualquer tipo de interface, seja pela linha de comando, uma GUI desktop ou aplicações web.

Para usar o DAO você utiliza o Factory Pattern para criar uma abstração para o acesso a dados e uma classe concreta para seu tipo de acesso como por exemplo OracleDAOFactory, DB2DAOFactory e assim por diante. Então você pode criar a interface para seu objeto DAO chamada DAOFuncionario e a partir da interface você pode criar as classes DAO como, DAOFuncionarioOracle, DAOFuncionarioDB2 e utilizar o objeto de transferência para manipular dados.

Neste exemplo não criamos uma classe abstrata utilizando o Pattern Factory, cortamos caminho pois utilizamos apenas um objeto DAO para todos os bancos de dados, mas caso deseje criar uma abstração para classes concretas para cada banco de dados siga a especificação oficial do DAO Pattern no link logo acima.

Eclipse IDE - Drivers - Oracle - DB2 - MSSQL

Eclipse IDE – Drivers – Oracle – DB2 – MSSQL

Utilize a imagem acima para ver a organização das Packges para cada classe e os drivers utilizados para cada banco de dados.

Exemplo:

Neste exemplo usamos o Pattern DAO para criar operações CRUD utilizando uma interface gráfica, como este exemplo não possuí uma tela de login mude o acesso ao banco e usuário e senha diretamente na classe FuncionarioDAO.

Este é o terceiro método que disponibilizamos para manipular dados através de um banco de dados, para ver este mesmo programa utilizando SQL direto da aplicação clique aqui.

Pare ver este programa usando objetos no banco de dados como Views e Triggers clique aqui ou procure na busca também por Stored Procedures e cursores.

Ainda veremos outros métodos para manipular dados através de frameworks específicos como JPA e outros.

SQL

Oracle

-- Cria tabela de funcionarios
create table Funcionarios(
  ID_Funcionario  NUMBER(5),
  Nome            VARCHAR2(30),
  Sobrenome       VARCHAR2(70),
  Cargo           VARCHAR2(30),
  Salario         NUMBER(9,2));

DB2

-- Cria tabela de funcionarios
create table Funcionarios (
    ID_Funcionario  INTEGER,
    Nome            VARCHAR(30),
    Sobrenome       VARCHAR(70),
    Cargo           VARCHAR(30),
    Salario         NUMERIC(9,2));

MSSQL

-- Cria tabela de funcionarios
create table Funcionarios (
   ID_Funcionario  Int,
   Nome            VARCHAR(30),
   Sobrenome       VARCHAR(70),
   Cargo           VARCHAR(30),
   Salario         Decimal(9,2));

Java

JavaBean – Funcionario

package org.desenvolvimento.aberto.modelo;

// Modelos utilizam JavaBean
public class Funcionario {

	// Declara atributos
	private long Id;
	private String nome;
	private String sobrenome;
	private String cargo;
	private double salario;

	// Método construtor padrão do JavaBean
	public Funcionario() {

	}

	// Método construtor Overload
	public Funcionario(long id, String nome, String sobrenome, String cargo,
			double salario) {
		this.Id = id;
		this.nome = nome;
		this.sobrenome = sobrenome;
		this.cargo = cargo;
		this.salario = salario;
	}

	// Declara métodos Getters e Setters
	public long getId() {
		return Id;
	}

	public void setId(long id) {
		Id = id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getSobrenome() {
		return sobrenome;
	}

	public void setSobrenome(String sobrenome) {
		this.sobrenome = sobrenome;
	}

	public String getCargo() {
		return cargo;
	}

	public void setCargo(String cargo) {
		this.cargo = cargo;
	}

	public double getSalario() {
		return salario;
	}

	public void setSalario(double salario) {
		this.salario = salario;
	}

}

Factory Pattern – DAConexaoFactory

package org.desenvolvimento.aberto.conexao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DAConexaoFactory {

	// Cria string de conexão de banco de dados
	private static String conexao;

	// cria conexões
	// você pode alimentar o nome do servidor, porta e banco de dados
	// de alguma configuração global ou como achar melhor.

	public static Connection getConexao(int fabrica, String usuario,
			String senha) throws ClassNotFoundException, SQLException {

		if (fabrica == 1) {
			conexao = "jdbc:oracle:thin:@localhost:1521:xe";
			Class.forName("oracle.jdbc.driver.OracleDriver");
		}

		if (fabrica == 2) {
			conexao = "jdbc:derby:net://localhost:50000/deva";
			Class.forName("com.ibm.db2.jcc.DB2Driver");
		}

		if (fabrica == 3) {
			conexao = "jdbc:sqlserver://localhost\\SQLEXPRESS:1433;databaseName=devaberto";
			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
		}

		// Retorna driver pronto para login
		return DriverManager.getConnection(conexao, usuario, senha);

	}

}

Interface – FuncionarioDAOInterface

package org.desenvolvimento.aberto.dao;

import org.desenvolvimento.aberto.modelo.Funcionario;

public interface FuncionarioDAOInterface {

	// Cria interface
	// A interface propricia os retornos corretos de cada operação.

	public Funcionario buscaFuncionario(String id);

	public boolean insereFuncionario(Funcionario funcionario);

	public boolean updateFuncionario(Funcionario funcionario);

	public boolean deletaFuncionario(Funcionario funcionario);

	// TODO: Insira outros metodos que você deseje que sejam obrigatorios.
}

Objeto DAO – FuncionarioDAO

package org.desenvolvimento.aberto.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import org.desenvolvimento.aberto.conexao.DAConexaoFactory;
import org.desenvolvimento.aberto.modelo.Funcionario;

public class FuncionarioDAO implements FuncionarioDAOInterface {

	// Cria componentes
	private Connection conn = null;
	private Statement query;
	private String sql;

	public FuncionarioDAO() {

		// Como o exemplo não possui uma tela de login
		// utilizamos uma adaptação no construtor da classe
		// você pode utilizar um login para que o factory da conexão
		// use a string de conexão completa.

		try {

			this.conn = DAConexaoFactory
					.getConexao(1, "user", "password");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	@Override
	public Funcionario buscaFuncionario(String id) {

		// Cria novo objeto
		Funcionario funcionario = new Funcionario();

		// Define SQL
		sql = "SELECT * FROM FUNCIONARIOS WHERE ID_FUNCIONARIO = " + id;

		try {

			// Associa conexão e executa SQL
			query = conn.createStatement();
			ResultSet rs = query.executeQuery(sql);

			// Recupera dados do set
			while (rs.next()) {
				funcionario.setId(rs.getInt("ID_FUNCIONARIO"));
				funcionario.setNome(rs.getString("NOME"));
				funcionario.setSobrenome(rs.getString("SOBRENOME"));
				funcionario.setCargo(rs.getString("CARGO"));
				funcionario.setSalario(rs.getDouble("SALARIO"));
			}

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		// Retorna objeto
		return funcionario;
	}

	@Override
	public boolean insereFuncionario(Funcionario funcionario) {

		// Define SQL
		sql = "INSERT INTO FUNCIONARIOS VALUES (?, ?, ?, ?, ?)";

		try {

			// Prepara SQL e alimenta parametros
			PreparedStatement query = conn.prepareStatement(sql);
			query.setLong(1, funcionario.getId());
			query.setString(2, funcionario.getNome());
			query.setString(3, funcionario.getSobrenome());
			query.setString(4, funcionario.getCargo());
			query.setDouble(5, funcionario.getSalario());

			// Executa SQL
			query.execute();
			query.close();
			return true;

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return false;
	}

	@Override
	public boolean updateFuncionario(Funcionario funcionario) {

		// Define SQL
		sql = "UPDATE FUNCIONARIOS SET ID_FUNCIONARIO = ?, NOME = ?, SOBRENOME = ?,"
				+ " CARGO = ?, SALARIO = ? WHERE ID_FUNCIONARIO = ?";

		try {

			// Prepara SQL e alimenta parametros
			PreparedStatement query = conn.prepareStatement(sql);
			query.setLong(1, funcionario.getId());
			query.setString(2, funcionario.getNome());
			query.setString(3, funcionario.getSobrenome());
			query.setString(4, funcionario.getCargo());
			query.setDouble(5, funcionario.getSalario());
			query.setLong(6, funcionario.getId());

			// Executa SQL
			query.execute();
			query.close();
			return true;

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return false;
	}

	@Override
	public boolean deletaFuncionario(Funcionario funcionario) {

		// Define SQL
		sql = "DELETE FROM FUNCIONARIOS WHERE ID_FUNCIONARIO = ?";

		// Prepara SQL e alimenta parametros
		PreparedStatement query;
		try {
			// Executa SQL
			query = conn.prepareStatement(sql);
			query.setLong(1, funcionario.getId());
			query.execute();
			query.close();

			return true;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return false;

	}

}

GUI – DAApp

package org.desenvolvimento.aberto;

import java.awt.ComponentOrientation;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.Border;
import javax.swing.border.EtchedBorder;

import org.desenvolvimento.aberto.dao.FuncionarioDAO;
import org.desenvolvimento.aberto.modelo.Funcionario;

public class DAApp implements ActionListener {
	// Declara componentes
	private JLabel ltitulo;
	private JLabel lid;
	private JLabel lpnome;
	private JLabel lsnome;
	private JLabel lcargo;
	private JLabel lsalario;
	private JLabel lpesquisa;

	private JTextField tid;
	private JTextField tpnome;
	private JTextField tsnome;
	private JTextField tcargo;
	private JTextField tsalario;
	private JTextField tpesquisa;

	private JButton botao;
	private JButton alterar;
	private JButton inserir;
	private JButton deletar;
	private JButton novo;

	private Border borda;

	private JFrame menssagem;

	public Container criaPainel() {
		// cria painel
		JPanel painel = new JPanel();
		painel.setLayout(new FlowLayout());
		painel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
		painel.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
		// Cria titulo
		ltitulo = new JLabel("Database - Fields -Sem conexão");

		painel.add(ltitulo);
		painel.add(Box.createVerticalStrut(60));

		// Cria painel de usuario
		JPanel painelDados = new JPanel(new GridLayout(0, 2, 10, 10));

		// Cria componentes
		lid = new JLabel("Código:");
		lpnome = new JLabel("Primeiro Nome:");
		lsnome = new JLabel("Sobrenome:");
		lcargo = new JLabel("Cargo:");
		lsalario = new JLabel("Salário:");

		tid = new JTextField();
		tpnome = new JTextField();
		tsnome = new JTextField();
		tcargo = new JTextField();
		tsalario = new JTextField();

		tid.setPreferredSize(new Dimension(150, 20));

		// Adiciona componentes no painel
		painelDados.add(Box.createVerticalStrut(10));
		painelDados.add(Box.createVerticalStrut(10));
		painelDados.add(lid);
		painelDados.add(tid);
		painelDados.add(lpnome);
		painelDados.add(tpnome);
		painelDados.add(lsnome);
		painelDados.add(tsnome);
		painelDados.add(lcargo);
		painelDados.add(tcargo);
		painelDados.add(lsalario);
		painelDados.add(tsalario);
		painelDados.add(Box.createVerticalStrut(10));
		painelDados.add(Box.createVerticalStrut(10));

		// Cria painel de pesquisa
		JPanel painelPesquisa = new JPanel(new GridLayout(0, 3, 10, 10));
		borda = BorderFactory.createEtchedBorder(EtchedBorder.LOWERED);
		painelPesquisa.setBorder(borda);

		// Cria pesquisas
		lpesquisa = new JLabel("Pesquisa código:");
		tpesquisa = new JTextField();
		botao = new JButton("Pesquisar");
		botao.addActionListener(this);

		// Define foco do cursor no campo de pesquisa
		javax.swing.SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				tpesquisa.requestFocus();
			}
		});

		// Adiciona compoentes ao painel de pesquisa
		painelPesquisa.add(lpesquisa);
		painelPesquisa.add(tpesquisa);
		painelPesquisa.add(botao);

		// Cria painel de pesquisa
		JPanel painelAcao = new JPanel(new GridLayout(0, 4, 10, 10));
		borda = BorderFactory.createEtchedBorder(EtchedBorder.LOWERED);
		painelAcao.setBorder(borda);

		// Cria botões de manipulação de banco
		novo = new JButton("Novo");
		inserir = new JButton("Inserir");
		alterar = new JButton("Alterar");
		deletar = new JButton("Apagar");

		// Cria ouvintes de eventos
		novo.addActionListener(this);
		inserir.addActionListener(this);
		alterar.addActionListener(this);
		deletar.addActionListener(this);

		// Insere componentes em um painel
		painelAcao.add(novo);
		painelAcao.add(inserir);
		painelAcao.add(alterar);
		painelAcao.add(deletar);

		// Adiciona paineis
		painel.add(painelPesquisa);
		painel.add(painelDados);
		painel.add(painelAcao);

		return painel;
	}

	// Clique do botão de pesquisa
	public void actionPerformed(ActionEvent arg0) {

		// Verifica pesquisa
		if (arg0.getSource() == botao) {

			// Cria funcionario
			Funcionario funcionario = new Funcionario();

			// Busca funcionario
			funcionario = new FuncionarioDAO().buscaFuncionario(tpesquisa
					.getText());

			// verifica resultado
			long resultado = funcionario.getId();

			// Alimenta dados na GUI
			if (resultado != 0) {
				tid.setText(String.valueOf(funcionario.getId()));
				tpnome.setText(funcionario.getNome());
				tsnome.setText(funcionario.getSobrenome());
				tcargo.setText(funcionario.getCargo());
				tsalario.setText(String.valueOf(funcionario.getSalario()));
			} else {

				JOptionPane.showMessageDialog(menssagem,
						"Funcionario não encontrado!");

				javax.swing.SwingUtilities.invokeLater(new Runnable() {
					public void run() {
						tpesquisa.requestFocus();
						tpesquisa.selectAll();
					}
				});
			}
		}

		// Botão Novo
		if (arg0.getSource() == novo) {

			// Limpa GUI
			tid.setText(null);
			tpnome.setText(null);
			tsnome.setText(null);
			tcargo.setText(null);
			tsalario.setText(null);

			javax.swing.SwingUtilities.invokeLater(new Runnable() {
				public void run() {
					tid.requestFocus();
				}
			});

		}

		// Insere dados
		if (arg0.getSource() == inserir) {

			// Cria funcionario usando o construtor Overload
			Funcionario funcionario = new Funcionario(Integer.parseInt(tid
					.getText()), tpnome.getText(), tsnome.getText(),
					tcargo.getText(), Double.parseDouble(tsalario.getText()));

			// Cria objeto DAO
			FuncionarioDAO inserir = new FuncionarioDAO();

			// Insere funcionario
			boolean resultado = inserir.insereFuncionario(funcionario);

			// Exibe resultado
			if (resultado) {
				JOptionPane.showMessageDialog(menssagem,
						"Dados inseridos com sucesso!");
			} else {
				JOptionPane.showMessageDialog(menssagem,
						"Erro ao inserir Dados!");
			}

		}

		// Altera dados
		if (arg0.getSource() == alterar) {

			// Cria funcionario usando o construtor overload
			Funcionario funcionario = new Funcionario(Integer.parseInt(tid
					.getText()), tpnome.getText(), tsnome.getText(),
					tcargo.getText(), Double.parseDouble(tsalario.getText()));

			// Cria objeto DAO
			FuncionarioDAO alterar = new FuncionarioDAO();

			// Altera funcionario
			boolean resultado = alterar.updateFuncionario(funcionario);

			if (resultado) {
				JOptionPane.showMessageDialog(menssagem,
						"Dados alterados com sucesso!");
			} else {
				JOptionPane.showMessageDialog(menssagem,
						"Erro ao alterar Dados!");
			}

		}

		// Deleta dados
		if (arg0.getSource() == deletar) {

			// Cria funcionario utilizando o construtor overload
			Funcionario funcionario = new Funcionario(Integer.parseInt(tid
					.getText()), tpnome.getText(), tsnome.getText(),
					tcargo.getText(), Double.parseDouble(tsalario.getText()));

			// Cria objeto DAO
			FuncionarioDAO apagar = new FuncionarioDAO();

			// Deleta funcionario
			boolean resultado = apagar.deletaFuncionario(funcionario);

			// Exibe resultado
			if (resultado) {
				JOptionPane.showMessageDialog(menssagem,
						"Dados apagados com sucesso!");

				javax.swing.SwingUtilities.invokeLater(new Runnable() {
					public void run() {
						tpesquisa.requestFocus();
						tpesquisa.selectAll();
					}
				});

				novo.doClick();
			} else {

				JOptionPane.showMessageDialog(menssagem,
						"Erro ao apagar Dados!");

			}
		}

	}

	public static void criaGUI() {
		// Cria formulario
		JFrame formulario = new JFrame("Desenvolvimento Aberto");
		formulario.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		// cria painel de conteudo
		DAApp app = new DAApp();

		formulario.setContentPane(app.criaPainel());

		// Exibe o formulario
		formulario.setSize(400, 450);
		formulario.setVisible(true);

	}

	public static void main(String[] args) {

		javax.swing.SwingUtilities.invokeLater(new Runnable() {

			@Override
			public void run() {

				// Mostra GUI
				criaGUI();

			}
		});

	}

}

 

O WAS Liberty Porfile é extremamente leve, fácil de instalar, e muito rápido de usar, portanto, fornece uma plataforma conveniente e capaz para desenvolver e testar suas aplicações web e OSGi. Permite que o servidor de aplicação tenha a disposição apenas os recursos necessários para o aplicativo ou conjunto de aplicações, você também pode estender os recursos do servidor de aplicação instalando um pacote de extensão para adicionar mais funcionalidades ao Liberty Profile como recursos de Web Service, JMS e suporte ao MongoDB entre outros. Você também pode adicionar um pacote de extras que permite utilizar um Embeddable EJB Container e um cliente JPA .

WAS Developer Edition: http://www-03.ibm.com/software/products/pt/appserv-wasfordev

Instalando Pacotes de Extensão e Extras

1 – Na pagina de download após o login escolha os seguintes softwares: IBM WebSphere Application Server for Developers Extended Archive e IBM WebSphere Application Server for Developers Extra Archive , são arquivos de extensão jar:

Download Extended e Extras

Download Extended e Extras

2 – Abra o prompt de comando no local onde instalou o servidor e utilize o seguinte comando para instalar a extensão:

java -jar wlp-developers-extended-8.5.5.4.jar
Extendes Archive

Extendes Archive

3 – Pressione Enter para exibir os termos de licença e digite 1 para confirmar a instalação:

Termos de Licença

Termos de Licença

4 – Pressione Enter para confirmar o local da instalação, você deve instalar no mesmo diretório do runtime do servidor WAS:

Local da Instalação

Local da Instalação

5 – Aguarde o andamento e validação da instalação:

Validação

Validação

6 – Repita o mesmo procedimento com o arquivo de extras porem você pode criar uma pasta chamada Extras para a instalação:

Exemplo: C:\Desenvolvimento Aberto\IBM\extras
java -jar wlp-developers-extras-8.5.5.4.jar

 Configurando o WAS Liberty Profile

 7 – Abra o Eclipse e a aba Servers e expanda o servidor Websphere Application Server Liberty Profile. Expanda a opção Server Configuration e em Feature Manager clique com o botão direito e escolha Open:

Server Configuration

Server Configuration

8 – Na opção Feature Manager clique no botão Add para adicionar mais funcionalidades ao servidor:

Feature Manager

Feature Manager

9 – Adicione a funcionalidade adequada a sua aplicação:

Estenção

Funcionalidades

Você pode adicionar somente as funcionalidades que você precisa para suas aplicações e utilizar vários recursos da já consagrada tecnologia JAVA EE e OSGI (Open Services Gateway Initiative) que permite a reutilização de componentes para construir e gerenciar sistemas altamente complexos. Tornando o código mais fácil de escrever, testar e reutilizar. Gerenciar implantação dinâmica. Detectar erros previamente. Implantar remotamente. Detectar e resolver problemas que ainda não aconteceram.