Edição de regras em tempo de execução

Um recurso muito poderoso no Oracle SOA Suite é a possibilidade de edição de componentes de regras em tempo de execução. Para isso há uma ferramenta web, chamada SOA Composer. Para utilizá-la é necessário implantá-la no WebLogic.

Acesse o console do WebLogic. Vá em Deployments e procure pelo elementos composer. Se sua instalação for nova o status do composer deve ser Installed. Selecione ele, vá na aba Targets, selecione os checkboxes e clique em Change Targets. Escolha um servidor. Se você instalou o SOA com a opção SOA for Developer, só deverá ter o servidor Administrativo. Marque-o e clique em Yes. Volte para Deployments, e verifique se a aplicação está ativa, se não estiver, selecione o checkbox do composer e clique no botão Start, Servicing all requests.

Acesse a aplicação pelo endereço http://IP:PORTA/soa/composer. Efetue o login, clique em Open Rules. Nesse exemplo, vamos utilizar o composite desse post. Selecione o composite adequado. Nessa tela você pode visualizar as regras existentes. Para editar, clique no botão Edit. Vou mudar a idade de 18 para 21.

Oracle Composer

Oracle Composer

Clique em Commit e Yes e agora é só testar o serviço! As alterações já devem estar no ar, sem a necessidade de compilar ou mesmo realizar deploy da aplicação.

Regras no BPEL

O SOA Suite tem um componente muito bom para trabalhar com regras de negócios: o Oracle Business Rules. Ele permite a gente criar regras de maneira simples, utilizando estruturas IF/THEN ou tabelas de decisões que podem ser manipuladas em tempo de execução. O foco desse post é mostrar como utilizar esses componentes dentro de um BPEL, mas ele pode ser utilizado em conjunto com outros componentes ou como um serviço standalone inclusive.

Crie um projeto com um BPEL síncrono, conforme descrito neste post, mas sem o For Each. Altere o xsd do BPEL para que o input, seja do tipo integer. Entre o elemento receiveInput e replyOutput, arraste um componente de Business Rules. Dê dois cliques para editar e clique no “+” para adicionar um novo dicionário. Especifique um nome (IdadeOracleRules), clique em “+” e Add Input Variable, para adicionar uma variável de entrada. Selecione o nó Variables e clique em “+”. Informe o nome “idade”. Clique na lupa, selecione o xsd dentro de Project Schema Files e escolha o variável de entrada do processo (process). Na aba initialize, informe o seguinte XPath: $inputVariable.payload para inicializar a variável de entrada com o valor de entrada do processo. Clique OK e faça o mesmo para a variável de saída (output), mas sem a necessidade de inicializar, crie a variável com o nome mensagem. Você deverá obter o seguinte resultado:

««« Clique aqui para ler o restante do conteúdo: Regras no BPEL »»»

Exemplo BPEL com For Each

Uma dúvida muito comum para quem está iniciando em BPEL é como iterar sobre um array. Nesse post vou mostrar como realizar essa tarefa utilizando um elemento For Each. O primeiro passo é criar um projeto BPEL e adicionar o nó For Each. com os valores adequados.

Vá em File, New, SOA Application e clique OK. Dê um nome para a sua aplicação (no meu caso: ExemploForBPELApplication) e clique em Next. Dê um nome para o projeto (ExemploForBPELProject) e clique em Next. Selecione Composite With BPEL Process e clique em Finish. Informe os dados do processo (no nosso exemplo será síncrono) e clique em OK.

Create BPEL Process

Create BPEL Process

Abra o XSD criado. Altere a string de entrada para permitir mais de uma string de entrada. Altere o valor do minOccurs para 0 e do maxOccurs para unbounded. Altere o name para algo mais expressivo, como “nome”.

O resultado final é o seguinte:

««« Clique aqui para ler o restante do conteúdo: Exemplo BPEL com For Each »»»

Habilitar o acesso ao LDAP interno do WebLogic

Para configurar os usuários, o WebLogic utiliza uma base LDAP interna, como uma senha gerada aleatóriamente. Para ambientes de produção, o uso desse LDAP não é recomendado, mas para demonstrações e desenvolvimento precisamos em alguns casos habilitar o acesso à esses dados.

Para acessar o LDAP interno que já vem com o WebLogic, acesse o console e clique no nome do domínio. Acesse a aba Security e escolha a opção Embedded LDAP.

Embedded LDAP

Embedded LDAP

No campo Credential, informe uma nova senha, confirme ela logo abaixo e clique em Save. Reinicie o WebLogic.

Utilize o usuário: cn=Admin e a senha especificada para acesso. A url e porta de acesso são as mesmas do WebLogic. Para acessar você pode utilizar o JXExplorer ou qualquer outro client de LDAP.

 

