Broker A-MQ embedded (Resource Adapter) no JBoss EAP

Network Connector VM

O conector de transporte do tipo vm:// é usado por aplicativos Java para executar um broker embedded e se conectar a ele. Nenhuma conexão de redes é utilizada neste caso, então a comunicação entre cliente e broker acontece através de invocações de método diretamente, aumentando a performance significamente. O broker é iniciado quando a primeira conexão usando o protocolo VM é criada e as próximas conexões vindas da mesma JVM irão se conectar ao mesmo broker. Quando todas as conexões VM ao broker forem fechadas, o broker embedded será desligado automaticamente.

webconsole

Configuração do JBoss EAP 6.1

1) Baixe o JBoss EAP 6.1 diretamente do site.

2) Descompacte-o num local de sua preferência. No meu caso utilizei o /opt.

3) Edite o arquivo /opt/jboss-eap-6.1/standalone/configuration/standalone-full.xml adicionando o seguinte trecho no perfil <subsystem xmlns=”urn:jboss:domain:resource-adapters:1.1″> :

<subsystem xmlns=”urn:jboss:domain:resource-adapters:1.1″>
<resource-adapters>
<resource-adapter id=”activemq-rar-5.8.0.rar”>
<archive>
activemq-rar-5.8.0.rar
</archive>
<transaction-support>XATransaction</transaction-support>
<config-property name=”UseInboundSession”>
false
</config-property>
<config-property name=”Password”>
defaultPassword
</config-property>
<config-property name=”UserName”>
defaultUser
</config-property>
<config-property name=”ServerUrl”>
vm://localhost
</config-property>
<connection-definitions>
<connection-definition class-name=”org.apache.activemq.ra.ActiveMQManagedConnectionFactory” jndi-name=”java:jboss/ConnectionFactory” enabled=”true” pool-name=”ConnectionFactory”>
<xa-pool>
<min-pool-size>1</min-pool-size>
<max-pool-size>20</max-pool-size>
</xa-pool>
</connection-definition>
</connection-definitions>
<admin-objects>
<admin-object class-name=”org.apache.activemq.command.ActiveMQQueue” jndi-name=”java:jboss/queue/MyActiveMQQueue” use-java-context=”true” pool-name=”MyActiveMQQueue”>
<config-property name=”PhysicalName”>
QueuePhysicalName
</config-property>
</admin-object>
</admin-objects>
</resource-adapter>
</resource-adapters>
</subsystem>

Configuração do ActiveMQ Resource Adapter

1) Baixe o JBoss A-MQ diretamente do site.

O resource adapter está escondido em: extras/apache-activemq-5.8.0.redhat-60024-bin.zip/lib/optional/activemq-rar-5.8.0.redhat-60024.rar

Obs: altere a extensão de activemq-rar-5.8.0.redhat-60024.rar para activemq-rar-5.8.0.redhat-60024.zip e descompacte-o.

2) Depois de extrair o resource adapter substitua o corpo do arquivo broker-config.xml com o seguinte conteúdo:

<?xml version=”1.0″ encoding=”UTF-8″?>

<beans
xmlns=”http://www.springframework.org/schema/beans&#8221;
xmlns:amq=”http://activemq.apache.org/schema/core&#8221;
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance&#8221;
xsi:schemaLocation=”http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd”&gt;

<!– Embedded – load configuration file from classpath –>
<bean class=”org.springframework.beans.factory.config.PropertyPlaceholderConfigurer”/>

<!– shutdown hook is disabled as RAR classloader may be gone at shutdown –>
<!– Embedded – Name the broker –>
<broker xmlns=”http://activemq.apache.org/schema/core&#8221; useJmx=”true” brokerName=”JBoss.Embedded” useShutdownHook=”false”>

<managementContext>
<!– use appserver provided context instead of creating one,  for jboss use: -Djboss.platform.mbeanserver –>
<managementContext createConnector=”false”/>
</managementContext>

<persistenceAdapter>
<!– Embedded – Use the server data directory for the broker database –>
<kahaDB directory=”${jboss.server.data.dir}/kahadb”/>
</persistenceAdapter>

