Phoenix Criminal Lawyer

Eclipse – Como criar Script Ant

Com a necessidade de integrar os projetos que venho trabalhando com Jenkis, que é um servidor de integração contínua e tem por finalidade agilizar procedimentos considerados custosos, como compilação de projetos e teste automatizados. Vou exemplificar como criar script ant para auxiliar nesse trabalho. Para saber mais acesse: http://jenkins-ci.org/.

OBS.: Para os exemplos apresentados a seguir, vale ressaltar que estou usando o  weblogic 10.3.6, eclipse  Juno Service Release 1.

O primeiro passo a adicionar no seu projeto, é o arquivo application.xml, nele deve constar as informações como nome do módulo/projeto, local em que encontra-se e também o context-root que determina quais urls devem ser delegadas para o projeto em questão. A finalidade deste arquivo é definir os módulos para criação dos módulos ear. Abaixo segue um exemplo:

<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="5"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd">
<display-name>NomeSeuProjetoWAR</display-name>
 <module>
  <web>
     <web-uri>NomeSeuProjeto.war</web-uri>
     <context-root>NomeSeuProjetoWAR</context-root>
  </web>
 </module>
</application>

A seguir, vou mostrar como criar módulos EAR utilizando o application.xml que mostrei anteriormente, e também, como criar módulos JAR. A partir deste ponto, devemos primeiramente criar o arquivo build.xml, para isso, vamos utilizar o recursos automático do eclipse. Siga os passos:

1 – Clique sobre o projeto, vai em export > General > Ant Buildfiles

 

Export _Ant_BuildFiles

 

2 – Clique em next e selecione o projeto que deseja criar o build.xml e clique em finish. O arquivo será criado na home do projeto. Abra ele, e vamos começar a trabalhar nele.

Criando módulos EAR

1 – Defina o diretório de onde o jenkis irá gerar os pacotes

<property name="basedir" value="/jenkins-jobs"/>

2 – Dentro do target

<target depends="build-subprojects,build-project" name="build"/>

é o ponto responsável para geração do EAR. Veja abaixo que estamos referenciar o diretório onde consta as classes para geração do pacote WAR e logo abaixo, as definições para geração do EAR.

<target depends="build-subprojects,build-project" name="build">
    	<war destfile="deploy/ASCartoesMigrationAmexWAR.war" >
    	    <fileset dir="WebContent"/>
    	    <classes dir="build/classes"/>
    	</war>
    	<ear destfile="deploy/ASCartoesMigrationAmexEAR.ear" 
    	    		appxml="WebContent/META-INF/application.xml">
    	    <fileset file="deploy/ASCartoesMigrationAmexWAR.war"/>
    	</ear>
</target>

Ao término, vá até ao jenkis, que espero já estar configurado para o seu projeto, e execute o build. Se tudo estiver OK, ele retornará com sucesso.

Criando módulos JAR

Veja a seguir que basta adicionar a tag <jar> informando o nome que deseja ser gerado qual o diretório base e as classes.

<target depends="build-subprojects,build-project" name="build">
    	<jar destfile="ASCartoesMigrationCargaServiceLib.jar" basedir="." includes="**/*.class"/>
</target>

Spring SOA, REST e Open Graph Facebook

Conforme deixei um aperitivo em meu post anterior :), neste vou deixar um exemplo de como efetuar login no Facebook através de uma requisição informando um access_token como validador. Basicamente a funcionalidade desta aplicação tem por receber um token válido gerado pelo facebook e retornar os dados desejados do usuário.

Crie um projeto SOA com o composite em branco. Antes de mais nada, já vamos criar nossas classes java para então prosseguirmos com a aplicação do Spring Contex. Clique com o botão direito em Application Sources > New, procure por interface e adicione uma interface de modo a ficar conforme o código apresentado abaixo.

public String[] InterFace(String accessToken);

Adicione a classe onde sua interface será implementada seguindo a mesma estrutura de criação. Implemente sua interface e já cria uma variável com o nome que desejar, só que passando o valor conforme apresentado:

private static String facebookService = "https://graph.facebook.com/me?access_token=";

O valor desta variável será o responsável por validar o access_token que será informado e retornar os dados com sucesso. Ela é composta por “../me..” que é a informação do usuário, por exemplo, um ID, e também é composta por “…?access_token=” que deve informando pela aplicação desenvolvida no facebook.

OBS.: Para esse tutorial, estou levando em conta que você já tenha uma aplicação criada junto a parte de developers do facebook e que sua aplicação já esteja efetuando suas funcionalidades esperadas. Ou seja, é o resultado desta sua aplicação que tem o valor do access_token que deverá ser informado para esta nossa aplicação.

