BPMS, Dicas, JBoss, Middleware

JBoss BPM Suite: Project Deployment Override

In this post I want to share a useful tip for those working with Red Hat JBosTips & Tricks Seriess BPM Suite 6.x (based on Drools jBPM 6.2). During development phase is normal to redeploy your project many times to view/test your changes.images_branding_product-logos_bpm-suite-19

As you already know the JBoss BPM Suite offers a rich and powerful Workbench that supports the full BPM life circle (from design to deployment) – Business Central (Kie Workbench).

In the business-central every time you try to do a build your project It also tries to deploy in the jBPM runtime. BPMS-6.2-BuildDeploy

At this time the jBPM Deployment Manager checks for any existing project artifact with the same Maven GAV coordinates (Group Artifact Version). The Maven GAV coordinate uniquely identifies each project artifact deployed and managed by the BPMS. So when you try to redeploy your project without change the project version before, your Build & Deploy will fail.

JBoss BPM Suite Travel Agency Demo
JBoss BPM Suite Travel Agency Demo: https://github.com/jbossdemocentral/bpms-travel-agency-demo

In the server.log you can see the following error entry:

16:46:21,464 ERROR [org.jbpm.console.ng.bd.backend.server.DeploymentManagerEntryPointImpl] (http-/127.0.0.1:8080-8) Deployment of unit org.specialtripsagency:specialtripsagencyproject:2.0.1 failed: unit already deployed! (override deployment: false): org.jbpm.console.ng.bd.exception.DeploymentException: unit already deployed! (override deployment: false)

You can workaround this going to Process Deployments (top Menu > Deploy in the Business Central) and undeploy  the Process artifact.

BPMS-6.3-Undeploy

But doing this every time you want to test a change is very boring and time consuming.

To avoid this you can pass a System Property to the BPMS during the startup to instruct it to accept artifacts redeployment using the same Maven GAV coordinates.

Start you BPMS server instance using the following system property

./standalone.sh -Dorg.kie.override.deploy.enabled=true

Note: This approach is documented in the official Product documentation – Administration Guide (item 2.4).

Now you can redeploy your process’ project without having to change the project version every time you want t test a change. See the server.log snippet below showing the deployment of my project after our change:

17:53:21,654 INFO [org.drools.compiler.kie.builder.impl.KieRepositoryImpl] (http-localhost/127.0.0.1:8080-3) KieModule was added: MemoryKieModule[releaseId=org.specialtripsagency:specialtripsagencyproject:2.0.1]
17:53:21,945 INFO [org.jbpm.kie.services.impl.store.DeploymentSynchronizer] (http-localhost/127.0.0.1:8080-3) Deployment unit org.specialtripsagency:specialtripsagencyproject:2.0.1 removed successfully
17:53:21,947 INFO [org.jbpm.console.ng.bd.backend.server.DeploymentManagerEntryPointImpl] (http-localhost/127.0.0.1:8080-3) Deploying unit org.specialtripsagency:specialtripsagencyproject:2.0.1
17:53:22,392 INFO [org.drools.compiler.kie.builder.impl.KieRepositoryImpl] (http-localhost/127.0.0.1:8080-3) KieModule was added: ZipKieModule[releaseId=org.specialtripsagency:specialtripsagencyproject:2.0.1,file=/home/rsoares/.m2/repository/org/specialtripsagency/specialtripsagencyproject/2.0.1/specialtripsagencyproject-2.0.1.jar]
17:53:22,785 INFO [org.jbpm.kie.services.impl.store.DeploymentSynchronizer] (http-localhost/127.0.0.1:8080-3) Deployment unit org.specialtripsagency:specialtripsagencyproject:2.0.1 stored successfully

I hope this little tip help your JBoss BPM Suite usage during process development.

JBoss, Middleware

Montando um ambiente JBoss EAP 6 (Domain Mode) com Monitoramento e Gerência

Recentemente resolvi escrever um roteiro de como implementar um ambiente para hospedar aplicações corporativas desenvolvidas em JavaEE utilizando o Red Hat JBoss Enterprise Application Platform 6.

O ambiente proposto nesse roteiro utiliza uma stack inteiramente Red Hat. Existem vários roteiros disponíveis pela Internet utilizando as versões Community dos produtos JBoss Middleware: Wildfly, RHQ, Fedora etc. Eu particularmente recomendo um excelente roteiro escrito pelo colega Maurício Magnani em seu blog JBoss Divers:

A motivação de escrever “mais um” roteiro sobre este tópico surgiu após a realização de algumas Provas de Conceito (PoC) envolvendo a versão Enterprise dos Produtos JBoss fornecidos e mantido pela Red Hat.

Após escrever o roteiro decidi torná-lo público de forma a ajudar outros profissionais com interesse em experimentar um ambiente utilizado o JBoss EAP.

O ambiente proposto no roteiro utiliza o modo Domain do JBoss EAP 6 que permite a implantação e o provisionamento de instâncias do Servidor de Aplicação de forma distribuída em vários Hosts. Oferecendo ainda uma administração centralizada através do componente Domain Controller. O ambiente também contempla um servidor web que atua como proxy reverso e balanceado de carga para requisições Htttp utilizando o mod_cluster, bem como a parte de monitormaento e gestão do ambiente utilizando o JBoss Operations Network.

Enfim, o roteiro está disponível em meu repositório GitHub chamado asciidocs.Utilizei o formato texto AsciiDoc para escrever o documento, pois considero um formato simples, fácil de compartilhar e manter e extremamente portável. Textos em AsciiDoc podem ser convertidos em diversos outros formatos: html, pdf, ePUB, DocPub etc.

Para renderizar o documento asciidoc utilizo a ferramenta AsciiDoctor. Veja o resultado do documento no formato html5 na imagem abaixo

AsciiDoc convertido para HTML5 utilizando o AsciiDoctor
AsciiDoc convertido para HTML5 utilizando o AsciiDoctor

Sinta-se a vontade para clonar o texto disponível no GitHub e compor sua própria documentação!

Por se tratar de um documento texto o asccidoc pode ser editado em qualquer editor de texto. Eu particularmente utilizei um editor de texto moderno chamado Atom editor. Esse editor foi criado pelo time do GitHub e possui inúmeras funcionalidades e plugins. Veja o Atom com o plugin do AsciiDoctor

Atom editor com plugin do AsciiDoctor instalado.
Atom editor com plugin do AsciiDoctor instalado.

NOTA: para utilizar a ferramenta AsciiDoctor é necessário instalar o suporte ao Ruby em seu ambiente.

Dicas, Java, Middleware

Oracle Fusion Middleware: conceitos

Oracle Fusion Middleware (OFM) é uma família de produtos que compreende desde ferramentas de desenvolvimento para a plataforma Java Enterprise Edition (JavaEE), até  soluções para integração de sistemas, gerenciamento de identidade, colaboração e Business Intelligence (BI). O OFM é fornecido e mantido pela empresa Oracle e é composto por uma grande variedade de produtos que oferecem suporte ao desenvolvimento, implantação e gerenciamento de sistemas para a plataforma JavaEE.

De forma bem simplista podemos definir middleware como sendo o software responsável por conectar componentes de software ou aplicações corporativas. Em um sistema multicamadas (ex: três camadas: apresentação, lógica/negócio e dados) o Middleware atua na camada do meio hospedando os componentes com a lógica de negócio da aplicação. Outra função importate do Middleware é fornecer a infraestrutura necessária para o desenvolvimento de aplicações de negócio (business applications). Serviços tais como: acesso concorrente à recursos computacionais, controle transacional, mensageria, segurança, logging etc. Tudo isso é oferecido pelo Middleware de forma, pelo menos em tese, a deixar o desenvolvedor responsável apenas com o que diz respeito ao negócio da aplicação.

A imagem a seguir destaca alguns componentes do OFM em uma visão de divisão em três camadas.

Oracle Fusion Middleware Architecture

Não se preocupe com o significado de cada componente que aparece na imagem acima neste momento. Ao longo do post iremos comentar os principais deles.

Dada uma breve descrição sobre o OFM exponho neste post alguns conceitos importantes para aqueles que pretendem iniciar sua jornada pelo arcabouço de produtos que compõem o Middleware da Oracle.

Hoje em dia instalar um software não é tarefa complicada. Para obter o binário correto basta saber em qual plataforma (arquitetura de hardware e sistema operacional) de destino da instalação e realizar o download no site do fornecedor. Em seguida basta seguir o guia de instalação do produto. Entretanto, para alguns tipos de software, existem alguns aspectos importantes que devem ser observados para evitar problemas futuros. É o caso do Middleware. Uma solução de Middleware geralmente é composta por uma variedade de componentes desenvolvida sob uma arquitetura modular. Essa característica implica uma certa complexidade na gerência do software que vai desde a instalação, operação até a gerência do ambiente.

Middleware Component