Bug na criação do domínio do Oracle Identity Manager

Ao instalar o Oracle Identity Manager com a opção para criação do domínio o instalador pode trazer o seguinte erro:

Error creating ASInstance asinst_1.
Cause:
An internal operation has failed: java.lang.ExceptionInInitializerError

Caused by: java.lang.ExceptionInInitializerError
at javax.crypto.Mac.getInstance(DashoA13*..)
at oracle.security.crypto.cert.PKCS12.computeMAC(PKCS12.java:299)

Caused by: java.lang.SecurityException: Cannot set up certs for trusted CAs
at javax.crypto.SunJCE_b.<clinit>(DashoA13*..)

Caused by: java.lang.SecurityException: Cannot locate policy or framework files!
at javax.crypto.SunJCE_b.i(DashoA13*..)

Esse problema ocorre ao criar um novo domain pelo utilitário de configuração. Para resolver esse problema, você pode criar um novo domínio do WebLogic e utilizar o utilitário para estender o domínio criado. Dessa forma o erro não irá ocorrer!

Paths do produtos baseados no WLS

Alguns produtos da Oracle utilizam as informações encontradas no arquivo: $MW_HOME/wlserver_10.3/.product.properties para criação de domínios, configuração e afins.

O conteúdo do arquivo é similar a esse:

JAVA_HOME=/u01/jvm
javax.xml.parsers.SAXParserFactory=com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl
USER_LANGUAGE=en
NODEMGR_PORT=5556
WLS_INSTALL_DIR=/u01/Oracle/Middleware/wlserver_10.3
COHERENCE_HOME=/u01/Oracle/Middleware/coherence_3.6
LOCALE=ccjk
WLS_JAVA_HOME=/u01/jvm
javax.xml.parsers.DocumentBuilderFactory=com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl
WL_HOME=/u01/Oracle/Middleware/wlserver_10.3
java.vm.version=R28.1.4-7-144370-1.6.0_26-20110617-2130-linux-x86_64
MW_HOME=/u01/Oracle/Middleware
WLS_JAVA_VENDOR=Oracle
weblogic.server.modules.featurejar=/u01/Oracle/Middleware/modules/features/weblogic.server.modules_10.3.5.0.jar
javax.xml.transform.TransformerFactory=com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl
PLATFORMHOME=/u01/Oracle/Middleware/wlserver_10.3
WLS_PRODUCT_VERSION=10.3.5.0
java.vm.vendor=Oracle Corporation
BEAHOME=/u01/Oracle/Middleware
DOCSWEBROOT=http\://download.oracle.com/docs/cd/E17904_01/web.1111
CONFIGWIZ_HOME=/u01/Oracle/Middleware/wlserver_10.3
JAVAHOME=/u01/jvm

Para alterar o caminho do Java por exemplo, é só mudar as variáveis JAVA_HOME, JAVAHOME e WLS_JAVA_HOME.

Outro local para alteração das variáveis de ambiente é o: $MW_HOME/wlserver_10.3/common/bin/commEnv.sh

Remoção de ASInstances do Oracle Identity Manager

Para remover ASInstances de um domínio ou ASInstances remanescentes da remoção de um domínio de forma correta, basta executar o instalador do Oracle Identity Manager com a opção -deinstall:

./$MW_HOME/Oracle_IDM1/oui/bin/runInstaller -deinstall

Clique em Next na tela de Welcome e na próxima tela você poderá escolher as opções de remover o Oracle IDM, remover as ASInstances de um domínio existente ou remover as ASInstances que não possuem domínio.

Oracle Fusion Middleware 11g Deinstallation - Step 2 of 7

Oracle Fusion Middleware 11g Deinstallation - Step 2 of 7

Agora é só seguir o passo a passo e a remoção será bem sucedida.

Problema ao configurar o Oracle Identity Manager

Ao configurar o Oracle Identity Manager (criação de novo domínio) ele necessita saber a porta do Node Manager. Para isso ele acessa o arquivo nodemanager.properties e busca pelo atributo ListenPort. Caso não encontre esse arquivo, o instalador mostra o seguinte erro:

Number Format Exception thrown when trying to get nodemanager port.
Cause:
The Nodemanager Listen port entry is not present in the nodemanager.properties file or it is not set to numeric value.
Action:
Add the Nodemanager port (for example, ListenPort=5556) to the nodemanager.properties file and press Retry button to continue the configuration.

Para corrigir esse erro, basta seguir o que está descrito no erro. Abra o arquivo: Oracle/Middleware/wlserver_10.3/common/nodemanager/nodemanager.properties e adicione a seguinte linha:

ListenPort=5556

Agora é só clicar em Retry na configuração do Oracle Identity Manager e a configuração irá prosseguir.

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 »»»

Próxima Página »