// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= Criando e Executando um Cliente da Aplicação no GlassFish Server
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Criando e Executando um Cliente da Aplicação no GlassFish Server - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Criando e Executando um Cliente da Aplicação no GlassFish Server

Este tutorial mostra como criar um cliente de aplicação simples e como acessar um Enterprise JavaBean (EJB) implantado no GlassFish server 3. Neste tutorial, primeiro você criará uma aplicação corporativa que contém um bean de sessão simples e um projeto de biblioteca de classe Java que contém a interface remota para o bean da sessão. Em seguida, você criará um cliente de aplicação que acessa o bean de sessão por meio da interface remota na biblioteca de classes. A biblioteca de classes JAR que contém a interface remota é adicionada ao classpath da aplicação corporativa e ao cliente da aplicação.

*Exercícios do Tutorial*

* <<Exercise_10,Criando a Biblioteca de Classe Java>>
* <<Exercise_20,Criando um Módulo EJB>>
* <<Exercise_22,Criando o Bean de Sessão>>
* <<Exercise_23,Adicionando um Método de Negócios>>
* <<Exercise_24,Implantando a Aplicação Corporativa>>
* <<Exercise_30,Criando o Cliente da Aplicação>>
* <<Exercise_32,Adicionando a Biblioteca de Classe>>
* <<Exercise_30,Executando o Cliente da Aplicação>>

*Para seguir este tutorial, são necessários os recursos e o software a seguir.*

|===
|Software ou Recurso |Versão Necessária 

|link:https://netbeans.org/downloads/index.html[+NetBeans IDE+] |Versão Java EE 7.2, 7.3, 7.4, 8.0 

|link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+JDK (Java Development Kit)+] |versão 7 ou 8 

|GlassFish Server Open Source Edition |3.x, 4.x 
|===

*Pré-requisitos*

Este tutorial pressupõe que você tenha algum conhecimento básico das tecnologias a seguir, ou alguma experiência de programação com elas:

* Programação em Java
* NetBeans IDE

Você pode fazer download link:https://netbeans.org/projects/samples/downloads/download/Samples/JavaEE/EntAppClientEE6.zip[+de um arquivo compactado zip do projeto finalizado+]. Caso esteja usando o GlassFish 3.0, use link:https://netbeans.org/projects/samples/downloads/download/NetBeans%20IDE%206.8/JavaEE/entappclient.zip[+o arquivo compactado zip para o projeto do NetBeans IDE 6.8.+]


== Criando a Biblioteca de Classe Java

Nesta sessão você irá criar um projeto de Biblioteca de Classe Java que irá conter a interface remota para o EJB. A interface remota se comporta como uma API para o EJB, que é usada por clientes para se comunicar com o EJB.

A biblioteca JAR é fácil de ser distribuída para quaisquer clientes que possam precisar chamar o EJB. Os clientes que desejam acessar o EJB precisam apenas adicionar o JAR de biblioteca ao classpath do projeto. A implementação EJB usa o mesmo JAR para implementar a interface.

1. Selecione Arquivo > Novo Projeto (Ctrl-Shift-N; ⌘-Shift-N no Mac) e selecione Biblioteca de Classe Java na categoria Java. Clique em Próximo.
2. Digite *EJBRemoteInterface* como o nome do Projeto. Clique em Finalizar.

image::images/appclient-newclasslibrary.png[title="Assistente de projeto Nova Biblioteca de Classe"]

Quando você clicar em Finalizar, o IDE criará o projeto da Biblioteca de classe Java. Na próxima sessão, você criará uma aplicação corporativa Java EE e um módulo EJB. Em seguida, você usará um assistente para criar um bean de sessão e a interface remota para seu bean de sessão no projeto Biblioteca de classe. O cliente de aplicação acessará o bean de sessão por meio da interface na biblioteca de classes.


== Criando um Módulo EJB

Nesta sessão, você criará um aplicação corporativa em um módulo EJB. Quando você cria um EJB, o EJB deve ser criado como parte de uma aplicação corporativa e encapsulado como um arquivo compactado EAR e implantado no servidor.


=== Criando a Aplicação Corporativa

Nesta sessão, você irá usar o assistente Novo Projeto para criar uma aplicação corporativa contendo um módulo EJB. O assistente fornece uma opção para criar um módulo EJB quando você cria a aplicação.

1. Selecione Arquivo > Novo Projeto e selecione Aplicação Corporativa na categoria Java EE. Clique em Próximo.
2. Digite *EntAppEJB* como o Nome do Projeto. Clique em Próximo.
3. Selecione GlassFish Server como o Servidor.
4. Confirme se Criar Módulo EJB está selecionado e desfaça a seleção de Criar Módulo de Aplicação Web. Clique em Finalizar.