O primeiro conceito diz respeito aos tipos de componentes utilizados no OFM. Existem dois tipos:

  • java component: componente composto por uma ou mais aplicações e recursos JavaEE impltantado (deployado) em um domínio do Oracle Weblogic Server. Exemplos:
    • Oracle SOA Suite
    • Oracle Webcenter Portal
    • Oracle Business Intelligence Enterprise Edition
  • system component: serviço (processo) gerenciado pelo Oracle Process Manager and Notification (OPMN) – gerenciador de processos com uma interface de linha de comando (CLI). Exemplos:
    • Oracle Http Server
    • Oracle Web Cache
    • Oracle Internet Directory
    • Oracle Forms
    • Oracle Reports
    • Oracle Business Intelligence

Todo produto da linha OFM é executado sobre um mesmo componente de middleware: o Weblogic Server (WLS). Esta é a “runtime” (não confundir com a Java Virtual Machine – JVM sobre a qual roda o Weblogic) de todo o middleware Oracle. Em praticamente toda a instalação de um produto OFM você encontrará uma estrutura de diretórios contendo os binários do Weblogic.

Após instalar o OFM teremos um ambiente composto por, pelo menos:

  • Um Oracle Weblogic Server Domain, que nada mais é que um conjunto de instâncias de servidores conhecido como Managed Servers, sendo que um deles é utilizado para administração dos demais – o Administration Console. Os managed servers hospedam as aplicações e recursos (java component) JavaEE (EJBs, Data Sources, JMS Destinations, etc).
  • Um ou mais Oracle Instance (system component).
  • Se o componente/produto do OFM (ex: Oracle Business Intelligence ou Oracle SOA Suite) necessitar de um banco de dados de metadados, um database será criado como metadata repository.

Dessa forma é muito importante se familiarizar com a estrutura de diretórios utilizada na instalação do WLS. A imagem abaixo esquematiza a estrutura criada para a instalação do produto Oracle SOA Suite.

Oracle Middleware Home

Middleware Home e Weblogic Home

O Middleware Home é o diretório raiz de qualquer componente/produto (java ou system component) do OFM. Logo abaixo encontra-se o Weblogic Server Home criado durante a instalação do Weblogic. O Weblogic Home hospeda o servidor de aplicação Weblogic.

Weblogic Server Home após a instalação do Weblogic

NOTA: um detalhe importante e que confunde bastante em alguns casos é: em um mesmo Host o diretório Middleware Home deve ser único para uma determinada release do OFM (ex: 11g ou 12c). Outro detalhe é que dentro do Middleware Home só pode haver um Weblogic Server Home. Dessa forma não é possível instalar duas versões diferentes do Weblogic dentro de uma mesma estrutura do Middleware Home. Quando for necessário instalar releases diferentes do OFM em um mesmo Host recomenda-se criar estrutura de diretórios diferentes para cada release (ex: Middleware11g e Middleware12c).

No mesmo nível do Weblogic Server Home encontram-se outros diretórios. Abaixo descrevemos cada um deles.

Oracle Home

Com exceção do Weblogic Server Home, que contém os binários do application server, cada produto OFM é instalado em seu próprio Oracle Home. Este diretório armazena os binários do produto. Dessa forma nenhum processo escreve nele. No diagrama abaixo os binários do Oracle SOA Suite foram instalados dentro do Oracle Home chamado oracle_soa1 (neste caso também referenciado como SOA Oracle Home). Para produtos do tipo java component um weblogic domain também é criado para hospeda a aplicação e recursos JavaEE que compõem o produto.

Oracle Home após a instalação do Oracle SOA Suite
Oracle Home após a instalação do Oracle SOA Suite

Domain Home

Um Weblogic Domain deve ser entendido como um grupo lógico de java components (neste contexto são aplicações e recursos JavaEE). Um domínio é composto por um Administration Server (geralmente referenciado como admin server) e geralmente possui um ou mais Managed Servers (também referenciados como instâncias do weblogic). As aplicações e recursos são implantadas e executadas dentro do(s) Managed Server(s). Na instalação padrão de um produto do OFM a estrutura de diretórios utilizada para hospedar um domínio do weblogic segue o digrama abaixo:

SOA Domain após a instalação do Oracle SOA Suite
SOA Domain após a instalação do Oracle SOA Suite

O domínio não necessariamente deve residir dentro do diretório User Projects na estrutura do Oracle Middleware Home. Observe que a estrutura utilizada para hospedar o domain está fora do Weblogic Home e pode, inclusive, residir fora do Middleware Home (ex: em um storage remoto utilizando um protocolo NFS ou SAN). O diagrama abaixo destaca o domain criado para o Oracle SOA Suite.

