Bob Swart (aka Dr.Bob)
Borland JBuilder en Java BeansExpress

Het maken en gebruiken van Java Beans met Borland JBuilder

jbuilder

JBuilder
Begin September is dan eindelijk gebeurt waar vele Java ontwikkelaars op wachtten: Borland JBuilder kwam op de markt. Oorspronkelijk onder de codenaam Latté, zou JBuilder eigenlijk al veel eerder beschikbaar zijn, maar er is met opzet gewacht om JBuilder compatible te laten zijn met de Java Developers Kit (JDK) versie 1.1, die een significante verbetering is ten opzichte van de oudere JDK 1.0x.
JBuilder is in verschillende smaken verkrijgbaar: JBuilder Standaard en JBuilder Professional. Eind 1997 kwam daar de JBuilder Client/Server editie bij, en op datzelfde moment wordt een update versie 1.1 van de JBuilder Standard en Professional edities verwacht.
Wie dacht dat Delphi een echte 2-way tool was, denkt daar toch iets anders over na een tijdje met de JBuilder IDE (integrated development environment) te hebben gespeeld. In Delphi kun je de naam van een component op je form maar op één manier wijzigen: namelijk in de Object Inspector. Beginners maken de fout nog wel eens om deze naam in de (ObjectPascal) source editor van Delphi te willen wijzigen, wat niet werkt. In dat opzicht is Delphi dus niet 100% een 2-way tool. Bij JBuilder werkt het namelijk wel. Daar wordt de source code daadwerkelijk zodanig "uitgekleed" dat de omgeving in staat is om wijzigingen op te merken in de namen van instanties van java beans die we gebruiken in de source editor. Misschien klinkt het als een kleinigheid, maar het is erg indrukwekkend als je er eenmaal mee gewerkt hebt en het een beetje in je vingers hebt.
De IDE bevat ook een HTML editor, waarin onder andere documentatie en de pagina voor de applet in vertoont kunnen worden.

jbuilder ide

JBuilder Standard
JBuilder Standard is de instapversie van JBuilder, die zowel ondersteunende Wizards als de AWT Java Bean componenten bevat voor de ontwikkeling van applets, applicaties en nieuwe java beans. Java BeansExpress (daarover straks meer) is onderdeel van deze instapversie, waarmee we zelf direkt nieuwe java beans kunnen maken die we ook in andere Java ontwikkelomgevingen kunnen gebruiken. JBuilder Standard ondersteunt natuurlijk de JDK, inclusief de nieuwe versie JDK 1.1 (alhoewel het in theorie ook mogelijk is om JDK 1.02 compatible toepassingen te maken met JBuilder - zolang we maar geen JDK 1.1 specifieke zaken gebruiken), JAR files, etc.
Tot slot vinden we het boek "Teach Yourself JBuilder in 14 Days" in de doos van JBuilder Standard. Er is ook een "21 Days" editie van dit boek in de verkoop, maar dat gaat ook over zaken die niet in de Standard editie zitten (en is dus meer bedoeld voor de gebruikes van JBuilder Professional bijvoorbeeld).

JBuilder Professional
JBuilder Professional is het grotere broertje van JBuilder Standard. Op het boek "Teach Yourself JBuilder in 14 Days" na, zit alles wat in JBuilder Standard zit ook in de JBuilder Professional editie. En meer natuurlijk, zoals meer dan 100 JBCL (de Java Borland Class Library) Java Bean componenten met source code, waaronder een Grid, Tree, Navigator, Image, CheckBox, Choice, PickList, Field, List, Locator, ButtonBar, StatusBar en meer. Overigens zijn de JBCL classes automatisch data-aware door hun dataset property. Als deze property een waarde heeft, dan zijn de betreffende java beans verbonden met de dataset, anders zijn het gewone java beans. Dit is een voordeel ten opzicht van Delphi VCL componenten, waarbij we bijvoorbeeld twee exemplaren van iedere component moeten hebben: een normale TGrid en een TDBGrid bijvoorbeeld. Daarnaast bevat JBuilder Pro echter ook een verzameling "echte" data-aware componenten (Grid, Chart, Navigator, TableDataSet, TextDataFile, QueryDataSet, QueryResolver en DataSetView), en third-party java beans van onder andere de KL-Group.

Java Beans
Na de tijd waarin OOP (Object Oriented Programming) de voornaamste hype was kregen we de tijd waarin alles uit Componenten moest worden opgebouwd. OO Componenten, natuurlijk. En nu, in het tijdperk waarin alles wat het internet, het world-wide-web en Java te maken heeft een hype is, krijgen we te maken met OO Java Componenten, ook wel Java Beans genaamd. Borland JBuilder is een RAD (Rapid Application Development) ontwikkelomgeving voor Java, die zelfs nog mooier en beter werkt dan Delphi. En waar Delphi gebruik maakt van de Visual Component Library (VCL) in het component palette, daar heeft JBuilder een grote verzameling Java Beans in het component palette (JBCL met volledige java source code voor JBuilder Professional). JBuilder bevat ook een hulpmiddel - Java BeansExpress - om zelf Java Beans te maken, en dit is weer zeer nuttig aangezien Java Beans in elke Java ontwikkelomgeving te gebruiken zijn (zolang ze "100% puur java" zijn), waardoor we JBuilder's Java BeansExpress ook kunnen gebruiken als toevoeging op bijvoorbeeld Visual Cafe of Visual J++.