<transportConnectors>
<!– Embedded – The embeded broker uses the in-JVM transport, and a NIO transport is also provided.
The “nio” below may be changed – use TCP, bind to just one interface, etc..
–>
<transportConnector name=”JBoss.Embedded” uri=”vm://localhost”/>
<transportConnector name=”nio” uri=”nio://0.0.0.0:61616″/>
</transportConnectors>

</broker>
</beans>

3) No arquivo META-INF/ra.xml procure a linha e descomente:

<config-property-value>tcp://localhost:61616</config-property-value>

Em seguida, descomente a linha:

<!–config-property-value>vm://localhost</config-property-value–>

Resultado:

<!– config-property-value>tcp://localhost:61616</config-property-value –>
<config-property-value>vm://localhost</config-property-value>

4) Remova as seguintes libs do resource adapter para não haver conflito com as já existentes no EAP:

  • slf4j-api-1.6.6.jar
  • slf4j-log4j12-1.6.6.jar

5) Depois de tudo alterado, compacte o arquivo .zip e renomeie-o para activemq-rar-5.8.0.rar e o mova para /opt/jboss-eap-6.1/standalone/deployments/

Inicialização do JBoss EAP 6.1   

Neste ponto temos o JBoss EAP 6.1 com o resource adapter configurado e copiado para a pasta deployments. Para inicializá-lo com o perfil customizado execute o seguinte comando na pasta a /opt/jboss-eap-6.1/bin: 

./standalone.sh -c standalone-full.xml

Console 

19:07:35,582 INFO [org.jboss.as.messaging] (ServerService Thread Pool — 58) JBAS011601: Bound messaging object to jndi name java:/ConnectionFactory
19:07:35,583 INFO [org.jboss.as.messaging] (ServerService Thread Pool — 59) JBAS011601: Bound messaging object to jndi name java:jboss/exported/jms/RemoteConnectionFactory
19:07:35,632 INFO [org.jboss.as.connector.deployment] (MSC service thread 1-7) JBAS010406: Registered connection factory java:/JmsXA
19:07:35,666 INFO [org.hornetq.ra] (MSC service thread 1-7) HornetQ resource adaptor started
19:07:35,667 INFO [org.jboss.as.connector.services.resourceadapters.ResourceAdapterActivatorService$ResourceAdapterActivator] (MSC service thread 1-7) IJ020002: Deployed: file://RaActivatorhornetq-ra
19:07:35,670 INFO [org.jboss.as.connector.deployment] (MSC service thread 1-2) JBAS010401: Bound JCA ConnectionFactory [java:/JmsXA]
19:07:35,830 INFO [org.jboss.as] (Controller Boot Thread) JBAS015961: Http management interface listening on http://127.0.0.1:9990/management
19:07:35,831 INFO [org.jboss.as] (Controller Boot Thread) JBAS015951: Admin console listening on http://127.0.0.1:9990
19:07:35,831 INFO [org.jboss.as] (Controller Boot Thread) JBAS015874: JBoss EAP 6.1.0.GA (AS 7.2.0.Final-redhat-8) started in 3487ms – Started 154 of 216 services (61 services are passive or on-demand)
19:08:25,127 INFO [org.jboss.as.server.deployment] (MSC service thread 1-4) JBAS015876: Starting deployment of “activemq-rar-5.8.0.rar” (runtime-name: “activemq-rar-5.8.0.rar”)
19:08:25,892 INFO [org.jboss.as.connector.deployers.RADeployer] (MSC service thread 1-2) IJ020001: Required license terms for file:/opt/jboss-eap-6.1/standalone/tmp/vfs/temp188ec44f68d80f15/activemq-rar-5.8.0.rar-12de4b0407eb87cc/contents/
19:08:25,923 INFO [org.jboss.as.connector.deployers.RaXmlDeployer] (MSC service thread 1-5) IJ020001: Required license terms for file:/opt/jboss-eap-6.1/standalone/tmp/vfs/temp188ec44f68d80f15/activemq-rar-5.8.0.rar-12de4b0407eb87cc/contents/
19:08:25,931 INFO [org.jboss.as.connector.deployment] (MSC service thread 1-5) JBAS010406: Registered connection factory java:jboss/ConnectionFactory
19:08:25,937 WARN [org.jboss.as.connector.deployers.RaXmlDeployer] (MSC service thread 1-5) IJ020016: Missing <recovery> element. XA recovery disabled for: java:jboss/ConnectionFactory
19:08:25,940 INFO [org.jboss.as.connector.deployment] (MSC service thread 1-5) JBAS010405: Registered admin object at java:jboss/queue/MyActiveMQQueue
19:08:25,945 INFO [org.jboss.as.connector.deployers.RaXmlDeployer] (MSC service thread 1-5) IJ020002: Deployed: file:/opt/jboss-eap-6.1/standalone/tmp/vfs/temp188ec44f68d80f15/activemq-rar-5.8.0.rar-12de4b0407eb87cc/contents/
19:08:25,950 INFO [org.jboss.as.connector.deployment] (MSC service thread 1-1) JBAS010401: Bound JCA ConnectionFactory [java:jboss/ConnectionFactory]
19:08:25,951 INFO [org.jboss.as.connector.deployment] (MSC service thread 1-6) JBAS010401: Bound JCA AdminObject [java:jboss/queue/MyActiveMQQueue]
19:08:26,118 INFO [org.jboss.as.server] (DeploymentScanner-threads – 2) JBAS018559: Deployed “activemq-rar-5.8.0.rar” (runtime-name : “activemq-rar-5.8.0.rar”)

