Evitar pedir usuário e senha em produção no WLS
Quando você realiza a criação de um domínio do WebLogic em modo de produção, ao iniciar o servidor ele solicita à você o usuário e senha administrativos.
Enter username to boot WebLogic server: Enter password to boot WebLogic server:
Para evitar isso e possibilitar a criação de scripts automáticos para inicialização do domínio WebLogic, é necessário criar um arquivo: boot.properties. Crie o arquivo em DOMAIN/servers/AdminServer/security/boot.properties com o seguinte conteúdo:
username=usuario password=senha
Substitua o “usuario” e “senha” pelo respectiva usuário e senha. Agora é só iniciar o WebLogic e você verá a seguinte linha no log.
<Jan 2, 2012 5:23:22 PM BRST> <Notice> <Security> <BEA-090083> <Storing boot identity in the file: /u01/Oracle/Middleware/user_projects/domains/wc_only_domain/servers/AdminServer/security/boot.properties>
Após o server subir, o arquivo será criptografado e a senha não será mais necessária!
Desabilitando o WS-Addressing no SOA Suite
Esses dias tive um problema com um projeto da Índia. O cliente, ao realizar a chamada pra um serviço que eu desenvolvi, recebia o seguinte erro:
A required header representing a Message Addressing Property is not present
Os testes realizados no SOAP-UI e cliente WS criado não apresentavam nenhum erro, então ficava difícil simular o ocorrido. Pela mensagem informada, podemos ter dois tipos de erro:
- O cliente está adicionando um header na requisição inválido
- Ou o servidor está esperando um header que o cliente não enviou
««« Clique aqui para ler o restante do conteúdo: Desabilitando o WS-Addressing no SOA Suite »»»
Centésimo post, J1, pizza com café e novidades
Esse é o centésimo post do blog… Até que enfim estou conseguindo tocar o blog! Já comecei o blog pelo menos 4 vezes e, finalmente, está dando bem certo. Descobri que o segredo para manter um blog não é querer escrever toda a hora ou escrever por obrigação, mas é escrever um pouquinho por vez quando dá e de algo que você goste ou esteja utilizando.
Junto com a novidade do centésimo post, nesse mês, vieram várias outras. Realizei um apresentação de TV Digital no Java One 2011, junto com o Carlos Fernando Gonçalvez e foi muito legal. Fui convidado para o Community Keynote do evento onde pude demonstrar a força da comunidade Java como membro do JavaNoroeste e a integração da TV Digital com o JHome para controle de equipamentos e automação residencial pela televisão. As fotos do evento e vídeos do Community Keynote, podem ser encontradas nesses links:
- Eu demonstrando a aplicação de TV Digital utilizando twitter. Twittado pela @yarasenger: http://twitpic.com/7q9e0r/full
- Álbum da Globalcode do Java One 2011: https://picasaweb.google.com/101683666840607649394/JavaOneBrasil201102
- Álbum do Marcelo Quinta: https://plus.google.com/photos/103787114309180546346/albums/5684287518153548609
- Blog do Neto: http://netomarin.com/blog/20111220/javaone-latin-america-2011-ultimos-dias-e-minha-palestra/
- Globalcoders: http://blog.globalcode.com.br/2011/12/javaone-brasil-2011-java-spotlight.html
- Blog da Loiane: http://www.loiane.com/2011/12/javaone-brasil-2011-video-do-community-keynote/
- Vídeo do Real Java Geeks: http://www.youtube.com/watch?v=BNJIjgFhpUA
Outra coisa bacana é o surgimento de um novo podcast do qual faço parte: o Pizza Com Café. A ideia surgiu da necessidade de reuniões mensais para troca de informações, mas por falta de tempo resolvemos realizar uma pizzada e gravar um podcast e dessa forma surgiu o Pizza com Café. Já temos uma gravação feita e em breve o podcast entra no ar!
Além dessas notícias, consegui tirar a certificação Oracle Certified Master, Java EE 5 Enterprise Architect. É uma certificação muito difícil e me senti obrigado à prestar após o anúncio da Oracle que para tirar essa certificação iria ser necessário realizar cursos oficiais Oracle como pré-requisito. Como eu já tinha a primeira fase (prestei beta), resolvi prestar as outras duas etapas restantes. Consegui passar logo de primeira, o que me deixou bastante feliz, já que pra mim essa é a prova mais difícil de tecnologia Java, pois envolve teoria, prática, muito conhecimento e experiência.
Obrigado à todos que contribuíram para todas essas realizações
Agora é só aguardar pelas novidades de 2012!
Habilitando o JPA 2 no WebLogic Server
Por padrão o WebLogic Server não vem com o JPA 2 habilitado. Então ao utilizar recursos específicos do JPA 2 dentro do WebLogic Server você pode ter erros semelhantes a esse: java.lang.NoSuchMethodError: javax.persistence.EntityManager.getCriteriaBuilder()Ljavax/persistence/criteria/CriteriaBuilder;
Para resolver esse problema é necessário colocar as libs do JPA 2 no início do classpath do WebLogic. As libs estão disponíveis no caminho $WL_HOME/modules e são as seguintes: javax.persistence_1.0.0.0_2-0-0.jar e com.oracle.jpa2support_1.0.0.0_2-0.jar.
Edite o arquivo setDomainEnv.[sh|cmd] e insira a variável PRE_CLASSPATH da seguinte maneira:
export PRE_CLASSPATH=$MW_HOME/modules/javax.persistence_1.0.0.0_2-0-0.jar:$MW_HOME/modules/com.oracle.jpa2support_1.0.0.0_2-0.jar
No windows, substitua o comando export por set e os dois pontos para ponto e vírgula. Altere o $MW_HOME para o home do middleware. Agora é só realizar deploy do seu aplicativo com JPA 2.
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 »»»
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 »»»
Desinstalando o JDeveloper
O mesmo procedimento para a desinstalação do JDeveloper poderá ser feito para desinstalar qualquer outro componente do Oracle Fusion Middleware. Lembrando que o mesmo não pode estar em execução.
Para desinstalar o JDeveloper, acesse a pasta $MW_HOME/utils/uninstall/ e execute o arquivo uninstall (sem extensão ou .sh no linux e .exe no windows).
Após a execução, irá abrir o Oracle Uninstaller.
««« Clique aqui para ler o restante do conteúdo: Desinstalando o JDeveloper »»»
NonCatalogLogger no WebLogic
O WebLogic possui um mecanismo de logging com vários recursos, inclusive internacionalização de mensagens de erro. Você pode encontrar informações de como configurar e utilizar de forma detalhada no seguinte endereço: http://download.oracle.com/docs/cd/E12840_01/wls/docs103/i18n/index.html.
O objetivo desse post é utilizar o NonCatalogLogger que é indicado para aplicações que não precisam de internacionalização de log ou para aplicações que executam em sua própria JVM.
««« Clique aqui para ler o restante do conteúdo: NonCatalogLogger no WebLogic »»»
Instalação e Configuração do Oracle ECM
Atenção (19/04/2011): Esse tópico está em revisão e provavelmente sofrerá revisões. Contribuições são bem vindas!
O Oracle Universal Content Management (Oracle UCM) faz parte do Oracle Enterprise Content Management (Oracle ECM) e é utilizado para gerenciamento de conteúdo multi-site.
O primeiro passo é instalar o esquema do Enterprise Content Management utilizando o RCU. Na minha base já está ok. Se você tiver dúvidas de como fazer isso consulte o link Oracle Service Bus e procure por RCU.
Faça o download do Oracle UCM: http://www.oracle.com/technetwork/middleware/content-management/downloads/index-085241.html. Descompacte os dois zips. Acesse a pasta Disk1 e digite o seguinte:
./runInstaller
Informe o caminho do JRE/JDK. O instalador irá abrir.
Clique em Next. Escolha Skip Software Updates, se você não tiver Oracle Support, caso contrário, informe e clique em Search For Updates. Nessa versão que estou utilizando no momento não havia nenhum update. Clique em Next. Como eu estou instalando em um Ubuntu e ele não é homologado para softwares da Oracle, nessa próxima etapa haverá alguns erros de pré-requisito. Se você utilizar um SO homologado, verifique os erros ocorridos (se tiver), caso contrário clique em Continue.
Informe o caminho onde está instalado o WebLogic Server. Se você quiser pode alterar o Home Directory. Clique em Install na próxima tela. Aguarde o término da instalação e clique em Next. Clique em Finish.
Instalação concluída. Agora é necessário configurar os domínios. Cada aplicação deve ser instalada em seu próprio managed server ou cluster. Para a criação dos domínios, execute o utilitário de configuração de domínio:
./$ECM_ORACLE_HOME/common/bin/config.sh
Selecione Create new WebLogic domain e clique em Next. Marque os seguintes produtos:
- Oracle Universal Records Management Server
- Oracle Information Rights Management
- Oracle Universal Content Management – Inbound Refinery
- Oracle Universal Content Management – Content Server
- Oracle Imaging and Process Management
Clique em Next. Informe o nome do domínio, se quiser alter a localização e caminho das aplicações e clique em Next. Informe o usuário administrativo e senha e clique em Next. Selecione Development Mode (no nosso caso), escolha a JDK e clique em Next. Informe os dados de conexão com o banco criado anteriormente com o RCU e clique em Next.
Verifique se foi tudo bem sucedido e clique em Next. Clique em Next se não tiver nenhuma configuração adicional a ser feita. Clique em Create para criar o domínio. Clique em Done para finalizar.
Agora é necessário configurar os parâmetros de inicialização dos managed servers. Inicie o admin server:
./$DOMAIN_HOME/startWeblogic.sh
Aguarde o domínio iniciar e acesse o console: http://localhost:7001/console
Efetue o login e clique em Environment, Servers, faça o seguinte para cada servidor. Selecione ele, clique em Server Start. Na caixa Arguments, se a sua JVM for Sun, informe o seguinte:
Se for JRockit:
Clique em Save.
Vamos subir o Oracle IBR utilizando o console, caso prefira pode subir via linha de comando. Habilite o NodeManager caso já não tenha feito:
./$MIDDLEWARE_HOME/oracle_common/common/bin/setNMProps.sh
Inicie o Node Manager:
./$MIDDLEWARE_HOME/wlserver_10.3/server/bin/startNodeManager.sh &
Vá em Environment, Machines, clique em New para criar uma nova Machine. Dê um nome e clique em Finish. Se você configurou os domínios em máquinas diferentes, crie uma Machine pra cada uma e configure adequadamente. Vá em Environment, Servers. Selecione cada Server, associe cada Machine e clique em Save.
Acesse o console do domínio, vá em Environment, Servers, Control, marque o IBR_server1 clique em Start. Após iniciar acesse o IBR (Inbound Refinery). Aqui na minha máquina é o seguinte endereço: http://localhost:16250/ibr/
Verifique as configurações e altere se necessário. Mais informações sobre os parâmetros, consulte o seguinte site: http://download.oracle.com/docs/cd/E17904_01/doc.1111/e14495/configibr.htm#INECM1225. Clique em Submit. Reinicie o servidor do IBR seguindo o mesmo procedimento para Iniciar, mas executando o Shutdown e depois o Iniciar.
Para utilizar o Oracle I/PM, Oracle IBR ou o Oracle UCM Dynamic Converter é necessário configurar as fontes TrueType. Faça o procedimento descrito aqui. Acesse novamente o ibr, faça o login. Dessa vez você deverá ter o seguinte alerta:
The location of available fonts has not been set. You must set font path on the General OutsideIn Filter Options page. The font directory is used to generate font images when creating thumbnails and direct conversions to PDF. For more information, see the documentation.
Selecione Convert Settings, Third-Party Application Settings, General OutsideIn Filter Options. Clique em Options. Informe o caminho das fontes, no meu caso: “/usr/share/fonts/truetype/msttcorefonts”. Clique em Update. O alerta deverá sumir.
Alguns utilitários podem utilizar o libstdc++5. Instale com o comando:
sudo apt-get install libstdc++5
Agora é necessário realizar as configurações após instalação. Inicie todos os managed servers (ou inicie cada um a medida que for necessário). Acesse o Content Server e faça o login. Abrirá tela de configuração. Edite para os parâmetros desejados, no meu caso utilizarei FullText Search Option com a opção Internal que irá utilizar o OracleTextSearch do banco de dados. Para mais informações dos parâmetros de configuração, consulte essa documentação: http://download.oracle.com/docs/cd/E17904_01/doc.1111/e14495/configucm.htm#INECM1147. Os valores poderão ser alterados posteriormente modificando o arquivo $DOMAIN_HOME/ucm/cs/config/config.cfg e reiniciando o server. Clique em Submit. Reinicie esse servidor.
Acesse o Oracle I/PM (Imaging and Process Management) pelo seguinte endereço: http://localhost:16000/imaging. Caso você obtenha 404 (Not Found), verifique se o deploy foi feito corretamente pelo console e consulte o log do managed server: $DOMAIN_HOME/servers/IPM_server1/logs/IPM_server1.out. No meu caso o CRC do EAR estava corrompido. Se esse for o seu caso, siga as instruções descritas nesse post.
Após acessar, efetue o login. O primeiro usuário que acessar a aplicação terá acesso completo. Essas permissões poderão ser alteradas posteriormente. O próximo passo é criar uma conexão com o Content Server para que o Oracle I/PM possa conversar com o UCM. Acesse Manage Conections e no ícone da lateral direita da barra selecione Create Content Server Connection. Informe um nome e clique em Next. Selecione Use Local Content Server se a instalação foi feita na mesma máquina, caso contrário adicione um elemento no Content Server Pool especificando a localização do Content Server. Clique em Next. Adicione os usuários que terão acesso e clique em Next. Revise e clique em Submit.
A próxima etapa é configurar o GDFontPath MBean para que ele ache as fontes TrueType e possa ser feita as conversões corretamente. Acesse o Enterprise Manager: http://localhost:7001/em e faça o login. Expanda o nó Application Deployments e selecione imaging (IPM_server1). No menu Application Deployment selecione System MBean Browser. Expanda o nó Application Defined MBeans, oracle.imaging. Expanda os nós Server: IPM_server1 e config. Clique em config. Especifique o caminho das fontes TrueType (o mesmo feito anteriormente) no atributo GDFontPath, clique em Apply e reinicie o Oracle I/PM.
Oracle I/PM configurado. Vamos configurar o Oracle Information Rights Management (Oracle IRM). Acesse o Enterprise Manager, expanda Content Management e Information Rights Management e clique em IRM. No menu IRM, selecione Administration e General Settings. Informe a URL do servidor terminando em irm_desktop. Essa URL será utilizada na assinatura de cada documento. Portanto, após assinar um documento é expressamente não recomendado a alteração dessa URL. Clique em Apply.
Crie um Key Store seguindo os procedimentos descritos aqui. Copie o arquivo gerado para a pasta “$DOMAIN_HOME/config/fmwconfig”.
Acesse o Enterprise Manager. Expanda o Content Management e o Information Rights Management. Clique no IRM. No menu IRM, selecione Administration e General Settings. Informe o caminho completo do JKS ($DOMAIN_HOME/config/fmwconfig) na seção Keystore Settings, Path. Clique em Apply.
A próxima etapa é adicionar as senhas do keystore no credential store. Para essa etapa, acesse o WSLT:
./$MW_HOME/oracle_common/common/bin/wlst.sh
Digite o seguinte:
connect('weblogic','weblogic1','t3://localhost:7001')
createCred("IRM","keystore:irm.jks","qualquercoisa","password")
createCred("IRM","key:irm.jks:oracle.irm.wrap","qualquercoisa","password")
Onde weblogic e weblogic1 é o seu usuário e senha administrativo. Como o keystore não armazena o nome do usuário, você pode colocar qualquer coisa no parametro qualquercoisa e o password é a senha do keystore.
— Conteúdo a ser revisto
Iremos agora configurar o one-way SSL para ambiente de desenvolvimento. Execute o script para setar as variáveis de ambiente. Verifique que existe um ponto (.) antes. Isso é importante para setar as variáveis de ambiente para o shell corrente.
. ./$MW_HOME/wlserver_10.3/server/bin/setWLSEnv.sh
Utilize o CertGen para gerar a chave privada e o certificado. Substitua a senhaDaChave pela senha da chave e hostname pelo hostname da máquina.
java utils.CertGen -selfsigned -certfile MyOwnSelfCA.cer -keyfile MyOwnSelfKey.key -keyfilepass senhaDaChave -cn "hostname"
Você deverá ter a seguinte saída: “Generating a self signed certificate with common name hostname and key strength 1024″.
java utils.ImportPrivateKey -keystore MyOwnIdentityStore.jks -storepass identitypass -keypass keypassword -alias trustself -certfile MyOwnSelfCA.cer.pem -keyfile MyOwnSelfKey.key.pem -keyfilepass mykeypass
— Fim do conteúdo a ser revisto
Agora é hora de configurar o Oracle URM. Acesse o endereço: “http://localhost:16300/urm”. Verifique as configurações e clique em Submit. Reinicie o servidor. Acesse novamente e faça o login. Um alerta irá aparecer: “Initial Records Management setup is not complete!”. Clique no link do alerta. Faça as configurações pendentes. Verifique cada item e faça as devidas alterações. Marque todos os campos de seleção após verificar cada um deles e clique em Submit quando terminar. Reinicie o servidor e sigas as instruções em tela. Para mais informações consulte o link: http://download.oracle.com/docs/cd/E17904_01/doc.1111/e14538/qiecm.htm#BJCCEAGH.
Feito!
Maiores informações em: http://download.oracle.com/docs/cd/E17904_01/doc.1111/e14538/qiecm.htm#BJCCEAGH
Para utilizar verifique o link: http://download.oracle.com/docs/cd/E17904_01/doc.1111/e10797/toc.htm
Correção para Bug no Oracle I/PM
Fiz a instalação do Oracle ECM no Linux e um dos seus componentes o Oracle I/PM estava com defeito. O arquivo imaging-ui.war dentro do imaging.ear estava corrompido e com CRC inválido por algum motivo que eu desconheço. O erro no console foi o seguinte:
weblogic.management.DeploymentException: invalid entry CRC (expected 0x4aecad02 but got 0xf805ccae) at weblogic.application.internal.EarDeploymentFactory.findOrCreateComponentMBeans(EarDeploymentFactory.java:193) at weblogic.application.internal.MBeanFactoryImpl.findOrCreateComponentMBeans(MBeanFactoryImpl.java:48) at weblogic.application.internal.MBeanFactoryImpl.createComponentMBeans(MBeanFactoryImpl.java:110) at weblogic.application.internal.MBeanFactoryImpl.initializeMBeans(MBeanFactoryImpl.java:76) at weblogic.management.deploy.internal.MBeanConverter.createApplicationMBean(MBeanConverter.java:89) Truncated. see log file for complete stacktrace Caused By: java.util.zip.ZipException: invalid entry CRC (expected 0x4aecad02 but got 0xf805ccae) at java.util.zip.ZipInputStream.readEnd(ZipInputStream.java:396) at java.util.zip.ZipInputStream.read(ZipInputStream.java:156) at java.util.zip.ZipInputStream.closeEntry(ZipInputStream.java:100) at java.util.zip.ZipInputStream.getNextEntry(ZipInputStream.java:78) at weblogic.application.internal.WebServiceUtils.isWebService(WebServiceUtils.java:273) Truncated. see log file for complete stacktrace > <Apr 6, 2011 7:05:51 PM BRT> <Error> <Deployer> <BEA-149205> <Failed to initialize the application 'imaging' due to error weblogic.management.DeploymentException: invalid entry CRC (expected 0x4aecad02 but got 0xf805ccae). weblogic.management.DeploymentException: invalid entry CRC (expected 0x4aecad02 but got 0xf805ccae) at weblogic.application.internal.EarDeploymentFactory.findOrCreateComponentMBeans(EarDeploymentFactory.java:193) at weblogic.application.internal.MBeanFactoryImpl.findOrCreateComponentMBeans(MBeanFactoryImpl.java:48) at weblogic.application.internal.MBeanFactoryImpl.createComponentMBeans(MBeanFactoryImpl.java:110) at weblogic.application.internal.MBeanFactoryImpl.initializeMBeans(MBeanFactoryImpl.java:76) at weblogic.management.deploy.internal.MBeanConverter.createApplicationMBean(MBeanConverter.java:89) Truncated. see log file for complete stacktrace Caused By: java.util.zip.ZipException: invalid entry CRC (expected 0x4aecad02 but got 0xf805ccae) at java.util.zip.ZipInputStream.readEnd(ZipInputStream.java:396) at java.util.zip.ZipInputStream.read(ZipInputStream.java:156) at java.util.zip.ZipInputStream.closeEntry(ZipInputStream.java:100) at java.util.zip.ZipInputStream.getNextEntry(ZipInputStream.java:78) at weblogic.application.internal.WebServiceUtils.isWebService(WebServiceUtils.java:273) Truncated. see log file for complete stacktrace >
Recuperei o arquivo, descompactei e regerei o respectivo WAR. Por sorte nenhum arquivo perdido. Substitui adequadamente no EAR. Fiz um update no imaging.ear e iniciei a aplicação novamente. Acessei a aplicação e tudo funcionando adequadamente. Não sei se tive azar ou se é um bug próprio da Oracle. Caso alguém tenha o mesmo problema que eu, estou disponibilizando a versão corrigida que gerei.
















