The device application must meet these requirements to utilize the Replication-Based Push Synchronization APIs described in this section.
Develop the push application directly from generated mobile business object (MBO) code.
public class PushListener implements Runnable { Connection conn = null; private static String url = "http://:100;deviceside=false"; /** * Constructor */ public PushListener() { } public void run() { System.out.println("++++++ Started Push Listener ++++++++"); try { conn = Connector.open(url); while (true) { String syncRequestStr = null; try { if ( conn instanceof StreamConnectionNotifier ) { // Open an InputStream. StreamConnectionNotifier scn = (StreamConnectionNotifier) conn; StreamConnection sc = scn.acceptAndOpen(); InputStream input = sc.openInputStream(); // Extract the data from the InputStream. StringBuffer sb = new StringBuffer(); byte[] data = new byte[256]; int chunk = 0; while (-1 != (chunk = input.read(data))) { sb.append(new String(data, 0, chunk)); } // Close the InputStream and StreamConnection. input.close(); String s = sb.toString(); // Display the received data. syncRequestStr = s.trim(); System.out.println(">>Received: " + syncRequestStr); } } catch (Exception ex) { System.out.println(ex); } // Clients can parse the syncRequestStr to find client application // name, package name, sync group name(publication), launch client //application and perform sync. // format of the push message sent by the server: // notification_timestamp=<datetime>;app=<client app name>; // device_id=<device id>;package=<sup package name with version>; // publication=<comma separated list of syncGroup names> TestDB.registerCallbackHandler(new MyCallbackHandler()); com.sybase.collections.ObjectList sgs = new com.sybase. collections.ObjectList() // Assume you have notification to sync two syncGroups(publications), // sg1 and sg2: sgs.add(TestDB.getSynchronizationGroup("sg1")); sgs.add(TestDB.getSynchronizationGroup("sg2")); TestDB.beginSynchronize(sgs, new Object()); } } catch (Exception ex) { System.out.println("HttpPushListener - ERROR : " + ex); } } /* * Define callback handler for handling SIS notifications */ public class MyCallbackHandler extends com.sybase. persistence.DefaultCallbackHandler { public int onSynchronize(ObjectList arg0, SynchronizationContext arg1) { System.out.println("Called on Synchronize"); return SynchronizationAction.CONTINUE; // returns SynchronizationAction.CONTINUE to proceed this sync } public void onSynchronizeFailure(ObjectList arg0) { System.out.println("Called onSynchronizeFailure"); } public void onSynchronizeSuccess(ObjectList arg0) { System.out.println("Called onSynchronizeSuccess"); } } }
public class PushClientApp extends Application { public static String MDSSERVER = "localhost"; public static String MDSSERVERPORT = "8080"; static String PROFILE_HTTP_PUSH_PROTOCOL = "HTTPPUSH"; static String PROFILE_KEY_ADDRESS = "address"; static String PROFILE_KEY_PROTOCOL = "protocol"; static String PROFILE_KEY_APPNAME = "appname"; static String PROFILE_KEY_DEVICE_ID = "deviceId"; static String PUSH_HTTP_DEFAULT_DEVICE_PORT = "100"; static String DEVICE_ID = "2100000a"; public static void main(String[] args) { PushClientApp app = new PushClientApp(); app.enterEventDispatcher(); } Thread pushThread; PushClientApp() { // Set the connection profile information System.out.println("++++++++ Starting the client ++++++++++"); ConnectionProfile syncprofile = TestDB.getSynchronizationProfile(); syncprofile.setServerName("kpatilxp"); syncprofile.setPortNumber(2480); syncprofile.save(); // Login to the SUP server TestDB.loginToSync("supAdmin", "s3pAdmin"); // Start the http push listener thread pushThread = new Thread(new PushListener()); pushThread.start(); setPushConnectionProfile("Test:1.0", DEVICE_ID, syncprofile, "PushClientApp"); // Enable SIS on the synchronization group SynchronizationGroup sg = TestDB.getSynchronizationGroup("PushEnabled"); sg.setEnableSIS(true); sg.setInterval(3); sg.save(); // this will update the local db // This will synchronize the SIS subscription to the server TestDB.synchronize(); System.out.println("++++ Synchronization succeeded ++++++"); } /* * For now this assumes MDS is running on localhost * Creates the URL for PUSH * * @param deviceid for SUP client */ public static String getHTTPPushAddress(String deviceid) { String mdsServer = MDSSERVER; String mdsPort = MDSSERVERPORT; StringBuffer result = new StringBuffer("http://"); result.append(mdsServer); result.append(":"); result.append(mdsPort); result.append("/push?DESTINATION="); result.append(deviceid); result.append("&PORT="); result.append(PUSH_HTTP_DEFAULT_DEVICE_PORT); return result.toString(); } /** * Sets up push settings for specified package's * synchronization profile. * * @param packageName * the specified package name * @return true if set up succesfully. */ private boolean setPushConnectionProfile(String packageName, String deviceId, ConnectionProfile syncProfile, String appId) { try { String httpPushAddress = getHTTPPushAddress(deviceId); syncProfile.setProperty(PROFILE_KEY_ADDRESS, httpPushAddress); syncProfile.setProperty(PROFILE_KEY_PROTOCOL, PROFILE_HTTP_PUSH_PROTOCOL); syncProfile.setProperty(PROFILE_KEY_APPNAME, appId); syncProfile.setProperty(PROFILE_KEY_DEVICE_ID, deviceId); syncProfile.save(); } catch (Exception e) { System.out.println(">> setPushConnectionProfile - Exception e : " + e); return false; } return true; }