10 de nov. de 2015

Using Jsoup to Http connection features in Java

Jsup is a friendly api to help us on Java EE development.

With it we can stop using HttpUrlConnection and their limitations , making your java code smaller and simpler.

we will now set it on a project using maven in 5 steps, Let's GO:

1) With new Java EE project using maven, add Jsoup dependency:

<dependencies>

        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.7.2</version>
        </dependency>

    </dependencies>


2) Import your classes:

import org.jsoup.Connection.Response;
import org.jsoup.Jsoup;


3) Creation of new Response:

Response response = Jsoup.connect(url).timeout(0).ignoreHttpErrors(true).execute();                

4) Check status code:
System.out.println(response.statusCode());
 

5) Simple check redirect (301) url example code, using Jsoup:
   
 if ("http://expected.destiny.com".equals(
response.url().toString() )  ) {
            // Yes, my RewriteRule is OK

 } else {
            // No, my RewriteRule have errors
 }

* Tip: This code can help you to check Apache RewriteRule configs and automate our tests (you can use Junit and add this code into Tests code too).

29 de nov. de 2014

Conhecendo as principais características de CMMI, MPS-BR e ISO-20000


O gerenciamento de projetos de software em dias atuais pode ser considerado essencial para garantir o sucesso da implantação de sistemas em empresas. Deste modo as normas como CMMI, MPS-BR e ISO surgiram para orientar as empresas que pretendem iniciar o desenvolvimento de projetos ou estejam necessitando de melhorias em processos que por ventura ja estejam sendo executados. Destacar os pontos de diferenças e semelhanças existentes entre estas normas, além de descrever seu funcionamento é o objetivo desta resenha.

A adoção de qualquer norma ou recomenção tem por objetivo dar uma solução clara a problemas decorrentes do processo de desenvolvimento de softwares. Tornar padronizado um processo poderá gerar tranquilidade na execução de tarefas no desenvolvimento de sistemas para empresas. Também é importante citar que a segurança, bem como a visibilidade positiva proporcionada por um processo organizado e com um planejamento sólido poderá fazer com que todo este processo ganhe o status de investimento seguro, bem como preparado para tratar possíveis riscos de modo à reduzir seus impactos negativos, tendo vista que todo o re-trabalho em TI geralmente significa prejuízo financeiro. 

É importante também citar que ao obter um certificado em alguma das normas citadas, uma empresa consegue atingir um diferencial no momento em que um provável cliente iniciar processos de comparação no mercado com outras empresas, para efetivamente efetuar a contratação de uma delas, o nivelamento também esta presente em CMMI e MPS-BR, no caso da ISO 20000 não existe a organização tão segmentada como as anteriores, apesar de também ser considerada uma norma. 

O processo de melhoria contínua também esta presente em todas elas e é este processo que garante a evolução de forma constante para que um problema detectado e solucionado em alguma fase do desenvolvimento seja corrigido e não volte a se repetir. 

A responsabilização de cada integrante do processo é algo muito similar entre as metodologias. Cada gerência estabelecida normalmente centraliza algumas operações e deste modo é capaz de evoluir de forma constante, garantir a qualidade daquilo que é sua responsabilidade. Delegar a mesma função à diferentes gerências poderá causar a perda da qualidade desta execução à longo prazo, por esse motivo algumas gerências como decisões, liberação e riscos estão presentes no MPS-BR, bem como requisitos, planejamento, monitoramento e controle estã presentes no CMMI. 

A maturidade é outro fator presente em todas as normas, podemos dizer que as organizações consideradas maduras serão capazes de atingir seus objetivos de qualidade, prazos e custos de forma consistente e eficientes, já as organizações consideradas imaturas têm por costume criar objetivos com muita frequência e acabam errando em sua concretização. Medir, estabelecer metas, bem como avaliar a situação atual são tarefas que estão presentes em CMMI, MPS-BR bem como ISO.

VANTAGENS
         Uma das vantagens no uso de CMMI é que o seu modelo de qualidade é reconhecido internacionalmente e tem como empresas que o adotam uma seleta lista da qual faz parte a Microsoft. A vantagem de se adotar esse modelo é gerar um diferencial competitivo o que poderá atrair clientes internacionais.