Prosseguindo com a nossa implementação, crie um método que será responsável por efetuar a construção da url e chama-lá junto ao facebook para autenticar. A seguir irei apresentar alguns trechos deste método, onde primeiramente efetuar a declaração do método para receber o token que será informado e efetuo as declarações necessárias durante a implementação.

private static String facebookConnection(String token) {
HttpURLConnection connection = null;
OutputStream wr = null;
BufferedReader rd = null;
StringBuilder sb = null;
String line = null;
URL serverAddress = null;

A seguir, vamos efetuar a construção da nossa url onde é informado a variável que declaramos logo no início e depois passamos o token que receberá o valor para concluir o conteúdo.

serverAddress = new URL(facebookService + token);

Depois, abrimos a conexão e setamos o request com o método “GET“:

connection = (HttpURLConnection)serverAddress.openConnection();
connection.setRequestMethod("GET");

Faça os procedimentos com o InputStreamReader e efetue a leitura do retorno, conforme seus conhecimentos. Implementado este método, declare um novo que será responsável por extrair o conteúdo de retorno do JSON.
Antes de continuar, vale deixar uma ressalva neste ponto que deixei passar no início deste tutorial. Para efetuar a manipulação do JSON estou usando a biblioteca json-simple, para mais informações acesse: http://code.google.com/p/json-simple/.

Aqui, apresento como ficou a declaração do meu método que fará a extração dos dados do JSON de retorno:

private String[] extractFacebookFromJSON(String response) {

     String facebook[] = new String[2];

     if (response != null) {
         final JSONObject jsonObj = (JSONObject)JSONValue.parse(response);

         final String id = (String)jsonObj.get("id");
         facebook[0] = id;

         final String first_name = (String)jsonObj.get("first_name");
         facebook[1] = first_name;
     }
     return facebook;
}

Note que apenas estou extraindo os o “ID” e o “FIRST_NAME” que constam no facebook, mas você pode extrair qualquer dado, conforme constam em https://developers.facebook.com/tools/explorer.

Volte para o composite, adicione o componete Spring Context, para isso, navegue pelo Componente Pallete

Component_Spring

Agora abra o ComponentType criado pelo Spring e adicione o path onde encontra-se sua Interface, veja:

<service name="facebookMediator">
    <interface.java interface="br.com.gualda.soa.spring.facebook.IFacebook"/>
  </service>

Abra o XML do Spring que acabou de criar e adicione o bean preenchendo com o ID e a classe que consta sua implementação.

<bean id="facebook"
    class="br.com.gualda.soa.spring.facebook.FacebookImp"/>

Em seguida adicione a tag “service” que será responsável por linkar com sua Interface criada, para isso:

<sca:service name="facebookMediator" target="facebook" 
                type="br.com.gualda.soa.spring.facebook.IFacebook"/>

Crie um XSD que tenha como entrada uma string que receberá o token, e na saída duas strings que receberão o ID e o First_Name. Depois, adicione o Mediator no composite, faça a ligação junto ao xsd criado e em seguida arraste o spring ao mediator. Se tudo ocorrer como esperado, seu composite está assim:   Composite_Spring
Abra o mediator e crie os transformations de entrada e saída. Faça a ligação de entrada e de retorno. No caso do retorno, como o retorno é um JSON, você irá precisar atribuir a posição de cada elemento de retorno. Lembrando que neste nosso tutorial estamos apenas pegando o “ID” e o “FIRST_NAME”. Veja abaixo o trecho do xlt de retorno:

<fbk:outputFacebook>
    <fbk:id>
        <xsl:value-of select="/tns:InterFaceResponse/return[1]"/>
    </fbk:id>
    <fbk:first_name>
        <xsl:value-of select="/tns:InterFaceResponse/return[2]"/>
    </fbk:first_name>
</fbk:outputFacebook>

Agora, faça o deploy. Ao executar você verá uma tela conforme apresentada abaixo:

Request

Se tudo ocorrer conforme o esperado, o returno esperado é apresentado abaixo, onde temos o id e first_name.

Response

O projeto pode ser baixando através do gitHub: https://github.com/bgualda/GetFacebookRest

Fontes:

Spring Context: http://docs.oracle.com/cd/E15586_01/integration.1111/e10224/sca_spring.htm
Facebook Developers: https://developers.facebook.com/

Habilitar componente Spring no SOA

Pessoal, nos últimos dias venho trabalho com um componente muito bacana no SOA Suíte, trata-se do Spring Context. Este componente possibilita você aplicar seu código Java dentro de aplicações SOA. Em especial, vinha trabalhando com servços REST para aplicar esse componente, mas isso é outro assunto que ficará para os próximos posts.

Bem, nesse post quero apenas mostrar como é fácil habilitar/instalar o componente Spring Context, caso já tenha instalado qualquer feature nova no Jdeveloper, esse procedimento será tranquilo, e pra você que ainda não está familiarizado com o ambiente, siga os passos a seguir.

Abra o Jdeveloper, acesse no menu Help > Check for Updates na tela que abrirá clique em next, selecione as todas as opções em “Search Update Centers” e clique em next, no campo “Available Updates” digite apenas Spring, sua tela deverá estar conforme apresentada a seguir, feito isso, clique em next para a conclusão e aguarde a instalação. Faça o reboot do Jdeveloper e pronto, você já terá acesso ao componente Spring Context.

Check for Updates - Step 3 of 5_007

Para mais informações sobre o componente Spring Context acesse a documentação http://docs.oracle.com/cd/E15586_01/integration.1111/e10224/sca_spring.htm.

Veja também exemplo de como criar seu Spring através do blog do Thiago Vespa em: http://www.thiagovespa.com.br/blog/2013/01/23/spring-no-soa-suite/

Até a próxima !!

Regex no Sublime Text

Pessoal, um recurso muito bacana que encontrei no Sublime Text 2 é a possibilidade de utilizar regex para fazer replace. Para saber mais sobre regex acesse: http://docs.oracle.com/javase/tutorial/essential/regex/.

Mas antes de começar, quero agradecer ao Caio Moraes, um companheiro de trabalho que participou diretamente nesse post.

Então vamos ao que realmente interessa. Me deparei com a seguinte situação: eu tinha um insert para efetuar em base no qual constavam diversos valores, dentre eles, valores tipo number(10,2). Porém, o insert que recebi era algo como apresentado abaixo:

INSERT INTO TESTE (NOME, CIDADE, VALOR) VALUES ('Bruno','Simonsen','0,5');
INSERT INTO TESTE (NOME, CIDADE, VALOR) VALUES ('Pedro','Votuporanga','20,15');
INSERT INTO TESTE (NOME, CIDADE, VALOR) VALUES ('Joao','Rio de Janeiro','220,5');
INSERT INTO TESTE (NOME, CIDADE, VALOR) VALUES ('Maria','Bahia','0,9');

Contudo, era preciso trocar a vírgula (,) do campo valor para ponto (.). Para fazer isso, abra seu script no Sublime, vá em Find > Replace ou se gosta de um atalho assim como eu :D, digite ctrl+H.

Na rodapé do Sublime digite o regex conforme apresentado na imagem abaixo:

Clique em Replace All o resultado deverá ser o seguinte:

INSERT INTO TESTE (NOME, CIDADE, VALOR) VALUES ('Bruno','Simonsen','0.5');
INSERT INTO TESTE (NOME, CIDADE, VALOR) VALUES ('Pedro','Votuporanga','20.15');
INSERT INTO TESTE (NOME, CIDADE, VALOR) VALUES ('Joao','Rio de Janeiro','220.5');
INSERT INTO TESTE (NOME, CIDADE, VALOR) VALUES ('Maria','Bahia','0.9');

Como pode ser notado, foi efetuado o replace das vírgulas somente no campo desejado, sem peder
o valor de seu respectivos componentes.
Vale lembrar que você pode digitar qualquer condição válida para regex que o sublime irá efetuar 
a busca e se for o caso, o replace conforme apresentado no exemplo anterior.

BEA-2156000 – Oracle_SOA1/soa/connectors/plan was not found

Neste post vou explicar como resolver o erro <BEA-2156000> – Oracle_SOA1/soa/connectors/plan was not found que ocorre quando você tenta criar Connection Pool no Weblogic. Isso ocorre porque não está encontrando o arquivo Plan.xml. Para resolver esse problema, siga os passos abaixo.

1 – Weblogic Admin Console > Deployments > FtpAdapter

2 – Clique na aba Configuration > Outbound Connection Pools

3 Abra  javax.resource.cci.ConnectionFactory

4 – Agora vamos atualizar o componente eis/Ftp/FtpAdapter, para isso, selecione-o e clique em new

5 – Na tela seguinte, selecione javax.resource.cci.ConnectionFactory e clique em next

6 – Insira o nome do JNDI desejado, por exemplo, eis/DB/bgualda e clique em finish.

Na tela seguinte, irá informar onde o Plan.xml estará sendo criado, clique em OK.

Se ao clicar em OK for apresentado a mensagem Error This deployment plan is currently in use by another deployment. Deployment plans are specific to each deployment and may not be shared. Please select another deployment plan location., isso ocorre porque seu Plan.xml está associoado mais de um servidor, ou seja, você deve ter dois soa-infra habilitados para o mesmo arquivo.

Para corrigir, basta você baixar um dos arquivos, ou criar seu arquivo com outro nome.