Livro: Play Framework: Java para web sem Servlets e com diversão

É com grande satisfação que venho ajudar a divulgar o último livro dum grande ex-colega de trabalho, Fernando Boaglio. Neste novo trabalho ele ensina de forma simples e didática a utilização do Framework Play desde tarefas básicas às mais complexas, de forma extremamente produtiva.

Play-ebooks_large

Desenvolver sistemas web em Java nunca foi tão divertido! Se você está cansado de escrever longas Servlets, ficar brigando com seu framework o tempo inteiro para realizar tarefas simples e escrevendo mais código que o necessário para desenvolver qualquer funcionalidade, o Play Framework é o que você precisa.

Nesse livro, Fernando Boaglio ensina como criar uma aplicação do começo ao fim utilizando o Play Framework na versão Java, passando por situações comuns do dia a dia, indo desde o tradicional cadastro, até funcionalidades mais avançadas como habilitação de HTTPS, login integrado com redes sociais e integração com serviços REST. Você vai aprender como o Play Framework pode te tornar extremamente produtivo.

Boa leitura!


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 A-MQ : Consumidor de mensagens utilizando protocolo fabric

Introdução

O Fuse Fabric discovery agent utiliza o protocolo fabric para a descoberta de brokers que estão em um grupo específico. Para que isto aconteça o discovery agent precisa que todos os brokers sejam implantados em somente uma fábrica. Quando um cliente tenta se conectar a um broker, o agent procura por todos os brokers disponíveis no registro do fabric e os retorna.

fabric_consumer

Características

  • O protocolo fabric garante failover automaticamente
  • Clientes não precisam saber onde os brokers estão localizados 
  • Funciona como o transporte failover
  • Oferece opções para reconexão:

discovery:(fabric:usa-group)?reconnectDelay=1000&useExponentialBackOff=false

  • Clientes precisam ter a URL do Zookeeper

Como configurar o broker

Para saber em detalhes como fazer o deploy de brokers utilizando o Fuse Fabric, dê uma olhada no post Cluster JBoss A-MQ : Master/Slave Network of Brokers utilizando Fuse Fabric.

 Como configurar o cliente

Para saber em detalhes como criar um client que envia mensagens para o Fuse Fabric, dê uma olhada no post JBoss A-MQ : Produtor de mensagens utilizando protocolo fabric.

Setando o zookeeper.url

Para que o cliente consiga encontrar corretamente o grupo de brokers, precisamos adicionar a propriedade zookeeper.url que indica a instância do Fuse Fabric’s Zookeeper, no meu caso rodando localmente adicionei no pom.xml do meu projeto:

<zookeeper.url>localhost:2181</zookeeper.url>
<zookeeper.password>admin</zookeeper.password>

Download do projeto completo

Consumer-teste.zip

Até o próximo post!


JBoss A-MQ : Produtor de mensagens utilizando protocolo fabric

Introdução

O Fuse Fabric discovery agent utiliza o protocolo fabric para a descoberta de brokers que estão em um grupo específico. Para que isto aconteça o discovery agent precisa que todos os brokers sejam implantados em somente uma fábrica. Quando um cliente tenta se conectar a um broker, o agent procura por todos os brokers disponíveis no registro do fabric e os retorna.

fabric_client

Características

  • O protocolo fabric garante failover automaticamente
  • Clientes não precisam saber onde os brokers estão localizados 
  • Funciona como o transporte failover
  • Oferece opções para reconexão:

discovery:(fabric:usa-group)?reconnectDelay=1000&useExponentialBackOff=false

  • Clientes precisam ter a URL do Zookeeper

Como configurar o broker

Para saber em detalhes como fazer o deploy de brokers utilizando o Fuse Fabric, dê uma olhada no post Cluster JBoss A-MQ : Master/Slave Network of Brokers utilizando Fuse Fabric.

 Como configurar o cliente

import javax.jms.Connection;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;

import org.apache.activemq.ActiveMQConnectionFactory;

