Sybase SQL Anywhere Studio 9.0.0 Read Me First Copyright (c) 1989-2003 Sybase, Inc. Portions Copyright (c) 2002-2003, iAnywhere Solutions, Inc. All rights reserved. All unpublished rights reserved. This product includes code licensed from RSA Security, Inc. Some portions licensed from IBM are available at: http://oss.software.ibm.com/icu4j/ Contents ======== 1. LIST OF NEW FEATURES AND BEHAVIOR CHANGES 2. KNOWN ISSUES ====================================================== 1. LIST OF NEW FEATURES AND BEHAVIOR CHANGES ====================================================== The list of new features and behavior changes is in the online documentation. Please read it before using this software with existing applications and databases. For a list of new features and behavior changes, see the chapter "What's New in Version 9.0.0" in the book "What's New in SQL Anywhere Studio". To access this book from the online help, choose Start-->Programs--> SQL Anywhere 9-->Online books (English) and click the 'Contents' tab. To access this book in PDF format, locate the 'docs' directory in your installation path for SQL Anywhere 9. The default path is c:\Program Files\Sybase\SQL Anywhere 9\docs ====================================================== 2. KNOWN ISSUES ====================================================== NOTE: 9.0.0 beta databases are NOT SUPPORTED by 9.0.0 GA release software. Unload/reload or upgrade of a 9.0.0 beta database to a 9.0.0 GA release database is not supported. You can, however, unload/reload or upgrade a database that is version 8.02 (or earlier) to a 9.0.0 GA database. LICENSING CHANGES - The usage for the Adaptive Server Anywhere Server Licensing Utility Version 9.0.0.1108 has changed to: Usage: dblic [options] exename "user name" "company name" Options (use specified case, as shown): -l license type: perseat or processor -o log output messages to file -p target operating system specification WIN32,WIN64,NetWare,UNIX -q quiet: do not print messages -u number of users or processors for license - The description of the -gt server option has changed. It should read as follows: "With per-seat licensing, the network database server uses all CPUs available on the machine (default). With CPU-based licensing, the network database server uses only the number of processors you are licensed for. In addition, the personal database server and runtime database server are both limited to a single processor." INDEX CONSULTANT - When displaying access plans from within the Index Consultant, the 'With Virtual Indexes' and 'Without Virtual Indexes' plans may appear identical if the user examining them does not own the tables on which the recommended indexes should be created. This will be corrected in a forthcoming EBF. - Users may have to edit the generated CREATE INDEX script to fully qualify table names that they do not own. This will be corrected in a forthcoming EBF. - Customers who have an existing 8.x database can now use the Index Consultant after an upgrade of an older database. (Previously, an unload/reload was required.) NETWARE -A problem in NetWare prevents the server from starting the SPX link on multiple processor machines. The machine crashes when the database server is started. Novell acknowledges that this is a problem for which there is currently no workaround. INSTALLING on WIN64 - The 64-bit installer does not install the online documentation. To install the online documentation, run \Documentation\setup.exe from the root of the CD. INSTALLING WIN32 on WIN64 -Installing the 32 bit version of Adaptive Server Anywhere Studio on 64 bit versions of Windows (both WindowsXP and Windows Server 2003) may cause graphical programs (dbisql, dbconsole, scjview, ...) to crash or to work incorrectly when the user tries to display help. Adding the -nojit option to the command (dbisql -nojit) corrects the problem. INSTALLING on WIN98 - The ODBC Driver Manager (required by SQL Anywhere Studio) is not available on some Win98 operating systems. For SQL Anywhere Studio version 9.0.0 to install the ODBC Driver Manager properly, please ensure that you have either Internet Explorer version 4.01 or later, or MDAC 2.5 installed prior to beginning your SQL Anywhere Studio install. ULTRALITE - Windows 95, Windows 98, and Windows Me are not supported platforms for development with the UltraLite ActiveX, UltraLite for MobileVB, UltraLite.Net, Native UltraLite for Java and the new UltraLite C++ API. - If either the UltraLite server or a client application connected to the server hangs or terminates prematurely, the other side may be put into an unrecoverable state. The device will need to be reset and the application and server restarted. This problem affects the UltraLite server for this release. This issue will be fixed for the 9.0.1 release. - UltraLite.NET development is supported on desktop platforms supported by the .NET framework including the Windows Server 2003 family, Windows XP, and Windows 2000 with the latest service packs. UltraLite.NET development is not supported on Windows NT. - Refer to each UltraLite Component's User's Guide for supported deployment platforms. - The UltraLite ActiveX component can be used from pocket IE or IE; however, some methods that manipulate BLOB or CLOB data in chunks cannot be used because of JScript language restrictions. Attempting to use these methods will result in a runtime error: ULColumn: GetByteChunk, SetByteChunk, AppendByteChunk, GetStringChunk ULResult: GetByteChunk, GetStringChunk ULPreparedStatement: SetByteChunkParameter, AppendByteChunkParameter, AppendStringChunkParameter The difficulty is caused by JScript's inability to declare and pass contiguous arrays. - UltraLite.NET's SyncProgressDialog may not return control to the caller from calls to ShowDialog(). This issue will be fixed in release 9.0.1. SOAP - Currently some SOAP stacks (Delphi's SOAP stack in particular, but others may be affected) have trouble interpreting our SOAP responses. There is currently no workaround for this. DEBUGGING - Debugging Java methods in the database and canceling yields unpredictable results. Do not attempt to cancel any Java method which is currently being debugged. MOBILINK - A new version of MobiLink-specific TCP/IP liveness checking is included with this release, and is enabled by default. As well as enabling liveness checking for TCP/IP synchronizations, this feature changes the way a busy MobiLink server responds to a synchronization request: instead of queuing all requests, it refuses any connection requests that cannot be immediately connected to a MobiLink worker thread or queued by the network layer backlog. The intent of the feature is to prevent clients and MobiLink server worker threads from being idle waiting on a disconnected socket. The behavior from previous versions can be restored by specifying liveness_timeout=0 for the TCP/IP stream of both the MobiLink server and clients. - New warnings and errors alert you that you are missing scripts that would transfer data. In particular: - For a bidirectional or upload-only synchronization, you receive an error if data is uploaded and there is no corresponding upload script. - For a download-only synchronization, you receive an error unless all tables in the synchronization have a download script defined. - For a bidirectional synchronization, you receive a warning for every table in the synchronization that is missing a download script. The above errors can be changed to warnings via the new dbmlsrv9 -fr option (letting the synchronization continue, but not suppressing the warning). The warnings can be disabled using the dbmlsrv9 -zwd option. See the MobiLink documentation for more information about these options. - The MobiLink Monitor binary file format (which uses the MLM extension) changed from version 8 to 9. Files are not interchangeable between these versions of the MobiLink Monitor. You can only open an MLM file with the same version of the MobiLink Monitor that created it, otherwise an invalid protocol stream error or incompatible version error occurs. MOBILINK ODBC DRIVERS - There is no recommended DB2 ODBC driver for the 32-bit MobiLink synchronization server running on 64-bit Windows Server 2003. ACTIVESYNC SYNCHRONIZATION SUPPORT - The supported versions of ActiveSync are 3.5 and 3.6. JAVA IN THE DATABASE - Previously, wrappers were not required in many cases. As a result of changes in Java in the database, Java in the database support now requires all Java methods to both be declared as public static and invoked via a SQL stored procedure which is functionally a wrapper created by the CREATE PROCEDURE statement as follows: CREATE PROCEDURE insertfix() EXTERNAL NAME ‘JDBCExample.InsertFixed ()V’ LANGUAGE JAVA; As a side effect of Java objects in the database no longer being supported, the syntaxes of calling public static methods in the following manner: ClassA>>methodB and/or ClassA.methodB are also no longer supported. -The Java runtime classes (rt.jar or classes.zip) in the database are built with 1.1 target as installed by JDKs. Any target other than 1.1 will result in ClassFormatErrors. When compiling classes for installation into the database with JDK version, the Java compiler option “target” should be set to 1.1. For example: javac -target 1.1 myclass.java When using JDK 1.3, and earlier, the default target for the compiler is already 1.1 - The JavaInvoice sample in the samples\asa\javainvoice directory uses code which is no longer supported. See the Invoice sample in the samples\asa\Java sample directory within the Adaptive Server Anywhere installation folder for the corrected version of the sample. - The JDBCExamples sample uses java data types which are no longer supported. - In the Programmers Reference Guide, the reference JDBCExamples>>InsertFixed() is incorrect. The correct method to invoke the Java code is as follows: CREATE PROCEDURE insertfix() EXTERNAL NAME ‘JDBCExample.InsertFixed ()V’ LANGUAGE JAVA; CALL insertfix(); - As a result of changes to Java in the Database, the instructions in the Tutorial: A Java in the Database Exercise are incorrect. It uses Java objects which are no longer supported. The following information should replace the current tutorial. Requirements ---------------- The tutorial assumes that you have installed Java in the database software. It also assumes that you have a Java Development Kit (JDK) installed, including the Java compiler (javac). If you do not have Java installed into the database, the following SQL can be used: ALTER DATABASE UPGRADE JAVA ON; You must restart the database server for this operation to take effect. If you do not have a database, you can initialize a database with Java enabled, using the Sybase Central Wizard or dbinit for example: dbinit –ja mydb.db Resources ------------ Source code and batch files for this sample are provided in the directory Samples\ASA\Java under your SQL Anywhere directory. Create and compile the sample Java class ------------------------------------------------- Instead of compiling Invoice.java in the Samples\ASA\JavaInvoice\ folder use the Invoice.java within Samples\ASA\Java folder using: When in the command prompt, positioned in the folder samples\ASA\Java within the SQL Anywhere install folder issue the following command. Compile the class as follows: javac Invoice.java Install the sample Java class ------------------------------------------------- Java classes must be installed into a database before they can be used. You can install classes from Sybase Central or Interactive SQL. This section provides instructions for both. Choose whichever you prefer. TO INSTALL THE CLASS TO THE SAMPLE DATABASE (Sybase Central) 1. Start Sybase Central and connect to the sample database. 2. Open the Java Objects folder and double-click Add Java Class. The Java Class Creation wizard appears. 3. Use the Browse button to locate Invoice.class in the Samples\ASA\Java subdirectory of your SQL Anywhere installation directory. 4. Click Finish to exit the wizard. TO INSTALL THE CLASS TO THE SAMPLE DATABASE (Interactive SQL) 1. Start Interactive SQL and connect to the sample database. 2. In the SQL Statements pane of Interactive SQL, type the following command: INSTALL JAVA NEW FROM FILE 'path\\samples\\ASA\\Java\\Invoice.class' where path is your SQL Anywhere directory. The class is now installed into the sample database. Notes: At this point no Java in the database operations have taken place. The class has been installed into the database and is ready for use. Changes made to the class file from now on are not automatically reflected in the copy of the class in the database. You must re-install the classes if you want the changes reflected. Creating an external wrapper to map SQL and Java --------------------------------------- To create SQL procedures/functions to map to the Java methods available in the class. 1. Pass arguments to a Java method, you can create the following SQL wrapper: CREATE PROCEDURE init(IN arg1 CHAR(10),IN arg2 DOUBLE, IN arg3 CHAR(10), IN arg4 DOUBLE) EXTERNAL NAME 'Invoice.init (Ljava/lang/String;DLjava/lang/String;D)V' LANGUAGE JAVA; 2. Retrieve return codes from a Java method, you can create the following SQL wrappers: CREATE FUNCTION taxationrate() RETURNS DOUBLE EXTERNAL NAME 'Invoice.rateOfTaxation ()D' LANGUAGE JAVA; CREATE FUNCTION totalSum() RETURNS DOUBLE EXTERNAL NAME 'Invoice.totalSum ()D' LANGUAGE JAVA; CREATE FUNCTION linedesc1() RETURNS CHAR(10) EXTERNAL NAME 'Invoice.getLineItem1Description ()Ljava/lang/String;' LANGUAGE JAVA; 3. To retrieve return codes from a Java attribute, you can create the following SQL wrapper: CREATE FUNCTION linecost2() RETURNS DOUBLE EXTERNAL NAME 'Invoice.getLineItem2Cost ()D' LANGUAGE JAVA; Note that there is a space between the signature and the name of the method/attribute. Also note the case of the signature of Java method is case sensitive. See CREATE PROCEDURE for information on signatures. Using the Java functionality ---------------------------- We can now invoke the methods and access attributes from SQL with stored procedures and functions. CALL init('prod1',10.00,'prod2',25.00); SELECT taxationrate(),totalSum(),linedesc1(),linecost2(); The query returns four columns with values as follows: taxationrate(*) totalSum(*) linedesc1(*) linecost2(*) .15 40.25 prod1 25