Producer exemplo

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.naming.InitialContext;
import javax.naming.NamingException;

/**
*
* @author sfantin
*
*/
public class Producer {

public void produce() throws JMSException, NamingException {
try {
// Obtain a JNDI connection
InitialContext jndi = new InitialContext();

// Look up a JMS connection factory
ConnectionFactory conFactory = (ConnectionFactory) jndi.lookup(“java:jboss/ConnectionFactory”);

// Getting JMS connection from the server and starting it
Connection connection = conFactory.createConnection();
connection.start();

// JMS messages are sent and received using a Session. We will
// create here a non-transactional session object. If you want
// to use transactions you should set the first parameter to ‘true’
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

Destination destination = (Destination) jndi.lookup(“java:jboss/queue/MyActiveMQQueue”);

// MessageProducer is used for sending messages (as opposed
// to MessageConsumer which is used for receiving them)
MessageProducer producer = session.createProducer(destination);

for (int i = 0; i < 1000; i++) {
producer.send(session.createTextMessage(i + ” message”));
System.out.println(“Sent message ” + i);
}
producer.close(); session.close(); connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

Obs: Assim que o primeiro produtor enviar uma mensagem para a fila MyActiveMQQueue, o message store jboss-eap-6.1/bin/activemq-data/localhost/KahaDB será criado.

MDB exemplo

import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.Message;
import javax.jms.MessageListener;

import org.apache.log4j.Logger;
import org.jboss.ejb3.annotation.ResourceAdapter;

/**
*
* @author sfantin
*
*/
@MessageDriven( activationConfig = {
@ActivationConfigProperty(propertyName=”destinationType”, propertyValue=”javax.jms.Queue”),
@ActivationConfigProperty(propertyName=”destination”, propertyValue=”MyActiveMQQueue”),
@ActivationConfigProperty(propertyName=”acknowledgeMode”, propertyValue=”Auto-acknowledge”)
})
@ResourceAdapter(value=”activemq-rar-5.8.0.rar”)
public class SampleMDB implements MessageListener {

private static final Logger LOG = Logger
.getLogger(SampleMDB.class);

/*
* (non-Javadoc)
* @see javax.jms.MessageListener#onMessage(javax.jms.Message)
*/
@Override
public void onMessage(final Message msg) {
LOG.log(null, msg);

System.out.println(“received message: %s” + msg);

}

}

Download do JBoss EAP 6.1 configurado

Disponibilizei o JBoss EAP com todas as configurações comentadas neste tutorial.

JBossEAP6.1.zip

Obs: o activemq-rar-5.8.0.rar pode ser encontrado dentro do diretório /jboss-eap-6.1/standalone/deployments/

Até o próximo post!


JBoss AS agora é WildFly

wildfly_logo_600pxO servidor de aplicações de código aberto mais conhecido no mundo JBoss AS agora é conhecido como WildFly.

Mark Little, Vice-Presidente Red Hat/JBoss apresentou formalmente a nova marca durante o JUDCon:2013 Brazil.

Por meio de votação que se iniciou em Outubro de 2012, o nome WildFly venceu a disputa entre BaseJump, jBeret, Petasos, and Jocron.

Segundo a página do JBoss.org: “A wild fly is extremely agile, lightweight, untamed and truly free.”

A alteração do nome se deu por causa da grande confusão gerada entre os nomes dos produtos. Jason Andersen, diretor da linha de produtos da Red Hat, explica dizendo que JBoss é todo o portfólio de middleware e não apenas o servidor de aplicações.

O produto continuará ser disponibilizado gratuitamente para download, e sua versão produtizada pela Red Hat continuará com seu nome inalterado como JBoss Enterprise Application Platform. A primeira versão alpha do WildFly (WildFly 8) estará disponível para download em maio.

O objetivo inicial da mudança da marca é a obtenção de certificação Java Enterprise Edition 7 o mais rápido possível, devido à importância da “nuvem e cenários de desenvolvimento móvel.”


JUDCon:2013 Clustering para Alta Disponibilidade (HA) em JBoss AS 7

Este fim de semana estive no JUDCON:2013 apresentando minha palestra sobre Clustering para Alta Disponibilidade (HA) em JBoss AS 7.

Palestrantes JUDCon:2013

Palestrantes JUDCon:2013

Obrigado a todos que assistiram! A sala estava lotada, a galera super interessada, motivada, e cheia de vontade de aprender!

O evento foi muito bem organizado e diversificado!

Parabéns aos organizadores e a todos os envolvidos.


Fedora/CentOS/RHEL – Instalando o EAP 6

EAP6_installerpanel_100x360

Pré-requisito

Antes de instalarmos o EAP 6 devemos instalar o JDK.

Segue o link >>>aqui<<<.

Download e Instalação

Download do EAP 6 >>> aqui <<<:

Como root, descompacte o pacote jboss-eap-6.0.1.zip utilizando a flag -d que define o destino da pasta:

# unzip diretorio_onde_esta_o_jboss/jboss-eap-6.0.1.zip -d /opt

O comando acima descompacta o EAP 6 no diretório /opt/jboss-eap-6.0

Depois de descompactar a pasta, como root, dê permissão para que o usuário tenha acesso a todos os arquivos da pasta /opt/jboss-eap-6.0:

# chown -fR sergio. /opt/jboss-eap-6.0

Obs: sergio é o nome do meu usuário no sistema operacional

Start do EAP 6

Aponte o terminal para o diretório /opt/jboss-eap-6.0/bin e execute o seguinte comando:

./domain.xml -b host1 -bmanagement host1

Obs: host1 é o hostname da minha máquina, que pode ser visualizado com o seguinte comando:

# vim /etc/hosts

192.168.122.1 sfantin
192.168.122.146 host1
192.168.122.239 host2

Para verificar se a instalação ocorreu com sucesso, aponte o browser para a seguinte URL:

http://host1:8080

Resultado

jboss1


JUDCon 2013 – BRAZIL

1 2 3 4 5 611


Livro – JBoss AS 7 Configuration, Deployment and Administration

Adquiri recentemente  o livro JBoss AS 7 Configuration, Deployment and Administration escrito por Francesco Marchioni. O livro pode ser indicado tanto para desenvolvedores quanto para administradores, pois cobre os principais conceitos da nova versão do JBoss AS 7 como configuração, gerenciamento, deployment, administração, clustering, balanceamento de carga e computação em nuvem.

O que o livro ensina

  • Entender a nova estrutura do servidor de aplicações
  • Configurar serviços como conexões entre bancos de dados, JMS e transações
  • Gerenciar o servidor de aplicações utilizando Admin Console e Command Line Interface (CLI)
  • Configurar e executar cluster entre nós e prover alta escalabilidade as suas aplicações
  • Garantir segurança nas aplicações
  • Instalar aplicações na nuvem através do OpenShift
  • Customizar o servidor de aplicações para ganho de performance

Pontos interessantes

  • Separação entre Domain e Standalone
  • Configuração via linha de comando (CLI)
  • Gerenciamento de mod_cluster via CLI
  • Configuração Infinispam
  • Balanceamento de carga entre nós
  • Configuração JGroups
  • Instalação do OpenShift e criação de aplicação preparada para a nuvem

Se você desenvolve aplicações JEE que rodam no JBoss AS 7 ou pretende migrar de versões mais antigas para esta versão, recomendo que compre o livro, pois o autor aborda de uma forma simples e agradável os conceitos e configurações onde cada capítulo pode ser lido separadamente, não obrigando o leitor a ler todo o livro.

Mais detalhes

Páginas: 380
Editora: Packt Publishing (16/Dez/2011)
Idioma: Inglês
ISBN-10: 1849516782


Cluster Standalone EAP 6/JBoss AS 7: MacBook e Ubuntu


A Red Hat veio com tudo com o novo JBoss AS 7, e dessa vez a nova versão do servidor de aplicações de código aberto mais conhecido do mundo tem suporte completo à especificação JEE 6 e sobe em pouco mais de dois segundos.

Depois de baixar e fazer os primeiros testes, resolvi criar um tutorial que ensina a criar um cluster standalone em duas máquinas. Este é o tipo mais simples de cluster, pois é executado em duas máquinas diferentes. Como cada JBoss está sendo executado em uma máquina dedicada, podemos definir o cluster como Horizontal.

Antes de iniciarmos, precisamos saber os IPs dos nós envolvidos:

  1. IP do MacBook: 192.168.11.50
  2. IP do Ubuntu:  192.168.11.70

Pra descobrir o IP de cada máquina digite no Terminal:

ifconfig | grep inet

Dica para habilitar o SSH no MacBook:
  • Systems Preferences –> Sharing –> Marque a opção Remote Login.

Para verificar se a operação teve sucesso tente acessar o MacBook da máquina Ubuntu digitando: ssh usuarioDoMacBook@ipDoMacBook, no meu caso:

ssh sergiofantin@192.168.11.50

Digite login/senha para o usuário do MacBook.

Instalando o JBoss AS 7

Cada máquina irá precisar de uma instalação do JBoss. Para isso baixe o JBoss 7 aqui: http://download.jboss.org/jbossas/7.1/jboss-as-7.1.1.Final/jboss-as-7.1.1.Final.tar.gz

  • Descompacte o JBoss 7 no diretório raíz do usuário de cada máquina, ou em outro diretório de sua escolha:

tar -vzxf jboss-as-7.1.1.Final.tar.gz

Subindo a JBoss 7 no Ubuntu

  • Aponte o terminal para o diretório bin do JBoss:

cd ~/jboss-as-7.1.1.Final/bin

  • Execute o seguinte comando:

./standalone.sh -c standalone-ha.xml -b 192.168.11.70 -u 230.0.0.4 -Djboss.server.base.dir=../standalone -Djboss.node.name=nodeUbuntu

Importante:

Para que o cluster funcione corretamente, tenha certeza que:

  • Os dois servidores devem ter o mesmo endereço de multicast: -u 230.0.0.4
  • Os dois servidores devem ter nomes diferentes: O nó Ubuntu foi chamado de nodeUbuntu e o nó MacBook de nodeMacBook
  • Os dois servidores devem ser executados nos respectivos endereços IPs de suas máquinas: O nó Ubuntu -b 192.168.11.70 e o nó MacBook -b 192.168.11.50

Leia o resto deste post »