<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6024013330448664642</id><updated>2011-04-21T16:13:27.768-07:00</updated><title type='text'>Trabalhando com Java</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://israelmedeiros.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6024013330448664642/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://israelmedeiros.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Israel</name><uri>http://www.blogger.com/profile/08250360967922541659</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>1</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6024013330448664642.post-1714124351581571244</id><published>2008-07-26T05:44:00.000-07:00</published><updated>2008-07-26T10:00:02.228-07:00</updated><title type='text'>JBoss JNDI, como utilizar? Erros comuns, principalmente com a utilização do Maven.</title><content type='html'>&lt;p class="MsoNormal"&gt;Olá pessoal, sou novo aqui na comunidade do blog e quero compartilhar informações sobre problemas que tive com Java e de programação em geral, bem como descobertas interessantes e troca de experiência. Gosto de pesquisar sobre computação, mas não apenas me focar em um assunto, gosto desde computação gráfica à sistemas distribuídos. Bom, chega de lorota... vou começar a falar um pouco sobre o que é JNDI, depois falar sobre como configurar uma aplicação cliente e servidora para acessar esse recurso através de um EJB. Falarei também sobre o Maven e possíveis problemas que venham a ocorrer.&lt;br /&gt;&lt;br /&gt;&lt;u1:p&gt;&lt;/u1:p&gt;JNDI é um serviço que provê uma interface comum para uma grande variedade de "serviços de nomes", tais como: DNS, RMI registry, sistemas de arquivos, etc. a API do JNDI é dividida em uma API de cliente na qual acessa os serviços de nomes e uma interface provedora de serviços que permite o usuário a criar implementações para serviços de nomes JNDI. Abaixo se encontra um exemplo de código fonte de utilização do JNDI, que faz acesso a um recurso publicado no servidor JBoss 4.&lt;u1:p&gt;&lt;/u1:p&gt;&lt;u1:p&gt;&lt;/u1:p&gt;x&lt;u1:p&gt;&lt;/u1:p&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;FacadeHome facadeHome = null;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;Facade facade = null;&lt;br /&gt;&lt;span style=""&gt;   &lt;/span&gt;try {&lt;br /&gt;&lt;span style=""&gt;      &lt;/span&gt;Context context = new InitialContext();&lt;br /&gt;&lt;span style=""&gt;   &lt;/span&gt;&lt;span style=""&gt;   &lt;/span&gt;Object objRef = context.lookup("java:comp/env/pkg.interfaces.FacadeHome");&lt;br /&gt;&lt;span style=""&gt;   &lt;/span&gt;&lt;span style=""&gt;   &lt;/span&gt;facadeHome = (FacadeHome) PortableRemoteObject.narrow(objRef, FacadeHome.class);&lt;br /&gt;&lt;span style=""&gt;   &lt;/span&gt;&lt;span style=""&gt;   &lt;/span&gt;facade = facadeHome.create();&lt;br /&gt;} catch (RemoteException e) {&lt;br /&gt;&lt;span style=""&gt;   &lt;/span&gt;e.printStackTrace();&lt;br /&gt;} catch (CreateException e) {&lt;br /&gt;&lt;span style=""&gt;   &lt;/span&gt;e.printStackTrace();&lt;br /&gt;} catch (NamingException e) {&lt;br /&gt;&lt;span style=""&gt;   &lt;/span&gt;e.printStackTrace();&lt;br /&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;u1:p&gt;&lt;/u1:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;Temos o handle da interface home (&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;FacadeHome&lt;/span&gt;) e a interface remota (&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;Facade&lt;/span&gt;) do EJB 2. O contexto (&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;Context&lt;/span&gt;) é uma interface primária que interage com um serviço de nome do JNDI. A classe &lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;InitialContext&lt;/span&gt; implementa a interface &lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;Context&lt;/span&gt; e provê um ponto de partida para interagir com um serviço de nome. Quando você instancia um &lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;InitialContext&lt;/span&gt;, este é inicializado com propriedades do ambiente. Logo após é procurado (&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;lookup&lt;/span&gt;) o ambiente em que o nome está publicado, neste caso com o nome java:comp/env/pkg.interfaces.FacadeHome. A classe &lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;PortableRemoteObject&lt;/span&gt; retorna através de um handle e invocação do método narrow, o objeto publicado.&lt;u1:p&gt;&lt;/u1:p&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;u1:p&gt;&lt;/u1:p&gt;Para que o serviço funcione corretamente com o EJB 2, precisamos criar alguns arquivos XML, tanto na aplicação servidora, como pra aplicação cliente. É comum aos principiantes com essa tecnologia acontecer a exceção NameNotFoundException pela ausência desses arquivos de mapeamento. Os elementos que precisam ser mapeados são usualmente chamados de Enterprise Naming Context (ENC) elements.&lt;u1:p&gt;&lt;/u1:p&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;u1:p&gt;&lt;/u1:p&gt;No meu caso, tenho um EJB que precisa ser acessado por uma camada WEB utilizando o framework VRaptor. Na aplicação servidora é necessário ter os seguintes arquivos XML: ejb-jar.xml (&lt;i style=""&gt;descriptor&lt;/i&gt;) e jboss.xml (&lt;i style=""&gt;deployment descriptor&lt;/i&gt;). Na aplicação cliente, no meu caso, o web.xml fará o papel de &lt;i style=""&gt;descriptor&lt;/i&gt; e o jboss-web.xml será o &lt;i style=""&gt;deployment descriptor&lt;/i&gt;.&lt;u1:p&gt;&lt;/u1:p&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;u1:p&gt;&lt;/u1:p&gt;O ejb-jar.xml descreve uma visão lógica de qual ambiente o EJB precisa operar. Você pode encontrar exemplos deste arquivo através do Google. Já o jboss.xml provê o mapeamento dos nomes JNDI que devem ser jogados no &lt;i style=""&gt;deploy&lt;/i&gt;. Dessa maneira uma aplicação cliente poderá procurar pelo nome publicado.&lt;u1:p&gt;&lt;/u1:p&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;u1:p&gt;&lt;/u1:p&gt;Para as aplicações cliente pode-se fazer analogia com esta lógica, ocorrendo pequenas mudanças nas tags do XML. Com estas configurações setadas, já é possível acessar um recurso EJB através do JNDI. &lt;u1:p&gt;&lt;/u1:p&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;u1:p&gt;&lt;/u1:p&gt;Maven é uma ferramenta gerenciadora de projetos. Ela se baseia no conceito de P&lt;i&gt;roject Object Model&lt;/i&gt; (POM). Existem várias configurações que o Maven suporta. Para maiores informações acesse (&lt;a href="http://maven.apache.org/"&gt;http://maven.apache.org/&lt;/a&gt;). No meu caso, eu utilizo o Maven para buscar por bibliotecas padrões de projetos do repositório local (ou da internet), juntamente com outros gerenciamentos.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;u1:p&gt;&lt;/u1:p&gt;Essa semana ao tentar acessar um recurso JNDI me ocorreu um erro bem incomum. Abaixo pode-se encontrar o erro gerado:&lt;u1:p&gt;&lt;/u1:p&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;u1:p&gt;&lt;/u1:p&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;08:37:16,472 ERROR [STDERR] javax.naming.NamingException: Could not dereference object [Root exception is javax.naming.CommunicationException [Root exception is java.io.InvalidClassException: org.jboss.util.id.GUID; local class incompatible: stream classdesc serialVersionUID = 3289509836244263718, local class serialVersionUID = 6926421946503004889]]&lt;br /&gt;08:37:16,472 ERROR [STDERR] at org.jnp.interfaces.NamingContext.resolveLink(NamingContext.java:1067)&lt;br /&gt;08:37:16,472 ERROR [STDERR] at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:700)&lt;br /&gt;08:37:16,472 ERROR [STDERR] at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:716)&lt;br /&gt;08:37:16,472 ERROR [STDERR] at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:587)&lt;br /&gt;08:37:16,472 ERROR [STDERR] at javax.naming.InitialContext.lookup(InitialContext.java:351)&lt;br /&gt;…more&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;u1:p&gt;&lt;/u1:p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;u1:p&gt;&lt;/u1:p&gt;Todas as configurações estavam corretas. Todos as dependências estavam sendo baixadas corretamente do repositório pelo Maven, os arquivos de deployment e deployment descriptor foram setados corretamente. Onde eu trabalho, todos os projetos criados herdam de um “&lt;i&gt;default project”&lt;/i&gt; onde todos os &lt;i&gt;jars&lt;/i&gt; e configurações básicas são definidas no POM desse projeto. Acontece que a pouco tempo foi mudada a versão do JBoss e o &lt;i&gt;defaultproject&lt;/i&gt; referenciava uma lib para a aplicação cliente chamada "jboss-common-3.2.3.jar". Essa lib possuía uma versão diferente do &lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;org.jboss.util.id.GUID&lt;/span&gt; relativo ao arquivo que se encontrava no servidor JBoss. De alguma forma o JBoss valida a requisição do serviço pelo versionamento dessa classe. O que eu fiz foi atualizar a referência dessa lib no meu POM e tudo funcionou corretamente. É isso! Qualquer dúvida, postem ai =)&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;[]´s&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6024013330448664642-1714124351581571244?l=israelmedeiros.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://israelmedeiros.blogspot.com/feeds/1714124351581571244/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6024013330448664642&amp;postID=1714124351581571244' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6024013330448664642/posts/default/1714124351581571244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6024013330448664642/posts/default/1714124351581571244'/><link rel='alternate' type='text/html' href='http://israelmedeiros.blogspot.com/2008/07/jboss-jndi-como-utilizar-erros-comuns.html' title='JBoss JNDI, como utilizar? Erros comuns, principalmente com a utilização do Maven.'/><author><name>Israel</name><uri>http://www.blogger.com/profile/08250360967922541659</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>
