⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 synchronizingbean.java

📁 这个范例程序演示了利用j2me技术开发无线服务器支持的应用。这是一个电影票订购程序
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        syncClient.setLastSynchronizationTime(0L);    // to force slow sync        return new SyncClientAnchor(syncClient.getId(), 0L, true);    }     public MovieRatingData[] synchronizeMovieRatings(MovieRatingData[] movieRatings,             int conflictResolutionStrategyId) {        try {            syncConduit = account.getMovieRatingSyncConduit();            Collection serverSideChanges =                 syncConduit.getChangedSyncMetaData(syncClient.getLastSynchronizationTime());            Map clientSideChanges = movieRatingsArrayToMap(movieRatings);            updatedMovieRatings.clear();            if (conflictResolutionStrategyId                     == SyncConstants.STRATEGY_FIRST_MODIFIED_WINS                     || conflictResolutionStrategyId                        == SyncConstants.STRATEGY_LAST_MODIFIED_WINS) {                // Handle conflicting changes and build the list of updates                for (Iterator i = serverSideChanges.iterator();                         i.hasNext(); ) {                    SyncMetaDataLocal serverSideChange =                         (SyncMetaDataLocal) i.next();                    MovieRatingData clientSideChange =                         (MovieRatingData) clientSideChanges.get(serverSideChange.getId());                    if (clientSideChange != null) {                        // Align the time                        clientSideChange.alignTime(timeShift);                        // Conflicting changes                        if ((conflictResolutionStrategyId == SyncConstants.STRATEGY_FIRST_MODIFIED_WINS && serverSideChange.getLastModificationTime() > clientSideChange.getLastModificationDate())                                 || (conflictResolutionStrategyId                                     == SyncConstants.STRATEGY_LAST_MODIFIED_WINS                                        && serverSideChange.getLastModificationTime()                                           < clientSideChange.getLastModificationDate())) {                            if (clientSideChange.getModificationStatus()                                     == SyncConstants.STATUS_DELETED) {                                removeMovieRating(clientSideChange.getMovieId());                            } else {                                updateMovieRating(clientSideChange);                            }                         } else {                            if (serverSideChange.getDeleted()) {                                if (clientSideChange.getModificationStatus()                                         != SyncConstants.STATUS_DELETED) {                                    clientSideChange.setModificationStatus(SyncConstants.STATUS_DELETED);                                    updatedMovieRatings.put(clientSideChange.getMovieId(),                                                             clientSideChange);                                }                             } else {                                updatedMovieRatings.put(serverSideChange.getId(),                                                         account.getMovieRating(serverSideChange.getId()).getData());                            }                         }                         clientSideChanges.remove(clientSideChange.getMovieId());                    } else {                        // Non-conflicting changes                        MovieRatingData movieRating =                             !serverSideChange.getDeleted()                             ? account.getMovieRating(serverSideChange.getId()).getData()                             : new MovieRatingData(serverSideChange.getId(),                                                   serverSideChange.getLastModificationTime());                        updatedMovieRatings.put(serverSideChange.getId(),                                                 movieRating);                    }                 }                 // Apply directly remaining non-conflicting client-side changes                for (Iterator i = clientSideChanges.values().iterator();                         i.hasNext(); ) {                    MovieRatingData clientSideChange =                         (MovieRatingData) i.next();                    updateMovieRating(clientSideChange);                }                 syncClient.setLastSynchronizationTime(initiationTime);                return (MovieRatingData[]) new ArrayList(updatedMovieRatings.values()).toArray(new MovieRatingData[0]);            } else {    // SyncConstants.STRATEGY_ASK_USER                HashMap conflictingMovieRatings = new HashMap();                // Handle conflicting changes and build the list of updates                for (Iterator i = serverSideChanges.iterator();                         i.hasNext(); ) {                    SyncMetaDataLocal serverSideChange =                         (SyncMetaDataLocal) i.next();                    MovieRatingData clientSideChange =                         (MovieRatingData) clientSideChanges.get(serverSideChange.getId());                    if (clientSideChange != null) {                        MovieRatingData movieRating =                             !serverSideChange.getDeleted()                             ? account.getMovieRating(serverSideChange.getId()).getData()                             : new MovieRatingData(serverSideChange.getId(),                                                   serverSideChange.getLastModificationTime());                        conflictingMovieRatings.put(serverSideChange.getId(),                                                     movieRating);                        clientSideChanges.remove(clientSideChange.getMovieId());                    } else {                        // Non-conflicting changes                        MovieRatingData movieRating =                             !serverSideChange.getDeleted()                             ? account.getMovieRating(serverSideChange.getId()).getData()                             : new MovieRatingData(serverSideChange.getId(),                                                   serverSideChange.getLastModificationTime());                        updatedMovieRatings.put(serverSideChange.getId(),                                                 movieRating);                    }                 }                 // Apply directly remaining non-conflicting client-side changes                for (Iterator i = clientSideChanges.values().iterator();                         i.hasNext(); ) {                    MovieRatingData clientSideChange =                         (MovieRatingData) i.next();                    if (clientSideChange.getModificationStatus()                             == SyncConstants.STATUS_DELETED) {                        removeMovieRating(clientSideChange.getMovieId());                    } else {                        updateMovieRating(clientSideChange);                    }                 }                 return (MovieRatingData[]) new ArrayList(conflictingMovieRatings.values()).toArray(new MovieRatingData[0]);            }         } catch (Exception e) {            e.printStackTrace(System.err);            throw new EJBException("SynchronizingBean.synchronizeMovieRatings: "                                    + e);        }     }     public MovieRatingData[] commitMovieRatings(MovieRatingData[] movieRatings) {        try {            syncConduit = account.getMovieRatingSyncConduit();            for (int i = 0; i < movieRatings.length; i++) {                MovieRatingData change = movieRatings[i];                if (change.isModifiedOnClient()) {                    if (change.getModificationStatus()                             == SyncConstants.STATUS_DELETED) {                        removeMovieRating(change.getMovieId());                    } else {                        updateMovieRating(change);                    }                 } else {                    if (change.getModificationStatus()                             == SyncConstants.STATUS_DELETED) {                        updatedMovieRatings.put(change.getMovieId(), change);                    } else {                        MovieRatingLocal movieRating =                             account.getMovieRating(change.getMovieId());                        if (movieRating != null) {                            updatedMovieRatings.put(change.getMovieId(),                                                     movieRating.getData());                        }                     }                 }             }             syncClient.setLastSynchronizationTime(initiationTime);            return (MovieRatingData[]) new ArrayList(updatedMovieRatings.values()).toArray(new MovieRatingData[0]);        } catch (Exception e) {            throw new EJBException("SynchronizingBean.synchronizeMovieRatings: "                                    + e);        }     }     private Map movieRatingsArrayToMap(MovieRatingData[] movieRatings) {        Map map = new HashMap();        for (int i = 0; i < movieRatings.length; i++) {            map.put(movieRatings[i].getMovieId(), movieRatings[i]);        }         return map;    }     private void updateMovieRating(MovieRatingData data)             throws FinderException, CreateException, RemoveException {        MovieRatingLocal movieRating =             account.getMovieRating(data.getMovieId());        if (movieRating == null) {            SyncMetaDataLocal metaData =                 syncConduit.getSyncMetaData(data.getMovieId());            if (metaData != null) {                metaData.remove();            }             MovieLocal movie = movieHome.findByPrimaryKey(data.getMovieId());            movieRating = movieRatingHome.create(movie, account);        }         movieRating.setData(data, initiationTime);        return;    }     private void removeMovieRating(String movieId)             throws FinderException, CreateException, RemoveException {        MovieRatingLocal movieRating = account.getMovieRating(movieId);        if (movieRating != null) {            movieRating.remove();        }         return;    } }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -