应用程序上下文与 Web上下文(以及随之而来的类加载器问题)之间的分离是我不断遇到的问题。我在我的第一个项目中使用Spring,从一个编写糟糕的基于JSP的webapp迁移到基于Spring的。
我只是想知道这种配置是否有意义:
现在我遇到了类加载器问题,我将对象传递给JDO / DataNucleus并且它是由web应用程序类加载器创建的,但是DAO都是应用程序上下文的一部分,因此该组件获得了自己的类加载器并且可以' t匹配相同的对象。
来自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中
我问因为这不是第一个类加载器问题(我担心不是最后一个)因为Spring现在配置的方式弹出,所以我想知道我做得不好。
或许有一些配置可以解决我还没有意识到的这类类加载器问题?
答案 0 :(得分:3)
类加载器应该与Spring上下文无关。 Web应用程序上下文是一个弹簧容器,通常包含控制器和视图解析器。应用程序上下文包含dao。 Web应用程序上下文将应用程序上下文作为父级,因此它可以访问dao和服务bean,反之亦然。但是,上下文都是同一个战争的一部分,应该由相同的类加载器加载。
看看你的异常,我认为,它似乎与Spring无关。