Known Issues for Native Object API

Learn about known issues and apply workarounds for Native Object API and custom development.

Issue #Description
RTC-347
iOS client requests might fail with an HTTP 500 error when using Apache as a reverse proxy. 

The cause is that Apache implements the HTTP 1.1 specification in such a way that the HTTP header coming from the client, Transfer-Encoding: "Chunked" is not accepted due to the capitalized "c" in "Chunked".

Workaround: Change Apache configuration to rewrite incoming HTTP headers. Use mod_headers and add this to the Apache configuration:
RequestHeader edit Transfer-Encoding Chunked chunked early
RTC-304
Additional information for Tracking KPI topic in Developer Guide: iOS Object API Applications.

There is additional and corrected information for the Tracking KPI topic in the Developer Guide: iOS Object API Applications.

Workaround: See Tracking KPI for iOS Devices.

RTC-285
Set values explicitly for synchronization parameters.

For the Android, BlackBerry, Windows, and Windows Mobile object API, when a synchronization parameter is bound to the default personalization parameter "user", the default personalization parameter "user" may not take effect if the client application has never before synchronized.

Workaround: Set values explicitly for the synchronization parameters. Do not use values from the default personalization parameters.

RTC-282
Memory warnings from autoreleased objects.

You receive memory warnings in your application because of too many autoreleased objects. One example is when there are many objects at the application level through the findAll method.

Workaround: To reduce memory growth, use the appropriate autorelease pool. For more information, see this document from Apple: https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmAutoreleasePools.html .

RTC-281
64-bit packaging tool cannot be launched on 64-bit Windows.

By default, Sybase Mobile SDK installer configures the system to use the 32-bit packaging tool. If you try to run the 64-bit packaging tool (PackagingTool64.bat) after completing a new or upgrade installation of Sybase Mobile SDK on a 64-bit Windows system, launching the tool fails with this message:

Cannot load 64-bit SWT libraries on 32-bit JVM
Workaround: Set up a 64-bit JDK to work with the 64-bit packaging tool.
  1. .Install a 64-bit JDK on the 64-bit Windows system.
  2. Set system environment variables, CLASSPATH, JAVA_HOME, and Path to point to the 64-bit JDK.
  3. Verify that the SUP_HOME\ObjectAPI\Utils\bin\set-java-home.bat has been modified to point to the installed 64-bit JDK (where SUP_HOME is the installation directory for Sybase Mobile SDK on the 64-bit system).
  4. Launch PackagingTool64.bat.
RTC-280
Failure to start a connection after a shutdown of Unwired Server.

For Windows, Windows Mobile, Android and BlackBerry Object API clients, when the device application connects to the Unwired Server, the Unwired Server shuts down, and the device application calls startConnection again immediately after the shutdown occurs, an ApplicationRuntimeException may be thrown indicating Client state error. Client is already started, without attempting to reconnect to the server.

Workaround: You can catch the exception in the device application, sleep a few hundreds of milliseconds, and retry by calling Application.startConnection(timeout) again. After one or two seconds, you can try to reconnect.

RTC-265
Cannot change the database file path.

You create a database for your application with the default database file path, delete the database, and then change the database file path in the connection profile to another value so that you can create a new database file for your application. After you invoke the createDatabase operation again, however, the database is created with the old default database file path, not with the new one. 

Workaround: None

RTC-264
The perflog.txt file is not fully readable in a text editor.

Workaround: To read the contents and/or import the content to an MS Excel spreadsheet, perform the following steps:

  1. Right click on perflog.txt to select Open with > MS Word.
  2. Select Unicode 6.0 UTF-8 in Text encoding in the MS Word file conversion dialog. Click OK to see the content in MS Word. 
  3. Select all the content in the MS Word file and choose Tables > Convert Text to Table. In the Convert Text to Table dialog, set ":" in "Separate text at "Other", and set "AutoFit to contents" in AutoFit Behavior. 
  4. Choose Save as with Format set to "Web Page". Your file is saved as "PerfLog.htm". 
  5. Choose File > Import > HTML file in MS Excel. 
