Archive for the ‘tecnologia’ Category

Usando Maven da maneira fácil


26 Jul

Introdução

Apache Maven é um projeto de software e ferramentas de compreensão. Baseado no conceito de um Project Object Model (POM), o Maven pode gerenciar um projeto da construção, elaboração de relatórios e documentação a partir de uma peça central de informações. Maven pode fazer mais do que apenas construir software – mas pode ajudar com os testes, executar aplicações web e produzir relatórios sobre os projetos, bem como qualquer número de outras tarefas previstas pelo plug-ins. Esta documentação é para aqueles que têm o código fonte num projeto que deseja usar com o Maven, e gostaria de saber como usar Maven para construí-lo (ou executar outras tarefas comuns). Essa documentação é útil para novos usuários Maven. Download

Instalação do Maven

Maven é um aplicativo Java, então você deve ter necessariamente o Java instalado no seu ambiente. Instale (unzip) num diretório de sua preferência (eu gosto /opt). Após a instalação, e colocar o ${maven}/bin no path, crie a variável de ambiente M2_HOME apontando pro Maven.

set M2_HOME=c:\Java\apache-maven-3.0.2
set PATH=%M2_HOME%\bin;%PATH%

ou

export M2_HOME=/opt/apache-maven-3.0.2
PATH=$M2_HOME/bin:$PATH

Para testar, use o comando abaixo numa console:

mvn --version

Ela deve imprimir a sua versão do Maven, por exemplo:

Apache Maven 3.0 (r1004208; 2010-10-04 08:50:56-0300)
Java version: 1.6.0_23
Java home: /opt/jdk1.6.0_23/jre
Default locale: pt_BR, platform encoding: UTF-8
OS name: "linux" version: "2.6.35-25-generic-pae" arch: "i386" Family: "unix"

Configurando o Maven

Por default o Maven será executado com padrões sensíveis pré-configurados, sendo assim você pode ir rodando direto. No entanto, se você estiver operando em um ambiente restrito ou atrás de um firewall, talvez seja necessário preparar-se para executar o Maven, uma vez que requer acesso de gravação para o diretório home: a) ~/.m2 no Linux e Mac OS X b) C:\Documents and Settings\username\.m2 no Windows) e acesso à rede para baixar as dependências binárias (maven repo).

A Configuração do Maven ocorre em três níveis

Projeto – configuração mais estática ocorre no pom.xml do projeto

Instalação – esta configuração é adicionada uma única vez para uma instalação Maven

Usuário – esta é a configuração específica para um determinado usuário A separação é muito clara – o projeto define a informação que se aplica ao projeto, não importa quem está construindo, enquanto as outras duas definições, para o ambiente atual.

Nota: a instalação e configuração do usuário não podem ser usados para adicionar informações sobre o projeto compartilhado, como por exemplo, a criação, ou para toda a empresa. Para isso, você deve ter em seus projetos uma forma de herdar de um projeto pai, um pom.xml para toda a empresa. Você pode especificar a configuração de usuário em ${user.home}/.m2/settings.xml. A referência completa para o arquivo de configuração está disponível aqui. Esta seção irá mostrar como fazer algumas pequenas configurações comuns. Observe que o arquivo não é necessário, nesse caso, a configuração padrão será utilizada se não esse não for encontrado.

O POM

O arquivo pom.xml é o núcleo de uma configuração do projeto no Maven. É o único arquivo de configuração que contém a maioria das informações necessárias para construir um projeto no jeito que você quer. O POM é enorme e pode ser assustador em sua complexidade, mas não é necessário entender todos os meandros, apenas usá-lo eficazmente. O POM do projeto é:

<project
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemalocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelversion>4.0.0</modelversion>
  <groupid>com.mycompany.app</groupid>
  <artifactid>my-app</artifactid>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  Maven Quick Start Archetype
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupid>junit</groupid>
      <artifactid>junit</artifactid>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>




				
				

Securing JBOSS 4.2.x JMX and Web Console, and JBoss Web Service


08 Apr

Always I want to protect the jmx-console and web-console on JBoss 4.2.x I look forward something that works effectivelly… let’s go.

