ThingWorx Edge Java SDK > Working with Things > Synchronization Framework
Synchronization Framework
Synchronization is a response to a binding request that tells your device what properties and services the ThingWorx platform wants to know about. Pushing data involves sending property change messages to the platform.
Pushing data before Synchronization will cause data loss!
Synchronization of a remote VirtualThing with the ThingWorx platform simplifies the data delivery process. You could make these updates on your own by directly calling a server remote thing over your SDK connection. However, the advantage of using a VirtualThing is that it introduces a cache between your remote data and its analog remote thing on the server. This cache allows you to efficiently manage requests between the server and your remote VirtualThing, preventing the server from making too many requests to your remote process. In addition, the cache allows you to easily bind the values in the cache to specific properties on a server remote thing.
This process of binding remote data to properties of a server remote thing allows you to compose server remote things from the properties of multiple remote virtual things, enabling multiple remote devices or machines to contribute to the properties of a single remote thing on the server. One remote device or machine could contribute data collected from a real sensor and push it to the server. The server could then notify a remote application that data had changed. That remote application could update itself and then contribute additional properties back to the server, based on its own calculations
When it receives sensor data, a virtual thing posts this data to the server cache. A remote thing on the server is bound to this property. This remote thing subscribes to changes in this property value. When this value changes, the subscription function is called. This subscription function notifies a virtual thing in a remote application that new data is available. This update could also be done using bindings since they can also trigger code within the remote machine.
The result from the ThingWorx platform perspective is that there is a single remote thing, whose state (its properties) is updated from multiple sources but appears to be a single entity as far as its use in mashups is concerned. At the same time, it is providing a real-time, synchronized copy of its state that you can then use to manipulate the remote thing.