image::images/appclient-newentappejb.png[title="Criar Módulo EJB está selecionado no assistente Nova Aplicação Corporativa"]

Quando você clica em Finalizar, o IDE cria uma aplicação corporativa e um módulo EJB. Na janela Projetos, você pode ver que um projeto de Módulo EJB está listado no nó Módulos Java EE do projeto de aplicação corporativa.

image::images/appclient-projects-entappejb1.png[title="Janela Projetos mostrando projetos abertos"]

Você pode ver que três tipos de projetos estão agora listados na janela Projetos: biblioteca de classe, aplicação corporativa e módulo EJB.


=== Criando o Bean de Sessão

Neste exercício, você usará um assistente para criar um bean de sessão no projeto do módulo EJB. No assistente você também criará uma interface remota para o bean de sessão no projeto Biblioteca de Classe.

1. Clique com o botão direito do mouse no projeto do módulo EJB e selecione Novo > Bean de Sessão.
2. Digite *MySession* como o Nome do EJB.
3. Digite *ejb* para o Pacote.
4. Selecione Sem Estado para o Tipo de Sessão.
5. Selecione a opção Remota para Criar Interface.
6. Selecione o projeto *EJBRemoteInterface* na lista drop-down. Clique em Finalizar.

image::images/appclient-wizard-newsessionbean.png[title="Assistente de Novo Bean de Sessão"]

Quando você clica em Finalizar, o IDE cria o bean da sessão no pacote  ``ejb``  no módulo EJB e abre a classe no editor. Você pode ver que  ``MySession``  implementa a interface  ``MySessionRemote``  e que o EJBRemoteInterface JAR foi adicionado como uma biblioteca no módulo EJB.

O assistente também cria a interface remota denominada  ``MySessionRemote``  no pacote  ``ejb``  do projeto EJBRemoteInterface. O IDE adiciona automaticamente a Biblioteca Java EE 6 API que é necessária para a interface EJB.

image::images/appclient-projects-entappejb2.png[title="Janela Projetos que mostra o bean de sessão e a interface remota"] 


=== Adicionando um Método de Negócios

Neste exercício, você irá criar um método de negócios simples no bean de sessão que retorna uma string.

1. Clique com o botão direito do mouse no editor de MySession e selecione Inserir Código (Alt-Insert; Ctrl-I no Mac) e selecione Adicionar Método de Negócios.
2. Digite *getResult* como o Nome do Método e String como o Tipo de Retorno. Clique em OK.
3. Faça as seguintes alterações para modificar o método  ``getResult``  para retornar uma string.

A classe deve ter uma aparência semelhante a esta.


[source,java]
----

@Stateless
public class MySession implements MySessionRemote {

    public String getResult() {
        return *"This is My Session Bean"*;
    }
}
----


. Salve as alterações.

Agora você tem uma aplicação corporativa com um EJB simples que é exposto por meio de uma interface remota. Você também tem uma biblioteca de classe independente que contém a interface EJB que pode ser distribuída para outros desenvolvedores. Os desenvolvedores podem adicionar a biblioteca em seus projetos, caso desejem se comunicar com o EJB que é exposto pela interface remota e não precisam ter o código-fonte para o EJB. Quando você modifica o código para o EJB, somente precisa distribuir um JAR da biblioteca de classe atualizada, caso alguma das interfaces seja modificada.

Quando você usa a caixa de diálogo Adicionar Método de Negócios, o IDE implementa automaticamente o método na interface remota.


=== Implantando a Aplicação Corporativa

Agora, você pode construir e executar a aplicação corporativa. Quando você executar a aplicação, o IDE implantará o arquivo compactado EAR no servidor.

1. Clique com o botão direito do mouse na aplicação corporativa EntAppEJB e selecione Implantar.

Quando você clica em Implantar, o IDE constrói a aplicação corporativa e implanta o arquivo compactado EAR no servidor. Caso você examine a janela Arquivos, poderá ver que o JAR EJBRemoteInterface é implantado com a aplicação.

Na janela Serviços, caso você expanda o nó Aplicações do GlassFish Server 3, poderá ver que o EntAppEJB foi implantado.


== Criando o Cliente de Aplicação

Nesta seção, você irá criar um cliente de aplicação corporativa. Quando você cria o cliente de aplicação, o projeto precisa da biblioteca de classe Java, EJBRemoteInterface, para poder referenciar o EJB.

Quando você executar a aplicação corporativa, o IDE encapsulará o cliente de aplicação e a biblioteca de classe Java JAR no arquivo compactado EAR. Os JARs da biblioteca precisam ser encapsulados em um EAR com o cliente de aplicação, se você deseja acessar os JARs a partir do cliente de aplicação.


=== Criando a Aplicação Corporativa

