quarta-feira, dezembro 05, 2012

quarta-feira, julho 04, 2012

Hello World Cliente remoto com EJB 3.1 e JBoss AS 7.1


EJB ou Enterprise JavaBeans é um dos principais componentes da plataforma J2EE (Java 2 Enterprise Edition). É um componente do tipo servidor que executa no container do servidor de aplicação. Os principais objectivos da tecnologia EJB são fornecer um rápido e simplificado desenvolvimento de aplicações Java baseado em componentes distribuídos, transacionais, seguros e portáveis [1].

Um dos principais componentes do EJB é o Session Bean, atuando na camada de negócio, é o elemento responsável pela distribuição da aplicação. Invocando seus métodos, outras aplicações, estando na mesma máquina ou não, podem  executar tarefas de negócios dentro do servidor de aplicações [2].

JBoss Application Server (ou JBoss AS) é um servidor de aplicações J2EE open-source, ele foi desenvolvido pela JBoss, atualmente uma divisão da Red Hat. Encontra-se na versão 7.1.1 e implementa a especificação java EJB 3.1 ( JSR 318)

Através da implementação de um Hello World vamos demonstrar como pode ser feita a comunicação client/server usando acesso remonto com EJB.

1 - Pré-requisitos
  • JBoss AS 7 (Download);
  • JDK (Download) (Quando for criar os projetos escolha sempre JDK e não JRE)
  • Eclipse, versão indigo ou superior (Eclipse Juno);
  • Plugin Jboss Tools (Instala através do Eclipse MarketPlace);
2 - Definindo JBoss 7.1  Runtime  Server 
Crie um novo server conforme tela abaixo, nossa aplicação servidora será implantada nele. Para isto navegue "File" > "New" > "Other" > "Server".

3 - Criando a aplicação servidora
Crie um novo projeto do tipo "EJB Project";

Na tela que se seguir desmarque a opção EJB Cliente e marque a opção gerar ejb-jar.xml , veja como fica;

4 - Adicionando um componente EJB
No menu do eclipse escolha "New" > "Session Bean". Marque as opções Local e Remote, veja como fica;

5 - Programação do componente
Crie o método sayHello na interface remota do componente e faça a sua implementação, veja como fica o código fonte;

HelloworldRemote.java
package tads.ifrn.edgar.ejbteste;
import javax.ejb.Remote;

@Remote
public interface HelloworldRemote {
 public String sayHello();
}

Helloworld.java
package tads.ifrn.edgar.ejbteste;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
@Stateless
@LocalBean
public class Helloworld implements HelloworldRemote, HelloworldLocal {
    public Helloworld() {

    }
 @Override
 public String sayHello() {
  return "Alo Mundo!";
 }
}

6 - Execute o Helloworld como Server

7 - Aplicação Cliente
Em um ambiente real o cliente, provavelmente, será uma aplicação web, contudo, para fins de demonstração faremos uma aplicação java normal.
No menu escolha "File" > "New" > "Project" > "Java Project", 

Para esta aplicação estar preparada para se comunicar com o servidor faremos as seguintes configurações;

7.1 - Adicionar uma referência ao projeto do servidor
Nas propriedades do projeto, selecione  " Java Build Path ", na Aba " Projects ", clique no botão " Add ", e marque o projeto servidor, veja como fica;

7.2 - Adicionar a biblioteca cliente do JBoss
É necessário incorporar ao projeto o cliente do JBoss ( jboss-client.jar ), que se encontra na pasta de instalação em ..\bin\client\
Nas propriedades do projeto, selecione  "Java Build Path", na Aba "Libraries", clique no botão "Add External JARs", abra o arquivo jboss-client.jar;

7.3 - Criar uma pasta para recursos e adicione ao classpath do projeto
Na raiz do seu projeto, ou outro local que prefira, crie uma pasta chamada  resources (Pode ser outro nome), adicione esta pasta ao classpath, da seguinte forma;
Nas  propriedades  do projeto, selecione  "Java Build Path", na Aba "Source", clique no botão "Add Folder" e selecione a pasta resources criada anteriormente;

7.4 - Na pasta criada anteriormente, adicionar o arquivo de configuração de conexão
É necessário criar o arquivo  jboss-ejb-client.properties, que deve  conter informações para permitir chamada a EJBs remotos, no mínimo as seguintes linhas;
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
remote.connections=default
remote.connection.default.host=localhost
remote.connection.default.port = 4447
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false

