Data souce Oracle no JBoss AS 7

Para configurar uma base de maneira adequada no JBoss AS 7 é necessário adicionar o driver JDBC dela como um módulo. Para realizar esse procedimento crie uma pasta para colocar o driver do Oracle:

mkdir $JBOSS_HOME/modules/com/oracle/ojdbc6/main

Faça o download adequado do driver no site: http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html

Copie o driver do Oracle (ojdbc6.jar) para a pasta recém criada e crie um arquivo module.xml com o seguinte conteúdo:

<module xmlns="urn:jboss:module:1.0" name="com.oracle.ojdbc6">
  <resources>
    <resource-root path="ojdbc6.jar"/>
  </resources>
  <dependencies>
    <module name="javax.api"/>
  </dependencies>
</module>

««« Clique aqui para ler o restante do conteúdo: Data souce Oracle no JBoss AS 7 »»»

Resolvendo problemas de encoding no Linux

Para quem trabalha em equipes que desenvolvem em Windows e não se preocupam com encoding ou em projetos que foram desenvolvidos somente em Windows e executam em servidores Linux ou precisam ser desenvolvidos em Linux, um problema recorrente é a abertura de arquivos com encoding ISO-8859-1 (ou Cp1252/Windows-1252, um superset do ISO-8859-1). No Linux, esses arquivos ficam com pontos de interrogação onde existem caracteres especiais (acentuação, cedilha, …).

««« Clique aqui para ler o restante do conteúdo: Resolvendo problemas de encoding no Linux »»»

Otimizando o JDeveloper

Estou utilizando a versão 11.1.1.5.0 generic no Linux, mas para outras plataformas as configurações são similares. O arquivo principal de configuração (jdev.conf) do JDeveloper está localizados na pasta $MW_HOME/jdeveloper/jdev/bin.

A primeira linha desse arquivo indica onde temos outras configurações: IncludeConfFile ../../ide/bin/ide.conf. O primeiro passo é abrir esse arquivo (ide.conf) e alterar os parametros Xmx e Xms. O parâmetro Xms é referente à quantidade de memória heap inicial a ser utilizada e o Xmx é a quantidade máxima. Minha máquina possui 8GB de RAM. Para o meu JDeveloper, 2GB de máximo e 1GB de mínimo é suficiente. O recomendado é 1/4 do total de memória que a máquina possua, mas você deve levar em consideração que poderá subir outros servidores e outras aplicações que irão consumir memória. Então aumentar muito esse valor, pode fazer com que a sua máquina utilize swap e, ao invés de deixar o JDeveloper mais rápido, sua máquina irá acabar ficando mais lenta. Então eu alterei minha máquina para os seguintes valores: “AddVMOption  -Xmx2048M” e “AddVMOption  -Xms1024M”.

««« Clique aqui para ler o restante do conteúdo: Otimizando o JDeveloper »»»

Desconto no TDC e comida grátis!!!

qrcode-1711Vai ter um super evento nessa próxima semana em São Paulo: The Developers Conference!

O evento é um dos maiores do Brasil e é composto por várias trilhas atendendo todos os gostos do mundo de desenvolvimento. Esse ano ele está maior e melhor e será realizado durante o lançamento do Java 7 e contará com a presença de nomes importantes do mundo de desenvolvedores e T.I. em geral.

««« Clique aqui para ler o restante do conteúdo: Desconto no TDC e comida grátis!!! »»»

Manipulando Token de Segurança

qrcodeEsses dias tive um desafio bem bacana, que foi gravar e ler informações em um dispositivo de segurança programado em Java. O dispositivo é o Alladin eToken Pro 72K (Java).

eToken

eToken

Utilizei ele para autenticação de duas vias, conforme descrito nesse post, mas foi necessário armazenar algumas informações de segurança para aderir a requisição de um cliente na implantação dos requisitos impostos pelo PCI Security Standards Council na criptografia de dados, para não cair na mesma falha que a Playstation Network.

««« Clique aqui para ler o restante do conteúdo: Manipulando Token de Segurança »»»

Instalando o Java do jeito Ubuntu 11.04

qrcodePara instalar o Java (tanto JRE quanto JDK) no Ubuntu 11.04, o procedimento é similar ao do 10.10. Habilite o repositório de parceiros: acesse System, Administration, Synaptic Package Manager. Acesse Settings, Repositories, Other Software e habilite os repositórios do Canonical Partners. Feche o Synaptic, acesse o terminal e digite o seguinte (você pode instalar esses pacotes pelo Synaptic também):

««« Clique aqui para ler o restante do conteúdo: Instalando o Java do jeito Ubuntu 11.04 »»»

Aplicações Nativas (C/C++) no Android

qrcodeEm alguns casos quando é necessário um controle fino de alocação e desalocação de memória, por exemplo, em trechos com estruturas de dados específicas e onde o desempenho através do controle do uso de memória é essencial, o Android oferece o mesmo recurso que o Java SE (JNI) para chamadas de código nativo na plataforma. Esse tipo de recurso deve ser utilizado com cautela, pois aumenta a complexidade do projeto e nem sempre aumenta o desempenho da aplicação. Caso você saiba o que está fazendo e as implicações do uso da linguagem C/C++ com o uso de ponteiros e alocação e desalocação de memória você poderá utilizar o Android NDK para isso.

