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.

JBoss

Access Denied após habilitar o RBAC no JBoss EAP 6

Após criar o usuário administrador do JBoss…

[jboss@rhel7-server-1 bin]$ cd $JBOSS_HOME/bin
[jboss@rhel7-server-1 bin]$ ./add-user.sh

What type of user do you wish to add?
a) Management User (mgmt-users.properties)
b) Application User (application-users.properties)
(a):

Enter (a) para criar um usuário de administração.

Enter the details of the new user to add.
Using realm 'ManagementRealm' as discovered from the existing property files.
Username : admin

Após definir o nome do usuário (admin neste exemplo) defina uma senha obedecendo algus prereqs.

The username 'admin' is easy to guess
Are you sure you want to add user 'admin' yes/no? yes
Password requirements are listed below. To modify these restrictions edit the add-user.properties configuration file.
- The password must not be one of the following restricted values {root, admin, administrator}
- The password must contain at least 8 characters, 1 alphabetic character(s), 1 digit(s), 1 non-alphanumeric symbol(s)
- The password must be different from the username
Password :
Re-enter Password :

Caso queira criar/associar o usuário à um grupo (ex: administradores) informe o nome do(s) grupo(s) neste momento. Ou Enter para continuar sem grupo.

What groups do you want this user to belong to? (Please enter a comma separated list, or leave blank for none)[ ]:
About to add user 'admin' for realm 'ManagementRealm'
Is this correct yes/no? yes

Por padrão o mecanismo de autenticação (Simple) do EAP mantém usuários e grupos em arquivos texto. As senhas são codificadas usando um algoritmo Hash.

Added user 'admin' to file '/opt/redhat/jboss-eap-6.3/standalone/configuration/mgmt-users.properties'
Added user 'admin' to file '/opt/redhat/jboss-eap-6.3/domain/configuration/mgmt-users.properties'
Added user 'admin' with groups to file '/opt/redhat/jboss-eap-6.3/standalone/configuration/mgmt-groups.properties'
Added user 'admin' with groups to file '/opt/redhat/jboss-eap-6.3/domain/configuration/mgmt-groups.properties'

Este usuário será usado para chamadas remotas ou por algum Host Controller (Domain Mode)?

Is this new user going to be used for one AS process to connect to another AS process?
e.g. for a slave host controller connecting to the master or for a Remoting connection for server to server EJB calls.
yes/no? no

Você acessa a console, abre a aba Administration e vê a seguinte mensagem:

JBoss EAP 6 RBAC Auth

Ahmmm! Legal! Quero habilitar o mecanismo de autenticação RBAC para criar usuários com diferentes perfis de gerência (Administrator, Deployer, Monitor, Operator, etc)…

Aí você copia o comando, acessa a CLI e executa…

[jboss@rhel7-server-1 bin]$ ./jboss-cli.sh
You are disconnected at the moment. Type 'connect' to connect to the server or 'help' for the list of supported commands.
[disconnected /] connect 192.168.122.65:9999
[standalone@192.168.122.65:9999 /] /core-service=management/access=authorization:write-attribute(name=provider,value=rbac)
{
"outcome" => "success",
"response-headers" => {
"operation-requires-reload" => true,
"process-state" => "reload-required"
}
}
[standalone@192.168.122.65:9999 /] reload

Volta na console web e tenta logar novamente ou executar alguma operação…

jboss-eap-access-denied-after-enable-rbac

Ops! :-/

Deu merda!

Sim! Quando você habilita o RBAC o JBoss troca o mecanismo de autenticação original (simple) pelo mecanismo RBAC. Por este motivo a role que antes era mapeada nos arquivos:

/opt/redhat/jboss-eap-6.3/standalone/configuration/mgmt-users.properties
/opt/redhat/jboss-eap-6.3/standalone/configuration/mgmt-groups.properties

passa a ser mapeada dentro do standalone.xml ou domain.xml.

...
        <access-control provider="rbac">
            <role-mapping>
                <role name="SuperUser">
                    <include>
                        <user name="$local"/>
                    </include>
                </role>
            </role-mapping>
        </access-control>
...

Agora precisamos mapear o usuário admin (criado com o script add-user.sh) para as roles pré definidas no RBAC. Como o admin é o usuário administrador, precisamos associar ele à role SuperUser. Para isso execute o comando abaixo na CLI do JBoss.

[standalone@192.168.122.65:9999 /] /core-service=management/access=authorization/role-mapping=SuperUser/include=user-admin:add(name=admin,realm=ManagementRealm,type=USER)
{"outcome" => "success"}

Pronto!

Agora se abrir o standalone.xml irá observar que o usuário admin está associado à role Super User

...
        <access-control provider="rbac">
            <role-mapping>
                <role name="SuperUser">
                    <include>
                        <user name="$local"/>
                        <user name="admin" realm="ManagementRealm"/>
                    </include>
                </role>
            </role-mapping>
        </access-control>
...

Agora o usuário admin pode ser visto na console.

jboss-eap-after-fix-rbac

😉


Ref: https://access.redhat.com/solutions/696693

Eventos, JBoss

#JUDCon2014:Brazil em Setembro!

Neste ano teremos mais uma edição do #JUDCon no Brail. Evento que reune a comunidade de desenvolvedores e arquitetos para discutir e compartilhar experiências sobre arquitetura e desenvolvimento de software corporativo. O evento conta com renomados profissionais e personalidades envolvidos em projetos de diversas áreas como: JavaEE, Cloud Computing, BigData, SOA, DevOps e muito mais.

Se você utiliza alguma tecnologia JBoss ou está interessado em conhecer as últimas novidades do universo JavaEE e outras tendências, participe do evento que ocorrerá dia 26 de Agosto em São Paulo.

Veja alguns nomes já confirmados para esta edição do evento.

Incrições podem ser feitas aqui.

Caso tenha interesse em compartilhar suas experiências submeta sua palestra aqui:

Participe!

 

Dicas, JBoss

Configuração de Portas no JBoss AS 5 (Binding Service)

Serviço de Gerenciamento de Portas

O JBoss AS gerencia o mapeamento de portas utilizadas pelos diversos serviços do servidor através do mecanismo conhecido por Ports Bind.
Esse serviço é configurado no arquivo localizado em

JBOSS_HOME/server/default/conf/bindingservice.beans/META-INF/bindings-jboss-beans.xml

E possui o seguinte esquema:

  •  definição do bean ServiceBindingManagementObject que possui o conjunto de portas prédefinido no JBossAS.
 <bean name="ServiceBindingManagementObject"
       class="org.jboss.services.binding.managed.ServiceBindingManagementObject">
  <constructor>
   <parameter>${jboss.service.binding.set:ports-default}</parameter>
   <parameter>
    <set>
     <inject bean="PortsDefaultBindings"/>
     <inject bean="Ports01Bindings"/>
     <inject bean="Ports02Bindings"/>
     <inject bean="Ports03Bindings"/>
    </set>
   </parameter>
   <parameter><inject bean="StandardBindings"/></parameter>
  </constructor>
 </bean>
  • definição do conjunto de portas definidos no bean anterior
 <bean name="PortsDefaultBindings" class="org.jboss.services.binding.impl.ServiceBindingSet">
  <constructor>
   <parameter>ports-default</parameter>
   <parameter>${jboss.bind.address}</parameter>
   <parameter>0</parameter>
   <parameter><null/></parameter>
  </constructor>
 </bean>

Observe que, por padrão, o JBossAS fornece quatro conjunto de portas: PortsDefaultBindings, Ports01Bindings, Ports02Bindings e Ports03Bindings‘.

O que diferencia cada conjunto é o incremento aplicado a cada porta aberta pelos diversos serviços do JBoss. Por exemplo, o Ports01Bindings (ports-01) adiciona 100 ao valor da porta usada pelo conector http do JBoss Web, que por padrão é 8080, mas neste caso (usando o conjunto ports-01) passará a ser 8180.

Caso haja a necessidade de subir mais que quatro instâncias em um mesmo servidor utilizando o mecanismo de Ports Bind, será necessário definir novos conjuntos de portas (ex. Ports04Bindings, Ports05Bindings etc). Porém, é mais conveniente definir um conjunto de portas dinâmico. Dessa forma seu valor de incremento (padrão 100) pode ser parametrizado durante o statup do JBoss. Para isso precisamos fazer duas alterações no arquivo bindings-jboss-beans.xml.

  •  injetar um novo bean que define o conjuto de portas dinâmico/genérico.

Chamaremos esse novo bean de PortsDynaBindings.

<bean name="ServiceBindingManagementObject"
      class="org.jboss.services.binding.managed.ServiceBindingManagementObject">
 <constructor>
  <parameter>${jboss.service.binding.set:ports-default}</parameter>
  <parameter>
   <set>
    <inject bean="PortsDefaultBindings"/>
    <inject bean="Ports01Bindings"/>
    <inject bean="Ports02Bindings"/>
    <inject bean="Ports03Bindings"/>
 <inject bean="PortsDynaBindings"/>
   </set>
  </parameter>
  <parameter><inject bean="StandardBindings"/></parameter>
 </constructor>
