2013-10-08 29 views
0

我正在使用Solrj庫從服務器類通信到Solr。將對象傳輸到客戶端我目前正在創建新的DTO對象並使用setter來複制數據。ValueProxy自動序列化第三方對象

手動複製數據,特別是當您有多個DTO對象時,這不是一個好方法。

我正在考慮使用RequestFactoryValueProxy我的代理類映射到Solrj類。據我瞭解,我不需要EntityProxy,因爲Solrj對象沒有ID。它只是一個對象集合,我不堅持。

在這種情況下使用RequestFactory有意義嗎?我是否需要RF使用的所有定位器和其他接口?

關於這個話題沒有太多的信息,特別是在ValueProxy的。參考將是有用的。

回答

0

我已經從使用gwt rpc切換到請求工廠的一切,主要是因爲我現在可以將任何對象傳輸到客戶端,而無需修改第三方類來實現可序列化。您不必擁有一個定位器,只需使用靜態方法使用實現即可。如果你不希望讓他們的靜態你可以簡單地實現你的服務器軟件包的ServiceLocator並添加定位器= 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); 
    } 
} 
+0

克里斯您好,感謝回答。我寫了一些希望能夠工作的代碼。但我有一個錯誤:「域類型twitter4j.internal.json.StatusJSONImpl無法發送到客戶端」。這是因爲我爲抽象的'Status'類創建了一個代理,而不是'StatusJSONImpl'。我看到我必須使用'@ ExtraTypes',但這個子類是私有的,我不能從外部引用它。我能解決這個問題嗎? – damluar

+0

這很糟糕,不知道如何解決該問題,除非您創建自己的Status類實現,然後添加一個拷貝構造函數來映射屬性並將代理指向此實現。 –

相關問題