<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Rafael Liu Blog &#187; JBoss</title>
	<atom:link href="http://rafaelliu.net/category/jboss/feed/" rel="self" type="application/rss+xml" />
	<link>http://rafaelliu.net</link>
	<description>Café, pinguins e outras coisas</description>
	<lastBuildDate>Wed, 28 Mar 2012 21:54:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.3</generator>
		<item>
		<title>jboss.management.local:* already registered</title>
		<link>http://rafaelliu.net/2012/03/28/jboss-management-local-already-registered/</link>
		<comments>http://rafaelliu.net/2012/03/28/jboss-management-local-already-registered/#comments</comments>
		<pubDate>Wed, 28 Mar 2012 21:54:28 +0000</pubDate>
		<dc:creator>rafaelliu</dc:creator>
				<category><![CDATA[JBoss]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[jmx]]></category>
		<category><![CDATA[jrs77]]></category>
		<category><![CDATA[mbean]]></category>

		<guid isPermaLink="false">http://rafaelliu.net/?p=611</guid>
		<description><![CDATA[A exceção é da forma: javax.management.InstanceAlreadyExistsException: jboss.management.local:&#60;MBEAN NAME&#62; already registered. at org.jboss.mx.server.registry.BasicMBeanRegistry.add&#40;BasicMBeanRegistry.java:756&#41; at org.jboss.mx.server.registry.BasicMBeanRegistry.registerMBean&#40;BasicMBeanRegistry.java:233&#41; at sun.reflect.GeneratedMethodAccessor107.invoke&#40;Unknown Source&#41; at sun.reflect.DelegatingMethodAccessorImpl.invoke&#40;DelegatingMethodAccessorImpl.java:25&#41; at java.lang.reflect.Method.invoke&#40;Method.java:597&#41; at org.jboss.mx.interceptor.ReflectedDispatcher.invoke&#40;ReflectedDispatcher.java:157&#41; at org.jboss.mx.server.Invocation.dispatch&#40;Invocation.java:96&#41; at org.jboss.mx.interceptor.AbstractInterceptor.invoke&#40;AbstractInterceptor.java:138&#41; at org.jboss.mx.server.Invocation.invoke&#40;Invocation.java:90&#41; at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke&#40;ModelMBeanOperationInterceptor.java:140&#41; at org.jboss.mx.server.Invocation.invoke&#40;Invocation.java:90&#41; O JBoss, atendendo à JSR-77, registra sobre o domínio jboss.management.local todos os pacotes deployados. O problema ocorre quando dois pacotes com o [...]]]></description>
			<content:encoded><![CDATA[<p>A exceção é da forma:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">javax.<span style="color: #006633;">management</span>.<span style="color: #006633;">InstanceAlreadyExistsException</span><span style="color: #339933;">:</span> jboss.<span style="color: #006633;">management</span>.<span style="color: #006633;">local</span><span style="color: #339933;">:&lt;</span>MBEAN NAME<span style="color: #339933;">&gt;</span> already registered.
        <span style="color: #006633;">at</span> org.<span style="color: #006633;">jboss</span>.<span style="color: #006633;">mx</span>.<span style="color: #006633;">server</span>.<span style="color: #006633;">registry</span>.<span style="color: #006633;">BasicMBeanRegistry</span>.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>BasicMBeanRegistry.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">756</span><span style="color: #009900;">&#41;</span>
        at org.<span style="color: #006633;">jboss</span>.<span style="color: #006633;">mx</span>.<span style="color: #006633;">server</span>.<span style="color: #006633;">registry</span>.<span style="color: #006633;">BasicMBeanRegistry</span>.<span style="color: #006633;">registerMBean</span><span style="color: #009900;">&#40;</span>BasicMBeanRegistry.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">233</span><span style="color: #009900;">&#41;</span>
        at sun.<span style="color: #006633;">reflect</span>.<span style="color: #006633;">GeneratedMethodAccessor107</span>.<span style="color: #006633;">invoke</span><span style="color: #009900;">&#40;</span>Unknown Source<span style="color: #009900;">&#41;</span>
        at sun.<span style="color: #006633;">reflect</span>.<span style="color: #006633;">DelegatingMethodAccessorImpl</span>.<span style="color: #006633;">invoke</span><span style="color: #009900;">&#40;</span>DelegatingMethodAccessorImpl.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">25</span><span style="color: #009900;">&#41;</span>
        at java.<span style="color: #006633;">lang</span>.<span style="color: #006633;">reflect</span>.<span style="color: #003399;">Method</span>.<span style="color: #006633;">invoke</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Method</span>.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">597</span><span style="color: #009900;">&#41;</span>
        at org.<span style="color: #006633;">jboss</span>.<span style="color: #006633;">mx</span>.<span style="color: #006633;">interceptor</span>.<span style="color: #006633;">ReflectedDispatcher</span>.<span style="color: #006633;">invoke</span><span style="color: #009900;">&#40;</span>ReflectedDispatcher.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">157</span><span style="color: #009900;">&#41;</span>
        at org.<span style="color: #006633;">jboss</span>.<span style="color: #006633;">mx</span>.<span style="color: #006633;">server</span>.<span style="color: #006633;">Invocation</span>.<span style="color: #006633;">dispatch</span><span style="color: #009900;">&#40;</span>Invocation.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">96</span><span style="color: #009900;">&#41;</span>
        at org.<span style="color: #006633;">jboss</span>.<span style="color: #006633;">mx</span>.<span style="color: #006633;">interceptor</span>.<span style="color: #006633;">AbstractInterceptor</span>.<span style="color: #006633;">invoke</span><span style="color: #009900;">&#40;</span>AbstractInterceptor.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">138</span><span style="color: #009900;">&#41;</span>
        at org.<span style="color: #006633;">jboss</span>.<span style="color: #006633;">mx</span>.<span style="color: #006633;">server</span>.<span style="color: #006633;">Invocation</span>.<span style="color: #006633;">invoke</span><span style="color: #009900;">&#40;</span>Invocation.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">90</span><span style="color: #009900;">&#41;</span>
        at org.<span style="color: #006633;">jboss</span>.<span style="color: #006633;">mx</span>.<span style="color: #006633;">interceptor</span>.<span style="color: #006633;">ModelMBeanOperationInterceptor</span>.<span style="color: #006633;">invoke</span><span style="color: #009900;">&#40;</span>ModelMBeanOperationInterceptor.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">140</span><span style="color: #009900;">&#41;</span>
        at org.<span style="color: #006633;">jboss</span>.<span style="color: #006633;">mx</span>.<span style="color: #006633;">server</span>.<span style="color: #006633;">Invocation</span>.<span style="color: #006633;">invoke</span><span style="color: #009900;">&#40;</span>Invocation.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">90</span><span style="color: #009900;">&#41;</span></pre></div></div>

<p>O JBoss, atendendo à <a href="http://jcp.org/en/jsr/detail?id=77" target="_blank">JSR-77</a>, registra sobre o domínio jboss.management.local todos os pacotes deployados. O problema ocorre quando dois pacotes com o mesmo nome estão presentes. A princípio isso nunca aconteceria, os OS não permitem isso. Mas o JBoss tem a capacidade de fazer deploy de pastas aninhadas, além de poder ser configurado para possuir várias pastas de deploy.</p>
<p>Então a solução mais simples seria alterar o nome dos pacotes (pode ser também uma Persistence Unit ou qualquer outro deployable) conflitantes. Se essa não for uma opção, é possível também desabilitar a implementação JSR-77 do JBoss, que não deve trazer maiores consequências (a não ser que esses MBeans estejam sendo explicitamente usados).</p>
<p>Para tanto basta remover ou desabilitar (adicionando a extensão .rej) o arquivo <code>$JBOSS_CONF/deployers/jsr77-deployers-jboss-beans.xml</code></p>
]]></content:encoded>
			<wfw:commentRss>http://rafaelliu.net/2012/03/28/jboss-management-local-already-registered/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adicionando segurança ao JBoss Messaging</title>
		<link>http://rafaelliu.net/2012/03/22/adicionando-seguran-jboss-messaging/</link>
		<comments>http://rafaelliu.net/2012/03/22/adicionando-seguran-jboss-messaging/#comments</comments>
		<pubDate>Thu, 22 Mar 2012 21:31:21 +0000</pubDate>
		<dc:creator>rafaelliu</dc:creator>
				<category><![CDATA[JBoss]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[segurança]]></category>
		<category><![CDATA[jms]]></category>

		<guid isPermaLink="false">http://rafaelliu.net/?p=603</guid>
		<description><![CDATA[Nesse post quero falar de como prover segurança na troca de mensagens utilizando JBoss Messaging. Segurança é um conceito bem amplo. Em termos da mensagens, o que queremos é: autenticidade: garantia de que a mensagem é de quem achamos que é; integridade: garantia que a mensagem é a que foi escrita originalmente; confidencialidade: garantia que [...]]]></description>
			<content:encoded><![CDATA[<p>Nesse post quero falar de como prover segurança na troca de mensagens utilizando JBoss Messaging. Segurança é um conceito bem amplo. Em termos da mensagens, o que queremos é:</p>
<ul>
<li><strong>autenticidade:</strong> garantia de que a mensagem é de quem achamos que é;</li>
<li><strong>integridade:</strong> garantia que a mensagem é a que foi escrita originalmente;</li>
<li><strong>confidencialidade:</strong> garantia que a mensagem não foi lida por mais ninguém.</li>
</ul>
<p>Também não queremos que qualquer consumidor leia da fila. Portanto, além de todas essas garantias, vamos adicionar autenticação e autorização para restringir o acesso ao nosso provedor JMS.</p>
<p>Como alguns já devem ter notado, grande parte dos nossos requisitos são atendidos utilizado-se Certificados Digitais. E é justamente o que vamos usar.</p>
<h3>Utilizando um canal SSL para envio de mensagens</h3>
<p>O JBoss Messaging (JBM) utiliza um subprojeto da JBoss chamado <a href="http://www.jboss.org/jbossremoting" target="_blank">JBoss Remoting</a> para comunicação de rede. Para utilizarmos SSL, basta configurar o conector do JBoss Remoting para utilizar um socket SSL. Para nossa sorte a equipe da JBoss já fez isso para nós, basta copiar o arquivo <code>$JBOSS_HOME/docs/examples/jms/remoting-sslbisocket-service.xml</code> para a pasta de deploy.</p>
<p>Será preciso criar <a href="http://www.techbrainwave.com/?p=953" target="_blank">um Keystore</a> <code>$JBOSS_HOME/server/default/conf/messaging.keystore</code> com a par de chaves e o certificado. Se o certificado for auto-assinado, será também preciso adicioná-lo Truststore do cliente. A senha do Keystore deve ser &#8220;secureexample&#8221;.</p>
<p>Para produção é possível alterar configurações de keystore e senha no MBean <code>org.jboss.remoting.security.SSLSocketBuilder</code>, dentro do arquivo <code>remoting-sslbisocket-service.xml</code> que copiamos.</p>
<p>Feito isso, vamos criar um ConnectionFactory que utilize esse conector. Dentro de deploy, crie um arquivo <code>messaging-secure-socket-service.xml</code>:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;server<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;mbean</span> <span style="color: #000066;">code</span>=<span style="color: #ff0000;">&quot;org.jboss.jms.server.connectionfactory.ConnectionFactory&quot;</span></span>
<span style="color: #009900;">          <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;jboss.messaging.destination:service=SecureConnectionFactory&quot;</span></span>
<span style="color: #009900;">          <span style="color: #000066;">xmbean-dd</span>=<span style="color: #ff0000;">&quot;xmdesc/ConnectionFactory-xmbean.xml&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
&nbsp;
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;depends</span> <span style="color: #000066;">optional-attribute-name</span>=<span style="color: #ff0000;">&quot;ServerPeer&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>jboss.messaging:service=ServerPeer<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/depends<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;depends</span> <span style="color: #000066;">optional-attribute-name</span>=<span style="color: #ff0000;">&quot;Connector&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>jboss.messaging:service=Connector,transport=sslbisocket<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/depends<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;attribute</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;JNDIBindings&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bindings<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;binding<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>/SecureConnectionFactory<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/binding<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/bindings<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/attribute<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/mbean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/server<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Note que o atributo <code>Connector</code> possui o Name do MBean que utiliza o conector SSL. Estamos informando para o JBoss que esse ConnectionFactory deve utilizar um canal SSL. Sempre que o client utilizar um ConnectionFactory obtido pelo lookup de &#8220;/SecureConnectionFactory&#8221; estará se comunicando em um canal encriptado.</p>
<p>NOTA: cuidado para não utilizar binds JNDI padrões do JBM, definidos em <code>connection-factories-service.xml</code>. Eles usam o <code>jboss.messaging:service=Connector,transport=bisocket</code>, que não utiliza Certificado.</p>
<h3>Configurando autenticação/autorização para filas</h3>
<p>Para autenticar o client vamos utilizar usuário/senha. O JBM por padrão utiliza o Security Domain &#8220;messaging&#8221; definido em <code>messaging-jboss-beans.xml</code>, que utiliza datasource DefaultDS. Nesse mesmo arquivo é possível alterar o Security Domain utilizado.</p>
<p>As definições de autorização devem ser feitas por fila. Ao definir uma fila, devemos fazê-lo da seguinte forma:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;server<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;mbean</span> <span style="color: #000066;">code</span>=<span style="color: #ff0000;">&quot;org.jboss.jms.server.destination.QueueService&quot;</span></span>
<span style="color: #009900;">      <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;jboss.messaging.destination:service=Queue,name=securityTestQueue&quot;</span></span>
<span style="color: #009900;">      <span style="color: #000066;">xmbean-dd</span>=<span style="color: #ff0000;">&quot;xmdesc/Queue-xmbean.xml&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
&nbsp;
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;depends</span> <span style="color: #000066;">optional-attribute-name</span>=<span style="color: #ff0000;">&quot;ServerPeer&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>jboss.messaging:service=ServerPeer<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/depends<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;depends<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>jboss.messaging:service=PostOffice<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/depends<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;attribute</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;SecurityConfig&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;security<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;role</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;guest&quot;</span> <span style="color: #000066;">read</span>=<span style="color: #ff0000;">&quot;false&quot;</span> <span style="color: #000066;">write</span>=<span style="color: #ff0000;">&quot;false&quot;</span> <span style="color: #000066;">create</span>=<span style="color: #ff0000;">&quot;false&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;role</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;publisher&quot;</span> <span style="color: #000066;">read</span>=<span style="color: #ff0000;">&quot;true&quot;</span> <span style="color: #000066;">write</span>=<span style="color: #ff0000;">&quot;true&quot;</span> <span style="color: #000066;">create</span>=<span style="color: #ff0000;">&quot;true&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/security<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/attribute<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/mbean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/server<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Note o atributo <code>SecurityConfig</code>. Acho que é tudo bem auto-explicativo, a não ser o <code>create</code>. Esse atributo se aplica a tópico e dá o privilégio do client criar uma subscrição <a href="http://activemq.apache.org/how-do-durable-queues-and-topics-work.html" target="_blank">DURABLE</a>.</p>
<p>O para publicar na fila, o client deve obter uma conexão usando a chamada <code>createConnection()</code> que passa usuário e senha:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">javax.<span style="color: #006633;">jms</span>.<span style="color: #006633;">ConnectionFactory</span>.<span style="color: #006633;">createConnection</span><span style="color: #009900;">&#40;</span>username, password<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>NOTA: cuidado ao utilizar os arquivos <code>*-persistence-service.xml</code> que vêm de exemplo no JBoss. Alguns usuário padrões são definidos neles e podem ser utilizados para obter acesso privilegiado. Em um <a href="http://rafaelliu.net/2010/05/30/configurando-o-jboss-messaging-em-cluster/">post anterior</a> postei mais informações sobre o JBoss Messaging.</p>
<h3>Criando um MDB para consumir</h3>
<p>Para consumir mensagens autenticando-se e utilizando o ConnectionFactory sobre SSL, o MDB deve ser configurado com algumas propriedade a mais:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">@MessageDriven<span style="color: #009900;">&#40;</span>activationConfig <span style="color: #339933;">=</span>
<span style="color: #009900;">&#123;</span>
   @ActivationConfigProperty<span style="color: #009900;">&#40;</span>propertyName<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;destinationType&quot;</span>, propertyValue<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;javax.jms.Queue&quot;</span><span style="color: #009900;">&#41;</span>,
   @ActivationConfigProperty<span style="color: #009900;">&#40;</span>propertyName<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;destination&quot;</span>, propertyValue<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;queue/securityTestQueue&quot;</span><span style="color: #009900;">&#41;</span>,
   @ActivationConfigProperty<span style="color: #009900;">&#40;</span>propertyName<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;ConnectionFactoryName&quot;</span>, propertyValue<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;SecureConnectionFactory&quot;</span><span style="color: #009900;">&#41;</span>,
   @ActivationConfigProperty<span style="color: #009900;">&#40;</span>propertyName<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;user&quot;</span>, propertyValue<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;john&quot;</span><span style="color: #009900;">&#41;</span>,
   @ActivationConfigProperty<span style="color: #009900;">&#40;</span>propertyName<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;password&quot;</span>, propertyValue<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;needle&quot;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> QueueConsumer <span style="color: #000000; font-weight: bold;">implements</span> MessageListener <span style="color: #009900;">&#123;</span>
   <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> onMessage<span style="color: #009900;">&#40;</span>Message message<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">getClass</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot; -&gt; &quot;</span> <span style="color: #339933;">+</span> message<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>That&#8217;s it!</p>
]]></content:encoded>
			<wfw:commentRss>http://rafaelliu.net/2012/03/22/adicionando-seguran-jboss-messaging/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Medindo consecutivos tempos de subida do JBoss</title>
		<link>http://rafaelliu.net/2011/12/05/medindo-consecutivos-tempos-de-subida-do-jboss/</link>
		<comments>http://rafaelliu.net/2011/12/05/medindo-consecutivos-tempos-de-subida-do-jboss/#comments</comments>
		<pubDate>Mon, 05 Dec 2011 19:01:26 +0000</pubDate>
		<dc:creator>rafaelliu</dc:creator>
				<category><![CDATA[Diverso]]></category>
		<category><![CDATA[JBoss]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">http://rafaelliu.net/?p=585</guid>
		<description><![CDATA[Estava com um problema que causava congelamentos de até 10 minutos nas máquinas do JBoss em um cliente. Estes congelamentos eram intermitentes e aconteciam sempre no boot do JBoss. A fim de fazer testes com várias configurações diferentes e gerar um relatório com dados precisos, escrevi um script que executa o init script do JBoss, [...]]]></description>
			<content:encoded><![CDATA[<p>Estava com um problema que causava congelamentos de até 10 minutos nas máquinas do JBoss em um cliente. Estes congelamentos eram intermitentes e aconteciam sempre no boot do JBoss.</p>
<p>A fim de fazer testes com várias configurações diferentes e gerar um relatório com dados precisos, escrevi um script que executa o init script do JBoss, espera ele inicializar completamente, grava o tempo de inicialização e mata o processo. Faz isso 50 vezes.</p>
<p>Estou postando ele aqui na esperança de ser útil para mais alguém. Ele é bastante auto-explicativo:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span>
<span style="color: #666666; font-style: italic;"># Notes: all Java processes are going to the KILLED and</span>
<span style="color: #666666; font-style: italic;"># previous probe.log ERASED!</span>
&nbsp;
<span style="color: #007800;">JBOSS_LOG_FILE</span>=<span style="color: #ff0000;">&quot;/opt/jboss/server/default/log/server.log&quot;</span>
<span style="color: #007800;">REPEAT</span>=<span style="color: #000000;">50</span>
&nbsp;
<span style="color: #007800;">START_STRING</span>=<span style="color: #ff0000;">&quot;Started in&quot;</span>
<span style="color: #007800;">RESULT_FILE</span>=<span style="color: #ff0000;">&quot;/root/probe.log-<span style="color: #780078;">`date +%F`</span>&quot;</span>
<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #007800;">$RESULT_FILE</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">for</span> i <span style="color: #000000; font-weight: bold;">in</span> $<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #c20cb9; font-weight: bold;">seq</span> <span style="color: #000000;">1</span> <span style="color: #007800;">$REPEAT</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>; <span style="color: #000000; font-weight: bold;">do</span>
	<span style="color: #666666; font-style: italic;"># clean</span>
	<span style="color: #c20cb9; font-weight: bold;">killall</span> <span style="color: #660033;">-9</span> java
	<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #007800;">$JBOSS_LOG_FILE</span>
&nbsp;
	<span style="color: #666666; font-style: italic;"># init and wait</span>
	<span style="color: #c20cb9; font-weight: bold;">sh</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>jboss start
	<span style="color: #000000; font-weight: bold;">while</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;x<span style="color: #007800;">$( grep &quot;$START_STRING&quot; $JBOSS_LOG_FILE )</span>&quot;</span> == <span style="color: #ff0000;">&quot;x&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">do</span>
		<span style="color: #c20cb9; font-weight: bold;">sleep</span> <span style="color: #000000;">1</span>
	<span style="color: #000000; font-weight: bold;">done</span>
&nbsp;
	<span style="color: #666666; font-style: italic;"># log</span>
	<span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #007800;">$JBOSS_LOG_FILE</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$START_STRING</span>&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> <span style="color: #007800;">$RESULT_FILE</span>
<span style="color: #000000; font-weight: bold;">done</span>
&nbsp;
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Done&quot;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://rafaelliu.net/2011/12/05/medindo-consecutivos-tempos-de-subida-do-jboss/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Separando logs por aplicação no JBoss</title>
		<link>http://rafaelliu.net/2011/10/20/separando-logs-por-aplicacao-no-jboss/</link>
		<comments>http://rafaelliu.net/2011/10/20/separando-logs-por-aplicacao-no-jboss/#comments</comments>
		<pubDate>Thu, 20 Oct 2011 21:56:45 +0000</pubDate>
		<dc:creator>rafaelliu</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[JBoss]]></category>
		<category><![CDATA[log]]></category>
		<category><![CDATA[log4j]]></category>
		<category><![CDATA[separar]]></category>

		<guid isPermaLink="false">http://rafaelliu.net/?p=526</guid>
		<description><![CDATA[Separar logs de aplicações no JBoss é uma tarefa comum e existem alguns modos de fazer isso: 1. Adicionando uma Category ao $JBOSS_CONF/conf/jboss-log4j.xml pegando todos o package da aplicação e usando um Appender específico. Por exemplo: &#60;category name=&#34;net.rafaelliu&#34;&#62; &#60;priority value=&#34;INFO&#34; /&#62; &#60;appender-ref ref=&#34;BLOG_LOG&#34;/&#62; &#60;/category&#62; Embora seja a solução mais fácil, a separação não está perfeita. [...]]]></description>
			<content:encoded><![CDATA[<p>Separar logs de aplicações no JBoss é uma tarefa comum e existem alguns modos de fazer isso:</p>
<p><strong>1. Adicionando uma Category</strong> ao <code>$JBOSS_CONF/conf/jboss-log4j.xml</code> pegando todos o package da aplicação e usando um Appender específico. Por exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;">   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;category</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;net.rafaelliu&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
     <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;priority</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;INFO&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
     <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;appender-ref</span> <span style="color: #000066;">ref</span>=<span style="color: #ff0000;">&quot;BLOG_LOG&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/category<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Embora seja a solução mais fácil, a separação não está perfeita. Como estamos separando por pacotes, um erro no Hibernate por exemplo, ainda vai ser escrito no server.log, mesmo tendo sido lançado pela aplicação.</p>
<p>&nbsp;</p>
<p><strong>2. Usando Filters</strong> é possível criar um <code>TCLFilter</code> para pegar apenas logs de determinada aplicação. Basta criar um Appender específico:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;">   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;appender</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;BLOG_LOG&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;org.jboss.logging.appender.DailyRollingFileAppender&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;errorHandler</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;org.jboss.logging.util.OnlyOnceErrorHandler&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;param</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;File&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;${jboss.server.log.dir}/blog.log&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;param</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;Append&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;true&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;param</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;DatePattern&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;'.'yyyy-MM-dd&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;layout</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;org.apache.log4j.PatternLayout&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;param</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;ConversionPattern&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;%d %-5p [%c] (%t) %m%n&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/layout<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
      <span style="color: #808080; font-style: italic;">&lt;!-- filter --&gt;</span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;filter</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;org.jboss.logging.filter.TCLFilter&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;param</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;AcceptOnMatch&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;true&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
         <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;param</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;DeployURL&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;blog.war&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/filter<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>    
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;filter</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;org.apache.log4j.varia.DenyAllFilter&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;/filter<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/appender<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>O problema aqui é que, embora o log seja gravado separadamente (inclusive de pacotes do Hibernate, por exemplo), ele será gravado duas vezes: uma vez no blog.log que definimos e uma vez no server.log do JBoss. Isso resulta em mais IO e mais espaço em disco.</p>
<p>&nbsp;</p>
<p><strong>3. Empacotando um log4j na própria aplicação</strong>, em <code>WEB-INF/lib</code>, é possível inverter o classloader e fazer com que as configurações do log4j valham apenas para sua aplicação:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;jboss-web<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;class-loading</span> <span style="color: #000066;">java2ClassLoadingCompliance</span>=<span style="color: #ff0000;">&quot;false&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;loader-repository<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
			net.rafaelliu:loader=blog.war
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;loader-repository-config<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>java2ParentDelegation=false<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/loader-repository-config<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/loader-repository<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/class-loading<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/jboss-web<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Feito isso, é preciso criar o <code>log4j.properties</code> (ou xml) normalmente:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">log4j.rootLogger=<span style="color: #800000;">${jboss.server.log.threshold}</span>, fileout
&nbsp;
log4j.appender.fileout=org.apache.log4j.DailyRollingFileAppender
log4j.appender.fileout.File=<span style="color: #800000;">${jboss.server.log.dir}</span><span style="color: #000000; font-weight: bold;">/</span>blog.log
log4j.appender.fileout.Append=<span style="color: #c20cb9; font-weight: bold;">true</span>
log4j.appender.fileout.DatePattern=<span style="color: #ff0000;">'.'</span>yyyy-MM-dd
log4j.appender.fileout.layout=org.apache.log4j.PatternLayout
log4j.appender.fileout.layout.ConversionPattern=<span style="color: #000000; font-weight: bold;">%</span>d <span style="color: #000000; font-weight: bold;">%</span>-5p <span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000; font-weight: bold;">%</span>c<span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000; font-weight: bold;">%</span>t<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #000000; font-weight: bold;">%</span>m<span style="color: #000000; font-weight: bold;">%</span>n</pre></div></div>

<p>O log4j faz parse de system properties, que podem ser usadas no arquivo de configuração. Uma observação importante é que não é possível usar classes do JBoss aqui! Isso causaria <code>ClassCastExceptions</code>. Algumas dicas:</p>
<ul>
<li>No JBoss 5, use o <code>jboss.server.log.dir</code> e o <code>jboss.server.log.threshold</code>. Isso facilitará o deploy da sua aplicação em outros ambientes;</li>
<li><strong> </strong> Use o mesmo Appender do jboss-log4j (provavelmente uma classe da JBoss estará lá, veja o equivalente da Apache). Isso deixa os logs do JBoss e das aplicações sincronizados, facilitando o correlacionamento de erros;</li>
</ul>
<p>O problema dessa abordagem é que perdemos o &#8220;hot deploy&#8221; do jboss-log4j.xml, que nos permite alterar o nível de log sem indisponibilidade.</p>
<p><strong>Referências:</strong><br />
<a href="http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PropertyConfigurator.html">http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PropertyConfigurator.html</a><br />
<a href="http://viragine.blogspot.com/2009/02/separando-o-log-do-jboss-as-por.html">http://viragine.blogspot.com/2009/02/separando-o-log-do-jboss-as-por.html</a><br />
<a href="http://community.jboss.org/wiki/SeparatingApplicationLogs">http://community.jboss.org/wiki/SeparatingApplicationLogs</a></p>
]]></content:encoded>
			<wfw:commentRss>http://rafaelliu.net/2011/10/20/separando-logs-por-aplicacao-no-jboss/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SumUp do JBossInBossa 2011</title>
		<link>http://rafaelliu.net/2011/10/11/sumup-do-jbossinbossa-2011/</link>
		<comments>http://rafaelliu.net/2011/10/11/sumup-do-jbossinbossa-2011/#comments</comments>
		<pubDate>Tue, 11 Oct 2011 16:28:24 +0000</pubDate>
		<dc:creator>rafaelliu</dc:creator>
				<category><![CDATA[Evento]]></category>
		<category><![CDATA[JBoss]]></category>
		<category><![CDATA[JBoss In Bossa]]></category>
		<category><![CDATA[JBossInBossa]]></category>

		<guid isPermaLink="false">http://rafaelliu.net/?p=508</guid>
		<description><![CDATA[EDIT: slides da palestra disponíveis no SlideShare Foi muito bom! Um dia inteiro com geeks das mais diversas áreas num ambiente de troca de conhecimento incrível. As fotos estão no Picasa. O local do evento ficou apertado para o tanto de gente que deu. Em algumas apresentações as salas ficaram abarrotadas, como a do @brunorst [...]]]></description>
			<content:encoded><![CDATA[<p><strong>EDIT:</strong> <a title="Slides" href="http://www.slideshare.net/rafaelliu/jboss-portlet-bridge" target="_blank">slides da palestra</a> disponíveis no SlideShare</p>
<p>Foi muito bom! Um dia inteiro com geeks das mais diversas áreas num ambiente de troca de conhecimento incrível. <a title="JBossInBossa 2011" href="https://picasaweb.google.com/114838761141227062246/JBossInBossa2011" target="_blank">As fotos estão no Picasa</a>.</p>
<p>O local do evento ficou apertado para o tanto de gente que deu. Em algumas apresentações as salas ficaram abarrotadas, como a do @brunorst e @claudio4j falando de <strong>Tuning de JBoss</strong> e a do @vtcorrea e @g_luszczynski falando de <strong>Alta Disponibilidade</strong>. Ambas as palestras muito bem criticadas e ambas não pude ver..</p>
<p>O @salaboy abriu o evento com um keynote sobre <strong>jBPM5</strong> seguido do @jedgarsilva, com toda sua manha de fazer apresentações, falando sobre <strong>Cloud</strong>. O @porcelli e o Pedro Igor falaram sobre <strong>noSQL</strong> e <strong>data grids</strong> e se complementaram bem o primeiro dando um banho (muito bem dado) de conceitos e o segundo falando de produto mesmo, o <strong>Infinispan</strong>. Para mim foram as apresentações mais interessantes porque nunca tinha ido atrás desses assuntos, que já estão há um bom tempo ai como buzzwords.</p>
<p>Uma apresentação que eu queria muito ter visto e perdi foi a do @jpviragine falando sobre Federação de Dados com o <strong>Teiid</strong>. No horário da apresentação dele eu estava na outra sala falando sobre <strong>JBoss Portlet Bridge</strong>. Uma pena, ainda mais vendo a boa repercussão que teve =/</p>
<p>Teve também <strong>Weld</strong> e <strong>Seam</strong> com o @rimolive e a @hannelita, que cobriram muito bem o assunto. O @rafabene e o @osmanlira mandaram muito bem na apresentação de <strong>Drools</strong>. O @rafaeltuelho falou sobre <strong>RHQ</strong>, com uma demo que pelo que ouvi foi massa. E restou à Flávia Rainone fechar o evento falando sobre <strong>JBoss7</strong>.</p>
<p>O evento foi nota 10, mesmo sendo apenas a primeira edição em Brasília. Fiquei muito feliz de ter podido palestrar nele porque o público estava muito interessado e não tem nada melhor do que ver gente interessada perguntando na sua palestra =)</p>
<p>Aos que não foram, recomendo não perderem a chance de se inscrever para a edição de 2012 já já deve tá vindo ai.</p>
<p>Cheers!</p>
]]></content:encoded>
			<wfw:commentRss>http://rafaelliu.net/2011/10/11/sumup-do-jbossinbossa-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rodando GateIn no Eclipse</title>
		<link>http://rafaelliu.net/2011/09/30/rodando-gatein-no-eclipse/</link>
		<comments>http://rafaelliu.net/2011/09/30/rodando-gatein-no-eclipse/#comments</comments>
		<pubDate>Fri, 30 Sep 2011 14:04:31 +0000</pubDate>
		<dc:creator>rafaelliu</dc:creator>
				<category><![CDATA[JBoss]]></category>
		<category><![CDATA[Portal]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[gatein]]></category>
		<category><![CDATA[Tomcat]]></category>

		<guid isPermaLink="false">http://rafaelliu.net/?p=494</guid>
		<description><![CDATA[Graças ao módulo WCI, o GateIn pode rodar em vários servidores. A JBoss distribui ele em duas formas: baseado no JBoss e baseado no Tomcat. Desenvolver portlets para o GateIn utilizando o empacotamento em JBoss é bem simples, basta adicionar um novo servidor (é preciso ter o módulo WTP, e preferencialmente o JBoss Tools também) [...]]]></description>
			<content:encoded><![CDATA[<p>Graças ao módulo WCI, o GateIn pode rodar em vários servidores. A JBoss distribui ele em duas formas: baseado no JBoss e baseado no Tomcat. Desenvolver portlets para o GateIn utilizando o empacotamento em JBoss é bem simples, basta adicionar um novo servidor (é preciso ter o <a title="Eclipse WTP" href="http://www.eclipse.org/webtools/" target="_blank">módulo WTP</a>, e preferencialmente o<a title="JBoss Tools" href="http://www.jboss.org/tools" target="_blank"> JBoss Tools</a> também) JBoss apontando para a instalação do GateIn e está tudo resolvido.</p>
<p>Se você quer utilizar o GateIn com Tomcat é um pouco mais complicado, mas nada preciso adicionar a instalação do Tomcat do GateIn normalmente fazer algumas alterações:</p>
<p>1. Mudar no &#8220;Server Location&#8221; para &#8220;Use Tomcat installation (takes control of Tomcat installation)&#8221;</p>
<p>2. No  &#8221;Launch Configuration&#8221; configurar o &#8220;Working directory&#8221; com o $TOMCAT_HOME</p>
<p>3. Ainda no  &#8221;Launch Configuration&#8221; adicionar os parâmetros:</p>
<p style="padding-left: 30px;">-Djava.security.auth.login.config=../conf/jaas.conf</p>
<p style="padding-left: 30px;">-Dexo.conf.dir.name=gatein/conf</p>
<p>4. Provavelmente será também preciso alterar limites de memória da JVM e timeouts de subida/descida do WTP.</p>
<p>Para desenvolver no GateIn, tanto no JBoss quanto no Tomcat, pode ser interessante adicionar o parâmetro <code>-Dexo.product.developing=true</code>, que desabilita vários caches e desabilita o merge/compressão de CSS e JS.</p>
]]></content:encoded>
			<wfw:commentRss>http://rafaelliu.net/2011/09/30/rodando-gatein-no-eclipse/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rapidinha: enviando mensagens JGroups no viewAccepted()</title>
		<link>http://rafaelliu.net/2011/08/21/rapidinha-enviando-mensagens-jgroups-no-viewaccepted/</link>
		<comments>http://rafaelliu.net/2011/08/21/rapidinha-enviando-mensagens-jgroups-no-viewaccepted/#comments</comments>
		<pubDate>Sun, 21 Aug 2011 15:29:40 +0000</pubDate>
		<dc:creator>rafaelliu</dc:creator>
				<category><![CDATA[JBoss]]></category>
		<category><![CDATA[arquitetura]]></category>
		<category><![CDATA[jgroups]]></category>

		<guid isPermaLink="false">http://rafaelliu.net/?p=455</guid>
		<description><![CDATA[No JGroups, e﻿nviar mensagens no viewAccepted() é útil quando novos nós precisam passar ao cluster alguma informação ao entrarem no cluster. No entanto nós do cluster apenas aceitam mensagens de nós que façam parte da sua view, o que pode trazer problemas. Imagine um cluster com view V1={A,B,C} e um novo nó D que entra [...]]]></description>
			<content:encoded><![CDATA[<p>No JGroups, e﻿nviar mensagens no viewAccepted() é útil quando novos nós precisam passar ao cluster alguma informação ao entrarem no cluster.</p>
<p>No entanto nós do cluster apenas aceitam mensagens de nós que façam parte da sua view, o que pode trazer problemas. Imagine um cluster com view V1={A,B,C} e um novo nó D que entra no cluster. Quando a nova view V2={A,B,C,D} é instalada no nó D, os outros nós A, B e/ou C podem ainda ter a view V1 (views são instaladas sem ordem específica). Isso quer dizer que eles  vão descartar mensagens enviadas por D, já que ele não faz parte do cluster (porque a view V2 ainda não foi instalada).</p>
<p>Para isso é possível usar o protocolo FLUSH [1] (já existe uma configuração padrão no JGroups chamada flush-udp.xml) que resolve o problema de outros nós não terem a mesma view do nó que enviou a mensagem. No entanto é preciso subir outra thread ao enviar mensagens com o FLUSH no view Accepted() [2].</p>
<p>Referências<br />
[1] <a href="http://www.jgroups.org/manual-3.x/html/user-channel.html#Receiver">http://www.jgroups.org/manual-3.x/html/user-channel.html#Receiver<br />
</a>[2] <a href="http://community.jboss.org/wiki/SendingOfMessagesInViewAcceptedCallback">http://community.jboss.org/wiki/SendingOfMessagesInViewAcceptedCallback<br />
</a></p>
]]></content:encoded>
			<wfw:commentRss>http://rafaelliu.net/2011/08/21/rapidinha-enviando-mensagens-jgroups-no-viewaccepted/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Weld no Tomcat 7</title>
		<link>http://rafaelliu.net/2011/05/29/weld-no-tomcat-7/</link>
		<comments>http://rafaelliu.net/2011/05/29/weld-no-tomcat-7/#comments</comments>
		<pubDate>Sun, 29 May 2011 15:44:03 +0000</pubDate>
		<dc:creator>rafaelliu</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[JBoss]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[weld tomcat]]></category>

		<guid isPermaLink="false">http://rafaelliu.net/?p=428</guid>
		<description><![CDATA[Havia escrito há muito tempo atrás como fazer o deploy de uma aplicação Seam no Tomcat. Daquele tempo para cá muita coisa mudou: o Seam junto com outros frameworks de IoC gerou a JSR-299 de Contexts and Dependency Injection (CDI), a JBoss criou o Weld (implementação de referência CDI), o Seam 3 foi lançado baseado [...]]]></description>
			<content:encoded><![CDATA[<p>Havia <a title="JBoss Seam no Tomcat" href="/?p=25" target="_blank">escrito há muito</a> tempo atrás como fazer o deploy de uma aplicação Seam no Tomcat. Daquele tempo para cá muita coisa mudou: o Seam junto com outros frameworks de IoC gerou a JSR-299 de Contexts and Dependency Injection (CDI), a JBoss criou o Weld (implementação de referência CDI), o Seam 3 foi lançado baseado na nova especificação.</p>
<p>Com a padronização numa JSR, agora implementações CDI são obrigadas a suportar uma variedade maior de ambientes de forma <em>vendor neutral</em>. O <a title="Weld Environments" href="http://docs.jboss.org/weld/reference/latest/en-US/html/environments.html" target="_self">Weld faz isso</a> e entre os ambientes suportados está o Tomcat. Portanto não há necessidade de configurações extras e gambiarras! O próprio projeto Weld provê archetypes maven com várias configuração, para criar uma aplicação para rodar em um <em>servlet container</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">mvn archetype:generate <span style="color: #660033;">-DarchetypeArtifactId</span>=weld-jsf-servlet-minimal \
                       <span style="color: #660033;">-DarchetypeGroupId</span>=org.jboss.weld.archetypes \
                       <span style="color: #660033;">-DarchetypeVersion</span>=1.0.0.Beta1 \
                       <span style="color: #660033;">-DarchetypeRepository</span>=central</pre></div></div>

<p>E um projeto pronto para ser executado no Tomcat/Jetty será criado. O problema é que, devido a <a title="Tomcat 7 container is identified as Tomcat 6" href="https://issues.jboss.org/browse/WELD-879" target="_blank">um bug</a>, no Tomcat 7 pode ser que você veja a seguinte exceção:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">SEVERE<span style="color: #339933;">:</span> <span style="color: #003399;">Exception</span> sending context initialized event to listener instance of <span style="color: #000000; font-weight: bold;">class</span> org.<span style="color: #006633;">jboss</span>.<span style="color: #006633;">weld</span>.<span style="color: #006633;">environment</span>.<span style="color: #006633;">servlet</span>.<span style="color: #006633;">Listener</span>
java.<span style="color: #006633;">lang</span>.<span style="color: #003399;">NoClassDefFoundError</span><span style="color: #339933;">:</span> org<span style="color: #339933;">/</span>apache<span style="color: #339933;">/</span>AnnotationProcessor
	at java.<span style="color: #006633;">lang</span>.<span style="color: #003399;">ClassLoader</span>.<span style="color: #006633;">defineClass1</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">Native</span> <span style="color: #003399;">Method</span><span style="color: #009900;">&#41;</span>
	at java.<span style="color: #006633;">lang</span>.<span style="color: #003399;">ClassLoader</span>.<span style="color: #006633;">defineClass</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">ClassLoader</span>.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">634</span><span style="color: #009900;">&#41;</span>
	at java.<span style="color: #006633;">security</span>.<span style="color: #003399;">SecureClassLoader</span>.<span style="color: #006633;">defineClass</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">SecureClassLoader</span>.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">142</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">loader</span>.<span style="color: #006633;">WebappClassLoader</span>.<span style="color: #006633;">findClassInternal</span><span style="color: #009900;">&#40;</span>WebappClassLoader.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">2820</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">loader</span>.<span style="color: #006633;">WebappClassLoader</span>.<span style="color: #006633;">findClass</span><span style="color: #009900;">&#40;</span>WebappClassLoader.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">1143</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">loader</span>.<span style="color: #006633;">WebappClassLoader</span>.<span style="color: #006633;">loadClass</span><span style="color: #009900;">&#40;</span>WebappClassLoader.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">1638</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">loader</span>.<span style="color: #006633;">WebappClassLoader</span>.<span style="color: #006633;">loadClass</span><span style="color: #009900;">&#40;</span>WebappClassLoader.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">1516</span><span style="color: #009900;">&#41;</span>
	at java.<span style="color: #006633;">lang</span>.<span style="color: #003399;">ClassLoader</span>.<span style="color: #006633;">defineClass1</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">Native</span> <span style="color: #003399;">Method</span><span style="color: #009900;">&#41;</span>
	at java.<span style="color: #006633;">lang</span>.<span style="color: #003399;">ClassLoader</span>.<span style="color: #006633;">defineClass</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">ClassLoader</span>.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">634</span><span style="color: #009900;">&#41;</span>
	at java.<span style="color: #006633;">security</span>.<span style="color: #003399;">SecureClassLoader</span>.<span style="color: #006633;">defineClass</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">SecureClassLoader</span>.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">142</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">loader</span>.<span style="color: #006633;">WebappClassLoader</span>.<span style="color: #006633;">findClassInternal</span><span style="color: #009900;">&#40;</span>WebappClassLoader.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">2820</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">loader</span>.<span style="color: #006633;">WebappClassLoader</span>.<span style="color: #006633;">findClass</span><span style="color: #009900;">&#40;</span>WebappClassLoader.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">1143</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">loader</span>.<span style="color: #006633;">WebappClassLoader</span>.<span style="color: #006633;">loadClass</span><span style="color: #009900;">&#40;</span>WebappClassLoader.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">1638</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">loader</span>.<span style="color: #006633;">WebappClassLoader</span>.<span style="color: #006633;">loadClass</span><span style="color: #009900;">&#40;</span>WebappClassLoader.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">1516</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">jboss</span>.<span style="color: #006633;">weld</span>.<span style="color: #006633;">environment</span>.<span style="color: #006633;">tomcat</span>.<span style="color: #006633;">Tomcat6Container</span>.<span style="color: #006633;">initialize</span><span style="color: #009900;">&#40;</span>Tomcat6Container.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">47</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">jboss</span>.<span style="color: #006633;">weld</span>.<span style="color: #006633;">environment</span>.<span style="color: #006633;">servlet</span>.<span style="color: #006633;">Listener</span>.<span style="color: #006633;">contextInitialized</span><span style="color: #009900;">&#40;</span>Listener.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">184</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">core</span>.<span style="color: #006633;">StandardContext</span>.<span style="color: #006633;">listenerStart</span><span style="color: #009900;">&#40;</span>StandardContext.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">4544</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">core</span>.<span style="color: #006633;">StandardContext</span>.<span style="color: #006633;">startInternal</span><span style="color: #009900;">&#40;</span>StandardContext.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">5016</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">util</span>.<span style="color: #006633;">LifecycleBase</span>.<span style="color: #006633;">start</span><span style="color: #009900;">&#40;</span>LifecycleBase.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">140</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">core</span>.<span style="color: #006633;">ContainerBase</span>.<span style="color: #006633;">startInternal</span><span style="color: #009900;">&#40;</span>ContainerBase.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">1035</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">core</span>.<span style="color: #006633;">StandardHost</span>.<span style="color: #006633;">startInternal</span><span style="color: #009900;">&#40;</span>StandardHost.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">738</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">util</span>.<span style="color: #006633;">LifecycleBase</span>.<span style="color: #006633;">start</span><span style="color: #009900;">&#40;</span>LifecycleBase.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">140</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">core</span>.<span style="color: #006633;">ContainerBase</span>.<span style="color: #006633;">startInternal</span><span style="color: #009900;">&#40;</span>ContainerBase.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">1035</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">core</span>.<span style="color: #006633;">StandardEngine</span>.<span style="color: #006633;">startInternal</span><span style="color: #009900;">&#40;</span>StandardEngine.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">289</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">util</span>.<span style="color: #006633;">LifecycleBase</span>.<span style="color: #006633;">start</span><span style="color: #009900;">&#40;</span>LifecycleBase.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">140</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">core</span>.<span style="color: #006633;">StandardService</span>.<span style="color: #006633;">startInternal</span><span style="color: #009900;">&#40;</span>StandardService.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">442</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">util</span>.<span style="color: #006633;">LifecycleBase</span>.<span style="color: #006633;">start</span><span style="color: #009900;">&#40;</span>LifecycleBase.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">140</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">core</span>.<span style="color: #006633;">StandardServer</span>.<span style="color: #006633;">startInternal</span><span style="color: #009900;">&#40;</span>StandardServer.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">674</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">util</span>.<span style="color: #006633;">LifecycleBase</span>.<span style="color: #006633;">start</span><span style="color: #009900;">&#40;</span>LifecycleBase.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">140</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">startup</span>.<span style="color: #006633;">Catalina</span>.<span style="color: #006633;">start</span><span style="color: #009900;">&#40;</span>Catalina.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">596</span><span style="color: #009900;">&#41;</span>
	at sun.<span style="color: #006633;">reflect</span>.<span style="color: #006633;">NativeMethodAccessorImpl</span>.<span style="color: #006633;">invoke0</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">Native</span> <span style="color: #003399;">Method</span><span style="color: #009900;">&#41;</span>
	at sun.<span style="color: #006633;">reflect</span>.<span style="color: #006633;">NativeMethodAccessorImpl</span>.<span style="color: #006633;">invoke</span><span style="color: #009900;">&#40;</span>NativeMethodAccessorImpl.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">57</span><span style="color: #009900;">&#41;</span>
	at sun.<span style="color: #006633;">reflect</span>.<span style="color: #006633;">DelegatingMethodAccessorImpl</span>.<span style="color: #006633;">invoke</span><span style="color: #009900;">&#40;</span>DelegatingMethodAccessorImpl.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">43</span><span style="color: #009900;">&#41;</span>
	at java.<span style="color: #006633;">lang</span>.<span style="color: #006633;">reflect</span>.<span style="color: #003399;">Method</span>.<span style="color: #006633;">invoke</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Method</span>.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">616</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">startup</span>.<span style="color: #006633;">Bootstrap</span>.<span style="color: #006633;">start</span><span style="color: #009900;">&#40;</span>Bootstrap.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">303</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">startup</span>.<span style="color: #006633;">Bootstrap</span>.<span style="color: #006633;">main</span><span style="color: #009900;">&#40;</span>Bootstrap.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">431</span><span style="color: #009900;">&#41;</span>
Caused by<span style="color: #339933;">:</span> java.<span style="color: #006633;">lang</span>.<span style="color: #003399;">ClassNotFoundException</span><span style="color: #339933;">:</span> org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">AnnotationProcessor</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">loader</span>.<span style="color: #006633;">WebappClassLoader</span>.<span style="color: #006633;">loadClass</span><span style="color: #009900;">&#40;</span>WebappClassLoader.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">1671</span><span style="color: #009900;">&#41;</span>
	at org.<span style="color: #006633;">apache</span>.<span style="color: #006633;">catalina</span>.<span style="color: #006633;">loader</span>.<span style="color: #006633;">WebappClassLoader</span>.<span style="color: #006633;">loadClass</span><span style="color: #009900;">&#40;</span>WebappClassLoader.<span style="color: #006633;">java</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">1516</span><span style="color: #009900;">&#41;</span>
	... <span style="color: #cc66cc;">36</span> more</pre></div></div>

<p>O problema é que o Weld identifica erroneamente o Tomcat 7 como Tomcat 6. Para resolver o problema podemos definir explicitamente que o container que estamos usando é o Tomcat 7. Isso é feito criando-se um arquivo <code>META-INF/services/org.jboss.weld.environment.Container</code> no classpath com o conteúdo:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">org.jboss.weld.environment.tomcat7.Tomcat7Container</pre></div></div>

<p>Note que estamos definindo na mão o container! Ou seja, abrimos mão da portabilidade. Vamos esperar o bug ser corrigido, mas até lá é isso!</p>
<p>Referência: <a href="https://issues.jboss.org/browse/WELD-879">https://issues.jboss.org/browse/WELD-879</a></p>
]]></content:encoded>
			<wfw:commentRss>http://rafaelliu.net/2011/05/29/weld-no-tomcat-7/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Configurando o JBoss Messaging em cluster</title>
		<link>http://rafaelliu.net/2010/05/30/configurando-o-jboss-messaging-em-cluster/</link>
		<comments>http://rafaelliu.net/2010/05/30/configurando-o-jboss-messaging-em-cluster/#comments</comments>
		<pubDate>Sun, 30 May 2010 15:48:17 +0000</pubDate>
		<dc:creator>rafaelliu</dc:creator>
				<category><![CDATA[JBoss]]></category>
		<category><![CDATA[jms]]></category>
		<category><![CDATA[messaging]]></category>

		<guid isPermaLink="false">http://rafaelliu.net/?p=383</guid>
		<description><![CDATA[Uma das grandes evoluções do JBoss Messaging sobre o JBossMQ (seu predecessor) foi a robustez da solução em cluster. Introdução (ou como era com o JBossMQ) Antigamente, o JBossMQ já era clusterizável (ouch.. neologismo..) mas conseguia isso usando o HA Singleton do JBoss. O JBoss quando configurado em cluster pode ser serviços deployados (ouch de [...]]]></description>
			<content:encoded><![CDATA[<p>Uma das grandes evoluções do JBoss Messaging sobre o JBossMQ (seu predecessor) foi a robustez da solução em cluster.</p>
<h4>Introdução (ou como era com o JBossMQ)</h4>
<p>Antigamente, o JBossMQ já era clusterizável (ouch.. neologismo..) mas conseguia isso usando o HA Singleton do JBoss. O JBoss quando configurado em cluster pode ser serviços deployados (ouch de novo..) como singletons através do cluster. Funciona assim: você diz ao JBoss que aquele serviço é um HA Singleton e o JBoss vai garantir a você que em seu cluster haverá sempre um, e apenas um, serviço ativo no cluster (enquanto restar nós no cluster, claro). Essa é uma funcionalidade muito interessante pois permite serviços <em>cluster unaware</em> serem clusterizáveis.</p>
<p>O balanceamento de carga pudia ser feito através dos consumidores: implementando um <a title="JBossMQReceiverImpl" href="http://community.jboss.org/wiki/JBossMQReceiverImpl">ReceiverImpl</a> consumidores iriam receber as mensagens <em>a la</em> round robin. Melhor que nada.</p>
<h4>JBoss Messaging</h4>
<p>O JBoss Messaging é a implementação padrão do JBoss 5. Com o JBoss Messaging a infraestrutura de clusterização melhorou Muito. Podemos agora criar um cluster ativo/ativo, que quando um nó falhar o outro se encarregará de enfileirar suas mensagens. E ainda mais, temos balanceamento de carga de fato: cada conexão aberta usará uma fila diferente, round robin <em>way</em>.</p>
<h4>Montando o cluster</h4>
<p>Configurar o JBoss Messaging em cluster é extremamente fácil:</p>
<ul>
<li>Ative a clusterização nos arquivos de configuração do JBoss Messaging e configure um banco de dados compartilhado;</li>
<li>User um ConnectionFactory e uma Queue/Topic marcados como clusterizados.</li>
</ul>
<p>Bom, vamos aos bits. As versões usadas seguem:</p>
<ul>
<li>JBoss 5.1.0.GA</li>
<li>JBoss Messaging 1.4.3.GA (a que vem por padrão)</li>
</ul>
<h5>Configurando o JBoss Messaging</h5>
<p>Para fazer o <em>failover</em>, o JBoss Messaging precisa usar um banco de dados compartilhado. Copie de $JBOSS_HOME/examples/config o XML apropriado sobrescrevendo o $JBOSS_HOME/server/all/deploy/messaging/hsqldb-persistence-service.xml (lembre de configurar/iniciar o banco de dados!). Vou usar o MySQL:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">rm</span> <span style="color: #007800;">$JBOSS_HOME</span><span style="color: #000000; font-weight: bold;">/</span>server<span style="color: #000000; font-weight: bold;">/</span>all<span style="color: #000000; font-weight: bold;">/</span>deploy<span style="color: #000000; font-weight: bold;">/</span>messaging<span style="color: #000000; font-weight: bold;">/</span>hsqldb-persistence-service.xml
<span style="color: #c20cb9; font-weight: bold;">cp</span> <span style="color: #007800;">$JBOSS_HOME</span><span style="color: #000000; font-weight: bold;">/</span>examples<span style="color: #000000; font-weight: bold;">/</span>config<span style="color: #000000; font-weight: bold;">/</span>mysql-persistence-service.xml <span style="color: #007800;">$JBOSS_HOME</span><span style="color: #000000; font-weight: bold;">/</span>server<span style="color: #000000; font-weight: bold;">/</span>all<span style="color: #000000; font-weight: bold;">/</span>deploy<span style="color: #000000; font-weight: bold;">/</span>messaging</pre></div></div>

<p>Ative a clusterização:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;attribute</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;Clustered&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>true<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/attribute<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;attribute</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;FailoverOnNodeLeave&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>true<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/attribute<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Aponte para apontar para o datasource do seu banco:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;attribute</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;DataSource&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>java:/DefaultDS<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/attribute<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<h5>Criando as filas e factories</h5>
<p>Vamos usar o ClusteredConnectionFactory, que é uma factory padrão do JBoss que vá vem configurada em cluster, se quiser ver como é feito: $JBOSS_HOME/server/all/deploy/messaging/connection-factories-service.xml.</p>
<p>Só precisamos criar nossas filas clusterizadas. Adicionem um arquivo $JBOSS_HOME/server/all/deploy/clustered-destinations-service.xml com o seguinte conteúdo:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;server<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;mbean</span> <span style="color: #000066;">code</span>=<span style="color: #ff0000;">&quot;org.jboss.jms.server.destination.QueueService&quot;</span></span>
<span style="color: #009900;">      <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;jboss.messaging.destination:service=Queue,name=clusteredQueue&quot;</span></span>
<span style="color: #009900;">      <span style="color: #000066;">xmbean-dd</span>=<span style="color: #ff0000;">&quot;xmdesc/Queue-xmbean.xml&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;depends</span> <span style="color: #000066;">optional-attribute-name</span>=<span style="color: #ff0000;">&quot;ServerPeer&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>jboss.messaging:service=ServerPeer<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/depends<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;depends<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>jboss.messaging:service=PostOffice<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/depends<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;attribute</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;Clustered&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>true<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/attribute<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
   <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/mbean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/server<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<h5>Criando os profiles</h5>
<p>Se queremos criar um cluster vamos precisar de dois nós! Então copie o profile all e crie dois outros profiles:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">cp</span> <span style="color: #660033;">-r</span> all jms1
<span style="color: #c20cb9; font-weight: bold;">cp</span> <span style="color: #660033;">-r</span> all jms2</pre></div></div>

<h4>Testando</h4>
<p>Vamos subir os dois nós usando o serviço de ServiceBinding do JBoss para não haver conflitos de porta ou ip:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">.<span style="color: #000000; font-weight: bold;">/</span>run.sh <span style="color: #660033;">-c</span> jms1 -Djboss.service.binding.set=ports-01 -Djboss.messaging.ServerPeerID=<span style="color: #000000;">1</span>
.<span style="color: #000000; font-weight: bold;">/</span>run.sh <span style="color: #660033;">-c</span> jms2 -Djboss.service.binding.set=ports-02 -Djboss.messaging.ServerPeerID=<span style="color: #000000;">2</span></pre></div></div>

<p>Agora vamos usar uns programinhas que fiz para produzir e consumir mensagens, ele é bem simples e intuitivo e é empacotado junto com os fontes. Vamos usá-lo para testar nosso cluster.</p>
<p>Iniciamos um <em>consumer</em> para cada nó do cluster:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">java <span style="color: #660033;">-cp</span> JmsSample.jar:<span style="color: #007800;">$JBOSS_HOME</span><span style="color: #000000; font-weight: bold;">/</span>client<span style="color: #000000; font-weight: bold;">/</span>jbossall-client.jar net.rafaelliu.jms.JmsConsumer 127.0.0.1:<span style="color: #000000;">1100</span> ClusteredConnectionFactory queue<span style="color: #000000; font-weight: bold;">/</span>clusteredQueue
java <span style="color: #660033;">-cp</span> JmsSample.jar:<span style="color: #007800;">$JBOSS_HOME</span><span style="color: #000000; font-weight: bold;">/</span>client<span style="color: #000000; font-weight: bold;">/</span>jbossall-client.jar net.rafaelliu.jms.JmsConsumer 127.0.0.1:<span style="color: #000000;">1200</span> ClusteredConnectionFactory queue<span style="color: #000000; font-weight: bold;">/</span>clusteredQueue</pre></div></div>

<p><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; line-height: 19px; white-space: normal; font-size: 13px;">E iniciar o nosso <em>producer</em>:</span></p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">java <span style="color: #660033;">-cp</span> JmsSample.jar:<span style="color: #007800;">$JBOSS_HOME</span><span style="color: #000000; font-weight: bold;">/</span>client<span style="color: #000000; font-weight: bold;">/</span>jbossall-client.jar net.rafaelliu.jms.JmsProducer 127.0.0.1:<span style="color: #000000;">1100</span>,127.0.0.1:<span style="color: #000000;">1200</span> ClusteredConnectionFactory queue<span style="color: #000000; font-weight: bold;">/</span>clusteredQueue <span style="color: #000000;">10</span> <span style="color: #000000;">1</span> <span style="color: #ff0000;">&quot;Mensagem de teste&quot;</span></pre></div></div>

<p><span style="font-weight: normal;">Viram que as mensagens foram balanceadas? Agora podemos tentar o seguinte:</span></p>
<ul>
<li><span style="font-weight: normal;">fechar um dos consumers: as mensagens são enviadas para o outro consumer;</span></li>
<li><span style="font-weight: normal;">fechar um dos consumers enquanto estão sendo enviadas mensagens: o outro consumer assume a partir da última mensagem; </span></li>
<li><span style="font-weight: normal;">pausar e despausar um consumer: as mensagens vão sendo enfileiradas e quando despausamos, elas são todas consumidas;</span></li>
<li><span style="font-weight: normal;">pausar um consumer e depois fechar: as mensagens vão sendo enfileiradas e quando fechamos, elas são repassadas para o outro nó.</span></li>
</ul>
<p><span style="font-weight: normal;">Dá pra brincar muito!</span></p>
<h4>Futuro</h4>
<p>Atualmente, sendo empacotado junto com o último Milestone do JBoss 6, o serviço de mensageria foi trocado pelo HornetQ. Isso significa ainda outra evolução na área do MOM para a JBoss. Vamos ver se quando for para GA não escrevo sobre ele. Até a próxima o/</p>
<p>PS: para produção dêem uma olhada nos parâmetros <code>DefaultPreserveOrdering</code> e <code>SuckerPassword</code>.</p>
<p>Binário: <a href="http://github.com/downloads/rafaelliu/rafaelliu.net/JmsSample.jar">http://github.com/downloads/rafaelliu/rafaelliu.net/JmsSample.jar</a></p>
]]></content:encoded>
			<wfw:commentRss>http://rafaelliu.net/2010/05/30/configurando-o-jboss-messaging-em-cluster/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Abertas inscrições para o JBoss In Bossa 2010</title>
		<link>http://rafaelliu.net/2010/04/10/abertas-inscricoes-para-o-jboss-in-bossa-2010/</link>
		<comments>http://rafaelliu.net/2010/04/10/abertas-inscricoes-para-o-jboss-in-bossa-2010/#comments</comments>
		<pubDate>Sat, 10 Apr 2010 22:42:47 +0000</pubDate>
		<dc:creator>rafaelliu</dc:creator>
				<category><![CDATA[Evento]]></category>
		<category><![CDATA[JBoss]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JBoss In Bossa]]></category>

		<guid isPermaLink="false">http://rafaelliu.net/?p=371</guid>
		<description><![CDATA[Ainda que tarde, vale a pena anunciar. Foram abertas as incrições para o JBoss In Bossa 2010 que acontecerá em São Paulo dias 7 e 8 de maio. O evento é o maior da América Latina relacionado a JBoss e contará com a presença de palestrantes internacionais como o Peter Muir (project lead do Seam [...]]]></description>
			<content:encoded><![CDATA[<p>Ainda que tarde, vale a pena anunciar.</p>
<p>Foram abertas as incrições para o <a title="JBoss In Bossa 2010" href="http://www.jbossinbossa.com.br/2010/index.htm">JBoss In Bossa 2010</a> que acontecerá em São Paulo dias 7 e 8 de maio. O evento é o maior da América Latina relacionado a JBoss e contará com a presença de palestrantes internacionais como o Peter Muir (project lead do Seam e do Weld), Benjamin Mestrallet (CEO da eXo Platform) e Mauricio Salatino (CTO da PlugTree).</p>
<p>Veja alguns dos principais assuntos previstos na agenda:</p>
<ul>
<li>O novo JBoss 6</li>
<li>Tuning JBoss</li>
<li>Java Persistence API</li>
<li>Seam</li>
<li>Weld</li>
<li>Contexts and Dependency Injection</li>
<li>Java ServerFaces 2.0</li>
<li>Teiid</li>
<li>Drools</li>
<li>Jopr</li>
<li><a title="Agenda" href="http://www.jbossinbossa.com.br/2010/agenda.html">E a lista continua.</a>.</li>
</ul>
<p>É uma ótima oportunidade para conhecer pessoalmente alguns nomes de peso na comunidade e fazer networking. <a title="Inscreva-se" href="http://www.jbossinbossa.com.br/app/precosinscricoes.html" target="_blank">Se inscreva!</a></p>
<p>Acompanhe também o evento via <a title="Tweeter" href="http://twitter.com/jbossinbossa" target="_blank">@jbossinbossa</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://rafaelliu.net/2010/04/10/abertas-inscricoes-para-o-jboss-in-bossa-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

