2

ConfigProperty.idPropertyMap在服务器端填充。(通过日志输出验证)
在客户端访问它显示它是空的。:-( (通过日志输出验证)

这是一些默认行为吗?(我不这么认为)问题可能与内部类ConfigProperty.IdPropertyMapjava.util.HashMap用法、序列化或某些字段访问修饰符问题有关吗?

谢谢你的帮助

    // 传输对象

    公共类 ConfigProperty 实现 IsSerializable、Comparable {

        ...

    静态公共类 IdPropertyMap 扩展 HashMap
             实现 IsSerializable
        {
           ...
        }

    受保护的静态 IdPropertyMap idPropertyMap = new IdPropertyMap();

        ...
    }


    // 服务器服务

    公共类 ManagerServiceImpl 扩展 RemoteServiceServlet 实现
        经理服务
    {
        ...

        公共 IdPropertyMap getConfigProps(String timeToken)
            抛出 ConfiguratorException
        {
            ...
        }
    }

在一些好的答案之后从下面添加(谢谢!):

回答底线:目前未实现/支持静态字段同步。某人/我必须提交功能请求

只是我的观点(GWT 的一个坠入爱河的新手 :-)):

我非常了解(不完美!;-))“全局”变量同步的可能含义(依赖图或注释的使用可能很有用)。但是对于一个新的(其他经验丰富的 Java EE/web)用户来说,它看起来像这样:

  • 您创建了一些myapp.shared.dto.MyClass类(dto = 数据传输对象)

  • 您在其中添加一些静态字段,这些字段仅代表这些对象的集合(可能还有其他一些 DTO)

  • 您也可以在客户端执行此操作,并且所有其他静态方法也可以正常工作

  • 唯一不起作用的是同步(首先这还不错)

但是:一些提供的注释,比方说@Transfer static Collection<MyClass> myObjList;会很方便,因为我似乎知道这会带来的影响和好处。

在我的情况下,它相当简单,因为客户端更加静态,但如果 GWT 框架可以做到,则希望在不明确实现的情况下拥有这些数据。

4

2 回答 2

3

RPC 的想法不是您可以将客户端和服务器视为完全相同的 JVM,而是它们可以共享您通过网络传递的对象。要通过线路从服务器发送静态字段到客户端,存储在该字段中的对象必须从 RPC 方法返回。

静态属性不会序列化并通过网络发送,因为它们不属于单个对象,而是属于类本身。

public class MyData implements Serializable {
    protected String name;//sent over the wire, each MyData has its own name
    protected String key;

    protected static String masterKey;//All objects on the server or client 
    // share this, it cannot be sent over RPC. Instead, another RPC method
    // could access it
}

但是请注意,只有一个实例将被共享 - 如果服务器上的其他内容更改了该字段,则所有请求副本的客户端都需要更新

于 2012-12-19T13:49:16.107 回答
3

静态变量是纯类变量,与单个实例无关。序列化仅适用于对象。

所以,你总是空一个 ConfigProperty.idPropertyMap

于 2012-12-19T13:45:24.853 回答