No caso do MPS-BR, uma grande vantagem é que as empresas conseguem atingir os níveis de maturidade mais rápido, por ser um modelo proposto para empresas brasileiras, estaria assim mais adaptado à nossa realidade.
No uso da ISO que é baseada em ITIL, apesar de não haver a formalização da adoção de práticas da ITIL, cita que existe um alinhamento com os processos definidos dentro dos livros do ITIL.
A ISO 20001 é capaz de conseguir a atenção e o compromisso por parte da gestão sénior e também garantir a aceitação e a adoção da gestão da mudança em toda a organização.
(CORRÊA - Artigo TI Especialistas)

DESVANTAGENS
         Uma desvantagem do CMMI é relacionada ao alto custo necessário para a sua conquista, bem como é necessário em média um tempo maior para sua obtenção, deste modo há uma desvantagem se analisarmos as empresas brasileiras que de forma geral não dispõe destes recursos para investir em um processo de certificação.
         Já o MPS-BR contrasta com o CMMI quando falamos de padrões internacionais, apesar de sua estrutura estar adequada à diversas normas internacionais ISO, o MPS-BR não é tão reconhecido internacionalmente como o CMMI.
O ISO-20000 poderá estar limitado à apenas um fragmento do negócio da empresa que obtém essa certificação, deste modo não é garantido à quem contrata que os altos níveis de qualidade e processo estarão presentes no processo de entrega do produto contratado.

O cliente deve estar ciente de que esta certificação não garante que o provedor de serviços seja totalmente capaz de fornecer serviços com altíssimos níveis de eficiência e eficácia, uma vez que o escopo desta pode ser limitado a uma pequena parte do Negócio.
























10 de out. de 2014

Conflitos no trabalho ou na política. Como lidar com isso?

Segundo a psicologia, existem N maneiras de se resolver conflitos.

Dentre as 3 mais evidentes estão: O diálogo com negociações e concessões de ambas as partes, a mediação de uma terceira parte (por ex o que faz a ONU) e por fim a ruptura total de uma das partes.

- Desviar o foco principal ou diminuir a insistência em alguns momentos será recomendo, pois sendo a única saída, quando o diálogo fracassa, por alguma das partes não estar apta à isso nem a mediação será suficiente. Mas isso só deve ser feito se as suas consequências forem medidas e avaliadas previamente (por ex. a guerra arabe-israelense não gera benefícios a ninguém). O aprender deve ser priorizado, eu devo utilizar o tempo para entender todos os argumentos contrários, assim como o outro deve usar o tempo para reflexão e novas constatações que comprovem sua tese, elemento foco da contrariedade.

- No ambiente de trabalho: Precisamos de forma adulta e serena encarar esses fatores, no meio científico encarar de forma científica, não podemos realizar estudos técnicos exatos se na hora de colocá-los em pratica não temos o conhecimento científico para lidar psicologicamente com o meio.

- Na política: A ruptura não adianta, a não ser que se troque de país. A guerra é a saída mais obvia, mas ineficiente. No caso do Brasil, o atraso é perpétuo e não é de hoje. Vivemos em uma guerra interna que a nada leva. O que me conforta é acreditar no ser humano, ele evolui. As decisões do país evoluirão. Votar em palhaço, em branco ou em corrupto da na mesma, contanto que todos eles dêem condições para nossos filhos crescerem e evoluírem. Só o tempo vai resolver.
Quanto mais racionais forem as partes, mais rápida sera a evolução.

12 de mar. de 2014

A sincronia necessária para a universidade e o mercado de trabalho

A universidade do século XXI por Isaías Alves.

