Ruby – Classes – Escopos – Linux

Publicado: 28 de dezembro de 2014 em Ruby on Rails

Escopo refere-se à vida e acessibilidade de uma variável. Quão grande é o alcance depende de onde uma variável é declarada. Por exemplo, se uma variável é declarada na parte superior de uma classe, ela será acessível a todos os métodos de classe. Se for declarada num método, em seguida, só pode ser utilizada em tal método.

Ruby - Escopo

Ruby – Escopo

O escopo de uma variável é a parte do programa que pode acessar uma variável. Quando você tenta acessar uma variável que não está no escopo, você normalmente tem um erro do compilador. Aqui estão algumas das regras de escopo:

  1. Variáveis globais estão no escopo do programa e podem ser utilizadas dentro de classes.
  2. Variáveis ​​de classe (campos estáticos) estão no escopo em todos os lugares na classe.
  3. As variáveis ​​e parâmetros locais estão no escopo apenas dentro do método que os declarou.

Exemplo:

Neste exemplo utilizamos tipos de variáveis que possuem diferentes alcances dentro do programa e de sua respectiva classe. Utilize os comentários no código abaixo para entender os diferentes tipos de escopos.

Ruby

#!/usr/bin/env ruby
# Desenvolvimento Aberto
# Escopo.rb

$variavel_global = "olá sou uma variavel global e existo em todo programa"

# Define classe
class Escopo

  # Variável da classe existe em toda a classe
  # não precisa de uma instancia do objeto para existir
  @@variavel_estatica = 0

  # Existe para toda a classe e fora dela (Métodos públicos - Variável Privada)
  attr_accessor :variavel_publica

  # Construtor da classe
  def initialize()
    @@variavel_estatica += 1
    @variavel_publica = "publica existo em toda classe e sub-classes"
  end

  # Retorna variável estatica
  def self.variavel_estatica()
      return @@variavel_estatica
  end

  # Imprime variável global
  def imprimeVariavelGlobal()
    $variavel_global = "Variável global modificada na classe"
    puts $variavel_global
  end

  #Imprime variável publica
  def imprimeVariavelPublica()
    puts  variavel_publica
  end

  # Imprime variável local
  # Existe somente dentro do método
  def imprimeVariavelLocal()
    variavel_local = "Sou uma variável local e só existo dentro deste método"
    puts variavel_local
  end

end

# Imprime escopos
puts "---------------- Escopos ----------------\n\n"
puts "imprime variável global:"
puts $variavel_global
puts "Imprime variável da classe: "
puts Escopo.variavel_estatica

# Cria uma instancia da classe
escopo = Escopo.new

puts "Imprime variável global dentro da classe:"
puts escopo.imprimeVariavelGlobal
puts "Imprime variável privada com métodos públicos:"
puts  escopo.imprimeVariavelPublica
puts "Imprime variável local:"
puts  escopo.imprimeVariavelLocal
puts "Reimprime variável da instancia pois já existe um objeto instanciado: "
puts Escopo.variavel_estatica

Encapsulamento que em programação orientada a objetos significa separar o programa em partes, o mais isoladas possível. A idéia é tornar o software mais flexível, fácil de modificar e de criar novas implementações. Objetos restringem a visibilidade de seus recursos (atributos e métodos) aos outros usuários. Todo objeto tem uma interface, que determina como os outros objetos podem interagir com ele. A implementação do objeto é encapsulada, isso é, invisível ou visível  fora do próprio objeto.

Ruby - Encapsulamento - Public - Private - Protected

Ruby – Encapsulamento – Public – Private – Protected

Tipos de Acesso

  1. Public – deixa visível a classe ou membro para todas as outras classes, subclasses e pacotes.
  2. Private – deixa visível o atributo apenas para a classe em que este atributo se encontra.
  3. Protected – deixa visível o atributo para todas as outras classes e subclasses que pertencem ao mesmo pacote.  O protected é um intermediário entre public e private.

Publico VS Private

  • Publico todas as classes podem usar os métodos e campos.
  • Privado apenas a classe  podem usar os métodos e campos.

Por que Controlar o Acesso?

  • Proteger informação privada.
  • Esclarecer como outros programadores devem usar sua classe.
  • Manter a implementação separado da interface.

Exemplo:

