quinta-feira, 11 de março de 2010

Instalar OC4j no Ubuntu

Esses tempos tive que instalar o OC4J para trabalhar.

Então resolvi fazer esse post para não sofrer novamente com algumas configurações.


Instalação

Bom a instalação foi tranquila.
Segui os passos da documentação da Oracle e não tive problemas: http://download.oracle.com/docs/cd/B25221_04/web.1013/b14432/install.htm

Atenção com os paths das variáveis de ambiente!

Ativar o Enterprise Manager

Para ativar no Enterrpise Manager, executei o seginte comando:
java -jar jazn.jar -activateadmin oc4jadmin

OBS: o valor oc4jadmin é a senha que será utiliza para acessar o Enterprise Manager.

O output foi:
This option has been deprecated.
Please start the OC4J server to set the administrator's password. If the OC4J administrator account has already been activated, use the Application Server Control Console or the Admintool to change the password for this account.

Startar o Servidor

Para startar o servidor:
../../bin/oc4j -start

E startou na porta 8888


Para alterar a porta, ou descobrir qual está rodando, o arquivo com essa informação é:
/opt/servers/oc4j_extended_101350/j2ee/home/config/default-web-site.xml


Arquivos de Configuração

Como está descrito na nesta documentação, a estrutura básica do arquivo .ear é a seguinte:
AppName.ear
|_ META-INF\
|_ application.xml
|_ EJB .jar
|_ Web Application .war
|_ Resource Adapter .rar
|_ Application Client.jar
|_ Dependency Library.jar

Existe um arquivo proprietário do oc4j que contem informações do deploy da sua aplicação, no OC4J. Esse arquivo é o orion-application.xml.

Nesta outra página da documentação do OC4J tem a descrição completa da estrutura dos arquivos EAR, com os arquivos proprietários do OC4J.

Esse arquivo fica armazenado no diretório META-INF dentro do arquivo EAR. Conforme abaixo:

AppName.ear
|_ META-INF\
|_ application.xml
|_ orion-application.xml
|_ EJB .jar
|_ Web Application .war
|_ Resource Adapter .rar
|_ Application Client.jar
|_ Dependency Library.jar


Modo DEBUG e Parâmetros de Memória

Como eu não consegui rodar o OC4J "dentro" do eclipse, eu configurei ele para rodar em modo DEBUG.

Alterar a seguinte linha no arquivo "oc4j" que está na pasta bin:

$JAVA_HOME/bin/java -Xdebug -Xrunjdwp:transport=dt_socket,address=4999,server=y,suspend=n -Xms512m -Xmx1024m -XX:PermSize=128M -XX:MaxPermSize=256M $JVMARGS -jar $OC4J_JAR $CMDARGS

Esta linha configura para o servidor rodar em DEBUG e criar um socket na porta 4999 e também configura alguns parâmetros de memória. Para não ocorrer o famoso "perm gen error".



Era isso...






quarta-feira, 20 de janeiro de 2010

Spring Roo, a filosofia por trás do código...

Dae gurizada..

Esse post está guardado há uns 2 meses, então não reparem as datas... ;)

No último dia 09/Novembro fui no TDC, onde tive a satisfação de assistir a palestra do próprio Rod Johnson, sobre spring Roo.

Eu e o Rod. Os carecas.. hehehe


Na verdade o painel sobre Spring Roo não estava previsto para o evento de Floripa. Como o Chris Schalk da Google não pode entrar no Brasil, o Rod Johnson improvisou a apresentação. Valeu muito a pena!!!

Informações sobre o The Developer Conference - TDC:
Resumo do evento: tdc-2009-floripa-eu-fui


Então.. vamos lá...

O que é Spring Roo?

Spring Roo é um gerador de código, que faz isso de forma rápida e fácil (segundo a documentação...rsrsrs)

"A missão do Spring Roo é melhorar a produtivadade do desenvolvimento de aplicações java sem comprometer a engenharia, integridade ou flexibilidade." Ben Alex (Líder do projeto)