««« Clique aqui para ler o restante do conteúdo: Aplicações Nativas (C/C++) no Android »»»

Ambiente de desenvolvimento Android

Para desenvolver na plataforma Android, a configuração do ambiente é muito simples. Irei executar os passos no Linux, mas o mesmo procedimento pode ser executado no Windows ou Mac sem grandes modificações.

O primeiro passo é fazer o download do SDK do Android no seguinte endereço: http://developer.android.com/sdk/. Faça também o Download do Eclipse (caso você não tenha): http://www.eclipse.org/downloads/. A versão Classic é mais leve e melhor para o desenvolvimento. Descompacte os dois arquivos: Android SDK e Eclipse. Para a versão do Android SDK no Windows, você tem a opção de utilizar um instalador, não sendo necessário descompactar.

Execute o Eclipse e escolha um workspace para desenvolvimento. Selecione Help, Install New Software, Add. Informe um nome e digite a seguinte URL: https://dl-ssl.google.com/android/eclipse/

Add Repository

Add Repository

Clique em OK. Marque Developer Tools e clique em Next. Clique em Next na próxima tela. Concorde com os termos e clique em Finish. Caso você tenha algum problema de segurança ou de autenticidade, clique em OK para prosseguir. Aguarde a instalação e clique em Restart Now.

Para configurar o Eclipse, vá em Window, Preferences. clique na aba Android. Ao clicar uma janela para envio de informações para o Google poderá ser exibida, clique em Proceed. Se você tiver problemas ao clicar, feche a janela de Preferences, clique em Proceed e abra novamente. Clique em Browse e informe o local que você descompactou o SDK e clique em Apply. Aparecerá uma mensagem que o SDK tools está faltando, clique em OK, pois iremos instalá-lo posteriormente.

Android SDK Verification

Android SDK Verification

Acesse Window, Android SDK and AVD Manager. Selecione Available Packages. Selecione Android SDK Platform-tools, Documentation for Android SDK (se você for querer a documentação para desenvolver), escolha os SDK Platform para os dispositivos que você vai querer desenvolver (a instalação de SDKs pode ser feita posteriormente), selecione Samples para ter exemplo de código de acordo com as versões de SDK Platform instalados. Recomendo também a instalação do Android Compatibility package para o desenvolvimento de aplicações para vários dispositivos. Caso queira trabalhar com mapas e recursos da Google, instale também o Google Inc. em Third party Add-ons. Clique em Install Selected. Na próxima tela, clique em Accept All e Install.

Choose Packages to Install

Choose Packages to Install

Caso solicite para reiniciar o ADB é só clicar em Yes. Clique em Close. Ambiente configurado!

Você pode também configurar o PATH para executar as ferramentas via linha de comando. Abra o seu arquivo: ~/.bashrc e digite o seguinte:

export PATH=${PATH}:$ANDROID_SDK/tools:$ANDROID_SDK/platform-tools

Substitua $ANDROID_SDK pelo caminho onde você descompactou o Android SDK. Digite: source ~/bashrc

Procure no site da fabricante do seu dispositivo Android também se há alguma outra ferramenta de desenvolvimento ou Add-on site para o Eclipse.

Agora é só configurar o emulador e começar a desenvolver sua aplicação. Abordarei isso em outro post.

Acessando o Xoom no Ubuntu

Ao plugar o Motorola Xoom no Linux, você não terá acesso direto ao dispositivo. Não há software (pelo menos eu não encontrei) da Motorola para o Xoom que tenha suporte ao Linux. Então após sofrer um pouco, testes e buscas em fóruns, conseguir fazer funcionar razoavelmente.

O primeiro passo é verificar as informações do dispositivo. Ligue o cabo o USB e digite: dmesg no console. Deverá aparecer uma linha semelhante à essa:

[ 8175.440025] usb 1-1: new high speed USB device using ehci_hcd and address 5

Isso significa que um dispositivo foi conectado no USB. Agora para recuperar as informações do dispositivo, digite: sudo lsusb -v no console. Irá aparecer todas as informações dos dispositivos USBs conectados. Procure pelo seguinte conteúdo.

Bus 001 Device 005: ID 18d1:70a8 Google Inc.
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0
  bDeviceProtocol         0
  bMaxPacketSize0        64
  idVendor           0x18d1 Google Inc.
  idProduct          0x70a8
  bcdDevice           99.99
  iManufacturer           1 Motorola
  iProduct                2 MZ604
  iSerial                 3 xxxxxxxxxx <-- diferente para cada disp.
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           39
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0
    bmAttributes         0xc0
      Self Powered
    MaxPower              500mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           3
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass    255 Vendor Specific Subclass
      bInterfaceProtocol      0
      iInterface              8 MTP
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x84  EP 4 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x05  EP 5 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x85  EP 5 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x001c  1x 28 bytes
        bInterval               6