Imagine o seguinte cenário,  temos uma classe que é responsável por transações de cartões de credito geralmente este tipo de classe pertence a companhia de cartões de credito e foi desenvolvida por um outro programador e esta dentro de uma DLL ou OS, acontece que o desenvolvedor terceirizado cometeu um deslize deixando visível a propriedade numero do cartão. Um desenvolvedor malicioso pode facilmente capturar o numero do cartão referenciando o objeto.

Ruby

#!/usr/bin/env ruby
# Desenvolvimento Aberto
# ControleAcesso.rb

# Define classe 
class CartaoCredito
  
  # Assessores publicos
  # Estes assessores não deveriam existir
  # pois podem ser utilizados por qualquer um
  attr_accessor :cartao_public, :valor_public
  
  # Estes métodos controlam os assessores privados
  # Os encapsulando e permitindo quaisquer tipo de validações
  # como por exemplo usuários que podem utilizar a função
  
  def setCartao(cartao)
    # Você pode criar uma validação para
    # ter certeza que o usuário pode utilizar esta função 
    @cartao = cartao
  end
  
  def getCartao()
    # Você pode criar uma validação para
    # ter certeza que o usuário pode utilizar esta função
    return @cartao
  end
  
    def setValor(valor)
    # Você pode criar uma validação para
    # ter certeza que o usuário pode utilizar esta função 
    @valor = valor
  end
  
  def getValor()
    # Você pode criar uma validação para
    # ter certeza que o usuário pode utilizar esta função
    return @valor
  end
  
  # Declara setor privado
  private
  
  # Assessores privados
  attr_accessor :cartao, :valor 
  
end

# Os assessore públicos são visíveis para qualquer pessoa
c1 = CartaoCredito.new

# Acesso direto 
c1.cartao_public= "1234 5678 8900 1236"
c1.valor_public= 1234.56

puts "Acesso publico - Qualquer pessoa pode utiliza-lo"
puts "Cartão 1: " + c1.cartao_public + " ---- Valor: R$ " + String(c1.valor_public)

c2 = CartaoCredito.new

# c2.cartao="1234 5678 8900 1236"
# Caso tente acessar o metodo privado obterá o seguinte erro:
# private method `cartao=' called for #<CartaoCredito:0x00000001360e38>
# não possibilitando acesso direto ao assessor cartão

# Você deve permitir acesso aos assessores privados
# através do encapsulamento utilizando métodos públicos
# O método correto seria:

c2.setCartao("4567 1234 7890 3456")
c2.setValor(3456.89)

puts "\nAcesso privado - Você permite que utilizem através de métodos"
puts "Cartão 2: " + c2.getCartao + " ---- Valor: R$ " + String(c2.getValor)

Construtores são métodos especiais chamados pelo sistema no momento da criação de um objeto. Eles não possuem valor de retorno, porque você não pode chamar um construtor para um objeto, você só usa o construtor no momento da inicialização do objeto. Construtores representam uma oportunidade de inicializar seus dados de forma organizada. Construtores são obrigatórios em uma classe, mas não é preciso declara-los, caso não declare um construtor por default a declaração é:  Classe.new

Ruby - Métodos Estáticos

Ruby – Métodos Estáticos

Static

Declaração de  um tipo de Classe, método, propriedade ou variável que pertence exclusivamente a sua própria classe, classes estáticas não podem ser instanciadas. Métodos e variáveis estáticas não precisam ser instanciadas, em Ruby a palavra Static significa da classe e é substituída por self para métodos e @@atributo para atributos.

Exemplo:

Neste cenário queremos saber quantos bebês foram instanciados, para isto criamos um contador no construtor do objeto e a cada objeto criado o contador aumenta nos mostrando no final a quantidade exata de novos objetos de uma classe. Visto que nosso contador pertence a classe e não a cada instancia de cada classe, neste caso para usar o contador não precisamos instanciar a classe graças a declaração self para o método e @@ para o atributo.

Ruby

#!/usr/bin/env ruby
# Desenvolvimento Aberto
# ClassesReferencia.rb

# Define classe bebê
class Bebe

  # Define atributos da classe (estático)
  @@quantidade = 0

  # Define método da classe
  def self.quantidade
    return @@quantidade
  end

  # Define construtor da classe
  def initialize()
    @@quantidade = @@quantidade + 1
  end
