<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wx="http://ilps.science.uva.nl/WikiXML/wx" xml:lang="pt" lang="pt">
<head>
<title>JMS</title>
<meta name="wx_namespace" content="0"/>
<meta name="wx_pagename" content="JMS"/>
<meta name="wx_page_id" content="218201"/>
</head>
<body>
<div id="wx_article">
<wx:section level="1" title="JMS" id="wxsec1"><h1 class="pagetitle" id="wx1">JMS</h1>

<p id="wx2"><b id="wx3">Java Message Service</b>, ou <b id="wx4">JMS</b>, é uma <a href="/wpt/API" title="API" wx:linktype="known" wx:pagename="API" wx:page_id="22382" id="wx5">API</a> da linguagem <a href="/wpt/Java_%28linguagem_de_programa%C3%A7%C3%A3o%29" title="Java (linguagem de programação)" wx:linktype="known" wx:pagename="Java_(linguagem_de_programação)" wx:page_id="1097" id="wx6">Java</a> para <i id="wx7"><a href="/wpt/Middleware" title="Middleware" wx:linktype="known" wx:pagename="Middleware" wx:page_id="226239" id="wx8">middleware</a></i> orientado à mensagens. Através da API JMS duas ou mais aplicações podem se comunicar por mensagens.</p>

<div id="wx_toc"/>

<a id="Arquitetura" name="Arquitetura"/>
<wx:section level="2" title="Arquitetura" id="wxsec2"><h2 id="wx9">Arquitetura</h2>

<p id="wx10">A API JMS suporta dois modelos de troca de mensagens:</p>

<ul id="wx11">
<li id="wx12"><a href="/wpt/Ponto_a_ponto" title="Ponto a ponto" wx:linktype="known" wx:pagename="Ponto_a_ponto" wx:page_id="160921" id="wx13">ponto a ponto</a>
<p id="wx14">ou modelo de <a href="/wpt/Fila" title="Fila" wx:linktype="known" wx:pagename="Fila" wx:page_id="1321127" id="wx15">filas</a></p>
</li>

<li id="wx16">
<p id="wx17">modelo <i id="wx18"><a href="/wpt/Publish/subscribe" class="new" title="Publish/subscribe" wx:linktype="unknown" wx:pagename="Publish/subscribe" id="wx19">publish/subscribe</a></i></p>
</li>
</ul>

<a id="Modelo_ponto_a_ponto" name="Modelo_ponto_a_ponto"/>
<wx:section level="3" title="Modelo ponto a ponto" id="wxsec5"><h3 id="wx20">Modelo ponto a ponto</h3>

<p id="wx21">No modelo ponto a ponto, ou por filas, um "produtor" (<i id="wx22">producer</i>) envia mensagens para uma fila e um "consumidor" (<i id="wx23">consumer</i>) as lê. Neste caso, o produtor conhece o destino da mensagem e a envia diretamente para a fila do consumidor. Este modelo é caracterizado pelo seguinte:</p>

<ul id="wx24">
<li id="wx25">
<p id="wx26">apenas um consumidor irá ler a mensagem;</p>
</li>

<li id="wx27">
<p id="wx28">não é necessário que o produtor esteja em execução no momento em que o consumidor lê a mensagem, assim como não é necessário que o consumidor esteja em execução no momento que o produtor envia a mensagem;</p>
</li>

<li id="wx29">
<p id="wx30">quando lê uma mensagem com sucesso o consumidor envia um aviso (<i id="wx31">acknowledged</i>) para o produtor.</p>
</li>
</ul>

<a id="Modelo_publish.2Fsubscribe" name="Modelo_publish.2Fsubscribe"/>
</wx:section><wx:section level="3" title="Modelo publish/subscribe" id="wxsec6"><h3 id="wx32">Modelo publish/subscribe</h3>

<p id="wx33">Este modelo suporta a publicação de mensagens para um determinado <a href="/wpt/T%C3%B3pico_%28mensagens%29" title="Tópico (mensagens)" wx:linktype="known" wx:pagename="Tópico_(mensagens)" wx:page_id="614075" id="wx34">tópico</a> de mensagens (<i id="wx35">message topic</i>). O(s) "assinante(s)" (<i id="wx36">subscriber</i>) podem registrar interesse em receber ("em assinar") mensagens de um tópico. Neste modelo, nem o "publicador" (<i id="wx37">publisher</i>) ou o "assinante" sabem um do outro. As características deste modelo são:</p>

<ul id="wx38">
<li id="wx39">
<p id="wx40">múltiplos consumidores podem ler a mensagem;</p>
</li>

<li id="wx41">
<p id="wx42">existe uma dependência temporal entre os publicadores e assinantes de um tópico. Um publicador deve criar uma "assinatura" (<i id="wx43">subscription</i>) para que os assinantes possam receber mensagens. O assinante do tópico deve estar em execução continuamente para receber as mensagens.</p>
</li>
</ul>

<a id="Elementos_da_API_JMS" name="Elementos_da_API_JMS"/>
</wx:section></wx:section><wx:section level="2" title="Elementos da API JMS" id="wxsec3"><h2 id="wx44">Elementos da API JMS</h2>

<a id="Cliente_JMS" name="Cliente_JMS"/>
<wx:section level="3" title="Cliente JMS" id="wxsec7"><h3 id="wx45">Cliente JMS</h3>

<p id="wx46">Uma aplicação ou <a href="/wpt/Objeto" title="Objeto" wx:linktype="known" wx:pagename="Objeto" wx:page_id="45465" id="wx47">objeto</a> Java que produz e consome mensagens. As mensagens são objetos que contém os dados que são transferidos entre os clientes JMS.</p>

<a id="Conex.C3.A3o_JMS" name="Conex.C3.A3o_JMS"/>
</wx:section><wx:section level="3" title="Conexão JMS" id="wxsec8"><h3 id="wx48">Conexão JMS</h3>

<p id="wx49">A partir do momento que uma <i id="wx50"><a href="/wpt/Abstract_Factory" title="Abstract Factory" wx:linktype="known" wx:pagename="Abstract_Factory" wx:page_id="194449" id="wx51">factory</a></i> é obtida, conexões para o provedor JMS podem ser criadas. Uma conexão representa a ligação entre a aplicação cliente e a aplicação servidora. Dependendo do tipo da conexão, ela permitirá que os clientes criem sessões para o envio e recebimento de mensagens de filas ou tópicos.</p>

<a id="Factory_de_conex.C3.B5es_JMS" name="Factory_de_conex.C3.B5es_JMS"/>
</wx:section><wx:section level="3" title="Factory de conexões JMS" id="wxsec9"><h3 id="wx52"><i id="wx53">Factory</i> de conexões JMS</h3>

<p id="wx54">É um <a href="/wpt/Objeto_administrado" class="new" title="Objeto administrado" wx:linktype="unknown" wx:pagename="Objeto_administrado" id="wx55">objeto administrado</a> que a aplicação cliente utiliza para a criação de conexões para o provedor JMS. Normalmente, os clientes obtém as <i id="wx56">factories</i> através de interfaces portáveis, desta forma, mesmo se as configurações do provedor JMS mudarem, o código do cliente permanece inalterado. Os administradores mantém as configurações em objetos (objetos da classe <i id="wx57">factory</i>), que são obtidos através de buscas (<i id="wx58">lookup</i>) na <a href="/wpt/JNDI" title="JNDI" wx:linktype="known" wx:pagename="JNDI" wx:page_id="260521" id="wx59">JNDI</a>. Dependendo do tipo da mensagem, o cliente obterá uma <i id="wx60">factory</i> para tópico ou para fila.</p>

<a id="Destino" name="Destino"/>
</wx:section><wx:section level="3" title="Destino" id="wxsec10"><h3 id="wx61">Destino</h3>

<p id="wx62">É um objeto administrado que encapsula a identidade do destino das mensagens, que é onde as mensagens são enviadas e consumidas. Pode ser uma fila ou um tópico. O administrador JMS cria estes objetos, e os usuários os obtém através de buscas na JNDI. Da mesma forma que as <i id="wx63">factories</i> de conexões, o administrador pode criar dois tipos de classe de destino, fila e tópico.</p>

<a id="Consumidor" name="Consumidor"/>
</wx:section><wx:section level="3" title="Consumidor" id="wxsec11"><h3 id="wx64">Consumidor</h3>

<p id="wx65">Um objeto criado através de uma sessão JMS. Ele recebe mensagens de um destino. O consumidor pode receber mensagens de maneira síncrona ou assíncrona de filas ou tópicos.</p>

<a id="Produtor" name="Produtor"/>
</wx:section><wx:section level="3" title="Produtor" id="wxsec12"><h3 id="wx66">Produtor</h3>

<p id="wx67">Um objeto criado através de uma sessão JMS. Ele envia mensagens para um destino.</p>

<a id="Mensagens" name="Mensagens"/>
</wx:section><wx:section level="3" title="Mensagens" id="wxsec13"><h3 id="wx68">Mensagens</h3>

<p id="wx69">São objetos enviados entre consumidores e produtores de mensagens. Eles contém um outro objeto que encapsula os dados que serão trafegados pelas mensagens. Uma mensagem possui três partes principais:</p>

<ol id="wx70">
<li id="wx71">
<p id="wx72">um cabeçalho, contém a rota das mensagens</p>
</li>

<li id="wx73">
<p id="wx74">um conjunto de atributos opcionais</p>
</li>

<li id="wx75">
<p id="wx76">o corpo da mensagem que pode conter cinco tipos de mensagens: texto, <i id="wx77">map</i>, <i id="wx78"><a href="/wpt/Byte" title="Byte" wx:linktype="known" wx:pagename="Byte" wx:page_id="14280" id="wx79">bytes</a></i>, <i id="wx80"><a href="/wpt/Stream" title="Stream" wx:linktype="known" wx:pagename="Stream" wx:page_id="71679" id="wx81">stream</a></i> ou objetos</p>
</li>
</ol>

<p id="wx82">A interface de uma mensagem é extremamente flexível e permite várias formas de customização de conteúdo.</p>

<a id="Provedor_JMS" name="Provedor_JMS"/>
</wx:section><wx:section level="3" title="Provedor JMS" id="wxsec14"><h3 id="wx83">Provedor JMS</h3>

<p id="wx84">Representa uma interface para um <i id="wx85">software</i> de <i id="wx86">middleware</i> orientado à mensagens. Ele suporta a interface JMS que é especificada pela <a href="/wpt/Sun_Microsystems" title="Sun Microsystems" wx:linktype="known" wx:pagename="Sun_Microsystems" wx:page_id="78836" id="wx87">Sun Microsystems</a>. Ele é basicamente um adaptador de um <i id="wx88">middleware</i>.</p>

<a id="Softwares_que_suportam_JMS" name="Softwares_que_suportam_JMS"/>
</wx:section><wx:section level="3" title="Softwares que suportam JMS" id="wxsec15"><h3 id="wx89"><i id="wx90">Softwares</i> que suportam JMS</h3>

<p id="wx91">Para que uma aplicação possa utilizar JMS, deve haver um provedor que possa gerenciar as sessões e filas. Existem opções comerciais e <a href="/wpt/Software_livre" title="Software livre" wx:linktype="known" wx:pagename="Software_livre" wx:page_id="1707" id="wx92">livres</a>. Dentre as opções livres temos:</p>

<ul id="wx93">
<li id="wx94"><a href="/wpt/ActiveMQ" class="new" title="ActiveMQ" wx:linktype="unknown" wx:pagename="ActiveMQ" id="wx95">ActiveMQ</a></li>

<li id="wx96"><a href="/wpt/JBossMQ" class="new" title="JBossMQ" wx:linktype="unknown" wx:pagename="JBossMQ" id="wx97">JBossMQ</a></li>

<li id="wx98"><a href="/wpt/Joram" class="new" title="Joram" wx:linktype="unknown" wx:pagename="Joram" id="wx99">Joram</a></li>

<li id="wx100"><a href="/wpt/MantaRay" class="new" title="MantaRay" wx:linktype="unknown" wx:pagename="MantaRay" id="wx101">MantaRay</a></li>

<li id="wx102"><a href="/wpt/OpenJMS" class="new" title="OpenJMS" wx:linktype="unknown" wx:pagename="OpenJMS" id="wx103">OpenJMS</a></li>

<li id="wx104"><a href="/wpt/RabbitMQ" class="new" title="RabbitMQ" wx:linktype="unknown" wx:pagename="RabbitMQ" id="wx105">RabbitMQ</a></li>
</ul>

<p id="wx106">Soluções comerciais incluem:</p>

<ul id="wx107">
<li id="wx108"><a href="/wpt/BEA_WebLogic_Server" class="new" title="BEA WebLogic Server" wx:linktype="unknown" wx:pagename="BEA_WebLogic_Server" id="wx109">BEA WebLogic Server</a>
<p id="wx110">da <a href="/wpt/BEA_Systems" title="BEA Systems" wx:linktype="known" wx:pagename="BEA_Systems" wx:page_id="271556" id="wx111">BEA Systems</a></p>
</li>

