home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / inprise / JRUNTIME.Z / HintsAndTips.txt < prev    next >
Text File  |  1998-05-08  |  36KB  |  689 lines

  1.  
  2. ----------------------------------------------------------------
  3.  
  4.                         HintsAndTips.txt
  5.         
  6.         Late-breaking news, workarounds, and useful tips
  7.                    
  8. ----------------------------------------------------------------
  9.  
  10. -----------------
  11. TABLE OF CONTENTS
  12. -----------------
  13. SECTION 1. Helpful Tips and Workarounds
  14. A. General
  15. B. Install
  16. C. JDK
  17. D. Upgrading JBuilder 1.0 Applications to JBuilder 2.0
  18. E. Deploying Applets and Applications
  19. F. Using SWING Components
  20. G. Known Problems
  21. G1. Visual Design Tools and JavaBeans
  22. G2. The jbInit Method
  23. G3. Database
  24. G4. Database - Resolving
  25. G5. Wizards
  26. G6. KL Group components
  27. G7. Debugger
  28. G8. CodeInsight
  29. G9. IDE
  30. G10. JBCL
  31. G11. Samples
  32.  
  33. SECTION 2: International Issues
  34. A. Install
  35. B. Compiler
  36. C. Visual Design Tools
  37. D. Database
  38. E. Keyboard Support
  39.  
  40. -----------------------------------------
  41. SECTION 1. Helpful Tips and Workarounds
  42. -----------------------------------------
  43. A. General
  44. ----------
  45. For the latest information on JBuilder, please see the JBuilder
  46. section on Borland Online at http://www.borland.com.
  47.  
  48. The online Help is the most complete and updated version of the
  49. product documentation. To display the online Help, choose Help | Help Topics.
  50.  
  51. B. Install
  52. ----------
  53. Tools that come with the JDK do not work when installed to long filename (LFN) directories
  54. that contain spaces. Because JBuilder includes and uses tools from the Java Development
  55. Kit (JDK), it is not recommended that you install to a directory that contains spaces, such
  56. as "Program Files".
  57.  
  58. According to Windows conventions, JBuilder automatically updates 
  59. your registry to add a file association for .java and .jpr files.  
  60. This means JBuilder launches automatically when you double-click 
  61. one of these files in your Explorer.
  62.  
  63. If you wish to use your own editor to browse .java or .jpr files from 
  64. the Explorer, follow these steps:
  65. 1. Open your Explorer.
  66. 2. Choose the View | Options menu item.
  67. 3. Select the File Types tab.
  68. 4. Scroll down and select the "Java File" file type.
  69. 5. Click the Edit button.
  70. 6. Click the New button.
  71. 7. For the Action, specify Edit.
  72. 8. To specify the application to run, click the Browse button and select your favorite editor.
  73. 9. Click OK three times.
  74.  
  75. You have just added an Edit command to your right-click menu in the Explorer 
  76. for this particular file type.  Selecting this command invokes your editor.  
  77. Double-clicking still launches JBuilder.
  78.  
  79. C. JDK
  80. ------
  81. This release of Borland JBuilder is based on Version 1.1.6_Borland 
  82. of Sun's Java Development Kit. This version of the Java Development Kit
  83. contains JDK 1.1.6 functionality and AWT features, plus some 
  84. Borland-found bug fixes needed for JBuilder to run correctly at development time.
  85. The target applications should be able to run on JDK 1.1.6 or later in all cases.
  86. Also, if you restrict yourself to the features of earlier versions, your classes 
  87. should run without problems on earlier versions of the JDK, such as 1.02.
  88.  
  89. Do not replace the JDK installed with JBuilder with any other release.  You can develop 
  90. against any JDK  release using the JDK switching feature introduced in JBuilder 2.0.
  91.  
  92. D. Upgrading JBuilder 1.0 applications to JBuilder 2.0
  93. ----------------------------------------------------------------------
  94. Deprecations
  95. ------------
  96. JBuilder 1.0 applications will compile and run despite the following new 
  97. deprecation warnings:
  98.  
  99. All existing borland.sql.dataset.QueryDescriptor objects are now deprecated 
  100. because the final parameter is now an int instead of a boolean.
  101. To maintain existing behavior, use 
  102.           DataSetLoadOption.LOAD_ALL_ONCE
  103.  instead of false, use
  104.           DataSetLoadOption.LOAD_ASYNCHRONOUSLY.
  105.  
  106. dataset.setBinaryStream() is deprecated, use dataset.setInputStream instead.
  107.  
  108. Variant.BINARY_STREAM is deprecated, use Variant.INPUTSTREAM instead.
  109.  
  110. The SelectableTextItemPainter class has been deprecated. A stub class 
  111. still exists which extends Object instead of TextItemPainter. Code which 
  112. instantiates a SelectableTextItemPainter will still work (uses the 
  113. deprecated stub class), but should eventually be changed from:
  114.     ... new SelectableTextItemPainter(...)
  115. to:
  116.    ... new SelectableItemPainter(new TextItemPainter(...))
  117.  
  118. setScrollPosition(Point) is deprecated.
  119.  
  120. setAsInt() is removed from the Variant, ByteFormatter, IntegerFormatter and ShortFormatter
  121. classes.  The getAsInt() method on Variant that can be used for similar purposes.
  122.  
  123. Package changes
  124. ---------------
  125. 1. COM.objectspace.JGL is now com.objectspace.JGL in the new JGL version 3.1 library.
  126. 2. Code casting existing JBCL 1.0 components may need to be re-cast when using 
  127. JBCL 2.0 components due to the class hierarchy switch extending JComponent 
  128. instead of Panel.
  129. 3. JDBC-specific classes in borland.JBCL.dataset have been moved to a new 
  130. package, borland.sql.dataset. Separating general dataset functionality 
  131. from a specific provider/resolver implementation will simplify future 
  132. support of multi-tier designs and other provider/resolver 
  133. implementations. The classes moved include Database, QueryDataSet, 
  134. ConnectionDescriptor, QueryDescriptor, and QueryResolver. JBuilder 
  135. projects that use these classes will have to be edited and recompiled.  
  136.  
  137. These are the changes you must make:
  138. - When components in the classes listed are named with explicit package 
  139.   references, you will see an error like "Cannot access class 
  140.   borland.JBCL.dataset.ConnectionDescriptor...". To resolve this 
  141.   error, change the package name.
  142. - When the package name is implicit, the error will be something like 
  143.   "Class Database not found...". To resolve this, add an import 
  144.   statement for borland.sql.dataset.*;.
  145.  
  146. Project changes
  147. ---------------
  148. JBuilder 2.0 will read in projects created by JBuilder 1.0x and convert them to the 
  149. JBuilder 2.0 JPR format. When you open an old project file, JBuilder 2.0 will make a 
  150. backup copy of it to a file with the form: oldname-v1.0.~jp
  151.  
  152. References to libraries found in the old project that have new counterparts will be 
  153. automatically mapped to the newer version (JBCL to JBCL2, JGL1 to JGL 3.1, etc).  
  154. If there is a library found that does not have a newer counterpart in JBuilder 
  155. (e.g., some other 3rd party library), JBuilder 2 will preserve the reference if the 
  156. library still exists and build dependency files for it.
  157.  
  158. Many changes have happened between JBCL1 and JBCL2 (JBCL2 is based on the Swing (JFC) 
  159. Architecture and uses a new version of JGL which isn't backwards compatible with the 
  160. earlier versions). If you do not want to upgrade your projects to use JBCL2, it is
  161. recommended that you use JBuilder 1.0x to maintain your older projects with JBCL1.
  162.  
  163. There are two topics in the Help System which will help you understand the project changes
  164. in JBuilder 2.0: The "Setting project properties" topic in the "Creating and managing projects" chapter of Getting Started with JBuilder and the "Problems compilng imported projects" topic 
  165. in the "Compiling Java programs" chapter of Building Applications with JBuilder.
  166.  
  167. Formats in text files
  168. ---------------------
  169. Because of changes in JDK formatting, JBuilder 2.0 may not be able to read text 
  170. data files written with JBuilder 1.0x if they contain Float, Double, BigDecimal, 
  171. or date/time columns without user-defined export masks. The error message "Invalid  
  172. format for <column_name> column at row 1" points to this problem. To resolve it, 
  173. set the exportDisplayMask property of the column to match the contents of the text 
  174. file. (The export mask also governs import.) For example, the mask to read a 
  175. Timestamp column is "yyyy-MM-dd HH:mm:ss.S".
  176.  
  177. If a column that you want to define an export mask for is not persistent, you will 
  178. have to define a Column object; set its columnName, dataType, and exportDisplayMask 
  179. properties; and use dataset.setColumns() to associate it with its DataSet. This 
  180. isn't hard, but it can be tedious, and might affect the order of columns in the 
  181. dataset. An alternative is to edit the text file's schema file carefully, adding 
  182. the export mask to the end of the column's FIELD definition. One complication here 
  183. is that some characters in the mask are represented in unicode; for example, the  
  184. Timestamp mask above becomes "yyyy-MM-dd\\U0020HH:mm:ss\\U002eS".
  185.  
  186. Query Provider and Resolver
  187. ---------------------------
  188. The Provider and Resolver abstract classes have slightly different method signatures, the 
  189. methods overridden in QueryProvider, ProcedureProvider, QueryResolver, ProcedureResolver 
  190. are changed accordingly.
  191.  
  192. QueryResolver and ProcedureResolver now have a database property. If it's 
  193. not set when you try to resolve, the operation will fail with 
  194. a DataSetException "Cannot resolve data, since Database property is not 
  195. set on Resolver".
  196.  
  197. DataSets
  198. --------
  199. The borland.sql.dataset.DataSetLoadOptions class has been renamed to Load, and the constants 
  200. defined in it have also been simplified.  They are now Load.ALL, Load.ASYNCHRONOUS, 
  201. Load.AS_NEEDED, and Load.UNCACHED.
  202.  
  203. In the StorageDataSet class, the setColumns() method no longer clones 
  204. the columns passed to it. This change saves a little memory and makes 
  205. changing properties of bound columns simpler (though they can only be 
  206. changed when the data set is closed). It should have no effect on existing 
  207. applications unless they add the same columns to more than one data set.
  208.  
  209. To conform to standards, ReadWriteRow's setByte() method takes a byte 
  210. and its setShort() method takes a short. They used to take ints.
  211.  
  212. StorageDataSet's setUpdatable() and isUpdatable() methods, which were 
  213. public but documented as internal, have been removed. There is no 
  214. simple way to determine if a table can be updated.
  215.  
  216. Database TransactionIsolation constants have been deleted; use the 
  217. constants in the Connection class instead.
  218.  
  219. The DataFile interface in JBCL's dataset package has an additional 
  220. method. To pass syntax checking, classes that implement DataFile must 
  221. define the new method.
  222.  
  223. The UseTablename property for Database is false by default. In JBuilder 1.0, 
  224. it was true by default. Note that DataGateway requires this property to be 
  225. true to work with Paradox and dBASE tables.
  226.  
  227. QueryDataSet.getParameterRow() now returns a ReadWriteRow, instead of a 
  228. ParameterRow. If you have code which declares a ParameterRow and assigns 
  229. it to a call to getParameterRow(), you must change its type to be 
  230. ReadWriteRow instead of a ParameterRow.
  231.  
  232. The FieldView, ListView, GridView, and TreeView classes (JBCL components 
  233. that support edit-in-place) now throw an Exception in the endEdit(...) 
  234. methods. Any code that directly calls one of these methods now must 
  235. surround the call with a try...catch block, or it must use the new 
  236. safeEndEdit(...) methods.
  237.  
  238. JBInit method
  239. -------------
  240. The jbInit method is now declared to be "private" rather than "public". Code 
  241. which extends a class containing a jbInit method built under JBuilder 1.0 
  242. Professional or Standard will encounter a compile error if components are 
  243. added to the child class.  To fix this problem, edit the superclass to make 
  244. its jbInit method private.
  245.  
  246. JBCL changes
  247. ------------
  248. ListControl and TreeControl are a subclass of the java.awt.Container.  The methods remove(int) and removeAll() are in java.awt.Container. These methods tell the component to remove the specified subcomponent (or all of them).  In ListControl and TreeControl, JBuilder 1.0 
  249. overrode these methods (errantly) to remove the data items. JBuilder 2.0 will not override 
  250. these methods.
  251.  
  252. GridView, ListView and TreeView no longer have any inherited implementation for the following methods. See methods available in JScrollPane for workarounds:
  253. int getScrollbarDisplayPolicy()
  254. int getHScrollbarHeight()
  255. int getVScrollbarWidth()
  256. java.awt.Adjustable getVAdjustable()
  257. java.awt.Adjustable getHAdjustable()
  258.  
  259. E. Using Swing and JBCL Components
  260. -------------------------
  261. Heavyweight vs. Lightweight
  262. The Swing (JFC) Architecture introduces the concept of heavyweight and lightweight components.  
  263. A heavyweight component uses a native peer to paint, but a lightweight component handles 
  264. painting itself and has no external dependency. This difference leads to some interesting 
  265. side effects at runtime with regard to painting. JavaSoft has also changed how events are 
  266. handled (e.g. mouse events) with lightweight components and there are some differences in 
  267. Z-ordering as well.
  268.  
  269. A good reference on this topic is: "Mixing heavy and light components" by Amy Fowler on the 
  270. JavaSoft web page. See http://www.javasoft.com/products/jfc/swingdoc-current/mixing.html.
  271.  
  272. As a general rule of thumb it is a good idea to avoid mixing heavyweight and lightweight 
  273. components in the UI.
  274.  
  275. Because JBCL2 uses the architecture from JFC in many places, you may encounter some of the 
  276. heavyweight vs. lightweight issues. Where ever possible, lightweight components were used but 
  277. there are some cases where there was no appropriate JFC component to use (or there was missing 
  278. functionality or support in the current JFC which could limit our customers). In those cases 
  279. the components are still heavyweight. The following is a list of JBCL2 controls split between 
  280. heavyweight and lightweight.
  281.  
  282. Heavyweight:
  283.      CheckboxControl
  284.      CheckboxPanel
  285.      ChoiceControl
  286.      LabelControl
  287.      LocatorControl
  288.      TextAreaControl
  289.      TextFieldControl
  290.      PopupPickListItemEditor
  291.  
  292. Lightweight:
  293.      ButtonControl
  294.      FieldControl
  295.      TextControl
  296.      ListControl
  297.      GridControl
  298.      ImageControl
  299.      TransparentImageControl
  300.      ButtonBar
  301.      ShapeControl
  302.      StatusBar
  303.      TreeControl
  304.      BevelPanel
  305.      GroupBox
  306.      SplitPanel
  307.      TabsetView
  308.      TabsetPanel
  309.  
  310. If you setXXX(), (e.g., setBackground()or setText()), in a Swing or a Swing based component and don't see the change at runtime, you may have to add a repaint() call. In many cases, Swing 
  311. does not call repaint() when a property is set. This is usually a problem for properties done via user-entered code (e.g., in an event) and should not show up in the UI Designer. In your code, add a call to repaint(). If you are setting multiple properties, set them all and do one repaint() instead of a repaint() for each.
  312.  
  313. If you are using Swing (JFC) in an applet, your applet must extend from JApplet.
  314.  
  315. Certain Swing components (such as JButton) expose 2 properties to represent their textual 
  316. label: 'text' and 'label'.  JBuilder automatically uses the 'text' property when such a component is added to the UI Designer. However, the 'label' property is also available in the Inspector, and using this 'label' property will generate a compiler warning, since the setLabel() method has been deprecated. Until Swing components hide their deprecated properties in their BeanInfo, it is a good idea to avoid using the 'label' property in these particular components.
  317.  
  318. F. Deploying Applets and Applications
  319. -------------------------------------
  320. JBuilder 2.0 adds the ability to specify a particular JDK to use with a project. Choosing 
  321. a particular JDK will also switch the version of AppletViewer used by that project to the
  322. one that comes with the selected JDK. Some JDK 1.02 applets won't run correctly from within 
  323. the IDE due to a problem with the version of AppletViewer that comes with JDK 1.02.  
  324. That version of AppletViewer assumes that it is being launched from the same directory as 
  325. the HTML file containing the Applet. JBuilder (and subsequent versions of AppletViewer) 
  326. uses the CLASSPATH to allow for Applet launching to be more flexible.
  327.  
  328. If in deploying your application or applet, images used by JBCL are not added to the archive,
  329. you may want to keep those resources in a package of their own. The Deployment Wizard only deploys "solid" instances of classes found in the code and will miss resources like images and other items that are loaded dynamically (e.g., via Class.forName() ). The best solution is to keep those resources in a package of their own. For example, the images used by JBCL are in the package  borland.jbcl.control.image. Add that package to your project via File | Open/Create 
  330. and it will appear in the list of files in the Deployment Wizard. Selecting a package in the list of files to deploy will place all files in that package into the archive.
  331.  
  332. If images used by your classes don't get added to the archive, place your images in their own package as described in the above tip or add them to the project. If you add them to your project, we suggest adding a project folder to store the images and minimize clutter in the Navigation Pane.
  333.  
  334. If your images don't show up at runtime, it may be because the images are not in the proper location relative to the class file that uses them. This often happens when you are storing 
  335. the images with the source code. Place the images in your project and when you build the 
  336. project JBuilder will copy them to the appropriate location on your OutPath so the images 
  337. will be available at runtime.
  338.  
  339. Deploying Look and Feel with the Deployment Wizard
  340. Many Look and Feel classes are loaded dynamically which means the Deployment Wizard cannot find them as it builds the archive.  If at runtime you find there are missing Look and Feel
  341. classes, possible solutions are:
  342.  
  343. 1. Add the appropriate Look and Feel archive from the \redist directory to your deployment set.  If the problem is only limited to Look and Feel classes, add the appropriate Look and Feel package to your project. Once the package is in the project the Deployment Wizard will add all classes from that package to your archive.
  344.  
  345. 2. Locate the missing classes in swingall.jar and add them to your archive using WinZip or some other archive management tool.
  346.  
  347. 3. Deploy swingall.jar with your applet or application.
  348.  
  349. 4. (Applets Only) Use the Activator Plug-in  from Javasoft.  This Browser PlugIn includes swingall.jar and provides JDK 1.1 functionality regardless of which browser you are using.
  350.  
  351. G. Known Problems
  352. -----------------
  353. G1. Visual Design Tools and JavaBeans
  354. -------------------------------------
  355. If you ever see one of your components as a red box showing its class name at the top, you are in a situation where JBuilder has not been able to create an instance of that component for the designer. This is referred to as "The Red Bean". Some reasons you might see a Red Bean are:
  356.    1) That class has no default (parameterless) constructor
  357.    2) That class threw exceptions on every constructor JBuilder tried
  358.    3) That class is the 'this' object and it extends an abstract class
  359.  
  360. Items (1) and (2) can be fixed only by supplying a proper default constructor (or subclassing that class in order to provide a default constructor). Item (3) is more complex. Whenever JBuilder needs to instantiate an object to be the "this" object, it encounters a paradox. How can it instantiate the object you are designing? To circumvent this problem, JBuilder will always attempt to instantiate the superclass of the "this" object. In the event the superclass is abstract, it cannot be instantiated. Since it is clear developers cannot use the Red Bean in such cases, JBuilder has an escape mechanism.
  361.  
  362. In the file lib\jbuilder.properties, you will find a line that looks like:
  363.  
  364. jbuilder.concreteProxy.com.sun.java.swing.JComponent=borland.jbcl.control.JComponentProxy
  365.  
  366. This line says that whenever you are forced to instantiate com.sun.java.swing.JComponent (which is abstract), you will find an acceptable concrete proxy class for it in borland.jbcl.control.JComponentProxy. 
  367.  
  368. You may add your own proxy objects using this pattern.  The proxy class does not need to do anything other than:
  369.    1) Extend the abstract class in question
  370.    2) Be concrete (i.e. not be declared abstract itself)
  371.  
  372. You may also want to examine the source for forland.jbcl.control.JComponentProxy to see a working example.
  373.  
  374. If you delete a subcomponent in a DataModule (such as selecting it in the Component Tree
  375. and pressing DEL), the extra "getter" method which was generated to expose this subcomponent
  376. will not be deleted.  You will have to delete this method manually.  (12876)
  377.  
  378. Selecting "Activate Designer" from the "Menu" folder in the Structure pane doesn't always display your menu. The workaround is to activate the designer from a menu node. (13352)
  379.  
  380. Sometimes undo in the designer will undo more than the last operation. If this happens, 
  381. use re-do to restore the extra undone operations.  (13349)
  382.  
  383. There is a known problem that if you are using a JTabbedPane in designing one component, go to design a second component, and then go back to the first, the tabs of the TabbedPane will display multiple times. The workaround is to dirty the source code and go back into the UI Designer, forcing a re-paint.
  384.  
  385. JdbNavToolBar may be shown in the wrong position in design mode, however, it will be in the
  386. correct position when the application is run.  (11464)
  387.  
  388. JdbToggleButton, JdbCheckBox, and JdbRadioButton don't display "true" values when on the first row after initially opening the dataSet. Navigating in the dataSet fixes this.  (13072)
  389.  
  390. G2. The jbInit Method
  391. ---------------------
  392. The contents of the jbInit method are arranged as follows:
  393.  
  394. 1. Subcomponent initial property settings are in order by subcomponent and
  395. then by property. (Properties are ordered as defined by the BeanInfo class, 
  396. or as the getter methods are found through reflection). Event listener
  397. addXxxListener calls are also placed here, ordered as if they were
  398. property settings.
  399.  
  400. 2. Additional method calls for wiring subcomponent relationships are created 
  401. by the designers. These include container.add(component, constraints)
  402. calls as well as menu and data module assembly. Generally these are ordered by
  403. subcomponent, and then child (Z) order.
  404.  
  405. Any hand rearranging of the above methods will likely be undone the next
  406. time a designer manipulates something nearby. The changes won't hurt
  407. anything, but you can't rely on them remaining.
  408.  
  409. Additional hand-coded method calls or other statements can be placed
  410. anywhere within the jbInit method, but it is recommended that they be 
  411. placed at the end. They may get moved by the designers, but this is much 
  412. less likely to happen if they are at the bottom.
  413.  
  414. G3. Database
  415. ------------
  416. It is advisable to compile a DataModule whenever you create one or modify one, since 
  417. JBuilder generally needs its class file to instantiate the DataModule properly.  (12980)
  418.  
  419. Be sure to explicitly call the closeConnection() method of on your Database
  420. objects when you are through with them or you will leave orphaned JDBC
  421. connections on your server.
  422.  
  423. If you get the error message "No suitable driver" when testing the database 
  424. connection in the Inspector, and your URL is specified correctly, it could mean 
  425. that the IDEClassPath doesn't contain any driver class files. The IDEClassPath 
  426. is used by the UI Designer to locate class files. Modify IDEClassPath in 
  427. jbuilder.ini to include the location of the driver classes.
  428.  
  429. Additional connectivity troubleshooting information is available in online 
  430. help. Look under Troubleshooting JDBC Connections in the Database Application 
  431. Developer's Guide.
  432.  
  433. Providing problem: Query is read-only, even though the table on the server has a 
  434. unique row id. When you try to modify the data set, you get a message that 
  435. reports: "Cannot be saved. None of its updatable columns have a table name." 
  436. This may mean that the driver does not support one or more of the MetaData functions 
  437. used by JBCL. The solution is to provide some metadata manually.
  438.  
  439. For more information on MetaData, please refer to the metaDataUpdate Property Editor
  440. entry in the Master Index of the Help System and Working with Columns in the Database Application Developer's Guide.
  441.  
  442. To make a query updatable:
  443.   - If UpdateMode is ALL_COLUMNS (default), set tableName on queryDataSet.
  444.   - If the application has a QueryResolver, and UpdateMode is KEY_COLUMNS, set rowId 
  445.     on the columns used as an index to the table.
  446.   - If you have a BLOB column, set the searchable property to false. This means 
  447.     never use this column in a WHERE clause of an update query. Most databases 
  448.     don't support this for BLOBs.
  449.  
  450. G4. Database - Resolving
  451. -----------------------
  452. While troubleshooting resolution problems, keep in mind that it is not 
  453. necessarily columns that you have edited that are causing an error. For 
  454. instance, the problem might stem from columns which are included in the 
  455. WHERE clause of the update query.
  456.  
  457. If you get a message to the effect that no rows were affected by the update 
  458. query, it could just mean that someone modified the original row, causing 
  459. the WHERE clause to fail. Use QueryDataSet.refetchRow() to get the original 
  460. row from the server.  If it is not the case that the original row has been 
  461. modified, the following are some other possible causes.
  462.  
  463. Columns of certain data types and fields that are calculated on the server 
  464. could cause the comparison in the WHERE clause of the update query to fail. 
  465. You could run into this problem, if these conditions are true:
  466. - Column is of an imprecise data type (such as float or doubles).
  467. - Column is a fixed length string (some drivers don't pad strings with blanks, 
  468.   which leads to failures in comparison).
  469. - Column is calculated on the server, and successive saveChanges calls (without 
  470.   an intervening refresh) are made. 
  471.  
  472. There are two possible solutions:
  473. - In the MetaDataUpdate property editor, uncheck "Searchable", and set the 
  474.   searchable property of the column in question to false, so that the column 
  475.   is not included in the WHERE clause of the update query.
  476. - Add a QueryResolver to the app, and set UpdateMode on the QueryResolver to  
  477.   KEY_COLUMNS. This is done by instantiating a QueryResolver component, and 
  478.   setting the resolver property of the QueryDataSet to that QueryResolver.
  479.  
  480. Problem: You get error messages from the server that are not due to constraint 
  481. or integrity violations -- the text of the message will vary from server to 
  482. server.
  483.  
  484. Possible Explanation 1: If you have a manually added or calculated field in 
  485. your app, this column is being included in the update query (in the SET and/or 
  486. WHERE clauses) and this is causing the resolution to fail. Workaround: Set 
  487. the resolvable property of the column to false. This prevents JBuilder from 
  488. trying to resolve changes to this column back to the server. Note: To prevent 
  489. unwanted edits to columns, set the editable property to false for that column.
  490.  
  491. Possible Explanation 2: It may be that your driver does not support prefixing 
  492. field names with table names (for example, testtable.column1). The workaround 
  493. is to set useTableName in the database to false.
  494.  
  495. Possible Explanation 3: MetaDataUpdate has been set to NONE, but searchable 
  496. has not been set to false for BLOB columns. In this case the workaround is to
  497. set the searchable property to false. See the "Providing problem" in text above 
  498. for more details.
  499.  
  500. G5. Wizards
  501. ----------
  502. Be sure that you have built all your .class files before running 
  503. the Deployment Wizard. If you see the "Can't find .class files" 
  504. message from the Wizard, you have probably forgotten to compile 
  505. your project first.
  506.  
  507. Additionally, be sure to add any .properties, .txt, and .schema files you
  508. wish to deploy to your project so that they can be seen by the Deployment
  509. Wizard. Note that you may first need to use Tools|Treat As Text in order to
  510. add those files to your project.
  511.  
  512. G6. KL Group Components
  513. ----------------------
  514. The customizer for KL Groups chart does not fire PropertyChangeEvents.  This means that when the customizer is used in the designer there is nothing that JBuilder can listen for to allow the changes made in the Customizer to persist.  (11956)
  515.  
  516. G7. Debugger
  517. ------------
  518. Setting breakpoints in inner classes may give the warning "Some breakpoints found on lines 
  519. which do not contain debug information."  The work around is to set the breakpoint before
  520. the inner class.  (10811)
  521.  
  522. If you have two classes with the same names but in different packages, a breakpoint may not
  523. stop in the class you desired. The workaround is to reference the classes by their fully qualified names.  (12581)
  524.  
  525. The debugger may treat some handled exceptions as if they were unhandled and log these in the execution log.  A workaround is to tell the debugger to stop whenever it encounters an 
  526. unhandled exception.  (13325)  
  527.  
  528. G8. CodeInsight
  529. ---------------
  530. For performance reasons, users with a slower machine (< 133mhz machine)may want to turn off 
  531. all of the CodeInsight checkboxes on the CodeInsight tab of the IDE options dialog. You can still use CodeInsight, but it will be on demand (by hitting hotkeys Ctrl+Space, Ctrl+Shift+Space, or Ctrl+Alt+Space).  
  532.  
  533. The performance upon hitting these keys will be less than for someone using "Background Research". The benefit is that you won't have slower performance in other places (if any).  
  534.  
  535. Using "Auto-Code Completion" and "Auto-Parameter List" without "Background research" is not recommended, so you should turn these off.  
  536.  
  537. "Syntax Highlight declaration errors" won't work without "Background Research".
  538.  
  539. G9. IDE
  540. -------
  541. Paths that contain spaces and # symbols cannot be used in Java programs.  (12993)
  542.  
  543. "Browse symbol at cursor" brings up empty navigator, structure, and content panes if the object being browsed has a fully qualified package path. The workaround is to convert the explicit package path to an import statement in the file. Then remove the explicit package name 
  544. before the class name.  (13341)
  545.  
  546. G10. JBCL
  547. ---------
  548. Field Ditto in a lookup column throws an exception for columns of numeric type which are 
  549. displayed as strings. Ditto tries to copy the String, rather than the actual column value, which causes the problem. One work around is to use Row Ditto.  (13346)
  550.  
  551. JBCL ChoiceControl leaves the current item displayed in the control if a subsequent query is executed and choiceControl1.setItems() is called. The workaround is to set the control's 
  552. dataSet to null prior to population.  (13177)
  553.  
  554. G11. Samples
  555. ------------
  556. The sample file, samples\borland\samples\apps\chess\client\Chessviewer.java, will not 
  557. due to a spurious import statement. To fix the problem, comment out the line:
  558. import welcome.Application1;
  559.  
  560. -------------------------------
  561. SECTION 2. International Issues
  562. -------------------------------
  563. A. Install
  564. ----------
  565. Due to JDK limitations, installation into a directory path 
  566. containing non-ASCII characters is not supported.  (3235)
  567.  
  568. B. Compiler
  569. -----------
  570. 1. Native encoded source files:
  571.  
  572. By default the compiler uses the encoding appropriate for your 
  573. environment. The JDK convention is to assume 8859_1 for most Windows 
  574. environments (Cp1252).  If you use Cp1252 characters within the 
  575. range of x7F through x9F, then you should explicitly set the
  576. encoding to be Cp1252.  (5882)
  577.  
  578. To select the encoding used by the compiler, click on the IDE 
  579. Options item in the Tools menu, then select the encoding from 
  580. the list provided. For the command line compiler, use the -encoding option.  
  581.  
  582. 2. Local characters in Identifier names:
  583.  
  584. You can use local characters, including multi-byte characters, 
  585. in identifier names. However, due to a JDK limitation, 
  586. you can only use ASCII characters in class and package 
  587. names. Therefore it is suggested that only ASCII 
  588. characters be used as component names. This is because any 
  589. event handler classes will use the component name.  (6362)
  590.  
  591. 3.  Non-English versions of JBuilder
  592.  
  593. Compiler messages from the command-line compiler are 
  594. displayed using the wrong character set.  As a workaround, 
  595. and to display all compiler messages in English
  596. (including the IDE compiler), rename or move the file, 
  597. <JBuilder_directory>\lib\bcj.properties, and relaunch JBuilder. (13410)
  598.  
  599. 4.  Compiler encoding under Asian Windows environments
  600.  
  601.     Under some Asian Windows environments, the compiler in JBuilder 
  602.     uses a different default encoding from that used by 
  603.     the JAVAC compiler in JDK 1.1.6.  (13233)
  604.  
  605.     Under those environments, some characters in the JDK1.1.6 default
  606.     encoding are not in the JBuilder compiler's default encoding.
  607.     If the default encoding is used with the JBuilder compiler,
  608.     these characters will not be correctly compiled. To correct this
  609.     problem, you can specify the compiler encoding explicitly.
  610.     
  611.     For compilation from the IDE, select "File | Project Properties...",
  612.     select the Compiler tab, and finally, change the encoding from
  613.     "Default" to the desired encoding. For the command line compiler, 
  614.     use the -encoding switch.
  615.  
  616.     The differences are as follow:
  617.  
  618.       +---------------------+-------------------+-------------------+
  619.       | Environment         | JBuilder compiler | JDK1.1.6 compiler |
  620.       +---------------------+-------------------+-------------------+
  621.       | Korean              | KSC5601           | EUC_KR*           |
  622.       | Thai                | 8859_1            | MS874             |
  623.       | Simplified Chinese  | GB2312            | GBK               |
  624.       | Traditional Chinese | Big5              | MS950*            |
  625.       +---------------------+-------------------+-------------------+
  626.       
  627.     The encodings marked with an asterisk (*) are not available in the 
  628.     JBuilder compiler. If characters specific to these encodings
  629.     are used, they have to be specified using Unicode escapes.  Or,
  630.     the source code can be created as usual, and then converted to
  631.     Unicode escapes using the native2ascii utility included in the 
  632.     JDK before compilation.  (13440)
  633.     
  634.     This difference in default encodings applies only to the compiler.
  635.     The Java runtime environment in JBuilder behaves identically to JDK1.1.6.
  636.  
  637.  
  638. C. Visual Design Tools
  639. ----------------------
  640. As for naming components with international characters, see
  641. the note regarding event handlers under the section above, 
  642. "2. Local characters in Identifier names:".
  643.  
  644. When using the IME to enter Chinese characters into the Inspector, 
  645. you should use the keyboard. Using the mouse can fail to properly 
  646. enter the character.  (5465)
  647.  
  648. There is a JDK limitation when creating localized applications whose 
  649. menu commands have shortcuts such as Ctrl+S. For example, under a German locale,
  650. the shortcut should appear in the menu as Strg+S, but will always be listed 
  651. as Ctrl+S.  (6955)
  652.  
  653. The KL Group components are backward-compatible with JDK 1.02. 
  654. Therefore there are international limitations with these components.
  655.  
  656. D. Database
  657. -----------
  658. 1. Schema file for TextDataFile
  659. When multi-byte field names are desired, you will need to use Unicode for
  660. the column names. You can first create your text file in the native 
  661. encoding format and then use the command-line command Native2Ascii, a tool 
  662. included with the JDK, to convert the file to Unicode.This command is 
  663. explained in the JDK documentation.
  664.  
  665. 2. Text file for TextDataFile
  666. When importing a text file with native encoding you must specify the encoding 
  667. in the schema file. For example, if you are trying to import a file containing
  668. SJIS characters you must change your encoding in the schema file from 8859_1 
  669. to SJIS.
  670.  
  671. 3. Japanese Currency Values
  672. Due to a JDK limitation, there are problems with entering values
  673. into fields of type currency in a Japanese locale. The workaround 
  674. is to explicitly specify an edit mask for the field.  (JDK)(11795)
  675.  
  676. E. Keyboard Issues
  677. ------------------
  678. Under Windows95, using dead keys with AWT or JBCL controls 
  679. may not work and should not be depended upon.  (JDK)(13398) 
  680.  
  681. Due to a JDK limitation, Swing components do not support character
  682. entry using AltGr.  (JDK)(11375)
  683.  
  684. Also, Alt+numpad cannot be used to enter accented characters into 
  685. editable components.  (JDK)(11867)
  686.  
  687. /----------------------- END OF FILE --------------------------/
  688.  
  689.