java beansexpress

Java BeansExpress
De Java BeansExpress Wizard van Borland JBuilder biedt ons ondersteuning bij het schrijven van onze eigen Java Beans. Dus laten we eens in praktijk kijken hoe dit proces in zijn werkt gaat. Allereerst is het belangrijk te weten dat we niet zomaar een Java Bean kunnen maken of compileren: de bean zal onderdeel van ee project moeten zijn, dus moeten we een nieuw leeg project starten (bijvoorbeeld het default project als we JBuilder starten) of een bestaand project openen. In het voorbeeld dat ik wil geven, gebruik ik een Panel als de "ondergrond" van onze nieuwe JavaBean. Met File | New komen in de Object Repository van JBuilder, waarvan we de BeansExpress tab willen zien:

beansexpress"

Zoals we in figuur REF:jb1 kunnen zien, zijn een aantal Java Beans al beschikbaar om nieuwe beans van af te leiden. De Ok Cancel Bean is buttig als we een nieuwe bean willen opbouwen uit meerdere user interface elementen, de DB Bean is uitermate geschikt voor een database java bean. De Bean Info kan gebruikt worden voor het maken van een BeanInfo class die moet corresponderen met een bestaande class in het huidige project. BeanInfo is een soort extended RTTI (run-time type information) en zorgt ervoor dat ontwikkel- en test-omgevingen informatie over de java bean kunnen bevragen. Erg nuttig. De New Event Bean kan gebruikt worden om een nieuwe event set te maken.
Maar in het kader van het voorbeeld wil ik alles van de grond af aan opbouwen, dus kiezen we hier voor de meest simpele New Bean mogelijkheid. Direkt na deze keuze maakt JBuilder een nieuwe Java Bean source skelet aan voor ons, waarin tevens een voorbeeld property en event zijn opgenomen (om te laten zien "hoe het moet", zodat we daar gebruik van kunnen maken).
Het eerste wat we nu echter moeten doen is klikken op de Design tab in de IDE, waardoor we de achtergrond Panel zien van onze nieuwe java bean. We kunnen nu op dit panel nieuwe componenten laten vallen (drag-en-drop) om zodoende een nieuwe functionele java bean samen te stellen. Als voorbeeld wil ik een nieuwe java bean maken die bestaat uit een Grid en een Navigator die samen gekoppeld zijn een een database (dat kunnen we realiseren door gebruik te maken van een gemeenschappelijke dataset property).
Zet nu zowel een navigatorControl (borland.jbcl.control.NavigatorControl) en een gridControl (borland.jbcl.control.GridControl) op het achtergrond Panel van onze Java Bean, en zorg ervoor dat de navigatorControl boven de gridControl staat (dat staat mooi - dat vind ik dan).
Gecombineerd hebben we nu de "look" van onze nieuwe Java Bean - een Navigator en een Grid control die samen op dezelfde dataset werken. We hebben echter nog niet het gewenste "gedrag" (de feel) effect dat de Java Bean als één entiteit gezien kan worden met slechts één dataset property bijvoorbeeld. Hiervoor zullen we nog wat regels Java code moeten schrijven.

Java
Om te zorgen dat zowel de navigatorControl als de gridControl dezelfde dataset property gebruiken van onze java bean, zullen we eerst een nieuwe dataSet property moeten definieëren binnen onze Java Bean, en de Get en Set methods van de navigatorControl en gridControl laten "wijzen" naar deze property. Maar hoe doen we dat?
Gelukkkig had de JBuilder Java BeansExpress al een voorbeeld property gemaakt (example) van type String. We hoeven alleen de naam van "example" maar te wijzigen in "dataSet", en het type van "string" naar "DataSet". We typen dit in de source code editor in, en zien dat de designer zelf ook de namen verwerkt en meteen juist weergeeft. De setDataSet en getDataSet methoden gaan op een vergelijkbare manier als volgt:

  // new JavaBean property
  private DataSet dataSet;

  public void setDataSet(DataSet s) {
    dataSet=s;
    navigatorControl1.setDataSet(s);
    gridControl1.setDataSet(s);
  }
  public DataSet getDataSet(){
    return dataSet;
  }
We moeten nu nog één regel Java code toevoegen aan de top van onze Java Bean source file. Dit is nodig omdat het "DataSet" type nog niet bekend is, en we dus de juiste java source file moeten importeren met de definitie ervan:
  import borland.jbcl.dataset.DataSet;