<li id="wx112"><a href="/wpt/Tibco_EMS" class="new" title="Tibco EMS" wx:linktype="unknown" wx:pagename="Tibco_EMS" id="wx113">Tibco EMS</a>
<p id="wx114">da <a href="/wpt/TIBCO_Software" class="new" title="TIBCO Software" wx:linktype="unknown" wx:pagename="TIBCO_Software" id="wx115">TIBCO Software</a></p>
</li>

<li id="wx116"><a href="/wpt/FioranoMQ" class="new" title="FioranoMQ" wx:linktype="unknown" wx:pagename="FioranoMQ" id="wx117">FioranoMQ</a></li>

<li id="wx118"><a href="/wpt/GigaSpaces" class="new" title="GigaSpaces" wx:linktype="unknown" wx:pagename="GigaSpaces" id="wx119">GigaSpaces</a>
<p id="wx120">da <a href="/wpt/GigaSpaces_Technologies" class="new" title="GigaSpaces Technologies" wx:linktype="unknown" wx:pagename="GigaSpaces_Technologies" id="wx121">GigaSpaces Technologies</a></p>
</li>

<li id="wx122"><a href="/wpt/IBus" class="new" title="IBus" wx:linktype="unknown" wx:pagename="IBus" id="wx123">iBus</a>
<p id="wx124">da <a href="/wpt/Softwired" class="new" title="Softwired" wx:linktype="unknown" wx:pagename="Softwired" id="wx125">Softwired</a></p>
</li>

<li id="wx126"><a href="/wpt/IONA_JMS" class="new" title="IONA JMS" wx:linktype="unknown" wx:pagename="IONA_JMS" id="wx127">IONA JMS</a>
<p id="wx128">da <a href="/wpt/IONA_Technologies" class="new" title="IONA Technologies" wx:linktype="unknown" wx:pagename="IONA_Technologies" id="wx129">IONA Technologies</a></p>
</li>

<li id="wx130"><a href="/wpt/SeeBeyond_ICAN_Suite" class="new" title="SeeBeyond ICAN Suite" wx:linktype="unknown" wx:pagename="SeeBeyond_ICAN_Suite" id="wx131">SeeBeyond ICAN Suite</a>
<p id="wx132">da <a href="/wpt/Sun_Microsystems" title="Sun Microsystems" wx:linktype="known" wx:pagename="Sun_Microsystems" wx:page_id="78836" id="wx133">Sun Microsystems</a></p>
</li>

<li id="wx134"><a href="/wpt/IQManager" class="new" title="IQManager" wx:linktype="unknown" wx:pagename="IQManager" id="wx135">IQManager</a>
<p id="wx136">da <a href="/wpt/Sun_Microsystems" title="Sun Microsystems" wx:linktype="known" wx:pagename="Sun_Microsystems" wx:page_id="78836" id="wx137">Sun Microsystems</a></p>
</li>

<li id="wx138"><a href="/wpt/JMS%2B" class="new" title="JMS+" wx:linktype="unknown" wx:pagename="JMS+" id="wx139">JMS+</a>
<p id="wx140">da <a href="/wpt/WebMethods" class="new" title="WebMethods" wx:linktype="unknown" wx:pagename="WebMethods" id="wx141">webMethods</a></p>
</li>

<li id="wx142"><a href="/wpt/SonicMQ" class="new" title="SonicMQ" wx:linktype="unknown" wx:pagename="SonicMQ" id="wx143">SonicMQ</a>
<p id="wx144">da <a href="/wpt/Sonic_Software" class="new" title="Sonic Software" wx:linktype="unknown" wx:pagename="Sonic_Software" id="wx145">Sonic Software</a></p>
</li>

<li id="wx146"><a href="/wpt/WebSphere_MQ" title="WebSphere MQ" wx:linktype="known" wx:pagename="WebSphere_MQ" wx:page_id="839962" id="wx147">WebSphere MQ</a>
<p id="wx148">da <a href="/wpt/IBM" title="IBM" wx:linktype="known" wx:pagename="IBM" wx:page_id="28722" id="wx149">IBM</a></p>
</li>

