2016-10-25 9 views
2

JavaFXで記述されたデスクトップアプリケーション(クライアント)を操作しています。頻繁な消費ではなく定期的にWebサービスを使用する

ユーザーがスタートボタンをクリックして操作を開始し、別のエントリを実行して操作を停止します。

クライアントは、Webサービス(javaサーバーに公開)からデータを取得します。

ほとんどのデータは、サーバー上で毎年更新されます。今の は、私が

//following function is called on operation start 
getMataDataFromServer() { 
    List<ShiftDetail> shiftDetails = getShiftDetailsFromServer(); 
    List<Day> weeklyOffDays = getWeeklyOffDayMetadata(); 
    List<Day> holidays = getHolidayMetaData(); 
    //and so on like 8 different meta data of large size which slow down response time. 

} 

私がヒットしたくないと、この問題への最善の解決策があります(Webサービスのほとんどは毎年データの変更と同じデータを返す)各操作中にすべてのWebサービスを打っています毎年のWebサービスを提供しています。

ウェブサービスキャッシングを実行できますか?

答えて

2

私はクライアント側でSQLiteデータベースを導入しました。

マスターメタデータテーブルとともに休日、シフトの詳細、休暇などのメタデータごとに作成されたテーブル。

サーバー側では、メタデータWebサービスの最終更新時刻を提供する新しいWebサービスが作成されました。

各操作中に、データを確認するために最後に更新されたWebサービスを消費することは、操作の開始後に変更されます。

fetchAndSaveMetaDataLastUpdatedInfo() { 
    List<MetaData> metdataList = fetchMetaDataLastUpdatedInfo(); 
    // Saving meta data last updated info to local db 
    saveMetaDataLastUpdatedInfoToLocalDB(); 
} 

各Webサービスを最後に更新された時間をチェックして、ローカルデータベースまたはWebサービスからデータを取得している間に。

private List<ShiftDetail> fetchShiftDetails(){ 
    boolean fetchShiftFromDB = isMetaDataLastUpdatedAfterOperationStart(Constant.SHIFT); 
     List<ShiftDetail> shiftDetails; 
     if (fetchShiftFromDB) { 
      shiftDetails = fetchShiftDetailsFromLocalDB(); 
     } else { 
      shiftDetails = fetchShiftDetailsFromServer(); 
     } 
     return shiftDetails; 
    } 
+0

この手法の問題点は何ですか?あなた自身で質問を解決したようです。 – pedrofb

+0

私は、1月1日など、更新する予定がわかっている場合は、各種類のデータに「有効期限」を含めるように改善することを提案することができます。これは、データが更新されました。また、各レジスタの最後の更新データをマークし、更新されたデータのみをダウンロードすることもできます。しかし、あなたのシステムからもっと多くのデータを知らなくても、このアドバイスが良いかどうかはわかりません – pedrofb