end

# Intancias de objetos bebês
Daniela = Bebe.new
Rodrigo = Bebe.new
Tamara  = Bebe.new
Mateus  = Bebe.new

# Imprime quantidade de instancias da classe Bebe
puts "Parabéns !!!!!"
puts "Você teve " + String(Bebe.quantidade) + " bebês"

Ruby – Classes – Referência – Linux

Publicado: 27 de dezembro de 2014 em Ruby on Rails

Referência na ciência da computação é registro que aponta o local em que se encontram armazenados os dados que identificam outro dado. Nas linguagens tradicionais variáveis são como canecas fixas e os primitivos são pequenos o suficiente para caber dentro da caneca. Os objetos são grandes para caber dentro de variáveis. Variáveis guardam números que localizam um objeto e a localização do objeto é chamada de referência. O Ruby possui apenas objetos então variáveis referenciam outros objetos.

Ruby - Referências

Ruby – Referências

Exemplo:

Neste cenário temos um bebê recém nascido que precisa ser registrado no cartório, para isto vamos criar um objeto bebê e através de um método de outro objeto chamado cartório vamos cadastrar os dados do bebê referenciando o objeto ao nosso bebê, tenha em mente que Ruby possui apenas objetos deste modo não possuímos tipos primitivos como outras linguagens de programação e não precisamos definir o tipo de cada objeto quando fazemos uma referencia a uma variável.

Ruby

#!/usr/bin/env ruby
# Desenvolvimento Aberto
# ClassesReferencia.rb

# Define classe bebê
class Bebe
  # Define atributos
  attr_accessor :codigo, :nome, :peso, :tamanho, :nomepai, :nomemae, :genero
end

# Define classe cartório
class Cartorio
  
  # Cria método da classe(estático)
  # Transfere objetos por referencia
  def self.registro(codigo, dados, bebeRef )

    # Alimenta objeto bebe
    bebeRef.codigo = codigo
    bebeRef.nome=    dados[0]
    bebeRef.peso=    dados[1]
    bebeRef.tamanho= dados[2]
    bebeRef.nomepai= dados[3]
    bebeRef.nomemae= dados[4]
    bebeRef.genero=  dados[5]
    
    # Imprime registro
    puts "Registro:" + String(bebeRef.codigo)
    puts "nome: " + bebeRef.nome
    puts "Peso: " + bebeRef.peso + " tamanho: " + bebeRef.tamanho
    puts "Genero: " + bebeRef.genero
    puts "Pai: " + bebeRef.nomepai
    puts "mãe: " + bebeRef.nomemae

  end
end

# Cria instância do Bebê
bebe = Bebe.new

# Preenche ficha do cartório
fichaRegistro = ["Samanta Amaral", "2.8kg", "36cm", 
                 "Roberto Amaral", "Marcia Amaral","Feminino" ]

# Registra bebê
# Passa objeto ficha e objeto bebe por referencia
Cartorio.registro(123456, fichaRegistro, bebe)

Ruby – Classes – Linux

Publicado: 27 de dezembro de 2014 em Ruby on Rails

Programação orientada a objetos representa o mundo real. Na programação orientada a objetos, implementa-se um conjunto de classes que definem os objetos presentes no sistema de software. Em orientação a objetos, uma classe é uma estrutura que abstrai um conjunto de objetos com características similares. Uma classe define o comportamento de seus objetos através de métodos e os estados possíveis destes objetos através de atributos. Em outros termos, uma classe descreve os serviços providos por seus objetos e quais informações eles podem armazenar.

Porque Usar Classes?

No mundo real, muitas vezes você vai encontrar muitos objetos individuais todos da mesma espécie. Pode haver milhares de outros bebês na existência, todos parecidos. Cada bebê foi construído a partir do mesmo conjunto de projetos(DNA) e, portanto, contém os mesmos componentes. Em termos de orientação a objetos, dizemos que o seu bebê é uma instância da classe de objetos conhecidos como bebê. Uma classe é o modelo a partir do qual objetos individuais são criados. Criando a classe bebê teremos um objeto bebê com seus atributos definidos:

Bebê

Bebê

Classes Ruby