public class ProducerTeste {

public static void main(String[] args) throws Exception {

ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(“discovery:(fabric:usa-group)“);

Connection connection = factory.createConnection(“admin”, “admin”);
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
connection.start();
Queue queue = session.createQueue(“SampleQueue”);
MessageProducer producer = session.createProducer(queue);

for (int i = 0; i < 1000; i++) {

producer.send(session.createTextMessage(i + ” message”));
System.out.println(“Sent message ” + i);
Thread.sleep(1000);
}
producer.close(); session.close(); connection.close();
}
}

Setando o zookeeper.url

Para que o cliente consiga encontrar corretamente o grupo de brokers, precisamos adicionar a propriedade zookeeper.url que indica a instância do Fuse Fabric’s Zookeeper, no meu caso rodando localmente adicionei no pom.xml do meu projeto:

<zookeeper.url>localhost:2181</zookeeper.url>
<zookeeper.password>admin</zookeeper.password>

Download do projeto completo

Producer-teste.zip

Até o próximo post!


Cluster JBoss A-MQ : Master/Slave Network of Brokers utilizando Fuse Fabric

Introdução

Fuse Fabric é um sistema distribuído de configuração, gerenciamento e provisionamento para Apache Karaf, Apache ActiveMQ, ServiceMix, Apache Camel para nuvem pública ou privada, que trabalha com a noção de perfis, onde cada cada perfil pode ser entendido como uma lista de configurações.
Todos os perfis são gravados no Apache Zookeeper que é um confiável coordenador de serviços distribuídos responsável por proparagar automaticamente as configurações atualizadas entre todos os nós, além de gerenciar o lock (bloqueio) de cada nó master.

Alguns benefícios:

  • Configuração centralizada entre rotas/brokers distribuídos;
  • Crescimento dinâmico o qual é essencial para ambientes de Cloud;
  • Alta Disponibilidade (HA) para aplicações de missão crítica;
  • Utiliza OGSi e Apache Karaf criação de novos brokers;
  • Provê ferramenta centralizada para configuração e monitoração (Fuse Management Console);

fabric_master_slave

Master/slave

Este tutorial mostra em detalhes como configurar e executar uma  ActiveMQ network of brokers master/slave utilizando o Fuse Management Console (FMC) para simplificar a configuração e execução dos múltiplos brokers que serão criados.
Nesta estratégia somente um broker pode ter o status master por vez, assim os slaves aguardam a parada do master para que um deles se torne o novo master.
Criar uma topologia Master-Slave with Fabric é muito fácil, basta criar múltiplos brokers em um mesmo grupo e o resto fica por conta do Fabric.
No nosso exemplo vamos criar quatro instâncias: duas USA e outras duas Japan. O primeiro broker que for iniciado será o master do seu lado, enquanto o outro será o slave.
Por default os brokers são persistentes, pois utitilizam o perfil mq-base como base.
Não é o caso deste exemplo, mas se as instâncias estiverem em máquinas separadas e utilizando storage compartilhado, precisaríamos de configurações adicionais. Por ora vamos montar o ambiente localmente.
O benefício deste tipo de configuração é que não é necessário nenhuma estratégia de lock em storage compartilhado mesmo utilizando brokers não persistentes, pois o Zookeeper garante o bloqueio dos nós master.

Obs: ainda assim há a necessidade de um message store compartilhado para que o estados dos brokers sejam garantidos.

Networks

A conexão entre os brokers dos dois grupos é especificado através da opção networks.

Instalação

1) Download

O Red Hat JBoss Fuse pode ser baixo aqui: https://www.jboss.org/products/fuse.html

Obs: disponível somente para fins de Desenvolvimento.

2) Descompactar

Descompacte o Fuse em algum lugar de sua preferência. No meu caso descopactei em /opt do meu Fedora 18.

Configuração

1) users.properties

Altere o arquivo $fuse-diretorio/etc/users.properties descomentando a linha:

#admin=admin,admin

2) system.properties

Altere o arquivo $fuse-diretorio/etc/system.properties substituindo localhost pelo hostname da máquina virtual. No meu caso é o maquina:

