Gastaldi's Blog

Mais um blog sobre Java …

Arquivos Mensais: agosto 2009

Registrar uma String no JNDI

Em muitas aplicações, existem parâmetros que variam de acordo com o ambiente (pools de conexão, roles, etc) e que são publicadas na árvore JNDI da aplicação. Para parametrizarmos uma string qualquer (seja ela uma URL, uma informação qualquer) muitos desenvolvedores preferem criar um arquivo de propriedades ou deixar fixo no código (bleargh !). Minha sugestão é utilizar o contexto JNDI. Para isso faça o seguinte:

Registre o serviço abaixo em um arquivo com sufixo -service.xml (pode ser no jboss-service.xml dentro do conf):

<mbean code="org.jboss.naming.JNDIBindingServiceMgr"
         name="jboss.tests:service=JNDIBindingServiceMgr">
      <attribute name="BindingsConfig" serialDataType="jbxb">
         <jndi:bindings
            xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
            xmlns:jndi="urn:jboss:jndi-binding-service:1.0"
            xs:schemaLocation="urn:jboss:jndi-binding-service:1.0 resource:jndi-binding-service_1_0.xsd">
            <jndi:binding name="urls/MinhaURL">
               <jndi:value type="java.lang.String">http://www.meuserver.com/service</jndi:value>
            </jndi:binding>
         </jndi:bindings>
      </attribute>
      <depends>jboss:service=Naming</depends>
   </mbean>

Na nossa aplicação web, devemos alterar o web.xml para incluir o seguinte resource-ref:

<resource-ref>
        <res-ref-name>QualquerCoisa</res-ref-name>
        <res-type>java.lang.String</res-type>
        <res-auth>Container</res-auth>
        <res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>	

e no jboss-web.xml :

<jboss-web>
	<resource-ref>
		<res-ref-name>QualquerCoisa</res-ref-name>
		<res-type>java.lang.String</res-type>
		<jndi-name>urls/MinhaURL</jndi-name>
	</resource-ref>
</jboss-web>

Pronto ! Agora é só fazer:

InitialContext ctx = new InitialContext();
String strNoJNDI = (String) ctx.lookup("java:comp/env/QualquerCoisa");

e você terá o valor publicado no seu servidor de aplicação (totalmente desacoplado da aplicação).

Anúncios