Para quem já mexeu com o Grails, o Spring Roo é bem semelhante. Até porque, o Spring Roo surgiu após a compra do G2One, dona do Grails, pela SpringSource.

O Spring Roo é feito para os "desenvolvedores desenvolverem". Parece estranho, mas o Roo é feito para quem gosta de escrever código. Esqueça os Wizards!!!!

Assim como o Grails, o Spring Roo fica "observando" o código que é escrito. Ele faz o"round-trip" do código se adaptando ao código alterado.

Quando você rodar o Roo o que vai acontecer??? Abrir um SHELL. Dessa forma através de linha de comando você executa a criação do seu projeto.



Historinha...

No painel do TDC o Rod Johson comentou que "roo" é um apelido para os cangurus. Roo também significa mola, já fazendo analogia a produtividade que ele proporciona.


Filosofia

O conceito do Roo é que o código java é do do Desenvolvedor. O Roo fica nos bastidores, observando o que é desenvolvido e auxiliando em alguns pontos.

A documentação define o Roo como "um pequeno gênio que fica setando em segundo plano fazendo coisas que eu não preciso me preocupar". Pequeno porquê a versão atual tem menos de 3mb, que lhe permite continuar com o modelo atual de desenvovimento de aplicações java com Spring e você não necessita adaptar novas tecnologias.

"Precisa alterar alguma coisa no código? Faça e deixe que o Roo se vire!"

Roo não fica no seu caminho, se você quiser reescrever alguma coisa faça, ele irá se adaptar e ajustar os arquivos relevantes.



A IDE


Roo

Está claro nos posts sobre o Roo que o objetivo é trazer produtividade ao desenvolvimento de aplicações java. Não tem como relacionar produtividade sem usabilidade quando falamos em ferramentas.

A grande preocupação é focar na tarefa do desenvolvedor. Por isso o Roo é um "shell", não um conjunto de wizards. Dessa forma, aproveita o "tab-compliting", funcionalidade que o desenvolvedor já está a costumado a utilizar.

O Roo não tem o objetivo de eliminar as IDEs, pelo contrário. Ele etende que a utilização de IDEs é importante, por isso continua executando o round-trip, enquanto os desenvolvedores trabalham com as IDEs normais. Não é necessário nenhum plugin para utilizaro Roo junto com IDEs. Apesar de o Spring Tool Suite ter integração com o Roo, viabilizado que o comandos sejam executados a partir do Eclipse.


Ajuda Contextualizada
Além do tab compliting foi desenvolvido um sistema de de dicas, que apresentam sugestões de o que deve ser feito, de acordo com as ações tomadas pelo usuário.

Exemplo da utilização da palavra "hint".

Na imagem acima, após digitar a plavra "hint", o Roo apresenta como proceder para cirar um projeto. Na figura abaixo, após ter criado o projeto e digitado "hint", o Roo indica que deve configurar um Data Provider para o projeto.




Um projetinho rápido

Bom.. vou colocar aqui os comandos que utilizei para criar um projeto e duas classes com relacionamento.
mkdir roo-sample
Digitei "hint" e o roo me dises que precisava criar um projeto. Segue:
project --topLevelPackage com.simundi.roosample
O hint me disse que precisava configurar o dataprovider. Usando o TAB compliting eu cheguei ao seginte comando
persistence setup --provider HIBERNATE --database HYPERSONIC_IN_MEMORY
OBS: eu digitei "persistence" e apertei TAB, o roo me ajudou a chegar ao resto do comando.

Agora, o hint me disse que precisava criar novas entidades. Basta escrever "ent" e usar o TAB.
entity --name ~Pessoa
OBS: o "~" que coloque antes do nome da classe indica que a classe será cirada no pacote padrão. Neste caso o pacote padrão é "com.simundi.roosample".

Adicionando um novo campo na classe, utilizei o seguinte comando:
field string --fieldName nome
OBS: se digitar "--" e apertar TAB, o roo vai mostrar todas as opções para o comando.
Exemplo: digite "field string --fieldName nome --" e aparte TAB.