Em Ruby tudo é um objeto, então podemos dizer que tudo tem uma classe, deste modo Ruby possui alguns conceitos diferentes de outras linguagens de programação hibridas como por exemplo C++ e Java. Entretanto uma classe escrita em Ruby também possui os conceitos básicos da linguagem orientada a objeto e possui basicamente 3 partes distintas:

  • A Definição da classe  (Nome da classe: Bebe).
  • Os membros da classe (Atributos da classe: nome, peso, tamanho).
  • Construtor da classe (Método: initialize).
Classe - Bebê

Classe – Bebê

Exemplo:

Neste exemplo criamos uma classe chamada Bebe e criamos um construtor para inicializar os valores para cada bebê que for instanciado, e também utilizamos um recurso que nos permite não inicializar valores na classe simulando um construtor Overload, no qual permite instanciar um objeto Bebe com valores ou sem valores definidos podendo alimenta-los através de métodos ou atributos a qualquer hora.

Ruby

#!/usr/bin/env ruby
# Desenvolvimento Aberto
# Classes.rb

class Bebe

   # Define atributos
   attr_accessor :nome, :peso, :tamanho
   
   # Define construtor da classe (Efeito Overload)
   def initialize (nome = nil, peso=nil, tamanho=nil)
     @nome = nome 
     @peso = peso
     @tamanho = tamanho
   end
  
end

# Cria instância do Bebê construtor defindo
b1 = Bebe.new("Daniel", "3.5", "36")

# Cria instância do Bebê construtor overload
b2 = Bebe.new

# Alimenta valores nos atributos publicos
b2.nome="Sabrina"
b2.peso="2.7"
b2.tamanho="32"

# Imprime Bebês
puts "Bebê 1:", "Nome: " + b1.nome, "Peso: " + b1.peso, "Tamanho: " + b1.tamanho + "cm"

puts "\nBebê 2:", "Nome: " + b2.nome, "Peso: " + b2.peso, "Tamanho: " + b2.tamanho + "cm"

Ruby – Methods – Getter e Setter – Linux

Publicado: 27 de dezembro de 2014 em Ruby on Rails

Métodos em sua forma mais simples são sub-rotinas e podem ser tanto um procedimento ou uma função, geralmente estão associados a um objeto, mas podem ser utilizados independente de estarem ou não dentro de uma classe, isto vai depender exclusivamente do paradigma de programação que você vai escolher programar.

Genericamente falando, métodos alimentam e retornam valores, no entanto existem vários tipos de métodos especialmente no paradigma de programação orientada a objeto, os mais comuns são chamados de Getters e Setter, servem especificamente para retornar e alimentar objetos, especificando ou validando alguma regra de negocio entre seu processo.

Ruby - Métodos - Getter e Setter

Ruby – Métodos – Getter e Setter

Exemplo:

Neste exemplo criamos uma simples variável global que é alimentada através do método Setter e retornada através do método Getter, este tipo de método é comumente visto dentro de classes na programação orientada a objeto.

Ruby

#!/usr/bin/env ruby
# Desenvolvimento Aberto
# Métodos.rb

# Define uma variável global 
$meuvalor = 0
 
# Os metodos mais comuns definem e retornam valores

# Retorna valor da variável global
def getValor()
  return $meuvalor
end

# Alimenta valor na variável global
def setValor(valor)
   $meuvalor = valor
end

# método para alimentar valor
setValor(10)

# método para retornar valor
puts "Meu valor é :", getValor()

O SAP .NET Connector 3.0 é a versão atual do ambiente de desenvolvimento da SAP para a comunicação entre os sistemas da plataforma SAP e Microsoft .NET. Este conector suporta RFCs e serviços Web. Ele permite que você escreva aplicações diferentes, na plataforma Web, Windows Form, ou aplicativos de console. Para baixa-lo você precisa ter um usuário na SAP MarketPlace com direitos de download, entretanto existe um projeto Open Source que estende o SAP Connector e disponibiliza a biblioteca do conector da SAP na versão para computadores x86 e x64 compilados para o Microsoft Framework 4.0.

SAP Oficial: SAP .NET Connector 3.0

SAP Connector Library: https://github.com/ion-sapoval/NSAPConnector/tree/master/Libraries

O que é Remote Function Call (RFC)?