# Activemq configuration
activemq.port = 61616
activemq.host = maquina
activemq.url = tcp://${activemq.host}:${activemq.port}

Inicialização

Execute o seguinte arquivo $fuse-diretorio/bin 

./fuse 

fuse

Criando o cluster

Execute os seguintes comandos para criar e incializar o cluster:

1) Instala o FMC:

fabric:create -p fmc

2) Cria os dois containers usa:

fabric:container-create-child root usa 2

Jmx Login for root: admin 

Jmx Password for root: admin 

3) Cria os dois containers japan:

fabric:container-create-child root japan 2

4) O seguinte comando cria o par master/slave de brokers no grupo usa-group e o liga com os brokers japan através do linkToJapan:

fabric:mq-create --group usa-group --networks linkToJapan --networks-username admin --networks-password admin --assign-container usa1,usa2 amq-usa-profile

5) O seguinte comando cria o par master/slave de brokers no grupo japan-group e o liga com os brokers usa através do linkToUsa:

fabric:mq-create --group japan-group --networks linkToUsa --networks-username admin --networks-password admin --assign-container japan1,japan2 amq-japan-profile

6) Lista todos os clusters

fabric:cluster-list

Management Console

Acesse a seguinte URL: http://localhost:8181

1

Obs: se não estiver conseguindo acessar o Managente Console, execute o seguinte comando para instalar o FMC:  fabric:create -p fmc

No próximo post mostrarei como criar um Produtor e um Consumidor utilizando o protocolo fabric

Até o próximo post!


WEBCAST – Integração à prova de futuro

Webcast Integration

registrese


Infinispan – Remote Client-Server no protocolo Hot Rod

Vamos criar um ambiente onde a aplicação não está na mesma JVM que o Infinispan. Esta abordagem pode ser utilizada quando temos um cliente desenvolvido em outra linguagem de programação, como por exemplo .NET ou C++, assim estas linguagens podem fazer uso do Infinispan como um servidor remoto.

Ambiente

Neste exemplo utilizei duas máquinas virtuais com os respectivos IPs:

Cliente: Aplicação Java na JVM do host 192.168.122.0

Servidor:  Infinispan na JVM do host 102.168.122.1

Obs: utilizei o KVM como hypervisor, que por padrão configura a comunicação entre todos as máquinas virtuais.

Dica: Se estiver utilizando o VirtualBox, segue >>> aqui <<< um tutorial que ensina como configurar a comunicação entre as máquinas envolvidas.

Arquitetura

remote-client-server-final

Desabilitando o Firewall

O próximo passo é desabilitar o firewall. Como root, execute o seguinte comando em ambas as máquinas:

# service iptables stop 

O comando acima desabilita o firewall.

# chkconfig iptables off 

O comando acima garante que o firewall não será ativado nos próximos boots.

Desabilitando o SELinux

Como root, altere nas duas máquinas o parâmetro SELINUX=enforcing para SELINUX=disabled 

# vim /etc/sysconfig/selinux

Dica: Faça um teste utilizando ping para garantir que as duas máquinas estão se comunicando.

Download do Infinispan

Download: Infinispan 6.0.0.Alpha2 servers (HotRod, REST, Memcached)

Configurando o Servidor 

Depois de baixar o Infinispan, descompacte-o em um diretório de sua preferência. No meu caso utilizei o /opt.

Start do servidor

Para iniciar o Infinispan digite o seguinte comando substituindo o IP corretamente.

[user1@host1 bin]$ ./standalone.sh -b 102.168.122.1

=========================================================================

JBoss Bootstrap Environment

JBOSS_HOME: /opt/infinispan-server-6.0.0.Alpha2

JAVA: /usr/java/jdk1.6.0_39/bin/java

JAVA_OPTS: -server -XX:+UseCompressedOops -Xms64m -Xmx512m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true

=========================================================================