É muito comum a instalação de vários produtos OFM em um mesmo ambiente/host. Dessa forma cada produto pode utilizar seu próprio domínio weblogic. O diagrama abaixo destaca dois domains distintos: um para hospedar o Oracle WebCenter e outro para o Oracle SOA Suite. Observe também dois Oracle Homes distintos, um para cada produto OFM.

Estrutura de Weblogic Domains para múltiplos produtos OFM instalados em um mesmo ambiente Oracle Middleware.
Estrutura de Weblogic Domains para múltiplos produtos OFM instalados em um mesmo ambiente Oracle Middleware.

NOTA: todos os produtos instalados dentro de uma estrutura Oracle Middleware Home devem ser compatíveis com a mesma release do OFM utilizada no ambiente em questão. Por exemplo, não seria possível instalar o Oracle WebCenter 12c em um ambiente preparado para o OFM 11g.

Outro aspecto interessante relacionado ao Weblogic Domain é possibilidade de extender (escalar) determinado domínio existente dentro de um host. Durante a criação ou configuração de um domain é possível adicionar novos managed servers, seja para extender um produto ou reutilizar um mesmo domínio. Por exemplo, ao invés de criar um novo domínio para instalar o Oracle WebCenter, poderíamos utilizar o mesmo domain criado para o Oracle SOA Suite. Nesse caso a estrutura de diretórios do OFM em nosso ambiente ficaria conforme a imagem abaixo:

Domínio extendido
Domínio extendido

Oracle Instance

Diferentemente dos diretórios descritos nos tópicos anteriores um diretório Oracle Instance hospeda system components, ou seja, serviços/processos não JavaEE tais como: Oracle Http Server, Oracle Web Cache ou Oracle Internet Directory.

Diferentemente do Oracle Home um diretório Oracle Instance contém arquivos passíveis de alteração (configuração, logs e temporários gerados durante a execução do processo/serviço). Assim como o diretório Weblogic Domain um Oracle Instance pode residir fora da estrutura do Oracle Middleware. O diagrama abaixo destaca um ambiente OFM contendo dois produtos instalados: um system component (WebTier composto por Oracle Http Server e Oracle WebCache) e um java component (Oracle SOA Suite), este último reside em um Weblogic Domain:

OFM com Webtier (system component) e SOA Suite (java compoenent - Weblogic Domain)
OFM com Webtier (system component) e SOA Suite (java compoenent – Weblogic Domain)

Oracle Common Home

Este diretório não está associado à um componente ou produto específico dentro da estrutura Oracle Middleware Home. Ele contém uma variedade de utilitários e bibliotecas utilizadas e necessárias pela solução de gerenciamento e monitoramento do OFM conhecida como Oracle (Enterprise Manager) Fusion Middleware Control e também pelo conjunto de bibliotecas, não incluídas por padrão no Weblogic, Java Required Files (JRF).

NOTA: dentro da estrutura Middleware Home só pode haver um único diretório Oracle Common.

O diagrama abaixo destaca o diretório Oracle Common Home:

Oracle Common Directory
Oracle Common Directory

Oracle Metadata Repository

Alguns produtos do OFM, tais como o Oracle BPEL Process Manager, Oracle Business Activity Monitoring, Oracle Business Intelligence necessitam de um Banco de Dados específicos para armazenar metadados do produto. Um Metadata Repository pode ser de dois tipos: baseado em banco de dados (database-based) ou baseado em um sistema de arquivos (filesystem-based). Embora os dois tipos sejam suportados a Oracle recomenda a utilização de repositórios baseados em Banco de Dados para o ambiente de produção.

Para esses produtos que necessitam de um repositório de metadados é necessário executar o passo de criação do repositório antes de prosseguir com a instalação do produto. Para isso é utilizada uma ferramenta específica: o Repository Creation Utility (RCU). Essa ferramenta cria os schemas de Banco de Dados necessários para o funcionamento do produto.

O diagrama abaixo destaca o Metadata Repository utilizado pelo produto Oracle SOA Suite:

Oracle SOA Suite's metadata repository
Oracle SOA Suite’s metadata repository

Espero com este post ter esclarecido alguns conceitos, geralmente ignorados ou confundidos, durante a instalação ou preparação de um ambiente de execução do Oracle Fusion Middleware. A fonte de referência para os conceitos aqui expostos é a excelente documentação oficial do produto disponível no siste da Oracle.

Nos próximos posts pretendo continuar explorando alguns conceitos específicos do Oracle Weblogic Server.

Abraço 😉