Uma chamada de função remota (RFC) é a chamada ou a execução remota de um módulo de função remoto em um sistema externo. No sistema da SAP, estas funções são fornecidas pelo sistema de interface de RFC. O sistema de interface RFC permite chamadas de função entre dois sistemas SAP, ou entre um sistema SAP e um sistema externo. As transações de dados não se limitam a obtenção de dados a partir do servidor, mas também podem inserir dados em registros do servidor. O sistema SAP pode atuar como um cliente ou um servidor em uma chamada RFC.

SAP - .NET Connector - Exportando Dados

SAP – .NET Connector – Exportando Dados

 Usando o SAP .NET Connector 3.0 no Visual Studio

1 – Após baixar a biblioteca adequada para seu sistema operacional, crie um projeto C# Windows Forms e em suas propriedades mude o Target para que seja compilado na versão 4.0 do framework. Ressaltando que estamos utilizando a versão das dlls baixadas do projeto hospedado no Github no link acima. Adicione as três bibliotecas ao seu projeto e para referencia veja a figura abaixo:

Connector - Referencia - Bibliotecas

Referencia – bibliotecas

2 – No Netweaver abra transação SE16, e verifique o conteúdo da tabela de exemplo chamada SCARR no seu ambiente de desenvolvimento, caso não possua os dados do Netweaver em um ambiente de desenvolvimento, veja como configurar um ambiente DEV (200) e alimentar dados à tabela SCARR nos posts anteriores:

Scarr

Scarr

3 – No Visual Studio crie um design simples utilizando painéis, rótulos, caixas de textos e um botão:

Visual Studio - Design Time

Visual Studio – Design Time

Exemplo:

Neste exemplo utilizamos SAP Connector 3.0 e funções RFC do Netweaver para exportar dados contidos no sistema SAP através de chamadas remotas de uma aplicação escrita em C#.

C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using SAP.Middleware.Connector;  // SAP .NET Connector

namespace DASapNetConnector3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // Cria parametros de conexão
            RfcConfigParameters meusap = new RfcConfigParameters();

            // Alimenta parametros SAP Logon
            meusap.Add(RfcConfigParameters.Name, textBox1.Text);
            meusap.Add(RfcConfigParameters.AppServerHost, textBox2.Text);
            meusap.Add(RfcConfigParameters.SystemNumber, textBox3.Text);

            // Alimenta parametros SAP GUI
            meusap.Add(RfcConfigParameters.Client, textBox4.Text);
            meusap.Add(RfcConfigParameters.User, textBox5.Text);
            meusap.Add(RfcConfigParameters.Password, textBox6.Text);

            // Cria destino
            RfcDestination meurfc = RfcDestinationManager.GetDestination(meusap);

            try
            {
                if (meurfc != null)
                {
                    // Verifica conexão
                    meurfc.Ping();
                    label1.Text = "SAP - Conectado com sucesso.";

                    // Lê tabela
                    RfcRepository repo = meurfc.Repository;

                    // Define função de exportação de textos
                    IRfcFunction funcaoRT = repo.CreateFunction("RFC_READ_TABLE");

                    // Define parametros da função
                    funcaoRT.SetValue("query_table", "SCARR");
                    funcaoRT.SetValue("delimiter", "|");

                    // Chama função
                    funcaoRT.Invoke(meurfc);

                    // Recupera Dados cru, você precisa trata-los para
                    // que sejam humanamente legivel
                    IRfcTable tabela = funcaoRT.GetTable("DATA");

                    // Recupera texto
                    string dados = tabela.ToString();

                    // Workaround para limpar tabela
                    // Existem métodos mais eficientes
                    // Este é apenas um caminho rápido para exemplo
                    // Também há possibilidades em diferentes funções e BAPis
                    // Converter um set de dados da função em um set de dados .NET
                    dados = dados.Replace("TABLE  [STRUCTURE TAB512 { FIELD WA=","");
                    dados = dados.Replace("[STRUCTURE TAB512 { FIELD WA=", "");
                    dados = dados.Replace("}]", "\n");

                    // alimenta GUI
                    richTextBox1.AppendText(dados.TrimStart());

               }
            }
            catch (Exception ex)
            {
                // Erro ao conectar
                label1.Text = "SAP - Desconectado";
                MessageBox.Show(ex.ToString(), "Erro",
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    }
}

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>");
	}

}