Merk op dat de dataSet property private is, zodat gebruikers van de JavaBean kunnen niet direkt bij het property veld zelf, maar moeten wel gebruik maken van de getDataSet en setDataSet methods, zodat we ook zeker weten dat de setDataSet ervoor zorgt dat de dataSet waarden van de navigatorControl en de gridControl zijn gezet.
Om te kijken of we geen tikfouten hebben gemaakt, moeten we het zaakje even compileren met de Build | Rebuild "NewBeans.java" menu optie. Als het goed is krijgen we geen fouten, en kunnen we nu naar de volgende stappen: het "deployen" en installeren van onze nieuwe Java Bean.

JavaBean Deployment
Om een Java Bean te Deploy-en kunnen we wederom gebruik maken van een Wizard, de zgn. Deployment Wizard. Kies Wizards | Deployment Wizard, en geef aan dat we de NewBean.java file willen deployen, gevolgd door een klik op de Finish knop. Merk op dat we zowel de Borland JBCL als de standard JGL classes kunnen negeren als ze al op de target machine staan (vergelijkbaar met het deployen van Delphi 3 packages bijvoorbeeld):

We kunnen zowel ZIP als JAR files maken, beide zowel normaal als gecompressed (het kost uiteraard enige tijd om ze te compressen, alhoewel uitpakken weer snel gaat).

JavaBeans Component Palette
Om de nieuwe Java Bean uiteindelijk ook nog op JBuilder's Component Palette te krijgen, hoeven we nu alleen nog maar Tools | Configure Palette | Add from Package te doen. We kunnen optioneel een nieuwe tab-naam opgeven (zoals "Dr.Bob" bijvoorbeeld) om de Java Bean in te stoppen:

En als we op de OK knop hebben gedrukt kunnen we onze nieuwe Java Bean inderdaad terugvinden op het Component Palette in de Dr.Bob tab. Klaar voor hergebruik in JBuilder. De Java Bean kan overigens ook in andere omgevingen gebruikt worden, zolang we maar 100% puur java blijven schrijven (en niet zoals Visual J++ soms afwijken van de standard).

De uiteindelijke en complete JavaBean source code voor onze NewBean ziet er dan als volgt uit:

package Beans;

import java.awt.*;
import java.awt.event.*;
import borland.jbcl.layout.*;
import borland.jbcl.control.*;
import borland.jbcl.view.*;
import borland.jbcl.util.BlackBox;
import borland.jbcl.dataset.DataSet;

public class NewBean extends BeanPanel implements BlackBox{
  BevelPanel bevelPanel1 = new BevelPanel();
  BorderLayout borderLayout1 = new BorderLayout();

  public NewBean() {
    try {
      jbInit();
    }
    catch (Exception e) {
      e.printStackTrace();
    }
  }

  public void jbInit() throws Exception{
    bevelPanel1.setLayout(borderLayout2);
    this.setLayout(borderLayout1);
    this.add(bevelPanel1, BorderLayout.CENTER);
    bevelPanel1.add(navigatorControl1, BorderLayout.NORTH);
    bevelPanel1.add(gridControl1, BorderLayout.CENTER);
  }

  // new JavaBean property
  private DataSet dataSet;

  public void setDataSet(DataSet s) {
    dataSet=s;
    navigatorControl1.setDataSet(s);
    gridControl1.setDataSet(s);
  }
  public DataSet getDataSet(){
    return dataSet;
  }

  NavigatorControl navigatorControl1 = new NavigatorControl();
  GridControl gridControl1 = new GridControl();
  BorderLayout borderLayout2 = new BorderLayout();
}

Conclusie
JBuilder is een RAD tool om Java applets, applicaties en beans te maken. De Java BeansExpress biedt ons de ondersteuning om100% pure Java Beans kunnen maken voor optimaal hergebruik, en de Data Gateway geeft ons de verbindingen met (jdbc) databases.
JBuilder komt met een eigen Java Virtual Machine, en heeft dus wel een aardige hoeveelheid geheugen nodig (het draait met 32 Mb, maar 48 of 64 is aan te raden voor serieuze toepassingen). De eigen VM kan echter ook mogelijkheden openen voor het porten van JBuilder naar andere platforms (dus niet alleen de applicaties die we met JBuilder maken, maar JBuilder zelf onder Solaris of Linux ofzo). De tijd zal het leren. Een ding is zeker: als Java "hot" is, dan is JBuider "extra hot".

Meer Informatie
Mocht iemand nog vragen, opmerkingen of suggesties hebben, dan hoor ik die het liefst via . Voor meer informatie verwijs ik daarnaast graag nog naar mijn Clinic over J2EE en SOAP.


This webpage © 1999-2006 by webmaster drs. Robert E. Swart (aka - www.drbob42.com). All Rights Reserved.