Мы переносим наш код из 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);
}
}
}