GWT 2.6.0使用Tomcat在Ubuntu上进行序列化错误但在WIndows上工作

时间:2014-06-02 14:28:10

标签: gwt

在调用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);
    }
}

1 个答案:

答案 0 :(得分:0)

我认为例外是误导性的。

每个应该序列化的类必须包含在序列化策略中。 我假设你使用不同的用户进行测试,而不是使用linux。

现在你得到一个NoResultException并且这不能被序列化,因为GWT编译器不知道它应该被序列化(因为它没有在任何interface中定义)。

你可以做两件事:

  1. 捕获此异常(如其他答案中所述)
  2. 在界面中抛出异常

    public Integer getRemainingAttempts(String username)抛出NoResultException {

  3. 现在编译器获取了这个类应该被序列化的信息。