After installing the JBOSS Application Server, the jmx console can be accessed by anybody without providing any username/password. This is a big security risk as anybody can perform changes though the jmx and web console. Setting up basic username/password security for the jboss jmx/web console can be accomplished by performing the following steps on the JBoss Application Server.

  • Edit $JBOSS_HOME/server/all/conf/props/jmx-console-users.properties to add jmx console users. Replace “all” with your JBOSS profile name. The syntax to add users is username=password. By default admin user would be available in this file with admin as password.
  • o provide admin privileges on jmx and web console to the newly created user, edit jmx-console-roles.properties file available in $JBOSS_HOME/server/all/conf/props folder and add username=JBossAdmin.
  • Edit $JBOSS_HOME/server/all/deploy/jmx-console.war/WEB-INF/jboss-web.xml file and uncomment the security domain as shown below.
<jboss-web>
  <security-domain>java:/jaas/jmx-console</security-domain>
</jboss-web>
  • Edit $JBOSS_HOME/server/all/deploy/jmx-console.war/WEB-INF/web.xml file and uncomment the security constraint as shown below.
<security-constraint>
  <web-resource-collection>
    <web-resource-name>HtmlAdaptor</web-resource-name>
    <description>An example security config that only allows users with the role JBossAdmin to access the HTML JMX console web application</description>
    <url-pattern>/*</url-pattern>
    <http-method>GET</http-method>
    <http-method>POST</http-method>
  </web-resource-collection>
  <auth-constraint>
    <role-name>JBossAdmin</role-name>
  </auth-constraint>
</security-constraint>
  • The location, path or name of the users and roles configuration files i.e. jmx-console-users.properties or jmx-console-roles.properties can be changed by editing $JBOSS_HOME/server/all/conf/login-config.xml file. Sample configuration is given below.
<application-policy name=”jmx-console”>
  <authentication>
    <login-module code=“org.jboss.security.auth.spi.UsersRolesLoginModule” flag=”required”>
      <module-option name=”usersProperties”>props/jmx-console-users.properties</module-option>
      <module-option name=”rolesProperties”>props/jmx-console-roles.properties</module-option>
    </login-module>
  </authentication>
</application-policy>
  • Edit $JBOSS_HOME/server/all/deploy/management/console-mgr.sar/ web-console.war/WEB-INF/jboss-web.xml file and remove the comment of the security domain as shown below.
<jboss-web>
  <security-domain>java:/jaas/web-console</security-domain>
  <depends>jboss.admin:service=PluginManager</depends>
</jboss-web>
  • Edit $JBOSS_HOME/server/all/deploy/management/console-mgr.sar/ web-console.war/WEB-INF/web.xml file and remove the comment of the security constraint as shown below.
<security-constraint>
  <web-resource-collection>
    <web-resource-name>HtmlAdaptor</web-resource-name>
      <description>An example security config that only allows users with the role JBossAdmin to access the HTML JMX console web application
      </description>
      <url-pattern>/*</url-pattern>
      <http-method>GET</http-method>
      <http-method>POST</http-method>
  </web-resource-collection>
  <auth-constraint>
  <role-name>JBossAdmin</role-name>
</auth-constraint>
</security-constraint>
  • Finally, let protect JBoss web service console…
  • Edit $JBOSS_HOME/server/all/deploy/jbossws.sar/jbossws-context.war/WEB-INF/jboss-web.xml file and remove the comment of the security domain as shown below.
<jboss-web>
  <!-- A security domain that restricts access -->
  <security-domain>java:/jaas/JBossWS</security-domain>
  <context-root>jbossws</context-root>
</jboss-web>
  • Edit $JBOSS_HOME/server/all/deploy/jbossws.sar/jbossws-context.war/WEB-INF/web.xml file and remove the comment of the security constraint as shown below.
   <security-constraint>
     <web-resource-collection>
       <web-resource-name>ContextServlet</web-resource-name>
       <description>An example security config that only allows users with the
         role 'friend' to access the JBossWS console web application
       </description>
       <url-pattern>/*</url-pattern>
       <http-method>GET</http-method>
       <http-method>POST</http-method>
     </web-resource-collection>
     <auth-constraint>
       <role-name>friend</role-name>
     </auth-constraint>
   </security-constraint>
  • The location, path or name of the users and roles configuration files i.e. jbossws-users.properties or jbossws-roles.properties can be changed by editing $JBOSS_HOME/server/all/conf/login-config.xml file. Sample configuration is given below.
    <application-policy name="JBossWS">
      <authentication>
        <login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule"
          flag="required">
          <module-option name="usersProperties">props/jbossws-users.properties</module-option>
          <module-option name="rolesProperties">props/jbossws-roles.properties</module-option>
          <!-- module-option name="unauthenticatedIdentity">anonymous</module-option -->
        </login-module>
      </authentication>
    </application-policy>
  • Restart JBOSS.

Note: this post is result from cut/copy/insert/modify from some others posts provided from jboss community; it belongs to us. Thanks all!

    Data Driven com Selenium IDE? Sim, é possível!


    28 Jan

    Post original blog “Sem Bugs (créditos Elias Nogueira)

    Selenium IDE com Data Driven? Sim, isto agora é possível!

    Observações iniciais
    Eu sempre tive uma postura de um profisisonal, quando em aprendizado do Selenium, aprender o IDE a fins educativos e de primeiro passo da automação (record & play), de usar e propor aos profisisonais e alunos que me procuram a usar o Selenium RC para fazer testes que exigem bem mais do que o IDE: loops, controles, parametrização de dados, etc…
    Mas desta vez resolvi postar sobre como fazer com que o Selenium IDE execute scrips Data Driven

    ATENÇÃO: Este post é uma alteração do post original da SauceLabs[1]  que você pode acessar no link abaixo:
    http://saucelabs.com/blog/index.php/2011/01/selenium-resources-for-newbs-data-driven-testing-with-ide-xml/

    Ainda mantenho fortemente a minha postura: usem o Selenium RC com qualquer linguagem para usar todo o poder que essa ferramenta pode dar a você. Um dos principais motivos de escrever este post é de:

    • Eu gostar destas coisas novas e ficar brincando com os scripts
    • De ajudar os nossos amigos profissionais que ainda não sabem falar inglês e não poderiam entender o post original (e que devem levar um puxão de orelha por isso)
    • Para poder ajudar aqueles que estão aprendendo o Selenium IDE que, mesmo que este post ajude, você não vai poder fugir da programação para fazer coisas mais poderosas com a ferramenta

    [1] Pra quem não sabe o criados da SouceLabs, que presta serviços de teste com Selenium nas nuvens, é um dos criadores do Selenium.

    Ahh, e pra quem não sabe o que é Data Driven, é o “poder” de dar ao script a independência de dados através de parâmetros inseridos ao invés dos dados. Se você ainda não sabe o que é isso, Google!

    O que você vai precisar!
    Basicamente de um plugin e duas “user-extensions” do para o Selenium IDE.
    Primeiro siga estes passos:

    1. Instale o plugin de Flow Control. Necessita de reinicio do Firefox
    2. Baixe a user-extension includeCommand4IDE na versão 1.1
    3. Baixe a user-extension datadriven.js, que está na versão 0.2

    Clique nos links de cada item para baixá-lo!
    Instalou o Flow Control e baixou as duas user-extensions? Faça o seguinte:

    1. Descompacte os aruqivos zips das respectivas user-extensions num diretório de sua escolha
    2. Adicione as duas user-extensions no Selenium IDE via menu Options/Options… clicando no botão browser parao item Selenium Core extensions (user-extension.js) (vide Possiveis Erros #1)
    3. Reinicie o Selenium IDE

    Deu tudo certo? Maravilha! Vamos para os próximos passos!

    Criar o arquivo XML de Massa de Dados!
    Sim, para que seja possível fazer com que o script Selenese (script HTML do Selenium) esteja preparado para o Data Driven é necessário criar um arquivo XML que vai conter os dados que você vai utilizar!

    Uma coisa muito importante é primeiro enterder o arquivo XML!

    Entendendo o arquivo XML
    Abaixo está um exemplo do arquivo XML que estou usando de exemplo:

    A linha 1 possui a tag testdata. É ela que identifica que o arquivo XML é a tua massa de dados.

    As linhas 2, 3 , 4 e 5 possuem a tag test. Cada tag test é um indício de massa de dados que você vai utilizar no script. Dentro desta tag existem atributos. No exemplo acima os atributos são nome e sobrenome. Estes atributos serão os parâmetros do seu script do Selenium, que irão no formato ${nomeAtributo}.
    Neste caso eu tenho que colocar no meu script os parâmetros ${nome} e ${sobrenome} sem precisar criá-los anteriormente no script.

    A linha 6 fecha a tab do testdata

    Cada atributo tem um valor e é este valor que vai ser substituito pelo parâmetro no script. Lindo né?

    Você pode criar diversos test um para cada iteração do script que você necessita.

    Agora aconselho fortemente ler os itens #2, #3 e #4 do “Possiveis Erros”

    Script!! (êeeeee)
    Agora veremos o script final sobre o exemplo e todos os comandos necessários para que ele funcione!

    loadTestData file:///C:/selenium_datadriven/massa_dados.xml
    open /arquivos_blog/selenium/datadriven/
    while !testdata.EOF()
    nextTestData
    type nomePessoa ${nome}
    type sobrenomePessoa ${sobrenome}
    clickAndWait send
    assertTextPresent Olá, ${nome} ${sobrenome}
    clickAndWait link=Voltar
    endWhile

    Na linha 1 da tabela temos o comando que fará o carregamento da massa de dados com o comando loadTestData. Este comando é parte da user-extension datadriven.js.
    Você obrigatoriamente deve iniciar o valor deste comando com ‘file:///‘ (sem as aspas simples) seguido pelo caminho do arquivo XML (como no exemplo)
    Atenção, leia o #5 do Possíveis Problemas

    Na linha 2 da tabela temos o velho conhecido comando open para a minha página de exemplo deste post

    Na linha 3 da tabela temos o comando while, da user-extension FlowControl, que é responsável de fazer um loop no script. O valor deste comando é !testData.EOF() que traduzindo quer dizer: “enquanto o testData não terminar, ou seja, existam as tags test execute”. Ele que é responsável por controlar o número de execuções a partir das tags test existentes.

    Na linha 4 da tabela existe o comando nextTestData que pertence a user-extension datadriven.js. É ela que validará que existam dados na massa de dados (arquivos XML para continuar executando o script)

    Nas linhas 5, 6, 7, 8 e 9 existem os comandos básicos do Selenium para a interação com o exemplo. Aqui você precisa prestar muita atenção: ao invés de manter os valores fixos no script eu os substitui pelos parâmetro ${nome} e ${sobrenome}, que são os nomes dos atributos da tag test do XML da massa de dados, entendeu? É só colocar o mesmo nome e, acredite, ele preencherá com o valor.

    Na linha 10 da tabela há a finalização do loop pelo comando endWhile que pertence a user-extension FlowControl.

    Agora é só correr para o abraço!
    Pronto, tudo está pronto para execução com sucesso!
    Tu podes baixar o este exemplo por este link e testar ai!

    Se você executares o exemplo que você acabou de baixar, lembre-se de colocar na Base URL o endereço http://eliasnogueira.info

    Agora vamos falar sobre o exemplo:

    Exemplo utilizado!
    O exemplo é bem simples: consiste em um formulário de submissão de dados contendo o Nome e Sobrenome de uma pessoa. Após a submissão dos dados somos redirecionados para uma tela com a seguinte mensagem na página “Olá Fulano de Tal“, onde Fulano é o nome e de Tal é o sobrenome inserido!

    A página do exemplo pode ser acessada no link abaixo:
    http://eliasnogueira.info/arquivos_blog/selenium/datadriven/index.php

    Observação: cuidado para este item não confundir você, mas se for criar um script sobre uma página ajax ou não quer clicar em algum link de voltar, utilize o comando goBackAndWait antes do comando endWhile. Este comando fará com que o script emule o “voltar” do browser.

    Possíveis Erros

    1. Se você não colocar as extensões no lugar certo receberá a seguinte mensagem logo que abrir o Seleium IDE: “error loading Selenium IDE extensions: ReferenceError: Selenium is not defined”. Então garanta que você colocou no campo certo (olhe a imagem)
    2. Elias, posso mudar o nome da tag testdata? Resposta: não! Sem esta tag o script não roda, é obrigatória!
    3. Elias, posso mudar o nome da tag test? Resposta: não! Sem esta tag o script não roda, é obrigatória!
    4. Elias, posso utilizar parâmetros diferentes entre os testes? Resposta: Sim! desde que os parâmetros obrigatórios estejam la. Se tu não entendeu, deixe todos iguais e o script vai rodar sem erros!


    Abraço a todos vocês e bom divertimento!

    JBoss: Application server baixa, mas as conexões continuam ativas no Oracle


    28 Jan

    Contribuição Marcos Esplugues

    A conexão de fato não existirá mais desde que o application server esteja desligado; quem estaria ligado então? Só faltaria desligar a máquina e a conexão continuar… onde estará o problema.

    Realmente não tem nada a ver com a aplicação. O Oracle mantém as sessões porque ele não sabe que o client caiu. Há um parâmetro que pode  ser configurado no arquivo sqlnet.ora que faz com que o Oracle, de tempos em tempos, verifique se o cliente está vivo. É o sqlnet_expire_time, configurado em segundos. Um valor muto baixo pode causar excesso de tráfego de rede. Um valor muito alto pode não ter serventia. A Oracle recomenda colocar 10 segundos neste parâmetro:

    SQLNET.EXPIRE_TIME=10

    É importante que isso não seja passado como uma recomendação ao cliente, mas como uma sugestão ao DBA do ambiente.

    I Hack’n Rio


    06 Jan

    Divulgando – origem: http://www.riojug.org/?p=195

    O maior evento de software livre do Rio de Janeiro: I Hack’n Rio

    Aproveitando toda força e união que as comunidades de Software Livre têm de promover eventos no estado do Rio, a SL-RJ (Comunidade de Software Livre do Rio de Janeiro), em conjunto com as comunidades ArduInRio, Android In Rio, DojoRio, PHP Rio, PythOnRio, Rio.pm, RioJUG, RubyOnRio e Ubuntu-RJ, vêm apresentar o I Hack’n Rio !

    Apesar da palavra “hacker” atualmente estar associada a uma pessoa que explora falhas de segurança em computadores e tenta prejudicar outros, no sentido original da palavra, ela designa alguém que é profundo conhecedor de algum assunto e utiliza maneiras criativas de resolver problemas. Por isso, o Hack’n Rio não é um encontro de usuários malignos de computador, mas sim de profundos estudiosos de computação, mais especificamente software livre, e pessoas que estão buscando este conhecimento.

    A idéia do I Hack’n Rio surgiu quando os entusiastas de diversas comunidades de Software Livre se encontravam nos eventos promovidos pelo nosso estado, e sempre chegavam a uma mesma conclusão: está na hora de convergir. Convergir todos os eventos específicos de cada comunidade em um só grande evento, falar e fazer sobre tudo que se vê de novidades em cada tecnologia livre adotada em nosso estado.

    O grande diferencial deste evento é que ele está sendo feito por todas as comunidades. E isto quer dizer que não há a centralização de tudo numa comissão organizadora só, mas sim a distribuição da organização. Cada comunidade contribuinte terá seu espaço no evento, para utilizar do melhor jeito que a mesma souber fazer.

    O nosso objetivo é realizar um evento de elevado grau técnico onde todos os participantes tenham oportunidade de aprender como as tecnologias livres funcionam a fundo e também como contribuir para sua evolução.

    Por isso, planejamos a seguinte estrutura:

    • Quando? 8 e 9 de abril de 2011
    • Onde? Cidade Universitária da UFRJ, na Ilha do Fundão
    • Quantas palestras? 28
    • Quantos mini-cursos? 8
    • E o que mais? Muita mão na massa com 2 salas abertas para hackfests, como Arduino Hack Day!

    Você faz parte de uma das comunidades de software livre do estado? Então você também é parte do I Hack’n Rio !

    Ajude a tornar o evento um sucesso procurando por patrocinadores, buscando por conteúdo relevante e chamando pessoas que fazem as coisas acontecerem – seja construindo coisas novas, seja contribuindo com projetos já existentes.

    Algumas sugestões:

    • Patrocinadores: empresas que usam software livre e querem contribuir para sua evolução; empresas prestadoras de serviço ou desenvolvedoras de softwares livres que querem encontrar talentos para contratarem (as empresas podem até mesmo fazer uma espécie de “O Aprendiz” e oferecer vagas de empregos, se desejarem) e divulgar seu nome e serviços.
    • Conteúdo: não pense só em palestras e mini-cursos, pois isso temos em qualquer evento. Pense em encontros técnicos para correções de bugs ou desenvolvimento de novas aplicações ou novas funcionalidades para aplicações já existentes.

    Ziben IT Solutions

    Should be something about IT


    Switch to our mobile site