domingo, 3 de fevereiro de 2019

Instalando o OpenLDAP no Ubuntu

Neste post, vamos instalar o OpenLDAP no Ubuntu.

Com ele conseguimos executar testes locais com o Weblogic, Java ou qualquer outra aplicação que necessite de autenticação usando Active Diretory.

No momento da instalação, a versão do OpenLDAP é a 2.4.47. link

Precisamos baixar o Berkley DB, baixe a versão 5.3.28. link

Instalação:

Berkley DB:

Descompacte o arquivo e acesse o dir "build_unix"

execute o comando abaixo:

../dist/configure

Ao termino da execução execute:

sudo make install


OpenLDAP:

Descompacte o arquivo e acesse o dir.

Execute o comando abaixo:

export CPPFLAGS="-I/usr/local/BerkeleyDB.5.3/include/"
./configure


Execute o comando abaixo:

make depend

Execute o comando abaixo:

make

Execute o comando abaixo (o processo de test demora):

make test


Execute o comando abaixo:

sudo make install


Alterar o arquivo de configuração, execute:

sudo vim /usr/local/etc/openldap/slapd.ldif

DE:

PARA:

Importando a configuração para a base de dados, execute:

sudo mkdir /usr/local/etc/slapd.d
sudo /usr/local/sbin/slapadd -n 0 -F /usr/local/etc/slapd.d -l /usr/local/etc/openldap/slapd.ldif



Agora vamos inicializar o SLAPD, execute:

sudo /usr/local/libexec/slapd -F /usr/local/etc/slapd.d

Para checar se foi inicializado, execute o comando:

ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts


Vamos agora acrescentar uma entrada, execute:

vim ~/minhaempresa.ldif

E acrescente o conteúdo (certifique-se que não haja espaço em branco no fim de cada linha):

dn: dc=leonardosugahara,dc=com,dc=br
objectclass: dcObject
objectclass: organization
o: Minha Empresa
dc: leonardosugahara

dn: cn=Manager,dc=leonardosugahara,dc=com,dc=br
objectclass: organizationalRole
cn: Manager

Vamos importa o arquivo, execute o comando:

ldapadd -x -D "cn=Manager,dc=leonardosugahara,dc=com,dc=br" -w secret -f minhaempresa.ldif


Para verificar se funcionou, execute uma pesquisa com o comando:

ldapsearch -x -b 'dc=leonardosugahara,dc=com,dc=br' '(objectclass=*)'



Existem ferramentas para nos auxiliar a navegar, fazer pesquisas e manutenção de informações no OpenLDAP, vamos utilizar como exemplo o Apache Directory Studio. link

Execute o comando:

sudo apt-get install ldap-utils

Descompacte o arquivo, e execute o arquivo ApacheDirectoryStudio

./ApacheDirectoryStudio

Para criar uma conexão com o OpenLDAP, vá em "LDAP" -> "New Connection" e preencha com as seguintes informações:

Connection Name: OpenLDAP
Hostname: localhost



Click em "Next", selecione "Simple Authentication" e preencha os campos com:

Bind DN or user: cn=Manager,dc=leonardosugahara,dc=com,dc=br
Bind password: secret

Conectado:


Baixe o arquivo userAndGroup.ldif, e abra no Apache Directory Studio, e click na seta verde para executar, será criado os grupos e usuários.


segunda-feira, 28 de janeiro de 2019

Melhorando a performance do JDeveloper 12c

Abaixo alguns parâmetros que gosto de utilizar para um melhor desempenho no JDeveloper 12c.

Arquivo: <$ORACLE_HOME>/jdeveloper/ide/bin/ide.conf

AddVMOption  -Xms2560M
AddVMOption  -Xmx2560M

Arquivo: <$ORACLE_HOME>/jdeveloper/ide/jdev/jdev.boot

VFS_ENABLE = true
compiler.vmargs = -Xmx1024m

Arquivo: <$ORACLE_HOME>/jdeveloper/ide/jdev/jdev.conf

AddVMOption -DMainWindow.MemoryMonitorOn=true
AddVMOption -Dsun.java2d.ddoffscreen=false
AddVMOption -XX:+UseConcMarkSweepGC
AddVMOption -XX:+UseParNewGC
AddVMOption -XX:+CMSIncrementalMode
AddVMOption -XX:CompileThreshold=10000
AddVMOption -XX:+AggressiveOpts
AddVMOption -XX:+UseCompressedOops

Parâmetros para Jdeveloper 12.2.1.2 e JDK 8

quinta-feira, 24 de janeiro de 2019

Utilizando Split-Join no OSB 12c

Neste post, irei demonstrar a criação de um Split-Join e o ganho ao executar chamadas em paralelo.

O Split-Join é um componente que ajuda a melhorar a performance de um serviço processando em paralelo varias atividades em uma unica chamada.

Passos:

Primeiro criei 3 composite com 1 BPEL Process em cada, e configurei a atividade do tipo "wait" com 5s em cada.


No OSB Application, crie 3 business com os respectivos WSDL dos BPEL Process criado no passo anterior.




Crie um WSDL para o Slit-Join, o response será um elemento com todos os response dos 3 BPEL Process.


