Как установить переменную JNDI в JBOSS? - PullRequest
2 голосов
/ 31 мая 2011

Я использую JBoss 5.1 и хочу указать расположение моих файлов конфигурации в виде записи JNDI, чтобы я мог найти ее в своем веб-приложении. Как я могу сделать это правильно?

1 Ответ

6 голосов
/ 01 июня 2011

Есть два основных способа сделать это.

Дескриптор развертывания / декларативный

Используйте JNDI Binding Manager , создав дескриптор развертывания в файле, таком как * my-jndi-bindings *** - service.xml **, и поместите его в deploy * сервера справочник. Пример дескриптора выглядит следующим образом:

<mbean code="org.jboss.naming.JNDIBindingServiceMgr" 
       name="jboss.tests:name=example1">
    <attribute name="BindingsConfig" serialDataType="jbxb">
        <jndi:bindings xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" 
                       xmlns:jndi="urn:jboss:jndi-binding-service"
                       xs:schemaLocation="urn:jboss:jndi-binding-service  \
               resource:jndi-binding-service_1_0.xsd"> 
            <jndi:binding name="bindexample/message">
                <jndi:value trim="true">
                    Hello, JNDI!
                </jndi:value>
            </jndi:binding>
        </jndi:bindings>
    </attribute>
</mbean>

Programatic

Получите контекст JNDI и выполните привязку самостоятельно. Это пример вызова in-jboss для этого:

import javax.naming.*;

    public static  void bind(String name, Object obj) throws NamingException {
        Context ctx = null;
        try {
            ctx = new InitialContext();
            ctx.bind(name, obj);
        } finally {
            try { ctx.close(); } catch (Exception e) {}
        }
    }

Если имя уже связано, вы можете позвонить rebind :

public static  void rebind(String name, Object obj) throws NamingException {
    Context ctx = null;
    try {
        ctx = new InitialContext();
        ctx.rebind(name, obj);
    } finally {
        try { ctx.close(); } catch (Exception e) {}
    }
}

Чтобы удалить привязку, позвоните unbind :

public static  void unbind(String name) throws NamingException {
    Context ctx = null;
    try {
        ctx = new InitialContext();
        ctx.unbind(name);
    } finally {
        try { ctx.close(); } catch (Exception e) {}
    }
}

Если вы пытаетесь сделать это удаленно (т.е. не в виртуальной машине JBoss), вам нужно получить удаленный контекст JNDI:

import javax.naming.*;
String JBOSS_JNDI_FACTORY = "org.jnp.interfaces.NamingContextFactory";
String JBOSS_DEFAULT_JNDI_HOST = "localhost";
int JBOSS_DEFAULT_JNDI_PORT = 1099;
.....
Properties p = new Properties();
p.setProperty(Context.INITIAL_CONTEXT_FACTORY, JBOSS_JNDI_FACTORY);
p.setProperty(Context.PROVIDER_URL, JBOSS_DEFAULT_JNDI_HOST + ":" + JBOSS_DEFAULT_JNDI_PORT);
Context ctx = new InitialContext(p);
...