定期使用Web服务而不是频繁使用

时间:2016-10-25 09:58:48

标签: web-services

我有一个用JavaFX编写的桌面应用程序(客户端),它执行操作。

用户通过单击开始按钮开始操作,执行不同的输入并停止操作。

在操作期间,客户端从Web服务(在Java服务器上公开)中提取数据。

大多数数据每年都会在服务器上更新。 目前,我在每次操作期间都会访问所有Web服务(大多数Web服务返回与每年数据更改相同的数据)

//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服务。

或者我可以执行网络服务缓存吗?

1 个答案:

答案 0 :(得分: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;
    }