O texto universidade do século XXI trata das dificuldades enfrentadas pela universidade para adequar-se às necessidades da sociedade onde esta inserida sem que para isso perca a sua soberania sobre o caminho que o estudo científico deva seguir dentro da mesma, não ser pautada por fatores externos torna ilimitado o poder de evolução, por outro lado isolar-se do contexto local, social ou econômico é impossível e insustentável nos tempos atuais.  Nas últimas décadas a passagem para a utlização do conhecimento pluriversitário acabou gerando novos desafios para a universidade, este conhecimento precisa ter uma aplicação na medida em que vai sendo gerado, ao contrário do conhecimento universiário que não possui tal pré-requisito. A sociedade atual possui problemas e dependendo do tipo de problema não pode esperar para que um conhecimento baseado em complexos estudos científicos que possam estar disponíveis para seu uso à longa data, além disso alguns mercados (como por exemplo TI), modificam suas características à uma velocidade que talvez o conhecimento universitário não consiga acompanhar, tornando-se defasado, isto é um problema pois o mercado precisa de profissionais formados e qualificados para manter-se ativo.
É consenso básico que investir dinheiro e tempo em evolução científica traz resultados, basta analisarmos o histórico da sociedade mundial para constatar que os mais impressionantes recursos hoje disponíveis são resultados do conhecimento universitário, cuja importância esta acima de qualquer questionamento. Fato é que algumas empresas e sociedade acabam pressionando e tentando definir a pauta e rumo para onde  a universidade deve caminhar visando suprir suas exigências, esse fator pode ser considerado limitador da criação de alto nível, tirando até certo ponto a capacidade da universidade de inovar e criar estudos com continuidade e de grande impacto. A soberania da universidade sobre as decisões sobre o rumo dos estudos e do conhecimento universitário precisa ser respeitada.
O mundo em que vivemos possui grandes necessidades, existem setores que precisam evoluir para que a sociedade possa conseguir melhores condições de vida, podemos exemplificar o caso com a necessidade clara do mercado em suprir um número considerável de profissionais de TI ao mercado, cada vez mais estão surgindo cursos com o intuito de inserir no mercado profissionais de TI com conhecimento compatível com as exigências de mercado, o profissional que acaba sendo formado com o conhecimento pluriversitário não apenas é capaz de criar os frameworks existentes em caráter científico ou pesquisa, mas ele também precisa conhecer o que o mercado usa para poder sair produzindo e comprovando o resultado, aplicando-o para proveito imediato da sociedade. Não se pode fechar os olhos para os problemas que temos ao nosso redor, um profissional que estuda as vezes precisa trabalhar para poder pagar o próprio estudo, uma cadeia auto-sustentável é extremamente importante para manter as coisas em evolução constante (sociedade, empresa privada e universidade).
Capta-se a idéia de que o autor pretende mostrar com esse texto que os extremos  não são capazes de se sustentar à longo prazo, recursos físicos são necessários para que os estudos e pesquisas aconteçam e muitas vezes esses recursos são originados da própria empresa privada, podemos pegar como exemplo a NASA que depende de recursos para realizar seus estudos e projetos, alguns deles acabam não se realizando pela falta de dinheiro e atual momento desfavorável da economia norte-americana, eles estão tentando resolver seus problemas principais. Por outro lado apenas suprir necessidades do mercado acaba congelando a evolução do conhecimento teórico, com isso diminuindo a aceleração da geração de novos recursos para neste mesmo ciclo infinito poder realimentar o mesmo mercado que tenta pautar o conhecimento universitário.
Na visão crítica referente à resolução deste problema podemos dizer que assim como na economia da atualidade precisamos criar diversos investimentos simultâneos para viabilizar a sustentabilidade de uma rentabilidade estável, no caso da universidade poderíamos usar da mesma medida, ao mesmo tempo em que a universidade poderia atender as necessidades do mercado (como por exemplo criar um curso de tecnologia com as exigências das empresas privadas), pode manter cursos com o intuito claro de pesquisa e evolução com base teórica, em alguns momentos (os momentos de experimentação) poderíamos unir os 2 cursos para uma auto-colaboração mútua, resultando em uma evolução bilateral, acreditamos que essa idéia poderia ser exposta pelo autor de forma mais objetiva, guiando o leitor à uma solução prática e útil para fomentar suas idéias sempre que for preciso haver o pensamento sobre os conhecimentos universitário e pluriversitário.
Um exemplo do mercado de TI: Dando um exemplo de mercado, quem trabalhou com TI entre 2005 e os dias atuais (mais especificamente Java EE) lembra que nesse período surgiram APIs focadas em entrega de conteúdo web r ápido, resultado de estudos universitários e científicos que eram embasados na teoria de utilizar a memória ram dos servidores de aplicação para realizar um processamento rápido (a API prevayler de prevayler.org é um exemplo), à época os bancos de dados estavam em plena evolução (tanto em termos de application servers como em foco em performance e otimização de recursos) , ou seja, o mercado estava investindo pesado no uso de bancos de dados como Oracle, Postgree, MySQL, sugiam APIs como JPA, EJB, Hibernate, Spring para otimizar o desenvolvimento além da própria performance. O resultado foi claro, esse tipo de API (como o prevayler acima citado) acabaram não gerando tanto sucesso pois o mercado não aceitou de imediato – o radicalismo de retirar um banco de dados não gerou brilho nos olhos dos desenvolvedores. O meio-termo que cito nesse caso pode ser notado quando fazemos uma análise atual do mercado de TI, onde cada vez mais http optimizers (como varnish), servidores web com processamento performático ou baseado em cache (como por exemplo Apache em versão 2.4 ou NgineX, cujo núcleo de processamento pode ser configurado baseando-se em eventos – events dinâmicos ou runtime events ao invés de estipular estaticamente número de threads e recursos ao processador ou jvm que os controlam – ex: config prefork do apache), também podemos citar os bancos de dados nosql como MongoDB ou APIs de busca como Lucene ou Elastic Search que acabam utilizando tanto a memória como um conjunto acoplado à um banco de dados relacional em backoffice. Com toda essa explicação técnica gostaríamos de mostrar que analisando o mercado de TI, podemos ver que o mercado acabou encontrando o meio termo que concluímos em nosso texto, obtendo resultados dos incialmente reconhecidos estudos científicos e universitários  gerados no passado com as necessidades lógicas e de negócio existentes na empresa privada, nesse caso pudemos evoluir à outro patamar graças à junção dos dos mundos um pouco do conhecimento universitário unido ao conhecimento pluriversitário (aquele que precisa ser colocado em prática).