7.5 - Código fonte do cliente

HelloWordClient.java
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import tads.ifrn.edgar.ejbteste.HelloworldRemote;

public class HelloWorldClient {
 public static void main(String[] args) {
  final HelloworldRemote remoto = carregarStatlessBean();
  System.out.println("Mostrando remoto: " + remoto.sayHello());
 }
 public static HelloworldRemote carregarStatlessBean() {
  final Properties propriedades = new Properties();
  propriedades.put(Context.URL_PKG_PREFIXES,"org.jboss.ejb.client.naming");
  Context context;
  try {
   context = new InitialContext(propriedades);
   // O padrão para o comando lookup é ejb:nome do EAR/nome do projeto servidor/nome classe do modulo!nome completo da classe remota
   // Dentro da janela de console do servidor esta informação pode ser percebida, veja o que vem logo após java:jboss/exported
   return (HelloworldRemote) context.lookup("ejb:HelloWorldEAR/HelloWorld/Helloworld!tads.ifrn.edgar.ejbteste.HelloworldRemote");
  } catch (NamingException e1) {
   e1.printStackTrace();
  }
  return null;
 }
}

Referências:
[2] http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/EJBConcepts3.html
[3] https://docs.jboss.org/author/display/AS71/EJB+invocations+from+a+remote+client+using+JNDI

segunda-feira, julho 02, 2012

Adicionar Syntax Highlighter para Blogs


Syntax Highlighter (ou  Realce de sintaxe) é uma funcionalidade disponível em alguns editores de texto que apresenta texto — em especial código fonte — numa formatação específica para cada categoria de termos. A mudança da formatação envolve alterações da fonte tipográfica, e principalmente, da coloração do texto. Essa funcionalidade facilita a escrita em linguagens estruturadas como linguagens de programação ou linguagens de marcação, já que as estruturas e os erros de sintaxe são facilmente distinguidos. [1]

Esta funcionalidade, já presente em várias IDEs, é muito desejável em Blogs de desenvolvedores, já que é comum a publicação de trechos de código-fonte para compor o artigo.

Infelizmente, ao menos até a data de publicação deste artigo, este recurso não esta presente no editor de postagem do Blogger, fato que me motivou a procurar uma solução prática.

A solução a ser apresentada se baseou em um post no  bloggermint [2], que usa a biblioteca de javascript e css do  SyntaxHighlighter, uma aplicação html/css/javascript bastante popular, para incorporar esta funcionalidade a sites.

Em resumo, devemos baixar o  SyntaxHighlighter, colocar os arquivos JS e CSS em uma área pública na net, fazer referência a eles no head do Blogger e seguir uma convenção bem simples ao postar um  código-fonte, vejamos;

1 - Faça download do  SyntaxHighlighter.

2 - Coloque, ao menos os seguintes arquivos, em uma área pública na net, no meu caso coloquei em uma pasta do meu site no google. (Estes arquivos estão na pasta onde foi descompactado o arquivo baixado).
  • ..\styles\shCore.css
  • ..\styles\shThemeDefault.css
  • ..\styles\shCoreDefault.css
  • ..\scripts\shCore.js
  • ..\scripts\shBrushJava.js
  • ..\scripts\shBrushCss.js
  • ..\scripts\shBrushJScript.js
  • ..\scripts\shBrushXml.js
  • Adicione arquivos conforme o tipo de código deseja formatar
3 - Modifique o cabeçario do seu Blog, para isto selecione "Visão geral" > "Modelo" > "Editar HTML" > "Prosseguir", dentro da tag <head>, insira o código abaixo, alterando as URLs dos arquivos;






4 - Siga a seguinte convenção ao postar um código fonte no artigo;


<pre class="brush: java">
import java.util.Properties;
 
public class Testar {
  public static void main(String[] args) {
     System.out.println("Teste!");
  }
}
</pre>

O código html acima vai gerar a seguinte formatação;

import java.util.Properties;

public class Testar {
  public static void main(String[] args) {
     System.out.println("Teste!");
  }
}

Observe que o atributo class da tag <pre> é que vai definir como o código será formatado, no exemplo acima foi utilizado o padrão java, podem ser utilizados outros, como js, css, xml e etc.


Referências:
[1] http://pt.wikipedia.org/wiki/Realce_de_sintaxe
[2] http://www.bloggermint.com/2010/02/how-to-add-syntax-highlighter-for-bloggerblogspot/