<li id="wx150"><a href="/wpt/WebMethods_Broker_JMS" class="new" title="WebMethods Broker JMS" wx:linktype="unknown" wx:pagename="WebMethods_Broker_JMS" id="wx151">webMethods Broker JMS</a>
<p id="wx152">da <a href="/wpt/WebMethods" class="new" title="WebMethods" wx:linktype="unknown" wx:pagename="WebMethods" id="wx153">webMethods</a></p>
</li>
</ul>

<a id="Liga.C3.A7.C3.B5es_externas" name="Liga.C3.A7.C3.B5es_externas"/>
</wx:section></wx:section><wx:section level="2" title="Ligações externas" id="wxsec4"><h2 id="wx154"><wx:template id="wx_t1" pagename="Predefinição:Links" page_id="71869"/>Ligações externas<wx:templateend start="wx_t1"/></h2>

<ul id="wx155">
<li id="wx156"><a href="http://java.sun.com/products/jms/" class="external text" wx:linktype="external" rel="nofollow" id="wx157">Introdução ao JMS</a></li>
</ul>
</wx:section></wx:section></div>
<div id="wx_categorylinks">
<a href="/wpt/index.php?title=Especial:Categories&amp;article=JMS" title="Especial:Categories" wx:linktype="known" wx:pagename="Especial:Categories" id="wx158">Categorias de páginas</a>: <span dir="ltr" id="wx159"><a href="/wpt/Categoria:Plataforma_Java" title="Categoria:Plataforma Java" wx:linktype="known" wx:pagename="Categoria:Plataforma_Java" wx:page_id="308130" id="wx160">Plataforma Java</a></span></div>
<div id="wx_languagelinks">
Outras línguas: <a href="http://ca.wikipedia.org/wiki/Java_Message_Service" class="external" wx:linktype="interwiki" wx:pagename="ca:Java_Message_Service" id="wx161">Català</a> | <a href="http://da.wikipedia.org/wiki/JMS" class="external" wx:linktype="interwiki" wx:pagename="da:JMS" id="wx162">Dansk</a> | <a href="http://de.wikipedia.org/wiki/Java_Message_Service_Provider" class="external" wx:linktype="interwiki" wx:pagename="de:Java_Message_Service_Provider" id="wx163">Deutsch</a> | <a href="http://en.wikipedia.org/wiki/Java_Message_Service" class="external" wx:linktype="interwiki" wx:pagename="en:Java_Message_Service" id="wx164">English</a> | <a href="http://es.wikipedia.org/wiki/JMS" class="external" wx:linktype="interwiki" wx:pagename="es:JMS" id="wx165">Español</a> | <a href="http://fr.wikipedia.org/wiki/Java_Message_Service" class="external" wx:linktype="interwiki" wx:pagename="fr:Java_Message_Service" id="wx166">Français</a> | <a href="http://hu.wikipedia.org/wiki/Java_Message_Service" class="external" wx:linktype="interwiki" wx:pagename="hu:Java_Message_Service" id="wx167">Magyar</a> | <a href="http://ja.wikipedia.org/wiki/Java_Message_Service" class="external" wx:linktype="interwiki" wx:pagename="ja:Java_Message_Service" id="wx168">日本語</a> | <a href="http://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94_%EB%A9%94%EC%8B%9C%EC%A7%80_%EC%84%9C%EB%B9%84%EC%8A%A4" class="external" wx:linktype="interwiki" wx:pagename="ko:자바_메시지_서비스" id="wx169">한국어</a> | <a href="http://nl.wikipedia.org/wiki/Java_Message_Service" class="external" wx:linktype="interwiki" wx:pagename="nl:Java_Message_Service" id="wx170">Nederlands</a> | <a href="http://pl.wikipedia.org/wiki/Java_Message_Service" class="external" wx:linktype="interwiki" wx:pagename="pl:Java_Message_Service" id="wx171">Polski</a> | <a href="http://ru.wikipedia.org/wiki/JMS" class="external" wx:linktype="interwiki" wx:pagename="ru:JMS" id="wx172">Русский</a> | <a href="http://sv.wikipedia.org/wiki/JMS" class="external" wx:linktype="interwiki" wx:pagename="sv:JMS" id="wx173">Svenska</a> | <a href="http://zh.wikipedia.org/wiki/Java%E6%B6%88%E6%81%AF%E6%9C%8D%E5%8A%A1" class="external" wx:linktype="interwiki" wx:pagename="zh:Java消息服务" id="wx174">中文</a></div>
</body>
<wx:templatearguments for="wx_t1"><wx:argument name=""/></wx:templatearguments>
</html>
