У меня есть сессионный компонент без сохранения состояния, который создает объекты RuntimeFactory
и Application
. Оба класса являются частью пакета Social Business Toolkit. Application
используется для чтения свойств и файлов управляемых компонентов, но этого не произошло, поскольку RuntimeFactory
не смог получить объект Application
.
AbstractRuntimeFactory
имеет Map
с Application
объектами:
private Map<ClassLoader,AbstractApplication> applications = new HashMap<ClassLoader, AbstractApplication>();
ClassLoader
устанавливается с помощью этого метода:
protected ClassLoader getContextClassLoader() {
return Thread.currentThread().getContextClassLoader();
}
Объект Application
извлекается с помощью этого метода:
public Application getApplicationUnchecked() {
ClassLoader cl = getContextClassLoader();
return applications.get(cl);
}
Во время отладки я заметил, что идентификатор потока остается прежним, но есть два разных экземпляра ClassLoader
. Как это произошло? Есть только один сессионный компонент, RuntimeFactory и Application. Разве getContextClassLoader() не должен всегда возвращать мне один и тот же объект?
Теперь, когда я работаю, я использую:
ClassLoader cl = this.getClass().getClassLoader();
Где this
- это RuntimeFactory
, но я не уверен, что это хорошее решение... это больше похоже на обходной путь к реальной проблеме.
PS: я использую WebSphere Portal в качестве сервера приложений.