Device Qualifier (for other device speed):
  bLength                10
  bDescriptorType         6
  bcdUSB               2.00
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0
  bDeviceProtocol         0
  bMaxPacketSize0        64
  bNumConfigurations      1
Device Status:     0x0001
  Self Powered

A linha 1 tem a informação resumida do que está descrito na linha 10 (Vendor) e 11 (Product). Com essas informações dá pra gente passar pro udev como criar nosso dispositvo. Para isso crie um arquivo: /etc/udev/rules.d/90-motorola-xoom.rules

# Meu Motorola Xoom
ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="70a8", ENV{ID_GPHOTO2}="1", ENV{GPHOTO2_DRIVER}="proprietary", ENV{ID_MEDIA_PLAYER}="1", ENV{ID_MTP_DEVICE}="1", MODE="0664", GROUP="audio"

Alguns dispositivos possuem o idVendor e idProduct diferentes, portanto, execute o lsusb para verificar o valor desses atributos. Reinicie o udev com o comando: sudo service udev restart

Desconecte e conecte novamente o dispositivo. E pronto! Dispositivo reconhecido. Você pode transmitir arquivos para ele, mas para isso ser feito de forma correta, é necessário aplicativos com o suporte ao protocolo MTP. No Ubuntu existem vários: Nautilus, Rhythmbox, Bashee, …

Atualização 12/08/2011: Após o update para versão 3.1 do Android o Xoom ficou com outro idVendor e idProduct: ID 22b8:70a9 Motorola PCS. Então foi necessário alterar o script novamente.

Classe Runtime

A classe Runtime é utilizada para se comunicar com o ambiente que a JVM está executando. Por exemplo: utilizamos ela para carregar DLLs (Windows) ou SOs (Linux), através do método load. Cada aplicação Java possui uma única instância e podemos obter essa instância através do método estático getRuntime(). A seguir temos um exemplo de alguns métodos bem bacanas dessa classe:

package br.com.thiagovespa.system.utils;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class SystemInfo {
	public static String execute(String command) {
		String s;
		StringBuilder result = new StringBuilder();
		BufferedReader stdInput = null;
		try {
			Process p = Runtime.getRuntime().exec(command);
			stdInput = new BufferedReader(new InputStreamReader(
					p.getInputStream()));
			while ((s = stdInput.readLine()) != null) {
				result.append(s).append("\n");
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (stdInput != null) {
				try {
					stdInput.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return result.toString();
	}
	public static void main(String[] args) {
		Runtime rt = Runtime.getRuntime();
		System.out.println("Número de processadores disponíveis: "
				+ rt.availableProcessors() + " \n");
		System.out.println(execute("free"));
		System.out.println("Memória disponível na JVM antes do GC: "
				+ rt.freeMemory() + " bytes de " + rt.totalMemory()
				+ " bytes - Máximo: " + rt.maxMemory() + " bytes");
		rt.gc();
		System.out.println("Memória disponível na JVM após o GC: "
				+ rt.freeMemory() + " bytes de " + rt.totalMemory()
				+ " bytes - Máximo: " + rt.maxMemory() + " bytes");
		rt.exit(0);
	}
}

Na linha 15 executamos um comando ou aplicativo externo. Para isso criei um método a parte. O exec possui várias sobrecargas podendo ser executado passando parâmetros, com variáveis de ambiente, entre outros. Nesse exemplo, ele executa o comando free do linux, e armazeno em uma String para exibir a quantidade de memória livre do sistema operacional. Esse mesmo código pode ser utilizado para executar qualquer comando ou aplicativo externo à uma aplicação Java. Existe a possibilidade de recuperar o stream de entrada, de saída e de erro para poder manipular o comando/aplicativo.

Na linha 41, tem um método interessante, que recupera a quantidade de processadores disponível para a máquina virtual. Esse recurso pode ser útil  no desenvolvimento de programas que executem código paralelo. Nas linhas 46 e 47, consigo monitorar a quantidade de memória livre, total e máxima alocada no momento para a aplicação Java.

A linha 48 é responsável por solicitar à JVM a execução do Garbage Collector para liberação de memória não referenciada. Pela especificação essa execução não é garantida, ao chamar esse método ele apenas sugere a execução. Uma outra forma de se chamar é pela classe System (System.gc()). Na linha 52 eu finalizo o programa com o código 0 (sem erro). Essa chamada não é necessária, mas ilustra um dos métodos da classe Runtime.

A saída desse programa é a seguinte:

Número de processadores disponíveis: 4
             total       used       free     shared    buffers     cached
Mem:       8193120    6553088    1640032          0     554160    2031860
-/+ buffers/cache:    3967068    4226052
Swap:      8193144          0    8193144
Memória disponível na JVM antes do GC: 124384688 bytes de 125698048 bytes - Máximo: 1866006528 bytes
Memória disponível na JVM após o GC: 124902352 bytes de 125698048 bytes - Máximo: 1866006528 bytes

Dessa maneira você pode ter um controle maior sobre sua aplicação e executar programas externos.

« Página AnteriorPróxima Página »