Agora vou só colocar os comandos que executei:
field string --fieldName nome --sizeMax 50 --notNull
entity --name ~Endereco
field number --fieldName numero --type integer
field string --fieldName complemento
Roo no Eclipse

Um dos princípios do Roo é ser independente de plataforma. Então, importei o proejto criado no Eclipse Ganymede. Esse eclpse não tem nenhum plugin da SpringSource, apenas o plugin para o maven.

O Resultado do projeto é o seguinte:





Vou fazer outro post para explicar os arquivos .aj(aspecj), mas para que quiser se adiantar esse post pode sanar dúvidas: http://blog.springsource.com/2009/06/18/roo-part-3/

Em resumo o Roo tem o conceito de SoC(Separation of Concerns). Que separa o comportamento do objetos em pequenas partes. Por isso cada arquivo .aj tem um objetivo. Um é para implementar o comportamento do JavaBean(getters e setters), outro é para implementar os métodos de persistência do objeto( seguindo os princípios do DDD) e por ai vai...


Criar Add-ons
Não existe material sobre como criar add-ons para o Roo. O concelho do Rod é utilizar o Samples-WebFlow como modelo para criação de Add-Ons.

Esses temos perguntei para o Ben Alex pelo Twitter se tinha alguma pretenção utilizar JSF com o Roo. ele me informou que existiou uma frente de JSF no projeto, mas agora está em análise. mas existe um projeto Alpha, para integrar Flex no Roo. Isso vai ser show!!!


Links



Era isso...

segunda-feira, 21 de setembro de 2009

Desenvolverdor Java mudando de Windows para Linux(Ubuntu)



Dae guriazada...


No início do ano meu notebook estragou. Demorei uns 4meses para mandar arrumar. Mas consegui! :D:D:D

Então, resolvi mudar e largar de mão o windows vista.

Instalei o Ubuntu 9.04. Eu ja usava em dual boot o ubuntu 8. Mas utilizada mais o windows. Agora larguei de mão o windows.. (em partes... :p )

Abaixo vou colocar algumas dicas para o pessoal verde como eu..

Organização dos diretórios

A estrutura de diretórios é bem diferente. Eu não vou explicar cada estrutura, existem diversos links sobre isso. Vou falar como eu particionei meu HD.


Quem me deu essa dica foi o Giuliano, arquiteto de software na empresa que trabalho.

As dicas:
  • Separar a pasta /home em uma partição separada e com o maior espaço.
  • Utilizar ext4 para sistemas de arquivos
  • Criar uma partição boot com ext3, pois parece q o Gorme( o kra q faz boot do linux) tem que estar em uma partição desse tipo.
  • Colocar tudo que é coisa relacionada ao Java, na /opt.. jdk, servers, ides..



Cagadas:
  • Criei a partição boot muito grande. Coloque 1GB mas não foi utilizado nem 100mb.



Configuração do JAVA_HOME

Bom eu não quis uitlizar o Synaptic para instalar a JDK. Baixei no site e instalei.
No site do Ubuntu eles falaram em configurar o JAVA_HOME no arquvo /etc/bash.bashrc. Não consegui. O Giuliano me falou para fazer isso no arquivo /etc/profile e foi lah que fiz. Dae deu tudo certo.



Problemas com SVN Client
Para quem estava acostumado com o TortoiseSVN.. pode esquecer. No linux não tem essa barbada. Baixei o SmartSVN que é muito bom. Só é pago... :S

Problemas do SVN no Eclipse
Bom, instalei o Eclipse Galileo e tive problemas para configurar um plugin do SVN.

Instalei o Subeclipse pela próprioa URL de update do Galileo. Até então tudo tranquillo. Mas dae sempre que tentava conectar em um repositório aparecia uma mensagem sobre SVN Client não instalado ou coisa assim.

Existem dois tipos de SVN clients. Um é o tal de JavaHL, que é nativo, feito com recursos do SO. O outro é o SVNKit que é feito em java.

Então através do update do Eclipse instalei o SVNKit.

Essa é a URL: Subeclipse - http://subclipse.tigris.org/update_1.6.x



Bom era isso..

Abraço