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