Referências bibliográficas:
- SANTOS, Boaventura de Souza. A universidade do século XXI: para uma reforma democrática e emancipatória da universidade. 2 ed. São Paulo: Cortez, 2004. p. 39-45.
- Curso de Gestão de Tecnologia da Informação - Centro Universitário Feevale - Março/2014.

20 de out. de 2013

SOA na prática

Exemplos de código fonte utilizados na apresentação SOA na prática, apresentada na Semana Acadêmica da UFRGS em 2013:

SOAP Currency Converter WSDL (by http://webservicex.net):
http://www.webservicex.net/CurrencyConvertor.asmx?WSDL

SOAP Client:
public class CurrencyTest {
   public static void main(String[] args) {
       try {    
           CurrencyConvertorLocator locator = new CurrencyConvertorLocator();
           
           URL url = new URL("http://www.webservicex.net/CurrencyConvertor.asmx");
           
           CurrencyConvertorSoapStub stub = new CurrencyConvertorSoapStub(url, locator);
           
           double rate = stub.conversionRate(Currency.USD, Currency.BRL);
           
           System.out.println(" 1 Dólar em Reais? " + ( 1 * rate  ));
           
       } catch (Exception e) {
           e.printStackTrace();
       }
   }
}
REST Configuração Jersey:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
 <description>example-rest</description>
 <display-name>example-rest</display-name>
 <servlet>
     <servlet-name>example-services</servlet-name>
     <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
     <init-param>
       <param-name>com.sun.jersey.config.property.packages</param-name>
       <param-value>com.example.service_package</param-value>
     </init-param>
     <init-param>
       <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
       <param-value>true</param-value>
   </init-param>
     <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
      <servlet-name>example-services</servlet-name>
     <url-pattern>/service/*</url-pattern>
 </servlet-mapping>
</web-app>

REST Server:
public class ExampleServer {
   @GET
   @Path("/get")
   @Produces(MediaType.APPLICATION_JSON)
   public JSONObject exampleGet(@QueryParam("param1") String param1) {


       JSONObject json = new JSONObject();


       JSONArray array = new JSONArray();
       
       JSONObject jsonProduct = new JSONObject();
       jsonProduct.put("tipo","celular");
       jsonProduct.put("nome","nokia");
       jsonProduct.put("valor","US$ 1900,00");
       array.add(jsonProduct);
       
       json.put("produtos", array);
       
       return json;
   }
}

REST Client:
Meus produtos disponíveis:<br/>
<!-- COMBO -->
<select id="combo">
   <option>Selecione o produto</option>
</select>
<!-- JQUERY -->
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<!-- CHAMADA AJAX -->
<script type="text/javascript" language="javascript">
var array= new Array();
$.ajax({  
  type: "GET",
  cache: false,
  url: "http://localhost:8080/example-rest/service/example/get?param1=teste",
  success: function(data){
             array = data.produtos;
          for(var  i = 0; i< array.length; i++) {
              $("#combo").append("<option value=\""+array[i].tipo+"\">["
                                                   +array[i].tipo+"] "
                                                   +array[i].nome+"- "
                                                   +array[i].valor+
                                  "</option>");
          } }  }); </script>

28 de jun. de 2013

Como um líder pode promover a transformação de um grupo?

O somatório de pessoas em um mesmo objetivo configura o que chamamos de grupo, porém apenas objetivo em comum não representa todas as ações de um grupo. Cada grupo possui integrantes com características distintas e por esse motivo as funções empenhadas por cada um nesse grupo também acabam sendo distintas, encontrar a melhor posição para cada um nesse grupo é função de um líder. A busca do objetivo em comum (do grupo) geralmente requer a execução de diversas atividades, empenhadas por diferentes pessoas em uma organização, garantir que todos executem seu papel de forma gradual e organizada é o papel do líder nesse grupo.

O líder é capaz de ver e buscar a satisfação, alinhando isso na medida certa às recompensas intrísecas existentes no mundo dos negócios (sem que para isso seja necessário ignorar completamente as extrísecas), não pode deixar que o trabalho seja visto apenas como fonte de dinheiro pois já é comprovado através de estudos que isso não gera bons resultados à longo prazo, bonificações e advertências fazem parte do ambiente corporativo mas não devem ser considerados a única estratégia para buscar a satisfação dos profissionais. Compensar apenas de forma financeira apesar de que cada profissional deva ser valorizado não pode ser tomado como regra. Se o valor monetário for a única forma de valorização à ser considerada, os mesmos nunca contribuirão mais que o mínimo em uma organização, é preciso tirar o melhor de cada pessoa para que naturalmente o reconhecimento financeiro seja concedido dentro das condições reais de cada empresa.
Portanto, transformar um simples agrupamento de pessoas em um grupo, com objetivos comuns (sendo atingidos com sucesso), gerando satisfação (econômica, profissional e motivacional) são atitudes que um líder pode tomar para a criação de um grupo sucedido no ambiente de trabalho.

O que caracteriza um bom líder?
Um bom líder consegue suprir ao máximo possível as necessidades econômicas do profissional e da empresa à condições necessárias para auxiliar a conquista da satisfação de seus liderados. Um ingênuo chefe estará à procura de regras de como motivar um novo funcionário, enquanto o líder eficaz estará atento para que as riquezas contidas nas necessidades de cada um não seja drenada e se perca. Um bom líder deve fazer parte do grupo e entender as necessidades e o que satisfaz os integrantes desse grupo. Pessoas que estejam mais desejosas de sacrificar o próprio interesse em benefício do bem-estar dos demais da organização, sendo assim mais participativos e orientadores.

Como propõe a teoria do caminho-objetivo, o líder eficaz seria, portanto aquele que atua junto ao seu liderado no sentido de facilitar o conhecimento de suas próprias necessidades. Um líder sucedido é capaz de orientar o profissional a fim de que ele atinga suas metas e ao mesmo tempo obtenha satisfação na execução de seu trabalho, é capaz de desbloquear a sinergia motivacional existente em cada um de seus subordinados, para isso deve estar em constante observação do grupo, não é uma receita de bolo, entender a particularidade de cada um exige grande técnica, conquistada com dedicação e força de vontade. Em resumo, a principal função dos lideres é levar os outros a liderarem a si mesmos.

Um bom exemplo retirado de meu cotidiano é que ao análisar os casos de líderes existentes nessas empresas por onde trabalhei, pude notar que alguns limitam-se à bons administradores pois se preocupam apenas em processos, atingir objetivos focados em resultado, bonificações e divulgação de metas obtidas à outros grupos. Posso constatar que um bom líder é aquele que se junta ao grupo, conhece o cotidiano e até a prática daquilo que é executado pelos subordinados pois dessa maneira poderá entender melhor as necessidades individuais de cada um possibilitando a satisfação do grupo como um todo. Ex: Como um gestor de tecnologia poderá obter sucesso ao guiar seus subordinados e entendê-los se não demonstrar interesse e conhecimento na àrea onde os mesmos atuam? Como  poderá avaliar os integrantes do grupo para incentivá-los se não conhece a prática de suas atividades? Geralmente um líder ruim se preocupa em satisfazer apenas as peças que considera fundamentais na organização, um bom líder estimula à todos (cada um a seu tempo e em proporção diferente) para que descubram o líder que existe dentro de cada um. Um líder é capaz de formar outros e acaba conseguindo um grupo mais eficiente e preparado para atingir os objetivos propostos.

É possível desenvolver um líder?
A liderança existe dentro de cada um, o caminho para formar um é estimular a auto-liderança nas pessoas (tarefa atribuída á justamente um líder). Antigamente algumas empresas utilizavam critérios não muito eficientes para eleger seus líderes, entre esses critérios estavam; elevado tempo de casa, conhecimento e experiência na execução das tarefas empenhadas pela empresa, pouco se pensava na capacidade dessa pessoa em lidar com outras pessoas, fator determinante para a formação de um bom líder.

O sucesso esperado aparecerá na medida em que este líder (em formação) conte com subordinados que conheçam bem aquilo que fazem e que possam dirigir-se na maioria das vezes sozinhos devido a seus fortes impulsos da realização para o trabalho.

Acredito que uma boa recomendação para que um líder seja formado seja a sua busca constante por tentar entender o ambiente, as atividades empenhadas e a característica pessoal de cada um de seus subordinados. É fato que errar assim como acertar faz parte do processo de aprendizagem e formação. Um bom líder em um determinado grupo não necessariamente será eficiente em outro isso por que gradualmente é preciso conhecer cada ser humano com que se esta lidando para saber a medida como este reagirá diante de cada situação, podendo assim dar as condições necessárias para sua evolução (até auto-conhecimento). Como já citado anteriormente, a dedicação e até mesmo abdicar de benefícios próprios sacrificando-se em prol do grupo pode ajudar, tendo vista que buscar a satisfação em ver a satisfação alheia é o que alimenta o desejo constante de evolução de um bom líder.

11 de abr. de 2013

Sharing local files to windows on centos using samba

1) Install samba rpm on os:
[root@myserver ~]# yum install samba
[root@myserver ~]# yum install system-config-samba

2) Start samba service:
[root@myserver ~]# service smb start
Starting SMB services:                                     [  OK  ]
Starting NMB services:                                     [  OK  ]

3) Check samba status:
[root@myserver ~]# service smb status
smbd (pid  3411) is running...
nmbd (pid  3414) is running...

4) Edit smb.conf file:
[root@myserver ~]# vi /etc/samba/smb.conf

5) Configuring samba to share you local directories to another windows clients:
Set this lines at your smb.conf

security = share
gest account = nobody

[my_dir_to_share]
writable = yes
path = /home/mydir
public = yes
guest ok = yes
guest only = yes
guest account = nobody
browseable = yes


6) Problems to open dir on windows? Check the selinux config and disable it:

[root@myserver ~]# vi /etc/sysconfig/selinux
"definesSELINUX = disable"

And execute the setenforce command

[root@myserver ~]# setenforce 0

3 de dez. de 2012

Configure Oracle jdbc Datasource into glassfish 3

To configure a new Oracle Jdbc Datasource into glassfish we have a 2 ways:

Pre-requisites:

    - Glassfish webserver 3.x
    - ojdbc6.jar (or another version) Click here to download it.

               Copy a jdbc driver to your application server and restart it:

                             copy ojdbc4dms.jar /myglassfishpath/domains/domain-1/lib
                             oasadmin restart-domain domain-1

    - Configured and working Oracle database with this informations:
              1) db usename = example: my_owner
              2) db password = example: my_oracle_password
              3) servername = example: mydatabaseip.mydomain.com
              4) databasename = example:my_database
              5) port: example 1523
              5) custom jdbc url: example: jdbc:oracle:thin:@mydatabaseip.mydomain.com:1521:my_database

Steps:

1- By glassfish web administrator:

         1.1 Open your glassfish web application and insert your admin and password:




             1.2 Resources / JDBC Connection Pools / NEW:


           1.3 Configure a new JDBC connection Poll, for example Oracle:






2- By command line:

     - To create a new datasource using asadmin:

asadmin> create-jdbc-connection-pool --restype javax.sql.DataSource 
--datasourceclassname oracle.jdbc.pool.OracleDataSource 
--property "user=myuser:password=mypass: url=jdbc\\:oracle\\:thin\\
:@example.mydatabase.url.service\\:1521\\:MyPool" MyPool 
(one line) 
 
JDBC connection pool Emp_Perks-Pool created successfully.
pmd-i1:
JDBC connection pool Emp_Perks-Pool created successfully.

pmd-i2:
JDBC connection pool Emp_Perks-Pool created successfully.

Command create-jdbc-connection-pool executed successfully.
 
 
   - Test your connection: 
 
       asadmin> ping-connection-pool MyPool
       Command ping-connection-pool executed successfully. 

More details from oracle http://docs.oracle.com/cd/E18930_01/html/821-2432/gkyan.html

7 de nov. de 2012

Build a RESTful webservice using Java, JSON and javascript

With JavaEE (6 or higher) and glassfish webserver, the RESTful development with any response data types is easy using simple annotations and Jersey.

Go to code and configuration steps:

1) Open the web.xml of your Dynamic web project and add a new servlet configuration:

<servlet>
      <servlet-name>my-service-name</servlet-name>
      <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
      <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>com.thesimplework.example.servicespackage</param-value>
      </init-param>
      <init-param>
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
        <param-value>true</param-value>
    </init-param>
      <load-on-startup>1</load-on-startup>
  </servlet>

 <servlet-mapping>
       <servlet-name>my-service-name</servlet-name>
      <url-pattern>/service-url-to-access/*</url-pattern>
  </servlet-mapping>

Notes:
    servlet-name: The name of your services.

    init param jersey packages: Location of your webservice classes, all services and annotations will be create at this location

2)  Implements a first RESTful webservice class:

package com.thesimplework.example.servicespackage;

import java.util.LinkedList;
import java.util.List;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

@Path("/simple-work-service-one") 
@RequestScoped
public class SimpleWorkServiceOne {
   
    @Inject
    SimpleWorkBusiness business;
   
// this service returns a list of cities from received country
// and return this list with JSON response

    @GET
    @Path("/find-cities")
    @Produces(MediaType.APPLICATION_JSON)
    public JSONObject getCities( @QueryParam("country") Integer countryId) {
        JSONArray array = new JSONArray();
        JSONObject joReturn = new JSONObject();
        try {
            List<City> cities= business.findCityByCountry(countryId);

            if (cities!=null) {
                for (City city: cities) {
                    JSONObject jo = new JSONObject();
                    jo.put("id", city.getId());
                    jo.put("name", city.getName());
                    jo.put("state", city.getState().getName());
                    jo.put("country", city.getCountry().getName());
                    array.add(jo);
                }
            }
            joReturn.put("array",array);
            joReturn.put("status",true);
         } catch (Exception e) {
             e.printStackTrace();
             joReturn.put("status",false);
         }
        return joReturn;
    }

3) Get the list of JSON objects using a simple javascript instruction:

<script type="text/javascript" language="javascript">

function loadAllCitiesOfBrazil() {

        var array= new Array();
         $.ajax({  
            type: "GET",
            cache: false, 
            url: "http://localhost/my_application//simple-work-service-one/find-cities?country=123",
            success: function(data){
                    if (data.status+"" == "true") {
                       array = data.array;
                    for(var  i = 0; i< array.length; i++) {
                        $("#my-select-html-object").append("<option value=\""+array[i].id+"\">"+array[i].name+"-"+array[i].state+"</option>");
                    }
                    }                       
            }  
        });
}
</script>

Note: Json is a js native response of our service and $("#id") is a reserved function from jquery.

4) If you execute a function loadAllCitiesOfBrazil(); a html select with id  "my-select-html-object" located on html (or jsp/jspx/php/asp/etc...) receive all values of our webservice.

spected result:

5 de nov. de 2012

Configure mod_expires on apache 2.2

This module 'mod_expires' is used to apply a correct header to your contents. Actually it is very powerful to add max perform to your site. The browser will be access the content only at the exact moment, defined by us.

For Example:

I have a simple application on my application server, to access her, i use the url http://localhost/my_application/index.html, in front of application server has installed a apache 2.2 server.

1) With this configuration, all html files sended to client by my_application gets a Cache-Control, Date and Keep-Alived attributes correctly defined. The client do not access my_application when this attributes does not expire.

<LocationMatch "^/my_application/html/.*">
     ExpiresActive On
     ExpiresByType text/html                     "access plus 3 seconds"
     ExpiresDefault "access plus 1 month 15 days 2 hours"
 </LocationMatch>


2) Open the address http://localhost/my_application/index.html with your Mozilla Firefox with Firebug component and click on "network", "all" and "header of response", you see:

Cache-Control    max-age=3
Connection    Keep-Alive
Content-Length    0
Content-Type    text/html
Date    Mon, 15 Sep 2012 20:38:49 GMT
Expires    Mon, 15 Sep 2012 20:39:08 GMT

3) Open another address when this match (text/html) is false, for example  http://localhost/my_application/my_custom_javascript.js. See, the document will be read for browser only 1 month and 15 days last:

Cache-Control    max-age=2700
Connection    Keep-Alive
Content-Length    0
Content-Type    application/x-javascript
Date    Mon, 01 Nov 2012 20:38:49 GMT
Expires    Mon, 01 Nov 2012 20:39:08 GMT

4) Another possible examples:

<LocationMatch "^/my_application/(javascript|css|js|styles|etc)/.**">
  ExpiresActive On
  ExpiresByType application/x-javascript     "M6048899"
  ExpiresByType text/css                     "M6048810"
  ExpiresDefault "M60488111"

</LocationMatch>

5) Restart your apache server.

More informations from url: http://httpd.apache.org/docs/2.2/mod/mod_expires.html


31 de out. de 2012

Call shell scripts using java

You can use this informations for execute s.o. commands, jobs, scheduled process, low level functions, direct acess at filesystem, etc. Scalable solutions can be developed using a simple codes, see:

1) Create a new sh file example:

vi /etc/my_scripts/start_apache.sh

Content:
# execute your custom command to start apache depends of version / s.o. configs, etc
# /etc/init.d/httpd restart
# /etc/init.d/httpd start
# /etc/init.d/httpd stop

# /etc/init.d/httpd
# service httpd start 
apachectl start

2) With your script finished, go to development of our Java class:

package mypackage;

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;

public class ServerControl {
   
    public void executeScript(final String scriptName) {
       
        BufferedWriter ouputCommand = null;
        Runtime r = Runtime.getRuntime();
        try {
            StringBuffer startApacheCommand = new StringBuffer();
            startApacheCommand.append("/etc/my_scripts/"+scriptName+"&");
           
            Process child = r.exec("/bin/sh");
            ouputCommand = new BufferedWriter(new OutputStreamWriter(child.getOutputStream()));

            ouputCommand.write(startApacheCommand.toString() + "\n");
            ouputCommand.flush();
           
        } catch (IOException e) {
            e.printStackTrace();
            // catch the exception...
        }
    }   
}

3) Now, build a jsp file to call developed java class:


vi /my_applications/example/my_script.jspx

...etc...
<jsp:useBean id="serverControl" class="mypackage.ServerControl" />
<jsp:scriptlet><![CDATA[ 

serverControl.executeScript("start_apache.sh");

// to call another stop_apache.sh script for example
// serverControl.executeScript("stop_apache.sh");

// to call another restart_apache.sh script for example
// serverControl.executeScript("restart_apache.sh");

// to call another restart_glassfish_domain.sh script for example
// serverControl.executeScript("restart_glassfish_domain.sh");

// to call another custom_script.sh script for example
// serverControl.executeScript("custom_script.sh");

]]></jsp:scriptlet> 
...etc....
 

4) Now, only call jsp from your server:
http://localhost:/my_application/example/my_script.jspx

17 de out. de 2012

Send a Logger output to File using java.util.logging.Logger

Creating a simple java main class showing the implementation of Java Logger using the api java.util.logging.Logger. This code supports: max Length of file(s), number of files to write log, filename of output file, custom feature when logger writting, defines a Log Level, format of log message, works with one or more handlers.

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.FileHandler;
import java.util.logging.Formatter;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.Logger;

public class LogMain {

 static SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
 public static Logger logger = null;

 public static void main(String[] args) {

   // define a max file length
    final int limitMbytes = 50 ;

    // max number of files
    final int limitFiles = 1;
 
  try {
// file to write my log
   final Handler handler = new FileHandler( "/my_logs_dir/my_log.log", ( limitMbytes  * 1024 * 1024 ), limitFiles, true ) {
    public synchronized final void publish( final LogRecord record ) {
    
     // adding a new custom feature to my publish method
     System.out.println("Executing this line..");
    
     record.setMessage( record.getMessage() );
     super.publish( record );
    }
   };
  
   // setting a log level
   handler.setLevel( Level.INFO );
  
   // A custom formatter to my logger file
   Formatter formatter = new Formatter() {
    Date dt = new Date();
    @Override
    public String format(LogRecord record) {
     dt.setTime(record.getMillis());
     return  sdf.format(dt)  + " MESSAGE OUTPUT= - " + record.getMessage() +" Level ="+record.getLevel()+"\n";
    }
   };
   handler.setFormatter( formatter );

   // Add a configured handler to logger instance
   logger = Logger.getLogger( "the_instance_name_of_my_log" );
   logger.addHandler( handler );
   logger.setLevel( Level.INFO );
   logger.setUseParentHandlers( true );
  
  } catch (SecurityException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
 
 }

}