Com o WSDL gerado, click com o botão direito no diretório, vá em New -> Split-Join. Este mesmo processo pode ser feito arrastando o componente Split-Join para "External Service".



Em "Service Name" preencha com "TestSplitJoin" e click em "Next"


Escolha o WSDL gerado no passo anterior e click em "Finish"



Arraste o "Flow Control" do tipo "Parallel"




Arraste o "Communication" do tipo "Invoke Service" e aponte para um Business Service criado anteriormente.

Para a variável de request crie como "local".


Para a variável de response crie como "global", pois iremos utilizar ao final do fluxo para compor o response.

Arraste o "Assign Operations" do tipo "Assign" antes do "Invoke Service" e preencha com o payload para a chamada do BPEL Process.




Faça o mesmo procedimento para os outros dois Business Service.


Crie uma XQuery que receba como parâmetro os 3 responses e preenche o response do Split-Join.




Arraste o "Assign Operations" do tipo "Assign" antes de "Reply" e em "value", selecione "XQuery resources"


Selecione a xquery que foi gerado no passo anterior "splitjoin.xqy" e selecione as variáveis dos respectivos responses.




Crie um pipeline com as mesma chamadas, sequenciais para fazer uma comparação com os tempos de respostas.



Resultado dos testes:

Assim como os pipeline, podemos reutilizar o Split-Join em outros pipeline e não estar exposto como serviço.

Os fontes podem ser baixados aqui.

sábado, 22 de setembro de 2018

BPEL Configuration Properties - SyncMaxWaitTime

Caso tenha um processo BPEL que seja síncrono e esteja retornando o Fault abaixo, significa que o processo está levando mais tempo que o configurado na propriedade "SyncMaxWaitTime" (o default é 45 seg).

<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
   <env:Header>
      <tracking:faultId xmlns:tracking="http://oracle.soa.tracking.core.TrackingProperty">40002</tracking:faultId>
   </env:Header>
   <env:Body>
      <env:Fault>
         <faultcode>env:Server</faultcode>
         <faultstring>request-response conversation has timed out for component = default/SyncMaxWaitTimeProject!1.0*soa_08421ba4-74aa-41a5-a491-4fce027f0858/BPELProcess1, flowId = 70003</faultstring>
         <faultactor/>
         <detail>
            <exception/>
         </detail>
      </env:Fault>
   </env:Body>
</env:Envelope>

Para alterar esta propriedade, no EM vá em "SOA Infraestructure" -> "SOA Administration" -> "BPEL Properties".


Click em "More BPEL Configuration Properties...", e procure a propriedade  "SyncMaxWaitTime" e altere com o valor desejado.


domingo, 9 de setembro de 2018

Usando Coherence Adapter no SOA Suite 12c

Vou demonstrar neste post como utilizar o Coherence Adapter no SOA Suite 12c. Como no post Habilitando Result Caching - Business Service, vamos armazenar o resultado de uma consulta utilizando o Coherence Adapter.

Certificando que o Coherence Adapter está "active" no domínio.

Faça o login no console, vá em "deployments".



Se estiver "installed", click no "CoherenceAdapter", vá em "Targets" e adicione seu server e click em "save".


No JDeveloper, crie um projeto SOA, e vamos configurar o Coherence Adapter. Arraste o "Coherence Adapter" para "External Reference".


Vamos criar o adapter para recuperar informação do Coherence.

Atribua um "Name"



Para o exemplo utilizarei o JNDI "eis/Coherence/Local"


Selecione "Get" em "Operation"


Preencha o "Cache Name" com "adapter-local"


Irá aparecer a mensagem informando que o campo "Key" não foi informado, este campo iremos informar depois no BPEL.


Selecione o "Element Schema" que irá ficar em cache


Agora vamos configurar o adapter para incluir no Coherence. Arraste o "Coherence Adapter" para "External Reference", e preencha o campo "Name".


Para o exemplo utilizarei o JNDI "eis/Coherence/Local"


Em "Operation" escolha "Put"


Desabilite a opção "auto-generate key" e em "Cache Name" atribua "adapter-local". Em "Time to Live" vamos usar a opção default.


Escola o mesmo "Element Schema" da operação "Get".


Criei um DB Adapter (schema HR, tabela COUNTRIES, veja post HR Schema Oracle XE), caso o país não exista no cache, consulto e incluo no cache.


 Abra o BPEL, e inclua uma atividade de "Invoke", em "Partner Link" selecione o Coherence Adapter que geramos para exutar o "Get".


Click na aba "Properties" e click em "+", selecione a propriedade "jca.coherence.Key" e atribua uma variável ou uma expressão.


Crie uma condição, para verificar se houve retorno, se existir montamos o response do BPEL, caso não exista, vamos consultar no banco e incluir no cache.


Inclua uma atividade de "Invoke", em "Partner Link" selecione o Coherence Adapter que geramos para exutar o "Put".



Click na aba "Properties" e click em "+", selecione a propriedade "jca.coherence.Key" e atribua uma variável ou uma expressão.


Antes da atividade de "Invoke", inclua uma atividade de "Assign" e atribua os valores na variável de input gerada no passo anterior.


Fluxo:



Primeira execução:



Segunda execução: