ValueProxy自动序列化第三方对象

时间:2013-10-08 13:27:35

标签: java gwt

我使用Solrj库从服务器类到Solr进行通信。要将对象传输到客户端,我当前正在创建新的DTO对象,并使用setter来复制数据。

手动复制数据,尤其是当您有多个DTO对象时,这不是一个好方法。

我考虑使用RequestFactoryValueProxy将我的代理类映射到Solrj类。据我了解,我不需要EntityProxy,因为Solrj对象没有身份证明。它只是一个对象的集合,我不会坚持。

在这种情况下使用RequestFactory会有意义吗?我是否需要所有这些定位器和RF使用的其他接口?

关于此主题的信息不多,特别是在ValueProxy上。参考将是有用的。

1 个答案:

答案 0 :(得分:0)

我已经从使用gwt rpc切换到请求工厂了,主要是因为我现在可以将任何对象传输到客户端而无需修改第三方类来实现可序列化。您不必拥有定位器,只需使用静态方法即可使用实现。如果您不希望将它们设置为静态,则只需在服务器包中实现ServiceLocator并将locator = WhateverYourServiceIs.class添加到@Service注释

这是我用于从服务器访问quartz调度程序对象的版本。

客户代码

    @Service(value = SchedulerService.class)
    public interface SchedulerRequest extends RequestContext {

        Request<List<QuartzTriggerProxy>> getScheduledJobs();

        Request<List<QuartzTriggerProxy>> searchSchedules(String searchString);

        Request<Void> unscheduleJob(String keyName, String groupName);

        Request<Void> pauseTrigger(QuartzTriggerKeyProxy triggerKey);

        Request<Void> resumeTrigger(QuartzTriggerKeyProxy triggerKey);

        Request<QuartzTriggerProxy> getTrigger(String keyName, String groupName);

        Request<Void> fireTriggerNow(QuartzTriggerKeyProxy triggerKey);

        Request<Void> fireJobNow(QuartzJobKeyProxy jobKey);

        Request<Date> rescheduleJob(QuartzTriggerKeyProxy triggerKey, QuartzTriggerProxy trigger);

        Request<AnalyticsTaskProxy> getTaskForTrigger(QuartzJobKeyProxy jobKey);

        Request<String> getTriggerState(QuartzTriggerKeyProxy triggerKey);

    }

服务代码

public class SchedulerService {

    public static void pauseTrigger(TriggerKey triggerKey) throws AnalyticsTaskException, SchedulerException {
        getTaskEngine().pauseTrigger(triggerKey);
    }

    public static void resumeTrigger(TriggerKey triggerKey) throws AnalyticsTaskException, SchedulerException {
        getTaskEngine().resumeTrigger(triggerKey);
    }

    public static Trigger getTrigger(String keyName, String groupName) throws AnalyticsTaskException, SchedulerException {
        return getTaskEngine().getTrigger(TriggerKey.triggerKey(keyName, groupName));
    }

    public static void fireTriggerNow(TriggerKey triggerKey) throws AnalyticsTaskException, SchedulerException {
     getTaskEngine().fireTriggerNow(triggerKey);
    }

    public static void fireJobNow(JobKey jobKey) throws AnalyticsTaskException, SchedulerException {
     getTaskEngine().fireJobNow(jobKey);
    }
}