Разделение между контекстом приложения и веб-контекстом (и возникающими в результате проблемами загрузчика классов) являются для меня постоянным источником проблем. Я использую Spring в своем первом проекте, переходя с плохо написанного веб-приложения на основе JSP на Spring.
Я просто хочу знать, имеет ли эта конфигурация смысл:
- У меня есть контроллеры, объекты форм и т.п., определенные с помощью аннотаций и отсканированные в контексте веб-приложения.
- Я переместил DAO (объекты доступа к данным) в контекст приложения после того, как они изначально были в контексте веб-приложения - это потому, что мне нужно было использовать их, чтобы получить пользователя / пароль для обеспечения безопасности Spring, который является компонентом контекста приложения. .
- Безопасность Spring, если она определена (в соответствии с документами) в контексте приложения, что требует использования DAO.
Теперь я сталкиваюсь с проблемами загрузчика классов, когда я передаю объект в JDO / DataNucleus, и он создается загрузчиком классов веб-приложения, но все DAO являются частью контекста приложения, поэтому этот компонент получает свой собственный загрузчик классов и может ' не совпадают одинаковые объекты.
Простой метод от DAO:
@Override
public boolean userExists(String username) {
Query query = pm.newQuery(User.class);
query.setFilter( "username == :usernameParam" );
query.setResult( "count(username)" );
query.setResultClass(Long.class);
System.out.println(username);
Long result = (Long)query.execute(username);
return (result!=null && result>0);
}
javax.jdo.JDOUserException: запрос
вернет одно поле, но это
не согласованного типа, как
ResultClass (java.lang.Long): это
java.lang.Long
Я спрашиваю, потому что это не первая проблема загрузчика классов (и я боюсь, что не последняя) всплывает из-за того, как пружина настроена прямо сейчас, поэтому мне интересно, если я делаю плохо.
Или, может быть, есть некоторые конфигурации, которые решают проблемы загрузчика классов, о которых я еще не знаю?