在调用GWT rpc方法检索某些数据时,我面临下面提到的错误。在Windows上,每件事情都运行得很好,但是rpc调用在ubuntu上抛出了这个异常。应用程序部署在Tomcat上。我看到尝试了所有的序列化工作但没有任何作用..请帮助!
SEVERE:调度传入的RPC调用时发生异常 com.google.gwt.user.client.rpc.SerializationException:类型'javax.persistence.NoResultException'未包含在可由此SerializationPolicy序列化的类型集中,或者无法加载其Class对象。出于安全考虑,此类型不会被序列化:instance = javax.persistence.NoResultException:找不到queryat com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:667)的实体< /强>
来自SettingsDAO.java的代码段
public SettingsDTO findSettingsByName(String name) {
TypedQuery<SettingsDTO> query = getEntityManager().createQuery("SELECT u FROM SettingsDTO u WHERE u.name = :name", SettingsDTO.class);
return query.setParameter("name", name).getSingleResult();
}
来自GWT Service Implementaion的代码片段。
@Transactional(readOnly=true)
public Integer getRemainingAttempts(String username) {
SettingsDTO settings = settingsDAO.findSettingsByName("STD");
int maxLogin = settings.getNloginAttempts();
UserDTO user = userDAO.findUserByName(username);
int locked = user.getLocked();
if (locked == -1) {
return locked;
} else if (locked >= maxLogin) {
return 0;
} else {
return (maxLogin-locked);
}
}
答案 0 :(得分:0)
我认为例外是误导性的。
每个应该序列化的类必须包含在序列化策略中。 我假设你使用不同的用户进行测试,而不是使用linux。
现在你得到一个NoResultException
并且这不能被序列化,因为GWT编译器不知道它应该被序列化(因为它没有在任何interface
中定义)。
你可以做两件事:
在界面中抛出异常
public Integer getRemainingAttempts(String username)抛出NoResultException {
现在编译器获取了这个类应该被序列化的信息。