17:17:41,647 INFO [org.jboss.modules] (main) JBoss Modules version 1.2.0.CR1
17:17:42,490 INFO [org.jboss.msc] (main) JBoss MSC version 1.0.4.GA
17:17:42,962 INFO [org.jboss.as] (MSC service thread 1-1) JBAS015899: JBoss Infinispan Server 6.0.0.Alpha2 (AS 7.2.0.Final) starting
17:17:48,509 INFO [org.xnio] (MSC service thread 1-1) XNIO Version 3.0.7.GA
17:17:48,537 INFO [org.jboss.as.server] (Controller Boot Thread) JBAS015888: Creating http management service using socket-binding (management-http)
17:17:48,561 INFO [org.xnio.nio] (MSC service thread 1-1) XNIO NIO Implementation Version 3.0.7.GA
17:17:48,621 INFO [org.jboss.remoting] (MSC service thread 1-1) JBoss Remoting version 3.2.14.GA
17:17:48,899 INFO [org.jboss.as.clustering.infinispan] (ServerService Thread Pool — 17) JBAS010280: Activating Infinispan subsystem.
17:17:48,935 INFO [org.jboss.as.naming] (ServerService Thread Pool — 21) JBAS011800: Activating Naming Subsystem
17:17:48,980 INFO [org.jboss.as.security] (ServerService Thread Pool — 23) JBAS013171: Activating Security Subsystem
17:17:49,214 INFO [org.jboss.as.jsf] (ServerService Thread Pool — 27) JBAS012605: Activated the following JSF Implementations: [main, 1.2]
17:17:49,239 INFO [org.jboss.as.security] (MSC service thread 1-2) JBAS013170: Current PicketBox version=4.0.15.Final
17:17:50,131 INFO [org.jboss.as.naming] (MSC service thread 1-1) JBAS011802: Starting Naming Service
17:17:50,167 INFO [org.jboss.as.connector.logging] (MSC service thread 1-2) JBAS010408: Starting JCA Subsystem (JBoss IronJacamar 1.0.15.Final)
17:17:51,852 INFO [org.apache.coyote.ajp] (MSC service thread 1-1) JBWEB003046: Starting Coyote AJP/1.3 on ajp-host1/192.168.122.1:8009
17:17:51,854 INFO [org.apache.coyote.http11] (MSC service thread 1-2) JBWEB003001: Coyote HTTP/1.1 initializing on : http-host1/192.168.122.1:8080
17:17:52,222 INFO [org.apache.coyote.http11] (MSC service thread 1-2) JBWEB003000: Coyote HTTP/1.1 starting on: http-host1/192.168.122.1:8080
17:17:55,284 INFO [org.infinispan.server.endpoint] (MSC service thread 1-2) JDGS010000: HotRodServer starting
17:17:55,317 INFO [org.infinispan.server.endpoint] (MSC service thread 1-2) JDGS010001: HotRodServer listening on 192.168.122.1:11222
17:17:55,961 INFO [org.infinispan.server.endpoint] (MSC service thread 1-1) JDGS010000: WebSocketServer starting
17:17:55,970 INFO [org.infinispan.server.endpoint] (MSC service thread 1-1) JDGS010001: WebSocketServer listening on 192.168.122.1:8181
17:17:57,931 INFO [org.infinispan.factories.GlobalComponentRegistry] (MSC service thread 1-2) ISPN000128: Infinispan version: Infinispan ‘Infinium’ 6.0.0.Alpha2
17:17:59,385 INFO [org.infinispan.jmx.CacheJmxRegistration] (MSC service thread 1-2) ISPN000031: MBeans were successfully registered to the platform MBean server.
17:17:59,394 INFO [org.jboss.as.clustering.infinispan] (MSC service thread 1-2) JBAS010281: Started default cache from local container
17:18:00,381 INFO [org.infinispan.jmx.CacheJmxRegistration] (MSC service thread 1-2) ISPN000031: MBeans were successfully registered to the platform MBean server.
17:18:00,388 INFO [org.jboss.as.clustering.infinispan] (MSC service thread 1-2) JBAS010281: Started jboss-web-policy cache from security container
17:18:00,387 INFO [org.infinispan.jmx.CacheJmxRegistration] (MSC service thread 1-1) ISPN000031: MBeans were successfully registered to the platform MBean server.
17:18:00,396 INFO [org.jboss.as.clustering.infinispan] (MSC service thread 1-1) JBAS010281: Started other cache from security container
17:18:00,474 INFO [org.infinispan.jmx.CacheJmxRegistration] (MSC service thread 1-2) ISPN000031: MBeans were successfully registered to the platform MBean server.
17:18:00,479 INFO [org.jboss.as.clustering.infinispan] (MSC service thread 1-2) JBAS010281: Started memcachedCache cache from local container
17:18:00,488 INFO [org.infinispan.server.endpoint] (MSC service thread 1-2) JDGS010000: REST starting
17:18:00,495 INFO [org.infinispan.jmx.CacheJmxRegistration] (MSC service thread 1-1) ISPN000031: MBeans were successfully registered to the platform MBean server.
17:18:00,499 INFO [org.jboss.as.clustering.infinispan] (MSC service thread 1-1) JBAS010281: Started namedCache cache from local container
17:18:00,506 INFO [org.infinispan.server.endpoint] (MSC service thread 1-1) JDGS010000: MemcachedServer starting
17:18:00,511 INFO [org.infinispan.server.endpoint] (MSC service thread 1-1) JDGS010001: MemcachedServer listening on 192.168.122.1:11211
17:18:01,501 INFO [org.jboss.as.remoting] (MSC service thread 1-1) JBAS017100: Listening on 127.0.0.1:9999
17:18:01,513 INFO [org.jboss.as.remoting] (MSC service thread 1-1) JBAS017100: Listening on 192.168.122.1:4447
17:18:02,783 INFO [org.infinispan.server.endpoint] (MSC service thread 1-2) JDGS010002: REST mapped to /rest
17:18:03,018 INFO [org.jboss.as] (Controller Boot Thread) JBAS015961: Http management interface listening on http://127.0.0.1:9990/management
17:18:03,024 INFO [org.jboss.as] (Controller Boot Thread) JBAS015951: Admin console listening on http://127.0.0.1:9990
17:18:03,029 INFO [org.jboss.as] (Controller Boot Thread) JBAS015874: JBoss Infinispan Server 6.0.0.Alpha2 (AS 7.2.0.Final) started in 23314ms – Started 92 of 130 services (38 services are passive or on-demand)