</bean>
  •  definir o bean PortsDynaBindings.

Para isso basta copiar a definição do bloco PortsDefaultBindings as propriedades conforme destacado abaixo.

 <bean name="PortsDynaBindings" class="org.jboss.services.binding.impl.ServiceBindingSet">
  <constructor>
   <parameter>ports-dyna</parameter>
   <parameter>${jboss.bind.address}</parameter>
   <parameter>${jboss.bind.offset}</parameter>
   <parameter><null/></parameter>
  </constructor>
 </bean>

Agora para usar esse novo esquema basta informar no arquivo de parâmetros da JVM da instância (run.conf) ou no script de inicialização do JBoss o nome do novo conjunto de portas, bem como a propriedade jboss.bind.offset. Veja como fica no arquivo run.conf:

JAVA_OPTS=$JAVA_OPTS -Djboss.service.binding.set=ports-dyna
JAVA_OPTS=$JAVA_OPTS -Djboss.bind.offset=400

Esses parâmetros podem ser informados direto na linha de comando que inicia o JBoss:

JBOSS_HOME/bin/run.sh -c default -b 0.0.0.0 -Djboss.service.binding.set=ports-dyna -Djboss.bind.offset=400

Dessa forma o JBoss fará o bind das portas incrementando o valor 400 ao valor padrão definido para cada serviço. Por exemplo, o JBoss Web estará acessível através da porta 8480.

Para subir novas intâncias basta alterar o valor do parâmetro jboss.bind.offset

JBoss, Publicações

Java Magazine #102: A revolução do JBoss AS 7

Saiu na edição #102 da Java Magazine um excelente artigo sobre as novidades do JBoss AS 7 – A Revolução do JBoss AS 7. Nesta primeira parte do artigo tentamos mostrar as principais novidades da nova versão do JBoss AS. Tópicos como a nova estrutura de diretórios, instalação, novos modos de operação (standalone e domain), novo kernel (100% modular), novos consoles de gerência e configuração foram destaques dessa primeira parte do artigo.

Java Magazine #102 - A Revolução do JBoss AS 7

Adquira seu exemplar e confira em detalhes essas novidades.

😉

Comunidade, Eventos, JBoss

JBoss In Bossa 2011: eu participei!

Acontenceu no último Sábado (08/10/2011) aqui em Brasília mais uma edição do maior evento da comunidade JBoss no Brasil (JBUG Brasil) – JBoss In Bossa 2011.

JBoss In Bossa

Em sua segunda edição o evento ofereceu um excelente grade de palestras abordando vários projetos mantidos pela comunidades JBoss.ORG. Grandes nomes da comunidade Java marcaram presença no evento apresentando as últimas novidades dos mais importantes projetos que compõe a JBoss Project Matrix.

O evento possui carater estritamente técnico e suas palestres priorizam a demonstração prática das últimas novidades dos projetos e ferramentas abordadas. Nessa edição contamos com incríveis Demos apresentadas com muita propriedade pelos palestrantes.

Nesta edição também tive a oportunidade de participar do evento como palestrante apresentando as novidades da solução de gerenciamento e monitoramento  RHQ com a palestra “RHQ 4 Gerenciamento efetivo de servidores JBoss“.

Nesta apresentação demonstramos, além das principais características da ferramenta, duas funcionalidades que foram bastante comentadas no evento. A primeira foi a capacidade do RHQ de notifcar alertas disparados pela ferramenta usando uma conta no Twitter.

@JBossInBossaRHQ

A outra demo mostrou o RHQ realizando uma chamada SIP para um Softphone notificando sobre um alerta disparado devido a uma condição específica configurada no subsistema de alertas do RHQ. Essa demo fez uso da solução de comunicação Mobicents que se trata de um projeto 100% Open Source  e executa sobre a plataforma Java.

Mobicents

O RHQ é uma incrível solução de gerenciamento e monitoramento para servidores de aplicação JBoss. Essas e outras funcionalidades só são possíveis devido à sua arquitetura extensível que permite criar Plugins para agregar a ferramenta com as mais diversas capacidades de gerenciamento e monitoramento de software e sistemas. Ainda quero escrever mais sobre o RHQ aqui no Blog. Aguarde novos posts…

Em suma foi um grande evento da comunidade Java/JBoss em Brasília. Uma ótima oportunidade para conhecer e interagir com grandes nomes do Java e da comunidade JBoss no Brasil. Para quem não pôde comparecer os slides das palestras estão disponíveis no site oficial do JBossInBossa. Acompanhe também a repercussão do evento no twitter através da hash tag #JBossInBossa.

Aguardemos a próxima edição do evento!

Até a próxima 😉