RTC-258
Exception when calling update on a new MBO instance.

When you call the update method on a new MBO instance, an ObjectNotSaved exception is thrown. For example:

MBO instance = new MBO(); 
instance.${UpdateMethod}(); //UpdateMethod is a update method defined in the model. 

Workaround: Do not call the update method for a new instance. Only call update when the instance is either created or saved.

RTC-219
Personalization key does not take effect.

When using the "username" personalization key as a default value for a sync parameter, if you do not first call a login method or synchronize method, the personalization key does not take effect.

Workaround: Call a login method (such as onlineLogin) or synchronize method before saving the synchronization parameters.

RTC-216
If an MBO has a synchronization parameter mapped to a personalization key, the device application client user cannot retrieve the personalization key value for the synchronization parameter if the personalization key datatype is a List. 

Workaround:  Set the personalization key value manually directly in the application code.

RTC-206
Root certificate required for synchronization with an HTTPS server.

The Android Object API is not able to synchronize with an HTTPS server unless the device has access to the root certificate of the certificate used to sign the certificate presented by the server. 

Workaround: Use the root certificate on the device.

CR-712912
iOS client container files deleted on application close.

The container files are no longer deleted after a package loads, but when the application closes.

CR-709353
Cannot pass cookies through Personalization Keys using replication-based synchronization (RBS).
Workaround: Use the following code:
SUPStringProperties *cookies = [smnwTests cookieName]; 
[[[SUPApplication getInstance] connectionProperties] setHttpCookies:cookies];
CR-709073
Operation replay records may not be processed correctly.

In some cases, operation replay records that you upload to the Unwired Server are not processed in the correct order on the server. For example:

[customer create];   // inserts a row into the MBO table
[customer submitPending];   // inserts a row into the operation replay table
[customer delete];   // deletes the row from the MBO table (because of server-side processing, does not remove the row from the operation replay table)
[customer submitPending];   // does nothing 

Workaround: Call cancelPending operation to cancel any pending record before submitting another operation.

CR-708707
Best practice for deleting the client database.

By default asynchronous operation replay is enabled. When an application is connected (by Application.StartConnection() or Application.RegisterApplication), it may receive background notifications, and trigger a synchronize or other database operation. If you try to delete the database, you may receive database exceptions.

Workaround: Before deleting the database, stop the application connection (Application.StopConnection()).

692374
Enabling compression incurs additional processing on the device and the server side to optimize the amount of data to be transferred over the network.

Workaround: Carefully evaluate whether the compression trade-off is appropriate in the deployment environment, and carefully size the server capacity to support it. If appropriate in a particular environment, follow the Sybase Unwired Platform Developer Guides to enable compression.

CR-690308
The query.getRow() API may not return the correct row to BlackBerry clients.

For example, in this connected result set for a BlackBerry client, rs.getRow() may not return the correct value:

Query query = new Query(); 
query.select("c.id as Id, c.fname as Fname, c.state as countState"); 
query.from("Customer", "c"); 
query.setConnectedResultSetEnabled(true); 
QueryResultSet rs = MyDatabase.executeQuery(query); 
rs.executeQuery(); 
rs.last(); 
rs.afterLast(); 
rs.previous();

Workaround: Do not use the query.getRow() API QueryResultSet.previous\next return Boolean to indicate if the current position is valid. Rely on the return value instead.

CR-675716
SQLite cannot support create operations with more than 3MB of data, which is roughly 128 columns at 64KB per column on Windows Mobile devices.

In Windows Mobile applications that use message-based synchronization, when a row reaches 3MB or more, and the client invokes the SQLite create operation during subscription, an internal exception is generated, data import fails, and the import operation fails to commit the transaction.

Workaround: None.