Project

General

Profile

Wiki » History » Revision 25

Revision 24 (Tomek Dziemidowicz, 2019-07-04 08:40 PM) → Revision 25/42 (Tomek Dziemidowicz, 2019-07-04 08:42 PM)

h1. SQLite-sync documentation

*Owner* : AMPLIFIER sp. z o.o.
*Contact* : support (at) ampliapps.com
*website* : https://ampliapps.com

{{>toc}}

Welcome to the AMPLI-SYNC documentation!
We have language bindings in JavaScript, .NET C#, Java and Objective-C!

h2. AMPLI-SYNC concept

h3. Solution diagram

!{width:700px}SQLite-sync-structure.png!

* Devices communicate with server using HTTP/HTTPS protocol.
* Proxy Load Balancer. If necessary, proxy can redirect request to another instance of SQLite-core.
* Authorization provider will generate token based on response from authorization provider.

h3. Proxy Balancer flowchart

!{width:400px}SQLite-sync-proxy-balancer.png!

h3. Authorization Provider flowchart

!{width:350px}SQLite-sync-authentication-process.png!

h2. REST API (server API)

h3. Protocol version

This document describes integration with the REST API 3.x protocol.

h3. Service description

There are two stages to processing a request:

* Device places an request.
* SQLite-sync server confirms the request has been processed successfully and sends confirmation with eventual conflict list that need to be resolved.

h3. Synchronization flowchart

!{width:200px;}Device-synchronization-diagram.png!

h3. Request URL format

Sample REST API call:
<pre>
https://example.com/API3/__method___
</pre>
Explanation:
*https://example.com/* - adres of REST API service
*API3* - version of synchronization
*__method___* - method/action



h3. API methods

There are three method used by client:

h4. *Sync* - gets changes for table
*Method* : GET
*Path* : /Sync/{subscriberUUID}/{tableName}“
*Produces* : TEXT_PLAIN
*Description* : Get changed data. Params:
*subscriberUUID* - identifier of subscriber. By default device unique ID is used. But we can place there any value (also #user.UUID)
Response:



h2. Conflict Resolution

h2. Update procedure

h2. Data filtering

h2. Installation

h3. Server Prerequisites

To make ampli-sync server work you need:
* Apache Tomcat 8.
* Java
* Linux/Windows environment.

h3. Manual

Steps needed to install AMPLI-SYNC manually on Ubuntu.

# Install Tomcat on Ubuntu:
https://www.digitalocean.com/community/tutorials/how-to-install-apache-tomcat-8-on-ubuntu-16-04
# Create new user
<pre>
sudo adduser amplisync
</pre>
System will ask you for password for newly created user.
# Add user to group ‘tomcat’
<pre>
sudo usermod -a -G tomcat amplisync
</pre>
# Chang in web.xml path variable to
<pre>
\home/sqlitesync/demo
</pre>
# Install new application in Tomcat. Start with switching to amplisync user.
<pre>
su amplisync
</pre>
# Create new folder /home/sqlitesync/demo
# Upload new service amplisync-demo to Tomcat. You can do that using Tomcat application manager, or you can put WAR file in Tomcat webapps folder. Name of your WAR file is app name in Tomcat environment. Remember to not place spaces and special chars in name of your WAR file.
# Restart Tomcat:
<pre>
service tomcat restart
</pre>
Now you can access your installation using link:
<pre>
http://your_ip:8080/amplisync-app-name/API3
</pre>
# Setup permissions:
<pre>
chown -R sqlitesync:tomcat /home/amplisync/demo/
</pre>

h3. Docker

h3. Configuring AMPLI-SYNC service

First you need to adjust website configuration file (web.xml), then you need to change main configuration file (sync.properties).
*Service configuration (web.xml)*
Go to your_webapps_folder/SqliteSync/WEB-INF/web.xml and open for edit. Navigate to section:
<pre><code class="xml">
<env-entry>
<env-entry-name>working-dir</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>/your/working/dir/sqlite-sync/</env-entry-value>
</env-entry>
</code></pre>
change env-entry-value key and point to working dir where SQLite-sync.com server will store log files, temporary files and configuration. Create manually a subfolder named config. Create a text file sync.properties in folder config. The path should look like this:
<pre>
\working_dir\config\sync.properties
</pre>
*IMPORTANT* Restart service after changing web.xml. Make sure that Tomcat has read/write access to working dir.
Sample configurations for MySQL server
<pre>
DB_ENGINE = mysql
DBURL = jdbc:mysql://server:3306/dbname?rewriteBatchedStatements=true
DBUSER = user
DBPASS = pass
DBDRIVER = com.mysql.cj.jdbc.Driver
DATE_FORMAT = yyyy-MM-dd HH:mm:ss
HISTORY_DAYS = 7
LOG_LEVEL = 4
</pre>
If you faced a timezone error after configuration in `sync.properties` add at the end of connection string:
<pre>
&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
</pre>
*Keys explanation*
*DB_ENGINE* - type of database engine. Available options:
* mysql
* mssql
* postgresql
* oracle

*LOG_LEVEL* - defain details level for log
> 4: TRACE, DEBUG, INFO, WARN; (default)
> 3: DEBUG, INFO, WARN;
> 2: INFO,WARN;
> 1: WARN;
> 0 - disable logs
*DATE_FORMAT* - set format of date
default format: yyyy-MM-dd HH:mm:ss
*HISTORY_DAYS* - How long files with sync data will be kept
default value: 7
When you use MySQL database DO NOT remove from the end of the connection string:
<pre>
?rewriteBatchedStatements=true
</pre>

h2. Supported databases

h2. Samples