Ошибка инициализации контекста при переносе нашего кода в профиль Liberty - PullRequest
0 голосов
/ 04 июня 2018

Мы переносим наш код из WAS 8.0 в версию Liberty 17.0.0.1.В то время как мы пытаемся протестировать функциональность приложения в сети, мы получаем следующую ошибку:

java.lang.ClassNotFoundException: 
com.ibm.websphere.naming.WsnInitialContextFactory 
com.ibm.ws.jndi.internal.WASInitialContextFactoryBuilder

Мы также проверили наш файл ear с помощью набора инструментов Liberty Migration, и мы получаем серьезную ошибку в одном из jar,

Используйте значения по умолчанию для свойств JNDI java.naming.factory.initial и java.naming.provider.url при переходе на Liberty.Следующие традиционные значения WebSphere Application Server для этих свойств недопустимы:

java.naming.factory.initial=com.ibm.websphere.naming.WsnInitialContextFactory java.naming.provider.url=corbaloc:iiop:localhost:2809
При использовании конструктора InitialContext (Hashtable) удалите эти два свойства.Если другие свойства не используются, вы можете использовать конструктор по умолчанию.

Если правило файла свойств обнаруживает файл jndi.properties, проверьте свойства в этом файле.Либо удалите свойства java.naming.factory.initial и java.naming.provider.url, либо удалите файл, если ни одно из свойств не требуется.

Может кто-нибудь помочь нам узнать, как использовать значение по умолчанию InitialContext.Пожалуйста, найдите прикрепленный код, который вызывает JNDI и контекстный путь,

import java.util.HashMap;
import java.util.Map;

import javax.naming.InitialContext;
import javax.naming.NamingException;


/**
 * @class name JndiObjectLocator.java
 * @author pkannan
 * @creation date Nov 1, 2004
 * @description 
 */

public class JndiObjectLocator {
    /** Intial context to the JNDI Tree */
    private InitialContext ctx = null;

    /** Object Cache  */
    private Map cache = null;

    //Object used to log messages
    private static final IBwLog bwLog =
        BwLogFactory.create(BwLogUtil.getClassName());

    /**
     * Creates a new JndiObjectLocator object.
     *
     * @throws BOBRuntimeException When Initial Context creation fails.
     */
    public JndiObjectLocator() throws BOBNestedRuntimeException {
        cache = new HashMap();

        try {
            ctx = new InitialContext();
            System.out.println("CTX:" +ctx);
        } catch (NamingException ne) {
            bwLog.error(EVENTS.INITIALIZE, "Context Initialization Failure"+BwLogUtil.stackToStr(ne));
            throw new BOBNestedRuntimeException(
                "Context Initialization Failure",
                ne);
        }
    }

    /**
     * Fetches any Object bound in JNDI.
     *
     * @param jndiName JNDI Name of the Object to be retrieved.
     *
     * @return Object bound to the given JNDI name.
     *
     * @throws ObjectLookUpException When JNDI lookup fails for any reason.
     */
    public Object fetch(String jndiName) throws ObjectLookUpException {
        Object obj = cache.get(jndiName);
        System.out.println("JNDI:" +jndiName);
        if (obj == null) {
            try {
                if (ctx != null) {
                    obj = ctx.lookup(jndiName);
                    if (obj != null && cache.get(jndiName) == null) {
                        synchronized (cache) {
                            cache.put(jndiName, obj);
                        }
                    }
                } else {
                    bwLog.error(
                        EVENTS.INITIALIZE,
                        "Context Initialization Failure");
                    throw new BOBRuntimeException("Context Initialization Failure");
                }
            } catch (NamingException ne) {
                bwLog.error(
                    EVENTS.JNDI_LOOKUP,
                    "Context Initialization Failure"+BwLogUtil.stackToStr(ne));
                throw new ObjectLookUpException(
                    "BOB DataSource Lookup Failure",
                    ne);
            }
        }

        return obj;
    }

    /**
     * Closes the JNDI context.
     *
     * @throws BOBRuntimeException When IntialContext fails to close.
     */
    public void destroy() throws BOBNestedRuntimeException {
        try {
            ctx.close();
        } catch (NamingException ne) {
            bwLog.error(EVENTS.INITIALIZE, "Naming Context Closing Exception"+BwLogUtil.stackToStr(ne));
            throw new BOBNestedRuntimeException(
                "Naming Context Closing Exception",
                ne);
        }
    }
}

1 Ответ

0 голосов
/ 04 июня 2018

Вы используете по умолчанию InitialContext в этом вызове:

ctx = new InitialContext();

, поэтому вам просто нужно удалить jndi.properties, где бы он ни находился.

Будет выглядеть контекст не по умолчаниюкак это:

Hashtable env = new Hashtable();
... setting env properties
... creating non def context
ctx = new InitialContext(env);
...