Configurando o Cliente

Crie um novo projeto Java no Eclipse: File –> New –> Java Project:

project

InfinispanHotRodClient.java

package com.infinispan;
import org.infinispan.client.hotrod.RemoteCache;
import org.infinispan.client.hotrod.RemoteCacheManager;

public class InfinispanHotRodClient {

    public static void main(String[] args) { 
        RemoteCacheManager rcm = new RemoteCacheManager("192.168.122.1");
        RemoteCache rc = rcm.getCache();

        String key = "myKey";

        // Storing data
        rc.put(key, "myValue");

        // Retrieving data
        System.out.printf("Value of key %s is %s", key, rc.get(key));
    }
}

Adicionando as bibliotecas do Infinipan no Cliente

Clique com o direito em cima do projeto –> Build Path –> Configure Build Path: 

Na próxima janela clique no botão Add Library –> User Library –> Next –> User Libraries –> New:

Screenshot from 2013-08-06 21:17:53

Clique no botão Add External JARs… 

Screenshot from 2013-08-06 21:23:15

Selecione todos os jars do diretório /opt/infinispan-server-6.0.0.Alpha2/client/hotrod/java: 

  • commons-pool-1.6.jar
  • infinispan-client-hotrod-6.0.0.Alpha2.jar
  • infinispan-commons-6.0.0.Alpha2.jar
  • jboss-logging-3.1.1.GA.jar
  • jboss-marshalling-1.3.15.GA.jar
  • jboss-marshalling-river-1.3.15.GA.jar

Executando o cliente

Execute a classe Java com o seguinte comando:

Ctrl + F11

Saída no console

Aug 6, 2013 9:29:09 PM org.infinispan.client.hotrod.RemoteCacheManager start
INFO: ISPN004021: Infinispan version: 6.0.0.Alpha2
Value of key myKey is myValue