Neste exercício, você utilizará o assistente Novo Projeto para criar um projeto de cliente de aplicação. Caso esteja usando a implantação no GlassFish 3.1 ou 4.x, você poderá criar e executar um cliente de aplicação como um projeto standalone. O cliente da aplicação não mais precisa ser implantado e executado como parte de uma aplicação corporativa.

NOTE: Se estiver implantando no GlassFish 3.01, você precisará criar o cliente de aplicação como um módulo no projeto de aplicação corporativa e executar a aplicação corporativa.

1. Selecione Arquivo > Novo Projeto e selecione Cliente de Aplicação Corporativa na categoria Java EE. Clique em Próximo.
2. Digite *EntAppClient* como o Nome do Projeto. Clique em Próximo.
3. Selecione GlassFish Server como o Servidor. Clique em Finalizar.

Observe que não é preciso adicionar o projeto em uma aplicação corporativa.

image::images/appclient-wizard-newentappclient.png[title="Criar Cliente de Aplicação selecionado no assistente Novo Projeto"]

Quando você clicar em Finalizar, o IDE criará o projeto de cliente de aplicação e abrirá  ``Main.java``  no editor.


=== Adicionando a Biblioteca de Classe

A biblioteca de classe que contém a interface remota agora precisa ser adicionada ao classpath do projeto para permitir que o cliente de aplicação referencie o EJB. O projeto biblioteca de classe é aberto, para que você possa usar a caixa de diálogo Chamar Enterprise Bean, que vai ajudá-lo a gerar o código para chamar o EJB.

Caso o projeto biblioteca de classe não esteja aberto, você pode adicionar a biblioteca de classe ao projeto na janela Projetos clicando com o botão direito do mouse no nó Bibliotecas e localizando o JAR do projeto EJBRemoteInterface.

1. Expanda o nó Pacotes de Código-Fonte do projeto EntAppClient e abra o  ``Main.java``  no editor.
2. Clique com o botão direito do mouse no código-fonte e selecione Inserir Código (Alt-Insert; Ctrl-I no Mac) e selecione Chamar Enterprise Bean para abrir a caixa de diálogo Chamar Enterprise Bean.
3. Expanda o nó do projeto EntAppEJB e selecione MySession. Clique em OK.

image::images/appclient-callenterprise.png[title="Caixa de diálogo Chamar Enterprise Bean"]

A caixa de diálogo seleciona, automaticamente, Remota como o tipo de interface. Quando você clica em OK, o IDE adiciona a anotação a seguir no  ``Main.java`` .


[source,java]
----

@EJB
private static MySessionRemote mySession;
----

O IDE também adiciona automaticamente a EJBRemoteInterface como uma Biblioteca do projeto.



. Modifique o método  ``main``  para recuperar a String do método  ``getResult``  por meio da interface MySessionRemote. Salve as alterações.

[source,java]
----

public static void main(String[] args) {
        *System.err.println("result = " + mySession.getResult());*
    }
----


== Executando o Clente de Aplicação

Você agora pode executar o cliente de aplicação construindo e implantando o projeto EntAppClient.

1. Clique com o botão direito do mouse no projeto EntAppClient na janela Projetos e selecione Executar.

Como alternativa, você pode expandir o pacote do código-fonte, clicar com o botão direito do mouse na classe  ``Main.java``  e selecionar Executar Arquivo.

Quando você clica em Executar, o IDE constrói o projeto do cliente de aplicação e implanta o arquivo compactado JAR no servidor. Você pode ver a mensagem do cliente de aplicação na janela de Saída.

image::images/appclient-buildoutput.png[title="O resultado na janela de Saída"]

Caso deseje criar EJBs adicionais, basta adicionar as novas interfaces remotas dos EJBs no projeto da biblioteca de classe EJBRemoteInterface.

link:/about/contact_form.html?to=3&subject=Feedback:%20Creating%20an%20Application%20Client[+Envie-nos Seu Feedback+]



== Próximas Etapas

Para obter mais informações sobre o uso do NetBeans IDE para desenvolver aplicações Java EE, consulte os seguintes recursos:

* link:javaee-intro.html[+Introdução à Tecnologia Java EE+]
* link:javaee-gettingstarted.html[+Conceitos Básicos sobre Aplicações do Java EE+]
* link:../../trails/java-ee.html[+Trilha de Aprendizado do Java EE e Java Web+]

Você pode encontrar mais informações sobre o uso do EJB Enterprise Beans no link:http://download.oracle.com/javaee/6/tutorial/doc/[+Tutorial do Java EE 6+].

Para enviar comentários e sugestões, obter suporte e se manter informado sobre os mais recentes desenvolvimentos das funcionalidades de desenvolvimento do Java EE do NetBeans IDE, link:../../../community/lists/top.html[+inscreva-se na lista de correspondência de nbj2ee+].

