Está en la página 1de 299

Advanced Java Programming

Version 1999
First Impression August 1999
Second Impression July 2000

The Team
Production / Series Supervision
Jambu Krishnamurthy
Vice President Product Development
The Head
Sridhar Subramaniam
Head Training Solutions
Technical Writers
Thirumurugan .R
Bakkia Lakshmi .H
Uma .S
Review
Sridhar Subramaniam
Production/Design
Vijay. V
Editor
Nurjehan Dhanani

Copyright 1999, Comp-U-Learn Inc.


All Rights Reserved

No Part of this Book may be reproduced in any form by any means, stored in a retrieval system, or transmitted by any mode,
electronic, mechanical, photocopying, recording, or otherwise, without written permission from the publisher. Exceptions are
made to the program listings, which can be typed, stored in a Computer System and executed. No patent liability is assumed
with respect to the use of the information contained herein. Although every precaution has been taken in the preparation of this
book, the publisher assumes no responsibility for errors or omissions. Neither is any liability assumed for damages resulting
from the use of the information contained herein.

All Trade Marks Acknowledged

The Book at a Glance


, %HIRUH:H%HJLQ  L
,, +RZWRXVHWKLV%RRN  LL
,,, 2EMHFWLYHVRIWKLV%RRN LLL
,9 &RQYHQWLRQVXVHGLQWKLV%RRN LLL
 6ZLQJLQ-DYD 
 6ZLQJ&RPSRQHQWV 
 %HDQV)XQGDPHQWDOV  
 ,QVLGH%HDQV 
 6HUYOHW3URJUDPPLQJ  
 0RUHRQ6HUYOHW  
 -DYD6WRUHG3URFHGXUHV 
 'LVWULEXWHG&RPPXQLFDWLRQLQ50, 
 50,3DFNDJHV  
 &25%$$Q,QVLJKW 
 ([WHQGLQJ-DYD 
 -DYD%H\RQGREMHFWV  
,*ORVVDU\ 
,,$SSHQGL[HV 
,,,,QGH[  

Table of Contents
,%HIRUH:H%HJLQ  L
,,+RZWRXVHWKLV%RRN LL
,,,2EMHFWLYHVRIWKLV%RRN  LLL
,9&RQYHQWLRQVXVHGLQWKLV%RRN  LLL
6ZLQJLQ-DYD













,QWURGXFWLRQWR-DYD)RXQGDWLRQ&ODVVHV 
,QWURGXFWLRQWR6ZLQJ 
7KH6ZLQJ&RPSRQHQW+LHUDUFK\  
$Q2YHUYLHZRI6ZLQJ3DFNDJHV 
0RYLQJDORQJZLWK6ZLQJ  
6ZLQJ%XWWRQ 
6OLGHU&RQWURODQG3URJUHVV%DU  
,PDJH/LVW  
7DEOHV  
'UDZLQJ2EMHFWV 
-6FUROO%DU  
-5DGLR%XWWRQ 

6ZLQJ&RPSRQHQWV







,QWURGXFWLRQ  
:LQGRZV  
%RUGHUV 
/D\RXWV 
-2SWLRQ3DQH 
,QSXW'LDORJ%R[ 

7DEOHRI&RQWHQWV &RQWG







-/DEHO  
0HQXV 
-7UHH 
/RRNDQG)HHO  
7LPHU
-&RPER%R[ 

%HDQV)XQGDPHQWDOV













,QWURGXFWLRQWR-DYD%HDQV 
%HDQV$UFKLWHFWXUH  
%HDQ&RQFHSWV  
%HDQ%R[ 
8VLQJ%HDQ%R[  
0HQX,WHPVLQ%HDQER[  
8VLQJ%RXQG3URSHUWLHV  
&UHDWLQJD%HDQ 
2WKHU%XQGOHG%HDQV 
7KH(YHQW0RQLWRU  
-'%&6(/(&7 
7KH4XRWH0RQLWRU 

,QVLGH%HDQV






,QWURVSHFWLRQ 
0DNLQJDQ$SSOHW  
3HUVLVWHQFH  
0DNLQJ%HDQV6HULDOL]DEOH  
-DYD%HDQV3DFNDJH 

7DEOHRI&RQWHQWV &RQWG








,QWURVSHFWRU0HWKRGV  
%HDQ,QIR,QWHUIDFH  
8VLQJ%HDQ,QIR&ODVVHV  
)XWXUH'HVFULSWRU&ODVV 
(YHQW+DQGOLQJ&ODVVHV 
2WKHU,QWHUIDFHV 
$JJUHJDWLRQ  

6HUYOHW3URJUDPPLQJ













,QWURGXFWLRQWR6HUYHU6LGH-DYD  


6HUYOHWV  
7KH2WKHU:RUOG 
:K\6HUYOHWV"  
6XSSRUWVIRU6HUYOHWV 
6HUYOHW$UFKLWHFWXUH 
'HYHORSLQJD6HUYOHW  
5XQQLQJD6HUYOHW 
+DQGOLQJ+70/)RUP 
6HUYOHW/LIH&\FOH 
,QLWDQG'HVWUR\0HWKRGV  
6HUYLFH0HWKRG  

0RUHRQ6HUYOHW





7KH6HUYHU  


7KH&OLHQW  
7KH5HTXHVW 
6HUYOHW&KDLQLQJ 

7DEOHRI&RQWHQWV &RQWG









+70/*HQHUDWLRQ  


%XLOGLQJ+70/3DFNDJHV  
+70/2EMHFW 
+70/'RFXPHQW  
+70/(OHPHQWV  
+70/)RUP  
8VLQJ+70/3DFNDJH  
6HUYOHW$0LGGOH7LHU  

-DYD6WRUHG3URFHGXUHV













-DYD6WRUHG3URFHGXUHV$Q2YHUYLHZ  


*RDOIRU'HVLJQLQJ64/- 
64/-9DULDEOHV 
-'%&2&,'ULYHU  
:KHQWR8VH-'%&DQG:KHQWR8VH64/-"  
64/DSSHDUVLQ-DYDVWDWHPHQWV  
%XLOGDQ$SSOLFDWLRQ  
6XE3URJUDPVLQ64/- 
&DOOLQJ6WRUHG3URFHGXUHV  
&DOOLQJ6WRUHG)XQFWLRQV  
5HODWLRQVKLSRI64/-WR(PEHGGHG64/ 
$GYDQWDJHVRI64/-RYHU-'%& 

'LVWULEXWHG&RPPXQLFDWLRQ50,
 'HVLJQRI'LVWULEXWHG$SSOLFDWLRQV  
 'LVWULEXWHG$SSOLFDWLRQVRQWKH,QWHUQHW,QWUDQHW  
 7KH'LVWULEXWHG&RPSXWLQJ(QYLURQPHQW 

7DEOHRI&RQWHQWV &RQWG










&RPSRQHQW2EMHFW0RGHO  


'LVWULEXWHG&RPSRQHQW2EMHFW0RGHO '&20  
&RPPRQ2EMHFW5HTXHVW%URNHU$UFKLWHFWXUH &25%$  
'LVWULEXWHG2EMHFW0RGHORI-DYD 
5HPRWH0HWKRG,QYRFDWLRQ 50,  
50,7KUHH7LHU/D\HUV 
&OLHQW6HUYHU$SSOLFDWLRQ8VLQJ50, 
6HUYHU6LGH3URJUDP 
&OLHQWVLGH3URJUDP 

50,3DFNDJHV













50,3DFNDJHV 
50,5HJLVWU\3DFNDJH 
50,6HUYHU3DFNDJH  
50,$FWLYDWLRQ3DFNDJH 
7KH2EMHFW+LHUDUFK\  
*DUEDJH&ROOHFWLRQ 
50,6HFXULW\  
&OLHQW6HUYHU$SSOHWXVLQJ50,  
6HUYHUVLGHSURJUDPPLQJ 
&OLHQWVLGHSURJUDPPLQJ  
50,$OWHUQDWLYHV  
$GYDQWDJHVRI50,  

&25%$DQ,QVLJKW
 'LVWULEXWHG$SSOLFDWLRQ'HVLJQ 
 ,QWURGXFWLRQWR&25%$  

7DEOHRI&RQWHQWV &RQWG
 -DYDDQG&25%$ 
 )HDWXUHVRI&25%$  
 2EMHFW5HTXHVW%URNHU 25%  
 &25%$25%$UFKLWHFWXUH  
 &25%$6HUYLFHV  
 ,QWHUQHW,QWHU25%3URWRFRO  
 &25%$DQGWKH,QHUQHW 
9LVL%URNHUIRU-DYD  
'\QDPLF,QYRFDWLRQ,QWHUIDFH  
&OLHQW6HUYHUSURJUDPPLQJLQ&25%$ 
([WHQGLQJ-DYD
 5HIOHFWLRQ 
 7KHMDYDODQJUHIOHFW 
 0HWKRG&ODVV 
 &RQVWUXFWRU&ODVV  
 0RGLILHU&ODVV  
 5HIOHFWLRQ([DPSOH  
 6HFXULW\&RQFHUQV 
 6HFXULW\0DQDJHU  
 5XQWLPH&ODVV  
1DWLYH0HWKRGV 
&DOOLQJ1DWLYH0HWKRGV  
-DYDK  

7DEOHRI&RQWHQWV &RQWG
-DYD%H\RQG2EMHFWV
 ,QWURGXFWLRQWR-DYD0DLO  
 (PDLO6\VWHP 
 -DYD0DLO$3,  
 /D\HUVRIDQ(PDLO6\VWHP  
 -DYD0DQDJHPHQW$3,  
 -DYD0DQDJHPHQW$UFKLWHFWXUH 
 &RPSRQHQWVRI-0$3,  
 &OLSERDUG  
 &OLSERDUG&ODVV8VDJH  
,QWHUQDWLRQDOL]DWLRQ 
&ODVVHVIRU,QWHUQDWLRQDOL]DWLRQ 
'DWH)RUPDWWLQJ 
,*ORVVDU\
,,$SSHQGL[HV
L$SSHQGL[$  
LL$SSHQGL[% 
III. Index ....................................................................................................... 291

Before We Begin
7KHUH LV UDUHO\ D SKHQRPHQRQ OLNH WKLV 6XFK JHQLXV GRHV WDNH WLPH :KHQ DQ
HUD XVXUSV VORZO\ DQG ILUPO\ VKDNHV XS WKH HDUWK ZLWK LWV ZLGHVSUHDG ZLQJV
DQG

UHDIILUPV

LW

SUHVHQFH

6XFK

JHQLXV

DQG

WKH

SKHQRPHQRQ

FDOOHG

-DYD

ZKLFK ZDV EUXVKHG DVLGH E\ PDQ\ DV MXVW D IDG VHHPV OLNH LW LV ILQDOO\ KHUH WR
VWD\

$QG LW LV VSUHDGLQJ LWV ZLQJV

7KH FUHDWRUV RI WKLV ODQJXDJH ZKHQ WKH\ ORRN DW ZKHUH LW KDV ODQGHG WRGD\
PXVW VXUHO\ EH ODXJKLQJ DW WKHPVHOYHV IRU KDYLQJ KDG WKH WKRXJKW WKDW LW ZDV
RULJLQDOO\

VXSSRVHG

WR

EH

LPSULVRQHG

LQWR

WRDVWHUV

DQG

RYHQV

:KDW

3DQGRUDV ER[ KDG WKH\ XQYHLOHG"

7KH REMHFWLYH ZDV UHDOO\ YHU\ VLPSOH ,W ZDV H[SHFWHG WR MXVW EH D ODQJXDJH
-XVW $QRWKHU /DQJXDJH 0D\ EH ZLWK EHWWHU IHDWXUHV 0D\ EH D OLWWOH PRUH
HOHJDQW %XW KLVWRU\ KDG GLIIHUHQW SODQV ,W LV QR ORQJHU -DYD WKDW LV WKH FHQWHU
RI DWWUDFWLRQ ,W LV LWV FRXVLQV IULHQGV KHLUV ZKLFK DUH WDNLQJ WKH FDNH 7KH
KXJH -DYD IDPLO\ VHHPV WR UXWKOHVVO\ WKUHDWHQ HYHU\ RWKHU SURGXFW WKDW FUDYHV
IRU D VKDUH RI WKH ,QWHUQHW FDNH

%H

LW

6HUYOHWV

%HDQV

-DYD

6HUYHU

3DJHV

5HPRWH

0HWKRG

,QYRFDWLRQ

&25%$ WKH\ KDYH LW DOO 7KH OLVW MXVW VHHPV WR EH HQGOHVV :KDW ZLWK -,1,
DQG -DYD :HE 6HUYHU HPHUJLQJ DQG 6XQ XSGDWLQJ WKHLU VLWH DOPRVW HYHU\ GD\
ZLWK QHZ GHYHORSPHQWV DQG QHZ RIIHULQJV

$ ERRN FDQQRW SRVVLEO\ GR MXVWLFH WR DOO WKLV

%XW LW FDQ SRVVLEO\ PDNH D EHJLQQLQJ 7KLV ERRN WULHV PRUH WKDQ WKDW 7KH
VHFRQG

PRGXOH

RI

-DYD

DSWO\

QDPHG

$GYDQFHG

-DYD

FRYHUV

PDMRU

GHYHORSPHQWV WDNLQJ SODFH LQ WKH -DYD IDPLO\ ,QWURGXFHV WKH PHPEHUV RI WKH
IDPLO\

DQG

PDNHV

WKH

UHDGHU

TXLWH

FRPIRUWDEOH

LQ

LQWHUDFWLQJ

ZLWK

WKHP

$WWHPSWV WR PDNH WKH UHDGHU D IDPLO\ IULHQG RI -DYD

This beginning, a solid, stable one, will take the reader to greater heights
in Programming for the Web and the Internet. Mainly Java. Lets begin.....
The phenomenon is waiting.

How to use this Book


7KLV

ERRN

LV

ZULWWHQ

LQ

OXFLG

VW\OH

LQ

DQ

DWWHPSW

WR

SURYLGH

FODULW\

RQ

FRPSOH[ WHFKQLFDO WRSLFV 6LQFH WKH UHDGHUV DUH QHZ WR WKH VXEMHFW WKH XQGHU
PHQWLRQHG GHWDLOV ZLOO PDNH WKHP XVH WKH ERRN LQ WKH PRVW HIILFLHQW PDQQHU
$OVR

LW

ZLOO

HQDEOH

WKH

UHDGHUV

WR

NQRZ

DERXW

WKH

RUJDQL]DWLRQ

DQG

WKH

SDWWHUQ DGRSWHG LQ WKLV ERRN

7KH %RRN DW D *ODQFH JLYHV \RX DQ RYHUYLHZ RI WKH YDULRXV WRSLFV FRYHUHG LQ
WKH

%RRN

7KHVH

DUH

WKH

VHVVLRQV

ZKLFK

ZLOO

EH

FRYHUHG

LQ

$GYDQFHG

7HFKQRORJLHV HPHUJLQJ DW WKH -DYD IURQW ,W DOVR SURMHFWV DQ RXWORRN RI WKH


PRGXOH FRYHUDJH DQG LWV FRQWHQWV ZKLFK ZLOO VSDQ IRU  VHVVLRQV

7KH 7DEOH RI &RQWHQWV HQDEOHV \RX WR NQRZ DERXW WKH YDULRXV WRSLFV XQGHU
HDFK

6HVVLRQ

7KH

WRSLFV

JLYHQ

XQGHU

6HVVLRQ

WLWOH

UHIOHFW

WKH



3RLQW

SURJUDP 7KH VXEMHFW LPSDUWHG LQ WKH FODVV URRP VHVVLRQ ZLOO EH DFFRUGLQJ WR
WKHVH

JLYHQ

KHDGLQJV

,W

EDVLFDOO\

KHOSV

WR

SUHSDUH

IRU

HYHU\

FODVV

URRP

VHVVLRQ E\ OHWWLQJ \RX NQRZ DERXW WKH VHVVLRQ FRYHUDJH $JDLQ WKHVH SRLQWV
ZLOO DOVR EH FRYHUHG LQ WKH EHJLQQLQJ RI HYHU\ VHVVLRQ XQGHU WKH WLWOH ,Q WKLV
6HVVLRQ

(DFK VHVVLRQ EHJLQV

ZLWK

DQ

REMHFWLYH

7KHVH

REMHFWLYHV

DUH OLVWHG RQ

WKH

VHVVLRQ FRYHU SDJH 7KLV ZLOO IDFLOLWDWH \RX WR NQRZ WKH \DUGVWLFNV E\ ZKLFK
\RX FDQ HYDOXDWH \RXU NQRZOHGJH DFTXDLQWDQFH LQ HDFK VHVVLRQ )ROORZLQJ WKH
FRXUVHZDUH

GXULQJ

FODVVURRP

VHVVLRQ

ZLOO

HQDEOH

\RX

WR

KDYH

EHWWHU

XQGHUVWDQGLQJ RI WKH VXEMHFW ([DPSOHV DUH FLWHG WR JLYH PRUH FODULW\ DQG
KHOS \RX WR KDYH DQ LGHD DERXW WKH LPSOHPHQWDWLRQ RI WKH FRQFHSW GHILQHG ,W
LV VXJJHVWHG WKDW \RX WU\ WR ZRUN WKH H[DPSOHV JLYHQ LQ \RXU ODE VHVVLRQV E\
\RXUVHOI LQ RUGHU WR KDYH D FOHDU XQGHUVWDQGLQJ RI WKH FRQFHSW $W WKH HQG RI
HYHU\ VHVVLRQ VHOISUDFWLFH H[HUFLVHV DUH SURYLGHG <RX VKRXOG EH DEOH WR GR
WKHVH H[HUFLVHV DW WKH HQG RI WKH FODVVURRP VHVVLRQ

7U\ WR ZRUN WKHVH H[HUFLVHV DQG HYDOXDWH \RXU SURJUHVV

([HUFLVHV

DUH

SURYLGHG

VHSDUDWHO\

IRU

*XLGHG

7RXU

VHVVLRQV

$WWHPSW

WKH

H[HUFLVHV RQ \RXU RZQ <RX PD\ UHIHU WR WKH VROXWLRQV JLYHQ LQ FDVH \RX ILQG
VRPH GLIILFXOW\ LQ DQVZHULQJ %XW UHIHUULQJ WR VROXWLRQV VKRXOG QRW EH VRXJKW
DOZD\V

$SSHQGL[ LV DGGHG LQ RUGHU WR JHW PRUH LQIRUPDWLRQ RQ WKH WRSLFV GHDOW ZLWK
7KH\ SURYLGH VRPH H[WUD GHWDLOV RQ WKH VXEMHFW DQG HQKDQFH SURJUDPPDELOLW\
E\ WKURZLQJ XS D ZLGH VSHFWUXP RQ WKH VXEMHFW 5HIHUULQJ WR WKH $SSHQGL[
ZLOO ZLGHQ \RXU NQRZOHGJH DV LW LV DUUDQJHG WR HQOLJKWHQ \RXU YLVLRQ RQ WKH
WRSLFV GHDOW ZLWKLQ

7KH *ORVVDU\ JLYHQ DW WKH HQG RI WKH ERRN KHOSV \RX WR NQRZ WKH PHDQLQJ RI
TXLWH IUHTXHQWO\ XVHG WHFKQLFDO WHUPV DQG WKHLU LPSOLFDWLRQV

ii

Objectives of this Book


7KLV ERRN LV LQWHQGHG WR JLYH DGYDQFHG VNLOOV LQ -DYD 3URJUDPPLQJ $W HQG RI
WKLV PRGXOH ZH VKRXOG EH DEOH WR ZULWH VRSKLVWLFDWHG JUDSKLFDO DSSOLFDWLRQV
XVLQJ

WKH

-DYD

FRPSRQHQWV

DQG

WRROV

:H

WKUHHWLHU

DOVR

VKRXOG

EDVHG

EH

DEOH

DSSOLFDWLRQV

WR

XVLQJ

GHYHORS

GLVWULEXWHG

WHFKQRORJLHV

VXFK

DV

&25%$ 50, HWF

$IWHU FRPSOHWLRQ RI WKLV ERRN ZH ZLOO EH FRQYHUVDQW ZLWK DGYDQFHG FRQFHSWV


OLNH 6ZLQJV %HDQV 6HUYOHWV HWF :H ZLOO EH DEOH WR XQGHUVWDQG DOO WKH WHUPV
DQG MDUJRQV UHODWHG WR GLVWULEXWHG FRPSXWLQJ E\ WKH WLPH ZH ILQLVK ZLWK WKLV
PRGXOH

Conventions Used in this Book


Each session is divided into 12 topics. It is called the Twelve Point
Program (12pp). In every session, these points are distinctly shown in
an underlined bigger font.
Subheadings appear in bold without underlining.
Note is shown inside a box. It is information which is necessary to
understand the subject discussed but does not come as a part of the text
flow.
Summary is at the end of each session, shown in a special table,
italicized.
Each session ends with a Going Over It Again. This helps the student
in recapitulating the session contents.
Figure numbers and descriptions are given below each picture, diagram
or screen for proper navigation.

iii

Session 1

Swing in Java

On Completion of this Session


you will be able to understand...

) Introduction to JFC
) Swing and their behavior
) Merits and Demerits of Swing
) Programming in Swing
) Using Tables and Image Lists
) Using Geometric Figures in Swing

In This Session...

Introduction to Java Foundation Classes

Introduction to Swing

The Swing Component Hierarchy

An Overview of Swing Packages

Moving along with Swing

Swing Button

Slider Control and Progress Bar

Image List

Tables

Drawing Objects

JscrollBar

JRadioButton

Swing in Java

Introduction to Java Foundation Classes

7KH -DYD 'HYHORSPHQW .LW  LV D PDMRU XSJUDGH RI WKH &RUH DQG 6WDQGDUG ([WHQVLRQ $3,V RI
WKH -'. ,W LQFOXGHV YHUVLRQ  RI WKH -DYD )RXQGDWLRQ &ODVVHV -)&  &25%$ VXSSRUW D PRUH
VHFXUH DQG IOH[LEOH VHFXULW\ PRGHO DQG LPSURYHPHQWV WR WKH $3,V RI -'.  DQG SHUIRUPDQFH
HQKDQFHPHQWV 7KH VLQJOH PRVW LPSRUWDQW IHDWXUH LQ -'.  LV WKH DGGLWLRQ RI YHUVLRQ  RI
WKH -DYD )RXQGDWLRQ &ODVVHV -)&  -)& LV D VHW RI $3,V IRU EXLOGLQJ WKH *8, UHODWHG
FRPSRQHQWV RI -DYD DSSOHWV DQG DSSOLFDWLRQV -'.  LQWHJUDWHV -)&  DV D &RUH $3, DQG
DGGV WKH -DYD ' DQG 'UDJ DQG 'URS $3,V 7KH $3,V LQFOXGHG ZLWK -)& DOVR FRQWDLQ WKH
IROORZLQJ

The Abstract Windowing ToolKit


Swing
Java 2D
Drag and Drop
Accessibility

Introduction to Swing

6ZLQJ LV WKH ZRUG XVHG E\ -DYD6RIW SURJUDPPLQJ WHDP IRU WKH QH[W JHQHUDWLRQ RI WKH $:7
6ZLQJ LV D PDMRU FRPSRQHQW RI WKH -)& ZKLFK LV WKH UHVXOW RI D ODUJH FROODERUDWLYH HIIRUW
EHWZHHQ 6XQ 1HWVFDSH ,%0 DQG RWKHU FRPSDQLHV 6ZLQJ SURYLGHV D ODUJH QXPEHU RI XVHIXO
*8, FRQWUROV WKDW RULJLQDWHG ZLWK 1HWVFDSHV ,QWHUQHW )RXQGDWLRQV &ODVVHV ,)&  6ZLQJ
H[WHQGV $:7 E\ VXSSO\LQJ PDQ\ PRUH W\SHV RI *8, FRPSRQHQWV SURYLGLQJ  SXUH -DYD
LPSOHPHQWDWLRQV RI WKHVH FRPSRQHQWV DQG DOORZLQJ WKH DSSHDUDQFH DQG EHKDYLRU RI WKHVH
FRPSRQHQWV WR EH HDVLO\ WDLORUHG 7KH QHZ FRPSRQHQWV WKDW DUH LQFOXGHG ZLWK 6ZLQJ LQFOXGH
HYHU\WKLQJ IURP WDEEHG SDQHV DQG IDQF\ ERUGHUV WR VOLGHUV DQG VSLQQHUV 7KHVH QHZ
FRPSRQHQWV LQ DQG RI WKHPVHOYHV PDNH 6ZLQJ DQ RXWVWDQGLQJ DGGLWLRQ WR WKH -DYD $3, 7KH
6ZLQJ &RPSRQHQW JDOOHU\ ORFDWHG DW KWWSMDYDVXQFRPSURGXFWVMIFVZLQJGRFFXUUHQW
FRPSBJDOKWPO H[KLELWV VRPH RI WKHVH QHZ FRPSRQHQWV 6ZLQJ DOVR FRPHV ZLWK D JUHDW GHPR
SURJUDP QDPHG 6ZLQJ6HW
6ZLQJ FRPSRQHQWV GRQW GHSHQG RQ WKH QDWLYH ZLQGRZ LPSOHPHQWDWLRQ WR VXSSRUW WKHP 7KLV
DOVR PHDQV WKDW 6ZLQJ FRPSRQHQWV DUH DYDLODEOH DQG FRQVLVWHQW DFURVV DOO SODWIRUPV $OWKRXJK
6ZLQJ FRPSRQHQWV DUH LPSOHPHQWHG LQ WHUPV RI WKH XQGHUO\LQJ $:7 WKHVH FRPSRQHQWV GR QRW
XVH $:7 FRPSRQHQWV ,Q IDFW PDQ\ RI WKH WUDGLWLRQDO $:7 FRPSRQHQWV VXFK DV EXWWRQV OLVWV
DQG GLDORJ ER[HV KDYH EHHQ UHLPSOHPHQWHG DV 6ZLQJ FRPSRQHQWV %HFDXVH RI WKLV WKH $:7
FRPSRQHQWV EHKDYH PRUH FRQVLVWHQWO\ DFURVV GLIIHUHQW SODWIRUPV DQG DUH FDSDEOH RI SURYLGLQJ
DGGLWLRQDO IHDWXUHV QRW VXSSRUWHG E\ WKHLU QDWLYH ZLQGRZLQJ SODWIRUPV 7KH PRVW WDONHG DERXW
IHDWXUH LQ 6ZLQJ LV WKDW LW VXSSRUWV SOXJJDEOH /RRN DQG )HHO 7KH 6ZLQJ 3OXJJDEOH /RRN DQG
)HHO DUFKLWHFWXUH PDNHV LW HDV\ WR FXVWRPL]H ERWK WKH DSSHDUDQFH DQG WKH EHKDYLRU RI DQ\
Comp-U-Learn

Advanced Java Programming

SDUWLFXODU 6ZLQJ FRQWURO RU DQ\ JURXS RI WKRVH FRQWUROV 7KH IROORZLQJ DUH VRPH RI WKH
LPSRUWDQW IHDWXUHV RI -DYD 6ZLQJ
Swing components are independent of the native windowing system.
They can run on any windowing system that supports the AWT.
Swing provides a pure Java implementation of many of the traditional AWT
components.
Swing is compatible with the AWT and Swing components can be used
interchangeably with AWT components.
The number and quality of the GUI controls provided by Swing is unrivaled by
any other GUI toolkit.
Swing has a very rich collection and user friendly set of interface elements.
Swing gives a consistent user experience across platforms.
Swing has the capability of making Sun Microsystemss dream of Write once,
run anywhere come to reality.

6RPH RI WKH GUDZEDFNV RI 6ZLQJ DUH DV IROORZV


Swing-based user interface elements are somewhat slower to appear on the users
screen than the peer based components used by the AWT.
Since the user interface elements look almost alike on all platforms, they will
look different from the native controls on at least some platforms, and thus users
will be less familiar with them.
Swing components can be used only with the JDK 1.1 event model. They dont
support JDK 1.0 event model.

7R PDNH RSWLPDO XVH RI 6ZLQJ WKH YLGHR FDUG VKRXOG EH VHW WR  ELW RU KLJKHU FRORU 6ZLQJ LV
QRW D FRPSOHWH UHSODFHPHQW RI $:7 6ZLQJ VLPSO\ JLYHV D PRUH FDSDEOH XVHULQWHUIDFH
FRPSRQHQWV
The Swing Component Hierarchy

7KH )LJXUH  GLVSOD\V WKH 6ZLQJ &RPSRQHQW KLHUDUFK\ :H FDQ VHH WKDW -&RPSRQHQW FODVV
IRUPV WKH EDVH RI DOO RWKHU FODVVHV ,W LV WKH WRS PRVW FODVV LQ WKH ODGGHU IURP ZKHUH RWKHU FODVVHV
DUH H[WHQGHG 7KH IROORZLQJ ZLOO HQDEOH XV WR KDYH DQ LQVLJKW LQWR YDULRXV VXEFODVVHV LQ WKH
-&RPSRQHQW KLHUDUFK\
4

Comp-U-Learn

Swing in Java

$EVWUDFW%XWWRQ 7KH WRSOHYHO EXWWRQ FODVV 7KH FODVVHV -%XWWRQ WUDGLWLRQDO DQG HQKDQFHG *8,
%XWWRQV  -7RJJOH%XWWRQ FKHFN ER[HV DQG UDGLR EXWWRQV DQG -0HQX,WHP PHQXV DQG PHQX
LWHPV IRU WKH PHQXEDU DUH H[WHQGHG IURP WKLV FODVV
-&RPER%R[ $ FRPELQDWLRQ RI D WH[W ILHOG DQG GURS GRZQ OLVW FRQWURO
-,QWHUQDO)UDPH $ IUDPH FODVV WKDW VXSSRUWV DOO IUDPH EDVHG RSHUDWLRQV DQG FDQ EH XVHG DV DQ
LQWHUQDO *8, FRPSRQHQW 7KH -'HVNWRS,FRQ LQQHU FODVV LV XVHG WR LPSOHPHQW DQ LFRQLILHG IRUP
RI DQ LQWHUQDO IUDPH
-/DEHO $ ODEHO WKDW PD\ FRQWDLQ DQ LPDJH WH[W RU ERWK ,W LV H[WHQGHG E\ WKH
'HIDXOW7DEOH&HOO5HQGHUHU FODVV ZKLFK LV XVHG WR GLVSOD\ WKH FHOOV RI D WDEOH
-/D\HUHG3DQH $ SDQHO WKDW VXSSRUWV VHYHUDO OD\HUV ,W LV H[WHQGHG E\ -'HVNWRS3DQH ZKLFK
SURYLGHV WKH FDSDELOLW\ WR PDQDJH OD\HUHG IUDPHV DV D GHVNWRS
-/LVW $ OLVW FRPSRQHQW WKDW FDQ EH DGGHG WR DQ\ FRQWDLQHU ,W GLVSOD\V D SRS XS PHQX RI PHQX
LWHPV
-2SWLRQ3DQH $ VLQJOH FODVV WKDW VXSSRUWV D QXPEHU RI FRPPRQ GLDORJ ER[HV
-0HQXEDU $ PHQX WKDW FDQ EH DGGHG WR DQ\ FRQWDLQHU ,W GLVSOD\V D SRS XS PHQX RI PHQX
LWHPV
-3DQHO 7KH 6ZLQJ DQDORJ\ RI WKH $:7 3DQHO FODVV ,W LV H[WHQGHG E\ WKH &RORU&KRRVHU3DQHO
ZKLFK SURYLGHV VXSSRUW IRU FRORU VHOHFWLRQ
-3RSXS0HQX D SRSXS PHQX WKDW VXSSRUWV WH[W DQG JUDSKLFDO PHQX LWHPV
-3URJUHVV%DU D FRQILJXUDEOH EDU WKDW GLVSOD\V SURJUHVV DV D SHUFHQWDJH RI WKH EDUV OHQJWK
-5RRW3DQH 8VHV D OD\HUHG SDQH DQG D VHH WKURXJK SDQH WR DOORZ REMHFWV WR EH RYHUODLG RQ WKH
OD\HUHG SDQH
-6FUROO%DU 7KH 6ZLQJ VFUROOEDU LPSOHPHQWDWLRQ W\SLFDOO\ XVHG ZLWK REMHFWV RI WKH -YLHZ3RUW
FODVV
-6FUROO3DQH WKH FRPELQDWLRQ RI D VFUROOEDU DQG D YLHZ SRUW
-6HSDUDWRU 8VHG WR VHSDUDWH PHQX LWHPV
-6OLGHU 3URYLGHV D VOLGHU *8, FRQWURO WKDW LV DQDORJRXV WR WKH VOLGHUV IRXQG RQ DXGLR HTXDOL]HUV
-6SOLW3DQH $ SDQHO WKDW LV XVHG WR VHSDUDWH H[DFWO\ WZR FRPSRQHQWV
-7DEEHG3DQH $ SDQHO WKDW RUJDQL]HV FRPSRQHQWV LQWR WDEV 7KH XVHU FOLFNV RQ WKH WDEV WR YLHZ
WKH FRPSRQHQW JURXSV
-7DEOH $ YHU\ IOH[LEOH WDEOH FRPSRQHQW WKDW GLVSOD\V ERWK WH[W DQG JUDSKLF FHOOV
-7DEOH+HDGHU&ROXPQ KHDGHU IRU -WDEOH REMHFWV
-7H[W&RPSRQHQW 6XSHUFODVV RI WKH 6ZLQJ WH[W ILHOGV
Comp-U-Learn

Advanced Java Programming

-7RRO%DU $ GUDJJDEOH IORDWLQJ WRROEDU FRQWDLQHU


-7RRO7LS $ SRSXS FRPSRQHQW WKDW GLVSOD\V XVHIXO LQIRUPDWLRQ DERXW RWKHU FRPSRQHQWV
-7UHH $ FRPSRQHQW WKDW GLVSOD\V KLHUDUFKLFDO GDWD LQ D WUHH OLNH RXWOLQH IDVKLRQ
-9LHZSRUW $ SDQHO IRU KROGLQJ LQIRUPDWLRQ WKDW LV VFUROOHG E\ D VFUROO EDU
An Overview of Swing Packages

6ZLQJ FRQVLVWV RI  SDFNDJHV DQG KXQGUHGV RI FODVVHV DQG LQWHUIDFHV +RZHYHU WKH
-&RPSRQHQWV FODVV RI FRPVXQMDYDVZLQJ LV WKH WRSOHYHO FODVV RI WKH 6ZLQJ FRPSRQHQW
KLHUDUFK\ 7KH -&RPSRQHQW FODVV LV D VXEFODVV RI WKH MDYDDZWFRQWDLQHU FODVV DQG LV WKHUHIRUH
ERWK D FRPSRQHQW DQG FRQWDLQHU LQ WKH $:7 VHQVH %HFDXVH -&RPSRQHQW LV WKH EDVH FODVV RI DOO
6ZLQJ FRPSRQHQWV DOO 6ZLQJ FRPSRQHQWV GHVFHQG IURP MDYDDZW&RQWDLQHU DQG
MDYDDZW&RPSRQHQW 7KH 6ZLQJ FODVVHV DUH DQ H[WHQVLRQ SODFHG LQ WKH MDYD[VZLQJ SDFNDJH 7KH
SDFNDJH QDPH -DYD[ LQGLFDWHV D -DYD H[WHQVLRQ SDFNDJH QRW D FRUH SDFNDJH 7KH 6ZLQJ FODVVHV
DUH LQGHHG DQ H[WHQVLRQ WR -DYD  $Q RYHUYLHZ RI YDULRXV SDFNDJHV LQ WKH 6ZLQJ $3, ZLOO
HQDEOH XV WR KDYH D FOHDU SLFWXUH RQ YDULRXV 6ZLQJ FRPSRQHQWV
7KH
SDFNDJH SURYLGHV D QXPEHU RI LQWHUHVWLQJ ERUGHUV WKDW FDQ EH
XVHG ZLWK 6ZLQJ FRPSRQHQWV 7KHVH ERUGHUV ZLOO HQDEOH XV WR WDLORU WKH ORRN DQG IHHO RI
FRPSRQHQW VHWV
7KH
SDFNDJH GHILQHV WKH HYHQWV DQG HYHQW OLVWHQHUV XVHG E\ 6ZLQJ
FRPSRQHQWV
7KH
SDFNDJHV SURYLGHV VHYHUDO FODVVHV DQG LQWHUIDFHV WKDW VXSSRUW WH[W
FRPSRQHQWV 7KHVH FODVVHV DQG LQWHUIDFHV FRQWURO WKH FDUHW KLJKOLJKWLQJ IRUPDWWLQJ DQG RWKHU
DVSHFWV RI WH[W WKDW DUH HQWHUHG DQG HGLWHG ZLWKLQ WH[W FRPSRQHQWV
7KH
SDFNDJH FRQWDLQV WKH VLQJOH +70/(GLWRU.LW FODVV 7KLV
FODVV VXSSRUWV WKH LPSOHPHQWDWLRQ RI D VLPSOH EXW SRZHUIXO +70/ HGLWRU
7KH
SDFNDJH LV VLPLODU WR WKH FRPVXQMDYDVZLQJWH[WKWPO
SDFNDJH ,W FRQWDLQV WKH VLQJOH 57)(GLWRU.LW FODVV ZKLFK SURYLGHV WKH FDSDELOLW\ WR HGLW 5LFK
7H[W )RUPDW 57) WH[W
7KH
SDFNDJH SURYLGHV WKH HVVHQWLDO FODVVHV DQG LQWHUIDFHV WKDW
VXSSRUWV WKH XVH RI -WUHH FRPSRQHQW
7KH
SDFNDJH SURYLGHV VXSSRUW IRU XQGR DQG UHGR RSHUDWLRQV
FRPVXQMDYDVZLQJERUGHU

FRPVXQMDYDVZLQJWDEOH

FRPVXQMDYDVZLQJWH[W

FRPVXQMDYDVZLQJWH[WKWPO

FRPVXQMDYDVZLQJWH[WUWI

FRPVXQMDYDVZLQJWUHH

FRPVXQMDYDVZLQJXQGR

The com.sun.java.swing.plaf provides support for Swings pluggable look and feel features.

Comp-U-Learn

Swing in Java
JC om p on e n t
A b str a ctB u tto n
J B u tton
J M e n u I te m
J C h e ck B o x M e n u I te m
JM e n u
J R a d io B u tto n M e n u I te m
J To g g le B u tto n
J C h e ch B o x
J R a d io B u tton
JLa b e l
D e f a u ltTa b le C e llR e n d e r e r (ja va .a w t. sw in g . ta b le )
J I n te r n a lF r a m e
J C o m b o B ox
JLa y e r e d P a n e
J D e sk to p P a n e
J L ist
JM e n u B a r
J O p tio n P a n e
JP a n e l
C o lo r C h o o se r P a n e
JP op up M e n u
JP r o g r e ssB a r
J R o o tP a n e
J S cr ollB a r
J S cr ollP a n e
J S e p a r a to r
J S lid e r
J S p litP a n e
J Ta b b e d P a n e
J Ta b le
J Ta b le H e a d e r (ja va . a w t. sw in g n . ta b le )
J Te x tC o m p o n e n t(ja va . a w t. sw in g . te x t)
J Ed ito r P a n e

J Te x tP a n e

J Te xtF ie ld

J P a ssw o r d F ie ld

J Te xta r e a
J To o lB a r
J To o lTip
J Tr e e
J V ie w P o r t

Comp-U-Learn

Advanced Java Programming

Moving along with Swing

$ VDPSOH SURJUDP XVLQJ 6ZLQJ


Example 1.1:
import javax.swing.*;
class frame extends JFrame
{
public frame()
{
setTitle(Our First Frame);
setSize(300,200);
}
}
public class framedemo
{
public static void main(String args[])
{
JFrame fr=new frame();
fr.show();
}
}

6DYH WKLV SURJUDP DV IUDPHGHPRMDYD &RPSLOH DQG UXQ WKLV SURJUDP WR VHH WKH IROORZLQJ RXWSXW

Fig. 1.1

)UDPHV DUH H[DPSOHV RI FRQWDLQHUV 7KLV PHDQV WKDW D IUDPH FDQ FRQWDLQ RWKHU XVHU LQWHUIDFH
FRPSRQHQWV VXFK DV EXWWRQV DQG WH[W ILHOGV +HUH LQ WKLV SURJUDP D QHZ IUDPH LV FUHDWHG ZLWK
WKH WLWOH 2XU )LUVW )UDPH 7KLV SURJUDP LV QRW WHUPLQDWHG ZKHQ \RX FOLFN WKH FORVH EXWWRQ RU
ZKHQ \RX FOLFN WKH FORVH IURP WKH 6\VWHP PHQX ,Q RUGHU WR FDQFHO WKLV SURJUDP ZH KDYH WR
SUHVV &WUO$OW'HO DQG JLYH (QG7DVN IRU -DYD 7KLV ZLOO FDQFHO WKH DSSOLFDWLRQ
8

Comp-U-Learn

Swing in Java

1RZ OHW XV UHZULWH WKH SURJUDP VR WKDW ZKHQ ZH FOLFN RQ WKH FORVH %XWWRQ WKH DSSOLFDWLRQ
WHUPLQDWHV )RU WKLV SXUSRVH ZH KDYH WR LQFOXGH WKH SDFNDJH MDYDDZWHYHQW DQG LWV FODVVHV DQG
PHWKRGV 7KLV SURJUDP ZLOO XVH DQ LQQHU FODVV :LQGRZ$GDSWHU DQG XVH WKH PHWKRG
:LQGRZ&ORVLQJ  ,W LV LPSRUWDQW WR DGG WKH :LQGRZ/LVWHQHU HYHQW WR WKH SURJUDP VR WKDW WKH
QHZO\ FUHDWHG )UDPH ZLQGRZ FDQ UHVSRQG WR DFWLRQV RQ WKH :LQGRZ
Example 1.2:
import javax.swing.*;
import java.awt.event.*;
class frame extends JFrame
{
public frame()
{
setTitle(Sample Frame);
setSize(300,200);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
}
public class framedemo
{
public static void main(String args[])
{
JFrame fr=new frame();
fr.show();
}
}

7KH RXWSXW RI WKH DERYH SURJUDP LV VKRZQ EHORZ 7KRXJK WKH RXWSXW RI WKH SURJUDP LV WKH
VDPH DV WKH SUHYLRXV SURJUDP WKH GLIIHUHQFH OLHV LQ UHVSRQGLQJ WR HYHQWV :KHQ ZH FOLFN RQ WKH
&ORVH PHQX LWHP RI 6\VWHP 0HQX RU &ORVH %XWWRQ WKH 6DPSOH )UDPH ZLQGRZ DSSOLFDWLRQ LV
WHUPLQDWHG

Fig 1.2
Comp-U-Learn

Advanced Java Programming

/HW XV YLHZ VRPH RI WKH LPSRUWDQW PHWKRGV LQ -)UDPH FODVV


7KH GLVSRVH PHWKRG WKDW FORVHV GRZQ WKH ZLQGRZ DQG UHFODLPV DQ\ V\VWHP UHVRXUFHV XVHG LQ
FUHDWLQJ LW
7KH VHW,FRQ,PDJH PHWKRG ZKLFK WDNHV DQ ,PDJH2EMHFW WR XVH DV WKH LFRQ ZKHQ WKH ZLQGRZ LV
PLQLPL]HG LFRQL]HG  8QGHU ZLQGRZV WKLV LFRQ ZLOO DOVR DSSHDU DV WKH FRQWURO ER[ LFRQ
7KH VHW7LWOH PHWKRG IRU FKDQJLQJ WKH WH[W LQ WKH WLWOH EDU
7KH VHW5HVL]DEOH PHWKRG ZKLFK WDNHV D %RROHDQ WR GHWHUPLQH LI D IUDPH LV UHVL]DEOH E\ WKH XVHU
7KH IROORZLQJ SURJUDP ZLOO HQDEOH GLVSOD\LQJ D WH[W :HOFRPH WR 6ZLQJ RQ WKH 3DQHO +HUH ZH
DUH XVLQJ D PHWKRG FDOOHG SDLQW&RPSRQHQW  7KH RYHUULGLQJ RI WKH PHWKRG SDLQW ZLOO FDXVH
SUREOHPV DQG ZLOO QRW SURGXFH WKH GHVLUHG UHVXOWV ZKLOH ZH DUH ZRUNLQJ ZLWK 6ZLQJ +HQFH LW LV
VXJJHVWHG WKDW WKH SDLQW&RPSRQHQW PHWKRG LV DOZD\V XVHG ZKHQ ZRUNLQJ ZLWK 6ZLQJ $OVR
ZKHQ ZH ZRUN ZLWK $:7 ZH FDQ RQO\ GUDZ RQ D FDQYDV DUHD %XW LQ 6ZLQJ ZH FDQ GUDZ RQ
DQ\ 6ZLQJ FRPSRQHQW $OVR ZH VKRXOG QRWH WKDW WKH FUHDWLRQ RI WKH SDQHO WKH EDFNJURXQG FRORU
RI WKH SDQHO DUH GRQH E\ FDOOLQJ WKH VXSHUSDLQW&RPSRQHQW  ZKLFK LW UHIHUV WR -3DQHOV
SDLQW&RPSRQHQW  +HQFH ZH FRQFHQWUDWH RQO\ RQ WKH WDVN WR EH SHUIRUPHG E\ RXUSDQHO 7KH
IROORZLQJ FRGH ZLOO HQDEOH XV WR XQGHUVWDQG WKH DERYH PHQWLRQHG GHWDLOV
Example 1.3:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class ourpanel extends JPanel
{
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawString(Welcome to Swing,100,80);
}
}
class ourframe extends JFrame
{
public ourframe()
{
setTitle(Sample Frame Window);
setSize(300,500);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);

10

Comp-U-Learn

Swing in Java
}
});
Container con=getContentPane();
con.add(new ourpanel());
}
}
public class welcome
{
public static void main(String args[])
{
JFrame fr=new ourframe();
fr.show();
}
}

7KH RXWSXW RI WKH DERYH SURJUDP LV VKRZQ DV IROORZV

Fig. 1.3

Swing Button

1RZ OHW XV VHH D SURJUDP WKDW ZLOO GLVSOD\ D EXWWRQ DQG D WRJJOH EXWWRQ RQ D SDQHO 7KH SURJUDP
DOVR KDV D WDEEHG SDQH ZLWK RQH WDE EXWWRQ FDOOHG %XWWRQ :KHQ ZH PRYH RXU FXUVRU QHDU WKH
WDEEHG EXWWRQ LW ZLOO GLVSOD\ D WRRO WLS WH[W $ %XWWRQ DQG D 7RJJOH %XWWRQ $OVR WKH SDQHO LV
JLYHQ D ERUGHU XVLQJ 7LWOHG%RUGHU +HUH WKH WRROWLS PHVVDJH LWVHOI LV GLVSOD\HG DV D ERUGHU
Example 1.4:
import
import
import
import
import

java.awt.*;
java.awt.event.*;
javax.swing.*;
javax.swing.event.*;
javax.swing.border.*;

Comp-U-Learn

11

Advanced Java Programming


class swing extends Frame
{
JTabbedPane tabbedPane = new JTabbedPane();
JPanel buttonPanel = new JPanel();
JPanel[] panels = {buttonPanel};
Icon worldIcon = new ImageIcon(Dbmusic.gif);
Icon printerIcon = new ImageIcon(Eatdrink.gif);
JButton printerButton = new JButton(Print,printerIcon);
JToggleButton worldButton = new
JToggleButton(Connect,worldIcon,true);
public swing()
{
super(Swing Button window);
addWindowListener(new WindowHandler());
String[] tabs = {Buttons};
String[] tabTips = {A Button and a Toggle Button};
for(int i=0;i<tabs.length;++i) {
panels[i].setBackground(Color.blue);
panels[i].setBorder(new TitledBorder(tabTips[i]));
tabbedPane.addTab(tabs[i],null,panels[i],tabTips[i]);
}
printerButton.setBackground(Color.white);
worldButton.setBackground(Color.white);
buttonPanel.add(printerButton);
buttonPanel.add(worldButton);
add(Center,tabbedPane);
setSize(500,500);
setBackground(Color.yellow);
show();
}
public class WindowHandler extends WindowAdapter {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}
public static void main(String args[])
{
swing s=new swing();
}
}

:KHQ ZH FOLFN RQ WKH %XWWRQ FDOOHG 3ULQW LW ZLOO IOLFNHU DQG EHKDYH OLNH D QRUPDO EXWWRQ :KHQ
ZH FOLFN RQ WKH %XWWRQ FDOOHG &RQQHFW LW WRJJOHV 7KDW LV WKH EDFNJURXQG FRORU RI WKH EXWWRQ
ZLOO FKDQJH 7KH :LQGRZ FORVLQJ HYHQW LV DOVR WUDSSHG VR WKDW WKH ZLQGRZ LV WHUPLQDWHG RQ
FOLFNLQJ WKH FORVH EXWWRQ 7KH LPSRUWDQW SRLQWV WR QRWH LQ WKLV SURJUDP DUH WKH XVDJH RI WKH JR
-7RJJOH%XWWRQ IRU FUHDWLRQ RI D 7RJJOH EXWWRQ DQG WKH XVDJH RI -WDEEHG3DQH IRU D WDEEHG
EXWWRQ KROGHU 7DE&RQWURO %DU 
12

Comp-U-Learn

Swing in Java

7KH RXWSXW RI WKH SURJUDP LV GLVSOD\HG DV IROORZV

Fig 1.4

Slider Control and Progress Bar

/HW XV VHH DQRWKHU SURJUDP ZKLFK LV VLPLODU WR WKH SUHYLRXV RQH +HUH ZH DUH GLVSOD\LQJ D VOLGHU
FRQWURO DQG D SURJUHVV EDU LQ D SDQHO $V ZH PRYH WKH VOLGHU FRQWURO WKH SURJUHVV EDU JHWV
DFWLYDWHG :KHQ ZH PRYH WKH VOLGHU XVLQJ WKH PRXVH WKH SURJUHVV EDU LV XSGDWHG WR UHIOHFW WKH
QHZ VOLGHU SRVLWLRQ 6OLGHUV DQG SURJUHVV EDUV SURYLGH XVHUV ZLWK D ILQH OHYHO RI FRQWURO RYHU D
SURJUDP SDUDPHWHU DQG GLVSOD\V WKH SURJUHVV WRZDUGV WKH FRPSOHWLRQ RI D WDVN 7KH LPSRUWDQW
SRLQWV WR EH QRWHG LQ WKH SURJUDP DUH JLYHQ EHORZ
$ SDQHO FDOOHG EDU3DQHO LV FUHDWHG RQ ZKLFK WKH SURJUHVV EDU DQG WKH VOLGHU FRQWURO DUH SODFHG
7KH VHW0DMRU7LFNVSDFLQJ DQG VHW0LQRU7LFNVSDFLQJ PHWKRGV DUH XVHG WR DGG WLFN PDUNV WR
WKH VOLGHU 7KH VHW3DLQW7LFNV PHWKRG LV LQYRNHG WR FDXVH WKH WLFNV WR EH GLVSOD\HG 7KH
DGG&KDQJH/LVWHQHU PHWKRG VHWV XS DQ HYHQW KDQGOHU FDOOHG WKH 6OLGHU 7KH VHW2ULHQWDWLRQ 
VHW0D[LPXP  VHW0LQLPXP DQG WKH VHW9DOXH PHWKRGV DUH XVHG WR VHW XS WKH SURJUHVV EDUV
RULHQWDWLRQ PLQLPXP PD[LPXP UDQJH DQG ILQLDO YDOXH 7KH LQLWLDO YDOXH LV VHW WR  LQ WKH
SURJUHVV EDU DQG WKH VDPH DSSOLHV WR VOLGHU WRR :KHQ ZH PRYH WKH VOLGHU XS RU GRZQ WKH
SURJUHVV EDU JHWV XSGDWHG ZLWK D VOLGHU YDOXH /HW XV VHH WKH FRGH DQG LWV RXWSXW
Comp-U-Learn

13

Advanced Java Programming

Example 1.5:
import
import
import
import
import

java.awt.*;
java.awt.event.*;
javax.swing.*;
javax.swing.event.*;
javax.swing.border.*;

public class slider extends Frame {


JTabbedPane tabbedPane = new JTabbedPane();
JPanel barPanel = new JPanel();
JSlider slider = new JSlider(JSlider.VERTICAL, 0, 100, 60);
JProgressBar progressBar = new JProgressBar();
JPanel[] panels = {barPanel};
public slider()
{
super (Slide Bar Program);
addWindowListener(new WindowHandler());
String[] tabs = {Slider Bars};
String[] tabTips = {A Slider and a progress Bar};
slider.setMajorTickSpacing(10);
slider.setMinorTickSpacing(5);
slider.setPaintTicks(true);
slider.addChangeListener(new SliderHandler());
progressBar.setOrientation(JProgressBar.HORIZONTAL);
progressBar.setMinimum(0);
progressBar.setMaximum(100);
progressBar.setValue(60);
progressBar.setBorderPainted(true);
barPanel.add(new JLabel(Slider));
barPanel.add(slider);
barPanel.add(new JLabel(Progress Bar));
barPanel.add(progressBar);
for(int i=0;i<tabs.length;i++)
{
panels[i].setBackground(Color.red);
panels[i].setBorder(new TitledBorder(tabTips[i]));
tabbedPane.addTab(tabs[i],null,panels[i],tabTips[i]);
}
add(Center,tabbedPane);
setSize(500,500);
setBackground(Color.yellow);
show();
}
public class WindowHandler extends WindowAdapter {
public void windowClosing(WindowEvent e) {

14

Comp-U-Learn

Swing in Java
System.exit(0);
}
}
public static void main(String args[]) {
slider s1 = new slider();
}
public class SliderHandler implements ChangeListener {
public void stateChanged(ChangeEvent e) {
progressBar.setValue(slider.getValue());
}
}
}

7KH RXWSXW RI WKH DERYH SURJUDP LV

Fig. 1.5

Image List

/HW XV VHH DQRWKHU SURJUDP +HUH ZH DUH DERXW WR H[SORUH WKH OLVW FRQWUROV 7KH OLVW FRQWDLQV
LPDJHV 7KH LPDJHV DUH FUHDWHG XVLQJ LPDJH,FRQ FODVV E\ SDVVLQJ WKH 85/V RI WKH *,) ILOHV
+HUH ZH KDYH WKH LPDJHV LQYHQWRU\ YLGHR VFKRRO DQG PHPEHUV VWRUHG LQ &?MGN?ELQ $Q
LPDJH LFRQ DUUD\ FRQVLVWV RI WKH DERYH IRXU LPDJHV $ OLVW LV FUHDWHG XVLQJ -OLVW FODVV DQG WKH OLVW
Comp-U-Learn

15

Advanced Java Programming

ZLOO FRQWDLQ WKH LPDJHV LQ WKH LFRQ DUUD\ 7KH KHLJKW RI WKH LFRQ OLVW LV VHW WR  XVLQJ WKH
PHWKRG VHW)L[HG&HOO+HLJKW 7KH OLVW LV DGGHG WR WKH SDQHO /LVW3DQHO 7KH IROORZLQJ FRGH DQG
WKH RXWSXW ZLOO JLYH FOHDUHU XQGHUVWDQGLQJ RI KRZ LW ZRUNV $ WDEEHG SDQH LV FUHDWHG XVLQJ
-7DEEHG3DQH 7KLV LV QRWKLQJ EXW DQ DUUD\ RI SDQHOV $ SDQHO DUUD\ LV FUHDWHG XVLQJ -3DQHO DQG
WKH SDQHOV DUH DGGHG WR WKH WDEEHG SDQH DORQJ ZLWK WKH WDE DQG D WRRO WLS IRU WKH WDE 7KH
EDFNJURXQG FRORU IRU WKH SDQHOV DUH VHW XVLQJ VHW%DNFJURXQG DQG ERUGHUV DUH DSSOLHG WRR 7KH
IROORZLQJ DUH WKH FRGH VHJPHQW DQG WKH RXWSXW RI WKH DERYH SURJUDP
Example 1.6:
import
import
import
import
import
public

java.awt.*;
java.awt.event.*;
javax.swing.*;
javax.swing.event.*;
javax.swing.border.*;
class list extends Frame {

JTabbedPane tb = new JTabbedPane();


JPanel lpanel = new JPanel();
JPanel[] panels = {lpanel};
Icon i1 = new ImageIcon(videos.gif);
Icon i2 = new ImageIcon(school.gif);
Icon i3 = new ImageIcon(invntory.gif);
Icon i4 = new ImageIcon(members.gif);
Icon[] leaves = {i1, i2, i3, i4};
JList mylist = new JList(leaves);
public list() {
super(List Box Display);
addWindowListener(new WindowHandler());
String[] tabs = {Icon List};
String[] tabTips = {An Image List Control};
mylist.setFixedCellHeight(100);
lpanel.add(mylist);
for(int i=0;i<tabs.length;i++) {
panels[i].setBackground(Color.orange);
panels[i].setBorder(new TitledBorder(tabTips[i]));
tb.addTab(tabs[i],null,panels[i],tabTips[i]);
}
add(Center,tb);
setSize(500,500);
setBackground(Color.black);
show();
}

16

Comp-U-Learn

Swing in Java

public static void main(String args[]) {


list l = new list();
}
public class WindowHandler extends WindowAdapter {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}
}

7KH RXWSXW RI WKH DERYH SURJUDP LV VKRZQ EHORZ

Fig. 1.6

Tables

/HW XV VHH DQRWKHU SURJUDP +HUH ZH DUH GLVSOD\LQJ D WDEOH ZLWK  URZV DQG  FROXPQV 7KH
SURGXFW ,G 'HVFULSWLRQ RI WKH SURGXFW DQG LWV SULFH IRUP WKH FROXPQV 6DPSOH GDWD DUH HQWHUHG
WR VKRZ VRPH SURGXFWV DQG WKHLU SULFHV ,Q WKLV SURJUDP WKH LQWHU FHOOV IDFLQJ LV VHW WR  SL[HOV
ERUGHU 7KH SURJUDP LV TXLWH VLPSOH $ WDEOH LV DGGHG WR WKH SDQHO 7KH YDOXHV IRU WKH URZV DQG
FROXPQV DUH FUHDWHG XVLQJ 6WULQJ DUUD\ 7KH VHW6L]H PHWKRG LV XVHG WR VHW WKH VL]H RI WKH
ZLQGRZ DQG VHW WKH EDFNJURXQG XVLQJ VHW%DFNJURXQG PHWKRG 7KH SDQHO LV GLVSOD\HG XVLQJ
WKH VKRZ PHWKRG 7KH SURJUDP LV PHQWLRQHG KHUHXQGHU
Comp-U-Learn

17

Advanced Java Programming

Example 1.7:
import
import
import
import
import

java.awt.*;
java.awt.event.*;
javax.swing.*;
javax.swing.event.*;
javax.swing.border.*;

public class table extends Frame {


JTabbedPane tb = new JTabbedPane();
JPanel lpanel = new JPanel();
JPanel[] panels = {lpanel};
String[] columns = {Product ID, Description, Price};
Object[][] cells = {columns,{P001, Ice Cream, Rs.250},
{P002, Barbie Dolls,Rs. 500"},
{P003, Rifles, Rs. 350}};
JTable table = new JTable (cells, columns);
public table() {
super(Table Display);
addWindowListener(new WindowHandler());
String[] tabs = {Table};
String[] tabTips = {A Sample Table};
for(int i=0;i<tabs.length;i++) {
panels[i].setBackground(Color.blue);
panels[i].setBorder(new TitledBorder(tabTips[i]));
tb.addTab(tabs[i],null,panels[i],tabTips[i]);
}
lpanel.add(table);
add(Center,tb);
setSize(400,400);
setBackground(Color.green);
show();
}
public static void main(String args[]) {
table t = new table();
}
public class WindowHandler extends WindowAdapter {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}
}

18

Comp-U-Learn

Swing in Java

7KH RXWSXW LV DV VKRZQ EHORZ

Fig. 1.7

Drawing Objects

/HW XV VHH D SURJUDP WKDW ZLOO GLVSOD\ D UHFWDQJOH D UHFWDQJOH ZLWK FXUYHG HGJHV DQ RYDO D
UHFWDQJOH ILOOHG ZLWK RUDQJH DQ RYDO ILOOHG ZLWK RUDQJH LQWHULRU D UHFWDQJOH ZLWK FXUYHG HGJHV DQG
ILOOHG ZLWK RUDQJH LQWHULRU D ' UHFWDQJOH ZLWK UDLVHG DSSHDUDQFH DQG D ' UHFWDQJOH ZLWK
VXQNHQ DSSHDUDQFH 7KH GUDZ'UHFW DFFHSWV WKH SL[HO FRRUGLQDWHV KHLJKW ZHLJKW DQG D
ERROHDQ YDOXH UHIHUULQJ ZKHWKHU WKH UHFWDQJOH VKRXOG EH UDLVHG RU VXQNHQ 7KH YDOXH WUXH ZLOO
PDNH WKH UHFWDQJOH DSSHDU DERYH WKH ZLQGRZ DQG IDOVH ZLOO PDNH LW SXVKHG LQ 7KH PHWKRG
GUDZ5RXQG5HFW DFFHSWV WKH SL[HO FRRUGLQDWHV KHLJKW ZLGWK KRUL]RQWDO DQG YHUWLFDO GLDPHWHU
RI WKH DUFV DW WKH FRUQHU 7KH PHWKRG VHW&RORU LV XVHG WR VHW WKH ERUGHU FRORU RI WKH JUDSKLFV
,Q WKLV SURJUDP ZH KDYH XVHG WKLV PHWKRG WZLFH ,Q WKH ILUVW FDVH WKH PHWKRG DFFHSWV EOXH
FRORU DQG KHQFH WKH RXWSXW RI WKH GUDZ5HFW  GUDZ5RXQG5HFW  GUDZ2YDO  GUDZ/LQH 
GUDZ3RO\JRQ DUH LQ EOXH FRORU 7KHQ WKH YDOXH LV FKDQJHG WR RUDQJH +HQFH DOO WKH ILOO REMHFWV
DUH ILOOHG ZLWK RUDQJH FRORU
Example 1.8:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class shapes extends JPanel {
public void paintComponent(Graphics g) {
super.paintComponent(g);

Comp-U-Learn

19

Advanced Java Programming


g.setColor(Color.blue);
g.drawRect(20,30,100,70);
g.drawLine(180,220,300,270);
g.drawRoundRect(140,40,80,50,15,15);
g.drawOval(30,120,100,40);
Polygon p = new Polygon();
p.addPoint(320,320);
p.addPoint(320,390);
p.addPoint(400,400);
g.drawPolygon(p);
g.setColor(Color.orange);
g.fillRect(320,30,100,70);
g.fillRoundRect(70,220,80,50,15,15);
g.fill3DRect(120,300,100,30,true);
for(int i=1;i<=7;i++)
g.draw3DRect(120-i,300-i,100+2*(i-1),30+2*(i-1),true);
g.fill3DRect(120,370,100,30,false);
for(int i=1;i<=7;i++)
g.draw3DRect(120-i,370-i,100+2*(i-1),30+2*(i-1),true);
g.fillOval(200,130,100,40);
}
}
class frame extends JFrame {
public frame() {
setTitle(Drawing Shapes);
setSize(500,500);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
Container con = getContentPane();
con.add(new shapes());
}
}
public class diagram
{
public static void main(String args[]) {
JFrame fr = new frame();
fr.show();
}
}

20

Comp-U-Learn

Swing in Java

7KH RXWSXW RI WKH SURJUDP LV VKRZQ EHORZ

Fig 1.8

JScrollBar

7KH -6FUROO%DU FODVV LV D VXEFODVV RI -FRPSRQHQW WKDW SURYLGHV D EDVLF VFUROOEDU ,W LPSOHPHQWV
WKH DYDDZW$GMXVWDEOH DQG MDYD[DFFHVVLELOLW\ $FFHVVLEOH LQWHUIDFHV 7KH 6FUROOEDU SURYLGHV IRU
KRUL]RQWDO VFUROOLQJ $ YHUWLFDO VFUROO EDU LV XVHG IRU YHUWLFDO VFUROOLQJ /HW XV VHH D SURJUDP WKDW
XVHV VFUROO EDU +HUH LQ WKLV SURJUDP ZH XVH WKH FRORU FRGH FRPELQDWLRQ IRU LPSOHPHQWLQJ WKH
EDFNJURXQG FRORU RI WKH 3DQHO 7KHUH DUH WKUHH VFUROOEDUV IRU UHG EOXH DQG JUHHQ :KHQ ZH
VFUROO WKH DSSURSULDWH FRORU FRGH FRPELQDWLRQ LV XVHG WR JLYH WKH EDFNJURXQG FRORU RI WKH SDQHO
7KH IROORZLQJ JLYHV WKH FRGH IRU WKH SURJUDP 7KHUH DUH WKUHH VFUROO EDUV DQG  ODEHOV WR QDPH
WKH WKUHH VFUROO EDUV 7KH VFUROO EDUV KDYH DGMXVW PHQWOLVWHQHU LQWHUIDFH 7KH VFUROO EDUV KDYH
KRUL]RQWDO DGMXVWPHQW :KHQ ZH GUDJ WKH KRUL]RQWDO VFUROO EDUV WKH YDOXH LV UHWULHYHG DQG
GLVSOD\HG LQ WKH /DEHO 7KH VFUROO EDUV DQG WKH ODEHOV DUH DYDLODEOH LQ D VHSDUDWH SDQHO 7KHUH LV
DQRWKHU SDQHO FDOOHG FRORU3DQHO ZKRVH EDFNJURXQG FRORU ZLWK WKH YDOXHV RI 5*% DUH LQ WKH
VFUROO EDU
Comp-U-Learn

21

Advanced Java Programming

Example 1.9:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ColorSelect extends JFrame
implements AdjustmentListener
private JLabel redLabel;
private JLabel greenLabel;
private JLabel blueLabel;
private JScrollBar red;
private JScrollBar green;
private JScrollBar blue;
private JPanel colorPanel;
{

public ColorSelect()
{ setTitle(ColorSelect);
setSize(300, 200);
addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e)
{ System.exit(0);
}
} );
Container contentPane = getContentPane();
JPanel p = new JPanel();
p.setLayout(new GridLayout(3, 2));
p.add(redLabel = new JLabel(Red 0));
p.add(red = new JScrollBar(Adjustable.HORIZONTAL,
0, 0, 0, 255));
red.setBlockIncrement(16);
red.addAdjustmentListener(this);
p.add(greenLabel = new JLabel(Green 0));
p.add(green = new JScrollBar(Adjustable.HORIZONTAL,
0, 0, 0, 255));
green.setBlockIncrement(16);
green.addAdjustmentListener(this);
p.add(blueLabel = new JLabel(Blue 0));
p.add(blue = new JScrollBar(Adjustable.HORIZONTAL,
0, 0, 0, 255));
blue.setBlockIncrement(16);
blue.addAdjustmentListener(this);
contentPane.add(p, South);
colorPanel = new JPanel();
colorPanel.setBackground(new Color(0, 0, 0));
contentPane.add(colorPanel, Center);
}

22

Comp-U-Learn

Swing in Java

public void adjustmentValueChanged(AdjustmentEvent evt)


{ redLabel.setText(Red + red.getValue());
greenLabel.setText(Green + green.getValue());
blueLabel.setText(Blue + blue.getValue());
colorPanel.setBackground(new Color(red.getValue(),
green.getValue(), blue.getValue()));
colorPanel.repaint();
}
public static void main(String[] args)
{ Frame f = new ColorSelect();
f.show();
}
}

7KH RXWSXW RI WKH SURJUDP LV VKRZQ EHORZ

Fig. 1.9

JRadioButton

,Q $:7 UDGLR EXWWRQV DUH FKHFNER[HV WKDW EHORQJ WR WKH VDPH &KHFNER[*URXS ZKLFK HQVXUH
WKDW RQO\ RQH &KHFNER[ LV VHOHFWHG DW D WLPH 6ZLQJ KDV D VHSDUDWH ZLGJHW FDOOHG -UDGLR%XWWRQ
(DFK -UDGLR%XWWRQ LV DGGHG WR D %XWWRQ*URXS VR WKH JURXS EHKDYHV DV D VHW RI UDGLREXWWRQV
/LNH &KHFNER[*URXS %XWWRQ*URXS LV D IXQFWLRQDO REMHFW WKDW KDV QR YLVXDO UHSUHVHQWDWLRQ 7KH
IROORZLQJ SURJUDP ZLOO GLVSOD\ WKUHH UDGLR EXWWRQV 9DQQLOOD 6WUDZEHUU\ DQG &DVVDWWD 7KHUH LV
D ODEHO FDOOHG LFHFUHDP 7KH IROORZLQJ SURJUDP ZLOO GHPRQVWUDWH WKH XVDJH RI UDGLR EXWWRQV
Comp-U-Learn

23

Advanced Java Programming

Example 1.10:
import
import
import
import

javax.swing.*;
javax.swing.event.*;
java.awt.*;
java.awt.event.*;

class radiopanel extends JPanel


{
public radiopanel()
{
setLayout(new GridLayout(4,1));
JRadioButton rb;
ButtonGroup bg=new ButtonGroup();
JLabel l=new JLabel(Ice creams);
l.setFont(new Font(Times New Roman,Font.BOLD,12));
add(l);
rb=new JRadioButton(Vanilla);
add(rb);
bg.add(rb);
rb.setSelected(true);
rb=new JRadioButton(Cassatta);
add(rb);
bg.add(rb);
rb=new JRadioButton(Strawberry);
add(rb);
bg.add(rb);
}}
class ourframe extends JFrame
{
public ourframe()
{
setTitle(Sample Frame Window);
setSize(300,500);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
Container con=getContentPane();
con.add(new radiopanel());

24

Comp-U-Learn

Swing in Java
}}
public class Radio
{
public static void main(String args[])
{
JFrame fr=new ourframe();
fr.show();
}}

7KH RXWSXW RI WKH SURJUDP LV VKRZQ DV IROORZV

Fig 1.10
Summary
In this session, we learnt about the basic concepts of Java Foundation Classes, Swing
components, Swing Component hierarchy and some methods in those classes. We
tried some Swing components like Button, Toggle Button, Slider, Progress Bar, Table
and Image List. Then we also wrote a program, which enabled us to draw some
geometric figures. The difference between AWT and Swing is only a hairline. The
event handling in Swing is the same as in AWT. However, swing provides a rich
source of components and other added features. The major difference lies in the
usage of canvas in AWT. Only we can draw on the canvas area. The method paint() is
substituted by paintComponent() in Swings. Here, we can draw on any Swing
Component not essentially on a canvas. We will learn about more Swing components
in the next session.

Comp-U-Learn

25

Advanced Java Programming

Going Over It Again


I. Fill in the Blanks








6ZLQJ FRQVLVWV RI BBBBBBBBBBBB SDFNDJHV


BBBBBBBBBBBBLV WKH WRS OHYHO FODVV LQ 6ZLQJ &RPSRQHQW KLHUDUFK\
7KH *8, FRQWUROV RI 6ZLQJ KDYH RULJLQDWHG IURP BBBBBBBBBBBB
BBBBBBBBBBBB FODVV KDQGOHV 7DEEHG SDQHV
BBBBBBBBBBBB PHWKRG LV XVHG IRU VHWWLQJ WKH FRORU RI WKH SDQHOV
BBBBBBBBBBBB PHWKRG LV XVHG WR GLVSOD\ SDQHOV RQ WKH VFUHHQ

II. State True or False








6ZLQJ FODVVHV DUH SODFHG LQ -DYD SDFNDJH


6ZLQJ FRPSRQHQWV DSSHDU IDVWHU RQ WKH XVHUV VFUHHQ
6ZLQJ FRPSRQHQWV FDQ EH XVHG ZLWK -'.  HYHQW PRGHO
)UDPH LV DQ H[DPSOH RI FRQWDLQHU
6ZLQJ FRPSRQHQWV GHSHQG RQ WKH QDWLYH ZLQGRZ SODWIRUP
6ZLQJ FRPSRQHQWV DUH SODFHG LQ -DYD SDFNDJH

III. One line Answers






26

:ULWH VKRUW QRWHV RQ 6ZLQJ


'HILQH SOXJJDEOH /RRN )HHO IHDWXUH RI 6ZLQJ
/LVW WKH GLVDGYDQWDJHV RI XVLQJ 6ZLQJ
/LVW WKH $3,V LQFOXGHG ZLWK -)&

Comp-U-Learn

Session 2

Swing Component

On Completion of this Session


you will be able to understand...

) Windows and Borders in Swing


) Different types of JOptionPane methods
) Input Dialog Box and its usage
) Implementing JMenu and Jtree
) Pluggable Look and Feel
) Using JComboBox

In This Session...

Introduction

Windows

Borders

Layouts

JoptionPane

Input Dialog Box

Jlabel

Menus

Jtree

Look and Feel

Timer

JComboBox

Swing Components

Introduction
,Q WKH SUHYLRXV VHVVLRQ ZH OHDUQW DERXW VRPH RI WKH EDVLF FRQFHSWV RI 6ZLQJV ,Q WKLV VHVVLRQ ZH
ZLOO OHDUQ DERXW VRPH PRUH QHZ FRQWUROV &RYHULQJ DOO 6ZLQJ FRQWUROV LQ RQH VHVVLRQ LV QRW
SUDFWLFDOO\

SRVVLEOH

+RZHYHU

ZH

ZLOO

VHH

WKH

LPSRUWDQW

FRQWUROV

6LQFH

DOO

WKH

6ZLQJ

FRPSRQHQWV DUH PRVWO\ H[WHQVLRQV RI $:7 ZH FDQ XVH DOO WKHVH FRPSRQHQWV LQ WKH VDPH
IDVKLRQ DV ZH XVHG HDUOLHU EXW IRU VRPH VPDOO YDULDWLRQV EHFDXVH RI WKH H[WHQGHG XVHU LQWHUIDFH
$OVR WKH KDQGOLQJ RI HYHQWV LV DOVR D ELW GLIIHUHQW :H ZLOO VHH WKHP LQ GHWDLO LQ WKLV VHVVLRQ E\
XVLQJ VRPH H[DPSOHV

Windows
/LNH $:7 6ZLQJ DOVR SURYLGHV D ZLQGRZ FODVV KLHUDUFK\ 6ZLQJV ZLQGRZ FODVVHV DUH H[WHQVLRQV
RI WKH $:7 :LQGRZ FODVV KLHUDUFK\ 7KH -:LQGRZ FODVV H[WHQGV WKH $:7 :LQGRZ FODVV
-)UDPH FODVV H[WHQGV IURP $:7 )UDPH FODVV ,Q WKH VDPH ZD\ -'LDORJ FODVV H[WHQGV WKH $:7
'LDORJ FODVV 7KH -:LQGRZ -)UDPH DQG -'LDORJ FODVVHV GLIIHU IURP WKHLU $:7 FRXQWHUSDUWV LQ
WKDW WKH\ XVH D VHSDUDWH FRQWHQW SDQH IRU DGGLQJ DQG OD\LQJ RXW *8, FRPSRQHQWV 7KLV FRQWHQW
SDQH LV D &RQWDLQHU REMHFW WKDW LV DFFHVVHG YLD WKH JHW&RQWHQW3DQH PHWKRG 7KH FRQWHQW SDQH
LV D SDUW RI D -URRW3DQH REMHFW WKDW FRQWDLQV RWKHU SDQHV XVHG IRU RYHUOD\LQJ FRPSRQHQWV DQG
LQWHUFHSWLQJ PRXVH DQG NH\ERDUG HYHQWV

Borders
-DYD[VZLQJERUGHU SDFNDJH SURYLGHV WKH %RUGHU LQWHUIDFH ZKLFK GHILQHV WKH PHWKRGV WKDW QHHG
WR EH LPSOHPHQWHG E\ DOO ERUGHU FODVVHV 7KH $EVWUDFW%RUGHU FODVV LPSOHPHQWV WKH %RUGHU
LQWHUIDFH DQG LV WKH VXSHUFODVV RI WKH 6ZLQJ ERUGHU FODVVHV ,WV VXEFODVVHV LQFOXGH

BevelBorder
CompoundBorder
EmptyBorder
EtchedBorder
LineBorder
MatteBorder
SoftBevelBorder
TitledBorder

A border that is beveled and raised or lowered


A border consisting of multiple other borders
An empty border used to provide margins.
A border that is etched with highlight and shadow colors.
A border that draws a line around a component
A border that comprises of an image or color
A beveled border with softened corners.
A boxed border with a title.

Layouts
6ZLQJ &RQWDLQHUV VXSSRUW DOO RI WKH $:7 OD\RXWV LQFOXGLQJ WKH QXOO OD\RXW ,Q DGGLWLRQ WKH
IROORZLQJ OD\RXWV DUH VXSSRUWHG E\ 6ZLQJ

Comp-U-Learn

31

Advanced Java Programming

BoxLayout lays out components in a box like fashion along the x-axis or y-axis
RootPane.RootLayout Used to layout JRootPane objects
OverlayLayout Allows components to be laid out in an overlapping fashion
ScrollPaneLayout Automatically created, managed and used by ScrollPane
objects
SpringLayout Used to lay out components in terms of relative positions, without
determining component sizes.
ViewportLayout Defines the layout used by a JViewport object.

JOptionPane
7KH -2SWLRQ3DQH FODVV GHDOV ZLWK SUHGHILQHG GLDORJ ER[HV FRQWDLQHG LQ -)& -2SWLRQ3DQH FODVV
LV XVHG WR

Display message dialog boxes


Display and process confirmation dialog boxes
Display and process input dialog boxes
Display and process selection dialog boxes
Display and run Actions
Use internal frame versions of the dialog boxes.

7KLV FODVV SURYLGHV D UREXVW GLDORJ ER[ IUDPHZRUN ,W FRQWDLQV VWDWLF PHWKRGV IRU GLVSOD\LQJ
VLPSOH GLDORJ ER[HV WR GLVSOD\ LQIRUPDWLRQ RU SURPSW WKH XVHU IRU LQSXW $OO -2SWLRQ3DQH GLDORJ
ER[HV DUH PRGDO GLDORJ ER[HV %DVLFDOO\ WKHUH DUH WZR W\SHV RI GLDORJ ER[HV 0RGDO GLDORJ ER[
DQG 0RGHOHVV 'LDORJ %R[ $ 0RGDO 'LDORJ %R[ UHPDLQV RQ WKH VFUHHQ DQG UHVWUDLQV XVHU
LQWHUIDFH ZLWK RWKHU SDUWV RI WKH DSSOLFDWLRQ WLOO XVHU LQWHUDFWLRQ ZLWK WKH GLDORJ ER[ LV RYHU 8VHU
FDQQRW LQWHUDFW ZLWK UHVW RI WKH DSSOLFDWLRQ ZLWKRXW DQVZHULQJ WKH GLDORJ ER[ )RU H[DPSOH )LOH
2SHQ )LOH 6DYH GLDORJ ER[HV LQ D ZLQGRZ DSSOLFDWLRQ ,Q D 0RGHOHVV 'LDORJ %R[ LW LV SRVVLEOH
WR LQWHUDFW ZLWK WKH RWKHU SDUWV RI WKH DSSOLFDWLRQ HYHQ WKRXJK WKH GLDORJ ER[ UHPDLQV RQ WKH
VFUHHQ )RU H[DPSOH D )LQG'LDORJ %R[ 5HSODFH 'LDORJ %R[ $ -2SWLRQ3DQH GLDORJ ER[ FRQVLVWV
RI IRXU UHJLRQV  WKH LFRQ WKH PHVVDJH DUHD WKH LQSXW DUHD DQG WKH RSWLRQ EXWWRQ DUHD (DFK RI
WKHVH UHJLRQV PLJKW RU PLJKW QRW EH VKRZQ 7KH H[DFW VL]H DQG SODFHPHQW IRU WKHVH UHJLRQV

LV

GHSHQGHQW RQ WKH ORRN DQG IHHO EHLQJ XVHG


&RQYHQLHQFH PHWKRGV DUH SURYLGHG LQ WKH -2SWLRQ3DQH FODVV WR GLVSOD\ WKH SUHGHILQHG GLDORJ
ER[HV LQ WKH -2SWLRQ3DQH FODVV 7KHVH PHWKRGV FRQIRUP WR WKH IROORZLQJ QDPLQJ FRQYHQWLRQ
6KRZ;;;'LDORJ
:KHUH ;;; LV WKH W\SH RI GLDORJ ER[ WR GLVSOD\ 3RVVLEOH YDOXHV IRU WKH W\SH DUH &RQILUP ,QSXW
0HVVDJH DQG 2SWLRQ 7KH SDUDPHWHUV WR WKH VKRZ PHWKRG DUH GHSHQGHQW RQ WKH W\SH RI GLDORJ
ER[ 7KHUH DUH VRPH FRPPRQ SDUDPHWHUV ZKLFK DUH DSSOLFDEOH WR PRVW W\SHV RI 'LDORJ %R[HV
7KH -2SWLRQ3DQH KDV IRXU VWDWLF PHWKRGV WR VKRZ WKHVH VLPSOH GLDORJV

32

Comp-U-Learn

Swing Components

ShowMessageDialog
ShowConfirmDialog
ShowOptionDialog
ShowInputDialog

Show a message and wait for the user to click OK.


Show a message and get a confirmation like OK or
Cancel
Show a message and get a user option from a set of
options
Show a message and get one line of user input

$V ZH KDYH DOUHDG\ VHHQ WKH LFRQ RQ WKH OHIW KDQG VLGH GHSHQGV RQ WKH PHVVDJH 7KHUH DUH ILYH
PHVVDJH W\SHV

ERROR_MESSAGE
INFORMATION_MESSAGE
WARNING_MESSAGE
QUESTION_MESSAGE
PLAIN_MESSAGE

7KH 3/$,1B0(66$*( W\SH KDV QR LFRQ )RU HDFK RI WKH GLDORJ ER[HV WKHUH LV DOVR D PHWKRG
WKDW DOORZV WR VXSSO\ DQ LFRQ LQVWHDG )RU HDFK GLDORJ W\SH WKH PHVVDJH VSHFLILHG FDQ EH D VWULQJ
DQ LFRQ D XVHU LQWHUIDFH FRPSRQHQW RU DQ\ RWKHU REMHFW 7KH PHVVDJH REMHFW LV GLVSOD\HG DV
IROORZV

String
Icon
Component
Object[]

draw the string


show the icon
show the component
Show all objects in the array.

7KH EXWWRQV RQ WKH ERWWRP GHSHQG RQ WKH GLDORJ W\SH DQG WKH RSWLRQ W\SH :KHQ FDOOLQJ
VKRZ0HVVDJH'LDORJ DQG VKRZ,QSXW'LDORJ QRUPDOO\ HLWKHU DQ 2. %XWWRQ RU 2.&DQFHO 
UHVSHFWLYHO\ DUH XVHG :KHQ FDOOLQJ VKRZ&RQILUP'LDORJ WKH IROORZLQJ RSWLRQV DUH DYDLODEOH
'()$8/7B237,21
<(6B12B237,21
<(6B12B&$1&(/B237,21
2.B&$1&(/B237,21
7KH UHWXUQ YDOXHV RI WKHVH IXQFWLRQV DUH DV IROORZV

ShowMessageDialog
ShowConfirmDialog
ShowOptionDialog
ShowInputDialog

None
An integer representing the chosen option
An integer representing the chosen option
The stringthat the user supplied or selected
Comp-U-Learn

33

Advanced Java Programming


7KH VKRZFRQILUP'LDORJ DQG VKRZ2SWLRQ'LDORJ UHWXUQ LQWHJHUV WR LQGLFDWH ZKLFK EXWWRQ WKH
XVHU FKRVH )RU WKH RSWLRQ GLDORJ

WKLV LV VLPSO\ WKH LQGH[ RI WKH FKRVHQ RSWLRQ RU WKH YDOXH

&/26('B237,21 LI WKH XVHU FORVHG WKH GLDORJ LQVWHDG RI FKRRVLQJ DQ RSWLRQ )RU WKH
FRQILUPDWLRQ GLDORJ WKH UHWXUQ YDOXH FDQ EH RQH RI WKH IROORZLQJ

OK_OPTION
CANCEL_OPTION
YES_OPTION
NO_OPTION
CLOSED_OPTION
,QVWDQFHV RI WKH -2SWLRQ3DQH FODVV ILUH 3URSHUW\&KDQJH(YHQW PHVVDJHV ZKHQ YDOXHV RI ERXQG
SURSHUWLHV FKDQJH 7KH IROORZLQJ WDEOH VKRZV D OLVW RI WKH 3URSHUW\ W\SHV RI -2SWLRQ3DQH

Property
ICON_PROPERTY
INITIAL_SELECTION_VALUE_PR
OPERTY
INITIAL_VALUE_PROPERTY
INPUT_VALUE_PROPERTY
MESSAGE_PROPERTY
MESSAGE_TYPE_PROPERTY
OPTION_TYPE_PROPERTY
OPTIONS_PROPERTY
SELECTION_VALUES_PROPERTY
VALUE_PROPERTY
WANTS_INPUT_PROPERTY

Setter Method
setIcon
setInitialSelectionValue

Getter Method
getIcon
getInitialSelectionValue

setInitialValue
setInputValue
setMessage
setMessageType
setOptionType
setOptions
setSelectionValues
setValue
setWantsInput

getInitialValue
getInputValue
getMessage
getMessageType
getOptionTyp
getOptions
Get SelectionValue
GetValue
GetWantsInput

/HW XV VHH D VLPSOH SURJUDP WKDW ZLOO GLVSOD\ D VLPSOH GLDORJ ER[ DV VKRZQ EHORZ

Fig. 2.1
34

Comp-U-Learn

Swing Components

Fig. 2.2
7KH FRGH IRU WKH DERYH SURJUDP LV DV IROORZV

Example 2.1:
import javax.swing.*;
public class options extends Object
{
public static void main(String args[])
{
JOptionPane.showMessageDialog(null,Simple Dialog Box);
JOptionPane.showMessageDialog(null,Error Dialog Box with
title,Title,JOptionPane.ERROR_MESSAGE);
System.exit(0);
}
}
,Q WKH DERYH SURJUDP ZH DUH GLVSOD\LQJ WZR VLPSOH GLDORJ ER[HV ,Q WKH ILUVW GLDORJ ER[ ZH DUH
VLPSO\ GLVSOD\LQJ D 0HVVDJH %R[ WKDW KDV WKH GHIDXOW WLWOH 0HVVDJH ,Q WKH VHFRQG GLDORJ ER[
ZH DUH GLVSOD\LQJ D GLDORJ ER[ WKDW KDV (UURU DV WLWOH $OVR WKH LFRQV GLVSOD\HG LQ WKHVH GLDORJ
ER[HV DOVR YDU\ ,Q WKH ILUVW FDVH LQIRUPDWLRQ LFRQ LV GLVSOD\HG ,Q WKH VHFRQG FDVH LFRQ IRU HUURU
PHVVDJH LV EHLQJ GLVSOD\HG
1RZ OHW XV VHH DQRWKHU SURJUDP

Example 2.2:
import javax.swing.*;
public class option extends Object
{
public static void main(String args[])
{
int result=JOptionPane.showConfirmDialog(null,Continue?,Give
your option,JOptionPane.YES_NO_OPTION);
switch(result)
{

Comp-U-Learn

35

Advanced Java Programming

case JOptionPane.YES_OPTION:
System.out.println(Yes Button);
break;
case JOptionPane.NO_OPTION:
System.out.println(No Button);
break;
case JOptionPane.CLOSED_OPTION:
System.out.println(Closed Button);
break;
}
System.exit(0);
}
}
7KH RXWSXW RI WKH DERYH SURJUDP LV VKRZQ EHORZ

Fig. 2.3
7KH RXWSXW RQ WKH FRQVROH LV VKRZQ DV IROORZV
 :KHQ <HV %XWWRQ LV FOLFNHG

C:\jdk1.2\bin>java option
<HV %XWWRQ
:KHQ 1R %XWWRQ LV FOLFNHG

C:\jdk1.2\bin>java option
1R %XWWRQ
 :KHQ WKH &ORVH %XWWRQ LV FOLFNHG E\ WKH XVHU WR WHUPLQDWH WKH GLDORJ ER[

C:\jdk1.2\bin>java option

36

Comp-U-Learn

Swing Components
&ORVHG %XWWRQ
+HUH D VLPSOH GLDORJ ER[ LV GLVSOD\HG RQ WKH VFUHHQ :KHQ WKH XVHU FOLFNV RQ DQ\ RSWLRQ
$SSURSULDWH 0HVVDJHV DUH GLVSOD\HG RQ WKH FRPPDQG SURPSW $ FORVHU ORRN WR WKH RXWSXW ZLOO
HQDEOH XV WR XQGHUVWDQG WKLV
1RZ ZH ZLOO VHH DQRWKHU SURJUDP WKDW ZLOO GLVSOD\ D ,QSXW'LDORJ %R[

Input Dialog Box


7KHUH FDQ EH VLWXDWLRQV ZKLFK PD\ ZDUUDQW WKH XVHU LQSXW DW WLPHV 7KH -2SWLRQ3DQH

FODVV

SURYLGHV WKH VKRZ,QSXW'LDORJ WR TXHU\ WKH XVHU IRU VLPSOH RQHOLQH LQSXW UHTXLUHPHQWV 7KH
GHIDXOW LFRQ LQ WKLV W\SH RI PHVVDJH ER[ LV 48(67,21B0(66$*( 7KH VKRZLQSXW'LDORJ
PHWKRG UHWXUQV D 6WULQJ FRQWDLQLQJ WKH WH[W HQWHUHG E\ WKH XVHU ,I WKH &DQFHO %XWWRQ LV FOLFNHG
RU WKH :LQGRZ LV FORVHG D QXOO6WULQJ LV UHWXUQHG ,I ZH FOLFN WKH 2. %XWWRQ ZLWKRXW HQWHULQJ
DQ\WKLQJ RQ WKH WH[W DUHD RI WKH GLDORJ ER[ DQ HPSW\ VWULQJ LV UHWXUQHG $QRWKHU ZD\ RI XVDJH LV
SDVVLQJ DQ DUUD\ RI REMHFWV WR WKH ,QSXW 'LDORJ %R[ $ OLVW RI RSWLRQV LV JLYHQ WR WKH XVHU WR EH
VHOHFWHG $Q REMHFW IURP WKH JLYHQ OLVW LV SURYLGHG ZKLFK EH VKRZQ DV WKH GHIDXOW VHOHFWLRQ 7KLV
REMHFW VKRXOG EH RQO\ IURP WKH OLVW 7KDW LV RQH RI WKH REMHFWV LQ WKH REMHFW DUUD\ LV XVHG DV D
GHIDXOW VHOHFWLRQ 7KH SUHVHQWDWLRQ RI WKH FKRLFH WR WKH XVHU LV QRW GHILQHG LQ WKH -)&
VSHFLILFDWLRQ ,W LV OHIW IRU WKH ORRN DQG IHHO LPSOHPHQWDWLRQ +RZHYHU HDFK RI WKH ORRN DQG IHHO
LPSOHPHQWDWLRQV FRQWDLQHG LQ WKH -)& XVH D -&RPER%R[ IRU SUHVHQWDWLRQ
,Q WKH IROORZLQJ SURJUDP LQLWLDOO\ DQ LQSXW GLDORJ ER[ LV GLVSOD\HG 7KLV DVNV IRU WKH XVHUV QDPH
DQG WKH QDPH HQWHUHG E\ WKH XVHU LV GLVSOD\HG RQ WKH FRPPDQG SURPSW 7KLV LV D QRUPDO LQSXW
ER[ WKDW KDV QR FKRLFHV DYDLODEOH ,Q WKH VHFRQG FDVH DQ ,QSXW %R[ LV GLVSOD\HG DORQJ ZLWK D OLVW
RI IORZHUV )URP WKH JLYHQ OLVW WKH GHIDXOW VHOHFWLRQ LV 5RVH 7KH XVHU FDQ VHOHFW DQ\ RWKHU
YDOXH DOVR 7KH VHOHFWHG LWHP LV GLVSOD\HG DW WKH FRPPDQG SURPSW 7KH FRGH DQG RXWSXW IRU WKLV
SURJUDP LV JLYHQ EHORZ ,Q WKLV SURJUDP DQ DUUD\ RI 6WULQJ LQVWDQFHV DUH FUHDWHG DQG LQLWLDOL]HG
$IWHU WKH XVHU GLVPLVVHV WKH GLDORJ ER[ WKH DSSOLFDWLRQ HFKRHV WKH XVHUV FKRLFH WR WKH FRQVROH
7KH GLDORJ ER[ GRHV QRW FRQWDLQ DQ\ LFRQ EHFDXVH WKH 3/$,1B0(66$*( W\SH LV XVHG DV D
SDUDPHWHU 7KH UHWXUQ YDOXH LV DQ 2EMHFW 7KH UHWXQH YDOXH ZLOO EH WKH REMHFW VHOHFWHG E\ WKH XVHU
ZKHQ KH FOLFNV RQ WKH 2. %XWWRQ ,I WKH XVHU FOLFNV HLWKHU WKH &DQFHO %XWWRQ RU :LQGRZ &ORVH
%XWWRQ WKH UHWXUQ YDOXH LV QXOO

Example 2.3:
import javax.swing.*;
public class input extends Object
{
public static void main(String args[])
{

Comp-U-Learn

37

Advanced Java Programming


String[]
flow={Rose,Lilly,Jasmine,Marigold,Tulip,Poppy,Zinna
,Dairy};
String ans=JOptionPane.showInputDialog(null,Enter your
Name,Test Input,JOptionPane.QUESTION_MESSAGE);
System.out.println(Your name is +ans);
Object sel=JOptionPane.showInputDialog(null,Select from the
flowers given,Flower
List,JOptionPane.PLAIN_MESSAGE,null,flow,flow[0]);
System.out.println(Your Favourite Flower from selection is
+sel);
System.exit(0);
}
}
2XWSXW RI WKH SURJUDP LV VKRZQ EHORZ

Fig. 2.4

Fig 2.5
7KH RXWSXW DW FRPPDQG SURPSW LV VKRZQ EHORZ

C:\jdk1.2\bin>java input

38

Comp-U-Learn

Swing Components
<RXU QDPH LV +DULVK &KDQG
<RXU )DYRULWH )ORZHU IURP VHOHFWLRQ LV 7XOLS

C:\jdk1.2\bin>java input
<RXU QDPH LV QXOO
<RXU )DYRULWH )ORZHU IURP VHOHFWLRQ LV QXOO

Custom Options Creation


,I WKH EXWWRQ FRPELQDWLRQV SURYLGHG E\ WKH SUHGHILQHG RSWLRQ FKRLFH FRQVWDQWV GRQW PHHW WKH
QHHGV RI D GLDORJ ER[ WKH VKRZ2SWLRQ'LDORJ PHWKRG LV SURYLGHG WR FXVWRPL]H WKH RSWLRQ
EXWWRQV FRQWDLQHG LQ WKH GLDORJ ER[ +HUH DOVR ZH SDVV DQ DUUD\ RI 2EMHFW LQVWDQFHV WKDW DUH
XVHG DV WKH RSWLRQV SUHVHQWHG WR WKH XVHU :H FDQ PDNH RQH RSWLRQ DV WKH GHIDXOW VHOHFWLRQ ,I
WKH LWHPV LQ WKH DUUD\ DUH &RPSRQHQWV WKH\ DUH XVHG GLUHFWO\ $Q LFRQ RSWLRQ LV SODFHG RQ D
-%XWWRQ LQVWDQFH DQG DGGHG WR WKH GLDORJ ER[ /HW XV VHH WKH XVDJH RI VKRZ2SWLRQ'LDORJ E\
XVLQJ DQ H[DPSOH

Example 2.4:
import javax.swing.*;
public class custom extends Object
{
public static void main(String args[])
{
String[] opt={Abort,Retry,Cancel,Ignore};
int choice=JOptionPane.showOptionDialog(null,Do you want to
debug the application,Application
Error,JOptionPane.YES_NO_CANCEL_OPTION+JOptionPane.DEFAULT_OPTIO
N,JOptionPane.ERROR_MESSAGE,null,opt,opt[3]);
switch(choice)
{
case 0:
System.out.println(Abort Chosen);
break;
case 1:
System.out.println(Retry Chosen);
break;
case 2:
System.out.println(Cancel Chosen);
break;
case 3:
System.out.println(Ignore Chosen);
break;
case JOptionPane.CLOSED_OPTION:
System.out.println(Dialog Closed);
break;
}
System.exit(0);
}
}

Comp-U-Learn

39

Advanced Java Programming


7KH RXWSXW RI WKH SURJUDP LV VKRZQ EHORZ

Fig 2.6
7KH RXWSXW VKRZQ LQ WKH FRPPDQG SURPSW LV DV IROORZV 

C:\jdk1.2\bin>javac custom.java
C:\jdk1.2\bin>java custom
$ERUW &KRVHQ 

C:\jdk1.2\bin>java custom
&DQFHO &KRVHQ 

C:\jdk1.2\bin>java custom
5HWU\ &KRVHQ
,Q WKH DERYH SURJUDP ZH DUH GLVSOD\LQJ D VLPSOH GLDORJ ER[ ZLWK WKH WLWOH DV $SSOLFDWLRQ
(UURU DQG WKH PHVVDJH 'R \RX ZDQW WR GHEXJ WKH DSSOLFDWLRQ 7KH GLDORJ ER[ KDV IRXU
EXWWRQV $ERUW 5HWU\ &DQFHO DQG ,JQRUH 7KHVH IRXU EXWWRQV DUH FXVWRP FUHDWHG 7KH EXWWRQ
QDPHV DUH VWRUHG DV D 6WULQJ DUUD\ DQG WKH GLDORJ ER[ LV FUHDWHG XVLQJ WKH VKRZ2SWLRQ'LDORJ
PHWKRG 7KH GHIDXOW VHOHFWLRQ LQ WKLV H[DPSOH LV ,JQRUH %XWWRQ 7KH UHWXUQ YDOXH RI WKLV PHWKRG
LV WKH EXWWRQ WKDW ZDV VHOHFWHG E\ WKH XVHU $SSURSULDWH PHVVDJHV DUH GLVSOD\HG RQ WKH FRQVROH
GHSHQGLQJ XSRQ WKH XVHUV VHOHFWLRQ
7KLV LV DOVR GLVSOD\HG DERYH IRU HDV\ UHIHUHQFH &DUH VKRXOG EH WDNHQ LQ WKLV SURJUDP EHFDXVH
DQ\ FKDQJH LQ WKH RUGHU RI REMHFWV LQ WKH 6WULQJ DUUD\ ZLOO SURGXFH KDSKD]DUG UHVXOWV 7KLV LV
EHFDXVH WKH VZLWFKFDVH XVHV WKH KLHUDUFK\ RI EXWWRQ LQ WKH 6WULQJ REMHFW DQG WKH DFWXDO UHIHUHQFH
RI WKH EXWWRQ 7KDW LV ZH DUH QRW XVLQJ WKH UHWXUQ YDOXHV DV <(6B237,21 12B237,21 RU
&/26('B237,21 UDWKHU DV  ZKLFK DUH QRWKLQJ EXW WKH LQGH[ YDOXH RI WKH LWHPV LQ WKH
DUUD\ +HQFH DQ\ FKDQJH LQ WKH LQGH[ VKRXOG KDYH D FRUUHVSRQGLQJ FKDQJH LQ WKH VZLWFK FDVH
VWDWHPHQW DOVR ,Q WKLV SURJUDP ZH KDYH IRXU EXWWRQV FDQ WKH <HV 1R &DQFHO
ZKLFK ZH UHQDPH DV $ERUW 5HWU\ FDQFHO DQG ,JQRUH

40

Comp-U-Learn

2. EXWWRQV

Swing Components
1RZ OHW XV VHH D FRPSOHWH SURJUDP WKDW ZLOO GLVSOD\ DOO WKH SRVVLEOH RSWLRQV LQ -2SWLRQ3DQH
+HUH LQ WKLV SURJUDP 7KH PHWKRGRORJ\ LV H[SODLQHG KHUHXQGHU

First choose the dialog type (message, confirmation, option or input)


Choose the icon (error, information, warning, question, none or custom)
Choose the message (String, icon, custom component, or a stack of them)
For a confirmation dialog, choose the option type (default, Yes/No,
Yes/No/cancel, or Ok/Cancel).
For an option dialog, choose the options (Strings, icons, or custom components)
and the default option.
For an input dialog, choose between a text field and a combo box.
Locate the appropriate method to call in the JOptionPane API.

Example 2.5:
import
import
import
import

java.awt.*;
java.awt.event.*;
javax.swing.*;
javax.swing.border.*;

class ButtonPanel extends JPanel


{ public ButtonPanel(String title, String[] options)
{ setBorder(BorderFactory.createTitledBorder
(BorderFactory.createEtchedBorder(), title));
setLayout(new BoxLayout(this,
BoxLayout.Y_AXIS));
group = new ButtonGroup();
for (int i = 0; i < options.length; i++)
{ JRadioButton b = new JRadioButton(options[i]);
b.setActionCommand(options[i]);
add(b);
group.add(b);
b.setSelected(i == 0);
}
}
String getSelection()
{ return group.getSelection().getActionCommand();
}
ButtonGroup group;
}
public class OptionDialogTest extends JFrame
implements ActionListener
{ public OptionDialogTest()
{ setTitle(OptionDialogTest);
setSize(600, 400);

Comp-U-Learn

41

Advanced Java Programming


addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e)
{ System.exit(0);
}
} );
JPanel gridPanel = new JPanel();
gridPanel.setLayout(new GridLayout(2, 3));
typePanel = new ButtonPanel(Type,
new String[]
{ Message,
Confirm,
Option,
Input
});
messageTypePanel = new ButtonPanel(Message Type,
new String[]
{ ERROR_MESSAGE,
INFORMATION_MESSAGE,
WARNING_MESSAGE,
QUESTION_MESSAGE,
PLAIN_MESSAGE
});
messagePanel = new ButtonPanel(Message,
new String[]
{ String,
Icon,
Component,
Other,
Object[]
});
optionTypePanel = new ButtonPanel(Confirm,
new String[]
{ DEFAULT_OPTION,
YES_NO_OPTION,
YES_NO_CANCEL_OPTION,
OK_CANCEL_OPTION
});
optionsPanel = new ButtonPanel(Option,
new String[]
{ String[],
Icon[],
Object[]
});
inputPanel = new ButtonPanel(Input,
new String[]
{ Text field,
Combo box
});

42

Comp-U-Learn

Swing Components

JPanel showPanel = new JPanel();


JButton showButton = new JButton(Show);
showButton.addActionListener(this);
showPanel.add(showButton);
gridPanel.add(typePanel);
gridPanel.add(messageTypePanel);
gridPanel.add(messagePanel);
gridPanel.add(optionTypePanel);
gridPanel.add(optionsPanel);
gridPanel.add(showPanel);
gridPanel.add(inputPanel);
Container contentPane = getContentPane();
contentPane.add(gridPanel, Center);
contentPane.add(showPanel, South);
}
public Object getMessage()
{ String s = messagePanel.getSelection();
if (s.equals(String))
return messageString;
else if (s.equals(Icon))
return messageIcon;
else if (s.equals(Component))
return messageComponent;
else if (s.equals(Object[]))
return new Object[]
{ messageString,
messageIcon,
messageComponent,
messageFont
};
else if (s.equals(Other))
return messageFont;
else return null;
}
public Object[] getOptions()
{ String s = optionsPanel.getSelection();
if (s.equals(String[]))
return new String[] { Yellow, Blue, Red };
else if (s.equals(Icon[]))
return new Icon[]
{ new ImageIcon(icecream.gif),
new ImageIcon(peach.gif),
new ImageIcon(peas.gif)
};
else if (s.equals(Object[]))
return new Object[]
{ messageString,
messageIcon,
messageComponent,
messageFont

Comp-U-Learn

43

Advanced Java Programming


};
else
return null;
}
public int getType(ButtonPanel panel)
{ String s = panel.getSelection();
try
{ Class cl = JOptionPane.class;
return cl.getField(s).getInt(cl);
}
catch(Exception e)
{ return -1;
}
}
public void actionPerformed(ActionEvent evt)
{ if (typePanel.getSelection().equals(Confirm))
JOptionPane.showConfirmDialog(this,
getMessage(),
Title,
getType(optionTypePanel),
getType(messageTypePanel));
else if (typePanel.getSelection().equals(Input))
{ if (inputPanel.getSelection().equals(Text field))
JOptionPane.showInputDialog(this,
getMessage(),
Title,
getType(messageTypePanel));
else
JOptionPane.showInputDialog(this,
getMessage(),
Title,
getType(messageTypePanel),
null,
new String[] { Yellow, Blue, Red },
Blue);
}
else if (typePanel.getSelection().equals(Message))
JOptionPane.showMessageDialog(this,
getMessage(),
Title,
getType(messageTypePanel));
else if (typePanel.getSelection().equals(Option))
JOptionPane.showOptionDialog(this,
getMessage(),
Title,
getType(optionTypePanel),
getType(messageTypePanel),
null,
getOptions(),
getOptions()[0]);
}
public static void main(String[] args)

44

Comp-U-Learn

Swing Components
{

JFrame f = new OptionDialogTest();


f.show();

}
private
private
private
private
private
private

ButtonPanel
ButtonPanel
ButtonPanel
ButtonPanel
ButtonPanel
ButtonPanel

typePanel;
messagePanel;
messageTypePanel;
optionTypePanel;
optionsPanel;
inputPanel;

private String messageString = Message;


private Icon messageIcon
= new ImageIcon(peach.gif);
private Font messageFont
= new Font(Serif, Font.PLAIN, 8);
private Component messageComponent
= new JPanel()
{ public void paintComponent(Graphics g)
{ super.paintComponent(g);
g.setFont(messageFont);
g.drawString(Component, 0, 8);
}
public Dimension getMinimumSize()
{ return new Dimension(12, 30);
}
};
}
7KH RXWSXW RI WKH SURJUDP LV VKRZQ LQ WKH )LJ 

Fig 2.7
Comp-U-Learn

45

Advanced Java Programming

Fig 2.8

JLabel
$ -/DEHO LV D VLQJOH ODEHO VLPLODU WR MDYDDZW/DEHO $GGLWLRQDO IXQFWLRQDOLW\ DUH DV IROORZV

Add an Icon
Set the vertical and horizontal position of text relative to Icon
Set the relative position of contents within component
/HW XV VHH D VLPSOH SURJUDP WKDW ZLOO GHPRQVWUDWH ODEHO

Example 2.6:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class label extends JPanel
{
public label()
{
JLabel l1=new JLabel(Our First label);
add(l1);
JLabel l2=new JLabel(Our Second Label);
Font f=new Font(Times New Roman,Font.BOLD+ Font.ITALIC,20);
l2.setFont(f);
Icon i=new
ImageIcon(c:/jdk1.2/demo/jfc/Java2D/images/boat.gif);
l2.setIcon(i);
l2.setHorizontalAlignment(JLabel.RIGHT);
add(l2);
}
}
class ourframe extends JFrame
{

46

Comp-U-Learn

Swing Components
public ourframe()
{
setTitle(Sample Frame Window);
setSize(300,500);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
Container con=getContentPane();
con.add(new label());
}
}
public class lab
{
public static void main(String args[])
{
JFrame fr=new ourframe();
fr.show();
}
}
7KH RXWSXW RI WKH SURJUDP GLVSOD\HG LV VKRZQ EHORZ

Fig. 2.9
,Q WKLV SURJUDP ZH DUH GLVSOD\LQJ WKH ODEHOV 7KH ILUVW ODEHO LV D VLPSOH ODEHO DQG WKH QH[W ODEHO LV
KLJKO\ VRSKLVWLFDWHG +HUH ZH DUH DWWDFKLQJ DQ ,PDJH WR WKH ODEHO

Comp-U-Learn

47

Advanced Java Programming

Menus
6ZLQJ PHQXV OLNH 6ZLQJ ZLQGRZV DUH DQDORJRXV WR WKHLU $:7 FRXQWHUSDUWV 7KH -0HQX%DU
-0HQX -0HQX,WHP -FKHFN%R[0HQX,WHP DQG -UDGLR%XWWRQ0HQX,WHP FODVVHV DUH XVHG LQ WKH
VDPH PDQQHU DV WKH $:7 0HQX%DU 0HQX 0HQX,WHP DQG &KHFN%R[0HQX,WHP FODVVHV 7KH
6ZLQJ 0HQX FODVVHV DUH DOO VXE FODVVHV RI -&RPSRQHQW FODVV +HQFH WKH 6ZLQJ PHQXV DUH DOO ILUVW
FODVV FRPSRQHQWV XQOLNH $:7 0HQXV DQG FDQ EH XVHG ZLWK DQ\ &RQWDLQHU FODVVHV 7KH
LPSRUWDQW IHDWXUH LQ 6ZLQJ PHQXV LV WKH FDSDELOLW\ WR XVH LFRQ LPDJHV LQ PHQXV $Q LPDJH FDQ
EH DGGHG WR D PHQX LWHP YLD LWV FRQVWUXFWRU 7KH IROORZLQJ SURJUDP FRQVWUXFWV D VDPSOH PHQX

Example 2.7:
import
import
import
import

java.awt.*;
java.awt.event.*;
javax.swing.*;
javax.swing.event.*;

public class MenuTest extends JFrame


implements ActionListener, MenuListener
{ public MenuTest()
{ setTitle(MenuTest);
setSize(400, 300);
addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e)
{ System.exit(0);
}
} );
JMenuBar mbar = new JMenuBar();
setJMenuBar(mbar);
JMenu fileMenu = new JMenu(File);
fileMenu.addMenuListener(this);
JMenuItem openItem = new JMenuItem(Open);
openItem.setAccelerator
(KeyStroke.getKeyStroke(KeyEvent.VK_O,
InputEvent.CTRL_MASK));
saveItem = new JMenuItem(Save);
saveItem.setAccelerator
(KeyStroke.getKeyStroke(KeyEvent.VK_S,
InputEvent.CTRL_MASK));
saveAsItem = new JMenuItem(Save As);
mbar.add(makeMenu(fileMenu,
new Object[]
{ New,
openItem,
null,
saveItem,
saveAsItem,

48

Comp-U-Learn

Swing Components
null,
Exit
},
this));
readonlyItem = new JCheckBoxMenuItem(Read-only);
ButtonGroup group = new ButtonGroup();
JRadioButtonMenuItem insertItem
= new JRadioButtonMenuItem(Insert);
insertItem.setSelected(true);
JRadioButtonMenuItem overtypeItem
= new JRadioButtonMenuItem(Overtype);
group.add(insertItem);
group.add(overtypeItem);
mbar.add(makeMenu(Edit,
new Object[]
{ new JMenuItem(Cut,
new ImageIcon(cut.gif)),
new JMenuItem(Copy,
new ImageIcon(copy.gif)),
new JMenuItem(Paste,
new ImageIcon(paste.gif)),
null,
makeMenu(Options,
new Object[]
{ readonlyItem,
null,
insertItem,
overtypeItem
},
this)
},
this));
JMenu helpMenu = new JMenu(Help);
helpMenu.setMnemonic(H);
mbar.add(makeMenu(helpMenu,
new Object[]
{ new JMenuItem(Index, I),
new JMenuItem(About, A)
},
this));
popup = makePopupMenu(
new Object[]
{ Cut,
Copy,
Paste
},
this);
getContentPane().addMouseListener(new MouseAdapter()

Comp-U-Learn

49

Advanced Java Programming


{

public void mouseReleased(MouseEvent evt)


{ if (evt.isPopupTrigger())
popup.show(evt.getComponent(),
evt.getX(), evt.getY());
}

});
}
public void actionPerformed(ActionEvent evt)
{ String arg = evt.getActionCommand();
System.out.println(arg);
if(arg.equals(Exit))
System.exit(0);
}
public void menuSelected(MenuEvent evt)
{ saveItem.setEnabled(!readonlyItem.isSelected());
saveAsItem.setEnabled(!readonlyItem.isSelected());
}
public void menuDeselected(MenuEvent evt)
{
}
public void menuCanceled(MenuEvent evt)
{
}
public static JMenu makeMenu(Object parent,
Object[] items, Object target)
{ JMenu m = null;
if (parent instanceof JMenu)
m = (JMenu)parent;
else if (parent instanceof String)
m = new JMenu((String)parent);
else
return null;
for (int i = 0; i < items.length; i++)
{ if (items[i] == null)
m.addSeparator();
else
m.add(makeMenuItem(items[i], target));
}
return m;
}
public static JMenuItem makeMenuItem(Object item,
Object target)
{ JMenuItem r = null;
if (item instanceof String)
r = new JMenuItem((String)item);
else if (item instanceof JMenuItem)
r = (JMenuItem)item;
else return null;

50

Comp-U-Learn

Swing Components
if (target instanceof ActionListener)
r.addActionListener((ActionListener)target);
return r;
}
public static JPopupMenu makePopupMenu
(Object[] items, Object target)
{ JPopupMenu m = new JPopupMenu();
for (int i = 0; i < items.length; i++)
{ if (items[i] == null)
m.addSeparator();
else
m.add(makeMenuItem(items[i], target));
}
return m;
}
public static void main(String[] args)
{ Frame f = new MenuTest();
f.show();
}
private JMenuItem saveItem;
private JMenuItem saveAsItem;
private JCheckBoxMenuItem readonlyItem;
private JPopupMenu popup;
}
7KH RXWSXW RI WKH SURJUDP LV VKRZQ EHORZ

Fig. 2.10
Comp-U-Learn

51

Advanced Java Programming


2XWSXW VKRZLQJ WKH VKRUW FXW 0HQX

Fig. 2.11
7KH RXWSXW RQ WKH FRPPDQG OLQH ZKHQ WKH PHQXV DUH VHOHFWHG LV VKRZQ DV IROORZV

C:\jdk1.2\bin>java MenuTest
Overtype
Read-only
Copy
New
Open
Cut
Paste
Index
About
Insert
Exit
$ PHQX EDU RQ WRS RI WKH ZLQGRZ FRQWDLQV WKH QDPHV RI WKH SXOO GRZQ PHQXV ,Q WKLV H[DPSOH
ZH KDYH FUHDWHG D PHQX EDU DQG DGGHG LW WR WKH IUDPH 7KH PHQX EDU DSSHDUV RQ WKH WRS RI WKH
ZLQGRZ :H KDYH WKUHH PHQX REMHFWV )LOH (GLW DQG +HOS 7KH )LOH PHQX KDV 1HZ
2SHQ VDYH 6DYH $V DQG ([LW PHQX LWHPV 7KH (GLW PHQX KDV &XW &RS\ 3DVWH DQG 2SWLRQV
$JDLQ 2SWLRQV KDV 5HDG 2QO\ ,QVHUW DQG RYHUW\SH 5HDG RQO\ LV D FKHFN %R[ PHQX W\SH DQG
,QVHUW DQG RYHUW\SH DUH UDGLR EXWWRQ PHQX W\SHV :H DUH DGGLQJ D VHSDUDWRU DFFHOHUDWRUV DQG
PQHPRQLFV :KHQ ZH SUHVV $/7+ WKH PHQX JHWV DFWLYDWHG :H KDYH ,QGH[ DQG $ERXW PHQXV
ZLWK KRW NH\V DWWDFKHG 7KHQ DFFHOHUDWRUV DUH IRU 2SHQ PHQX &WUO  2 DQG 6DYH PHQX LWHP &WUO
 6 $ SRS XS

PHQX LV DOVR GLVSOD\HG :KHQ WKH XVHU ULJKWV FOLFNV WKH PRXVH &XW &RS\ DQG

3DVWH DUH EHLQJ GLVSOD\HG RQ WKH VFUHHQ 7KH\ DUH DOVR FDOOHG VKRUW FXW PHQXV

7KH PHQXV DOVR

FRQWDLQ WKH LPDJHV :KHQ ZH FOLFN WKH PHQXV QR DFWLRQV DUH WULJJHUHG 7KLV SURJUDP LV VLPSO\
WR FUHDWH D PHQX LQWHUIDFH

52

Comp-U-Learn

Swing Components

JTree
2QH RI WKH QHZ FODVVHV SURYLGHG E\ 6ZLQJ LV WKH -7UHH FODVV 7KLV FODVV FDQ EH XVHG WR GLVSOD\
KLHUDUFKLFDO GDWD 7KH 7UHH1RGH LQWHUIDFH GHILQHV PHWKRGV WKDW DUH WR EH LPSOHPHQWHG E\ WKH
QRGHV RI D -7UHH REMHFW 7UHHV DUH FUHDWHG E\ FUHDWLQJ REMHFWV RI WKH 7UHH1RGH LQWHUIDFH DQG
WKHQ DGGLQJ WKHP WRJHWKHU XVLQJ WKH DGG PHWKRG :KHQ DOO RI WKH 7UHH QRGHV DUH DGGHG
WRJHWKHU WKH UHVXOWLQJ 7UHH1RGH REMHFW LV SDVVHG WR WKH -7UHH &RQVWUXFWRU 7KH GHIDXOW
UHQGHULQJ RI D -7UHH REMHFW XVHV D IROGHU LFRQ WR LGHQWLI\ WUHH QRGHV WKDW KDYH FKLOG QRGHV DQG D
ILOH LFRQ WR LGHQWLI\ WUHH OHDYHV 7KH IROORZLQJ SURJUDP ZLOO LOOXVWUDWH WKH XVDJH RI 7UHH /HW XV
VHH D SURJUDP QRZ WR LPSOHPHQW -7UHH

Example 2.8:
import
import
import
import
import

java.awt.*;
java.awt.event.*;
javax.swing.*;
javax.swing.event.*;
javax.swing.tree.*;

public class SwingTree extends JFrame {


public static String TITLE = SwingTree;
Container frameContainer;
JScrollPane scrollPane = new JScrollPane();
JTree tree;
Renderer renderer = new Renderer();
DefaultMutableTreeNode mn =
new DefaultMutableTreeNode(Sample Tree Structure);
DefaultMutableTreeNode stat =
new DefaultMutableTreeNode(Stationary);
DefaultMutableTreeNode sn1 =
new DefaultMutableTreeNode(Computer);
DefaultMutableTreeNode n1 =
new DefaultMutableTreeNode(Floppy Disk);
DefaultMutableTreeNode n2 =
new DefaultMutableTreeNode(Printer Catridge);
DefaultMutableTreeNode n3 =
new DefaultMutableTreeNode(Compact Disks);
DefaultMutableTreeNode n4 =
new DefaultMutableTreeNode(Print out paper);
DefaultMutableTreeNode n5 =
new DefaultMutableTreeNode(Digitizer);

Comp-U-Learn

53

Advanced Java Programming

DefaultMutableTreeNode sn2 =
new DefaultMutableTreeNode(Non Computer);
DefaultMutableTreeNode n6 =
new DefaultMutableTreeNode(Erazer);
DefaultMutableTreeNode n7 =
new DefaultMutableTreeNode(Pencil);
DefaultMutableTreeNode n8 =
new DefaultMutableTreeNode(Sharpener);
DefaultMutableTreeNode n9 =
new DefaultMutableTreeNode(Scale);
DefaultMutableTreeNode n10 =
new DefaultMutableTreeNode(Ball Pins);
DefaultMutableTreeNode food =
new DefaultMutableTreeNode(Food Items);
DefaultMutableTreeNode sn3 =
new DefaultMutableTreeNode(Vegetables);
DefaultMutableTreeNode n11 =
new DefaultMutableTreeNode(Brinjal);
DefaultMutableTreeNode n12 =
new DefaultMutableTreeNode(Tomato);
DefaultMutableTreeNode n13 =
new DefaultMutableTreeNode(Pumpkin);
DefaultMutableTreeNode n14 =
new DefaultMutableTreeNode(Turnip);
DefaultMutableTreeNode n15 =
new DefaultMutableTreeNode(Raddish);
DefaultMutableTreeNode sn4 =
new DefaultMutableTreeNode(Fruits);
DefaultMutableTreeNode n16 =
new DefaultMutableTreeNode(Guava);
DefaultMutableTreeNode n17 =
new DefaultMutableTreeNode(Mango);
DefaultMutableTreeNode n18=
new DefaultMutableTreeNode(Apple);
DefaultMutableTreeNode n19 =
new DefaultMutableTreeNode(Banana);
DefaultMutableTreeNode n20 =
new DefaultMutableTreeNode(Fig);
JMenuBar menuBar = new JMenuBar();
JMenu fileMenu = new JMenu(File);
JMenuItem fileExit = new JMenuItem(Exit);

54

Comp-U-Learn

Swing Components
public SwingTree() {
super(TITLE);
buildGUI();
setupEventHandlers();
setSize(500,500);
show();
}
void buildGUI() {
fileMenu.add(fileExit);
menuBar.add(fileMenu);
setJMenuBar(menuBar);
mn.add(stat);
mn.add(food);
stat.add(sn1);
stat.add(sn2);
food.add(sn3);
food.add(sn4);
sn1.add(n1);
sn1.add(n2);
sn1.add(n3);
sn1.add(n4);
sn1.add(n5);
sn2.add(n6);
sn2.add(n7);
sn2.add(n8);
sn2.add(n9);
sn2.add(n10);
sn3.add(n11);
sn3.add(n12);
sn3.add(n13);
sn3.add(n14);
sn3.add(n15);
sn4.add(n16);
sn4.add(n17);
sn4.add(n18);
sn4.add(n19);
sn4.add(n20);
tree = new JTree(mn);
frameContainer = getContentPane();
frameContainer.setLayout(new BorderLayout());
tree.setCellRenderer(renderer);
scrollPane.getViewport().add(tree);
frameContainer.add(Center,scrollPane);

Comp-U-Learn

55

Advanced Java Programming

}
void setupEventHandlers() {
addWindowListener(new WindowHandler());
fileExit.addActionListener(new MenuItemHandler());
}
public static void main(String[] args) {
SwingTree app = new SwingTree();
}
public class WindowHandler extends WindowAdapter {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}
public class MenuItemHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand();
if(cmd.equals(Exit)) System.exit(0);
}
}
class Renderer extends JLabel implements TreeCellRenderer {
public Component getTreeCellRendererComponent(JTree tree,
Object value, boolean selected, boolean expanded,
boolean leaf, int row, boolean hasFocus) {
setText(value.toString()+
);
return this;
}
}
}

7KLV LV D YHU\ VLPSOH SURJUDP +HUH ZH KDYH D PDLQ QRGH FDOOHG 6DPSOH 7UHH 6WUXFWXUH ,W DV
WZR VXE QRGHV 6WDWLRQHU\ DQG )RRG ,WHPV 6WDWLRQHU\ QRGH KDV WZR VXQ QRGHV &RPSXWHU DQG
1RQ &RPSXWHU (DFK RI WKHVH VXEQRGHV KDYH ILYH LWHPV RQ WKHP 7KH QRGH )RRG ,WHPV KDV
WZR VXE QRGHV 9HJHWDEOHV DQG )UXLWV (DFK RI WKHVH VXE QRGHV KDYH ILYH HOHPHQWV RQ WKHP $
VFUROO EDU LV DWWDFKHG WR WKH ZLQGRZ LQ RUGHU WR YLHZ WKH FRQWHQWV DV ZH H[SDQG WKH WUHH (YHQW
KDQGOHUV DUH DYDLODEOH WR KDQGOH PHQX FOLFN HYHQWV ZLGRZ FORVH HYHQWV :KHQ WKH PHQX
FRPPDQG ([LW LV FOLFNHG WKH ZLQGRZ ZLOO EH GHVWUR\HG ,Q WKH VDPH PDQQHU ZKHQ ZH FOLFN RQ
WKH :LQGRZ &ORVH %XWWRQ WKH ZLQGRZ ZLOO EH WHUPLQDWHG 7KH VHW&HOO5HQGHUHU PHWKRG RI WKH
-7UHH FODVV LV XVHG WR LGHQWLI\ DOWHUQDWLYH WUHH UHQGHULQJ 7KH VHW&HOO5HQGHUHU PHWKRG WDNHV DQ
REMHFW RI WKH 7UHH&HOO5HQGHUHU LQWHUIDFH DV D SDUDPHWHU

56

Comp-U-Learn

Swing Components
7KH RXWSXW RI WKH SURJUDP LV VKRZQ LQ WKH QH[W SDJH

Fig. 2.12

Look and Feel


7KH ORRN DQG IHHO RI D SURJUDP FRQVLVWV RI WKH ZD\ WKH SURJUDP SUHVHQWV LWVHOI WR WKH XVHU LWV
ORRN DQG WKH ZD\ WKH XVHU LQWHUDFWV ZLWK LW 0RVW SURJUDPV GLVSOD\ WKHLU RXWSXW WR WKH XVHUV
FRQVROH DQG UHFHLYH LQSXW IURP D NH\ERDUG DQG PRXVH /RRN DQG )HHO LV GHWHUPLQHG E\ KRZ D
ZLQGRZ RU RWKHU *8, FRPSRQHQW LV GLVSOD\HG DQG KRZ LW UHVSRQGV WR XVHU LQSXW :H QRWLFH
VOLJKW GLIIHUHQFHV LQ WKH FRQWUROV XVHG ZLWK ZLQGRZV  WKH ZD\ PHQXV DUH GLVSOD\HG DQG WKH ZD\
EXWWRQV EHKDYH ZKHQ FOLFNHG WKDW HQDEOH XV WR PDNH GHFLVLRQV 7KHVH GLIIHUHQFHV DUH DFWXDOO\
ORRN DQG )HHO 7KH FDSDELOLW\ WR HDVLO\ FKDQJH WKH ORRN DQG IHHO LV UHIHUUHG WR DV SOXJJDEOH ORRN
DQG IHHO DOVR DOORZV FXVWRP ORRN DQG IHHO WR EH GHYHORSHG 6ZLQJ GHILQHV WKH 0HWDO ORRN DQG
IHHO DV WKH VWDQGDUG ORRN DQG IHHO IRU -DYD DSSOHWV DQG DSSOLFDWLRQV WKDW XVH 6ZLQJ FRPSRQHQWV
6ZLQJ SURYLGHV WKH FDSDELOLW\ WR FKDQJH WKH ORRN DQG IHHO RI DQ DSSOHW RU DSSOLFDWLRQ 6ZLQJ
FRPSRQHQWV DUH QRW ERXQG WR WKH *8, FRPSRQHQWV RI WKH QDWLYH ZLQGRZLQJ V\VWHP 7KLV
FDSDELOLW\ DOORZV WR FUHDWH DSSOHWV DQG DSSOLFDWLRQV WKDW ZLOO XVH D VSHFLILF ORRN DQG IHHO
LUUHVSHFWLYH RI WKH RSHUDWLQJ V\VWHP 0DFLQWRVK 81,; RU :LQGRZV  LQ ZKLFK LW LV H[HFXWHG
3OXJJDEOH /RRN DQG )HHO LV LPSOHPHQWHG LQ WHUPV RI WKH PRGHO YLHZ FRQWUROOHU DUFKLWHFWXUH

Comp-U-Learn

57

Advanced Java Programming


09& LV D VRIWZDUH WKDW VHSDUDWHV WKH VWDWH RI DQ REMHFW WKH PRGHO  WKH ZD\ WKH REMHFW LV
GLVSOD\HG WR WKH XVHU WKH YLHZ DQG WKH ZD\ WKDW WKH REMHFWV VWDWH LV XSGDWHG WKH FRQWUROOHU 
%\ VHSDUDWLQJ WKHVH WKUHH SHUVSHFWLYHV LW LV SRVVLEOH WR GHILQH *8, FRPSRQHQWV WKDW DUH
HTXLYDOHQW LQ WHUPV RI LQIRUPDWLRQ VWDWH PRGHO EXW DUH GLVSOD\HG YLHZ DQG UHVSRQG WR WKH
XVHU FRQWUROOHU LQ GLIIHUHQW ZD\V )RU H[DPSOH D EXWWRQV VWDWH PD\ EH GHILQHG LQ WHUPV RI D
WH[W ODEHO DQ LFRQ JUDSKLF DQG ZKHWKHU WKH EXWWRQ LV EHLQJ FOLFNHG 7KH EXWWRQV YLHZ FDQ DOORZ
WKH EXWWRQV ODEHO DQG LFRQ WR EH GLVSOD\HG LQ D JUHDW YDULHW\ RI ZD\V OLNH VTXDUH EXWWRQ URXQG
EXWWRQ HWFKHG EXWWRQ HWF 7KH EXWWRQV FRQWUROOHU FDQ FDXVH WKH EXWWRQ WR EH FOLFNHG LQ
GLIIHUHQW ZD\V VLQJOHFOLFN GRXEOH FOLFN ULJKWFOLFN OHIWFOLFN DQG VR RQ 1RZ OHW XV VHH D
SURJUDP WKDW ZLOO VKRZ 3OXJJDEOH /RRN DQG )HHO LQ EXWWRQV +HUH LQ WKLV SURJUDP ZH KDYH
WKUHH EXWWRQV ODEHOHG 0RWLI 0HWDO DQG :LQGRZ :KHQ WKH XVHU FOLFNV RQ WKH %XWWRQ WKH
DSSURSULDWH /RRN DQG )HHO RI WKH 6ZLQJ %XWWRQ FRPSRQHQWV ZLOO FKDQJH DFFRUGLQJO\ )RU
H[DPSOH ZKHQ WKH XVHU FOLFNV RQ WKH %XWWRQ ODEHOHG 0RWLI DOO WKH EXWWRQV ZLOO KDYH 0RWLI /RRN
DQG )HHO DSSHDUDQFH

Example 2.9:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class PlafPanel extends JPanel
implements ActionListener
{ public PlafPanel()
{ metalButton = new JButton(Metal);
motifButton = new JButton(Motif);
windowsButton = new JButton(Windows);
add(metalButton);
add(motifButton);
add(windowsButton);
metalButton.addActionListener(this);
motifButton.addActionListener(this);
windowsButton.addActionListener(this);
}
public void actionPerformed(ActionEvent evt)
{ Object source = evt.getSource();
String plaf = ;
if (source == metalButton)
plaf = javax.swing.plaf.metal.MetalLookAndFeel;
else if (source == motifButton)
plaf = com.sun.java.swing.plaf.motif.MotifLookAndFeel;
else if (source == windowsButton)
plaf =
com.sun.java.swing.plaf.windows.WindowsLookAndFeel;
try
{ UIManager.setLookAndFeel(plaf);
SwingUtilities.updateComponentTreeUI(this);

58

Comp-U-Learn

Swing Components
}
catch(Exception e) {}
}
private JButton metalButton;
private JButton motifButton;
private JButton windowsButton;
}
class PlafFrame extends JFrame
{ public PlafFrame()
{ setTitle(PlafTest);
setSize(300, 200);
addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e)
{ System.exit(0);
}
} );
Container contentPane = getContentPane();
contentPane.add(new PlafPanel());
}
}
public class PlafTest
{ public static void main(String[] args)
{ JFrame frame = new PlafFrame();
frame.show();
}
}
7KH RXWSXW RI WKLV SURJUDP LV GLVSOD\HG LQ WKUHH GLIIHUHQW /RRN DQG )HHO W\SHV

Fig. 2.13
Comp-U-Learn

59

Advanced Java Programming

Timer
7LPHUV DUH RIWHQ XVHG LQ DSSOLFDWLRQV WR SHULRGLFDOO\ WULJJHU DFWLRQV DQG WR PRQLWRU WKH SURJUHVV
RI DV\QFKURQRXV RSHUDWLRQV 7KHUH DUH WZR W\SHV RI WLPHUV SHULRGLF WLPHUV DQG RQH VKRW WLPHUV
3HULRGLF WLPHUV FDXVH DQ DFWLRQ WR RFFXU SHULRGLFDOO\ WKH\ FRQWLQXH WR UXQ DQG FDXVH DFWLRQV
XQWLO WKH\ DUH VWRSSHG 2QH VKRW WLPHUV FDXVH DQ DFWLRQ WR KDSSHQ RQO\ RQFH DQG WKH\ PXVW EH
UHVWDUWHG LI WKH\ DUH WR FRQWLQXH WR RSHUDWH -)& WLPHUV FDQ RSHUDWH HLWKHU DV SHULRGLF RU DV RQH
VKRW WLPHUV ,Q DGGLWLRQ WR WKH QRUPDO GHOD\ VHWWLQJ -)& WLPHUV KDYH DQ LQLWLDO GHOD\ VHWWLQJ 7KH
LQLWLDO GHOD\ VSHFLILHV WKH GHOD\ IRU WKH ILUVW WLPHU SHULRG 6XEVHTXHQW SHULRGV ZLOO EH WLPHG
DFFRUGLQJ WR WKH QRUPDO GHOD\ VHWWLQJ )RU H[DPSOH ZH FDQ FUHDWH D SHULRGLF WLPHU ZLWK D GHOD\
RI RQH VHFRQG DQG DQ LQLWLDO GHOD\ RI ILYH VHFRQGV :KHQ VWDUWHG WKH WLPHU ZLOO JHQHUDWH DQ
DFWLRQ HYHQW DIWHU ILYH VHFRQGV DQG HYHU\ VHFRQG WKHUHDIWHU
7KHUH LV D VLQJOH SXEOLF FRQVWUXFWRU IRU FUHDWLQJ 7LPHU REMHFWV $OWKRXJK ZH PXVW VSHFLI\ D GHOD\
YDOXH DQG DQ DFWLRQ OLVWHQHU ZKHQ FDOOLQJ WKH FRQVWUXFWRU ZH FDQ FKDQJH WKHVH YDOXHV ODWHU ZLWK
WKH VHW'HOD\ VHW,QLWLDO'HOD\ DQG DGG$FWLRQ/LVWHQHU PHWKRGV 7KH JHW'HOD\ DQG JHW,QLWLDO'HOD\
PHWKRGV UHWXUQ WKH FXUUHQW GHOD\ VHWWLQJV DQG UHPRYH$FWLRQ/LVWHQHU UHPRYHV D VSHFLILHG DFWLRQ
OLVWHQHU 7KH VHW5HSHDWV PHWKRG GHWHUPLQHV ZKHWKHU D WLPHU LV D SHULRGLF RQH RU D RQHVKRW
WLPHU %\ GHIDXOW WKH WLPHUV DUH SHULRGLF E\ GHIDXOW

$ WLPHU ZLOO QRW EHJLQ RSHUDWLRQ XQWLO ZH

FDOO LWV VWDUW PHWKRG 7KH WLPHU ZLOO VWRS WKH RSHUDWLRQ ZKHQ WKH VWRS PHWKRG LV LQYRNHG :KHQ
ZH VWDUW D WLPHU DIWHU VWRSSLQJ LW WKH WLPHU JRHV WKURXJK LWV IXOO GHOD\ F\FOH 7R GHWHUPLQH
ZKHWKHU D WLPHU LV VWDUWHG RU VWRSSHG ZH FDQ XVH WKH LV5XQQLQJ PHWKRG /HW XV GHPRQVWUDWH WKH
DSSOLFDWLRQ RI WLPHU XVLQJ DQ H[DPSOH

Example 2.10:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class time {
public static void main(String args[])
{
tPanel p1=new tPanel();
JFrame f=new fram();
f.show();
}
}
class fram extends JFrame
{
public fram()
{
setTitle(timer Demo);
setSize(400,400);

60

Comp-U-Learn

Swing Components
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
Container con=getContentPane();
con.add(new tPanel());
setVisible(true);
}
}
class tPanel extends JPanel{
Timer timerActivity,timerCountdown;
int TIMEOUT=40;
int countdownTicks=TIMEOUT;
JLabel countdownDisplay;
public tPanel()
{
setLayout(new BorderLayout());
requestFocus();
String s=Application will terminate +TIMEOUT+ seconds of
inactivity ;
add(new JLabel(s),North);
add(countdownDisplay=new
JLabel(Integer.toString(TIMEOUT)),South);
addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e)
{
timerActivity.restart();
countdownTicks=TIMEOUT;
updateDisplay();
}
});
addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{
timerActivity.restart();
countdownTicks=TIMEOUT;
updateDisplay();
}
});
addMouseMotionListener(new MouseMotionAdapter(){
public void mouseMoved(MouseEvent e){
timerActivity.restart();

Comp-U-Learn

61

Advanced Java Programming


countdownTicks=TIMEOUT;
updateDisplay();
}
});
timerCountdown=new Timer(1000,new ActionListener(){
public void actionPerformed(ActionEvent e)
{
serviceCountdownTimer();
}
});
timerCountdown.setRepeats(true);
timerActivity=new Timer(TIMEOUT*1000,new ActionListener(){
public void actionPerformed(ActionEvent e)
{
serviceActivityTimer();
}
});
timerActivity.setRepeats(false);
timerCountdown.start();
timerActivity.start();
}
public boolean isFocusTraversable(){
return true;
}
public void handleUseractivity()
{
timerActivity.restart();
countdownTicks=TIMEOUT;
updateDisplay();
}
void serviceCountdownTimer(){
countdownTicks;
updateDisplay();
}
void updateDisplay(){
countdownDisplay.setText(Integer.toString(countdownTicks));
}
void serviceActivityTimer(){
System.exit(0);
}
}

62

Comp-U-Learn

Swing Components
7KH RXWSXW RI WKH SURJUDP LV VKRZQ EHORZ

Fig. 2.14

JComboBox
-&RPER%R[ SURYLGH WKH FDSDELOLW\ WR SUHVHQW WKH XVHU ZLWK D OLVW RI WH[W RU JUDSKLF VHOHFWLRQV
7KH -&RPER%R[

FODVV LPSOHPHQWV D GURS GRZQ OLVW VLPLODU WR D 0RWLI RSWLRQ OLVW 7KH -/LVW

FODVV LV D VLQJOH RU PXOWLSOH VHOHFWLRQ OLVW ZLWK D PXOWL HOHPHQW YLHZ 7KLV LV D VXE FODVV RI
-&RPSRQHQW

WKDW

SURYLGHV

MDYDDZW,WHP6HOHFWDEOH

FRPER

ER[

*8,

MDYDDZWHYHQW$FWLRQ/LVWHQHU

FRPSRQHQW

,W

LPSOHPHQWV

WKH

MDYD[VZLQJHYHQW/LVW'DWD/LVWHQHU

MDYD[D[FFHVVLELOLW\$FFHVVLEOH LQWHUIDFHV 7KH FRPER ER[ KDV D FRPELQDWLRQ RI ERWK WKH OLVW ER[
DQG HGLW ER[ 7KH XVHU FDQ VHOHFW IURP WKH OLVW $OVR WKH XVHU FDQ HGLW DV ZHOO 7KH VHWHGLWDEOH
PHWKRG PDNHV WKH FRPERER[ HGLWDEOH 7KH HGLWLQJ RQO\ DIIHFWV WKH FXUUHQW LWHP ,W GRHV QRW
FKDQJH WKH FRQWHQWV RI WKH OLVW 7KH FXUUHQW VHOHFWLRQ RU HGLWHG WH[W FDQ EH UHWULHYHG XVLQJ
JHW6HOHFWHG,WHP PHWKRG /HW XV GHPRQVWUDWH &RPER%R[ XVLQJ WKH IROORZLQJ H[DPSOH +HUH D
OLVW RI IRQW VW\OHV LV SURYLGHG LQ WKH OLVW 7KH XVHU FDQ DOVR SURYLGH DQ\ RWKHU IRQW 7KH OLVW RI
LWHPV FDQ EH DGGHG XVLQJ WKH DGG,WHP PHWKRGV :H FDQ DOVR DGG LWHP WR WKH FRPER ER[ DW
UXQWLPH XVLQJ WKH LQVHUW,WHP$W PHWKRG ,Q WKH VDPH ZD\ LWHPV FDQ DOVR EH UHPRYHG IURP WKH
OLVW XVLQJ UHPRYH,WHP PHWKRG :KHQ WKH XVHU VHOHFWV DQ LWHP IURP D FRPERER[ WKH
FRPERER[ JHQHUDWHV DQ DFWLRQ HYHQW7KH JHW6RXUFH PHWKRG LV XVHG WR LGHQWLI\ WKH FRPERER[
WKDW VHQW WKH HYHQW DQG WKH JHW6HOHFWHG,WHP PHWKRG LV XVHG WR UHWULHYH WKH FXUUHQWO\ VHOHFWHG
LWHP

Comp-U-Learn

63

Advanced Java Programming

Example 2.11
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class ComboBoxFrame extends JFrame
{
private ComboBoxTestPanel panel;
private JComboBox style;

implements ActionListener

public ComboBoxFrame()
{
setTitle(ComboBoxTest);
setSize(300,200);
addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e)
{ System.exit(0);
}
} );
style = new JComboBox();
style.setEditable(true);
style.addItem(Serif);
style.addItem(SansSerif);
style.addItem(Courier);
style.addItem(Times New Roman);
style.addItem(Impact);
style.addActionListener(this);
JPanel p = new JPanel();
p.add(style);
getContentPane().add(p, South);
panel = new ComboBoxTestPanel();
getContentPane().add(panel, Center);
}
public void actionPerformed(ActionEvent evt)
{
JComboBox source = (JComboBox)evt.getSource();
String item = (String)source.getSelectedItem();
panel.setStyle(item);
}
}
class ComboBoxTestPanel extends JPanel
{
public ComboBoxTestPanel()
{ setStyle(Serif);
}
public void setStyle(String s)
{
setFont(new Font(s, Font.PLAIN, 12));
repaint();

64

Comp-U-Learn

Swing Components
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawString(We are learning JComboBox now with this
example,0,50);
}
}
public class ComboBoxTest
{
public static void main(String[] args)
{
JFrame frame = new ComboBoxFrame();
frame.show();
}
}
7KH RXWSXW RI WKLV SURJUDP LV VKRZQ EHORZ

Fig. 2.15

Summary
In this session we learnt about JTree, JComboBox, JLabel, JTimer, JMenu and
JOptionPane. Java Swings has a huge amount of components. We have covered
some of the important components only. The appearance of these components will
give a clear idea regarding the Metal, Motif and Window look and feel types. Also
we have seen some of the new eventListeners and interfaces. We have also seen
some Swing events also. This will help us to have a clear idea on JFC and Swings.

Comp-U-Learn

65

Advanced Java Programming

Going Over It Again


I. Fill in the Blanks


BBBBBBBBBBB DQG BBBBBBBBBBB DUH WKH WZR GLIIHUHQW W\SHV RI 7LPHUV



BBBBBBBBBBBDQG BBBBBBBBBBBDUH WKH WZR W\SHV RI GLDORJ ER[HV



7UHHV DUH FUHDWHG XVLQJ BBBBBBBBBBBLQWHUIDFH



7KH GHIDXOW LFRQ LQ DQ ,QSXW'LDORJ %R[ LV BBBBBBBBBBB



BBBBBBBBBBB PHWKRG PDNHV WKH &RPER%R[ HGLWDEOH

II. State True or False



-3DQHO SURYLGHV GLDORJ ER[ IUDPHZRUN



$EVWUDFW%RUGHU FODVV LPSOHPHQWV %RUGHU LQWHUIDFH LQ 6ZLQJV



3/$,1B0(66$*( ZLOO GLVSOD\ DQ LFRQ RQ WKH VFUHHQ



7KH PHWKRG VKRZ,QSXW'LDORJ LV XVHG WR FUHDWH D &XVWRP 'LDORJ ER[ ZLWK RXU RSWLRQV



,W LV QRW SRVVLEOH WR DGG DQ LPDJH WR D PHQX LWHP

III. One line Answers



:ULWH VKRUW QRWHV RQ GHOD\ VHWWLQJV



1DPH WKH UHJLRQV DYDLODEOH RQ -2SWLRQ3DQH



:KDW DUH WKH LPSRUWDQW PHWKRGV XVHG LQ D 7LPHU FODVV DSSOLFDWLRQ"



:KDW DUH WKH YDULRXV VXEFODVVHV LQ 6ZLQJ %RUGHU FODVV



1DPH WKH YDULRXV OD\RXWV VXSSRUWHG E\ 6ZLQJ



/LVW WKH IXQFWLRQDOLWLHV RI -/DEHO

66

Comp-U-Learn

Session 3

Beans Fundamentals

On Completion of this Session


you will be able to understand...

) Java Beans Basics


) Beans Architecture
) Bean Box
) Creating a Bean
) Bundled Beans

In This Session...

Introduction to Java Beans

Beans Architecture

Bean Concepts

Bean Box

Using Bean Box

Menu Items in Bean Box

Using Bound Properties

Creating a Bean

Other Bundled Beans

The EventMonitor

JDBC SELECT

The QuoteMonitor

Beans Fundamentals

Introduction to Java Beans


$ MDYD EHDQ LV D UHXVDEOH VRIWZDUH FRPSRQHQW ZKLFK FDQ EH YLVXDOO\ PDQLSXODWHG LQ EXLOGHU
WRROV $ MDYD EHDQ FDQ EH D GLDORJ ER[ D FORFN D FODVV WKDW GRZQORDGV GDWD IURP D 85/ 7KH
-DYD%HDQV $3, PDNHV LW SRVVLEOH WR ZULWH FRGH WR GHYHORS VXFK FRPSRQHQW VRIWZDUH LQ -DYD
7KHVH FRPSRQHQWV DUH VHOIFRQWDLQHG UHXVDEOH VRIWZDUH XQLWV WKDW FDQ EH YLVXDOO\ FRPSRVHG
LQWR DSSOHWV RU DSSOLFDWLRQV XVLQJ YLVXDO DSSOLFDWLRQ EXLOGHU WRROV
-DYD%HDQV LV D FRUH -'.[ RU ODWHU FDSDELOLW\ $Q\ -'.FRPSOLDQW EURZVHU RU WRRO LPSOLFLWO\
VXSSRUWV -DYD%HDQV
-DYD%HDQ FRPSRQHQWV DUH FDOOHG %HDQV $ EHDQ FDQ EH PDGH IURP PRUH WKDQ RQH FODVV DQG KDYH
D YLVXDO DSSHDUDQFH WKDW HQDEOHV LW WR EH JUDSKLFDOO\ PDQLSXODWHG LQ D YLVXDO WRRO FDOOHG EXLOGHU
2QFH ZH FUHDWHG D EHDQ E\ RXU MDYD FRGH DQG DGGHG WR WKH WRROER[ ZH FDQ VHOHFW WKDW SDUWLFXODU
%HDQ IURP WKH WRROER[ GURS LW LQWR D IRUP PRGLI\ LWV DSSHDUDQFH DQG EHKDYLRU GHILQH LWV
LQWHUDFWLRQ ZLWK RWKHU %HDQV DQG FRPSRVH LW DQG RWKHU %HDQV LQWR DQ DSSOHW DSSOLFDWLRQ RU QHZ
%HDQ $OO WKLV FDQ EH GRQH ZLWKRXW ZULWLQJ D OLQH RI FRGH
,QWHJUDWHG 'HYHORSPHQW (QYLURQPHQWV VXFK DV 9LVXDO %DVLF DQG VRPH YLVXDO FRPSRQHQWV DQG
QRZ MDYD ZLWK EHDQV DUH HDVLHU WR XVH WKDQ WUDGLWLRQDO SURJUDPPLQJ HQYLURQPHQWV :KDW
MDYDEHDQV EULQJV WR WUDGLWLRQDO MDYD SURJUDPPLQJ LV WKH FDSDELOLW\ IRU HDFK RI WKHVH FRPSRQHQWV
WR EH ZULWWHQ E\ GLIIHUHQW SURJUDPPHUV ZKR QHYHU ZRUN WRJHWKHU LQ DQ\ ZD\

Beans Architecture
7KH MDYDEHDQV FRPSRQHQW DUFKLWHFWXUH LV EDVHG DURXQG WKUHH SDUWV 7KH\ DUH

Beans
Builders
Bridges
7KLV DUFKLWHFWXUH LV FRPPRQO\ FDOOHG E\ WKH EHDQ GHYHORSHUV DV 7KUHH %V LQ WKLV VHFWLRQ ZH
DUH JRLQJ WR VHH WKH GHWDLOV UHJDUGLQJ WR WKH DERYH WKUHH %V

Bean
:H KDYH VHHQ PRUH GHWDLOV DERXW WKH EHDQ LQ WKH LQWURGXFWLRQ VHFWLRQ $ EHDQ LV D UHXVDEOH
FXVWRPL]DEOH VRIWZDUH FRPSRQHQW ZULWWHQ LQ SXUH MDYD DFFRUGLQJ WR WKH MDYDEHDQV VSHFLILFDWLRQ
$ EHDQ GRHV RQO\ RQH WKLQJ EXW LW FDQ EH OLQNHG WR RWKHU EHDQV WR SURGXFH ODUJH DSSOLFDWLRQV LQ
EXLOGHU

Comp-U-Learn

69

Advanced Java Programming

Builder
$ EXLOGHU LV D YLVXDO HQYLURQPHQW LQ ZKLFK EHDQV FDQ EH ORDGHG FXVWRPL]HG DQG OLQNHG 7KH\
DUH WRROV WKDW HQDEOH GHYHORSHUV WR FRQQHFW EHDQV WRJHWKHU WR EXLOG DSSOLFDWLRQV $SSOLFDWLRQ
GHVLJQHUV FDQ OLQN EHDQV WRJHWKHU ZLWKRXW ZULWLQJ FRGH WR FUHDWH QHZ XQLTXH DQG SRZHUIXO
DSSOLFDWLRQV TXLFNO\ DQG HDVLO\ 7KHUH DUH VR PDQ\ 9LVXDO WRROV VXFK DV 9LVXDO &DIp -%XLOGHU MDYD
ZRUNVKRS DQG MDYD VWXGLR

Bridges
$ EULGJH HQYHORSV OHJDF\ FRPSRQHQWV OLNH $FWLYH; FRQWUROV LQ D -DYD ZUDSSHU VR WKH\ ORRN OLNH
EHDQV WR WKH SURJUDPPHU 7KH\ HQDEOH WKH -DYDEHDQV WR LQWHUDFW ZLWK RWKHU FRPSRQHQW
VRIWZDUH VXFK DV $FWLYH; FRQWUROV &XUUHQWO\ RQO\ RQH EULGJH LV DYDLODEOH DQ $FWLYH; EULGJH
ZKLFK HQDEOHV -DYD%HDQV FRPSRQHQWV WR EH DGGHG WR $FWLYH; FRQWDLQHUV VXFK DV 06:RUG
9LVXDO %DVLF

Bean Concepts
7KH IROORZLQJ OLVW EULHIO\ GHVFULEHV NH\ %HDQ FRQFHSWV
%XLOGHU WRROV GLVFRYHU D %HDQV SURSHUWLHV PHWKRGV DQG HYHQWV E\ LQWURVSHFWLRQ %HDQV VXSSRUW
LQWURVSHFWLRQ LQ WZR ZD\V

By adhering to specific naming conventions, known as design patterns, when


naming Bean features. Bean introspection relies on the API to discover Bean
features via design patterns.
By explicity providing property, method, and event information with a related
Bean Information class. A Bean information class implements the BeanInfo
interface.

3URSHUWLHV

DUH D %HDQV DSSHDUDQFH DQG EHKDYLRU DWWULEXWHV WKDW FDQ EH FKDQJHG DW GHVLJQ WLPH

3URSHUWLHV DUH H[SRVHG WR EXLOGHU WRROV E\ GHVLJQ SDWWHUQV RU D %HDQ,QIR FODVV


%HDQV H[SRVH SURSHUWLHV VR WKDW WKH\ FDQ EH FXVWRPL]HG DW GHVLJQ WLPH &XVWRPL]DWLRQ LV
VXSSRUWHG LQ WZR ZD\V %\ XVLQJ SURSHUW\ HGLWRUV RU E\ XVLQJ PRUH VRSKLVWLFDWHG %HDQ
FXVWRPL]HV
%HDQV XVH HYHQWV WR FRPPXQLFDWH ZLWK RWKHU %HDQV $ %HDQ WKDW ZDQWV WR UHFHLYH HYHQWV D
OLVWHQHU %HDQ UHJLVWHUV LWV LQWHUHVW ZLWK WKH %HDQ WKDW ILUHV WKH HYHQW D VRXUFH %HDQ  %XLOGHU
WRROV FDQ H[DPLQH D %HDQ DQG GHWHUPLQH ZKLFK HYHQWV WKDW %HDQ FDQ ILUH VHQG DQG ZKLFK LW FDQ
KDQGOH UHFHLYH  $OVR 3HUVLVWHQFH HQDEOHV %HDQV WR VDYH WKHLU VWDWH DQG UHVWRUH WKDW VWDWH ODWHU
-DYD%HDQV XVHV -DYD 2EMHFW 6HULDOL]DWLRQ WR VXSSRUW SHUVLVWHQFH $OO WKH DERYH FRQFHSWV ZH DUH
JRLQJ WR FRYHU LQ WKLV VHVVLRQ

70

Comp-U-Learn

Beans Fundamentals

Bean Box
,Q WKLV VHFWLRQ ZH DUH JRLQJ WR GLVFXVV DERXW WKH KDQGOLQJ WKH EHDQ XVLQJ WKH %'. ,Q WKLV ERRN
DOO WKH FRQFHSWV DQG WKH H[DPSOHV DUH GLVFXVVHG ZLWK XVLQJ WKH %'.  RQO\ $IWHU FKDQJLQJ
WKH GLUHFWRU\ WR %'. GLUHFWRU\ ZH KDYH WR RSHQ WKH %HDQER[ GLUHFWRU\ 7KH IROORZLQJ ILJXUH
VKRZV WKH FRPPDQG SURPSW GHWDLOV WR JHW WKH %HDQER[

Fig. 3.1
$IWHU JLYLQJ WKH UXQ FRPPDQG ZH FDQ JHW WKH WKUHH ZLQGRZV YL] 7RROER[ %HDQER[ DQG
3URSHUW\ ER[ 1RZ ZH VKDOO JR LQ GHWDLOV DERXW WKHVH WKUHH SDUWV

Tool Box
7KH WRRO ER[ LV RQH RI WKH SDUW RI WKH %HDQ %R[ ZKLFK FRQWDLQV WKH EHDQV DV D WRROV 7KH
IROORZLQJ ILJXUH VKRZV WKH WRRO ER[ ZKLFK ZLOO DSSHDU DORQJ ZLWK WKH %HDQ%R[ DQG WKH 3URSHUW\
%R[ :H FDQ VHH VRPH RI WKH LQEXLOW EHDQV LQ WKH WRRO ER[ $OO FDQ EH DFW DV D VHSDUDWH EHDQ DV D
FRQWURO

Fig. 3.2
Comp-U-Learn

71

Advanced Java Programming

Bean Box
7KH EHDQ ER[ LV WKH FRPSRVLWLRQ ZLQGRZ VKRZQ LQ WKH )LJXUH  ZKHUH ZH DGG DUUDQJH DQG
FRQQHFW WKH EHDQV 7KLV LV WKH FDQYDV RQ ZKLFK ZH ZLOO SDLQW ZLWK REMHFWV IURP RXU WRROER[ ,W
ZLOO FRQWDLQ VRPH PHQXV IRU RSHUDWLQJ RXU EHDQV

Property Sheet
7KH WKLUG DQG ILQDO ZLQGRZ LV WKH %HDQ%R[ SURSHUW\ VKHHW VKRZQ LQ WKH )LJXUH  WKH
SURSHUW\ VKHHW FKDQJHV GHSHQGLQJ RQ ZKLFK EHDQ LV FXUUHQWO\ VHOHFWHG LQ WKH EHDQ ER[ ZLQGRZ
:KHQ ZH VWDUW XS WKH RQO\ EHDQ LQ WKH EHDQ ER[ ZLQGRZ LV WKH EHDQ ER[ LWVHOI VR ZH VHH LWV
SURSHUW\ VKHHW 7KH SURSHUW\ VKHHW VKRZV WKDW WKH EHDQ ER[ KDV IRXU HGLWDEOH SURSHUWLHV
IRUHJURXQG DQG EDFNJURXQG ZKLFK ZLOO FKDQJH WKH FRORUV RI WKH EHDQ ER[ D QDPH DQG D )RQW
6XSSRVH ZH SXW VRPH EHDQV IURP WKH WRROER[ LQWR RXU EHDQ ER[ ZLQGRZ ZH FDQ JHW WKH
SURSHUW\ VKHHW IRU WKDW SDUWLFXODU EHDQ DIWHU VHOHFWLQJ WKDW EHDQ LQ WKH ZLQGRZ

Fig. 3.3

72

Comp-U-Learn

Beans Fundamentals

Fig. 3.4

Using Bean Box


,Q WKH ODVW VHFWLRQ ZH KDYH VHHQ DERXW WKH SDUWV RI WKH EHDQ ER[ ,Q WKLV VHFWLRQ ZH DUH JRLQJ WR
VHH KRZ WR KDQGOH D EHDQ E\ XVLQJ WKH WKUHH ZLQGRZV DV ZH GLVFXVVHG LQ WKH SUHYLRXV VHFWLRQ ,Q
WKH WRROER[ ZH KDYH VHHQ VRPH WRROV 7KHVH DUH WKH LQEXLOW EHDQV ZKLFK ZLOO FRPH ZLWK DQ\
%'. $OO ZLOO SHUIRUP GLIIHUHQW DFWLRQ /HW XV GLVFXVV DERXW WKH XVDJH RI WKH %HDQ ER[ E\ XVLQJ
WKH 6RUWHUEHDQ IURP WKH WRROER[
$IWHU UXQQLQJ WKH EHDQER[ ZH FDQ JHW WKUHH ZLQGRZV DV ZH GLVFXVVHG LQ WKH SUHYLRXV VHFWLRQ
1RZ FOLFN WKH PRXVH EXWWRQ RQ WKH 6RUWHUEHDQ LQ WKH WRROER[ DQG FOLFN WKH PRXVH EXWWRQ LQ WKH
EHDQ ER[ FRPSRVLWH ZLQGRZ 1RZ RXU EHDQ ER[ ZLOO ORRN OLNH WKH IROORZLQJ ILJXUH

Fig. 3.5

Comp-U-Learn

73

Advanced Java Programming


1RZ VHH WKH FRPSRVLWH ZLQGRZ :H JHW WKH VRUWLQJ DOJRULWKP LQ WKH JUDSKLFDO YLHZ /LNH WKDW
ZH FDQ FUHDWH RXU RZQ MDYDEHDQV DQG DGG LW WR WKH WRRO ER[ DQG ZH FDQ XVH LW ZKHUHYHU ZH ZDQW
7KLV LV WKH DFWXDO XVDJH RI WKH EHDQV /HW XV VHH WKH DFWLRQ

DQG HYHQW RULHQWHG WKLQJV EHKLQG

WKHVH EHDQV
/HW XV FUHDWH WZR EXWWRQV %\ PHDQV RI WKHVH EXWWRQV ZH FDQ FRQWURO WKH VRUWLQJ SURFHVV E\
XVLQJ PHQXV LQ WKH FRPSRVLWH ZLQGRZ 6RUWHUEHDQV SURSHUW\ VKHHW 3ODFH WZR 2XU%XWWRQ LQ
WKH FRPSRVLWH ZLQGRZ IURP WKH 7RROER[ DQG FKDQJH LWV QDPH DV 6RUW DQG 6WRS UHVSHFWLYHO\
XVLQJ WKH SURSHUW\ VKHHW 6HOHFW RQH EXWWRQ DQG GR WKH IROORZLQJ VWHSV WR FUHDWH HYHQWV RQ WKH
EXWWRQ

Fig. 3.6
$IWHU SUHVVLQJ WKH DFWLRQ SHUIRUPHG PHQX LWHP ZH JHW D UHG FRORUHG OLQH IURP WKH VHOHFWHG
EXWWRQ 7KHQ FOLFN WKH RWKHU HQG RI WKLV OLQH RQ RXU 6RUWHUEHDQ DV VKRZQ LQ WKH IROORZLQJ ILJXUH

Fig. 3.7
74

Comp-U-Learn

Beans Fundamentals
1RZ ZH FDQ JHW D GLDORJ ER[ DV VKRZQ LQ WKH IROORZLQJ ILJXUH LQ RUGHU WR FKRVH WKH WDUJHW
PHWKRG UHODWHG WR WKDW SDUWLFXODU EHDQ

Fig. 3.8
$IWHU VHOHFWLQJ WKH VWDUW PHWKRG FOLFN RN EXWWRQ 1RZ WKH VWDUW EXWWRQ LV UHDG\ WR SHUIRUP WKH
VWDUWLQJ WKH DFWLRQ RI WKH 6RUWHU%HDQ ,Q WKH VDPH ZD\ ZH KDYH WR IL[ WKH WDUJHW PHWKRG DV VWRS
IRU WKH 6WRS EXWWRQ XVLQJ WKH DERYH SURFHGXUHV 1RZ ZH FDQ VWDUW DQG VWRS WKH 6RUWHU%HDQ
XVLQJ WKHVH EXWWRQV /LNH WKLV ZH FDQ FUHDWH HYHQWV UHODWHG WR WKH EHDQV LQ WKH WRRO ER[ XVLQJ
DERYH SURFHGXUHV

Menu Items in Beanbox


:H FDQ VHH WKHUH DUH VRPH PHQX LWHPV LQ WKH &RPSRVLWH ZLQGRZ (DFK RI WKHP ZLOO SHUIRUP
GLIIHUHQW DFWLRQ 2QFH ZH FUHDWH D EHDQ ZLWK VRPH DFWLRQV ZH FDQ VDYH LW LQ D MDU ILOH E\ XVLQJ
WKH 6DYH PHQX LWHPV LQ WKH )LOH PHQX 7KLV XVHV REMHFW VHULDOL]DWLRQ WR FROOHFW DOO WKH QHFHVVDU\
ILOHV WKHLU FXVWRPL]HG SURSHUWLHV WKH DGDSWHU FODVVHV DQG REMHFW WKDW FRQQHFW WKHP DQG ZURWH DOO
WKRVH WKLQJV LQWR RQH ELJ MU ILOH 7KLV SURFHVV FDOOHG SLFNOLQJ
:H FDQ ORDG WKH ILOH EDFN LQWR %HDQER[ ZLWK WKH /RDG PHQX LWHP LQ WKH )LOH PHQX 7KLV XVHV
WKH REMHFW GHVHULDOL]DWLRQ WR JHW DOO WKH FODVVHV VHULDOL]HG REMHFWV WKHLU SURSHUWLHV FRQQHFWLRQV
DQG WKH VWDWH RI WKH EHDQ ER[ RXW RI WKH MDU ILOH DQG LQWR WKH FODVV VSDFH RI WKH %HDQ %R[ 7KLV LV
FDOOHG DV XQSDFNLQJ
7KH YLHZ PHQX HQDEOHV WKH GHVLJQHU WR GHFLGH ZKHWKHU WR GLVSOD\ LQYLVLEOH EHDQV :H FDQ WXUQ
RQ WKH GLVSOD\ RI WKH LQYLVLEOH EHDQ E\ VHOHFWLQJ WKH 6KRZ ,QYLVLEOH %HDQV ,Q WKH VDPH ZD\ ZH
FDQ WXUQ RII WKH GLVSOD\ RI WKH LQYLVLEOH EHDQ E\ VHOHFWLQJ WKH +LGH ,QYLVLEOH %HDQV

Comp-U-Learn

75

Advanced Java Programming

Using Bound Properties


%RXQG SURSHUWLHV DUH WKH SURSHUWLHV WKDW FDQ EH FRQQHFWHG WR DQRWKHU SURSHUW\ RI WKH VDPH W\SH
LQ D GLIIHUHQW EHDQ VR WKDW ZKHQ WKH VRXUFH EHDQV SURSHUW\ YDOXH FKDQJHV WKH WDUJHW EHDQV
SURSHUW\ FKDQJHV WR WKH VDPH YDOXH %XW VRPH EHDQV RQO\ KDYH WKHVH ERXQG SURSHUWLHV 7KH
PHFKDQLVP E\ ZKLFK SURSHUWLHV LQ WZR EHDQV DUH ERXQG WR HDFK RWKHU LV YHU\ VLPLODU WR WKH ZD\
HYHQWV DUH ILUHG IURP RQH EHDQ WR DQRWKHU
)RU H[DPSOH SXW WKH -HOO\ %HDQ LQ RXU FRPSRVLWH EHDQER[ ,I ZH VHOHFW WKH -HOO\ EHDQ ZH FDQ JHW
D PHQX LWHP DV %LQG 3URSHUW\ LQ WKH (GLW PHQX DV VKRZQ LQ WKH IROORZLQJ ILJXUH

Fig. 3.9
$IWHU SUHVVLQJ WKDW PHQX LWHP ZH FDQ JHW D GLDORJ ER[ ZKLFK ZLOO DVN XV WR VHOHFW WKH VRXUFH
SURSHUW\ $IWHU VHOHFWLQJ D VRXUFH SURSHUW\ VD\ FRORU DQRWKHU GLDORJ ZLOO DSSHDU DIWHU FOLFNLQJ
WKH WDUJHW OLQH RQ WKH DQRWKHU REMHFW VD\ %HDQ%R[ ZLQGRZ DV VKRZQ LQ WKH )LJXUH

LQ RUGHU WR

JLYH WKH 7DUJHW SURSHUW\ 1RZ VHOHFW WKH SURSHUW\ DV EDFNJURXQG ZH FDQ JHW WKH %HDQER[
EDFNJURXQG DV VDPH DV WKH -HOO\ %HDQV EDFNJURXQG FRORU

Fig. 3.10
76

Comp-U-Learn

Beans Fundamentals

Fig. 3.11

Creating a Bean
6R IDU ZH KDYH VHHQ DERXW WKH %HDQ %R[ SURSHUWLHV DQG LWV DFWLYLWLHV E\ XVLQJ WKH H[LVWLQJ EHDQV
LQ WKH 7RRO %R[ ,Q WKLV VHFWLRQ OHW XV FUHDWH RXU RZQ EHDQ E\ RXU FRGH DQG PDNH XVH RI LW LQ WKH
%HDQ %R[ WKURXJK WKH 7RRO %R[ 7KH EHVW ZD\ WR EXLOG D EHDQ LV WR VWDUW ZLWK D VLPSOH H[DPSOH
/HW XV VWDUW ZLWK D PRVW EDVLF EHDQ
7KH IROORZLQJ DUH WKH VWHSV UHTXLUHG WR FUHDWH D EHDQ

Create a bean source code as a java file in our JDKs bin directory and compile it
using javac.
Create a manifest file which will identify the .class file as a bean.
Create a jar file which will contain the .class file and a .mf file.
Copy the jar file into BDKs jars directory.
In command line run the beanbox usually we can get our bean in the Toolbox.
Example 3.1:
import java.awt.*;
import java.io.Serializable;
import java.beans.*;
public class mybean extends Canvas
implements Serializable
{
public mybean()

Comp-U-Learn

77

Advanced Java Programming


{
resize(100,60);
}
public void paint(Graphics g)
{
g.setColor(Color.red);
g.fillRect(30,10,30,40);
}
}
1RZ FRPSLOH WKLV P\EHDQMDYD ILOH XVLQJ MDYDF LQ WKH FRPPDQG OLQH 7KHQ RSHQ WKH QRWHSDG DQG
ZULWH WKH IROORZLQJ FRGH IRU WKH PDQLIHVW ILOH

Manifest-Version: 1.0
Name: mybean.class
Java-Bean: True
6DYH WKH DERYH ILOH DV P\EHDQPI ILOH LQ WKH ELQ GLUHFWRU\ ,W LV QRW QHFHVVDU\ WKDW WKH PI ILOH
QDPH VKRXOG EH VDPH DV WKH FODVV ILOH QDPH )RU RXU FRQYHQLHQW ZH FDQ JLYH WKH VDPH QDPH
7KH QH[W VWHS LV WR FUHDWH D MDU ILOH )RU WKDW ZH KDYH WR IROORZ WKH IROORZLQJ XVDJH

Usage: jar {ctxu}[vfm0M] [jar-file] [manifest-file] [-C dir]


files ...
Options:
-c
-t
-x
-u
-v
-f
-m
-0
-M
-C
file

create new archive


list table of contents for archive
extract named (or all) files from archive
update existing archive
generate verbose output on standard output
specify archive file name
include manifest information from specified manifest file
store only; use no ZIP compression
Do not create a manifest file for the entries
change to the specified directory and include the following

If any file is a directory then it is processed recursively.


The manifest file name and the archive file name needs to be
specified
in the same order the m and f flags are specified.

78

Comp-U-Learn

Beans Fundamentals
,Q RXU H[DPSOH ZH KDYH WR JLYH WKH IROORZLQJ V\QWD[ LQ WKH FRPPDQG OLQH WKHQ SUHVV HQWHU :H
JHW WKH IROORZLQJ PHVVDJH LQ WKH FRPPDQG OLQH

C:\jdk1.2\bin>jar cvfm mybean.jar mybean.mf mybean.class


added manifest
adding: mybean.class (in=531) (out=349) (deflated 34%)
+HUH WKH

FYIP

GHQRWHV WKH RSWLRQV XQGHU WKH FUHDWLRQ RI WKH MDU ILOH 1RZ ZH FDQ ILQG D

P\EHDQMDU ILOH LQ WKH ELQ GLUHFWRU\


&RS\ WKLV MDU ILOH LQWR %'.V

MDUV

GLUHFWRU\ $IWHU UXQQLQJ WKH EHDQ ER[ ZH FDQ JHW RXU EHDQ

P\EHDQ LQ WKH WRRO ER[ ZLWK WKH H[LVWLQJ EHDQV DV VKRZQ LQ WKH IROORZLQJ ILJXUH  7KHQ
FOLFN RXU P\EHDQ LQ WKH WRRO ER[ DQG SXW LW RQ WKH EHDQER[ ZH FDQ VHH WKH VLPSOH UHFWDQJOH ZKDW
H[DFWO\ ZH FUHDWHG LQ WKH P\EHDQMDYD ILOH 7KLV LV VKRZQ LQ WKH )LJXUH 

Fig. 3.12
:H FDQ DOVR KDYH WKH SURSHUW\ VKHHW IRU RXU EHDQ 7KH SURSHUW\ VKHHW IRU RXU EHDQ LV VKRZQ LQ
WKH ILJXUH 

Comp-U-Learn

79

Advanced Java Programming

Fig. 3.13

Fig. 3.14

Other Bundled Beans


$OUHDG\ ZH KDYH VHHQ VRPH EXQGOHGEHDQV VXFK DV -HOO\%HDQ 6RUWHU%HDQ 2XU%XWWRQ ,Q WKLV
VHFWLRQ ZH DUH JRLQJ WR VHH RWKHU EXQGOHG EHDQV DYDLODEOH LQ WKH 7RROER[

80

Comp-U-Learn

Beans Fundamentals

The BridgeTester
7KH %ULGJH7HVWHU EHDQ VKRZQ LQ WKH IROORZLQJ ILJXUH SURYLGHV VLPSOH WHVWV IRU SURSHUW\ HGLWRUV
DQG HYHQW OLVWHQHUV ,W LV JRW GXPP\ SURSHUWLHV RI HYHU\ SULPLWLYH W\SH SOXV 6WULQJ 7KHVH PDNH
JRRG WHVWV RI WKH VWDQGDUG SURSHUW\ HGLWRUV VR WKH\ DUH XVHIXO LI ZH DUH ZULWLQJ EXLOGHU WRROV ,W
DOVR ILUHV FXVWRP HYHQWV VR ZH FDQ XVH RXU RZQ EHDQV E\ ILULQJ %ULGJH7HVWHU HYHQWV DW WKHP

The ChangeReporter
7KLV LV DOVR DQRWKHU WHVWHU EHDQ ,W H[WHQGV WH[W ILHOG DQG KDV D UHSRUW&KDQJH PHWKRG WKDW
DFFHSWV D SURSHUW\ &KDQJH(YHQW DUJXPHQW :KHQ WKLV PHWKRG LV LQYRNHG LW GLVSOD\V WKH FKDQJH
7KXV WKLV EHDQ LV JHQHUDOO\ XVHG WR VKRZ WKH YDOXH RI D ERXQG SURSHUW\

Fig. 3.15
The ExplicitButton
7KH ([SOLFLW%XWWRQ EHDQ LV D VXE FODVV RI 2XU%XWWRQ WKDW DGGV QR QHZ PHWKRGV RI )LHOGV
+RZHYHU LW KDV D EHDQ LQIR FODVV WKDW H[WHQGV 6LPSOH%HDQ,QIR ZKLFK LV LQ WKH MDYDEHDQ SDFNDJH
DQG SURYLGHV SURSHUW\ GHVFULSWRUV D SURSHUW\ LQGH[ HYHQW VHW GHVFULSWRUV D EHDQ GHVFULSWRU DQG
LFRQV

The EventMonitor
7KLV EHDQ PRQLWRUV WKH HYHQWV ILUHG E\ D EHDQ :KHQ ZH FRQQHFW DQ\ VRXUFH IURP WKH
PRQLWRUHG EHDQ WR WKH (YHQW0RQLWRU EHDQ WKH HYHQW PRQLWRU ZDNHV XS DV VRRQ DV HYHQW ILUHG

Comp-U-Learn

81

Advanced Java Programming


DQG UHJLVWHUV LWVHOI DV D OLVWHQHU IRU DOO RWKHU HYHQWV ILUHG E\ WKH VRXUFH EHDQ :KHQ WKH PRQLWRU
UHFHLYHV DQ HYHQW IURP WKH VRXUFH ,W GLVSOD\V LW LQ LWV 7H[W$UHD 7KH IROORZLQJ ILJXUH VKRZV WKLV
EHDQ

FRQQHFWHG

WR

DQ

([SOLFLW%XWWRQ

EHDQ

HYHQW

)RU

WKDW

ZH

KDYH

WR

FRQQHFW

WKH

([SOLFLW%XWWRQ HYHQWV WDUJHW OLQH WR WKH (YHQW0RQLWRU EHDQ

JDBC SELECT
7KH -'%& 6(/(&7 EHDQ FRQQHFWV WR D VSHFLILHG -'%& 85/ DQG SHUIRUPV D 64/ 6(/(&7
VWDWHPHQW 7KHQ LW GLVSOD\V WKH UHVXOWLQJ VHW WR WKH XVHU $OWKRXJK WKLV EHDQ FRXOG EH FRQILJXUHG
WKURXJK D SURSHUW\ VKHHW ZKLFK LV VKRZQ LQ WKH IROORZLQJ ILJXUH WKH FXVWRPL]HU SURYLGHV PRUH
LQIRUPDWLRQ WR WKH GHVLJQHU DERXW ZKDW VRUW RI YDOXHV VKRXOG EH XVHG IRU WKH SURSHUWLHV

Fig. 3.16

The QuoteMonitor
7KLV EHDQ XVHV 50, WR FRQQHFW WR D VWRFNTXRWH VHUYHU RYHU WKH LQWHUQHW DQG UHWULHYH VWRFN
YDOXHV 7KH PDLQ SURSHUW\ LV D VWULQJ VWRFN V\PERO ZKLFK LV WKH IRXUOHWWHU FRGH RI WKH VWRFN ZH
ZDQW WR PRQLWRU TXRWHV IRU YDULRXV W\SH RI EURZVHUV 7KH TXRWHV DUH GUDZQ LQ WH[W ILHOGV DV
VKRZQ LQ WKH IROORZLQJ ILJXUH

82

Comp-U-Learn

Beans Fundamentals

Fig.. 3.17
Other beans
%HDQV PLVVLQJ IURP WKLV OLVW LQFOXGH VRPH NLQG RI EXWWRQV VXFK DV 2UDQJH%XWWRQ %OXH%XWWRQ
DQG VRPH JUDSKLFDO EHDQV VXFK DV -XJJOHU EHDQ ZKLFK LV D PRVW H[FLWLQJ EHDQ 0ROHFXOH
7LFN7RFN %HDQ

Summary
In this session we have seen the basic things related to the Java Beans. Here
we have dealt about the BDK and its requirements. We have used some of the
bundled beans to get the practical idea about the beans. Also we have seen the
creation of our own beans and its display in the toolbox. Now we can create
our own bean and add it to the tool box.

Going Over It Again


I. Fill in the Blanks


%'. VWDQGV IRU BBBBBBBBBBBBBBB



7KUHH SDUWV RI WKH %HDQ $UFKLWHFWXUH DUH BBBBBBBBB BBBBBBBBBB DQGBBBBBBBBB



BBBBBBBBB LV RQH RI WKH SDUW RI WKH %HDQ %R[ ZKLFK FRQWDLQV WKH EHDQV DV D WRROV



:H FDQ WXUQ RQ WKH GLVSOD\ RI WKH LQYLVLEOH EHDQ E\ VHOHFWLQJ WKH BBBBBBB PHQX LWHP



BBBBBBBB EHDQ PRQLWRUV WKH HYHQWV ILUHG E\ D EHDQ

Comp-U-Learn

83

Advanced Java Programming

II. State True or False




%HDQV DUH WKH UHXVDEOH FRPSRQHQWV



%HDQV VXSSRUWV WKH LQWURVSHFWLRQ



:H FDQ ORDG WKH ILOH EDFN LQWR %HDQER[ ZLWK WKH /RDG PHQX LWHP LQ WKH )LOH PHQX



([SOLFLW%XWWRQ EHDQ LV D VXSHU FODVV RI 2XU%XWWRQ



4XRWH0RQLWRU XVHV 50, WR FRQQHFW WR D VWRFNTXRWH VHUYHU RYHU WKH LQWHUQHW

III. One line Answers



:KDW DUH -DYD %HDQV"



:KDW DUH WKUHH SDUWV LQ WKH %HDQ $UFKLWHFWXUH" ([SODLQ WKHP



:KDW LV 3LFNOLQJ"



:KDW LV 8QSLFNOLQJ"



/LVW RXW WKH %XQGOHG %HDQV LQ WKH WRROER[



:KDW LV WKH XVH RI 4XRWH0RQLWRU"

84

Comp-U-Learn

Session 4

Inside Beans

On Completion of this Session


you will be able to understand...

) Introspection
) Persistence in Beans
) Java.Beans Package
) BeanInfo Interface

In This Session...

Introspection

Making an Applet

Persistence

Making Beans Serializable

Java.Bean Package

Introspection Methods

BeanInfo Interface

Using BeanInfo Classes

Future Descriptor Classes

Event Handling Classes

Other Interfaces

Aggregation

Inside Beans

Introspection
,Q RUGHU IRU EHDQV WR EH XVHG E\ YLVXDO GHYHORSPHQW WRROV WKH EHDQV PXVW EH DEOH WR
G\QDPLFDOO\ LQIRUP WKH WRROV RI WKHLU LQWHUIDFH PHWKRGV DQG SURSHUWLHV DQG DOVR ZKDW NLQG RI
HYHQWV WKH\ PD\ JHQHUDWH RU UHVSRQG WR 7KLV FDSDELOLW\ LV FDOOHG ,QWURVSHFWLRQ
,Q WKH MDYDEHDQV SDFNDJH WKHUH LV RQH FODVV ZKLFK SURYLGHV D VHW RI VWDWLF PHWKRGV IRU WRROV WR
REWDLQ LQIRUPDWLRQ DERXW WKH SURSHUWLHV PHWKRGV DQG HYHQWV RI D EHDQ FDOOHG ,QWURVSHFWRU
FODVV
(YHU\ EHDQ KDV D JURXS RI IHDWXUHV 7KHUH DUH WKUHH NLQGV RI IHDWXUHV SURSHUWLHV HYHQWV DQG
PHWKRGV $ SURSHUW\ LV D QDPHG DWWULEXWH RI D EHDQ WKDW FDQ EH UHDG RU ZULWWHQ E\ LQYRNLQJ
PHWKRGV RQ D EHDQ 7KH HYHQWV RI D EHDQ DUH WKH VXEFODVVHV RI MDYDXWLO(YHQW2EMHFW WKDW D EHDQ
XVHV WR VHQG PHVVDJHV WR LQWHUHVWHG OLVWHQHUV 7KH PHVVDJHV WHOO WKH OLVWHQHUV WKDW VRPHWKLQJ KDV
RFFXUUHG LQ WKH EHDQ WKDW WKH\ VKRXOG NQRZ DERXW DQG WR ZKLFK WKH\ VKRXOG SRVVLEO\ UHVSRQG
7KH PHWKRGV RI D EHDQ DUH MXVW WKH QRUPDO SXEOLF PHWKRGV RI D EHDQV FODVV WKDW PD\ EH LQYRNHG
DV D UHVXOW RI HYHQWV DQG ZKRVH QDPHV GR QRW FRQIRUP WR WKH DFFHVVRU\ SDWWHUQ %XLOGHU WRROV
XVH LQWURVSHFWLRQ WR LGHQWLI\ WKH SURSHUWLHV HYHQWV DQG PHWKRGV RI D EHDQ 0RVW EHDQV DGKHUH WR
FHUWDLQ QDPLQJ FRQYHQWLRQV %\ NQRZLQJ WKH FRPPRQ QDPLQJ FRQYHQWLRQV DQG FRPSDULQJ WKH
VLJQDWXUHV RI D EHDQV ILHOGV DQG PHWKRGV ZLWK WKHVH SDWWHUQV D EXLOGHU WRRO FDQ GHGXFH WKH
SURSHUWLHV HYHQWV DQG PHWKRGV RI D EHDQ DV ZHOO DV WHOO ZKLFK PHWKRGV EHORQJ WR ZKLFK
SURSHUWLHV DQG HYHQWV
7KH MDYDEHDQV,QWURVSHFWRU LV D FODVV ZLWK RQO\ VWDWLF PHWKRGV ZKLFK SURGXFHV %HDQ,QIR REMHFWV
DVVRFLDWHG ZLWK DQ\ EHDQ FODVV 7KH XVDJH RI WKH ,QWURVSHFWLRQ FODVV LV DV JLYHQ EHORZ

public class Introspector extends Object


)RU H[DPSOH FRQVLGHU D EHDQ KDV WZR PHWKRGV ZLWK WKH IROORZLQJ VLJQDWXUHV

public String getString();


public void setString(String s);

,W WKHQ JXHVVHV WKDW WKHVH PHWKRGV DUH DVVHVVRU DQG PXWDWRU PHWKRGV IRU D 6WULQJ SURSHUW\
QDPHG WH[W )XUWKHU HDFK EHDQ KDV D FHUWDLQ VHW RI HYHQWV WKDW LW FDQ ILUH 7R LGHQWLI\ WKHVH
HYHQWV D EXLOGHU XVHV LQWURVSHFWLRQ WR ILQG DGG DQG UHPRYH PHWKRGV IRU SDUWLFXODU HYHQW
OLVWHQHUV )RU H[DPSOH VXSSRVH LQWURVSHFWLRQ UHYHDOV WKH IROORZLQJ PHWKRGV

public void addPulseListener(PulseListener pl);


public void removePulseListener(PulseListener pl);

Comp-U-Learn

87

Advanced Java Programming


LI 3XOVH/LVWHQHU LV D VXEFODVV RI MDYDXWLO(YHQWOLVWHQHU WKHQ WKH EXLOGHU ZLOO UHFRJQL]H WKDW WKLV
EHDQ FDQ ILUH WKH HYHQWV UHVSRQGHG WR E\ D 3XOVH/LVWHQHU 7KH WRRO GRHV QRW QHHG WR XQGHUVWDQG
ZKDW D 3XOVH /LVWHQHU LV RU GRHV $OO WKH EXLOGHU GRHV LV WU\ WR PDNH VLJQDWXUHV DJDLQVW WKLV
SDWWHUQ

public void addEventTypeListener(EventTypeListener pl)


public void removeEventTypeListener(EventTypeListener pl)
7KH W\SH RI HYHQW FDQ FKDQJH EXW WKH PHWKRG QDPHV PXVW EHJLQ ZLWK DGG DQG UHPRYH PXVW
HQG ZLWK /LVWHQHU DQG WKH UHWXUQ W\SH DUJXPHQW OLVW PXVW EH H[DFWO\ DV DERYH )LQDOO\
LQWURVSHFWLRQ UHYHDOV DOO WKH SXEOLF PHWKRGV RI D EHDQ %XLOGHU WRRO HQDEOH XV WR GHWHUPLQH ZKHQ
DQG ZLWK ZKDW GDWD WKHVH PHWKRGV ZLOO EH LQYRNHG

Making an Applet
:H FDQ PDNH DQ DSSOHW IURP WKH EHDQER[ XVLQJ D PHQX LWHP FDOOHG PDNLQJ DSSOHW 7KLV PHQX
LWHP ZLOO PDNH DQ DSSOHW IURP WKH EHDQ ER[ FRQWHQWV WKDW ZLOO UXQ LQ MDYD  RU ODWHU FRPSDWLEOH
EURZVHUV VXFK DV ,QWHUQHW ([SORUHU  DQG +RWMDYD 7KLV DSSOHW LV DOVR LWVHOI D EHDQ DQG FDQ EH
ORDGHG EDFN LQWR EHDQER[
,Q WKLV VHFWLRQ ZH DUH JRLQJ WR GHDO ZLWK PDNLQJ DQ DSSOHW IURP WKH EHDQER[ ,Q WKH EHDQ ER[

0DNH$SSOHW
0DNH$SSOHW PHQX

ZH FDQ VHH D PHQX LWHP LQ WKH PDLQ PHQX FDOOHG

3XW DQ DOUHDG\ H[LVWLQJ EHDQ VD\

-HOO\ %HDQ LQ WKH EHDQ ER[ DQG FOLFN WKH

LWHP DV VKRZQ LQ WKH IROORZLQJ

ILJXUH

Fig. 4.1

88

Comp-U-Learn

Inside Beans
,I ZH FOLFN WKLV PHQX LWHP ZH FDQ JHW D GLDORJ ER[ DV VKRZQ LQ WKH IROORZLQJ ILJXUH &KRRVH WKH
MDU ILOH ZKHUH WKH DSSOHW ZLOO EH VWRUHG DQG WKH QDPH RI WKH DSSOHW FODVV %\ GHIDXOW WKH DSSOHW LV
FDOOHG 0\$SSOHW DQG LV SODFHG LQ WKH

WPS

GLUHFWRU\ LQ WKH

EHDQER[

GLUHFWRU\ +RZHYHU ZH FDQ

FKDQJH WKH SDFNDJH DQG QDPH RI WKH DSSOHW DV ZH ZLVK

Fig. 4.2
$IWHU VHOHFWLQJ D MDU ILOH SUHVV WKH 2. EXWWRQ LQ WKH GLDORJ ER[ 7KHQ ZH FDQ VHH D SURJUHVV
PHVVDJH ER[ ZKLFK ZLOO EH GLVSOD\HG DV VKRZQ LQ WKH IROORZLQJ ILJXUH

Fig. 4.3
7KH %HDQ%R[ FUHDWHV D VRXUFH FRGH ILOH IRU WKH DSSOHW DQG D VDPSOH +70/ ILOH FRQWDLQLQJ WKH
SURSHU $33/(7!WDJ FRPSLOHV WKH VRXUFH FRGH LQWR D FODVV ILOH DQG VWRUHV WKH FODVV ILOHV DQG
DQ\ QHFHVVDU\ VXSSRUW ILOHV LQWR MDU ILOHV WKDW DUH UHIHUHQFHG E\ WKH +70/ ILOH 7KH %HDQ%R[ DOVR
SURGXFHV D UHDGPH ILOH DQG D GLUHFWRU\ RI WKH RULJLQDO VRXUFH FRGH DQG FODVV ILOH
7KH IROORZLQJ ILJXUH VKRZV WKH FRPSOHWH FROOHFWLRQ RI WKH ILOHV FUHDWHG

LQ WKH

WPSP\DSSOHW

GLUHFWRU\ ZKHQ ZH DUH PDNLQJ DSSOHW IURP WKH EHDQERR[ XVLQJ WKH GHIDXOW 0\$SSOHW

Comp-U-Learn

89

Advanced Java Programming

Fig. 4.4
7KH IROORZLQJ ILJXUH VKRZV OLVW RI ILOHV LQ WKH

P\$SSOHWBILOHV GLUHFWRU\ ,Q WKLV ILJXUH ZH FDQ VHH D

PDNHILOH MDYD ILOH FODVV ILOH DQG VRPH RWKHU ILOHV

Fig. 4.5
7KH IROORZLQJ FRGH LV WKH JHQHUDWHG +70/ ILOH P\$SSOHWKWPO LQ WKH
ZLOO EH DXWRPDWLFDOO\ JHQHUDWHG E\ WKH %HDQ%R[

<html>
<head>
<title>Test page for MyApplet as an APPLET</Title>
</head>
<body>
<h1>Test for MyApplet as an APPLET</h1>

90

Comp-U-Learn

P\DSSOHW

GLUHFWRU\ 7KLV

Inside Beans
This is an example of the use of the generated
MyApplet applet. Notice the Applet tag requires several
archives, one per JAR used in building the Applet
<p>
<applet
archive=./myApplet.jar,./support.jar
,./jelly.jar

code=MyApplet
width=382
height=271
>
Trouble instantiating applet MyApplet!!
</applet>
</body>
</html>
,Q JHQHUDO ZH KDYH WR FRS\ WKH $33/(7! WDJ LQWR RXU RZQ +70/ ILOH DQG FRS\ DOO MDU ILOHV
LQWR WKH ULJKW ORFDWLRQ LQ WKH :HE VHUYHU

Persistence
3HUVLVWHQFH LV WKH DELOLW\ WR VWRUH WKH REMHFW RQ WKH GLVN LQ D SDUWLFXODU VWDWH DQG UHWULHYH WKH
REMHFW LQ WKH VDPH VWDWH LQ WKH IXWXUH IURP WKH GLVN 7KLV SURFHVV LV FDOOHG 6HULDOL]DWLRQ ,Q WKLV
VHFWLRQ ZH DUH JRLQJ WR VHH KRZ EHDQV VXSSRUW WKH VHULDOL]DWLRQ E\ XVLQJ WKH SHUVLVWHQFH
SURSHUW\
3HUVLVWHQFH LV WKH RQH RI WKH NH\ WHFKQRORJLHV RI EHDQV 7KLV SURYLGHV D PHDQV IRU EHDQV VWDWHV
DQG FRQQHFWLRQV WR EH VWRUHG ZKHQ D EHDQ LV XQORDGHG IURP WKH YLUWXDO PDFKLQH PRVW
FRPPRQO\ E\ VDYLQJ D ILOH RQ WKH GLVN
7KH FXVWRPL]DWLRQV DSSOLHG WR HDFK EHDQ PXVW EH VDYHG DV ZHOO DV WKH OLVW RI EHDQV LQ HDFK
FRQWDLQHU WKH SRVLWLRQV RI HDFK EHDQ UHODWLYH WR LWV FRQWDLQHU DQG WKH FRQQHFWLRQV EHWZHHQ WKH
EHDQV
7KH EXLOGHU WRROV XVH SHUVLVWHQFH WR VWRUH DQG UHVWRUH FXVWRPL]DWLRQV DSSOLHG WR EHDQV
$SSOLFDWLRQV EXLOW IURP WKH EHDQV PD\ DOVR XVH SHUVLVWHQFH LI WKH\ HQDEOH WKH XVHU WR PRGLI\ WKH
VWDWH RI WKH EHDQV DW UXQWLPH 7KLV LV WKH DFWXDO XVH RI SHUVLVWHQFH LQ WKH EHDQV
2EMHFW VHULDOL]DWLRQ LV RULJLQDOO\ GHYHORSHG IRU 5HPRWH0HWKRG ,QYRFDWLRQ 50,  7KLV HQDEOHV
REMHFWV WR EH FRQYHUWHG LQWR VWUHDPV RI E\WHV VHULDOL]DWLRQ DQG WKH VWUHDPV RI E\WHV WR EH
FRQYHUWHG

LQWR REMHFWV GHVHULDOL]DWLRQ  7KH VWUHDP FDQ EH ZULWWHQ WR RU UHDG IURP D ILOH D

QHWZRUN FRQQHFWLRQ RU VRPH RWKHU VRXUFH

Comp-U-Learn

91

Advanced Java Programming


:KHQHYHU ZH VHOHFW 6DYH IURP WKH PHQX LQ WKH %HDQ%R[ )LOH PHQX MDYD XVHV REMHFW
VHULDOL]DWLRQ WR WKH FXUUHQW FRQWHQWV DQG SURSHUWLHV RI DQG FRQQHFWLRQV EHWZHHQ WKH EHDQ LQ WKH
EHDQ ER[ :KHQ ZH VHOHFW /RDG IURP WKH )LOH PHQX MDYD XVHV GHVHULDOL]DWLRQ WR UHVWRUH QRW RQO\
WKH EHDQV EXW DOVR WKHLU SURSHUWLHV DQG FRQQHFWLRQV

Making Beans Serializable


,Q WKH EHDQ ER[ ZH ILQG D PHQX LWHP

6HULDOL]H&RPSRQHQW DV VKRZQ LQ WKH IROORZLQJ ILJXUH

:KHQ

ZH SUHVV WKLV PHQX LWHP ZH JHW D 6DYH GLDORJ ER[ ZKLFK ZLOO DVN XV WR VDYH WKDW EHDQ DV D
VHULDOL]HG FRPSRQHQW %\ FRQYHQWLRQ FXVWRPL]HG EHDQV DUH VDYHG LQ WKH ILOHV ZLWK D VHU
H[WHQVLRQ RQH EHDQ SHU ILOH +HUH VHU VWDQGV IRU VHULOL]HG

Fig. 4.6
:KHQ EHDQV DUH VHULDOL]HG WKH\ PXVW LPSOHPHQWV WKH MDYDLR6HULOL]DEOH RU MDYDLR([WHUQDOL]DEOH
LQWHUIDFHV %HDQV WKDW LPSOHPHQW WKH MDYDLR6HULDOL]DEOH DUH DXWRPDWLFDOO\ VDYHG %HDQV WKDW
LPSOHPHQW MDYDLR([WHUQDOL]DEOH DUH UHVSRQVLEOH IRU VDYLQJ WKHPVHOYHV
:KHQ D EHDQ REMHFW LV VDYHG WKURXJK VHULDOL]DWLRQ DOO RI WKH YDOXHV RI WKH YDULDEOHV RI WKH REMHFW
DUH VDYHG ,Q WKLV ZD\ DQ\ SURSHUW\ FKDQJHV DUH FDUULHG DORQJ ZLWK WKH REMHFW 7KH RQO\
H[FHSWLRQV WR WKLV DUH YDULDEOHV WKDW DUH LGHQWLILHG DV WUDQVLHQW 7KH YDOXHV RI WKHVH YDULDEOHV DUH
QRW VHULDOL]HG
7KH WUDQVLHQW NH\ ZRUG LV XVHG WR LGHQWLI\ D ILHOG LQ D MDYD FODVV WKDW VKRXOG QRW EH VHULDOL]HG
7\SLFDOO\ D ILHOG ZKRVH YDOXH GRHV QRW GHVFULEH WKH VWDWH RI DQ REMHFW RU D ILHOG WKDW ZLOO FKDQJH
ZKHQ WKH REMHFW LV GHVHULDOL]HG

92

Comp-U-Learn

Inside Beans
)RU H[DPSOH FRQVLGHU D 'DWH ILHOG FDOOHG DV P\WLPH WKDW VWRUHV WKH WLPH ZKHQ SURJUDP VWDUWV
UXQQLQJ

private transient Date mytime;


2EYLRXVO\ WKLV YDOXH ZLOO FKDQJH LI WKH SURJUDP LV VHULODL]HG KDOWHG DQG WKHQ UHVWDUWHG VRPH
GD\V ODWHU 7KH ROG YDOXH LV QR ORQJHU YDOLG ,W LV QRW QHFHVVDU\ WR GHFODUH ILHOGV WUDQVLHQW LQ
QRQVHULDOL]DEOH FODVVHV EHFDXVH MDYD ZLOO QHYHU DWWHPSW WR VHULDOL]H WKHP

Java.Beans Package
6R IDU ZH KDYH VHHQ VRPH VLPSOH H[DPSOHV ZKLFK DUH XVHG LQ WKH MDYDEHDQV SDFNDJH /HW XV WDNH
D ORRN DW WKH FODVVHV DQG LQWHUIDFHV RI WKH MDYDEHDQV SDFNDJHV 7KHVH FODVVHV DQG LQWHUIDFHV DUH
RUJDQL]HG LQWR WKH FDWHJRULHV RI GHVLJQ VXSSRUW LQWURVSHFWLRQ VXSSRUW DQG FKDQJH HYHQW
KDQGOLQJ VXSSRUW
7KH IROORZLQJ WDEOH OLVWV WKH PHWKRGV XQGHU WKH %HDQV FODVV ZKLFK DUH YHU\ KHOSIXO LQ WKH GHVLJQ
HQYLURQPHQW 7KHUH DUH VHYHQ VWDWLF PHWKRGV WKDW DUH XVHG E\ DSSOLFDWLRQ EXLOGHUV

Methods
instantiate()
isInstanceOf()
getInstanceOf()
isDesignTime()
setDesignTime()
isGuiAvailable()
setGuiAvailable()

Usage
Creates an instance of a bean from the serialized
object.
Determines if a bean is of a specified class or
interface.
Returns an object that represents a particular view ofa
bean.
Determines whether beans are running in an
application builder environment.
Identifies the fact that beans are running in an
application builder environment.
Determines whether a GUI is available for beans.
Identifies the fact that a GUI is available for beans.

7KH YLVLELOLW\ LQWHUIDFH LV LPSOHPHQWHG E\ FODVVHV WKDW VXSSRUW WKH FDSDELOLW\ WR DQVZHU TXHVWLRQV
DERXW WKH DYDLODELOLW\ RI D *8, IRU D EHDQ ,W SURYLGHV DYLRGLQJ*XL  QHHGV*XL  GRQW8VH*XL 
LV RN7R8VH*XL PHWKRGV 7KH LV2N7R8VH*XL PHWKRG LV LQ WKH 9LVLEOLW\6WDWH,QWHUIDFH
$QRWKHU LPSRUWDQW LQWHUIDFH LV 3URSHUW\(GLWRU LQWHUIDFH ZKLFK LV LPSOHPHQWHG E\ FODVVHV WKDW
VXSSRUW FXVWRP SURSHUW\ HGLWLQJ 7KHVH PHWKRGV VXSSRUW D UDQJH RI SURSHUW\ HGLWRUV IURP
VLPSOH WR FRPSOH[

Comp-U-Learn

93

Advanced Java Programming


7KH PHWKRGV RI WKH &XVWRPL]HU LQWHUIDFH DUH LPSOHPHQWHG E\ FODVVHV WKDW SURYLGH D JUDSKLFDO
LQWHUIDFH

IRU

FXVWRPL]LQJ

EHDQ

7KHVH

FODVVHV

DUH

UHTXLUHG

WR

EH

VXEFODVVHV

RI

MDYDDZW&RPSRQHQW VR WKDW WKH\ FDQ EH GLVSOD\HG LQ WKH SDQHO

Introspector Methods
7KH LQWURVSHFWRU FODVV SURYLGHV VWDWLF PHWKRGV WKDW DUH XVHG E\ DSSOLFDWLRQ EXLOGHUV WR REWDLQ
LQIRUPDWLRQ DERXW WKH EHDQ FODVVHV $OUHDG\ ZH KDYH VHHQ WKH LQWURVSHFWLRQ DW WKH EHJLQQLQJ RI
WKLV VHVVLRQ 7KH IROORZLQJ WDEOH OLVWV WKH LPSRUWDQW PHWKRGV LQ WKH LQWURVSHFWRU FODVV

Methods
getBeanInfo()
getBeanInfoSearchPath()
getBeanInfoSearchPath()
decapitalize()

Usage
Returns information about a class as a BeanInfo object.
Returns a String array to be used as a search path for
finding BeanInfo class.
Updates the list of package names used to find
BeanInfo class.
Convert a String object to a standard variable name in
terms of capitalization.

BeanInfo Interface
7KH LQWURVSHFWRU SURYLGHV D %HDQ,QIR REMHFW IRU D EHDQ ZKLFK LV DQ REMHFW WKDW LPSOHPHQWV WKH
MDYDEHDQV%HDQ,QIR LQWHUIDFH 7KH V\QWD[ RI WKLV LQWHUIDFH LV DV IROORZV

public interface BeanInfo


1RZ WKDW ZH KDYH JRW D EHDQ LQIR ZKDW GR ZH GR ZLWK LW" :H FDQ DVN IRU

OLVW RI SURSHUWLHV

PHWKRGV HYHQWV DQG LFRQV RI D SDUWLFXODU EHDQ 7KHUH DUH HLJKW PHWKRGV GHFODUHG LQ WKH
%HDQ,QIR LQWHUIDFH WR GR WKLV

public
public
public
public
public
public
public
public

abstract
abstract
abstract
abstract
abstract
abstract
abstract
abstract

BeanDescriptor getBeanDescriptor()
EventSetDescriptor[] getEventSetDescriptor()
int getDefaultEventIndex()
PropertyDescriptor[] getPropertyDescriptor()
int getDefaultPropertyIndex()
MethodDescriptor[] getMethodDescriptor()
image getIcon(int iconKind)
BeanInfo[] getAddtionalBeanInfo()

7KHVH PHWKRGV DOO UHWXUQ GLIIHUHQW LQIRUPDWLRQ DERXW WKH EHDQ 7KH JHW%HDQ'HVFULSWRU UHWXUQV
D EHDQ GHVFULSWRU WKDW FRQWDLQV JOREDO LQIRUPDWLRQ DERXW WKH EHDQ VXFK DV QDPH LWV FODVV QDPH
DQG LWV FXVWRPL]HU FODVV LI DQ\

94

Comp-U-Learn

Inside Beans
7KH JHW(YHQW'HVFULSWRUV PHWKRG UHWXUQV DQ DUUD\ RI HYHQW VHW GHVFULSWRUV WKDW SURYLGH
LQIRUPDWLRQ DERXW WKH HYHQWV ILUHG E\ WKH EHDQ 7KH JHW'HIDXW(YHQWLQGH[ PHWKRG UHWXUQV DQ
LQGH[ RI WKH GHIDXOW HYHQW LQ WKLV DUUD\ RU  LI WKHUH LV QR GHIDXOW HYHQW IRU D SDUWLFXODU EHDQ
7KH JHW3URSHUW\'HVFULSWRUV PHWKRG UHWXUQV DQ DUUD\ RI SURSHUW\ GHVFULSWRUV WKDW SURYLGH
LQIRUPDWLRQ DERXW WKH SURSHUWLHV RI WKH EHDQ VXFK DV WKHLU QDPHV DQG EHWWHU DQG EHWWHU PHWKRGV
7KH JHW'HIDXOW3URSHUW\,QGH[ PHWKRG UHWXUQV WKH LQGH[ RI WKH GHIDXOW SURSHUW\ LQ WKLV DUUD\ RU
 LI WKHUH LV QR GHIDXOW SURSHUW\ RI D SDUWLFXODU EHDQ
7KH JHW0HWKRG'HVFULSWRUV PHWKRG UHWXUQV DQ DUUD\ RI PHWKRG GHVFULSWRUV WKDW SURYLGH
LQIRUPDWLRQ DERXW WKH PHWKRGV H[SRVHG E\ WKH EHDQ DV WDUJHWV IRU HYHQWV 7KH JHW,FRQ PHWKRG
UHWXUQV D VPDOO LPDJH WKDW JUDSKLFDOO\ UHSUHVHQWV WKH EHDQ VXFK DV WKRVH XVHG LQ WKH EHDQ SDOHWWH
RI WKH EHDQ

ER[

)LQDOO\

JHW$GGLWLRQDO%HDQ,QIR UHWXUQV

DQ\

IXUWKHU

EHDQ

LQIR

REMHFWV

DVVRFLDWHG ZLWK WKLV EHDQ VXFK DV EHDQ LQIRV IRU WKH EHDQV VXSHU FODVVHV

Using BeanInfo Classes


,Q WKLV VHFWLRQ ZH DUH JRLQJ WR VHH KRZ WR FUHDWH FXVWRP %HDQ,QIR FODVVHV WKDW HQDEOH XV WR
RYHUULGH WKH VWDQGDUG QDPLQJ FRQYHQWLRQV %\ DGGLQJ DQ LFRQ WR RXU EHDQ ZH FDQ GHDO DERXW WKH
XVDJH RI WKH %HDQ,QIR FODVV
)RXU VWHSV DUH UHTXLUHV WR FUHDWH DQ LFRQ IRU RXU EHDQ

Design the icon


Write a BeanInfo class whose getIcon() method knows how to load the images.
Pack all the images and classes into jar archive.
Load the jar file into our tool of choice.
:H FDQ GHVLJQ RXU LFRQV HLWKHU  SL[HOV RU  SL[HOV FRORU RU EODFN DQG ZKLWH :H KDYH WR VDYH
LW DV JLI ILOHV 7KHQ ZH KDYH WR ZULWH D %HDQ,QIR FODVV $Q\ FODVV WKDW LPSOHPHQWV %HDQ,QIR
LQWHUIDFH ZLOO GR
+RZHYHU WKH %HDQ,QIR LQWHUIDFH GHFODUHV VHYHQ PHWKRGV $OWKRXJK LW LV QRW KDUG WR XVH PRVW RI
WKHVH PHWKRGV WKH SURFHVV LQWURGXFHV GHFHQFLHV EHWZHHQ WKH %HDQ,QIR FODVV DQG WKH EHDQ LWVHOI
WKDW PDNH GHYHORSPHQW WURXEOHVRPH &KDQJHV WR WKH EHDQ FODVV RIWHQ QHHG WR EH UHIOHFWHG LQ WKH
%HDQ,QIR FODVV DQG YLFH YHUVD ,W LV YHU\ HDV\ IRU WKH FODVVHV WR JHW RXW RI V\QF
)RU H[DPSOH FRQVLGHU WKH -XJJOHU EHDQ LFRQ LQ WKH 7RROER[ 7KH IROORZLQJ FRGH LV WKH %HDQLQIR
FODVV WR FUHDWH WKDW LFRQ

Comp-U-Learn

95

Advanced Java Programming


package sunw.demo.juggler;
import java.beans.*;
import java.awt.Image.*;
public class JugglerBeanInfo extends SimpleBeanInfo
{
public Image getIcon(int iconKind)
{
if (iconKind == BeanInfo.ICON_COLOR_16x16)
{
Image img;
img = loadImage(JugglerIcon.gif);
return img;
}
return null;
}
}
+HUH WKH 6LPSOH%HDQ,QIR FODVV SURYLGHV D GHIDXOW LPSOHPHQWDWLRQ RI WKH %HDQ,QIR LQWHUIDFH ,W
LV VXEFODVVHG WR LPSOHPHQW %HDQ,QIR FODVVHV
7KH WKLUG VWHS LV WR SDFN WKLV FODVV ILOH LQWR RXU MDU ILOH )RU WKDW ZH KDYH WR LQFOXGH DOO WKH ILOHV
ZKLFK DUH XVHG WR FUHDWH WKH LFRQV VXFK DV JLI ILOHV FODVV ILOHV LQ WKH PI ILOHV 7KH IROORZLQJ
FRGH LV WKH PI ILOH WR LQFOXGH WKH DERYH ILOHV LQWR WKH MDU ILOH

Manifest-Version: 1.0
Name: JugglerBean.class
Java-Bean: True
Name: JugglerBeanInfo.class
Java-Bean: False
Name: JugglerIcon.gif
Java-Bean: False
$IWHU FRPSLOLQJ WKH -XJJOHU%HDQ,QIRMDYD ILOH ZH KDYH WR PDNH D MDU ILOH E\ JLYLQJ WKH IROORZLQJ
FRPPDQGV LQ WKH FRPPDQG OLQH

96

Comp-U-Learn

Inside Beans
C:\jdk1.2\bin>jar cvfm <jar file> <manifest file> <all the .class
files>
<all the .gif files>
:H QHHG WR FRS\ WKLV MDU ILOH LQWR RXU MDUV GLUHFWRU\ ,I ZH UXQ RXU EHQDER[ ZH FDQ JHW WKH EHDQ
ZLWK DQ LFRQ ZKLFK ZH FUHDWHG DV ILJ ILOHV 6HH WKH IROORZLQJ ILJXUH ,Q WKLV ZH FDQ ILQG WKH
-XJJOHU,FRQ ZLWK WKH -XJJOHU %HDP

Fig. 4.7

FutureDescriptor Class
7KH )XWXUH'HVFULSWRU FODVV LV WKH WRSOHYHO FODVV RI D FODVV KLHUDUFK\ WKDW LV XVHG E\ %HDQ,QIRE
REMHFWV WR UHSRUW LQIRUPDWLRQ WR DSSOLFDWLRQ EXLOGHUV ,W SURYLGHV PHWKRGV WKDW DUH XVHG E\ LWV
VXEFODVVHV IRU LQIRUPDWLRQ JDWKHULQJ DQG UHSRUWLQJ
7KH %HDQ'HVFULSWRU FODVV SURYLGHV JOREDO LQIRUPDWLRQ DERXW WKH EHDQ VXFK DV EHDQV FODVV DQG
LWV &XVWRPL]HU FODVV LI DQ\ 7KH (YHQW GHVFULSWRU FODVV SURYLGHV LQIRUPDWLRQ RQ WKH HYHQWV
JHQHUDWHG E\ D EHDQ

Comp-U-Learn

97

Advanced Java Programming


7KH SURSHUW\ GHVFULSWRU FODVV SURYLGHV LQIRUPDWLRQ RQ D SURSHUWLHV DFFHVVRU\ PHWKRG DQG
SURSHUW\ HGLWRU ,W LV H[WHQGHG

E\ WKH ,QGH[HG3URSHUW\'HVFULSWRU FODVV ZKLFK SURYLGHV DFFHVV

WR WKH W\SH RI WKH DUUD\ LPSOHPHQWHG DV DQ LQGH[HG SURSHUW\ DQG LQIRUPDWLRQ DERXW WKH
SURSHUW\V DFFHVVRU PHWKRGV
7KH PHWKRG GHVFULSWRU DQG 3DUDPHWHU'HFULSWRU FODVVHV SURYLGH LQIRUPDWLRQ DERXW D EHDQV
PHWKRGV DQG SDUDPHWHUV

Event Handling Classes


7KH 3URSHUW\&KDQJH(YHQW LV JHQHUDWHG E\ EHDQV WKDW LPSOHPHQW ERXQG DQG FRQVWUDLQHG
SURSHUWLHV

DV

WKH

UHVXOW

3URSHUW\&KDQJH/LVWHQHU

RI

LQWHUIDFH

FKDQJH
LV

LQ

WKH

LPSOHPHQWHG

E\

YDOXHV
WKRVH

RI

WKHVH

FODVVHV

SURSHUWLHV

WKDW

OLVWHQ

IRU

7KH
WKDW

3URSHUW\&KDQJH(YHQW ,W FRQVLVWV RI D VLQJOH PHWKRG SURSHUW\&KDQJH  WKDW LV XVHG WR KDQGOH


WKH HYHQW

Other Interfaces
7KH

9HWRDEOH&KDQJH/LVWHQHU

LQWHUIDFH

LV

LPSOHPHQWHG

E\

FODVVHV

WKDW

KDQGOH

WKH

3URSHUW\&KDQJH(YHQW DQG WKURZ D 9HWRDEOH&KDQJH(YHQW LQ UHVSRQVH WR FHUWDLQ SURSHUW\


FKDQJHV 7KH YHWRDEOH&KDQJH PHWKRG LV XVHG WR KDQGOH WKH 3URSHUW\&KDQJH(YHQW
7KH 3URSHUW\&KDQJH6XSSRUW FODVV LV D XWLOLW\ FODVV WKDW FDQ EH VXEFODVVHG E\ EHDQV WKDW
LPSOHPHQW

ERXQG

SURSHUWLHV

DGG3URSHUW\&KDQJH/LVWHQHU 

,W

SURYLGHV

GHIDXOW

UHPRYH3URSHUW\&KDQJH/LVWHQHU

LPSOHPHQWDLRQ
DQG

RI

WKH

ILUH3URSHUW\&KDQJH

PHWKRGV

Aggregation
7KH $JJUHJDWH LQWHUIDFH KDV EHHQ DGGHG LQ -'.  DV D PHDQV RI DJJUHJDWLQJ VHYHUDO REMHFWV
LQWR D VLQJOH EHDQ ,W LV RQH RI WKH QHZ FRQFHSWV LQ %HDQV ,W LV H[WHQGHG E\ WKH 'HOHJDWH
LQWHUIDFH ZKLFK SURYLGHV PHWKRGV IRU DFFHVVLQJ $JJUHJDWH REMHFWV 7KH $JJUHJDWH2EMHFW FODVV
WKDW LPSOHPHQWV WKH 'HOHJDWH LQWHUIDFH DQG SURYLGHV D IRXQGDWLRQ IRU FUHDWLQJ RWKHU DJJUHJDWH
FODVVHV +HUH ZH KDYH WR QRWH WKDW DJJUHJDWLRQ KDV QRWKLQJ WR GR ZLWK LQKHULWDQFH ,W LV MXVW D ZD\
RI FRPELQLQJ PXOWLSOH REMHFWV

Summary
In this session we have seen the introspection concept related to the Java Beans. Also
we have dealt with serialization in JavaBeans. We have used some of the classes in
the java.beans packages. In the middle of the session we have seen the BeanInfo
interface and its classes along with an example. At the end of the session we learnt
about various descriptors and its concepts.

98

Comp-U-Learn

Inside Beans

Going Over It Again


I. Fill in the Blanks



7R REWDLQ LQIRUPDWLRQ DERXW WKH SURSHUWLHV PHWKRGV DQG HYHQWV RI D EHDQ BBBBBBB FODVV LV
XVHG




BBBBBBBBB LV WKH RQH RI WKH NH\ WHFKQRORJ\ RI EHDQV


7KH BBBBBBBBB NH\ ZRUG LV XVHG WR LGHQWLI\ D ILHOG LQ D MDYD FODVV WKDW VKRXOG QRW EH
VHULDOL]HG



BBBBBBBBB FUHDWHV DQ LQVWDQFH RI D EHDQ IURP WKH VHULDOL]HG REMHFW



7KH YHWRDEOH&KDQJH PHWKRG LV XVHG WR KDQGOH WKH BBBBBBBBBB(YHQW

II. State True or False



7KH HYHQWV RI D EHDQ DUH WKH VXEFODVVHV RI MDYDXWLO(YHQW2EMHFW



%HDQV GR QRW VXSSRUW LQWURVSHFWLRQ



:H FDQ PDNH DQ DSSOHW IURP WKH EHDQER[



&XVWRPL]HG VHULDOL]HG EHDQV DUH VDYHG LQ WKH ILOHV ZLWK D VHU H[WHQWLRQV



7KH JHW,FRQ PHWKRG UHWXUQV DQ DUUD\ RI PHWKRG GHVFULSWRUV

III. One line Answers



:KDW LV ,QWURVSHFWLRQ"



:KDW LV PHDQW E\ 6HULDOL]DWLRQ"



:KDW LV WKH XVH RI WKH 0HWKRG 'HVFULSWRUV"



'HILQH 3HUVLVWHQFH



/LVW RXW WKH PHWKRGV XQGHU ,QWURVSHFWLRQ FODVV



:KDW LV WKH XVH RI $JJUHJDWLRQ"

Comp-U-Learn

99

Session 5

Servlet Programming

On Completion of this Session


you will be able to understand...

) Java Servlets Basics


) Servlets Classes
) Developing & Running Servlets
) HTML Form Handling
) Life Cycle of Servlets

In This Session...

Introduction to Server-Side Java

Servlets

The Other World

Why Servlets?

Supports for Servlets

Servlet Architecture

Developing a Servlet

Running a Servlet

Handling HTML Form

Servlet Life Cycle

Init and Destroy Methods

Service Method

Servlet Programming

Introduction to Server-Side Java


7KH ULVH RI VHUYHUVLGH -DYD DSSOLFDWLRQV LV RQH RI WKH ODWHVW DQG PRVW H[FLWLQJ WUHQGV LQ -DYD
SURJUDPPLQJ 7KH -DYD ODQJXDJH ZDV RULJLQDOO\ LQWHQGHG IRU XVH LQ VPDOO HPEHGGHG GHYLFHV ,W
ZDV ILUVW K\SHG DV D ODQJXDJH IRU GHYHORSLQJ HODERUDWH FOLHQWVLGH ZHE FRQWHQW LQ WKH IRUP RI
DSSOHWV 8QWLO UHFHQWO\ -DYDV SRWHQWLDO DV D VHUYHUVLGH GHYHORSPHQW SODWIRUP KDG EHHQ VDGO\
RYHUORRNHG 1RZ -DYD KDV FRPH

LQWR LWV RZQ DV D ODQJXDJH LGHDOO\ VXLWHG IRU VHUYHUVLGH

GHYHORSPHQW
-DYD DSSOHWV DUH SURJUDPV WKDW DUH HPEHGGHG GLUHFWO\ LQWR ZHE SDJHV :KHQ D EURZVHU ORDGV D
ZHE SDJH ZKLFK FRQWDLQV D UHIHUHQFH WR DQ DSSOHW WKH DSSOHW E\WHFRGH LV GRZQ ORDGHG WR WKH
FOLHQW ER[ DQG H[HFXWHG E\ WKH EURZVHU 7KLV LV ILQH IRU D YHU\ WKLQ FOLHQW EXW DV RXU DSSOHWV
JURZ LQ VL]H WKH GRZQORDG WLPH EHFRPHV XQDFFHSWDEOH
$SSOHWV DUH DOVR IDFHG ZLWK FRPSDWLELOLW\ SUREOHPV ,Q RUGHU WR UXQ DQ DSSOHW ZH PXVW KDYH D
FRPSDWLEOH EURZVHU ,I RXU FXVWRPHUV GR QRW KDYH D FRPSDWLEOH EURZVHU WKH\ ZLOO QRW EH
SUHVHQWHG ZLWK WKH SURSHU FRQWHQW 7KHVH LVVXHV KDYH IRUFHG EXVLQHVV WR WDNH D ORRN DW VHYHUVLGH
-DYD DV VHUYHUVLGH SURJUDPPLQJ WRROV ZHUH WKH QHHG RI WKH KRXU
6HUYHUVLGH MDYD VROYHV WKH SUREOHPV WKDW DSSOHW IDFH :KHQ WKH FRGH LV EHLQJ H[HFXWHG RQ WKH
VHUYHUVLGH WKHUH DUH QR LVVXHV ZLWK EURZVHU FRPSDWLELOLW\ RU ORQJ GRZQORDG WLPHV 7KH MDYD
DSSOLFDWLRQ RQ WKH VHUYHU RQO\ VHQGV WKH FOLHQW VPDOO SDFNHWV RI LQIRUPDWLRQ WKDW LW FDQ
XQGHUVWDQG -DYD VHUYOHWV DUH RQH RI WKH RSWLRQV IRU VHUYHUVLGH MDYD GHYHORSPHQW

Servlets
7KHUH DUH YDULRXV MXVWLILFDWLRQV IRU WKH SUHVHQFH RI 6HUYOHWV 7KH SULPDU\ UHDVRQ EHLQJ WKDW D
:HE SDJH GLVSOD\HG DW WKH FOLHQW VLGH LV PRUH RU OHVV D VWDWLF RQH '\QDPLF +70/ WRR FRXOG
QRW WDNH LW EH\RQG DQ\WKLQJ ,I D :HE SDJH LV FRQVLGHUHG DV DQ (OHFWURQLF EURFKXUH '\QDPLF
+70/ RQO\ PDGH LW D PXOWLPHGLD &'
1RWKLQJ PRUH
%XW DV WKH WHFKQRORJ\ DQG WKH XVDJH RI ::: JUHZ SHRSOH GHPDQGHG PXFK PRUH WKDQ D PXOWL
PHGLD JLPPLFN $ :HE SDJH IURP EHLQJ D VWDWLF GRFXPHQW WR DQ DQLPDWHG RQH KDV EHFRPH D
IXOOIOHGJHG DSSOLFDWLRQ LQ LWVHOI
7RGD\ D :HE SDJH VKRXOG VKRZ IRUPV DFFHSW LQSXWV IURP WKH XVHU DFFHVV GDWDEDVHV ,W PXVW
VWRUH UHWULHYH SURFHVV GDWD ,W VKRXOG UHDFW WR WKH QHHGV RI WKH XVHU 7KH UHDFWLRQ IURP WKH :HE
SDJH VKRXOG EH EDVHG QRW MXVW RQ WKH GDWD RU WKH LQSXW RI WKH XVHU (YHQ WR WKH H[WHQW RI WKH
OD\RXW RI WKH SDJH LWVHOI

Comp-U-Learn

103

Advanced Java Programming


%XW ZKR ZLOO SHUIRUP DOO WKHVH UROHV" :KR ZLOO FUHDWH :HE SDJHV RQ WKH IO\" :KR ZLOO UHDG
GDWDEDVHV JHQHUDWH :HE SDJH FRQWHQW EDVHG RQ WKH GDWDEDVH SURFHVV WKH IRUP LQSXW JLYHQ E\
WKH XVHU" 3URFHVV GDWD DQG SUHSDUH UHSRUWV WKDW ZLOO DSSHDU LQ WKH :HE 3DJH :KR ZLOO HQVXUH
WKDW :HE SDJHV DUH XSGDWHG IUHTXHQWO\ EDVHG RQ WKH VSHFLILFDWLRQV WKDW YDU\ IURP WLPH WR WLPH"
6HUYOHW ZLOO
$ VHUYOHW LV D JHQHULF VHUYHU H[WHQVLRQ MDYD FODVV WKDW FDQ EH ORDGHG G\QDPLFDOO\ WR H[SDQG WKH
IXQFWLRQDOLW\ RI D VHUYHU 7KH VHUYOHWV DUH FRPPRQO\ XVHG ZLWK ZHE VHUYHUV ZKHUH WKH\ FDQ WDNH
WKH SODFH RI WKH &*, VFULSWV
$ VHUYOHW LV VLPLODU WR WKDW VFULSW H[FHSW WKDW WKH VHUYOHWV UXQV XQGHU D MDYD 9LUWXDO 0DFKLQH
-90 RQ WKH VHUYHU 6R LW LV VDIH DQG SRUWDEOH 6HUYHOHWV RSHUDWH VROHO\ ZLWKLQ WKH GRPDLQ RI WKH
VHUYHU 8QOLNH WKH DSSOHWV VHUYOHWV GR QRW UHTXLUH VXSSRUW RI MDYD LQ WKH ZHE EURZVHU
,PDJLQH WKH VHUYOHWV DV VHUYHUVLGH FRPSRQHQWV 6HUYOHWV DUH WR VHUYHUV ZKDW DSSOHWV DUH WR
EURZVHUV 6HUYOHW FRGH FDQ EH GRZQORDGHG LQWR D UXQQLQJ VHUYHU WR H[WHQG LWV EHKDYLRU LQ RUGHU
WR SURYLGH QHZ RU WHPSRUDU\ VHUYLFHV WR QHWZRUN FOLHQWV
$ VHUYOHW LV D G\QDPLFDOO\ ORDGHG PRGXOH WKDW VHUYLFHV UHTXHVW IURP WKH ZHE VHUYHU ,W UXQV
HQWLUHO\ LQVLGH WKH -90 %HFDXVH WKH VHUYOHW LV UXQQLQJ RQ WKH VHUYHU VLGH LW GRHV QRW GHSHQG RQ
EURZVHU FRPSDWLELOLW\ DV ZH KDYH VHHQ DERYH
6HUYOHWV FDQ EH XVHG IRU DQ\ QXPEHU RI ZHE UHODWHG DSSOLFDWLRQV 2QFH ZH VWDUW XVLQJ VHUYOHWV
ZH FDQ ILQG PRUH SUDFWLFDO DSSOLFDWLRQV IRU LW )RU H[DPSOH GHYHORSLQJ HFRRPPHUFH ZLOO
EHFRPH RQH RI WKH PRVW FRPPRQ XVHV IRU MDYD VHUYOHWV $OVR LW FDQ EH XVHG WR GHSOR\ ZHE VLWHV
WKDW RSHQ XS DV ODUJH OHJDF\ V\VWHPV RQ WKH LQWHUQHW

The Other World


,QFLGHQWDOO\ 6HUYOHWV DUHQW WKH RQO\ WKLQJ WKDW PHHW DOO WKH UHTXLUHPHQWV VWDWHG E\ WKH DERYH
VHFWLRQ 7KHUH DUH VRPH FRPSHWLWRUV WRR :H KDYH &*, 66-6 $63V DQG KRDUGV RI RWKHU
SURGXFWV DQG WHFKQRORJLHV WKDW FODLP WR EH GRLQJ H[DFWO\ WKH VDPH WKLQJ WKDW 6HUYOHW GRHV %XW
6HUYOHW VFRUHV RYHU RWKHUV RQ YDULRXV FRXQWV 7KHUH DUH YDULRXV DGYDQWDJHV RI XVLQJ 6HUYOHWV
RYHU RWKHUV
7R XQGHUVWDQG WKH SRZHU RI VHUYOHWV ZKLFK LV JRLQJ WR EH GHDOW LQ WKH QH[W VHFWLRQ ZH QHHG WR
VWHS EDFN DQG ORRN DW VRPH RI WKH RWKHU DSSURDFKHV WKDW FDQ EH XVHG WR FUHDWH :HE DSSOLFDWLRQV
7KH IROORZLQJ DUH WKH DOWHUQDWLYHV IRU VHUYOHW $OO RI WKHVH DUH YLDEOH VROXWLRQV EXW WKH\ HDFK
KDYH WKHLU RZQ VHW RI FRQVWUDLQWV ZKHQ FRPSDUHV ZLWK VHUYOHWV

104

Comp-U-Learn

Servlet Programming

Common Gateway Interface (CGI)


7KH FRPPRQ JDWHZD\ LQWHUIDFH QRUPDOO\ UHIHUHHG WR DV &*, LV RQH RI WKH PRVW FRPPRQ
VHUYHUVLGH VROXWLRQV XVHG WR GHYHORS ZHE DSSOLFDWLRQV :LWK &*, D ZHE VHUYHU SDVVHV FHUWDLQ
UHTXHVWV WR DQ H[WHUQDO SURJUDP 7KH RXWSXW RI WKH SURJUDP LV WKHQ VHQW WR WKH FOLHQW LQ SODFH RI
D VWDWLF ILOH 7KHUH DUH VRPH FRPPRQ SUREOHPV ZLWK &*, EHORZ

For CGI implementation, the most common platform independent language is


perl.
But it requires the server to start a new interpreter for every request.
CGI runs in a completely separate process from the web server. If a client submits
a request to a CGI program that terminates before responding to the web server,
the browser has no way of knowing what happened. It just sits there waiting for
a response until it times out.
A web server creates a new process every time it receives a CGI request. This
result in the loss of response time, because the server must create and initialize a
new address space for every process.
Active Server Pages (ASP)
0LFURVRIW

KDV GHYHORSHG D WHFKQLTXH IRU JHQHUDWLQJ G\QDPLF ZHE FRQWHQW FDOOHG $FWLYH 6HUYHU

3DJHV RU VRPHWLPHV MXVW $63 :LWK $VS DQ +70/ SDJH RQ WKH ZHE VHUYHU FDQ FRQWDLQ
VQLSSHWV RI HPEHGGHG FRGH 7KLV FRGH LV UHDG DQG H[HFXWHG E\ WKH ZHE VHUYHU EHIRUH LW VHQGV
WKH SDJH WR WKH FOLHQW $63 LV RSWLPL]HG IRU JHQHUDWLQJ VPDOO SRUWLRQV RI G\QDPLF FRQWHQW

Server-side JavaScript
1HWVFDSH WRR KDV D WHFKQLTXH IRU VHUYHUVLGH VFULSWLQJ ZKLFK LW FDOOV VHUYHUVLGH -DYD6FULSW RU
66-6 IRU VKRUW /LNH $63 66-6 DOORZV VQLSSHWV RI FRGH WR EH HPEHGGHG LQ +70/ SDJHV WR
JHQHUDWH G\QDPLF ZHE FRQWHQW 7KH GLIIHUHQFH LV WKDW 66-6 XVHV WKH -DYD6FULSW DV WKH VFULSWLQJ
ODQJXDJH :LWK 66-6 ZHE SDJHV DUH SUHFRPSLOHG WR LPSURYH SHUIRUPDQFH

Server Extension APIs


6HYHUDO FRPSDQLHV KDYH FUHDWHG SURSULHWDU\ VHUYHU H[WHQVLRQ $3,V IRU WKHLU ZHE VHUYHUV )RU
H[DPSOH QHWVFDSH SURYLGHV DQ LQWHUQDO $3, FDOOHG 16$3, DQG 0LFURVRIW SURYLGHV ,6$3, 8VLQJ
RQH RI WKHVH $3,V ZH FDQ ZULWH VHUYHU H[WHQVLRQV WKDW HQKDQFH RU FKDQJH WKH EDVH IXQFWLRQDOLW\
RI WKH VHUYHU DOORZLQJ WKH VHUYHU WR KDQGOH WDVNV WKDW ZHUH RQFH UHOHJDWHG WR H[WHUQDO &*,
SURJUDPV

Comp-U-Learn

105

Advanced Java Programming


7KH VHUYHUVSHFLILF $3,V XVH OLQNHG & RU & FRGH 6R WKH VHUYHU H[WHQVLRQV FDQ UXQ H[WUHPHO\
IDVW DQG PDNH IXOO XVH RI WKH VHUYHUV UHVRXUFHV 6HUYHU H[WHQVLRQV KRZHYHU DUH QRW D SHUIHFW
VROXWLRQV E\ DQ\ PHDQV %HVLGHV EHLQJ GLIILFXOW WR GHYHORS DQG PDLQWDLQ WKH\ SRVH VLJQLILFDQW
VHFXULW\ DQG UHOLDELOLW\ KD]DUGV $OVR WKH VHUYHU H[WHQVLRQV DUH LQH[WULFDEO\ WLHG WR WKH VHUYHU $3,
IRU ZKLFK WKH\ ZHUH ZULWWHQ DQG RIWHQ WLHG WR D SDUWLFXODU RSHUDWLQJ V\VWHP DV ZHOO

Why Servlets?
-DYD VHUYOHWV DUH RQH RI WKH PRVW H[FLWLQJ QHZ WHFKQRORJLHV 6HUYOHWV DUH HIILFLHQW SHUVLVWHQW
SRUWDEOH UREXVW H[WHQVLEOH VHFXUH DQG UHFHLYLQJ ZLGHVSUHDG DFFHSWDQFH ,I ZH RQO\ XVH WKHP WR
UHSODFH &*, ZH ZLOO KDYH VDYHG RXUVHOYHV D ORW RI WLPH DQG KHDGDFKH 6HUYOHWV VROYH PDQ\ RI WKH
FRPPRQ SUREOHPV ZH UXQ LQWR ZKHQ XVLQJ &*, $QG WKH\ SURYH WR KDYH D FOHDU DGYDQWDJH RYHU
PDQ\ RI WKH RWKHU DOWHUQDWLYHV

Efficient
$ VHUYOHWV LQLWLDOL]DWLRQ FRGH LV RQO\ H[HFXWHG WKH ILUVW WLPH WKH ZHE VHUYHU ORDGV LW 2QFH WKH
VHUYOHW LV ORDGHG LW LV RQO\ D PDWWHU RI FDOOLQJ D VHUYLFH PHWKRG WR KDQGOH QHZ UHTXHVWV 7KLV LV D
PXFK PRUH HIILFLHQW WHFKQLTXH WKDQ ORDGLQJ D FRPSOHWHO\ QHZ H[HFXWDEOH ZLWK HYHU\ UHTXHVW

Persistent
6HUYOHWV FDQ PDLQWDLQ VWDWH EHWZHHQ UHTXHVWV 2QFH D VHUYOHW LV ORDGHG LW VWD\V UHVLGHQW LQ WKH
PHPRU\ ZKLOH VHUYLQJ LQFRPLQJ UHTXHVWV $ VLPSOH H[DPSOH RI WKLV ZRXOG EH D 9HFWRU WKDW
KROGV D OLVW RI FDWHJRULHV XVHG LQ DQ RQOLQH FDWDORJ :KHQ WKH VHUYOHW LV LQLWLDOL]HG LW TXHULHV WKH
GDWDEDVH IRU D OLVW RI FDWHJRULHV DQG VWRUHV WKHVH FDWHJRULHV LQ D YHFWRU $V LW VHUYLFHV UHTXHVWV WKH
VHUYOHW DFFHVVHV WKH 9HFWRU WKDW KROGV WKH FDWHJRULHV LQVWHDG RI TXHU\LQJ WKH GDWDEDVH DJDLQ
7DNLQJ DGYDQWDJH RI WKH SHUVLVWHQW FKDUDFWHULVWLFV RI VHUYOHWV FDQ LPSURYH \RXU DSSOLFDWLRQV
SHUIRUPDQFH GUDVWLFDOO\

Portable
6HUYOHWV DUH GHYHORSHG XVLQJ -DYD WKHUHIRUH WKH\ DUH SRUWDEOH 7KLV JLYHV VHUYOHWV WKH DELOLW\ WR EH
PRYHG WR D QHZ RSHUDWLQJ V\VWHP ZLWKRXW FKDQJLQJ WKH VRXUFH <RX FDQ WDNH FRGH WKDW ZDV
FRPSLOHG RQ D :LQGRZV 17 SODWIRUP DQG PRYH LW WR D 6RODULV ER[ ZLWKRXW PDNLQJ DQ\ FKDQJHV

Robust
%HFDXVH VHUYOHWV DUH GHYHORSHG ZLWK DFFHVV WR WKH HQWLUH -'. WKH\ DUH D YHU\ SRZHUIXO DQG
UREXVW VROXWLRQ -DYD SURYLGHV \RX ZLWK D YHU\ ZHOO GHILQHG H[FHSWLRQ KLHUDUFK\ IRU HUURU
KDQGOLQJ ,W KDV D JDUEDJH FROOHFWRU WR SUHYHQW SUREOHPV ZLWK PHPRU\ OHDNV ,Q DGGLWLRQ LW
LQFOXGHV D YHU\ ODUJH FODVV OLEUDU\ WKDW LQFOXGHV QHWZRUN VXSSRUW ILOH VXSSRUW GDWDEDVH DFFHVV
GLVWULEXWHG REMHFW FRPSRQHQWV VHFXULW\ DQG PDQ\ RWKHU FODVVHV

106

Comp-U-Learn

Servlet Programming

Extensible
$QRWKHU DGYDQWDJH VHUYOHWV JDLQ E\ EHLQJ GHYHORSHG LQ DQ REMHFWRULHQWHG ODQJXDJH OLNH -DYD LV
WKDW WKH\ FDQ EH H[WHQGHG DQG SRO\PRUSKHG LQWR QHZ REMHFWV WKDW EHWWHU VXLW \RXU QHHGV $ JRRG
H[DPSOH RI WKLV LV DQ RQOLQH FDWDORJ <RX PD\ ZDQW WR GLVSOD\ WKH VDPH FDWDORJ VHDUFK WRRO DW WKH
WRS RI HYHU\ G\QDPLF SDJH WKURXJKRXW \RXU ZHE VLWH <RX GHILQLWHO\ GRQW ZDQW WR DGG WKLV FRGH
WR HYHU\ RQH RI \RXU VHUYOHWV 6R \RX LPSOHPHQW D EDVH VHUYOHW WKDW EXLOGV DQG LQLWLDOL]HV WKH
VHDUFK WRRO DQG WKHQ H[WHQG LW WR GLVSOD\ WUDQVDFWLRQ VSHFLILF UHVSRQVHV

Flexible
6HUYOHWV DUH TXLWH IOH[LEOH $V ZH ZLOO VHH LQ WKH VXFFHHGLQJ VHFWLRQV DQ +773 VHUYOHW FDQ EH
XVHG WR JHQHUDWH D FRPSOHWH ZHE SDJH ,W FDQ EH DGGHG WR D VWDWLF SDJH XVLQJ D 6(59/(7! WDJ
LQ ZKDW LV NQRZQ DV D VHUYHUVLGH LQFOXGH ,W FDQ EH XVHG LQ FRRSHUDWLRQ ZLWK DQ\ QXPEHU RI
RWKHU VHUYOHWV WR ILOWHU FRQWHQW LQ VRPHWKLQJ FDOOHG D VHUYOHW FKDLQ ,Q DGGLWLRQ 6XQ LQWURGXFHG
-DYD 6HUYHU SDJHV ZKLFK RIIHU D ZD\ WR ZULWH VQLSSHWV RI VHUYOHW FRGH GLUHFWO\ ZLWKLQ D VWDWLF
+70/ SDJH XVLQJ D V\QWD[ WKDW LV FXULRXVO\ VLPLODU WR $63

Secure
6HUYOHWV UXQ RQ WKH VHUYHU VLGH LQKHULWLQJ WKH VHFXULW\ SURYLGHG E\ WKH ZHE VHUYHU 6HUYOHWV FDQ
DOVR WDNH DGYDQWDJH RI WKH -DYD 6HFXULW\ 0DQDJHU

Widespread Acceptance
%HFDXVH RI DOO WKHUH LV WR EH JDLQHG IURP XVLQJ -DYD VHUYOHWV WKH\ DUH EHLQJ ZLGHO\ DFFHSWHG
9HQGRUV DUH SURYLGLQJ VHUYOHW VXSSRUW LQ WZR PDLQ IRUPV 7KH ILUVW IRUP EHLQJ VHUYHUV WKDW KDYH
EXLOW LQ VXSSRUW IRU VHUYOHWV DQG WKH VHFRQG E\ XVLQJ WKLUGSDUW\ DGGRQV 7KH IROORZLQJ WDEOHV
OLVW WKH YHQGRUV DQG WKHLU DVVRFLDWHG SURGXFWV

Supports for Servlets


/LNH MDYD LWVHOI VHUYOHWV ZHUH GHVLJQHG IRU SRUWDELOLW\ 6HUYOHWV DUH VXSSRUWHG RQ DOO SODWIRUPV
WKDW VXXSRUW MDYD DQG VHUYOHWV ZRUN ZLWK DOO WKH PDMRU ZHE VHUYHUV 7R PDNH LW HDV\ WR GHYHORS
-DYD VHUYHOHWV 6XQ KDV PDGH SXEOLFO\ DYDLODEOH D VHW RI FODVVHV WKDW SURYLGH EDVLF VHUYOHW VXSSRUW
7KH MDYD[VHUYOHW DQG MDYD[VHUYOHWKWWS SDFNDJHV FRQVWLWXWH WKLV VHUYOHW $3, 7KHVH FODVVHV FRPHV
EXQGOHG ZLWK WKH -DYD 6HUYOHW 'HYHORSPHQW .LW -6'. IRU XVH ZLWK WKH -'.

Servlet Engines
$ VHUYOHW HQJLQH LV D VHUYHU WKDW LQFOXGHV EXLOWLQ VXSSRUW IRU VHUYOHWV 6XFK DQ HQJLQH KDV WKH
DGYDQWDJH WKDW HYHU\WKLQJ ZRUNV ULJKW RXW RI WKH VFRSH 2QH GLVDGYDQWDJH KRZHYHU LV WKDW ZH

Comp-U-Learn

107

Advanced Java Programming


KDYH WR ZDLW IRU D QHZ UHOHDVH RI WKH ZHE VHUYHU WR JHW WKH ODWHVW VHUYOHW VXSSRUW %HFDXVH VHUYOHWV
DUH VWLOO IDLUO\ QHZ WKLV VRUW RI VHUYHU LV VWLOO D ELW RI D UDULW\ $V YDULRXV YHQGRUV XSJUDGH WKHLU
ZHE VHUYHUV ZH H[SHFW WKDW PDQ\ RI WKH VHUYHUV ZLOO SURYLGH EXLOWLQ VXSSRUW IRU VHUYOHWV 7KH
IROORZLQJ WDEOH OLVWV RXW WKH VWDQGDORQH VHUYOHW HQJLQHV DQG WKH DGGRQ VHUYOHW HQJLQHV ZKLFK DUH
VXSSRUWLQJ WKH VHUYOHWV

Servers with built in Servlet Support

Product
Acme.Serve
ApacheWebServer
DominoGoWebServer
DynamoApplicationServer
EnterpriseServer
EnterpriseServer
InternetConnectionServer
ITP WebServer
JavaWebServer
Jetty
JigsawServer
NetForge
ServletFactory
SunWebServer
TengahApplicationServer
VisualAgeWebRunnerToolkit
WEASAL
WebCore
Website Professional
ZeusWebServer

Vendor
AcmeJavaSoftware
Apache
Lotus
ATG
Netscape
KonaSoft
IBM
Tandem
SunMicrosystems
MorBay
WorldWideWebConsortium
Novocode
EarlyMorningSoftware
SunMicrosystems
WebLogic
IBM
WebEasy
Paralogic
OReilly
Zeus Technology

Third-Party Add-Ons with Servlet Support

Product
WAICoolRunner
Jrun
ServletExec
Servlet CGI Development Kit
Web Sphere Application Server
108

Comp-U-Learn

Vendor
Gefion Software
Live Software
NewAtlanta
Unicom
IBM

Servlet Programming

Servlet Architecture
7KHUH

DUH

WZR

SDFNDJHV

WKDW

PDNH

XS

WKH

VHUYOHW

DUFKLWHFWXUH

WKH

MDYD[VHUYOHW

DQG

MDYD[VHUYOHWKWWS 7KH MDYD[VHUYOHW SDFNDJH FRQWDLQV WKH JHQHULF LQWHUIDFHV DQG FODVVHV WKDW DUH
LPSOHPHQWHG DQG H[WHQGHG E\ DOO VHUYOHWV 7KH MDYDVHUYOHWKWWS SDFNDJH FRQWDLQV WKH FODVVHV WKDW
DUH H[WHQGHG ZKHQ FUHDWLQJ +773 VSHFLILF VHUYOHWV
$W WKH KHDUW RI WKLV DUFKLWHFWXUH LV WKH LQWHUIDFH MDYD[VHUYOHW6HUYOHW ,W SURYLGHV WKH IUDPHZRUN
IRU DOO VHUYOHWV 7KH 6HUYOHW LQWHUIDFH GHILQHV ILYH PHWKRGV 7KH WKUHH PRVW LPSRUWDQW DUH WKH
LQLW PHWKRG ZKLFK LQLWLDOL]HV D VHUYOHW WKH VHUYLFH PHWKRG ZKLFK UHFHLYHV DQG UHVSRQGV WR
FOLHQW UHTXHVWV DQG WKH GHVWUR\ PHWKRG WKDW SHUIRUPV FOHDQXS $OO VHUYOHWV PXVW LPSOHPHQW
WKLV LQWHUIDFH HLWKHU GLUHFWO\ RU WKURXJK LQKHULWDQFH ,W LV D YHU\ FOHDQ REMHFW RULHQWHG DSSURDFK
WKDW PDNHV LW YHU\ HDV\ WR H[WHQG

GenericServlet and HttpServlet


7KH WZR PDLQ FODVVHV DUH WKH *HQHULF6HUYOHW DQG +WWS6HUYOHW FODVVHV 7KH +WWS6HUYOHW FODVV LV
H[WHQGHG IURP *HQHULF6HUYOHW :KHQ ZH DUH GHYHORSLQJ RXU RZQ VHUYOHWV ZH ZLOO PRVW OLNHO\ EH
H[WHQGLQJ RQH RI WKHVH WZR FODVVHV -DYD VHUYOHWV GR QRW KDYH D PDLQ PHWKRG 7KLV LV ZK\ DOO
VHUYOHWV PXVW LPSOHPHQW WKH MDYD[VHUYOHW6HUYOHW LQWHUIDFH (YHU\ WLPH D VHUYHU UHFHLYHV D UHTXHVW
WKDW SRLQWV WR D VHUYOHW LW FDOOV WKDW VHUYOHWV VHUYLFH PHWKRG
,I ZH GHFLGH WR H[WHQG WKH *HQHULF6HUYOHW FODVV ZH PXVW LPSOHPHQW WKH VHUYLFH PHWKRG 7KH
*HQHULF6HUYOHWVHUYLFH PHWKRG KDV EHHQ GHILQHG DV DQ DEVWUDFW PHWKRG LQ RUGHU WR IRUFH XV WR
IROORZ WKLV IUDPHZRUN 7KH VHUYLFH PHWKRG SURWRW\SH LV GHILQHG DV IROORZV

public abstract void service(ServletRequest req,


ServletResponse res) throws ServletException, IOException;
7KH WZR REMHFWV WKDW WKH VHUYLFH PHWKRG UHFHLYHV DUH 6HUYOHW5HTXHVW DQG 6HUYOHW5HVSRQVH 7KH
6HUYOHW5HTXHVW REMHFW KROGV WKH LQIRUPDWLRQ WKDW LV EHLQJ VHQW WR WKH VHUYOHW ZKLOH WKH
6HUYOHW5HVSRQVH REMHFW LV ZKHUH ZH SODFH WKH GDWD WKDW ZH ZDQW WR VHQG EDFN WR WKH VHUYHU

Request
S ervice()

Server

Response
(Generic Servlet )

Fig. 5.1
Comp-U-Learn

109

Advanced Java Programming


8QOLNH WKH *HQHULF6HUYOHW ZKHQ ZH H[WHQG +WWS6HUYOHW ZH GRQW XVXDOO\ LPSOHPHQW WKH
VHUYLFH PHWKRG 7KH +WWS6HUYOHW FODVV KDV DOUHDG\ LPSOHPHQWHG LW IRU XV 7KH SURWRW\SH LV
OLVWHG EHORZ

protected void service(HttpServletRequest req,


HttpServletResponse resp)
throws ServletException, IOException;
:KHQ WKH +WWS6HUYOHWVHUYLFH PHWKRG LV LQYRNHG LW UHDGV WKH PHWKRG W\SH VWRUHG LQ WKH UHTXHVW
DQG GHWHUPLQHV ZKLFK PHWKRG WR LQYRNH EDVHG XSRQ WKLV YDOXH 7KHVH DUH WKH PHWKRGV WKDW ZH
ZLOO ZDQW WR RYHUULGH ,I WKH PHWKRG W\SH LV *(7 WKHQ LW ZLOO FDOO GR*HW  ,I WKH PHWKRG W\SH LV
3267 LW ZLOO FDOO GR3RVW  7KHUH DUH ILYH RWKHU PHWKRGV 7KH GR3XW  GR'HOHWH PHWKRGV DUH
WR KDQGOH 387 DQG '(/(7( UHTXHVWV UHVSHFWLYHO\ 2WKHUV DUH GR+HDG  GR7UDFH DQG
GR2SWLRQV  $OO RI WKHVH PHWKRGV KDYH WKH VDPH SDUDPHWHU OLVW DV WKH VHUYLFH PHWKRG
:H PD\ KDYH QRWLFHG WKH GLIIHUHQW UHTXHVWUHVSRQVH W\SHV LQ WKH SDUDPHWHU OLVW RI WKH
+WWS6HUYOHW YV WKH *HQHULF6HUYOHW FODVV 7KH +WWS6HUYOHW5HTXHVW DQG +WWS6HUYOHW5HVSRQVH
FODVVHV

DUH

MXVW

H[WHQVLRQV

RI

6HUYOHW5HTXHVW

DQG

6HUYOHW5HVSRQVH

ZLWK

+773

VSHFLILF

LQIRUPDWLRQ VWRUHG LQ WKHP

GET
Request
Response

S ervice()
d o G et( )
Ser ver
S ervice()
d o P o st( )

POST
Request
Response

HTTP Servlet

Fig. 5.2

Developing a Servlet
,Q WKLV VHFWLRQ ZH DUH JRLQJ WR GHYHORS D VLPSOH VHUYOHW XVLQJ WKH FRQFHSWV ZH KDYH FRYHUHG VR
IDU 7KH PRVW EDVLF W\SH RI +773 VHUYOHW JHQHUDWHV D IXOO +70/ SDJH 6XFK D VHUYOHW KDV DFFHVV
WR WKH VDPH LQIRUPDWLRQ XVXDOO\ VHQW WR D &*, VFULSW SOXV D ELW PRUH $ VHUYOHW WKDW JHQHUDWHV DQ
+70/ SDJH FDQ EH XVHG IRU DOO WKH WDVNV ZKHUH &*, LV XVHG FXUUHQWO\ VXFK DV +70/ IRUP
SURFHVVLQJ SURGXFLQJ UHSRUWV IURP WKH 'DWDEDVH WDNLQJ RUGHUV DQG VR IRUWK
7KH IROORZLQJ H[DPSOH VKRZV DQ +773 VHUYOHW WKDW JHQHUDWHV D FRPSOHWH +70/ SDJH WR SULQW
VRPH VWDWHPHQWV HYHU\ WLPH LW LV DFFHVVHG YLD D EURZVHU

110

Comp-U-Learn

Servlet Programming

Example 5.1:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class hello extends HttpServlet
{
public void doGet(HttpServletRequest req,
HttpServletResponse res)
throws ServletException, IOException
{
res.setContentType(text/html);
PrintWriter out= res.getWriter();
out.println(<HTML>);
out.println(<HEAD><TITLE> Hello Servlets!! </TITLE></HEAD>);
out.println(<BODY>);
out.println(<BIG> Hello Guys! Servlet Welcomes You!! </BIG>);
out.println(</BODY></HTML>);
}
}
,Q WKH DERYH H[DPSOH E\ H[WHQGLQJ WKH +WWS6HUYOHW FODVV WKH VHUYOHW RYHUULGHV WKH GR*HW
PHWKRG

WR

UHFHLYH

WKH

*(7

UHTXHVW

IRU

WKLV

VHUYOHW

)RU

WKDW

+WWS6HUYOHW5HTXHVW

DQG

+WWWS6HUYOHW5HVSRQVH REMHFWV DUH XVHG 7KH ILUVW REMHFW LV XVHG WR UHSUHVHQW WKH FOLHQWV UHTXHVW
7KH

VHFRQG

RQH

LV

XVHG WR

UHSUHVHQW

WKH

VHUYOHWV UHVSRQVH

2XU VHUYOHW ILUVW

XVHV

WKH

VHW&RQWHQW7\SH PHWKRG RI WKH UHVSRQVH REMHFW WR VHW WKH VWDQGDUG 0,0( FRQWHQW W\SH IRU
+70/ SDJHV 7KH JHW:ULWWHU PHWKRG WR UHWULYH D 3ULQW:ULWWHU FRQYHUWV MDYDV XQLFRGH
FKDUDFWHUV WR D ORFDOVSHFLILF HQFRGLQJ

Running a Servlet
,Q WKH DERYH VHFWLRQ ZH KDYH VHHQ WKH GHYHORSPHQW RI D VLPSOH VHUYOHW 7KH DERYH H[DPSOH LV
VDPH DV MDYD SURJUDPPLQJ %XW LW LQWHUDFWV ZLWK WKH ZHE VHUYHU ,Q WKLV VHFWLRQ ZH DUH JRLQJ WR
VHH KRZ ZH UXQ D VHUYOHW SURJUDP 7R UXQ RXU VHUYOHW ZH QHHG WKH IROORZLQJ WZR WKLQJV LQ RXU
PDFKLQH

Java Servlet Development Kit (JSDK). It contains the servlet API class files
which will support our servlet packages.
Any one of the Servlet engines which are listed in the previous sections.
,Q RXU ERRN DOO WKH H[DPSOHV DUH WHVWHG XVLQJ WKH $SDFKH :HE 6HUYHU 7KH IROORZLQJ DUH WKH
VWHSV WR EH IROORZHG WR UXQ D VHUYOHW XVLQJ $SDFKH :HE 6HUYHU

Comp-U-Learn

111

Advanced Java Programming

Write the servlet program and save it with .java extension.


Compile the code using javac like a Java program. (remember that the directory
which contain our .java file should have the JSDK)
Then copy the .class file in to the servlets directory of our Apache server.
Now open the browser. Enter the URL of our servlets file. The syntax is
htttp://<host name>/servlets/<.class file name without .class extension>.
,Q WKH DERYH H[DPSOH DIWHU FRPSLOLQJ RXU KHOORMDYD ILOH FRS\ WKH KHOORFODVV ILOH WR WKH

VHUYOHWV

GLUHFWRU\ RI WKH $SDFKH VHUYHU :KHQ HQWHULQJ WKH 85/ QDPH LQ WKH EURZVHU SXW WKH KRVW QDPH
DV WKH KRVW QDPH RI WKH PDFKLQH ZKLFK LV OLQNHG WR WKH $SDFKH VHUYHU :H FDQ SXW

ORFDOKRVW

LQVWHDG RI WKH KRVW QDPH LI WKH VHUYHU LV LQ RXU PDFKLQH 7KH IROORZLQJ )LJXUH  VKRZV WKH
RXWSXW RI WKH DERYH H[DPSOH

Fig. 5.3

Handling HTML Form


,Q WKH DERYH H[DPSOH ZH KDYH VHHQ D VLPSOH VHUYOHW H[DPSOH WR SULQW VRPHWKLQJ LQ WKH EURZVHU
VFUHHQ ,Q DFWXDO FDVH ZH QHHG WKH VHUYOHW DFWLRQV IURP DQ +70/ IRUP RQO\ :KHQ XVHU
VXEPLWV D +70/ IRUP LQ WKH VHUYHU VLGH VRPHWKLQJ VKRXOG EH KDSSHQHG 7KH IROORZLQJ
H[DPSOH  GHPRQVWUDWHV WKLV FRQFHSW
,Q WKLV H[DPSOH DIWHU VXEPLWWLQJ WKH XVHU QDPH DQG KLV FRXQWU\ QDPH D QHZ ZLQGRZ ZLOO
GLVSOD\ WKH GHWDLOV RI WKH XVHU )RU WKDW ZH QHHG WZR VRXUFH FRGH 2QH LV WKH +70/ FRGH WR
DFFHSW WKH GHWDLOV DQG VXEPLW WKH IRUP 7KH VHFRQG LV WKH VHUYOHW FRGH WKDW GR WKH DFWLRQ WR
GLVSOD\ WKH GHWDLOV DIWHU VXEPLWWLQJ WKH +70/ IRUP

112

Comp-U-Learn

Servlet Programming

Example 5.2:
// first.html
<HTML>
<HEAD>
<TITLE> HTML & Servlets </TITLE>
<BODY>
<FORM METHOD=GET ACTION=http://localhost/servlets/ex1">
Enter your Name :
<INPUT TYPE=text NAME=name><P>
Enter your Country Name :
<INPUT TYPE=text NAME=cname><P>
<INPUT TYPE=submit>
</FORM>
</BODY>
</HTML>

7KH DERYH ILUVWKWPO ILOH LV XVHG WR FUHDWH D SDJH LQ RUGHU WR JLYH LQSXWV DQG VXEPLW WKH IRUP
$IWHU ZULWLQJ WKH DERYH FRGH VDYH LW LQ D QHZ GLUHFWRU\ ZKHUH WKH

VHUYOHWV

GLUHFWRU\ UHVLGHV 1RWH

WKDW LQ WKH $&7,21 ZH VSHFLILHG WKH FODVV ILOH QDPH RI WKH VHUYOHW ZKLFK ZLOO SHUIRUP DFWLRQ
IRU WKH +70/ IRUP +HUH RXU +70/ ILOH LV LQ WKH VHUYHU PDFKLQH 6R ZH XVHG WKH 85/ DV
ORFDOKRVW

1RZ OHW XV VHH WKH VHUYOHW FRGH IRU WKH DERYH +70/ FRGH

// ex1.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class ex1 extends HttpServlet
{
public void doGet(HttpServletRequest req, HttpServletResponse
res)
throws ServletException, IOException
{
res.setContentType(text/html);
PrintWriter out= res.getWriter();
String name1=req.getParameter(name);
String name2=req.getParameter(cname);
out.println(<HTML>);
out.println(<HEAD><TITLE> HTML Welcomes Servlets!!
</TITLE></HEAD>);
out.println(<BODY>);
out.println(My Name is: +name1);

Comp-U-Learn

113

Advanced Java Programming


out.println(<P>);
out.println(My Country is: +name2);
out.println(</BODY></HTML>);
}
}
1RZ OHW XV VWDUW UXQQLQJ WKH VHUYOHW $IWHU EURZVLQJ WKH ILUVWKWPO ILOH LQ RXU EURZVHU ZH FDQ JHW
D VLPSOH +70/ SDJH ZKLFK LV VKRZQ LQ WKH )LJXUH

Fig. 5.4
,Q WKDW SDJH DIWHU HQWHULQJ WKH QDPH DQG FRXQWU\ QDPH FOLFN WKH VXEPLW EXWWRQ 1RZ ZH FDQ
JHW WKH VHUYOHW DFWLRQ DV WKH RXWSXW ZKLFK LV VKRZQ LQ WKH )LJXUH 

Fig. 5.5
114

Comp-U-Learn

Servlet Programming

Servlet Life Cycle


7KH VHUYOHW OLIH F\FOH LV RQH RI WKH PRVW H[FLWLQJ IHDWXUHV RI WKH VHUYOHW 7KLV DOORZV VHUYOHW
HQJLQHV WR DGGUHVV ERWK WKH SHUIRUPDQFH DQG UHVRXUFH SUREOHPV RI &*, DQG WKH VHFXULW\
FRQFHUQV RI ORZOHYHO VHUYHU $3,V VXFK DV ,6$3, 16$3,
$ VHUYOHW LV FRQVWUXFWHG DQG LQLWLDOL]HG ,W WKHQ VHUYLFHV ]HUR RU PRUH UHTXHVWV XQWLO WKH VHUYLFH
WKDW LW H[WHQGV VKXWV GRZQ $W WKLV SRLQW WKH VHUYOHW LV GHVWUR\HG DQG JDUEDJH FROOHFWHG 7KLV
GHVLJQ H[SODLQV ZK\ VHUYOHWV DUH VXFK D JRRG UHSODFHPHQW IRU &*, 7KH VHUYOHW LV ORDGHG RQO\
RQFH DQG LW VWD\V UHVLGHQW LQ PHPRU\ ZKLOH VHUYLFLQJ UHTXHVWV
7KH LQWHUIDFH WKDW GHFODUHV WKLV IUDPHZRUN LV WKH MDYD[VHUYOHW6HUYOHW LQWHUIDFH 7KH 6HUYOHW
LQWHUIDFH GHILQHV WKH OLIH F\FOH PHWKRGV 7KHVH PHWKRGV DUH WKH LQLW  WKH VHUYLFH  DQG WKH
GHVWUR\ PHWKRGV

Init and Destroy Methods


init()
7KH LQLW PHWKRG LV ZKHUH WKH VHUYOHWV OLIH EHJLQV ,W LV FDOOHG E\ WKH VHUYHU LPPHGLDWHO\ DIWHU WKH
VHUYOHW LV LQVWDQWLDWHG ,W LV RQO\ FDOOHG RQFH ,Q WKH LQLW PHWKRG WKH VHUYOHW FUHDWHV DQG LQLWLDOL]HV
WKH UHVRXUFHV WKDW LW ZLOO EH XVLQJ ZKLOH KDQGOLQJ UHTXHVWV
'HSHQGLQJ XSRQ WKH VHUYHU DQG LWV FRQILJXUDWLRQ WKH FDOOLQJ RI WKH LQLW PHWKRG FDQ EH DW DQ\
RI WKHVH WLPHV

When the server starts


When the servlet is first requested, just before the service() method is invoked.
At the request of the server administrator.
7KH LQLW PHWKRGV VLJQDWXUH LV GHILQHG DV IROORZV

public void init(ServletConfig config) throws ServletException;


7KH LQLW PHWKRG WDNHV D 6HUYOHW&RQILJ REMHFW DV D SDUDPHWHU :H VKRXOG VDYH WKLV REMHFW VR
WKDW LW FDQ EH UHIHUHQFHG ODWHU 7KH PRVW FRPPRQ ZD\ RI GRLQJ WKLV LV WR KDYH WKH LQLW PHWKRG
FDOO VXSHULQLW SDVVLQJ LW WKH 6HUYOHW&RQILJ REMHFW
:H ZLOO DOVR QRWLFH WKDW WKH LQLW PHWKRG FDQ WKURZ D 6HUYOHW([FHSWLRQ ,I IRU VRPH UHDVRQ WKH
VHUYOHW FDQQRW LQLWLDOL]H WKH UHVRXUFHV QHFHVVDU\ WR KDQGOH UHTXHVWV WKH LQLW PHWKRG VKRXOG
WKURZ D 6HUYOHW([FHSWLRQ

Comp-U-Learn

115

Advanced Java Programming

destroy()
7KLV LV WKH PHWKRG WKDW VLJQLILHV WKH HQG RI D VHUYOHWV OLIH :KHQ D VHUYLFH LV EHLQJ VKXWGRZQ LW
FDOOV WKH VHUYOHWV GHVWUR\ PHWKRG 7KLV LV ZKHUH DQ\ UHVRXUFHV WKDW ZHUH FUHDWHG LQ WKH LQLW
PHWKRG VKRXOG EH FOHDQHG XS ,I ZH KDYH DQ RSHQ GDWDEDVH FRQQHFWLRQ \RX VKRXOG FORVH LW KHUH
7KLV LV DOVR D JRRG SODFH WR VDYH DQ\ SHUVLVWHQW LQIRUPDWLRQ WKDW ZLOO EH XVHG WKH QH[W WLPH WKH
VHUYOHW LV ORDGHG 7KH VLJQDWXUH RI WKH GHVWUR\ LV YHU\ VLPSOH DV VKRZQ EHORZ

public void destroy();

Service Method
7KH VHUYLFH PHWKRG KDQGOHV DOO UHTXHVW VHQW E\ D FOLHQW ,W FDQQRW VWDUW VHUYLFLQJ UHTXHVWV XQWLO
WKH LQLW PHWKRG KDV EHHQ H[HFXWHG :H FDQQRW XVXDOO\ LPSOHPHQW WKLV PHWKRG GLUHFWO\ XQOHVV
ZH H[WHQG WKH *HQHULF6HUYOHW DEVWUDFW FODVV
7KH PRVW FRPPRQ LPSOHPHQWDWLRQ RI WKH VHUYLFH PHWKRG LV LQ WKH +WWS6HUYOHW FODVV 7KH
+WWS6HUYOHW FODVV LPSOHPHQWV WKH 6HUYOHW LQWHUIDFH E\ H[WHQGLQJ *HQHULF6HUYOHW ,WV VHUYLFH
PHWKRG VXSSRUWV VWDQGDUG +773 UHTXHVWV E\ GHWHUPLQLQJ WKH UHTXHVW W\SH DQG FDOOLQJ WKH
DSSURSULDWH PHWKRG 7KH VLJQDWXUH RI WKH VHUYLFH PHWKRG LV VKRZQ EHORZ

public void service(ServletRequest req, ServletResponse res)


throws ServletException, IOException;

7KH VHUYLFH PHWKRG LPSOHPHQWV D UHTXHVW DQG UHVSRQVH SDUDGLJP 7KH 6HUYOHW5HTXHVW REMHFW
FRQWDLQV LQIRUPDWLRQ DERXW WKH VHUYLFH UHTXHVW HQFDSVXODWLQJ LQIRUPDWLRQ SURYLGHG E\ WKH
FOLHQW 7KH 6HUYOHW5HVSRQVH REMHFW FRQWDLQV WKH LQIRUPDWLRQ UHWXUQHG WR WKH FOLHQW
7KH IROORZLQJ H[DPSOH LOOXVWUDWHV WKH OLIH F\FOH PHWKRGV RI D VHUYOHW

Example 5.3:
import
import
import
import

javax.servlet.*;
javax.servlet.http.*;
java.io.*;
java.util.*;

public class ex2 extends HttpServlet


{
public void init(ServletConfig config)
throws ServletException {

116

Comp-U-Learn

Servlet Programming
// Always pass the ServletConfig object to the super class
super.init(config);
}
//Process the HTTP Get request
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
response.setContentType(text/html);
PrintWriter out = response.getWriter();
out.println(<html>);
out.println(<head><title>BasicServlet</title></head>);
out.println(<body>);
// Prints the REQUEST_METHOD sent by the client
out.println(Your request method was + request.getMethod()
+ \n);
out.println(</body></html>);
out.close();
}
//Process the HTTP Post request
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
response.setContentType(text/html);
PrintWriter out = response.getWriter();
out.println(<html>);
out.println(<head><title>BasicServlet</title></head>);
out.println(<body>);
// Prints the REQUEST_METHOD sent by the client
out.println(Your request method was + request.getMethod()
+ \n);
out.println(</body></html>);
out.close();
}
//Get Servlet information
public String getServletInfo() {
return BasicServlet Information;
}
}

7KLV

VHUYOHW XVHV D QHZ PHWKRG JHW6HUYOHW,QIR  $ VHUYOHW FDQ RYHUULGH WKLV PHWKRG WR UHWXUQ

GHVFULSWLYH LQIRUPDWLRQ DERXW LWVHOI VXFK DV SXUSRVH DXWKRU YHUVLRQ $IWHU UXQQLQJ WKH VHUYOHW
ZH JHW WKH IROORZLQJ RXWSXW ,W ZLOO GLVSOD\ WKH *(7 PHWKRG E\ GHIDXOW ZKLFK ZLOO LQYRNH WKH
VHUYOHWV GR*HW PHWKRG

Comp-U-Learn

117

Advanced Java Programming

Fig. 5.6
7KH VHFRQG ZD\ WR LQYRNH WKH VHUYOHW LV WR FUHDWH DQ +70/ SDJH WKDW ZLOO VHQG D UHTXHVW WR WKH
VHUYOHW XVLQJ WKH 3267 PHWKRG 7KLV ZLOO LQYRNH WKH VHUYOHWV GR3RVW PHWKRG 7KH IROORZLQJ
FRGH VKRZV WKH +70/ OLVWLQJ WR FRPSOHWH WKLV WDVN

<HTML>
<HEAD>
<TITLE>
Life Cycle of Servlet
</TITLE>
</HEAD>
<BODY>
<FORM METHOD=POST ACTION=http://localhost/servlets/ex2 >
<BR><BR>
Press Submit Button to invoke your method
<BR><BR>
<INPUT TYPE=submit>
</FORM>
</BODY>
</HTML>
/HW XV EURZVH WKH DERYH +70/ FRGH $ SRSXS GLDORJ ER[ RSHQV ZLWK D UHTXHVW WR SUHVV D
6XEPLW EXWWRQ ,I ZH SUHVV WKH VXEPLW EXWWRQ ZH JHW WKH IROORZLQJ RXWSXW

118

Comp-U-Learn

Servlet Programming

Fig. 5.7
:H KDYH EDUHO\ WRXWHG WKH EDVLF IHDWXUHV RI 6HUYOHW LQ WKLV VHVVLRQ 6WULFWO\ VSHDNLQJ WKLV LV QRW
HYHQ VFUDWFKLQJ WKH VXUIDFH 6HUYOHWV DUH PXFK PRUH WKDQ ZKDW LV GLVFXVVHG LQ WKLV VHVVLRQ %XW
WZR VHVVLRQV ZLOO KDYH WR GR MXVWLFH WR ZKDW 6HUYOHWV DUH :LWK WKH XQGHUVWDQGLQJ JDLQHG LQ WKLV
VHVVLRQ ZHOO PRYH IRUZDUG WR OHDUQ DQG EXLOG D NH\ SDFNDJH FDOOHG +70/3DFNDJH LQ WKH QH[W
VHVVLRQ 7KLV SDFNDJH ZLOO KDQGOH WKH NH\ DVSHFWV RI JHQHUDWLQJ RQWKHIO\ :HE SDJH JHQHUDWLRQ
IURP WKH VHUYHU VLGH DQG DOVR DQRWKHU FUXFLDO DVSHFW RI 6HUYHU 6LGH ,QWHUQHW 3URJUDPPLQJ GDWD
SURFHVVLQJ 7KLV VNLOO VKRXOG FRPSOHWH RXU OHDUQLQJ RI 6HUYOHWV LQ -DYD

Summary
In this session we learnt about Java Servlets basics, usage of servlets, servlets
alternatives and the basic architecture of Java Servlets. Then experienced with
writing a simple servlet and running the servlet. We also learnt how the servlets are
performed behind the HTML code. At the end of the session we learnt about the life
cycle of the Java Servlets and its methods.

Going Over it Again


I. Fill in the Blanks



6HUYHOHWV RSHUDWH VROHO\ ZLWKLQ WKH BBBBBBBBBB RI WKH VHUYHU



66-6 VWDQGV IRU BBBBBBBBBBBBBBB



6HUYOHWV DUH GHYHORSHG ZLWK DFFHVV WR WKH HQWLUH BBBBBBBBBB

Comp-U-Learn

119

Advanced Java Programming




7ZR SDFNDJHV WKDW PDNH XS WKH VHUYOHW DUFKLWHFWXUH BBBBBBB DQG BBBBBBBBBBBB



BBBBBBBBBB PHWKRG KDQGOHV DOO UHTXHVW VHQW E\ D FOLHQW

I. State True or False



8VLQJ VHUYOHWV ZH FDQ GR ERWK FOLHQW DQG VHUYHU VLGH SURJUDPPLQJ



7R FRPSLOH WKH VHUYOHW SURJUDP -6'. LV QHHGHG



7KHUH DUH ILYH LPSRUWDQW PHWKRGV LQ +WWS6HUYOHW FODVV



6HUYLFH PHWKRG VLJQLILHV WKH HQG RI D VHUYOHWV OLIH



:H FDQ XVH WKH MDYDF WRRO IRU FRPSLOLQJ RXU VHUYOHW SURJUDP

III. One line Answers



:KDW DUH MDYD VHUYOHWV"



:KDW DUH WKH SDFNDJHV WKDW PDNH XS WKH 6HUYOHW DUFKLWHFWXUH"



:KDW LWHPV GR ZH QHHG WR UXQ D -DYD VHUYOHW"



/LVW RXW WKH /LIH &\FOH 0HWKRGV RI D 6HUYOHW



:ULWH DERXW *HQHULF6HUYOHW



:KDW LV 6HUYOHW (QJLQH"

120

Comp-U-Learn

Session 6

More on Servlets

On Completion of this Session


you will be able to understand...

) Server & Client


) Servlet Chaining
) HTML Generation
) Servlet in a Middle Tier

In This Session...

The Server

The Client

The Request

Servlet Chaining

HTML Generation

Building HTML Packages

HTML Object

HTML Document

HTML Elements

HTML Form

Using HTML Package

Servlet- A Middle Tier

More on Servlet

The Server
$ VHUYOHW FDQ ILQG RXW PXFK DERXW WKH VHUYHU LQ ZKLFK LW LV H[HFXWLQJ ,W FDQ OHDUQ WKH KRVW QDPH
OLVWHQLQJ SRUW DQG VHUYHU VRIWZDUH DPRQJ RWKHU WKLQJV $ VHUYOHW FDQ GLVSOD\ WKLV LQIRUPDWLRQ WR
D FOLHQW XVH LW WR FXVWRPL]H LWV EHKDYLRU EDVHG RQ D SDUWLFXODU VHUYHU SDFNDJH RU HYHQ XVH LW WR
H[SOLFLWO\ UHVWULFW WKH PDFKLQHV RQ ZKLFK WKH VHUYOHW ZLOO UXQ $OVR ZH FDQ ORFN WKH VHUYHU E\
ZULWLQJ D VHUYOHW XVLQJ WKH PHWKRGV UHODWHG WR WKH VHUYHU VLGH
7KHUH DUH IRXU PHWKRGV WKDW D VHUYOHW FDQ XVH WR OHDUQ DERXW LWV VHUYHU 7ZR WKDW DUH FDOOHG XVLQJ
WKH 6HUYOHW5HTXHVW REMHFW SDVVHG WR WKH VHUYOHW DQG WZR WKDW DUH FDOOHG IURP WKH 6HUYOHW&RQWH[W
REMHFW LQ ZKLFK WKH VHUYOHW LV H[HFXWLQJ $ VHUYOHW FDQ JHW WKH QDPH RI WKH VHUYHU DQG WKH SRUW
QXPEHU IRU D SDUWLFXODU UHTXHVW ZLWK JHW6HUYHU1DPH DQG JHW6HUYHU3RUW UHVSHFWLYHO\ 7KH
XVDJH RI WKHVH WZR PHWKRGV DUH 

public string ServletRequest.getServerName()


public int ServletRequest.getServerPort()
7KHVH

PHWKRGV DUH DWWULEXWHV RI 6HUYOHW5HTXHVW EHFDXVH WKH YDOXHV FDQ FKDQJH IRU GLIIHUHQW

UHTXHVWV LI WKH VHUYHU KDV PRUH WKDQ RQH QDPH 7KLV YDOXH FKDQJLQJ LV FDOOHG YLUWXDO KRVWLQJ
7KH 6HUYOHW&RQWH[W SURYLGHV WZR PHWKRGV YL] JHW6HUYHU,QIR DQG JHW$WWULEXWH IRU JHWWLQJ
LQIRUPDWLRQ DERXW WKH VHUYHU VRIWZDUH DQG LWV DWWULEXWHV 7KHLU XVDJHV DUH

public string ServletContext.getServerInfo()


public object ServletContext.getAttribute()
7KH JHW6HUYHU,QIR PHWKRG UHWXUQV WKH QDPH DQG YHUVLRQ RI WKH VHUYHU VRIWZDUH VHSDUDWHG E\ D
VODVK 7KH JHW$WWULEXWH UHWXUQV WKH YDOXH RI WKH QDPHG VHUYHU DWWULEXWH DV DQ REMHFW RU QXOO LI
WKH DWWULEXWH GRHV QRW H[LW 7KH DWWULEXWHV DUH VHUYHUGHSHQGHQW :H FDQ WKLQN RI WKLV PHWKRG DV
D EDFN GRRU WKURXJK ZKLFK D VHUYOHW FDQ JHW H[WUD LQIRUPDWLRQ DERXW WKH VHUYHU :H FDQ FDOO WKLV
E\ XVLQJ WKH IROORZLQJ V\QWD[

String str = getServletContext().getServerInfo()


7KH IROORZLQJ H[DPSOH LOOXVWUDWHV WKH XVDJH RI WKH DERYH H[SODLQHG PHWKRG LQ JHWWLQJ WKH
LQIRUPDWLRQ DERXW WKH VHUYHU

Example 6.1:
import java.io.*;
import java.util.*;
import javax.servlet.*;
public class ex1 extends GenericServlet
{

Comp-U-Learn

123

Advanced Java Programming

public void service(ServletRequest req, ServletResponse res)


throws ServletException,IOException
{
res.setContentType(text/plain);
PrintWriter out= res.getWriter();
out.println(Server Host Name: +req.getServerName());
out.println(ServerPort: +req.getServerPort());
out.println(Servlet Context:
+getServletContext().getServerInfo());
}
}
:H UXQ WKH DERYH VHUYOHW SURJUDP WR JHW WKH LQIRUPDWLRQ DERXW RXU VHUYHU 7KH IROORZLQJ ILJXUH
VKRZV WKH RXWSXW RI WKH DERYH VHUYOHW 7KLV RXWSXW JLYHV WKH LQIRUPDWLRQ DERXW WKH FXUUHQW
VHUYHU

Fig. 6.1

The Client
$ VHUYOHW KDV WKH DELOLW\ WR ILQG RXW WKH FOLHQW PDFKLQH IRU SDJHV UHTXLULQJ DXWKHQWLFDWLRQ DERXW
WKH DFWXDO XVHU 7KLV LQIRUPDWLRQ FDQ EH XVHG IRU ORJJLQJ DFFHVV GDWD DVVRFLDWLQJ LQIRUPDWLRQ
ZLWK LQGLYLGXDO XVHUV RU UHVWULFWLQJ DFFHVV WR FHUWDLQ FOLHQWV )RU H[DPSOH ZH FDQ UHVWULFW DFFHVV
WR WKH VRPH :HE VLWHV IRU SHUVRQV ZKR DUH QRW LQ 8QLWHG 6WDWHV DQG &DQDGD

$ VHUYOHW FDQ XVH JHW5HPRWH$GGU DQG JHW5HPRWH+RVW WR UHWULHYH WKH ,3 DGGUHVV DQG KRVW
QDPH RI WKH FOLHQW PDFKLQH UHVSHFWLYHO\ 7KH XVDJH RI WKHVH PHWKRGV DUH

124

Comp-U-Learn

More on Servlet
public String ServletRequest.getRemoteAddr()
public String ServletRequest.getRemostHost()
7KH

UHWXUQ YDOXHV RI WKH DERYH PHWKRGV DUH VWULQJ REMHFWV 7KH LQIRUPDWLRQ FRPHV IURP WKH

VRFNHW WKDW FRQQHFWV WKH VHUYHU WR WKH FOLHQW VR WKH UHPRWH DGGUHVV DQG
RI

SUR[\

VHUYHU

7KH

,3

DGGUHVV

RI

UHPRWH

KRVW

QDPH

KRVWQDPH PD\ EH WKDW

FDQ

EH

FRQYHUWHG

WR

MDYDQHW,QHW$GGUHVV REMHFW XVLQJ ,QHW$GGUHVVJHW%\1DPH  7KH V\QWD[ LV

InetAddress add = InetAddress.getByName(req.getRemoteAddr())


:KHQ FRQVLGHULQJ WKH XVHU VLGH WKHUH DUH VRPH PRUH PHWKRGV :KHQ DFFHVV WR D VHUYOHW KDV
EHHQ UHVWULYHG E\ WKH VHUYHU WKH VHUYOHW FDQ JHW WKH QDPH RI WKH XVHU WKDW ZDV DFFHSWHG E\ WKH
VHUYHU XVLQJ WKH JHW5HPRWH8VHU PHWKRG 7KH V\QWD[ LV 

public String HttpServletRequest.getRemoteUser()


$ VHUYOHW FDQ DOVR XVH WKH JHW$XWK7\SH PHWKRG WR ILQG RXW ZKDW W\SH RI DXWKRUL]DWLRQ ZDV
XVHG 7KLV PHWKRG UHWXUQV WKH W\SH RI DXWKRUL]DWLRQ XVHG RU QXOO LI DFFHVV WR WKH VHUYOHW ZDV QRW
UHVWULFWHG 7KH PRVW FRPPRQ DXWKRUL]DWLRQ W\SHV DUH %$6,& DQG ',*(67

The Request
:H KDYH VHHQ KRZ WKH VHUYOHW ILQGV RXW DERXW WKH VHUYHU DQG DERXW WKH FOLHQW 1RZ LW LV WLPH WR
PRYH RQ WR WKH UHDOO\ LPSRUWDQW VWXII KRZ D VHUYOHW ILQGV RXW ZKDW WKH FOLHQW ZDQWV (DFK DFFHVV
WR D VHUYOHW FDQ KDYH DQ\ QXPEHU RI UHTXHVW SDUDPHWHUV DVVRFLDWHG ZLWK LW 7KHVH SDUDPHWHUV DUH
W\SLFDOO\ QDPH RU D YDOXH WKDW WHOO WKH VHUYOHW RI DQ\ H[WUD LQIRUPDWLRQ LW QHHGV WR KDQGOH WKH
UHTXHVW
$ VHUYOHW FDQ UHFHLYH SDUDPHWHUV LQ D QXPEHU RI GLIIHUHQW ZD\V HYHU\ VHUYOHW UHWULHYHV LWV
SDUDPHWHUV WKH VDPH ZD\ XVLQJ JHW3DUDPHWHU DQG JHW3DUDPHWHU9DOXHV  7KH XVDJH RI WKHVH
PHWKRGV DUH

public String ServletRequest.getParameter(String name)


public String[] ServletRequest.getParameterVales(String name)
7KH JHW3DUDPHWHU UHWXUQV WKH YDOXH RI WKH QDPHG SDUDPHWHU DV D 6WULQJ RU QXOO LI WKH SDUDPHWHU
ZDV QRW VSHFLILHG 7KH VHFRQG PHWKRG UHWXUQV DOO WKH YDOXHV RI WKH QDPHG SDUDPHWHU DV DQ DUUD\
RI VWULQJ REMHFWV RU QXOO LI WKH SDUDPHWHU ZDV QRW VSHFLILHG $ VLQJOH YDOXH LV UHWXUQHG LQ DQ DUUD\
RI OHQJWK  $OVR WKH JHW3DUDPHWHU1DPHV PHWKRG LV XVHG WR UHWXUQV WKH SDUDPHWHUV QDPHV $
VHUYOHW FDQ UHWULHYH WKH UDZ TXHU\ VWULQJ RI WKH UHTXHVW ZLWK JHW4XHU\6WULQJ 
,Q DGGLWLRQ WR WKH SDUDPHWHUV DQ +773 UHTXHVW FDQ LQFOXGH

VRPHWKLQJ FDOOHG H[WUD SDWK

LQIRUPDWLRQ RU D YLUWXDO SDWK $ VHUYOHW FDQ XVH JHW3DWK,QIR PHWKRG WR JHW H[WUD SDWK
LQIRUPDWLRQ 7KLV PHWKRG UHWXUQV WKH H[WUD SDWK LQIRUPDWLRQ DVVRFLDWHG ZLWK WKH UHTXHVW RU QXOO

Comp-U-Learn

125

Advanced Java Programming


LI

QRQH

ZDV

JLYHQ

7KH

RWKHU

PHWKRG

LV

JHW3DWK7UDQVODWHG 

,W

UHWXUQV

WKH

H[WUD

SDWK

LQIRUPDWLRQ UHODWHG WR D UHDO ILOH V\VWHP SDWK RU QXOO LI WKHU LV QR H[WUD SDWK LQIRUPDWLRQ
7KH IROORZLQJ H[DPSOH GHPRQVWUDWHV WKH PHWKRGV XQGHU WKH 5HTXHVW DQG WKH 3DWK VHFWLRQV

Example 6.2:
import
import
import
import
public
{

java.io.*;
java.util.*;
javax.servlet.*;
javax.servlet.http.*;
class ex2 extends HttpServlet

public void doGet(HttpServletRequest req, HttpServletResponse


res)
throws ServletException,IOException
{
res.setContentType(text/plain);
PrintWriter out= res.getWriter();
out.println(Query String...);
out.println(req.getQueryString());
out.println(The file \ + req.getPathInfo()+\);
out.println(Is stored at \ + req.getPathTranslated()+\);
}
}
$IWHU UXQQLQJ WKH DERYH VHUYOHW ZH FDQ JHW WKH IROORZLQJ RXWSXW +HUH
EHFDXVH WKHUH DUH QR UHWXUQ YDOXHV IRU WKH FRUUHVSRQGLQJ PHWKRGV

Fig. 6.2
126

Comp-U-Learn

ZH JHW DOO QXOO UHWXUQ

More on Servlet
,I ZH HQWHU VRPHWKLQJ DORQJ ZLWK WKH 85/ LQ WKH DGGUHVV EDU RXU VHUYOHW ZLOO FRQVLGHU WKDW
VWULQJ DV D SDUDPHWHU DQG UHWXUQ WKH VDPH $IWHU WKH ILOH QDPH ZLWKRXW JLYLQJ DQ\ VSDFH SDVV D
SDUDPHWHU DIWHU D " PDUN )RU H[DPSOH

http://205.166.22.74/servlets/ex2?parameter1
1RZ UXQ WKH VHUYOHW :H JHW WKH RXWSXW ZLWK RXU SDUDPHWHU QDPH ,W LV VKRZQ LQ WKH )LJXUH 

Fig. 6.3

Note
When giving any URL there should not be a space. Also the ? symbol
separates the file name from the parameters. If we want to give more than one
parameter, we can pass a number of parameters concatenating with + symbol.
For example, +WWSVHUYOHWVH["SDUDPHWHUSDUDPHWHU

Servlet Chaining
6R IDU ZH KDYH VHHQ KRZ DQ LQGLYLGXDO VHUYOHW FDQ FUHDWH FRQWHQW E\ JHQHUDWLQJ D IXOO SDJH RU E\
EHLQJ XVHG LQ D VHUYHUVLGH 6HUYOHWV FDQ DOVR FRRSHUDWH WR FUHDWH FRQWHQW LQ D SURFHVV FDOOHG
VHUYOHW FKDLQLQJ
,Q PDQ\ VHUYHUV WKDW VXSSRUWV VHUYOHW D UHTXHVW FDQ EH KDQGOHG E\ D VHTXHQFH RI VHUYOHWV 7KH
UHTXHVW IURP WKH FOLHQW EURZVHU LV VHQW WR WKH ILUVW VHUYOHW LQ WKH FKDLQ 7KH UHVSRQVH IURP WKH
ODVW VHUYOHW LQ WKH FKDLQ LV UHWXUQHG WR WKH EURZVHU ,Q EHWZHHQ WKH RXWSXW IURP HDFK VHUYOHW LV
SDVVHG DV LQSXW WR WKH QH[W VHUYOHW 6R HDFK VHUYOHW LQ WKH FKDLQ KDV WKH RSWLRQ WR FKDQJH RU

Comp-U-Learn

127

Advanced Java Programming


H[WHQG WKH FRQWHQW 7KLV SURFHVV LV H[SODLQHG LQ WKH IROORZLQJ ILJXUH

S erv let1

Request

S erv let2

Server

Response

S erv let3

Fig. 6.4
7KHUH DUH WZR FRPPRQ ZD\V WR WULJJHU D FKDLQ RI VHUYOHWV IRU DQ LQFRPLQJ UHTXHVW

)LUVW ZH

FDQ WHOO WKH VHUYHU WKDW FHUWDLQ 85/V VKRXOG EH KDQGOHG E\ DQ H[SOLFLWO\ VSHFLILHG FKDLQ
2WKHUZLVH ZH FDQ WHOO WKH VHUYHU WR VHQG DOO WKH RXWSXW RI D SDUWLFXODU FRQWHQW W\SH WKURXJK D
VSHFLILHG VHUYOHW EHIRUH LW LV UHWXUQHG WR WKH FOLHQW HIIHFWLYHO\ FUHDWLQJ D FKDLQ RQ WKH IO\ :KHQ D
VHUYOHW FRQYHUWV RQH W\SH RI FRQWHQW LQWR DQRWKHU WKH WHFKQLTXH LV FDOOHG )LOWHULQJ
6RPH DGYDQWDJHV RI WKH VHUYOHW FKDLQLQJ DUH OLVWHG EHORZ

By using the servlets we can quickly change the appearance of a page or a group
of pages, or type of content.
We can take a kernal of content and display it in special formats.
It also support esoteric data types
They handle the content of the future, so we dont have to run our script every
time new content is added.
&RQVLGHU WKH IROORZLQJ H[DPSOH 7KLV LV XVHG WR UHPRYH WKH %/,1.! WDJ IURP VHUYHUV
VWDWLF+70/ SDJHV DOO LWV G\QDPLFDOO\ FUHDWHG +70/ SDJHV DQG DOO WKH SDJHV DGGHG WR LW LQ WKH
IXWXUH ,Q WKLV H[DPSOH WKH VHUYOHW UHDGV HDFK OLQH LQ WKH +70/ FRGH IRU D SDUWLFXODU +70/
SDJH DQG UHPRYH LW E\ XVLQJ WKH UHSODFH PHWKRG 7KHQ LW UHWXUQV WKDW SDUWLFXODU OLQH WR WKH
FOLHQW WKDW PHDQV DQRWKHU VHUYOHW LQ WKH FKDLQ

Example 6.3:
import
import
import
import

java.io.*;
java.util.*;
javax.servlet.*;
javax.servlet.http.*;

public class ex3 extends HttpServlet


{

128

Comp-U-Learn

More on Servlet
public void doGet(HttpServletRequest req, HttpServletResponse
res)
throws ServletException,IOException
{
String contentType=req.getContentType();
if(contentType==null)
return;
res.setContentType(contentType);
PrintWriter out= res.getWriter();
BufferedReader in= req.getReader();
String line=null;
while((line= in.readLine())!=null)
{
line=replace(line,<BLINK>, );
line=replace(line,</BLINK>, );
out.println(line);
}
}
public void doPost(HttpServletRequest req, HttpServletResponse
res)
throws ServletException,IOException
{
doGet(req,res);
}
private String replace(String ln, String old, String news)
{
int id=0;
while((id=ln.indexOf(old, id))>=0)
{
ln=ln.substring(0,id)+ news + ln.substring(id+old.length());
id+=news.length();
}
return ln;
}
}

HTML Generation
6R IDU ZH KDYH VHHQ WKDW DOO WKH H[DPSOHV KDYH JHQHUDWHG LWV +70/ DW WKH FOLHQW VLGH DV RQH
ORQJ 6WULQJ WKDW LV VHQW WR WKH FOLHQW 7KLV VWUDWHJ\ ZRUNV ILQH IRU VPDOO :HE SDJHV OLNH RXU ERRN
H[DPSOHV EXW LW TXLFNO\ EHFRPHV XQZLHOG\ IRU ODUJHU PRUH FRPSOLFDWHG SDJHV )RU WKDW W\SH RI
:HE SDJH LW LV VRPHWLPHV KHOSIXO WR XVH DQ +70/ JHQHUDWLRQ SDFNDJH LQ WKH VHUYHU VLGH
7KLV +70/ JHQHUDWLRQ SDFNDJH SURYLGHV D VHUYOHW ZLWK D VHW RI FODVVHV WKDW DEVWUDFW DZD\ WKH
GHWDLOV RI +70/ ,Q SDUWLFXODU WKH +70/ WDJV 7KH OHYHO RI DEVWUDFWLRQ GHSHQGV RQ WKH

Comp-U-Learn

129

Advanced Java Programming


SDFNDJH 8VLQJ SDFNDJHV D ZHE SDJH LV VHHQ DV DQ REMHFW WKDW FDQ FRQWDLQ RWKHU +70/ REMHFWV
VXFK DV OLVWV DQG WDEOHV WKDW FDQ FRQWDLQ \HW PRUH +70/ REMHFWV VXFK DV OLVW LWHPV DQG WDEOH
FHOOV 7KLV REMHFW RULHQWHG DSSURDFK FDQ JUHDWO\ VLPSOLI\ WKH WDVN RI JHQHUDWLQJ +70/ DQG PDNH
VHUYOHW HDVLHU WR ZULWH HDVLHU WR PDLQWDLQ DQG PRUH HIILFLHQW IURP WKH VHUYHU VLGH

Building HTML Packages


,Q DOO RI RXU SULRU H[DPSOHV ZH ZHUH KDQG FRGLQJ +70/ ,W ZRXOG EH PXFK HDVLHU WR XVH DQ
REMHFWRULHQWHG DSSURDFK )RU H[DPSOH LI ZH ZDQW WR VHQG D WDEOH RI ILJXUHV WR WKH FOLHQW ZH
ZRXOG LQVWDQWLDWHG D WDEOH REMHFW DGG WKH GDWD FHOOV DQG VWUHDP LW WR WKH FOLHQW RQWKHIO\ 7KLV
PHWKRG LV PXFK VLPSOHU WKDQ WU\LQJ WR OHDUQ WKH HQWLUH +70/ WDJV QHFHVVDU\ WR GR WKLV
,Q WKLV VHFWLRQ ZH VKDOO FUHDWH D VDPSOH SDFNDJH WKDW HQFDSVXODWHV +70/ )RU WKDW ZH KDYH WR
FUHDWH DQ +70/ SDFNDJH ZLWK UHVSHFW WR RXU UHTXLUHPHQWV +HUH ZH KDYH VHHQ GHPRQVWUDWLRQ
ZLWK WKH SDFNDJHV IRU +70/2EMHFW +70/ 'RFXPHQWV DQG 3DFNDJHV IRU +70/ (OHPHQWV
VXFK DV 7H[W ,QSXW /LQH EUHDN $W WKH HQG RI WKLV VHVVLRQ ZH DUH JRLQJ WR LPSOHPHQW WKHVH
SDFNDJHV LQ D VHUYOHW SURJUDP 6R ZH KDYH WR FRPH RXW RI WKH VHUYOHW IRU VRPH WLPH WR HQWHU LQ
WR WKH +70/ 3DFNDJH JHQHUDWLRQ
:H ZLOO ILUVW FUHDWH D EDVH FODVV ZKLFK DOO RXU +70/ REMHFWV ZLOO LQKHULW :H ZLOO WKHQ GHILQH WKH
UHTXLUHPHQWV DQG FUHDWH WKH LQGLYLGXDO REMHFWV 7KLV LV QRW DQ DOOLQFOXVLYH OLVW RI +70/ REMHFWV
EXW LW GRHV GHILQH D IUDPHZRUN IRU IXWXUH H[WHQVLRQ $W WKH HQG RI WKLV VHFWLRQ ZH ZLOO SXW WKHVH
REMHFWV WR ZRUN ZLWK DQ H[DPSOH VHUYOHW

HTMLObject
7KH ILUVW FODVV ZH FDQ FUHDWH LV DQ +70/2EMHFW ,W LV WKH URRW FODVV RI RXU +70/ SDFNDJH 7KH
UHTXLUHPHQWV IRU +70/2EMHFW LV LW PXVW EH D FRQWDLQHU IRU RWKHU +70/2EMHFWV PXVW FRQWDLQ
D VLQJOH PHWKRG IRU VWUHDPLQJ +70/ WH[W PXVW EH DEOH WR VHW WKH REMHFWV DOLJQPHQW 7KH
IROORZLQJ H[DPSOH VKRZV WKH SDFNDJH FRGH IRU WKH +70/ REMHFW FODVV

Example 6.4:
package HTML;
import java.util.Vector;
public abstract class HTMLObject{
protected Vector htmlObjects = null;
// Static Alignment values
public static final int LEFT = 0;
public static final int CENTER = 1;
public static final int RIGHT = 2;
// Set the objects initial alignment to LEFT
private int alignment = LEFT;
// This abstract method forces all derived classes to

130

Comp-U-Learn

More on Servlet
// implement the toHTML() method. The toHTML() method
// should return the HTML String necessary to
// display this object in its current state.
public abstract String toHTML();
// Constructor
public HTMLObject() {
// Default size of HTMLObject vector
htmlObjects = new Vector(5);
}
// Add a HTMLObject
public void addObject( HTMLObject value) {
if ( value != null ) {
htmlObjects.addElement(value);
}
}
// Remove a HTMLObject, if the element is removed
// successfully, returns true
public boolean removeObject( HTMLObject value) {
if ( value != null ) {
return htmlObjects.removeElement(value);
}
return false;
}
// Set the objects Alignment
public void setAlignment(int value) {
if ( value >= LEFT && value <= RIGHT ) {
alignment = value;
}
}
// Get the objects Alignment
public int getAlignment() {
return alignment;
}
}

HTMLDocument
7KH +70/'RFXPHQW REMHFW ZLOO EH WKH RXWHUPRVW FRQWDLQHU ,W ZLOO OLNH DOO RI RXU +70/
REMHFWV EH GHULYHG IURP +70/2EMHFW 0RVW VHUYOHWV ZLOO FUHDWH DQ +70/'RFXPHQW DQG DGG
RWKHU +70/2EMHFWV WR LW 7KH UHTXLUHPHQWV IRU DQ +70/ 'RFXPHQW DUH WKDW LW PXVW EH DEOH
WR VHW WKH 7LWOH WKH %DFNJURXQG ,PDJH WKH %DFNJURXQG &RORU

WKH 7H[W &RORU DQG WKH /LQN

&RORU 7KH IROORZLQJ +70/'RFXPHQWMDYD GLVSOD\V WKH VRXUFH IRU WKH +70/'RFXPHQW FODVV

Example 6.5:
package HTML;
public class HTMLDocument extends HTMLObject {
private String title = new String();
private String backgroundImage = new String();

Comp-U-Learn

131

Advanced Java Programming


private String backgroundColor = new String();
private String textColor = new String();
private String linkColor = new String();
private String vlink = new String();
private String alink = new String();
// Default Constructor
public HTMLDocument() {
}
// Constructor with title
public HTMLDocument(String value) {
title = value;
}
// Set the document Title
public void setTitle(String value) {
if ( value != null ) {
title = value;
}
}
// Get the document Title
public String getTitle() {
return title;
}
// Set the document Background Image
public void setBackgroundImage(String value) {
if ( value != null ) {
backgroundImage = value;
}
}
// Get the document Background Image
public String getBackgroundImage() {
return backgroundImage;
}
// Set the document Background Color
public void setBackgroundColor( String value) {
if ( value != null ) {
backgroundColor = value;
}
}
// Get the document Background Color
public String getBackgroundColor() {
return backgroundColor;
}
// Set the document Text Color
public void setTextColor(String value) {
if ( value != null ) {
textColor = value;
}
}
// Get the document Text Color
public String getTextColor() {
return textColor;

132

Comp-U-Learn

More on Servlet
}
// Set the document Link Color
public void setLinkColor(String value) {
if ( value != null ) {
linkColor = value;
}
}
// Get the document Link Color
public String getLinkColor() {
return linkColor;
}
}
// Return String containing the HTML formatted document
public String toHTML() {
String document = new String(<html><head>\n);
document = document.concat(<title> + title +
</title></head>\n\n<body );
if ( backgroundImage.length() > 0 ) {
document = document.concat(BACKGROUND=\ +
backgroundImage + \ );
}
String color = getBackgroundColor();
if ( color.length() > 0 ) {
document = document.concat(BGCOLOR=\ + color +
\ );
}
String textColor = getTextColor();
if ( textColor.length() > 0 ) {
document = document.concat(TEXT=\ + textColor +
\ );
}
if ( linkColor.length() > 0 ) {
document = document.concat(LINK=\ + linkColor +
\ );
}
if ( vlink.length() > 0 ) {
document = document.concat(VLINK=\ + vlink + \ );
}
if ( alink.length() > 0 ) {
document = document.concat(ALINK=\ + alink + \ );
}
document = document.concat(>\n);
// Iterate through all objects in the htmlObjects Vector
for ( int x = 0; x < htmlObjects.size(); x ++ ) {
try {
document =
document.concat(
((HTMLObject)htmlObjects.elementAt(x)).toHTML() +
\n);
}
catch (ArrayIndexOutOfBoundsException ex) {
// This will only log the error to stderr

Comp-U-Learn

133

Advanced Java Programming


System.err.println(ex.getMessage());
}
catch (Exception ex) {
// This will only log the error to stderr
System.err.println(ex.getMessage());
}
}
// Then close the document
document = document.concat(\n</body>\n</html>\n);
return document;
}
}

HTML Elements
,Q WKLV VHFWLRQ ZH DUH JRLQJ WR FUHDWH SDFNDJHV IRU WKH +70/ HOHPHQWV 7KH IROORZLQJ DUH WKH
+70/ HOHPHQWV IRU GHVLJQLQJ WKH :HE SDJHV XVLQJ 6HUYOHW SURJUDP

HTMLText
7KH +70/7H[W REMHFW ZLOO EH XVHG WR GLVSOD\ VLPSOH +70/ WH[W 7KH JLYHQ +70/7H[WMDYD
GLVSOD\V WKH VRXUFH IRU WKH +70/7H[W FODVV

Example 6.6:
package HTML;
public class HTMLText extends HTMLObject {
private String text = new String();
private boolean bold = false;
private boolean italic = false;
private boolean underline = false;
private boolean center = false;
// Default Contructor
public HTMLText() {
}
// Constructor initialized with Text value
public HTMLText(String value) {
if ( value != null ) {
text = value;
}
}
// Set the text value
public void setText(String value) {
if ( value != null ) {
text = value;
}
}
// Get the current text value
public String getText() {

134

Comp-U-Learn

More on Servlet
return text;
}
// Set Text Bold to true/false
public void setBold(boolean value) {
bold = value;
}
// Returns True if Bold is on
public boolean isBold() {
return bold;
}
// Set Text Italic to true/false
public void setItalic( boolean value) {
italic = value;
}
// Returns True if Italic is on
public boolean isItalic() {
return italic;
}
// Set Text Underline to true/false
public void setUnderline( boolean value) {
underline = value;
}
// Returns True if Underline is on
public boolean isUnderline() {
return underline;
}
// Set Text Center to true/false
public void setCenter( boolean value) {
center = value;
}
// Returns True if Center is on
public boolean isCenter() {
return center;
}
// Set Text Preformatted to true/false
// Return String containing the HTML formatted Text
public String toHTML() {
String html = new String (text);
if ( isBold() ) {
html = (<B> + html + </B>);
}
if ( isItalic() ) {
html = (<I> + html + </I>);
}
if ( isUnderline() ) {
html = (<U> + html + </U>);
}
if ( isCenter() ) {
html = (<CENTER> + html + </CENTER>);
}
if ( isPreformatted() ) {
html = (<PRE> + html + </PRE>);

Comp-U-Learn

135

Advanced Java Programming


}
return html;
}
}

HTMLHeading
7KH +70/+HDGLQJ REMHFW ZLOO EH XVHG WR GLVSOD\ D VLPSOH +70/ KHDGLQJ 7KH FRGH IRU WKH
+70/+HDGLQJ LV JLYHQ EHORZ

Example 6.7:
package HTML;
public class HTMLHeading extends HTMLObject {
private String text = new String();
private int heading;
public static final int H1 = 1;
public static final int H2 = 2;
public static final int H3 = 3;
public static final int H4 = 4;
public static final int H5 = 5;
public static final int H6 = 6;
// Constructor that initializes Heading Level to H1
public HTMLHeading() {
heading = H1;
}
// Constructor that sets the initial Heading Text and Level
public HTMLHeading(String txt, int head) {
if ( txt != null ) {
text = txt;
}
if ( head >= H1 && head <= H6 ) {
heading = head;
}
}
// Set Heading Text
public void setText( String value) {
if ( value != null ) {
text = value;
}
}
// Get Heading Text
public String getText() {
return text;
}
// Set Heading Level
public void setHeadingLevel( int value) {
if ( value >= H1 && value <= H6 ) {
heading = value;
}
}

136

Comp-U-Learn

More on Servlet
// Get Heading Level
public int getHeadingLevel() {
return heading;
}
// Return String containing the HTML formatted Heading
public String toHTML() {
String html = new String(<H + heading);
switch ( getAlignment() ) {
case HTMLObject.LEFT:
html = html.concat( ALIGN=\LEFT\);
break;
case HTMLObject.CENTER:
html = html.concat( ALIGN=\CENTER\);
break;
case HTMLObject.RIGHT:
html = html.concat( ALIGN=\RIGHT\);
break;
}
html = html.concat(> + text + </H + heading + >);
return html;
}
}

HTMLLineBreak
7KH +70//LQH%UHDN FODVV LV D VLPSOH FODVV WKDW FUHDWHV D VWULQJ FRQWDLQLQJ WKH +70/ WDJ
QHFHVVDU\ WR GLVSOD\ D OLQH EUHDN 7KHUH DUH QR VSHFLDO UHTXLUHPHQWV +70//LQH%UHDNMDYD
GLVSOD\V WKH VRXUFH IRU WKH +70//LQH%UHDN FODVV

Example 6.8:
package HTML;
public class HTMLLineBreak extends HTMLObject
{
// Default Constructor
public HTMLLineBreak() {
}
// Return String containing the HTML formatted Line Break
public String toHTML() {
return new String(<BR>);
}
}

HTMLInput
7KH +70/,QSXW REMHFW LV WKH URRW REMHFW IRU DOO +70/ ,QSXW REMHFWV ,W LV WKH VXSSRUWLQJ
REMHFW IRU WKH +70/)RUP REMHFW 7KH PLQLPXP UHTXLUHPHQWV IRU DQ +70/ ,QSXW REMHFW DUH
WKDW LW PXVW EH DEOH WR VHW WKH W\SH RI WKH ,1387 REMHFW WKH QDPH RI WKH ,1387 REMHFW DQG EH
DEOH WR VSHFLI\ DGGLWLRQDO DWWULEXWHV IRU VSHFLDOL]HG LQSXW W\SH 7KH +70/,QSXWMDYD GLVSOD\V WKH

Comp-U-Learn

137

Advanced Java Programming


VRXUFH IRU WKH +70/,QSXW FODVV

Example 6.9:
package HTML;
public class HTMLInput extends HTMLObject {
protected String type = new String();
protected String name = new String();
protected String input_value = new String();
protected String attributes = new String();
// Default Constructor
public HTMLInput() {
}
// Set the Input Type
protected void setType(String value) {
if ( value != null ) {
type = value;
}
}
// Get the Input Type
public String getType() {
return type;
}
// Set the Input Name
public void setName(String value) {
if ( value != null ) {
name = value;
}
}
// Get the Input Name
public String getName() {
return name;
}
// Set the value of the Input Object
public void setValue(String value) {
if ( value != null ) {
input_value = value;
}
}
// Get the value of the Input Object
public String getValue() {
return input_value;
}
// Set the additional attributes string
// This will be used to specialize an input type
protected void setAttributes(String value) {
if ( value != null ) {
attributes = value;
}
}
// Get the additional attributes string

138

Comp-U-Learn

More on Servlet
public String getAttributes() {
return attributes;
}
// Return String containing the HTML formatted Input
public String toHTML() {
String html = new String(<INPUT TYPE=\ + getType() +
\ NAME=\ + getName() + \ );
// Add the VALUE
if ( input_value.length() > 0 ) {
html = html.concat( VALUE=\ + input_value + \);
}
// If there is any additional attributes
if ( attributes != null ) {
html = html.concat(attributes);
}
// Ending Character
html = html.concat(>);
return html;
}
}

HTMLInput Object
7KH ILUVW LQSXW REMHFW ZH ZLOO FUHDWH LV WKH +70/7H[W,QSXW REMHFW ,W HQFDSVXODWHV WKH
IXQFWLRQDOLW\

QHFHVVDU\

WR

FUHDWH

DQ

+70/

7H[W

LQSXW

VWULQJ

7KH

IROORZLQJ

+70/7H[W,QSXWMDYD GLVSOD\V WKH VRXUFH IRU WKH +70/7H[W,QSXW FODVV

Example 6.10:
package HTML;
public class HTMLTextInput extends HTMLInput {
private int size = -1;
private int maxlength = -1;
// Default Constructor
public HTMLTextInput() {
// Set the Input Type
setType(TEXT);
}
// Set the Input Size
public void setSize(int value) {
if ( value > -1 ) {
size = value;
}
}
// Get the Input Size
public int getSize() {
return size;
}
// Set the Maximum Length
public void setMaxLength(int value) {

Comp-U-Learn

139

Advanced Java Programming


if ( value > -1 ) {
maxlength = value;
}
}
// Get the Maximum Length
public int getMaxLength() {
return maxlength;
}
// Return String containing the HTML formatted Text Input
public String toHTML() {
String html = new String();
if ( size > -1 ) {
html = html.concat( SIZE= + size);
}
if ( maxlength > -1 ) {
html = html.concat( MAXLENGTH= + maxlength);
}
setAttributes(html);
return super.toHTML();
}
}

HTMLForm
7KH +70/)RUP REMHFW ZLOO HQFDSVXODWH FRPPRQ +70/ )RUP IXQFWLRQDOLW\ 7KLV LV WKH REMHFW
WKDW ZLOO SUHVHQW WKH FOLHQW ZLWK D XVHU LQWHUIDFH ,W LV D FRQWDLQHU IRU +70/,QSXW REMHFWV OLVWHG
SUHYLRXVO\ 7KH IROORZLQJ H[DPSOH FRQWDLQV WKH VRXUFH IRU WKH +70/)RUP FODVV

Example 6.11:
package HTML;
import java.util.*;
public class HTMLForm extends HTMLObject {
private String action = new String();
private boolean post_method = false;
private String enctype = new String (text/html);
// Default Constructor
public HTMLForm() {
}
// Set the action
public void setAction( String value) {
if ( value != null ) {
action = value;
}
}
// Get the action
public String getAction() {
return action;
}
// Set the POST method to true/false

140

Comp-U-Learn

More on Servlet
public void setPostMethod( boolean value) {
post_method = value;
}
// return true if POST, otherwise false
public boolean isPostMethod() {
return post_method;
}
// Set the ENCTYPE, ie. text/html
public void setEnctype( String value) {
if ( value != null ) {
enctype = value;
}
}
// Get the ENCTYPE
public String getEnctype() {
return enctype;
}
// Return String containing the HTML formatted Form
public String toHTML() {
String html = new String(<FORM ACTION=\ +
action + \);
// setup the method
html = html.concat( METHOD=);
if ( post_method ) {
html = html.concat(POST);
}
else {
html = html.concat(GET);
}
html = html.concat(>\n);
// adding HTMLInputs
for ( int x = 0; x < htmlObjects.size(); x++ ) {
try {
html = html.concat(
((HTMLObject)htmlObjects.elementAt(x)).toHTML() +
\n);
}
catch (Exception ex) {
// Print exception to stderr
System.err.println(ex.getMessage());
}
}
html = html.concat(\n</FORM>);
return html;
}
}

Comp-U-Learn

141

Advanced Java Programming

Using HTML Package


1RZ WKDW ZH KDYH JRQH WKURXJK DOO WKH WURXEOH RI FUHDWLQJ WKH +70/ SDFNDJH OHWV SXW LW WR
JRRG XVH ,Q WKLV VHFWLRQ ZH DUH JRLQJ WR FUHDWH D VHUYOHW WKDW VHUYLFHV D VLPSOH *(7 UHTXHVW
DQG UHVSRQGV ZLWK D G\QDPLFDOO\ FUHDWHG IRUP XVLQJ DOO WKH SDFNDJHV ZKLFK ZH FUHDWHG LQ WKH
ODVW VHFWLRQV 7KH IROORZLQJ H[DPSOH VKRZV WKH VHUYOHW FRGH WKDW XVHV WKH DERYH +702EMHFW
SDFNDJHV

Example 6.12:
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import HTML.*;
public class expack extends HttpServlet {
public void init(ServletConfig config) throws ServletException
{
super.init(config);
}
//Process the HTTP Get request
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType(text/html);
PrintWriter out = response.getWriter();
HTMLDocument document =
new HTMLDocument(New Customer Account);
// Create the New Customer Account Form
HTMLForm form = new HTMLForm();
form.setAction(/servlet/NewCustomerServlet);
form.setPostMethod(true);
// Add the Heading
HTMLHeading heading = new HTMLHeading(Customer Account,
HTMLHeading.H2);
heading.setAlignment(HTMLObject.CENTER);
form.addObject(heading);
// Add the Name
form.addObject(new HTMLText(Name : ));
HTMLTextInput textinput = new HTMLTextInput();
textinput.setName(name);
textinput.setSize(30);
form.addObject(textinput);
form.addObject(new HTMLLineBreak());
// Add the Email
form.addObject(new HTMLText(Email Address : ));
textinput = new HTMLTextInput();
textinput.setName(email);
textinput.setSize(30);

142

Comp-U-Learn

More on Servlet
form.addObject(textinput);
form.addObject(new HTMLLineBreak());
// Add the Billing Address
form.addObject(new HTMLHeading(Billing Address,
HTMLHeading.H4));
form.addObject(new HTMLText(Street : ));
textinput = new HTMLTextInput();
textinput.setName(street);
textinput.setSize(30);
form.addObject(textinput);
form.addObject(new HTMLLineBreak());
// Add the City, State, Zip
// City
form.addObject(new HTMLText(City ));
textinput = new HTMLTextInput();
textinput.setName(city);
textinput.setSize(30);
form.addObject(textinput);
// State
form.addObject(new HTMLText(State ));
textinput = new HTMLTextInput();
textinput.setName(state);
textinput.setSize(2);
textinput.setMaxLength(2);
form.addObject(textinput);
// Zip
form.addObject(new HTMLText(Zip ));
textinput = new HTMLTextInput();
textinput.setName(zip);
textinput.setSize(5);
textinput.setMaxLength(5);
form.addObject(textinput);
form.addObject(new HTMLLineBreak());
document.addObject(form);
// document string sent back in response
out.println(document.toHTML());
out.close();
}
//Get Servlet information
public String getServletInfo() {
return NewCustomerServlet Information;
}
}

Comp-U-Learn

143

Advanced Java Programming


5XQ WKH H[SDFNMDYD ILOH DQG FRS\ WKH H[SDFNFODVV LQWR WKH VHUYOHWV GLUHFWRU\ 1RZ FRS\ WKH DOO
FODVV ILOHV RI WKH SDFNDJH +70/ LQWR WKH LQ WKH GLUHFWRU\ ZKHUH WKH VHUYOHWV GLUHFWRU\ UHVLGHV
1RZ RSHQ WKH H[SDFN VHUYOHW LQ RXU EURZVHU ZH ZLOO JHW WKH IROORZLQJ RXWSXW :H FDQ VHH D
:HE SDJH ZKLFK ORRNV VLPSOH EXW ZH FUHDWHG WKLV ZHE SDJH G\QDPLFDOO\ IURP WKH 6HUYHU VLGH
XVLQJ D VHUYOHW SURJUDP

Fig. 6.5

Servlet A Middle Tier


1RZ ZH FDQ VWDUW 6HUYOHW ZLWK GDWDEDVH DSSOLFDWLRQV -DYD VHUYOHWV FDQ DFFHVV D GDWDEDVH DV D
PLGGOH WLHU $ PLGGOH WLHU LV VRPHWKLQJ WKDW KHOSV FRQQHFW RQH HQGSRLQW WR DQRWKHU DQG DORQJ
WKH ZD\ DGGV D OLWWOH VRPHWKLQJ RI LWV RZQ )RU H[DPSOH DQ DSSOHW WR D GDWDEDVH 7KH PRVW
FRPSHOOLQJ UHDVRQ IRU SXWWLQJ D PLGGOH WLHU EHWZHHQ D FOLHQW DQG RXU XOWLPDWH GDWD VRXUFH LV WKDW
VRIWZDUH LQ WKH PLGGOH WLHU FDQ LQFOXGH EXVLQHVV ORJLF
2Q WKH ZHE PLGGOH WLHUV DUH RIWHQ LPSOHPHQWHG XVLQJ VHUYOHWV 6HUYOHWV SURYLGH D FRQYHQLHQW
ZD\ WR FRQQHFW FOLHQWV EXLOW XVLQJ +70/ IRUPV RU DSSOHWV WR EDFN HQG VHUYHUV $ FOLHQW
FRPPXQLFDWHV LWV UHTXLUHPHQWV WR WKH VHUYOHW XVLQJ +773 DQG WKH EXVLQHVV ORJLF LQ WKH VHUYOHWV
KDQGOHV WKH UHTXHVW E\ FRQQHFWLQJ WR WKH EDFN HQG VHUYHU
:H DUH DOUHDG\ IDPLOLDU ZLWK -'%&2%'& HVWDEOLVKPHQW 8VLQJ WKH VHUYOHW ZH FDQ FRQQHFW RXU
VHUYOHW SURJUDP WR D GDWDEDVH :H FDQ GR WKH UHWULHYDO LQVHUWLRQ DQG WUDQVDFWLRQ XVLQJ D VHUYOHW
SURJUDP ZLWK RXU GDWDEDVH $ VHUYOHW FDQ FUHDWH RQH RU PRUH &RQQHFWLRQ REMHFWV LQ LWV LQLW
PHWKRG DQG UHXVH WKHP LQ LWV VHUYLFH  GR*HW DQG GR3RVW PHWKRGV 7KH IROORZLQJ H[DPSOH
GHPRQVWUDWHV KRZ WR FUHDWH D FRQQHFWLRQ ZLWK GDWDEDVH XVLQJ 2UDFOH DV EDFN HQG :KHQ ZH
H[HFXWH WKLV VHUYOHW RXU HPS WDEOH ZLOO EH XSGDWHG ZLWK RXU UHTXLUHPHQWV

144

Comp-U-Learn

More on Servlet

Example 6.13:
import
import
import
import

java.io.*;
java.sql.*;
javax.servlet.*;
javax.servlet.http.*;

public class db extends HttpServlet


{
public void doPost(HttpServletRequest req, HttpServletResponse
res)
throws ServletException, IOException
{
res.setContentType(text/html);
PrintWriter out=res.getWriter();
Connection con=null;
try
{
Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);
con=
DriverManager.getConnection(jdbc:odbc:srt,scott,tiger);
con.setAutoCommit(false);
Statement s=con.createStatement();
s.executeUpdate(update emp set eno=40 where ename=John);
con.commit();
out.println(Update Successful!);
}
catch(Exception e)
{
try
{
con.rollback();
}
catch(SQLException ie){}
out.println(Could not Upadate!);
}
finally
{
try
{
if (con!=null) con.close();
}
catch(SQLException ing){}
}
}
}
$IWHU UXQQLQJ WKH DERYH SURJUDP LI ZH RSHQ RXU WDEOH ZH FDQ ILQG WKH XSGDWLRQ LQ WKH WDEOH
6LPLODUO\ ZH FDQ SHUIRUP DQ\ GDWDEDVH WDVNV VXFK DV DGGLWLRQ PRGLILFDWLRQ DQG VR RQ XVLQJ
VHUYOHW SURJUDP

Comp-U-Learn

145

Advanced Java Programming

Summary
In this session we covered a lot of information related to servlets. We looked at
how the server and the client works in relation to the servlets. Also we looked at
servlet chaining. We created an HTML package that encapsulates basic HTML.
By now we should have an in-depth understanding of how to use the HTML
package we created. At the end of this session we learnt about the usage of the
servlet in database programming.

Going Over it Again


I. Fill in the Blanks


7KHUH DUH BBBBBBB PHWKRGV WKDW D VHUYOHW FDQ XVH WR OHDUQ DERXW LWV VHUYHU



7KH VHUYOHW FDQ JHW WKH QDPH RI WKH XVHU XVLQJ BBBBBBBB PHWKRG



(YHU\ VHUYOHW UHWULHYHV LWV SDUDPHWHUV WKH VDPH ZD\ XVLQJ BBBBBB DQG BBBBBBB



6HUYOHWV FDQ DOVR FRRSHUDWH WR FUHDWH FRQWHQW LQ D SURFHVV LV FDOOHG BBBBBBBBB



6HUYOHW FRQYHUWV RQH W\SH RI FRQWHQW LQWR DQRWKHU WKH WHFKQLTXH LV FDOOHG )LOWHULQJ

II. State True or False




$ VHUYOHW KDV WKH DELOLW\ WR ILQG RXW WKH FOLHQW PDFKLQH



$ VHUYOHW FDQ UHFHLYH SDUDPHWHUV LQ D QXPEHU RI GLIIHUHQW ZD\V



$ UHTXHVW FDQ EH KDQGOHG E\ D VHTXHQFH RI VHUYOHWV



$ VHUYOHW FDQ XVH WKH JHW$XWK7\SH PHWKRG WR ILQG RXW WKH 6HUYHU QDPH



6HUYOHW LV D PLGGOH 7LHU

III. One line Answers




:KDW LV VHUYOHW &KDLQLQJ"



:KDW LV VHUYOHW )LOWHULQJ"



:KDW LV WKH XVH RI +70/ 3DFNDJHV LQ VHUYOHWV"



:KDW DUH WKH PHWKRGV UHODWHG WR WKH FOLHQW"

5. What is the use of the getAttribute() method?


146

Comp-U-Learn

Session 7

Java Stored Procedures

On Completion of this Session


you will be able to understand...

) Overview of Java Stored Procedures


) Usage of JDBC and SQLJ
) Build an Application
) Sub Programs in SQLJ
) Relationship of SQLJ to Embedded SQL

In This Session...

Java Stored Procedures - An Overview

Goal for Designing SQLJ

SQLJ Variables

JDBC OCI Driver

When to Use JDBC and When to Use SQLJ?

SQL appears in Java Statements

Building an Application

Sub Programs in SQLJ

Calling Stored Procedures

Calling Stored Functions

Relationship of SQLJ to Embedded SQL

Advantages of SQLJ over JDBC

Java Stored Procedures

Java Stored Procedures An Overview

$ -DYD 6WRUHG 3URFHGXUH LV D FRPSOLPHQW RI 3/64/ 6WRUHG 3URFHGXUH $ 3URFHGXUH LV D VHW RI


H[HFXWDEOH VWDWHPHQWV FRPELQHG WRJHWKHU $VVXPLQJ WKDW ZH IUHTXHQWO\ PRGLI\ WKH &RPPLVVLRQ
RI WKH (PSOR\HH DQG PDQ\ XVHUV ZLOO EH ZRUNLQJ RQ LW \RX FDQ ZULWH D SURFHGXUH ZKLFK ZLOO
DFFHSW WKH (PSOR\HH 1XPEHU DQG WKH &RPPLVVLRQ $PRXQW DQG 8SGDWHV WR WKH 'DWDEDVH
6LQFH PDQ\ XVHUV ZLOO EH DFFHVVLQJ WKH VDPH SURFHGXUH DQG PRGLI\LQJ WKH &RPPLVVLRQ ZK\
FDQW ZH ZULWH D PHWKRG XVLQJ D ORDGMDYD FRPPDQG LQWR WKH 5'%06 VHUYHU LWVHOI" ,Q VXFK
VLWXDWLRQV ZH FDQ FKRRVH -DYD 6WRUHG 3URFHGXUHV ZKLFK FDQ EH ORDGHG LQWR WKH 2UDFOH VHUYHU
7KH IROORZLQJ FRPPDQG GHVFULEHV KRZ WKH XVHU FDQ ORDG WKH -DYD 3URFHGXUHV LQWR WKH 5'%06
6HUYHU
8VDJH ORDGMDYD >XVHU XVHUSDVVZRUG#GDWDEDVH@ >RFL _ WKLQ@ >KHOS@
>YHUERVH@ >UHVROYH@ >DQGUHVROYH@ >IRUFH@ >V\QRQ\P@ >GHILQHU@ >UHVROYHU
UHVROYHU@ >JUDQW XVHUXVHU@ >VFKHPD VFKHPD@ >GHEXJ@ >RUDFOHUHVROYHU@ FODVV
HVMDUVUHVRXUFHVSURSHUWLHV
2QFH DQ\ -DYD &ODVV LV ORDGHG LQ 2UDFOH VHUYHU LW FDQ EH VKDUHG DPRQJ WKH XVHUV $IWHU ORDGLQJ
LQWR WKH 2UDFOH VHUYHU LW KDV WR EH SXEOLVKHG LQWR WKH 2UDFOH GDWD 'LFWLRQDU\ WDEOHV 3XEOLVKLQJ
FDQ EH GRQH XVLQJ 3/64/ 3DFNDJHV :KHQ ZH SXEOLVK WKH -DYD 6WRUHG 3URFHGXUHV WKH
SDUDPHWHUV RI D -DYD 0HWKRG DQG D 3/64/ SURFHGXUH SDUDPHWHUV DUH ORJLFDOO\ UHODWHG WR HDFK
RWKHU
$IWHU WKH SURFHGXUH LV SXEOLVKHG DOO WKH -DYD 0HWKRGV FDQ EH DFFHVVHG XVLQJ DQ\ RI WKH '0/
&RPPDQGV OLNH ,QVHUW 8SGDWH 'HOHWH DQG 6HOHFW 6WDWHPHQWV 7KH PDLQ DGYDQWDJH RI XVLQJ
6WRUHG 3URFHGXUHV LV LQWHURSHUDELOLW\ EHWZHHQ -DYD DQG 5'%06 6LQFH WKHVH 3URFHGXUHV DUH
ORDGHG LQWR WKH 5'%06 DFFHVVLQJ VSHHG ZLOO EH IDVW DQG LW ZLOO QRZ EH SRVVLEOH WR PDLQWDLQ
XSWR  FRQFXUUHQW XVHUV LQ D 6LQJOH QRGH 8VLQJ -'%& ZKHQ ZH HVWDEOLVK D FRQQHFWLRQ WR
WKH GDWDEDVH XVLQJ WKH 'ULYHU0DQDJHU FODVV ZKLFK PDQDJHV D VHW RI -'%& GULYHUV 2QFH WKH
-'%& GULYHUV DUH ORDGHG ZH FDOO WKH PHWKRG JHW&RQQHFWLRQ :KHQ LW ILQGV WKH ULJKW GULYHU
JHW&RQQHFWLRQ UHWXUQV D &RQQHFWLRQ REMHFW ZKLFK UHSUHVHQWV D GDWDEDVH VHVVLRQ $OO 64/
VWDWHPHQWV DUH H[HFXWHG ZLWKLQ WKH FRQWH[W RI WKDW VHVVLRQ
+RZHYHU WKH VHUYHUVLGH -'%& GULYHU UXQV ZLWKLQ D GHIDXOW VHVVLRQ DQG GHIDXOW WUDQVDFWLRQ
FRQWH[W 6R ZH DUH DOUHDG\ FRQQHFWHG WR WKH GDWDEDVH DQG DOO RXU 64/ RSHUDWLRQV DUH SDUW RI
WKH GHIDXOW WUDQVDFWLRQ 7KH )ROORZLQJ 6WDWHPHQW VHW WKH &RQQHFWLRQ WR WKH GDWDEDVH XVLQJ WKH
6HUYHU 6LGH -'%& 'ULYHU
Connection conn = new OracleDriver().defaultConnection();
C:\sqlj\demo>Loadjava

Comp-U-Learn

149

Advanced Java Programming

ORDGMDYD 8VDJH ORDGMDYD >XVHU XVHUSDVVZRUG#GDWDEDVH@ >RFL _ WKLQ@ >KHOS@


>YHUERVH@ >UHVROYH@ >DQGUHVROYH@ >IRUFH@ >V\QRQ\P@ >GHILQHU@ >UHVROYHU
UHVROYHU@ >JUDQW XVHUXVHU@ >VFKHPD VFKHPD@ >GHEXJ@ >RUDFOHUHVROYHU@ FODVV
HVMDUVUHVRXUFHVSURSHUWLHV
)LUVW OHW XV FKHFN RXW DV WR KRZ 64/- W\SLFDOO\ ZRUNV
64/- DOORZV DSSOLFDWLRQV SURJUDPPHUV WR HPEHG VWDWLF 64/ RSHUDWLRQV LQ -DYD FRGH $ 64/SURJUDP LV D -DYD SURJUDP FRQWDLQLQJ HPEHGGHG VWDWLF 64/ VWDWHPHQWV WKDW FRPSO\ ZLWK WKH
$16,VWDQGDUG 64/- /DQJXDJH VWDWLF 64/ RSHUDWLRQV DUH SUHGHILQHG 7KH RSHUDWLRQV
WKHPVHOYHV GR QRW FKDQJH LQ UHDOWLPH DV D XVHU UXQV DQ DSSOLFDWLRQ DOWKRXJK WKH GDWD YDOXHV
WUDQVPLWWHG FDQ FKDQJH G\QDPLFDOO\ 7\SLFDO DSSOLFDWLRQV FRQWDLQ PXFK PRUH VWDWLF 64/ WKDQ
G\QDPLF G\QDPLF 64/ RSHUDWLRQV DUH QRW SUHGHILQHG 7KH RSHUDWLRQV WKHPVHOYHV FDQ FKDQJH LQ
UHDOWLPH DQG UHTXLUH GLUHFW XVH RI -'%& VWDWHPHQWV :H FDQ XVH 64/- VWDWHPHQWV DQG -'%&
VWDWHPHQWV LQ WKH VDPH SURJUDP
Two Components of SQLJ

Translator
Runtime
Translator

7KLV FRPSRQHQW LV D SUHSURFHVVRU RU SUHFRPSLOHU WKDW GHYHORSHUV UXQ DIWHU FUHDWLQJ 64/VRXUFH FRGH 7KH WUDQVODWRU ZULWWHQ LQ SXUH -DYD VXSSRUWV D SURJUDPPLQJ V\QWD[ WKDW DOORZV XV
WR HPEHG 64/ RSHUDWLRQV LQVLGH 64/- H[HFXWDEOH VWDWHPHQWV 64/- H[HFXWDEOH VWDWHPHQWV DV
ZHOO DV 64/- GHFODUDWLRQV DUH SUHFHGHG E\ WKH VTO WRNHQ DQG FDQ EH LQWHUVSHUVHG ZLWK -DYD
VWDWHPHQWV LQ D 64/- VRXUFH FRGH ILOH
64/- VRXUFH FRGH ILOH QDPHV PXVW KDYH WKH VTOM H[WHQVLRQ 7KH WUDQVODWRU SURGXFHV D MDYD ILOH
DQG RQH RU PRUH 64/- SURILOHV ZKLFK FRQWDLQ LQIRUPDWLRQ DERXW \RXU 64/ RSHUDWLRQV 64/WKHQ DXWRPDWLFDOO\ LQYRNHV D -DYD FRPSLOHU WR SURGXFH FODVV ILOHV IURP WKH MDYD ILOH
7KH WUDQVODWRU SHUIRUPV WKH IROORZLQJ YHULILFDWLRQ
,W FKHFNV WKH V\QWD[ RI WKH HPEHGGHG 64/ FKHFNV GDWD W\SHV WR HQVXUH WKDW WKH GDWD H[FKDQJHG
EHWZHHQ -DYD DQG 64/ KDYH FRPSDWLEOH W\SHV DQG SURSHU W\SH FRQYHUVLRQV &KHFNV 64/
FRQVWUXFWV DJDLQVW WKH GDWDEDVH VFKHPD WR HQVXUH FRQVLVWHQF\
Runtime

64/- UXQWLPH DOVR ZULWWHQ LQ SXUH -DYD LPSOHPHQWV WKH GHVLUHG DFWLRQV RI 64/ RSHUDWLRQV
DFFHVVLQJ WKH GDWDEDVH XVLQJ D -'%& GULYHU 5XQWLPH FRPSRQHQW LV LQYRNHG DXWRPDWLFDOO\ HDFK
WLPH DQ HQGXVHU UXQV DQ 64/- DSSOLFDWLRQ 7KH )LJXUH  HQVXUHV WKH FRQFHSW RI 64/-
150

Comp-U-Learn

Java Stored Procedures

Jav a S ou rce C ode w ith Embedded

SQLJ Source

SQLJ Translator
Jav a Sou rce Co de w ith calls to JD BC

Java Source

Java Compiler
Jav a B yte C o de w ith calls to JDB C

Java Executable

Java Executable

JDB C D river

Databases

Fig. 7.1

7KXV WKH 64/- 7UDQVODWRU FRQYHUWV WKH 64/- VRXUFH FRGH WR -DYD 6RXUFH &RGH WKHQ XVLQJ
-DYDF FRPSLOHU WKH MDYD VRXUFH FRGH LV FRPSLOHG :KHQ \RX LQWHUSUHW WKH FODVV ILOH WKH UHTXHVW
IURP WKH GDWDEDVH LV REWDLQHG
Requirements for SQLJ

7KH IROORZLQJ DUH UHTXLUHG LQ RUGHU WR XVH 2UDFOH 64/-


64/- &RPSLOHU KDV WR EH ORDGHG H[SOLFLWO\
JDBC driver implementing the standard java.sql JDBC interfaces from Sun
Microsystems
Oracle SQLJ works with any standards-compliant JDBC driver.
Database system that is accessible using your JDBC driver
Class files for the SQLJ translator, SQLJ profile customizer, and SQLJ runtime

Comp-U-Learn

151

Advanced Java Programming

JDK1.1.7 Version of Java to Execute the SQLJ Converted Java Programs, Oracle
JDBC drivers for version 8.1.5 do not support the JDK 1.2.

2SHQ &RPPDQG 3URPSW 2SHQ WKH 'LUHFWRU\ &?64/-?'HPR DQG H[HFXWH WKH &RPPDQGV
VKRZQ LQ WKH IROORZLQJ ILJXUH

Fig. 7.2

6HW 3DWK &?-GN?%LQ LV WR LQYRNH WKH -DYD &RPSLOHU LQ 'HPR 'LUHFWRU\


6HW &ODVVSDWK &ODVVSDWKF?6TOM?/LE?7UDQVODWRU=LS LV XVHG WR LQYRNH WKH 7UDQVODWRU DW
'HPR 'LUHFWRU\
6HW 3DWK 3DWK&?6TOM?%LQ LV XVHG WR LQYRNH 64/-& &RPSLOHU DW 'HPR 'LUHFWRU\
&?VTOM?'HPR?6TOMF LV WR WHVW 64/- FRPSLOHU LV ZRUNLQJ
&?6TOM?'HPR?-DYDF LV WR 7HVW -DYD& &RPSLOHU LV ZRUNLQJ
Goal for Desiging SQLJ

-DYD LV D VWURQJO\ W\SHG REMHFWRULHQWHG SURJUDPPLQJ ODQJXDJH


64/ LV D QRQSURFHGXUDO ODQJXDJH IRU GHILQLQJ DQG PDQLSXODWLQJ GDWD LQ UHODWLRQDO GDWDEDVHV
64/- LV D ODQJXDJH WKDW HPEHGV VWDWLF 64/ LQ -DYD LQ D ZD\ WKDW LV FRPSDWLEOH ZLWK -DYDV GHVLJQ
7KH 64/- WUDQVODWRU LV UXQ EHIRUH FRPSLODWLRQ DQG LV VLPLODU WR WKH 2UDFOH SUHFRPSLOHUV 7KH
WUDQVODWLRQ SURFHVV UHSODFHV 64/- VWDWHPHQWV ZLWK -DYD VRXUFH VWDWHPHQWV WKDW LQYRNH WKH -'%&
$3,
152

Comp-U-Learn

Java Stored Procedures

64/- GRHV V\QWD[FKHFNLQJ RI WKH HPEHGGHG 64/ W\SHFKHFNLQJ WR DVVXUH WKDW WKH GDWD
H[FKDQJHG EHWZHHQ -DYD DQG 64/ KDYH FRPSDWLEOH W\SHV DQG SURSHU W\SH FRQYHUVLRQV 7KH
VFKHPDFKHFNLQJ LV WR DVVXUH FRQJUXHQFH EHWZHHQ 64/ FRQVWUXFWV DQG WKH GDWDEDVH VFKHPD
7KLV VHFWLRQ OLVWV LQIOXHQFHV RQ WKH GHVLJQ RI 64/- $V LV RIWHQ WKH FDVH LQ V\VWHPV GHVLJQ RXU
JRDOV DUH QRW HQWLUHO\ RUWKRJRQDO 2XU GHVLUH WR SURYLGH VHDPOHVV LQWHJUDWLRQ EHWZHHQ -DYD DQG
64/ PXVW EH EDODQFHG ZLWK WKH QHHG WR SURYLGH IRU D UDQJH RI SUDFWLFDO LPSOHPHQWDWLRQ
VWUDWHJLHV
Standard Embedded SQL

2XU RYHUDOO JRDO LV WR PDNH DQ DSSURSULDWH GHILQLWLRQ RI $16,,62 (PEHGGHG 64/ IRU -DYD
7KH -DYD ODQJXDJH LWVHOI LV OLNHO\ WR EH VXEPLWWHG WR ,62 IRU VWDQGDUGL]DWLRQ DQG ZH SURSRVH WKLV
VSHFLILFDWLRQ IRU LWV ELQGLQJ WR 64/ 64/- VKRXOG QRW FRQVWLWXWH D QHZ ODQJXDJH EXW VKRXOG EH
VWDQGDUG -DYD ZLWK OH[LFDOO\ ORFDOL]HG V\QWD[ H[WHQVLRQV
Brevity

64/- SURJUDPV VKRXOG EH VPDOOHU WKDQ FRPSDUDEOH -DYD SURJUDPV ZULWWHQ ZLWK G\QDPLF 64/
Type Checking

$ 64/- WUDQVODWRU WHVWV WKH FRPSDWLELOLW\ RI -DYD DQG 64/ H[SUHVVLRQV DW WUDQVODWLRQWLPH 7\SH
FKHFNLQJ PD\ EH SHUIRUPHG SDUWLDOO\ E\ WKH WUDQVODWRU DQG SDUWLDOO\ LQ WKH -DYD FRPSLOHU
Schema Checking

(DFK 64/- FODXVH LV DVVRFLDWHG ZLWK D FRQQHFWLRQ W\SH ZKLFK UHSUHVHQWV WKH NLQG RI VFKHPD ZKHUH
WKDW FODXVH ZLOO EH H[HFXWHG ZLWK FHUWDLQ WDEOHV YLHZV VWRUHG SURJUDPV DQG VR RQ $W WUDQVODWH
WLPH DQ H[HPSODU VFKHPD PD\ EH DVVRFLDWHG ZLWK HDFK FRQQHFWLRQ W\SH $Q H[HPSODU VFKHPD LV D
GDWDEDVH VFKHPD WKDW LV W\SLFDO RI WKH NLQG RI VFKHPD ZKHUH WKH 64/ VWDWHPHQWV LQ D FODXVH ZLOO
EH H[HFXWHG 7KH 64/- WUDQVODWRU FKHFNV WKDW HDFK FODXVH LV YDOLG LQ WKH H[HPSODU VFKHPD
FRUUHVSRQGLQJ WR LWV FRQQHFWLRQ W\SH
Autonomous Development

,W VKRXOG EH SRVVLEOH WR ZULWH WUDQVODWH DQG FRPSLOH 64/- SURJUDPV ZLWKRXW DFFHVV WR VFKHPD
PHWDGDWD LH ZLWKRXW DQ H[HPSODU VFKHPD 
Location Transparency

*LYHQ WKDW 64/- LV WDUJHWHG IRU FRQWH[WV UDQJLQJ IURP WKLQ LH DOO-DYD FOLHQWV WR VWRUHG SURFHGXUHV
HPEHGGHG ZLWKLQ DQ 5'%06 64/- SURJUDPV VKRXOG EH ORFDWLRQ WUDQVSDUHQW WKDW LV WKHLU V\QWD[
DQG VHPDQWLFV VKRXOG QRW GHSHQG H[SOLFLWO\ XSRQ WKHLU H[HFXWLRQ FRQWH[W 7KDW ZLOO DOORZ
DSSOLFDWLRQ SDUWLWLRQLQJ DQG ORDGEDODQFLQJ ZLWKRXW UHFRGLQJ RI 64/- SURJUDPV
Comp-U-Learn

153

Advanced Java Programming

Portability

64/- SURJUDPV WUDQVODWHG WR -DYD FDOOLQJ D JLYHQ 64/ $3, PXVW EH QR OHVV SRUWDEOH WKDQ -DYD
SURJUDPV ZULWWHQ GLUHFWO\ WR WKDW 64/ $3, )RU H[DPSOH LI D 64/- SURJUDP LV WUDQVODWHG WR XVH
-'%& WKHQ LW VKRXOG UXQ DJDLQVW DQ\ GDWDEDVH VXSSRUWHG E\ -'%& LI WKDW GDWDEDVH VXSSRUWV WKH
64/ FRQVWUXFWV XVHG E\ WKH SURJUDP  7KLV UHTXLUHPHQW HQVXUHV WKDW FXVWRPHUV JHW WKH VDPH
IOH[LELOLW\ DQG LQWHURSHUDELOLW\ IURP 64/- DSSOLFDWLRQV WKDW WKH\ JHW IURP G\QDPLF 64/
LQWHUIDFHV
Generality

$PRQJ GDWDEDVH YHQGRUV WKDW VXSSRUW VWDQGDUG 64/ PDQ\ DOVR VXSSRUW SURSULHWDU\ H[WHQVLRQV
WR 64/ WKDW DUH JHQHUDOO\ SHUFHLYHG WR SURYLGH FRPSHWLWLYH DGYDQWDJH 64/- ZLOO WKHUHIRUH
VSHFLI\ D FRUH V\QWD[ IRU PDUU\LQJ -DYD DQG 64/ WKDW \HW DOORZV H[WHQVLRQV FRQILQHG WR WKH
64/ SRUWLRQ RI WKDW V\QWD[ WR EH VXSSRUWHG E\ YHQGRUVSHFLILF UXOHV
Optimization of SQL

$ 64/- WUDQVODWRU FDQ SURYLGH IRU WKH RSWLPL]DWLRQ RI 64/ TXHULHV E\ PDNLQJ WKHP DYDLODEOH WR
DQ 5'%06 IRU SUHFRPSLODWLRQ DQG RSWLPL]DWLRQ DW 64/-WUDQVODWLRQ WLPH UDWKHU WKDQ RQO\ DW
UXQWLPH DV LV WKH FDVH ZLWK G\QDPLF 64/
Database Stored Programs

-DYD VKRZV SURPLVH DV D GDWDEDVH VWRUHG SURFHGXUH ODQJXDJH LH IRU SURJUDPV WKDW H[HFXWH
LQVLGH D GDWDEDVH VHUYHU 7KH GHVLJQ RI 64/- VKRXOG QRW SUHFOXGH WKH XVH RI 64/- SURJUDPV DV
GDWDEDVH VWRUHG SURFHGXUHV
Component Software

64/- SURJUDPV FRPSLOHG DW GLIIHUHQW WLPHV PXVW DOORZ LQWHURSHUDELOLW\ WR H[FKDQJH UHVXOWVHWV
RI GDWD REWDLQHG IURP TXHULHV LQ D W\SHVDIH DQG HIILFLHQW PDQQHU 7KDW LPSOLHV WKDW WKH W\SHV RI
64/ TXHULHV LH WKH W\SHV RI GDWD UHWXUQHG E\ TXHULHV PXVW EH H[SUHVVHG LQ 64/- SURJUDPV E\
-DYD FODVVHV DQG LQWHUIDFHV VR WKDW -DYDV FRQYHQWLRQV IRU EXLOGLQJ FRPSRQHQW VRIWZDUH FDQ EH
XVHG WR EXLOG DSSOLFDWLRQV IURP 64/- VHSDUDWHO\ GHYHORSHG FRPSRQHQWV $ -DYD FRPSRQHQW
H[SRUWV DQG LPSRUWV FODVVHV DQG LQWHUIDFHV ZKLFK PHGLDWH LWV LQWHUDFWLRQV ZLWK RWKHU FRPSRQHQWV
64/- FRPSRQHQWV XVH WKRVH PHFKDQLVPV IRU 64/ GDWD
Consistency with Java

3URJUDPPLQJ ODQJXDJHV FRQWDLQLQJ (PEHGGHG 64/ DUH FDOOHG KRVW ODQJXDJHV -DYD GLIIHUV IURP
WKH WUDGLWLRQDO KRVW ODQJXDJHV & &2%2/ )2575$1 $'$ HWF LQ ZD\V WKDW VLJQLILFDQWO\
DIIHFW LWV HPEHGGLQJ RI 64/
154

Comp-U-Learn

Java Stored Procedures

Java has automatic storage management (garbage collection) that simplifies the
management of storage for data retrieved from databases.
All Java types representing composite data, and data of varying sizes, have a
distinguished value null, which can be used to represent the SQL NULL state,
giving Java programs an alternative to NULL indicators, which are a fixture of
other host languages.
Java is designed to support programs that are automatically heterogeneously
portable (also called super-portable or simply downloadable). That, along
with Javas type system of classes and interfaces, enables component software.
In particular, a SQLJ translator, written in Java, can call components that are
specialized by database vendors, in order to leverage the existing schemachecking and type-checking capabilities of databases, and to generate code
optimized for particular databases.
Java is designed for binary portability in heterogeneous networks, which
promises to enable binary portability for database applications that use static
SQL.
Availability of Development Tools

:KHQ -DYD GHYHORSHUV XVH VWDWLF 64/ WKH\ VKRXOG QRW EH IRUFHG WR JLYH XS IXQFWLRQDOLW\
DYDLODEOH IURP ,QWHJUDWHG 'HYHORSPHQW (QYLURQPHQWV ,'(V IRU -DYD SURJUDPV 6XFK
IXQFWLRQDOLW\ PLJKW LQFOXGH

Tracing
Debugging
Specification of breakpoints
Automatic code formatting
Code analysis and highlighting
Automatic regeneration of byte codes

Usage Scenarios

7KHUH DUH WKUHH SURJUDPPLQJ VW\OHV LQ ZKLFK (PEHGGHG 64/ ZLOO EH XVHG FKDUDFWHUL]HG E\ ORZ
PHGLXP DQG KLJK OHYHOV RI GHQVLW\ DQG DEVWUDFWLRQ LQ WKH VRXUFH SURJUDP
Low Level: This is Embedded SQL as 3GL developers know it today. This level
has a loose integration with the type system of the host language. Programming
tools, such as visual or syntax-directed tools, are likely to generate Java code
containing static SQL at this level, because the generated code is correct by
construction as generated from a tools model of the relationships among the
data.
Comp-U-Learn

155

Advanced Java Programming

Middle Level: Human programmers use this level when they write SQLJ code
directly. Tight, concise integration of the SQL and Java constructs and type
systems help programmers avoid and detect errors in their programs.
High Level: At this level, programmers use graphical tools to constrain and
compose their programs. Those tools will generate Java programs containing
static SQL. Those generated programs may contain low-level Embedded SQL
because they are correct by construction.

SQLJ Variables

9DULDEOHV WKDW DUH GHILQHG LQ WKH FODVV DQG PHWKRGV DUH GLIIHUHQW GDWD W\SHV 7KH VXSSRUWHG 64/GDWD W\SHV DUH
SQLJ Data Type
Char
Varchar
LongVarchar
Numeric
Decimal
Bit
TinyInt
SmallInt
Integer
BigInt
Real
Float
Double
Binary
VarBinary
LongVarBinary
Date
Time
Timestamp

Java Data Type


String
String
String
java.math.BigDecimal
java.math.BigDecimal
boolean
byte
Short
int
long
float
double
double
byte[ ]
byte[ ]
byte[ ]
java.sql.Date
java.sql.Time
java.sql.Timestamp

7KH WDEOH VKRZQ DERYH JLYHV WKH SHUPLWWHG FRQYHUVLRQV IURP 64/ GDWD W\SHV WR MDYD W\SHV
%HIRUH OHDUQLQJ 64/- VRPH H[WHQW RI FRQFHSWV RI MDYD LV UHTXLUHG WR FOHDUO\ XQGHUVWDQG 64/&RQFHSWV /HW XV VHH D VDPSOH MDYD SURJUDP
156

Comp-U-Learn

Java Stored Procedures


class First
{
public static void main(String args[])
{
int Value;
Var=100;
System.out.println(Content of Variable Value is +
Value);
}
}

 7\SH WKH DERYH WKH SURJUDP LQ 1RWHSDG


 6DYH WKH DERYH SURJUDP ZLWK )LUVWMDYD )LOH QDPH VKRXOG EH 6DPSOH RQO\ KHUH FODVV QDPH
DQG ILOH QDPH VKRXOG EH WKH VDPH 
 &RPSLOH WKH DERYH SURJUDP XVLQJ MDYDF )LUVWMDYD
 ([HFXWH WKH MDYD )LUVW WR GLVSOD\ WKH RXWSXW
,Q WKH DERYH SURJUDP
The keyword class is used to define the class with the name First, within the class
we can declare the methods(Procedures & Functions).
main() program is declared as public to make it visible to the entire class.
static declaration is used because it cannot be instantiated
void indicates that main does not return the value.
Variable args is declared so that the main function can take command line
arguments. This array holds string values.

Note
All the variables and syntaxes are case sensitive, which means class is not equivalent
to Class and VALUE is not equivalent to Value.

JDBC OCI Driver

7KH -'%& 2&, GULYHU LV D 7\SH ,, GULYHU WKDW LV XVHIXO WR FOLHQWVHUYHU -DYD DSSOLFDWLRQV
SURJUDPPHUV DQG -DYDEDVHG PLGGOHWLHU GHYHORSHUV 7KH -'%& 2&, GULYHU FRQYHUWV -'%&
LQYRFDWLRQV WR FDOOV WR WKH 2UDFOH &DOO ,QWHUIDFH 2&,  7KHVH FDOOV DUH WKHQ VHQW RYHU 1HW WR
WKH 2UDFOH GDWDEDVH VHUYHU
7KH -'%& 2&, GULYHU LV ZULWWHQ LQ D FRPELQDWLRQ RI -DYD DQG & EHFDXVH LW PXVW PDNH FDOOV WR
WKH 2&, OLEUDULHV 7KH GULYHU UHTXLUHV WKH SUHVHQFH RI WKH 2&, OLEUDULHV 1HW &25( OLEUDULHV
DQG RWKHU QHFHVVDU\ ILOHV RQ HDFK FOLHQW PDFKLQH RU PLGGOHWLHU DSSOLFDWLRQ VHUYHU RQ ZKLFK LW LV
LQVWDOOHG
Comp-U-Learn

157

Advanced Java Programming

)RU /HDUQLQJ 64/- ZH XVH WKH -'%& SURJUDP ZKLFK FRPHV ZLWK 64/- FRPSLOHU ZLWK WKH QDPH
&RQQHFWLRQ0DQDJHUMDYD &RQQHFWLRQ0DQDJHUMDYD H[LVWV LQ &?64/-?'(02 GLUHFWRU\ LI \RX
ORDG 64/- FRPSLOHU LQ 64/- GLUHFWRU\(GLW &RQQHFWLRQ0DQDJHUMDYD DQG PDNH QHFHVVDU\
FKDQJHV
import
import
import
import
import

java.sql.SQLException;
java.sql.DriverManager;
java.sql.Driver;
java.sql.Connection;
sqlj.runtime.ref.DefaultContext ;

public class ConnectionManager {


static
static
static
static
static

public
public
public
public
{

String
String
String
String

DRIVER
DBURL
UID
PWD

=
=
=
=

DRIVER
DBURL
UID
PWD

=
=
=
=

null
null
null
null

;
;
;
;

oracle.jdbc.driver.OracleDriver ;
jdbc:oracle:oci8:@Database_Name ;
ritchie ;
ritchie ;

}
static public Connection newConnection()
{
Connection conn = null;
if (UID== null || PWD==null || DBURL==null || DRIVER==null)
{
System.err.println (
Please edit the ConnectionManager.java file to assign
+
non-null values to the static string variables +
DBURL, DRIVER, UID, and PWD. Then recompile and try
again. ) ;
System.exit(1) ;
}
try {
Driver d = (Driver)(Class.forName( DRIVER ).newInstance());
DriverManager.registerDriver(d);
} catch (Exception e) {
System.err.println( Could not load driver: + DRIVER ) ;
System.err.println(e) ;
System.exit(1) ;
}
try {
conn = DriverManager.getConnection (DBURL, UID, PWD);
} catch (SQLException exception) {

158

Comp-U-Learn

Java Stored Procedures


System.out.println(Error: could not get a connection);
System.err.println(exception) ;
System.exit(1);
}
return conn;
}
static public DefaultContext initContext()
{
DefaultContext ctx = DefaultContext.getDefaultContext();
if (ctx == null) {
try {
ctx = new DefaultContext(newConnection());
} catch (SQLException e) {
System.out.println(Error: could not get a default context);
System.err.println(e) ;
System.exit(1);
}
DefaultContext.setDefaultContext(ctx);
}
return ctx;
}
}

,Q WKH DERYH SURJUDP ZH DUH XVLQJ -'%& 2&, 'ULYHU WR FRQQHFW WR WKH GDWDEDVH ,Q '%85/
DIWHU # UHSODFH 'DWDEDVHB1DPH E\ \RXU +RVWVWULQJ QDPH LH GDWDEDVH QDPH 8,'3:'
SDUDPHWHUV VKRXOG EH VHW IRU \RXU XVHU QDPH DQG SDVVZRUG RWKHU ZLVH WKLV ILOH ZLOO DFFHVV 6FRWW
XVHU DUHD
$IWHU PDNLQJ WKH DERYH FKDQJHV UHFRPSLOH WKH DERYH MDYD ILOH XVLQJ -DYD FRPSLOHU
C:\>javac ConnectionManager.java

,Q WKH DERYH SURJUDP 64/([FHSWLRQ 'ULYHU 'ULYHU0DQDJHU &RQQHFWLRQ UHI'HIDXOW&RQWH[W


DUH WKH UHTXLUHG FODVVHV IRU WKH &RQQHFWLRQ0DQDJHU SURJUDP WR DFFHVV 2&, GULYHU LQWHUIDFH DOO
WKH DERYH VSHFLILHG FODVVHV DUH DYDLODEOH LQ 64/ SDFNDJH XVLQJ ,PSRUW VWDWHPHQW ZH DUH
DFFHVVLQJ WKH IXQFWLRQDOLW\ RI WKH 64/ SDFNDJH
'%85/ 8,' 3:' DQG '5,9(5 DUH WKH YDULDEOHV GHILQHG LQ &RQQHFWLRQ FODVV WR &RQQHFW WR
D VSHFLILF XVHU WR DFFHVV WKH GDWDEDVH REMHFWV
Comp-U-Learn

159

Advanced Java Programming

7U\ DQG &DWFK EORFNV DUH XVHG WR KDQGOH WKH H[FHSWLRQV JHQHUDWHG ZKLOH DFFHVVLQJ WKH -'%&
2'%& 2UDFOH GULYHU YHULI\LQJ WKH 2UDFOH &DOO ,QWHUIDFH  UHVRXUFHV 8VHU DQG 3DVVZRUG
FKHFNLQJ
,I DOO WKH UHVRXUFHV DUH DYDLODEOH LQ \RXU V\VWHP &RQQHFWLRQ0DQDJHU ZLOO EH FRQQHFWHG WR WKH
GDWDEDVH
When to Use JDBC and When to Use SQLJ ?

64/- SURJUDPV FDQ EH SUHIHUUHG


To check program for errors at translation-time rather than at run-time.
To write an application that can deploy to another database. SQLJ can customize
the static SQL
For database at deployment-time.
While Working with a database that contains compiled SQL.

-'%&SURJUDPVFDQEHSUHIHUUHG
To use dynamic SQL.
To have a SQLJ layer during deployment or development.
Three Kinds of SQLJ clauses

,WHUDWRU 'HFODUDWLRQ FODXVHV


$Q LWHUDWRU GHFODUDWLRQ FUHDWHV D FODVV WKDW GHILQHV D NLQG RI LWHUDWRU IRU UHFHLYLQJ TXHU\ GDWD
7KH GHFODUDWLRQ ZLOO VSHFLI\ WKH FROXPQ W\SHV RI WKH LWHUDWRU LQVWDQFHV ZKLFK PXVW PDWFK WKH
FROXPQ W\SHV VHOHFWHG IURP WKH GDWDEDVH WDEOH 7KH V\QWD[ LV DV VKRZQ EHORZ
#sql <modifiers> iterator iterator_classname (type declarations);

0RGLILHUV DUH RSWLRQDO DQG FDQ EH SXEOLF VWDWLF HWF &RPPDV VHSDUDWH W\SH GHFODUDWLRQV 7KHUH
DUH WZR W\SHV RI LWHUDWRUV QDPHG LWHUDWRUV DQG SRVLWLRQDO LWHUDWRUV )RU QDPHG LWHUDWRUV ZH
VSHFLI\ FROXPQ QDPHV DQG W\SHV IRU SRVLWLRQDO LWHUDWRUV ZH VSHFLI\ RQO\ W\SHV $Q H[DPSOH IRU
QDPHG LWHUDWRU LV VKRZQ EHORZ
#sql public iterator EmpIterator (String job, double Comm);

160

Comp-U-Learn

Java Stored Procedures

Example for positional Iterator


#sql public iterator EmpIterator (String, double);

&RQQHFWLRQ 'HFODUDWLRQ FODXVHV


$ &RQQHFWLRQ GHFODUDWLRQ FODXVH GHFODUHV D MDYD W\SH IRU D GDWDEDVH FRQQHFWLRQ 'DWDEDVH
FRQQHFWLRQV DUH REMHFWV RI FODVVHV WKDW DUH GHILQHG E\ PHDQV RI WKH 64/- FRQQHFWLRQ FODXVH
7KLV FODXVH PD\ DSSHDU ZKHUH D MDYD FODVV GHILQLWLRQ DSSHDUV 7KH V\QWD[ LV VKRZQ EHORZ
#sql <modifiers> context context_classname;

Example
#sql context TestContext;

Executable clauses

$Q H[HFXWDEOH FODXVH DSSHDUV LQ MDYD VWDWHPHQWV 7KHUH DUH WZR NLQGV RI H[HFXWDEOH FODXVHV WKH
VWDWHPHQW FODXVH DQG DVVLJQPHQW FODXVH -DYD PHWKRGV FRQWDLQLQJ 64/- H[HFXWDEOH FODXVHV UDLVH
H[FHSWLRQ MDYDVTOM64/([FHSWLRQ
6WDWHPHQWFODXVH V\QWD[
Statementclause == #sql [connection] [statement]

$ VWDWHPHQW FODXVH DSSHDUV LQ D -DYD VWDWHPHQW DQG UHWXUQV QR YDOXH 7KH H[DPSOH VKRZQ EHORZ
UHWULHYHV FROXPQ GDWD LQWR -DYD KRVW YDULDEOHV
#sql {Select EmpNo, Ename, Sal into :Eno, :En, :Salary From Emp};

7KH V\QWD[ IRU DVVLJQPHQW FODXVH LV VKRZQ EHORZ


#sql [connection] var ={SQL statement or Function };

$Q DVVLJQPHQW FODXVH DVVLJQV WKH YDOXH RI DQ 64/ RSHUDWLRQ WR D MDYD YDULDEOH ILHOG RU
SDUDPHWHU
7KH IROORZLQJ H[DPSOH DVVLJQV WKH 64/ TXHU\ WR WKH YDULDEOH MDYDBYDU
Iterator java_var
#sql x={ Select Ename, job, sal from Emp where Sal > 1000};

)(7&+ ,172 VWDWHPHQW LV XVHG WR UHWULHYH GDWD IURP LWHUDWRU REMHFW LQWR MDYD YDULDEOHV 7KH
IROORZLQJ LV WKH V\QWD[ IRU )(7&+
Comp-U-Learn

161

Advanced Java Programming


FETCH iterator_name into :variable1, :variable2,
:variable3..........(: should used before the variable)
Where variable1, variable2, variable3..........

SQL appears in Java statements


64/- FODXVHV DUH DQDORJRXV WR WKH HPEHGGHG VWDWHPHQWV $ 64/- FODXVH LV LQWURGXFHG E\ WKH WRNHQ
VTO 7KH 64/ SUHIL[! IRU -DYD LV FKRVHQ WR EH VTO ZKLFK LV VKRUW DQG LV QRW D OHJDO -DYD
LGHQWLILHU VR LW FDQQRW FRQIOLFW ZLWK RWKHU -DYD V\QWD[

7KH ODVW HOHPHQW LQ D 64/- FODXVH LV D 64/ FRQVWUXFW HQFORVHG LQ FXUO\ EUDFHV ^  ` ,Q HIIHFW
WKH 64/- FODXVH LV WHUPLQDWHG E\ D FORVLQJ FXUO\ EUDFH `
,Q 64/- SURJUDPV H[HFXWDEOH 64/ VWDWHPHQWV DUH HPEHGGHG DV 64/- FODXVHV ZKLFK PD\ DSSHDU
ZKHUH -DYD VWDWHPHQWV PD\ DSSHDU 7KH 64/ VWDWHPHQWV PD\ FRQWDLQ KRVWYDULDEOHV WKDW DUH
UHVROYHG LQ WKH OH[LFDO VFRSH FRQWDLQLQJ WKH 64/- FODXVHV
SQL procedure statement

$PRQJ WKH 64/ SURFHGXUH VWDWHPHQWV! WKH VWDWLF VWDWHPHQWV DSSHDU LQ 64/- FODXVHV
HQFORVHG LQ FXUO\ EUDFHV VXEVWDQWLDOO\ DV WKH\ DUH VSHFLILHG E\ WKH H[LVWLQJ UXOHV IRU HPEHGGHG
ODQJXDJH ,Q SDUWLFXODU WKH IROORZLQJ NLQGV RI VWDWHPHQWV DSSHDU LQ 64/- FODXVHV
<SQL schema statement>
<SQL data statement>
<SQL transaction statement>
SQL dynamic statement

7KH FDWHJRULHV RI 64/ G\QDPLF VWDWHPHQWV! DQG G\QDPLF GHFODUH FXUVRU! DUH RPLWWHG IURP
WKH 64/- VSHFLILFDWLRQ EHFDXVH G\QDPLF RSHUDWLRQV DUH VXEVXPHG E\ &/, DQG -'%& ZKLFK DUH
VLPLODU G\QDPLF 64/ $3,V (PEHGGHG 64/ KDV G\QDPLF VWDWHPHQWV 35(3$5( '(6&5,%(
(;(&87( '($//2&$7( *(7 '(6&5,3725 DQG 6(7 '(6&5,3725 7KH 64/VSHFLILFDWLRQ GRHV QRW PHQWLRQ WKRVH VWDWHPHQWV EHFDXVH WKH\ SURSHUO\ EHORQJ WR D G\QDPLF
64/ $3, IRU -DYD UDWKHU WKDQ WR VWURQJO\ W\SHG VWDWLF 64/ 7KH 64/- VSHFLILFDWLRQ LV
FRQFHUQHG RQO\ ZLWK VWDWLF 64/ :H UHFRPPHQG KRZHYHU WKDW D VWDQGDUGL]HG G\QDPLF 64/
$3, IRU -DYD FRXOG EH PDGH WR LQWHURSHUDWH ZLWK VWDWLF 64/ )RU H[DPSOH DQ RSHUDWLRQ FRXOG EH
VSHFLILHG WR WDNH D UHVXOWVHW REWDLQHG E\ G\QDPLF 64/ DQG WR ZUDS LW E\ D VWURQJO\W\SHG
LWHUDWRUREMHFW E\ PHDQV RI D GRZQFDVW WKDW FKHFNV WKDW WKDW UHVXOWVHW KDV WKH FRUUHFW QXPEHU
DQG W\SHV RI FROXPQV
162

Comp-U-Learn

Java Stored Procedures

SQL connection statement

7KH 64/ FRQQHFWLRQ VWDWHPHQWV! DUH UHSODFHG LQ WKH 64/- VSHFLILFDWLRQ E\ GLUHFW -DYD
FRQVWUXFWLRQ DQG PDQLSXODWLRQ RI FRQQHFWLRQREMHFWV 7KLV DOORZV WKH SRVVLELOLW\ RI 64/SURJUDPV WKDW RSHQ PXOWLSOH FRQQHFWLRQV VLPXOWDQHRXVO\ WR GLIIHUHQW NLQGV RI GDWDEDVHV $OVR
H[SOLFLW PDQLSXODWLRQ RI FRQQHFWLRQREMHFWV PXVW EH VXSSRUWHG IRU SURJUDPV WKDW ZLVK WR DYRLG
KLGGHQ JOREDO VWDWH -DYD VWDWLF YDULDEOHV WKDW ZRXOG QHFHVVDULO\ EH XVHG WR LPSOHPHQW WKH
64/ FRQQHFWLRQ VWDWHPHQWV! ,Q SDUWLFXODU -DYD DSSOHWV DQG RWKHU PXOWLWKUHDGHG SURJUDPV
DUH XVXDOO\ FRGHG WR DYRLG FRQWHQWLRQ RQ JOREDO VWDWH 6XFK SURJUDPV ZLOO VWRUH FRQQHFWLRQ
REMHFWV LQ ORFDO YDULDEOHV DQG PHQWLRQ WKHP H[SOLFLWO\ LQ 64/- FODXVHV
64/- DOORZV WKH SRVVLELOLW\ WKDW D -DYD SURJUDP FDQ PDQLSXODWH PXOWLSOH FRQQHFWLRQREMHFWV
FRQQHFWHG WR GLIIHUHQW GDWDEDVHV :KHQ D SURJUDP PDQLSXODWHV PXOWLSOH FRQQHFWLRQV WKH\ DUH
PHQWLRQHG H[SOLFLWO\ LQ WKH 64/- FODXVHV VR WKH\ PXVW EH UHJXODU -DYD REMHFWV
,W ZRXOG EH SRVVLEOH WR GHILQH WKH 64/ FRQQHFWLRQ VWDWHPHQWV! LQ WKH 64/- VSHFLILFDWLRQ DV
RSHUDWLRQV RQ WKH GHIDXOW FRQQHFWLRQREMHFW ZKLFK LV VWRUHG DUH JOREDO VWDWH LQ D VWDWLF YDULDEOH 
)RU 64/- SURJUDPV WKDW XVH RQH FRQQHFWLRQ WKRVH RSHUDWLRQV ZRXOG KDYH WKHLU WUDGLWLRQDO
PHDQLQJV :H IHHO KRZHYHU IRU WKH UHDVRQV JLYHQ LQ WKH SUHFHGLQJ SDUDJUDSK WKDW 64/- VKRXOG
DOVR KDYH H[SOLFLW FRQQHFWLRQREMHFWV ZLWK PHWKRGV WKDW VXEVXPH WKH FDSDELOLWLHV RI WKH 64/
FRQQHFWLRQ VWDWHPHQWV! 7KHUHIRUH EHFDXVH SURJUDPPHUV ZLOO EH DFFXVWRPHG WR PDQDJLQJ
FRQQHFWLRQREMHFWV GLUHFWO\ LQ -DYD WKHUH VHHPV WR EH QR UHDVRQ WR SURYLGH GXSOLFDWH
IXQFWLRQDOLW\ LQ WKH 64/ FRQQHFWLRQ VWDWHPHQWV!
Host variable definition

(PEHGGHG 64/ VSHFLILHV WKDW KRVW YDULDEOH GHILQLWLRQV! DUH SUHFHGHG E\ (;(& 64/ %(*,1
'(&/$5( 6(&7,21 DQG WHUPLQDWHG E\ (;(& 64/ (1' '(&/$5( 6(&7,21 7KDW ZDV
UHTXLUHG VR WKDW SUHFRPSLOHUV WUDQVODWRUV FDQ GHWHFW WKH KRVWYDULDEOH GHILQLWLRQV DQG
GHWHUPLQH WKHLU W\SHV E\ D UXGLPHQWDU\ SDUVH RI WKH KRVW SURJUDP 7KH 64/- VSHFLILFDWLRQ GRHV
QRW GHILQH D KRVW YDULDEOH GHILQLWLRQ! VHFWLRQ :H IHHO WKDW 64/- WUDQVODWRUV FDQ WDNH
DGYDQWDJH RI WKH SRUWDELOLW\ DQG FRPSRQHQWVRIWZDUH DYDLODEOH IRU -DYD LQ RUGHU WR KDYH JUHDWHU
SDUVLQJ DELOLW\ WKDQ WUDGLWLRQDO SUHFRPSLOHUV VR WKDW WKH '(&/$5( 6(&7,21 LV QRW UHTXLUHG
IRU WKH SXUSRVH RI FRQILQLQJ GHILQLWLRQV RI KRVWYDULDEOHV WR D VPDOO SRUWLRQ RI WKH KRVW
SURJUDP ,QVWHDG DQ\ -DYD YDULDEOH SDUDPHWHU RU ILHOG RI DQ REMHFW PD\ EH XVHG DV D KRVW
YDULDEOH
$QRWKHU UROH RI WKH KRVW YDULDEOH GHILQLWLRQ! VWDWHPHQWV LQ WKH '(&/$5( 6(&7,21 LV WR
DOORZ 64/ DQQRWDWLRQV RQ WKH GHILQLWLRQV RI KRVW YDULDEOHV WR GHVLJQDWH WKH FKDUDFWHU VHW RI D
YDULDEOH 64/  RU WR DVVRFLDWH D ORFDWRU 64/ ZLWK D QDPHG VHUYHU W\SH HJ DQ DEVWUDFW
Comp-U-Learn

163

Advanced Java Programming

GDWD W\SH QDPH  $Q DOWHUQDWH ZD\ WR H[SUHVV WKDW LQIRUPDWLRQ LV LQWURGXFHG WR 64/- D W\SHFODXVH
ZKLFK GHILQHV D -DYD W\SH QDPH WR EH HTXLYDOHQW LQ -DYD SURJUDPV WR D JLYHQ 64/ W\SH QDPH
SHUKDSV DQQRWDWHG E\ D FKDUDFWHU VHW QDPH D TXDOLILHU VXFK DV ORFDWRU RU RWKHU FRQVWUDLQWV
7KDW SURYLGHV D QDPH IRU D -DYD W\SH ZLWK WKH GHVLUHG 64/ SURSHUWLHV ZKLFK FDQ EH XVHG WR
GHFODUH SDUDPHWHUV UHWXUQW\SHV DQG YDULDEOHV LQ 64/- SURJUDPV )RU H[DPSOH WKH -DYD W\SH
ZLWK JOREDO QDPH MDYDVTO'DWH LV SURYLGHG E\ -'%& WR FRUUHVSRQG WR WKH 64/ '$7( W\SH
$GGLWLRQDO JOREDOO\ QDPHG -DYD FODVVHV PD\ EH GHILQHG WR FRUUHVSRQG WR QHZ W\SHV GHILQHG DV
SDUW RI DQ 64/ VWDQGDUG VXFK DV %/2% RU %/2% /2&$725
7KH -DYD 5HIOHFWLRQ $3, VRPHWLPHV FDOOHG WKH ,QWURVSHFWLRQ $3, UHWXUQV LQIRUPDWLRQ GHVFULELQJ
FRPSLOHG -DYD SURJUDPV 7KDW PHWDGDWD LV UHSUHVHQWHG E\ D ZHOONQRZQ VHW RI FODVVHV SURYLGLQJ
-DYD WRROV ZLWK D XQLIRUP ZD\ WR REWDLQ DQG UHSUHVHQW WKH QDPHV DQG W\SHV RI WKH HOHPHQWV RI D
-DYD SURJUDP IURP LWV FRPSLOHG ELQDU\ IRUP -XVW DV WKH IRUP RI -DYD ELQDULHV DUH FRPSOHWHO\
VSHFLILHG DQG SODWIRUPLQGHSHQGHQW WKH FODVVHV IRU H[WUDFWLQJ W\SH LQIRUPDWLRQ IURP ELQDULHV
DUH DOVR VSHFLILHG DQG SRUWDEOH 7KH PHWDGDWD FODVVHV LQ WKH 5HIOHFWLRQ $3, FRQWULEXWH WRZDUG
LPSOHPHQWDWLRQV RI SRUWDEOH 64/- WUDQVODWRUV DQG GDWDEDVHVSHFLILF FRPSRQHQWV RI WUDQVODWRUV
SQL92 character sets

-DYD VXSSRUWV D 81,&2'( FKDUDFWHU VHW ,62 IRU 6WULQJ GDWD DQG IRU LGHQWLILHUV 7KDW
DOORZV -DYD WR UHSUHVHQW PRVW FKDUDFWHU GDWD LQ D XQLIRUP ZD\ 7KH 64/- VSHFLILFDWLRQ GRHV QRW
DGGUHVV WKH LVVXH RI FKDUDFWHU VHWV EHFDXVH WKDW VSHFLILFDWLRQ LV OLPLWHG WR 64/ (QWU\ /HYHO
ZKLFK GRHV QRW UHTXLUH WKHP DQG EHFDXVH IXUWKHU H[SORUDWLRQ RI WKH UHODWLRQVKLS RI PXOWLSOH
64/ FKDUDFWHUVHWV WR 81,&2'( LV UHTXLUHG )DFLOLWLHV IRU UHSUHVHQWLQJ FKDUDFWHU GDWD DUH
QRW XQLIRUP DFURVV REMHFWRULHQWHG ODQJXDJHV $ VWDQGDUG IRU HPEHGGLQJ 64/ LQ REMHFW
RULHQWHG ODQJXDJHV LQ JHQHUDO PLJKW UHTXLUH WKH VSHFLILFDWLRQ RI ZHOONQRZQ W\SHV JOREDOO\
QDPHG FODVVHV IRU VWULQJ W\SHV WKDW FDQ EH DVVRFLDWHG ZLWK QDPHG FKDUDFWHUVHWV $OWHUQDWLYHO\ D
W\SHFODXVH WKDW HTXDWHV D -DYD W\SH QDPH WR DQ 64/ W\SH FRXOG EH LQWURGXFHG WR GHILQH VXFK
VWULQJ W\SHV 7KRVH DSSURDFKHV DUH FRQVLVWHQW ZLWK WKH WHQGHQF\ LQ REMHFWRULHQWHG ODQJXDJHV WR
DVVRFLDWH DWWULEXWHV ZLWK WKH W\SH RI D YDULDEOH UDWKHU WKDQ ZLWK LQGLYLGXDO YDULDEOHV
Embedded exception declaration

7KH HPEHGGHG H[FHSWLRQ GHFODUDWLRQ! KDV WKHVH IRUPV


EXEC SQL WHENEVER exception-condition GOTO program-label;
EXEC SQL WHENEVER exception-condition CONTINUE;

6LQFH -DYD KDV QR JRWR VWDWHPHQW WKH GLUHFW WUDQVOLWHUDWLRQ RI WKDW FRQVWUXFW LQWR -DYD LV QRW
SRVVLEOH ,QVWHDG -DYD SURYLGHV D WU\FDWFK VWDWHPHQW WKDW DVVRFLDWHV D KDQGOHU IRU FHUWDLQ
164

Comp-U-Learn

Java Stored Procedures

H[FHSWLRQV ZLWK D -DYD EORFN LQ ZKLFK WKRVH H[FHSWLRQV PLJKW EH UDLVHG )RU H[DPSOH
VFKHPDWLFDOO\ DVVXPLQJ DQ H[FHSWLRQ FDOOHG H
try block-that-may-throw-exception-e
catch (Exception e) block-that-handles-exception-e

%HFDXVH -DYD KDV ZHOOGHYHORSHG UXOHV IRU GHFODULQJ DQG KDQGOLQJ H[FHSWLRQV WKH (;(& 64/
:+(1(9(5 VWDWHPHQW GRHV QRW DGG DQ\ YDOXH DQG VR WKH 64/- VSHFLILFDWLRQ RPLWV WKDW
VWDWHPHQW 2WKHU REMHFWRULHQWHG ODQJXDJHV KDYH IDFLOLWLHV IRU GHFODULQJ DQG KDQGOLQJ H[FHSWLRQV
VLPLODU WR WKRVH LQ -DYD
-'%& KDV GHILQHG DQ H[FHSWLRQ JOREDOO\ QDPHG MDYDVTO64/([FHSWLRQ DV WKH VXSHUFODVV RI
H[FHSWLRQV WKDW DUH UHWXUQHG IURP 64/ 7KH 64/- VSHFLILFDWLRQ IROORZV WKDW SUHFHGHQW WR
IDFLOLWDWH LQWHURSHUDELOLW\ EHWZHHQ VWDWLF 64/ DQG G\QDPLF 64/
SQL diagnostics statement

7KH 64/- VSHFLILFDWLRQ GHILQHV GDWDEDVHFRQQHFWLRQ REMHFWV WR KDYH D VHW RI PHWKRGV WKDW
UHWXUQ WKH LQIRUPDWLRQ LQ WKH 64/ 'LDJQRVWLFV $UHD HJ 64/67$7( 7KRVH PHWKRGV UHSODFH
WKH 64/ GLDJQRVWLFV VWDWHPHQW!
Declare cursor

7KH GHFODUH FXUVRU! VWDWHPHQW RI (PEHGGHG 64/ GHFODUHV D VLQJOH QDPH IRU ERWK D TXHU\ DQG
LWV DVVRFLDWHG UHVXOWVHW LQ WKH KRVW SURJUDP 7KH 64/- VSHFLILFDWLRQ LQVWHDG GLVWLQJXLVKHV
EHWZHHQ D TXHU\ DQG WKH UHVXOWVHW WKDW LW UHWXUQV :KHQ D 64/- FODXVH FRQWDLQLQJ D TXHU\ LV
HYDOXDWHG LW UHWXUQV DQ LWHUDWRUREMHFW FRQWDLQLQJ WKH UHVXOWVHW RI URZV VHOHFWHG E\ WKDW TXHU\ 7KH
W\SH RI WKH LWHUDWRU LV D -DYD FODVV WKDW HQFRGHV WKH QXPEHU DQG W\SHV DQG QDPHV RI FROXPQV LQ
WKH UHVXOWVHW DOORZLQJ W\SHFKHFNLQJ RI RSHUDWLRQV RQ WKH LWHUDWRU
Input parameters to SQL statements

7KH 64/- VSHFLILFDWLRQ DGRSWV WKH DSSURDFK RI VWDQGDUG (PEHGGHG 64/ IRU LQSXW SDUDPHWHUV
WR 64/ VWDWHPHQWV ,QSXW SDUDPHWHUV DUH KRVWYDULDEOHV LQ WKH 64/ VWDWHPHQWV
Extracting column-values from result-sets

:H FRQVLGHUHG WZR DSSURDFKHV WR DFFHVVLQJ FROXPQYDOXHV IURP UHVXOWVHWV E\ SRVLWLRQ DQG E\


QDPH 7KH IDPLOLDU )(7&+ RI (PEHGGHG 64/ DFFHVVHV FROXPQV E\ SRVLWLRQ ,Q WKH IROORZLQJ
H[DPSOH WKH ILUVW FROXPQ LQ WKH URZ LV DVVLJQHG WR YDU WKH VHFRQG WR YDU DQG WKH WKLUG WR
YDU
EXEC SQL FETCH cursor1 INTO :var1,:var2,:var3;

Comp-U-Learn

165

Advanced Java Programming

7KH 64/- VSHFLILFDWLRQ VXSSRUWV WKH )(7&+ VWDWHPHQW ,W DOVR VXSSRUWV DFFHVV WR FROXPQV E\
QDPH WKURXJK JHQHUDWHG PHWKRGV ZLWK WKH QDPHV DQG W\SHV RI WKH FROXPQV
%RWK VW\OHV KDYH DGYDQWDJHV 3RVLWLRQDO DFFHVV LV DWWUDFWLYH IRU SURJUDPV FRQWDLQLQJ (PEHGGHG
64/ WKDW LV JHQHUDWHG E\ GDWDEDVH WRROV VXFK DV &$6( WRROV RU SRLQWDQGFOLFN HGLWRUV ,W LV DOVR
FRQYHQLHQW IRU TXHULHV LQ ZKLFK WKH VHOHFWHG YDOXHV KDYH QR QDPHV EHFDXVH WKH\ DUH YDOXHV RI
H[SUHVVLRQV
1DPHG DFFHVV LV FRQYHQLHQW IRU KXPDQ SURJUDPPHUV WR ZKRP WKH QDPHV RI WKH FROXPQV DUH
OLNHO\ WR EH PHDQLQJIXO 1DPHG DFFHVV VXSSRUWV SRUWDEOH SURJUDPV VR WKDW DSSOLFDWLRQV FDQ
RSHUDWH RQ WDEOHV DW GLIIHUHQW GDWDEDVHV ZLWK WKH VDPH QDPHV DQG W\SHV RI FROXPQV EXW SHUKDSV
ZLWK FROXPQV LQ D GLIIHUHQW RUGHU
OPEN cursor

(PEHGGHG 64/ KDV DQ 23(1 RSHUDWLRQ WR RSHQ DQG UHRSHQ LWV QDPHG FXUVRUV ZKLFK
UHSUHVHQW ERWK D TXHU\ DQG LWV UHVXOWVHW
EXEC SQL OPEN cursor1;

7KH 64/- VSHFLILFDWLRQ GRHV QRW SURSRVH DQ 23(1 RSHUDWLRQ WR RSHQ RU UHRSHQ LWHUDWRU
REMHFWV 64/- GRHV QRW QDPH D VWDWLF TXHU\ QRU WUHDW LW DV GDWD ,QVWHDG D TXHU\ UHWXUQV DQ
LWHUDWRUREMHFW ZKLFK LV PDQLSXODWHG DV GDWD 2I FRXUVH D SURJUDPPHU PD\ LQ HIIHFW QDPH D
TXHU\ E\ ZULWLQJ LW LQ D 64/- FODXVH LQ WKH ERG\ RI D PHWKRG 0HWKRGV DUH FDOOHG E\ WKHLU QDPHV
DQG FDQ UHWXUQ UHVXOWVHW REMHFWV DV WKHLU YDOXHV
7KH 64/- VSHFLILFDWLRQ DGRSWV WKH H[HFXWDEOH VWDWHPHQWV RI 64/ IRU PDQLSXODWLQJ 64/ GDWD
GHILQLWLRQV DQG WUDQVDFWLRQV VXEVWDQWLDOO\ DV WKH\ DUH VSHFLILHG IRU VWDQGDUG (PEHGGHG 64/ ,W
RPLWV VWDWHPHQWV IRU G\QDPLF 64/ ZKLFK DUH VHSDUDWHO\ VSHFLILHG DV -'%& ,W RPLWV VWDWHPHQWV
RI (PEHGGHG 64/ WKDW DUH FRQFHUQHG ZLWK H[FHSWLRQV GDWDEDVH FRQQHFWLRQV DQG GLDJQRVWLFV
DQG LQVWHDG VSHFLILHV W\SHV IRU VXFK REMHFWV VR WKDW -DYD SURJUDPV FDQ PDQLSXODWH WKHP XVLQJ
VWDQGDUG SURJUDPPLQJ WHFKQLTXHV ,W VXSSRUWV FRPSRQHQW VRIWZDUH E\ YHULI\LQJ SURJUDP VWDWH
VXFK DV FRQQHFWLRQV DQG GLDJQRVWLFV DV -DYD REMHFWV VR WKDW WKH SURJUDP VWDWH RI LQWHUDFWLQJ
FRPSRQHQWV LV FOHDQO\ VHSDUDWHG DQG GRHV QRW FRQIOLFW ,W VXSSRUWV JOREDO QDPLQJ RI W\SHV IRU
64/ GDWD WR DOORZ SRUWDELOLW\ DQG LQWHURSHUDELOLW\ RI LQGHSHQGHQWO\ FRPSLOHG 64/- DSSOLFDWLRQV
,Q VXPPDU\ 64/- VXSSRUWV VWURQJ W\SHFKHFNLQJ RI VWDWLF 64/ RSHUDWLRQV DQG SRUWDELOLW\ RI
VRIWZDUH FRPSRQHQWV
Build an Application

7KH ''/ FRPPDQGV FDQ EH XVHG ZLWK 64/- SURJUDPV DV ZH XVH DW 64/ SURPSW 7KH RQO\
GLIIHUHQFH LV WKDW ''/ FRPPDQGV VKRXOG EH VSHFLILHG LQ 64/- SURJUDPV 64/- SURJUDPV FDQ
166

Comp-U-Learn

Java Stored Procedures

EH ZULWWHQ XVLQJ DQ\ HGLWRU $OO WKH H[DPSOHV H[SODLQHG LQ WKLV VHVVLRQ ZLOO EH ZULWWHQ LQ
1RWHSDG

import java.lang.*;
import java.sql.SQLException;
public class Server
{
public static void main(String args[])
{
try{
String msg=Java Class Available in User_Objects Schema Table;
#sql { Call Dbms_Output.put_line(:msg) };
}catch(SQLException e) { System.out.println(e.getMessage()); }
}

Fig. 7.3
Comp-U-Learn

167

Advanced Java Programming

Fig. 7.4


import java.sql.*;
import java.sql.SQLException;

public class Objects


{
public static void main(String args[])
{
String msg=null;
try{
#sql { Create table Dept(
DeptNo Number(2) Constraint Dept_prim Primary key,
Dname varchar2(20) Unique,
Loc Varchar2(20)
)
};
msg=Dept table is Created;
#sql { Call DBMS_OUTPUT.PUT_LINE ( :msg ) };
#sql { Create table Emp (
EmpNo Number(4) Constraint Emp_prim Primary key,
Ename varchar2(20) Unique,
Sal Number(10,2),
Comm Number(10,2),
Mgr Number(4),
Job Varchar2(20),
HireDate date,
DeptNo number(2) Not null Constraint dept_Emp references
Dept(DeptNo)
)
};
msg=Emp table is Created;
#sql { Call Dbms_Output.put_line (:msg) };

168

Comp-U-Learn

Java Stored Procedures


#sql { Create table SalGrade (
Grade Number(2),
LoSal Number(10,2),
HiSal Number(10,2)
)
};
msg=SalGrade table is Created;
#sql { Call Dbms_Output.put_line (:msg) };
#sql { Create table Bonus (
Ename Varchar2(20) Unique references Emp(Ename),
Job Varchar2(20),
Sal Number(10,2),
Comm Number(10,2)
)
};
msg=Bonus table is Created;
#sql { Call Dbms_Output.put_line (:msg) };
}catch(SQLException e) { System.out.println(Error due to + e);
}
}
}

6DYH WKH ILOH DV 2EMHFWVVTOM LQ &?VTOM?'HPR 'LUHFWRU\


([HFXWH WKH IROORZLQJ FRPPDQGV

Fig. 7.5
Comp-U-Learn

169

Advanced Java Programming

Fig. 7.5
Create Table Command

7KH IROORZLQJ H[DPSOH LOOXVWUDWHV WKH XVH RI &UHDWH 7DEOH FRPPDQG LQ 64/- SURJUDPV
2SHQ 127(3$' WH[W HGLWRU W\SH WKH VFULSW DV VKRZQ EHORZ
import java.sql.*;
public class SQLTable
{
public static void main(String args[])
{
try
{
ConnectionManager.initContext();
SQLTable C=new SQLTable();
C.Create();
}
catch(SQLException e)
{
System.out.println (Error in your program);
System.err.println(Error Description is + e);
}
}
void Create() throws SQLException
{
#sql
{
CREATE TABLE DEPT

170

Comp-U-Learn

Java Stored Procedures


(
DeptNo
Dname
Loc

Number(3) Constraint Dept_prim Primary Key,


Varchar2(20) Not Null,
Varchar2(20)

)
};
System.out.println(Table Created);
}
}

$OO WKH 64/- SURJUDPV VKRXOG KDYH WKH H[WHQVLRQ VTOM 6DYH WKH DERYH SURJUDP DV 64/7DEOHVTOM 
Open DOS prompt from start->Run->Command and goto the specified directory
C:\Sqlj\Demo.
Compile the sqlj program using sqljc SQLTable.sqlj
Once the program is compiled successfully, file with the same name but with
.java (SQLTable.java) extension will be created.
Compile the .java file using java compiler javac SQLTable.java
Once the program is compiled a file with the same name .class(SQLTable.class)
extension will be created and this is the executable file for SQLJ programs.
Execute the file using java SQLTable command.

7KH 2XWSXW ZLOO EH DV VKRZQ

Fig. 7.5

7KH WDEOH LV QRZ FUHDWHG


,Q WKH DERYH SURJUDP LPSRUW VTO LV WR DFFHVV WKH 64/ IXQFWLRQDOLWLHV &ODVV QDPH LV
64/7DEOH FRQWDLQV D PHWKRG FDOOHG &UHDWH  +HUH ZH DUH XVLQJ
&RQQHFWLRQ0DQDJHULQLW&RQWH[W ZLOO WR HVWDEOLVK WKH FRQQHFWLRQ WR 2UDFOH L GDWDEDVH :KLOH
H[HFXWLQJ WKH SURJUDP LQ FDWFK EORFN DOO WKH HUURUV ZLOO EH WKURZQ DQG GLVSOD\HG DW '26
SURPSW ,Q &UHDWH PHWKRG ZH DUH H[HFXWLQJ WKH &UHDWH WDEOH FRPPDQG $OO WKH 64/
FRPPDQGV VKRXOG EH SUHFHGHG ZLWK VTO
Comp-U-Learn

171

Advanced Java Programming

Alter Table Command

7KH IROORZLQJ H[DPSOH LOOXVWUDWHV WKH XVH RI $OWHU 7DEOH FRPPDQG LQ 64/- SURJUDPV
 2SHQ 127(3$' WH[W HGLWRU
 7\SH WKH VFULSW DV VKRZQ EHORZ
import java.sql.*;
public class SQLAlterTable
{
public static void main(String args[])
{
try
{
ConnectionManager.initContext();
SQLAlterTable C=new SQLAlterTable();
C.Alter();
}
catch(SQLException e)
{
System.out.println (Error in your program);
System.err.println(Error Description is + e);
}
}
void Alter() throws SQLException
{
#sql
{
ALTER TABLE DEPT
Modify Loc Varchar2(30)
};
System.out.println(Table Dept Altered);
}
}

 6DYH WKH DERYH SURJUDP DV 64/$OWHU7DEOHVTOM


 2SHQ '26 SURPSW IURP VWDUW5XQ&RPPDQG DQG JRWR WKH VSHFLILHG GLUHFWRU\
&?6TOM?'HPR
 &RPSLOH WKH VTOM SURJUDP XVLQJ VTOMF 64/$OWHU7DEOHVTOM
 2QFH WKH SURJUDP LV FRPSLOHG VXFFHVVIXOO\ ILOH ZLWK WKH VDPH QDPH EXW ZLWK MDYD
64/$OWHU7DEOHMDYD H[WHQVLRQ ZLOO EH FUHDWHG
 &RPSLOH WKH MDYD ILOH XVLQJ MDYD FRPSLOHU MDYDF 64/$OWHU7DEOHMDYD
 2QFH WKH SURJUDP LV FRPSLOHG ILOH ZLWK WKH VDPH QDPH FODVV 64/$OWHU7DEOHFODVV H[WHQVLRQ
ZLOO EH FUHDWHG DQG WKLV LV WKH H[HFXWDEOH ILOH IRU 64/- SURJUDPV
 ([HFXWH WKH ILOH XVLQJ MDYD 64/$OWHU7DEOH FRPPDQG
172

Comp-U-Learn

Java Stored Procedures

7KH 2XWSXW ZLOO EH DV VKRZQ EHORZ 


C:\sqlj\demo>sqljc SQLAlterTable.sqlj
C:\sqlj\demo>javac SQLAlterTable.java
C:\sqlj\demo>java SQLAlterTable
Table Dept altered
C:\sqlj\demo>

7KH WDEOH LV QRZ DOWHUHG


,Q WKH DERYH SURJUDP LPSRUW VTO LV WR DFFHVV WKH 64/ IXQFWLRQDOLWLHV &ODVV QDPH LV
64/$OWHU7DEOH FRQWDLQV D PHWKRG FDOOHG $OWHU  +HUH ZH DUH XVLQJ
&RQQHFWLRQ0DQDJHULQLW&RQWH[W WR FRQQHFW WR WKH 2UDFOH L GDWDEDVH :KLOH H[HFXWLQJ WKH
SURJUDP LQ FDWFK EORFN DOO WKH HUURUV ZLOO EH WKURZQ DQG GLVSOD\HG DW '26 SURPSW ,Q $OWHU
PHWKRG ZH DUH H[HFXWLQJ WKH $OWHU WDEOH FRPPDQG WR DOWHU WKH VWUXFWXUH RI WKH WDEOH
Rename Command

7KH IROORZLQJ H[DPSOH LOOXVWUDWHV WKH XVH RI 5HQDPH FRPPDQG LQ 64/- SURJUDPV
 2SHQ 127(3$' WH[W HGLWRU
 7\SH WKH VFULSW DV VKRZQ EHORZ
import java.sql.*;
public class SQLRenameTable
{
public static void main(String args[])
{
try
{
ConnectionManager.initContext();
SQLRenameTable C=new SQLRenameTable();
C.Rename();
}
catch(SQLException e)
{
System.out.println (Error in your program);
System.err.println(Error Description is + e);
}
}
void Rename() throws SQLException
{
#sql
{
Rename Dept To Department
};
System.out.println(Table Dept is Renamed to Department);
}
}

Comp-U-Learn

173

Advanced Java Programming

 6DYH WKH DERYH SURJUDP DV 64/5HQDPH7DEOHVTOM 


 2SHQ '26 SURPSW IURP VWDUW5XQ&RPPDQG DQG JRWR WKH VSHFLILHG GLUHFWRU\
&?6TOM?'HPR
 &RPSLOH WKH VTOM SURJUDP XVLQJ VTOMF 64/5HQDPH7DEOHVTOM
 2QFH WKH SURJUDP LV FRPSLOHG VXFFHVVIXOO\ ILOH ZLWK WKH VDPH QDPH EXW ZLWK MDYD
64/5HQDPH7DEOHMDYD H[WHQVLRQ ZLOO EH FUHDWHG
 &RPSLOH WKH MDYD ILOH XVLQJ MDYD FRPSLOHU MDYDF 64/5HQDPH7DEOHMDYD
 2QFH WKH SURJUDP LV FRPSLOHG ILOH ZLWK WKH VDPH QDPH FODVV 64/5HQDPH7DEOHFODVV
H[WHQVLRQ ZLOO EH FUHDWHG DQG WKLV LV WKH H[HFXWDEOH ILOH IRU 64/- SURJUDPV
 ([HFXWH WKH ILOH XVLQJ MDYD 64/5HQDPH7DEOH FRPPDQGF?
7KH 2XWSXW ZLOO EH DV VKRZQ
C:\sqlj\demo>sqljc SQLRenameTable.sqlj
C:\sqlj\demo>javac SQLRenameTable.java
C:\sqlj\demo>java SQLRenameTable
Table Dept is Renamed to Department
C:\sqlj\demo>

7KH WDEOH LV QRZ 5HQDPHG


,Q WKH DERYH SURJUDP LPSRUW VTO LV WR DFFHVV WKH 64/ IXQFWLRQDOLWLHV &ODVV QDPH LV
64/5HQDPH7DEOH FRQWDLQV H PHWKRG FDOOHG 5HQDPH  KHUH ZH DUH XVLQJ
&RQQHFWLRQ0DQDJHULQLW&RQWH[W WR FRQQHFW WR WKH 2UDFOH L GDWDEDVH :KLOH H[HFXWLQJ WKH
SURJUDP LQ FDWFK EORFN DOO WKH HUURUV ZLOO EH WKURZQ DQG GLVSOD\HG DW '26 SURPSW ,Q 5HQDPH
PHWKRG ZH DUH H[HFXWLQJ WKH 5HQDPH FRPPDQG WR UHQDPH WKH WDEOH
Drop Table Command

7KH IROORZLQJ H[DPSOH LOOXVWUDWHV WKH XVH RI 'URS 7DEOH FRPPDQG LQ 64/- SURJUDPV
 2SHQ 127(3$' WH[W HGLWRU
 7\SH WKH VFULSW DV VKRZQ EHORZ
import java.sql.*;
public class SQLDropTable
{
public static void main(String args[])
{
try
{
ConnectionManager.initContext();

174

Comp-U-Learn

Java Stored Procedures


SQLDropTable C=new SQLDropTable();
C.Drop();
}
catch(SQLException e)
{
System.out.println (Error in your program);
System.err.println(Error Description is + e);
}
}
void Drop() throws SQLException
{
#sql
{
DROP TABLE DEPT
};
System.out.println(Table Dept Dropped);
}
}

 6DYH WKH DERYH SURJUDP DV 64/'URS7DEOHVTOM 


 2SHQ '26 SURPSW IURP VWDUW!5XQ!&RPPDQG DQG JRWR WKH VSHFLILHG GLUHFWRU\
&?6TOM?'HPR
 &RPSLOH WKH VTOM SURJUDP XVLQJ VTOMF 64/'URS7DEOHVTOM
 2QFH WKH SURJUDP LV FRPSLOHG VXFFHVVIXOO\ ILOH ZLWK WKH VDPH QDPH EXW ZLWK MDYD
64/'URS7DEOHMDYD H[WHQVLRQ ZLOO EH FUHDWHG
 &RPSLOH WKH MDYD ILOH XVLQJ MDYD FRPSLOHU MDYDF 64/'URS7DEOHMDYD
 2QFH WKH SURJUDP LV FRPSLOHG ILOH ZLWK WKH VDPH QDPH FODVV 64/'URS7DEOHFODVV
H[WHQVLRQ ZLOO EH FUHDWHG DQG WKLV LV WKH H[HFXWDEOH ILOH IRU 64/- SURJUDPV
 ([HFXWH WKH ILOH XVLQJ MDYD 64/'URS7DEOH FRPPDQG
7KH 2XWSXW ZLOO EH DV VKRZQ EHORZ 
C:\sqlj\demo>sqljc SQLDropTable.sqlj
C:\sqlj\demo>javac SQLDropTable.java
C:\sqlj\demo>java SQLDropTable
Table Dept Dropped
C:\sqlj\demo>
The table is now dropped.

,Q WKH DERYH SURJUDP LPSRUW VTO LV WR DFFHVV WKH 64/ IXQFWLRQDOLWLHV &ODVV QDPH LV
64/'URS7DEOH FRQWDLQV D PHWKRG FDOOHG 'URS  KHUH ZH DUH XVLQJ
&RQQHFWLRQ0DQDJHULQLW&RQWH[W WR FRQQHFW WR WKH 2UDFOH L GDWDEDVH :KLOH H[HFXWLQJ WKH
SURJUDP LQ FDWFK EORFN DOO WKH HUURUV ZLOO EH WKURZQ DQG GLVSOD\HG DW '26 SURPSW ,Q 'URS
PHWKRG ZH DUH H[HFXWLQJ WKH 'URS WDEOH FRPPDQG WR GURS WKH WDEOH
Comp-U-Learn

175

Advanced Java Programming

Sub Programs in SQLJ

64/- SURYLGHV V\QWD[ IRU FDOOLQJ VWRUHG SURFHGXUHV DQG VWRUHG IXQFWLRQV LQ WKH GDWDEDVH 7KHVH
SURFHGXUHV DQG IXQFWLRQV FDQ EH ZULWWHQ LQ -DYD RU 3/64/
$ VWRUHG IXQFWLRQ UHTXLUHV D UHVXOW H[SUHVVLRQ LQ 64/- H[HFXWDEOH VWDWHPHQW WR DFFHSW WKH UHWXUQ
YDOXH DQG FDQ RSWLRQDOO\ WDNH LQSXW RXWSXW RU LQSXWRXWSXW SDUDPHWHUV
%HIRUH FDOOLQJ VWRUHG SURFHGXUHV DQG IXQFWLRQV ZH QHHG WR NQRZ DERXW WKH EXLOWLQ SDFNDJH
6TOXWOVTO ILOH H[LVWV LQ F?VTOM?OLE? GLUHFWRU\ 7KH FRGH ZULWWHQ LQ 6TOXWOVTO LV DV VKRZQ EHORZ 
connect internal;
create or replace package sqljutl as
function has_default(oid number,
proc char,
seq number,
ovr number) return number;
end sqljutl;
/
create or replace package body sqljutl is
function has_default(oid number,
proc char,
seq number,
ovr number) return number is
def number;
begin
if proc IS NULL
then
select DEFAULT# INTO def FROM ARGUMENT$
WHERE PROCEDURE$ IS NULL AND OBJ# = oid
AND SEQUENCE# = seq AND OVERLOAD# = ovr;
else
select DEFAULT# INTO def FROM ARGUMENT$
WHERE PROCEDURE$ = proc AND OBJ# = oid
AND SEQUENCE# = seq AND OVERLOAD# = ovr;
end if;
if def IS NULL
then return 0;
else return 1;
end if;
end has_default;
end sqljutl;
/
grant execute on sqljutl to public ;

176

Comp-U-Learn

Java Stored Procedures

7KH SDFNDJH VTOMXWO LV UHTXLUHG IRU FKHFNLQJ RI VWRUHG SURFHGXUHV DQG IXQFWLRQV LQ DQ 2UDFOH
GDWDEDVH7KH DERYH VSHFLILHG ILOH KDV WR EH H[HFXWHG IURP DQ\ ORJLQ DUHD RQ WKH VHUYHU QRW IURP
FOLHQW DQG WKH ILOH ZLOO EH H[HFXWHG DIWHU HQWHULQJ WKH LQWHUQDO SDVVZRUG $GPLQLVWUDWRUV ZLOO
NQRZ WKH LQWHUQDO SDVVZRUG
Calling Stored Procedures

6WRUHG SURFHGXUH FDOOV XVH WKH &$// 7KH ZRUG &$// LV ZLWK VSDFH DQG WKHQ WKH SURFHGXUH
FDOO VSDFH DIWHU WKH &$// LV D PXVW LQ RUGHU WR GLIIHUHQWLDWH LW IURP WKH SURFHGXUH QDPH RXWHU
SDUHQWKHVHV DURXQG WKH SURFHGXUH FDOO VKRXOG QRW EH XVHG 7KH V\QWD[ LV VKRZQ EHORZ
#sql { CALL Procedure_Name(<PARAM_LIST>) };

3URFHGXUHB1DPH LV WKH QDPH RI WKH VWRUHG SURFHGXUH ZKLFK FDQ WDNH D OLVW RI LQSXW RXWSXW
DQG LQSXWRXWSXW SDUDPHWHUV 7KH IROORZLQJ SURFHGXUH ZLOO DFFHSW (PSOR\HH 1XPEHU DQG WKH
VDODU\ ZLOO EH DGGHG WR WKH VDODU\ RI WKH VSHFLILHG HPSOR\HH &UHDWH WKH IROORZLQJ SURFHGXUH WR
YHULI\ WKH SURFHGXUH FDOOV LQ 64/- 
Create or Replace procedure SalaryIncrement(Emp_No
Emp.Empno%type Default 7788,Salary Emp.Sal%type) as
Emp_sal Emp.Sal%type;
NoSalary Exception;
Tot_Sal Emp.Sal%type;
Begin
Select Sal into Emp_sal from emp where Empno=Emp_no;
if Emp_sal is Null then
Raise NoSalary;
else
Update Emp set sal =Sal+Salary where Empno=Emp_no;
Tot_sal:=Emp_sal + Salary;
Dbms_output.put_line(Salary updated from || Emp_sal || to
|| Tot_sal || for employee number || Emp_No);
end if;
Exception
when NoSalary then
Dbms_output.put_line(Salary does not exists for employee ||
Emp_No);
When No_Data_found then
Dbms_output.put_line(No Employee exists with the Number ||
Emp_No);
End;
Procedure created.

Comp-U-Learn

177

Advanced Java Programming

/HW XV VHH DQ H[DPSOH FDOOLQJ D VWRUHG SURFHGXUH LQ 64/-


import java.sql.*;
public class ProcedureCall
{
public static void main(String args[])
{
try
{
ConnectionManager.initContext();
ProcedureCall P=new ProcedureCall();
P.Proc();
}
catch(SQLException e)
{
System.out.println(Error in program!);
System.out.println(Due to + e);
}
}
void Proc() throws SQLException
{
#sql { CALL SalaryIncrement(7788,2000)
};
System.out.println(Salary is Increment for Employee 7788 by
2000");
}
}

 6DYH WKH DERYH SURJUDP DV 3URFHGXUH&DOOVTOM


 2SHQ '26 SURPSW IURP VWDUW5XQ&RPPDQG DQG JRWR WKH VSHFLILHG GLUHFWRU\
&?6TOM?'HPR
 &RPSLOH WKH VTOM SURJUDP XVLQJ VTOMF 3URFHGXUH&DOOVTOM
 2QFH WKH SURJUDP LV FRPSLOHG VXFFHVVIXOO\ ILOH ZLWK WKH VDPH QDPH EXW ZLWK MDYD
3URFHGXUH&DOOMDYD H[WHQVLRQ ZLOO EH FUHDWHG
 &RPSLOH WKH MDYD ILOH XVLQJ MDYD FRPSLOHU MDYDF 3URFHGXUH&DOOMDYD
 2QFH WKH SURJUDP LV FRPSLOHG ILOH ZLWK WKH VDPH QDPH FODVV 3URFHGXUH&DOOFODVV H[WHQVLRQ
ZLOO EH FUHDWHG DQG WKLV LV WKH H[HFXWDEOH ILOH IRU 64/- SURJUDPV
 ([HFXWH WKH ILOH XVLQJ MDYD 3URFHGXUH&DOO FRPPDQG
7KH 2XWSXW ZLOO EH DV VKRZQ EHORZ
C:\sqlj\demo>sqljc ProcedureCall.sqlj
C:\sqlj\demo>javac ProcedureCall.java

178

Comp-U-Learn

Java Stored Procedures


C:\sqlj\demo>java ProcedureCall
C:\sqlj\demo>

,Q WKH DERYH SURJUDP LPSRUW VTO LV WR DFFHVV WKH 64/ IXQFWLRQDOLWLHV &ODVV QDPH LV
3URFHGXUH&DOO FRQWDLQV D PHWKRG SURF  KHUH ZH DUH XVLQJ &RQQHFWLRQ0DQDJHULQLW&RQWH[W WR
HVWDEOLVK FRQQHFWLRQ WR 2UDFOH L GDWDEDVH :KLOH H[HFXWLQJ WKH SURJUDP LQ FDWFK EORFN DOO WKH
HUURUV ZLOO EH WKURZQ DQG GLVSOD\HG DW '26 SURPSW &$// LV XVHG WR LQYRNH SURFHGXUH LQ 64/SURJUDP

Calling Stored Functions

6WRUHG IXQFWLRQV KDYH D UHWXUQ YDOXH DQG FDQ DOVR WDNH D OLVW RI LQSXW RXWSXW DQG LQSXWRXWSXW
SDUDPHWHUV 6WRUHG IXQFWLRQ FDOOV XVH WKH 9$/8(6 NH\ZRUG WR DVVLJQ WKH YDOXH WR KRVW YDULDEOH
7KH ZRUG 9$/8(6 IROORZHG E\ WKH IXQFWLRQ FDOO ,Q VWDQGDUG 64/- WKH IXQFWLRQ FDOO PXVW
EH HQFORVHG LQ D VHW RI RXWHU SDUHQWKHVHV $ 9$/8(6 ZRUG FDQ DOVR EH XVHG LQ ,16(57 ,172
WDEOH 9$/8(6 7KH V\QWD[ LV VKRZQ EHORZ
#sql res = { VALUES(Function_Name(<PARAM_LIST>)) };

:KHUH UHV WKH UHVXOW H[SUHVVLRQ ZKLFK WDNHV WKH IXQFWLRQ UHWXUQ YDOXH )XQFWLRQB1DPH LV WKH
QDPH RI WKH VWRUHG IXQFWLRQ /HW XV VHH DQ H[DPSOH WR DFFHVV WKH IXQFWLRQ LQ 64/- EHIRUH JRLQJ
WR FDOO WKH )XQFWLRQ ILUVW FUHDWH WKH IROORZLQJ IXFWLRQ DW 64/ SURPSW7KH IXQFWLRQ EHORZ ZLOO
ILQG WKH VXP RI WKH VDODULHV RI DOO WKH VDOHVPHQ
Create or Replace Function SumSalary(
Designation Emp.Job%type Default CLERK)
return number is
Salary Emp.Sal%type;
Commission Emp.Comm%type;
Begin
Select Sum(Sal),Sum(Comm) into Salary,Commission
from Emp
group by job
having job=Designation;
if Designation=SALESMAN then
Salary:=Salary + Commission;
return Salary;
Else
return Salary;
End if;
End;
Function Created

Comp-U-Learn

179

Advanced Java Programming

/HW XV VHH DQ H[DPSOH FDOOLQJ D VWRUHG )XQFWLRQ LQ 64/-


import java.sql.*;
public class FunctionCall
{
public static void main(String args[])
{
try
{
ConnectionManager.initContext();
FunctionCall F=new FunctionCall();
F.Func();
}
catch(SQLException e)
{
System.out.println(Error in program!);
System.out.println(Due to + e);
}
}
void Func() throws SQLException
{
int Sum;
#sql Sum = { VALUES (Sumsalary(SALESMAN))
};
System.out.println(Sum of the Salary for SALESMAN is +
Sum);
}
}

 6DYH WKH DERYH SURJUDP DV )XQFWLRQ&DOOVTOM


 2SHQ '26 SURPSW IURP VWDUW5XQFRPPDQG DQG JRWR WKH VSHFLILHG GLUHFWRU\
&?6TOM?'HPR
 &RPSLOH WKH VTOM SURJUDP XVLQJ VTOMF )XQFWLRQ&DOOVTOM
 2QFH WKH SURJUDP LV FRPSLOHG VXFFHVVIXOO\ ILOH ZLWK WKH VDPH QDPH EXW ZLWK MDYD
)XQFWLRQ&DOOMDYD H[WHQVLRQ ZLOO EH FUHDWHG
 &RPSLOH WKH MDYD ILOH XVLQJ MDYD FRPSLOHU MDYDF )XQFWLRQ&DOOMDYD
 2QFH WKH SURJUDP LV FRPSLOHG ILOH ZLWK WKH VDPH QDPH FODVV )XQFWLRQ&DOOFODVV H[WHQVLRQ
ZLOO EH FUHDWHG DQG WKLV LV WKH H[HFXWDEOH ILOH IRU 64/- SURJUDPV
 ([HFXWH WKH ILOH XVLQJ MDYD )XQFWLRQ&DOO FRPPDQG
180

Comp-U-Learn

Java Stored Procedures

7KH 2XWSXW ZLOO EH DV VKRZQ EHORZ


C:\sqlj\demo>sqljc FunctionCall.sqlj
C:\sqlj\demo>javac FunctionCall.java
C:\sqlj\demo>java FunctionCall
C:\sqlj\demo>

,Q WKH DERYH SURJUDP LPSRUW VTO LV WR DFFHVV WKH 64/ IXQFWLRQDOLWLHV &ODVV QDPH LV
)XQFWLRQ&DOO FRQWDLQV D PHWKRG )XQF  KHUH ZH DUH XVLQJ &RQQHFWLRQ0DQDJHULQLW&RQWH[W WR
HVWDEOLVK FRQQHFWLRQ WR 2UDFOH L GDWDEDVH :KLOH H[HFXWLQJ WKH SURJUDP LQ FDWFK EORFN DOO WKH
HUURUV ZLOO EH WKURZQ DQG GLVSOD\HG DW '26 SURPSW 9$/8(6 NH\ZRUG ZLOO DVVLJQ WKH IXQFWLRQ
UHWXUQ YDOXH WR YDULDEOH 6XP
Calling Packages in SQLJ

7KH SURFHGXUHV DQG IXQFWLRQV ZULWWHQ LQ SDFNV FDQ DOVR EH FDOOHG XVLQJ &$// LI LW LV D 3URFHGXUH
DQG 9$/8(6 LI LW LV D IXQFWLRQ 7KH SDFNDJH EHORZ KDV WZR SURFHGXUHV 'HWDLOV DQG 'HWDLOV ZLWK
GLIIHUHQW W\SHV RI DUJXPHQWV GHSHQGLQJ RQ WKH YDOXH WKH GHWDLOV ZLOO EH GLVSOD\HG 
Create or Replace Package DisplayDetails is
Procedure Details(Dno Number);
Procedure Details(Desig varchar2);
End Displaydetails;

3DFNDJH &UHDWHG
Create or Replace Package body DisplayDetails as
Procedure Details(DNo Number) is
Cursor c1 is select * from Emp Where Deptno=Dno;
Begin
for j in C1 loop
Dbms_output.put_line(j.EmpNo || ,
||j.Ename||,||j.Sal||,||j.DeptNo);
End loop;
End Details;
Procedure Details(Desig varchar2) is
Cursor cur is select * from Emp Where job=Desig;
Begin
for i in Cur loop
Dbms_output.put_line(i.EmpNo || ,
||i.Ename||,||i.Sal||,||i.Job);
End loop;
End Details;
End DisplayDetails;

3DFNDJH ERG\ &UHDWHG


Comp-U-Learn

181

Advanced Java Programming

/HW XV VHH DQ H[DPSOH FDOOLQJ DQ H[LVWLQJ SDFNDJH LQ 64/-


import java.sql.*;
public class PackageCall
{
public static void main(String args[])
{
try
{
ConnectionManager.initContext();
PackageCall P=new PackageCall();
P.Pack();
}
catch(SQLException e)
{
System.out.println(Error in program!);
System.out.println(Due to + e);
}
}
void Pack() throws SQLException
{
System.out.println(Details of Department Number 20);
#sql { CALL (DisplayDetails.Details(20))
};
}
}

 6DYH WKH DERYH SURJUDP DV 3DFNDJH&DOOVTOM


 2SHQ '26 SURPSW IURP VWDUW5XQ&RPPDQG DQG JRWR WKH VSHFLILHG GLUHFWRU\
&?6TOM?'HPR
 &RPSLOH WKH VTOM SURJUDP XVLQJ VTOMF 3DFNDJH&DOOVTOM
 2QFH WKH SURJUDP LV FRPSLOHG VXFFHVVIXOO\ ILOH ZLWK WKH VDPH QDPH EXW ZLWK MDYD
3DFNDJH&DOOMDYD H[WHQVLRQ ZLOO EH FUHDWHG
 &RPSLOH WKH MDYD ILOH XVLQJ MDYD FRPSLOHU MDYDF 3DFNDJH&DOOMDYD
 2QFH WKH SURJUDP LV FRPSLOHG ILOH ZLWK WKH VDPH QDPH FODVV 3DFNDJH&DOOFODVV H[WHQVLRQ
ZLOO EH FUHDWHG DQG WKLV LV WKH H[HFXWDEOH ILOH IRU 64/- SURJUDPV
 ([HFXWH WKH ILOH XVLQJ MDYD 3DFNDJH&DOO FRPPDQG
7KH 2XWSXW ZLOO EH DV VKRZQ EHORZ
C:\sqlj\demo>sqljc PackageCall.sqlj
C:\sqlj\demo>javac PackageCall.java
C:\sqlj\demo>java PackageCall
C:\sqlj\demo>

182

Comp-U-Learn

Java Stored Procedures

,Q WKH DERYH SURJUDP LPSRUW VTO LV WR DFFHVV WKH 64/ IXQFWLRQDOLWLHV &ODVV QDPH LV
3DFNDJH&DOO FRQWDLQV D PHWKRG 3DFN  KHUH ZH DUH XVLQJ &RQQHFWLRQ0DQDJHULQLW&RQWH[W WR
HVWDEOLVK FRQQHFWLRQ WR 2UDFOH L GDWDEDVH :KLOH H[HFXWLQJ WKH SURJUDP LQ FDWFK EORFN DOO WKH
HUURUV ZLOO EH WKURZQ DQG GLVSOD\HG DW '26 SURPSW %HFDXVH SURFHGXUHV KDG EHHQ XVHG LQ WKH
SDFNDJH ZH XVH WKH &$// NH\ZRUG WR LQYRNH WKH SURFHGXUH LQ 64/- SURJUDP
Passing NULL data from Java to SQL

:KHQ WKH -DYD YDOXH QXOO LV SDVVHG WR 64/ DV DQ LQSXW YDOXH LW GHQRWHV D 18// 64/ YDOXH -DYD
QXOO LV SDVVHG WR 64/ WKURXJK KRVWYDULDEOHV FRQWDLQLQJ WKH -DYD YDOXH QXOO )RU H[DPSOH
String s = null;
Double d = null;
#sql { INSERT INTO TAB (CHAR_COL, NUM_COL) VALUES ( :s, :d )
};

Retrieving NULL data from SQL to Java

:KHQ 18// 64/ GDWD DUH UHWULHYHG LQWR KRVWYDULDEOH WDUJHWV RI DQ\ -DYD 2EMHFW W\SHV WKRVH
KRVWYDULDEOHV DUH DVVLJQHG WKH -DYD YDOXH QXOO :KHQ 18// 64/ GDWD DUH UHWULHYHG WKURXJK
LWHUDWRU DFFHVVRUPHWKRGV WKDW UHWXUQ -DYD 2EMHFW W\SHV WKRVH DFFHVVRUPHWKRGV UHWXUQ WKH -DYD
YDOXH QXOO
7KH PDSSLQJ 64/ W\SHV WR -DYD W\SHV DOORZV WKH FRQYHUVLRQ RI VRPH 64/ W\SHV WR -DYD VFDODUV
-DYD VFDODUV GR QRW VXSSRUW WKH -DYD QXOO YDOXH DQG WKHUHIRUH FDQQRW UHSUHVHQW 64/ 18//
YDOXHV GLVWLQFWO\ IURP QRQ18// YDOXHV :KHQ D 64/- FODXVH DWWHPSWV WR UHWULHYH 18// 64/
GDWD LQWR KRVWYDULDEOH WDUJHWV RI DQ\ -DYD VFDODU W\SHV 64/([FHSWLRQ LV UDLVHG DQG QR
DVVLJQPHQW LV PDGH
SQLJ Packages

package sqlj.runtime
package sqlj.runtime.error
package sqlj.runtime.profile
package sqlj.runtime.profile.ref
package sqlj.runtime.profile.util
package sqlj.runtime.ref

Comp-U-Learn

183

Advanced Java Programming

Relationship of SQLJ to Embedded SQL

64/- VXSSRUWV DOO RI WKH 64/ FRQVWUXFWV RI $16,,62 (PEHGGHG 64/ DV LW LV VSHFLILHG IRU &
$'$ &2%2/ )2575$1 08036 DQG 3/ 6SHFLILFDOO\ 64/- VXSSRUWV WKH VWDWLF 64/
V\QWD[ WKDW FDQ EH VXEPLWWHG WR D GDWDEDVH E\ DQ (PEHGGHG 64/ KRVW SURJUDP
7KHUH DUH GLIIHUHQFHV EHWZHHQ 64/- DQG $16,,62 (PEHGGHG 64/
SQLJ specifies static SQL only. There already exists a widely used dynamic SQL
API for Java - JDBC. Also, ANSI/ISO have introduced CLI as dynamic SQL
for host-languages. SQLJ can co-exist with dynamic SQL in a Java program.
SQLJ allows type-checking of all static SQL operations.
Embedded SQL combines a query and its result-set into a cursor object. In
contrast, SQLJ separates queries from result-sets. Queries appear in program
statements as SQLJ clauses. Result-sets are encapsulated in first-class iterator
objects, which are strongly typed, and can be passed between SQLJ components
that were translated and compiled at different times.
Embedded SQL gives names to individual cursor objects. Those names are
outside of the host-language namespace, and are localized to a single translation
unit, because they vanish after translation. In contrast, SQLJ does not name
individual queries or iterator objects, but instead relies on the naming
mechanisms of Java to name the types of iterator objects, so that iterators can be
passed among SQLJ components while preserving strong type checking.

$ PRUH GHWDLOHG FRPSDULVRQ RI 64/- ZLWK WKH HOHPHQWV $16,,62 (PEHGGHG 64/ FDQ EH
IRXQG 7KDW LV LQWHQGHG IRU UHDGHUV ZKR DUH IDPLOLDU WKH (PEHGGHG 64/ VWDQGDUG
64/- FODXVHV VXSSRUW 64/ VWDWHPHQWV DW WKH 64/ (QWU\ /HYHO ZLWK WKH IROORZLQJ
TXDOLILFDWLRQV DQG DOWHUDWLRQV
Where a cursor-name is specified by ANSI/ISO rules to appear in a FETCH or
Positioned DML statement, a SQLJ clause will contain a Java host-variable
whose type is an iterator-class. The value of that host-variable is an iterator, and
its current row is the row that is affected by the FETCH or Positioned DML.
The SQL/PSM CALL statement is supported for calling database stored
procedures.
The SQL VALUES(...) expression is supported for calling database stored
functions.

184

Comp-U-Learn

Java Stored Procedures

The SQL/PSM BEGIN..END block is supported. Each statement in the block


must be an SQL92 Entry Level Embedded SQL statement or the SQL/PSM
CALL statement. The bracketing pair of keywords BEGIN and END is optional;
when they are absent, the semantics of the block is equivalent to an SQL/PSM
NOT ATOMIC block.

7KHUH DUH WKUHH NLQGV RI 64/- FODXVHV


Connection declaration clauses
Iterator declaration clauses
Executable clauses

$ FRQQHFWLRQGHFODUDWLRQ FODXVH GHFODUHV D -DYD W\SH IRU D GDWDEDVH FRQQHFWLRQ $Q LWHUDWRU GHFODUDWLRQ
GHFODUHV D -DYD W\SH IRU D UHVXOWVHW LWHUDWRU LH IRU D W\SHG UHVXOWVHW UHWXUQHG E\ D TXHU\
$QG DQ H[HFXWDEOH FODXVH H[HFXWHV D 64/ FRQVWUXFW
FODXVH

Advantages of SQLJ over JDBC

-'%& SURYLGHV D FRPSOHWH G\QDPLF 64/ LQWHUIDFH IURP -DYD WR UHODWLRQDO GDWDEDVHV ZKLOH 64/ILOOV D UROH IRU VWDWLF 64/
6WDWLF 64/ VWDWHPHQWV FDQ DOVR EH XVHG LQ -'%& SURJUDPV EXW WKH\ FDQ EH UHSUHVHQWHG PRUH
FRQYHQLHQWO\ LQ 64/-
64/- SURJUDPV DUH VPDOOHU WKDQ HTXLYDOHQW -'%& SURJUDPV EHFDXVH 64/- SURYLGHV D VKRUWHU
V\QWD[
64/- XVHV GDWDEDVH FRQQHFWLRQV WR W\SHFKHFN VWDWLF 64/ FRGH ZKLOH -'%& LV FRPSOHWHO\
G\QDPLF $3, GRHV QRW GR DQ\ W\SH FKHFNLQJ XQWLO UXQWLPH
64/- SURJUDPV DOORZ GLUHFW HPEHGGLQJ RI -DYD ELQG H[SUHVVLRQV ZLWKLQ 64/ VWDWHPHQWV -'%&
UHTXLUHV VHSDUDWH JHW DQGRU VHW FDOO VWDWHPHQWV IRU HDFK ELQG YDULDEOH DQG VSHFLILHV WKH ELQGLQJ
E\ SRVLWLRQ QXPEHU
64/- SURYLGHV VWURQJ W\SLQJ RI TXHU\ RXWSXWV DQG UHWXUQ SDUDPHWHUV DQG DOORZV W\SHFKHFNLQJ
RQ FDOOV -'%& SDVVHV YDOXHV WR DQG IURP 64/ ZLWKRXW FRPSLOHWLPH W\SH FKHFNLQJ
64/- SURYLGHV VLPSOLILHG UXOHV IRU FDOOLQJ 64/ VWRUHG SURFHGXUHV DQG IXQFWLRQV
-'%& SURYLGHV ILQHJUDLQHG FRQWURO RI WKH H[HFXWLRQ RI G\QDPLF 64/ IURP -DYD ZKLOH 64/SURYLGHV D KLJKHU OHYHO VWDWLF ELQGLQJ WR 64/ RSHUDWLRQV LQ D VSHFLILF GDWDEDVH VFKHPD
Comp-U-Learn

185

Advanced Java Programming

Summary
After reading this session we are able to understand the advantages of SQLJ over
JDBC, where to use JDBC and where to use SQLJ, etc. We also tried
manipulating the data using DML statements in SQLJ, and learnt about
Transactions. We have also seen some concepts such as embedding sub programs
like Procedures, Functions, and packages in SQLJ in this session.

Going Over It Again


1. Fill in the Blanks



BBBBBBBBBB FDQ EH XVHG LQ -'%& SURJUDPV EXW WKH\ FDQ EH UHSUHVHQWHG PRUH
FRQYHQLHQWO\ LQ 64/-

 BBBBBBBBB UHTXLUHV VHSDUDWH JHW DQG VHW FDOO VWDWHPHQWV IRU HDFK ELQG YDULDEOH DQG VSHFLILHV
WKH ELQGLQJ E\ SRVLWLRQ QXPEHU


BBBBBBBBBB SDVVHV YDOXHV WR DQG IURP 64/ ZLWKRXW FRPSLOHWLPH W\SH FKHFNLQJ

 BBBBBBBBBBBBB LV FRPSOHWHO\ G\QDPLF $3,


 7KH BBBBBBBBBBBBBB LV D 7\SH ,, GULYHU WKDW LV XVHIXO WR FOLHQWVHUYHU -DYD DSSOLFDWLRQV
SURJUDPPHUV DQG -DYDEDVHG PLGGOHWLHU GHYHORSHUV
II. True or False

 -'%& SURYLGHV D FRPSOHWH G\QDPLF 64/ LQWHUIDFH IURP -DYD WR UHODWLRQDO GDWDEDVHV ZKLOH
64/- ILOOV D UROH IRU VWDWLF 64/
 64/- SURJUDPV DUH ODUJHU WKDQ HTXLYDOHQW -'%& SURJUDPV EHFDXVH -'%& SURYLGHV D VKRUWHU
V\QWD[
 64/- SURJUDPV DOORZ GLUHFW HPEHGGLQJ RI -DYD ELQG H[SUHVVLRQV ZLWKLQ 64/ VWDWHPHQWV
 -'%& SURYLGHV ILQHJUDLQHG FRQWURO RI WKH H[HFXWLRQ RI G\QDPLF 64/ IURP -DYD
 64/- SURYLGHV D ORZHU OHYHO VWDWLF ELQGLQJ WR 64/ RSHUDWLRQV LQ D VSHFLILF GDWDEDVH VFKHPD
186

Comp-U-Learn

Java Stored Procedures

III. One line Answers







:KDW DUH WKH 64/- FODXVHV"


'HILQH (PEHGGHG 64/ :KDW LV LWV UHODWLRQVKLS ZLWK 64/-"
+RZ GR \RX FDOO D 6WRUHG 3URFHGXUH LQ 64/-"
+RZ GR \RX FDOO 3DFNDJHV LQ 64/-"
:KDW DUH WKH 'ULYHUV UHTXLUHG WR ZRUN RQ 64/-"

Comp-U-Learn

187

Session 8

Distributed Communication in RMI

On Completion of this Session


you will be able to understand...

) Distributed Applications on the Internet /


Intranet

) COM / DCOM
) RMI Three Tier Architecture
) Creating Application using RMI

In This Session...

Design of Distributed Applications

Distributed Applications on the Internet/Intranet

The Distributed Computing Environment

Component Object Model

Distributed Component Object Model (DCOM)

Common Object Request Broker Architecture


(CORBA)

Distributed Object Model of Java

Remote Method Invocation

RMI Three Tier Architecture

Client/Server Application Using RMI

Server side Programming

Client side Programming

Distributed Communication RMI

Design of Distributed Applications


-DYD LV GHVLJQHG IRU 'LVWULEXWHG (QYLURQPHQW RI WKH ,QWHUQHW VLQFH LW XVHV WKH 7&3,3
SURWRFROV

7KH

SURFHVVLQJ

RI

WKH

'LVWULEXWHG

$SSOLFDWLRQ

LV

GLVWULEXWHG

DFURVV

PXOWLSOH

QHWZRUNHG FRPSXWHUV

Three-Tier Architecture
7KH

LPSOHPHQWDWLRQ

RI

'LVWULEXWHG

$SSOLFDWLRQ

LV

&OLHQW6HUYHU

V\VWHP

,W

LV

RUJDQL]HG

DFFRUGLQJ WR WKH XVHU LQWHUIDFH LQIRUPDWLRQ SURFHVVLQJ DQG LQIRUPDWLRQ VWRUDJH 7KH ILJXUH
JLYHQ EHORZ LV WKH WKUHHWLHU DUFKLWHFWXUH
3UHYLRXVO\

7ZR7LHU $UFKLWHFWXUH LV LPSOHPHQWHG 7KH WZRWLHU DUFKLWHFWXUH LV QRWKLQJ EXW D

FOLHQW DQG D VHUYHU $ FOLHQW KDV D IURQW HQG DSSOLFDWLRQ MXVW WR JLYH WKH GDWD $ VHUYHU KDV WKH
GDWDEDVH WR VWRUH WKH GDWD DQG VRPH SURFHGXUHV IRU PDQLSXODWLRQ DQG WKH D UHVSRQVLELOLW\ RI
VWRULQJ WKH GDWD RQ WR WKH GDWDEDVH

Tier - 1

Tier - 3

Tier - 3

U se r
In t e r fa c e

In f o r m at io n
P ro c e ssin g

In f o rm at io n
St or a g e

Fig. 8.1
Tier-1 :
7LHU LV QRWKLQJ EXW D SURJUDP RU DQ DSSOLFDWLRQ UHVLGHV RQ D V\VWHP 7LHU LV WKH XVHU ,QWHUIDFH
OD\HU ZKLFK LV LPSOHPHQWHG E\ DQ DSSOLFDWLRQ FOLHQW (PDLO SURJUDPV DQG :HE EURZVHUV DUH WKH
H[DPSOHV RI WKH XVHU LQWHUIDFH FRPSRQHQW RI GLVWULEXWHG DSSOLFDWLRQV 2QO\ IURP KHUH

WKH XVHU

LQWHUDFW WKH 7LHU DQG 7LHU ,W LV PHUHO\ XVHU LQWHUDFWLYH VFUHHQ LV GHVLJQHG XVLQJ VRPH
DSSOLFDWLRQ :KHQ ZH WDNH D EURZVHU WKH GDWD LV IHHG LQWR LW DQG LW LV VHQW WR WKH 5HPRWH VHUYHU
ZKLFK PD\ EH D 7LHU

Tier-2 :
7LHU LV DJDLQ DQ DSSOLFDWLRQ RU D SURJUDP ZKLFK UHVLGHV RQ D 5HPRWH 6\VWHP ,W FDQ DOVR EH
FDOOHG DQ DSSOLFDWLRQ VHUYHU RU DQ DSSOLFDWLRQ VXSSRUW VHUYHU 7KH VHUYHU KDV WKH SURFHGXUHV IRU
SURFHVVLQJ WKH LQIRUPDWLRQ 7KH FOLHQW 7LHU UHTXHVWV WKH LQIRUPDWLRQ IURP WKH GDWDEDVH
VHUYHU ,Q RUGHU WR JLYH WKH IHHG EDFN WR WKH FOLHQW WKH 7LHU VHUYHU FRPPXQLFDWHV ZLWK WKH
GDWDEDVH VHUYHU 7LHU 

Comp-U-Learn

191

Advanced Java Programming

Tier-3 :
7KH 7LHU KROGV DQ\ 5'%0V VXFK DV $FWLYH ; 2UDFOH DQG WKH GDWDEDVHV DUH VWRUHG LQ LW 7KH
7LHU

LV

WKH

LQIRUPDWLRQ VWRUDJH OD\HU 7KH %DFNHQG GDWDEDVHV DUH VWRUHG LQ WKLV VHUYHU 7KH SURFHGXUHV UHVLG
HV RQ

WKH PLGGOH

WLHU

LH

7LHU

FRPPXQLFDWH

ZLWK

WKH

7LHU

DQG

7LHU

,W

WDNHV

WKH

LQIRUPDWLRQ IURP WKH 7LHU DQG GRHV VRPH SURFHVVLQJ DQG QHFHVVDU\ LQIRUPDWLRQ LV VWRUHG RQ
WKH GDWDEDVHV ZKLFK UHVLGHV RQ WKH 7LHU VHUYHU

Why Three-Tier ?
,Q FDVH RI 7ZR7LHU WKH EXUGHQ RI VWRULQJ ERWK WKH SURFHGXUHV DQG GDWDEDVHV ZDV RQ WKH VLQJOH
PDFKLQH
7KH PDLQ GUDZEDFN LV WKDW ZKHQ DQ\ PRGLILFDWLRQ KDV WR EH GRQH IRU WKH SURFHGXUHV HYHQ WKH
GDWDEDVHV JHWV DIIHFWHG 7KXV WKH PLGGOH WLHU FDPH LQWR H[LVWHQFH DQG WKH SURFHGXUHV DUH VWRUHG
LQ D VHSDUDWH VHUYHU

Distributed Applications on the Internet / Intranet


7KH 'LVWULEXWHG $SSOLFDWLRQ UXQ RQ WKH ,QWHUQHWV FOLHQWVHUYHU EDVLV 7KH FRPSXWHUV RQ WKH
RWKHU HQG FDQ EH DFFHVVHG YLD WKH 7&3,3 SURWRFRO ,W LV XVHG WR WUDQVIHU WKH UHVRXUFHV IURP
RQH HQG WR WKH RWKHU HQG 7KH IROORZLQJ ILJXUH VKRZV D GLVWULEXWHG DSSOLFDWLRQ

Back-End
Server

Back-End
Server

Application
Server

Client

Client
Client

Fig. 8.2
192

Comp-U-Learn

Distributed Communication RMI


$ FOLHQW SURJUDP LV H[HFXWHG RQ PXOWLSOH KRVW 7KH FOLHQW XVHV 7&3,3 SURWRFRO WR FRQQHFW WR
WKH VHUYHU 0XOWLSOH UHTXHVW FDQ EH PDGH E\ WKH FOLHQW WR WKH VHUYHU
7KH VHUYHU RQ LWV SDUW ZLOO UHVSRQG WR WKH FOLHQW E\ SURFHVVLQJ WKH HDFK DQG HYHU\ FOLHQWV UHTXHVW
 7KH VHUYHU SURFHVVHV WKH FOLHQWV UHTXHVW XVLQJ VRPH *DWHZD\ SURJUDPV RU %DFNHQG VHUYHUV
)LQDOO\ LW IRUZDUGV WKH UHVSRQVH WR WKH FOLHQW
,Q FDVH RI ,QWUDQHW WKH LQIRUPDWLRQ SURFHVVLQJ RU WKH LQIRUPDWLRQ WUDQVIRUPDWLRQ WDNHV SODFH
ZLWKLQ WKH FRPSDQ\ HQYLURQPHQW )RU HDFK EXVLQHVV DUHD WKH DSSOLFDWLRQ H[LVWV 7KH EXVLQHVV
DUHDV DUH 0DQDJHPHQW $FFRXQWLQJ  0DUNHWLQJ 0DQXIDFWXULQJ &XVWRPHU 6XSSRUW 9HQGRU
GHWDLOV HWF
(YHQ LQ ,QWUDQHW WKH DSSOLFDWLRQV DUH GLVWULEXWHG XVLQJ FOLHQWVHUYHU DUFKLWHFWXUH E\ FUHDWLQJ WKH
FRPSDQ\LQWHUQDO :HE -DYD DSSOHWV DUH XVHG WR UXQ RQ WKH FOLHQW LQWHUIDFH OD\HU DQG SDUW RI WKH
LQIRUPDWLRQ SURFHVVLQJ OD\HU RI EXVLQHVV DSSOLFDWLRQV ZLWKLQ WKH FRQWH[W RI D :HE EURZVHU
)LJXUH  VKRZV KRZ %XVLQHVV DSSOLFDWLRQV DUH GLVWULEXWHG DPRQJ EURZVHUV :HE EURZVHU RU
VRPH RWKHU %DFN(QG 6HUYHUV (DFK DQG HYHU\ FOLHQW XVHV WKH -DYD $SSOHW SURJUDP ZKLFK UXQV
RQ

WKH

-DYD

(QDEOHG

%URZVHU

VXFK

DV

,QWHUQHW

([SORUHU

RU

1HWVFDSH

1DYLJDWRU

7KH

LQIRUPDWLRQ LV UHTXHVWHG E\ WKH FOLHQW IURP WKH :HE VHUYHU

File
Server

File
Server

Web
Server

Browser
(Applet)

Browser
(Applet)
Browser
(Applet)

Fig. 8.3

The Distributed Computing Environment


7KH

'LVWULEXWHG &RPSXWLQJ (QYLURQPHQW

DSSOLFDWLRQV

'&(

LV

DQRWKHU

DSSURDFK

WR

EXLOGLQJ

GLVWULEXWHG

'&( ZDV GHYHORSHG E\ WKH 2SHQ 6RIWZDUH )RXQGDWLRQ QRZ UHIHUUHG WR DV WKH

2SHQ *URXS

Comp-U-Learn

193

Advanced Java Programming


'&( LQYROYHV HQRUPRXV VHUYLFHV DQG WHFKQRORJLHV WR EXLOG GLVWULEXWHG DSSOLFDWLRQV 'LVWULEXWHG
6\VWHPV DUH RUJDQL]HG LQWR FHOOV ZKLFK DUH JURXSV RI SURFHVVLQJ UHVRXUFHV VHUYLFHV DQG VKDUH D
FRPPRQ IXQFWLRQ DQG VHW RI '&( VHUYLFHV &HOOV FDQ EH RUJDQL]HG DFFRUGLQJ WR FRPSDQ\V
GHSDUWPHQW VXFK DV VHSDUDWH FHOOV IRU ILQDQFH DFFRXQWLQJ DQG PDUNHWLQJ GHSDUWPHQWV '&( LV
UHIHUUHG WR DV PLGGOH ZDUH
7KH 6HUYLFHV RI WKH '&( FHOO DUH JLYHQ EHORZ

Directory Services
Distributed File Service
Distributed Time Service
Security Service
Remote Procedure Call
DCE Threads

Component Object Model


&20 LV D 0LFURVRIW SURGXFW 7KH $GYDQFHG YHUVLRQ RI 2/( 2EMHFW /LQNLQJ DQG (PEHGGLQJ
LV &20 2/( ZDV XVHG LQ HDUO\ YHUVLRQV RI :LQGRZV WR VXSSRUW FRPSRXQG GRFXPHQWV ,W
VROYHV WKH EDVLF SUREOHP RI 2/( 7KDW LV KRZ WKH JHQHUDO REMHFWV VKRXOG LQWHUDFW ZLWK HDFK
RWKHU ,W HYHQ SURYLGHV VHUYLFHV WR HDFK RWKHU
&20 REMHFWV DUH LQVWDQFHV RI FODVVHV DQG DUH RUJDQL]HG LQWR LQWHUIDFHV

7KH FROOHFWLRQ RI

PHWKRGV LV UHIHUUHG WR DV ,QWHUIDFH (DFK DQG HYHU\ REMHFW LV LPSOHPHQWHG LQ D VHUYHU &20
DFFHVVHV REMHFWV WKURXJK WKHLU PHWKRGV $ VHUYHU PD\ EH LPSOHPHQWHG DV D G\QDPLFOLQN OLEUDU\
LQGHSHQGHQW SURFHVV RU DQ RSHUDWLQJ VHUYLFH &20 FUHDWHV D XQLIRUP LQWHUIDFH WR DOO REMHFWV
7KH &20 OLEUDU\ SURYLGHV D GLUHFWRU\ WR DOO FODVVHV WKDW DUH DYDLODEOH RQ WKDW V\VWHP $Q\ V\VWHP
VXSSRUWV &20 KDV WKH &20 OLEUDU\ ,W PDLQWDLQV LQIRUPDWLRQ DERXW DYDLODEOH FODVVHV LQ WKH
V\VWHP UHJLVWU\ :KHQ RQH &20 REMHFW DFFHVVHV DQRWKHU LW ILUVW LQYRNHV IXQFWLRQ LQ WKH &20
OLEUDU\

7KHVH IXQFWLRQV FDQ EH XVHG WR FUHDWH D &20 REMHFW IURP LWV FODVV 2WKHUZLVH D SRLQWHU

WR WKH LQWHUIDFH FDQ EH XVHG 7KH SRLQWHUV XVHG E\ &20 REMHFWV FDQ EH XVHG E\ REMHFWV ZULWWHQ
LQ DQ\ SURJUDPPLQJ ODQJXDJH 7KH LQWHUIDFH GHILQLWLRQ ODQJXDJH

LV XVHG WR GHILQH &20

LQWHUIDFHV DQG PHWKRGV

Distributed Component Object Model (DCOM)


'&20 LV GLVWULEXWLQJ WKH &20 RYHU PXOWLSOH FRPSXWHUV '&20 DOORZV &20 REMHFW WR
H[HFXWH RQ RQH PDFKLQH DQG FUHDWH WKH UHPRWH REMHFW IURP DQRWKHU PDFKLQH XVLQJ WKHLU
PHWKRGV -XVW OLNH WKH ORFDO REMHFWV WKH UHPRWH REMHFWV FDQ EH DFFHVVHG DQG WKH UHPRWH REMHFW LV
WUDQVSDUHQW

194

Comp-U-Learn

Distributed Communication RMI


'&20 LV DOVR D 0LFURVRIW SURGXFW 0LFURVRIW LQWHQGV '&20 WR EH D FURVVSODWIRUP VROXWLRQ
IRU GLVWULEXWHG DSSOLFDWLRQ GHYHORSPHQW 7KH PDMRU IHDWXUH RI WKH '&20 LV LWV DSSOLFDWLRQ
VXSSRUW ,W SURYLGHV VWURQJ DQG IOH[LEOH FRPPXQLFDWLRQ VHFXULW\ 'DWD HQFU\SWLRQ LV XVHG WR
SURWHFW WKH LQIRUPDWLRQ ZKLOH WUDQVPLWWLQJ RQH &20 REMHFW WR DQRWKHU
7KH 0LFURVRIW -DYD 6RIWZDUH 'HYHORSPHQW .LW LQFOXGHV D -90 DQG $3, WKDW SURYLGHV DQ
LQWHUIDFH WR &20 DQG '&20
+RZ '&20 ZRUNV

Object Server

Local COM
Object

Object creation
& Method
invocation
Returning of
invocation

Object Server

Remote COM
Object

COM
Library

Registry

ORPC

COM
Runtime
(SCM)

COM
Runtime
(SCM)

Registry

UDP, TCP or other


transport protocols
Transport
Layer

Transport
Layer

Lower Layer protocols

Lower Layer protocols

Fig. 8.4
7KH ILJXUH  VKRZV KRZ '&20 ZRUNV

7KH ORFDO &20 REMHFW LV FUHDWHG DQG VWRUHG LQ D

OLEUDU\ E\ UHJLVWHULQJ LW 5XQ WKH &20 REMHFW DFFRUGLQJ WR WKH W\SH RI UHJLVWHULQJ 1RZ WKURXJK
WKH WUDQVSRUW OD\HU WKH REMHFW LV VHQW WR WKH 5HPRWH VHUYHU 7KHUH DJDLQ LW JHWV UHJLVWHUHG DQG WKH
5HPRWH REMHFW UXQV RQ WKH 5HPRWH 6HUYHU 7KH WUDQVSRUW OD\HU XVHV HLWKHU 7&3 RU 8'3
SURWRFROV

Comp-U-Learn

195

Advanced Java Programming


7KH &20 UXQWLPH SURFHVVHV RQ VHSDUDWH PDFKLQHV FRPPXQLFDWH ZLWK HDFK RWKHU XVLQJ DQ
53& 5HPRWH 3URFHGXUH &DOO PHFKDQLVP UHIHUUHG WR DV 2EMHFW 53& RU 253& 2EMHFW 5HPRWH
3URFHGXUH &DOO

LV EDVHG RQ 0LFURVRIW 53& ZKLFK LV

HVVHQWLDOO\ '&( 53&

253& PD\ EH

FRQILJXUHG WR XVH D QXPEHU RI WUDQVSRUW SURWRFROV EXW ZRUNV EHVW ZLWK 8'3
'&20 VHFXULW\ LQWHJUDWHV ZLWK DQG H[WHQGV WKH :LQGRZV 17 VHFXULW\ PRGHO

Common Object Request Broker Architecture (CORBA)


&25%$ LV DQ DQRWKHU DSSURDFK RI EXLOGLQJ GLVWULEXWHG V\VWHP &25%$ DOORZV REMHFWV RQ RQH
FRPSXWHU WR LQYRNH WKH PHWKRGV RI REMHFWV RQ RWKHU FRPSXWHUV ,W LV XQOLNH '&20 &25%$
DFFHVV DV DQ REMHFW YLD 2EMHFW 5HTXHVW %URNHU 25%V  25%V DUH XVHG WR FRQQHFW REMHFW WR RQH
DQRWKHU DFURVV D QHWZRUN
7KH FOLHQWV LQWHUIDFH WR WKH 25% LV D VWXE WKDW LV ZULWWHQ LQ ,QWHUIDFH 'HILQLWLRQ /DQJXDJH
,'/  7KH ,'/ SURYLGHV WKH LQGHSHQGHQW PHWKRGV RI WKH SURJUDPPLQJ ODQJXDJH 7KH 25%/V
LQWHUIDFH WR WKH VHUYHU LV WKURXJK DQ ,'/ VNHOHWRQ 7KH VNHOHWRQ SURYLGHV WKH 25% ZLWK D
ODQJXDJHLQGHSHQGHQW PHFKDQLVP IRU DFFHVVLQJ WKH UHPRWH REMHFW

Server Host

Client Host
Client Object

Server Object

IDL Stub

IDL Skeleton
Object Request Broker

Fig. 8.5
7KH FOLHQW REMHFW LQYRNHV WKH PHWKRG RI ,'/ VWXE FRUUHVSRQGLQJ WR D UHPRWH REMHFW 1RZ WKH
,'/ VWXE FRPPXQLFDWHV ZLWK 25% 7KHQ WKH 25% LQYRNHV WKH FRUUHVSRQGLQJ PHWKRGV RI WKH
,'/ VNHOHWRQ 7KH PHWKRGV RI WKH UHPRWH VHUYHU DUH LQYRNHG E\ ,'/ VNHOHWRQ

7KH VHUYHU

REMHFW UHWXUQV WKH UHVXOW RI WKH PHWKRG LQYRFDWLRQ YLD WKH ,'/ VNHOHWRQ 6NHOHWRQ SDVVHV WKH
UHVXOW EDFN WR WKH 25% 25% SDVVHV WKH UHVXOW EDFN WR WKH ,'/ VWXE )LQDOO\ ,'/ VWXE SDVV WKH
UHVXOW WR WKH FOLHQW REMHFW :H FDQ VHH DERXW &25%$ LQ GHWDLO LQ WKH VXFFHHGLQJ VHVVLRQV

196

Comp-U-Learn

Distributed Communication RMI

Distributed Object Model of Java

7KH MDYD REMHFW H[HFXWHV LQ RQH -90 FDQ LQYRNH WKH PHWKRGV RI REMHFWV WKDW H[HFXWH RQ RWKHU
-90V 7KLV LV WKH 'LVWULEXWHG 2EMHFW 0RGHO RI -DYD 7KH RWKHU -90 PD\ H[HFXWH RQ WKH VDPH
PDFKLQH RU LW FDQ EH DQ\ UHPRWH FRPSXWHUV

Client Object
7KH REMHFW PDNLQJ WKH PHWKRG LQYRFDWLRQ LV UHIHUUHG WR DV WKH FOLHQW REMHFW ,W LV DOVR UHIHUUHG WR
DV D ORFDO REMHFW

Server Object
7KH REMHFW ZKRVH PHWKRGV DUH EHLQJ LQYRNHG LV UHIHUUHG WR DV WKH 6HUYHU 2EMHFW ,W LV DOVR FDOOHG
UHPRWH REMHFW
,Q D -DYD 'LVWULEXWHG 2EMHFW 0RGHO WKH FOLHQW REMHFW FDQW GLUHFWO\ UHIHUHQFH WKH VHUYHU REMHFW
2QO\ WKURXJK WKH UHPRWH LQWHUIDFH WKH FOLHQW FDQ UHIHU WR WKH VHUYHU REMHFW 7KH UHPRWH LQWHUIDFH
LGHQWLILHV WKH VHUYHU REMHFW E\ JLYLQJ WKH GHFODUDWLRQ RI WKH PHWKRG 7KH VHUYHU REMHFW KROGV WKH
GHILQLWLRQ IRU WKH UHPRWH PHWKRGV 7KH FOLHQW REMHFW LV FRPSLOHG XVLQJ WKH UHPRWH LQWHUIDFH
FODVV

Remote Method Invocation (RMI)


50, HQDEOHV WKH SURJUDPPHU WR FUHDWH GLVWULEXWHG -DYDWR-DYD DSSOLFDWLRQV 7KH FOLHQW MDYD
SURJUDP DFFHVV WKH UHPRWH MDYD SURJUDP WKH UHPRWH SURJUDP FDQ UHVLGHV RQ GLIIHUHQW KRVW ,W LV
SXUHO\ -DYDWR-DYD DSSOLFDWLRQ 7KH REMHFW ZKLFK H[HFXWH RQ ORFDO KRVW LV ORFDO REMHFW 7KH
REMHFW ZKLFK H[HFXWH RQ UHPRWH KRVW LV UHPRWH REMHFW

7KH ORFDO REMHFW LQYRNHV WKH UHPRWH

REMHFW  7KH 5HPRWH ,QWHUIDFH LV LPSOHPHQWHG LQ RUGHU WR DFFHVV WKH UHPRWH REMHFW

RMI Three Tier Layers


The three Layers of RMI

Client-side stub and Server-side skeletons.


The Remote reference Layer.
The transport Layer.

Comp-U-Learn

197

Advanced Java Programming

Client-side stub and Server-side skeletons


8VLQJ UPLF FRPSLOHU WKH VHUYHU SURJUDP LV FRPSLOHG RQ WKH FRPPDQG SURPSW DV VKRZQ LQ WKH
IROORZLQJ FRPPDQG

C:\> rmic
1RZ

VWXE

DQG

server
VNHOHWRQ

DUH

FUHDWHG

6HUYHUB6WXEFODVV

LV

FOLHQW

VLGH

VWXE

FODVV

DQG

VHUYHUB6NHOHWRQFODVV LV D VHUYHU VLGH FODVV ILOH %RWK ILOHV DUH FUHDWHG RQ WKH VHUYHU 7KH VWXE
FODVV ILOH VKRXOG EH FRSLHG WR FOLHQW PDFKLQH

The Stub/Skeleton Layer


6WXE FODVVHV VHUYH DV ORFDO SUR[LHV IRU WKH UHPRWH REMHFWV 6NHOHWRQ FODVVHV DFW DV UHPRWH SUR[LHV
6NHOHWRQ DQG VWXE FODVVHV LPSOHPHQW WKH UHPRWH LQWHUIDFH RI WKH VHUYHU REMHFW 7KH LQWHUIDFH
ZKLFK LV FUHDWHG RQ VHUYHU LV FRPSLOHG )RU H[DPSOH LQWIMDYD LV FUHDWHG DQG DIWHU EHLQJ FRPSLOHG
WKH LQWIFODVV LV FUHDWHG 7KH LQWHUIDFH FODVV VKRXOG UHVLGH RQ ERWK FOLHQW DQG VHUYHU VR WKH
LQWIFODVV LV FRSLHG RQ WR WKH FOLHQW
7KH FOLHQW LQWHUIDFH LQYRNHV WKH PHWKRGV RI WKH ORFDO VWXE REMHFW 7KH ORFDO VWXE FRPPXQLFDWHV
ZLWK WKH UHPRWH VNHOHWRQ LQ RUGHU WR LQYRNH WKH PHWKRGV 7KH UHPRWH VNHOHWRQ LQYRNHV WKH
PHWKRG RI WKH VHUYHU REMHFW 7KH VHUYHU REMHFW UHWXUQV WKH YDOXH WR WKH VNHOHWRQ REMHFW 7KH
VNHOHWRQ REMHFW UHWXUQV WKH UHVXOW WR WKH VWXE REMHFW DQG ILQDOO\ WKH VWXE REMHFW UHWXUQV WKH YDOXH
WR WKH FOLHQW

The Remote Reference Layer


7KH VWXE DQG VNHOHWRQ FRPPXQLFDWH YLD D UHPRWH 5HIHUHQFH /D\HU $ VWXE FDQ FRPPXQLFDWH
ZLWK PRUH WKDQ D VNHOHWRQ EXW QRZ WKLV IDFLOLW\ GRHV QRW H[LVW 50, $3, VXSSRUWV RQO\ XQLFDVW
FRPPXQLFDWLRQ EHWZHHQ D VWXE DQG D VLQJOH VNHOHWRQ 7KH UHPRWH UHIHUHQFH OD\HU PD\ DOVR EH
XVHG WR DFWLYDWH VHUYHU REMHFWV ZKHQ WK\ DUH LQYRNHG UHPRWHO\ 7KH WUDQVIRUPDWLRQ WDNHV SODFH
YLD WKH 7UDQVSRUW /D\HU

The Transport Layer:


7KH 7UDQVSRUW /D\HU WDNHV SDUW RI FRQQHFWLRQ EHWZHHQ WKH FOLHQW DQG VHUYHU ,W XVHV WKH 7&3
VRFNHWV E\ GHIDXOW WR FRPPXQLFDWH EHWZHHQ WKH ORFDO DQG UHPRWH KRVWV 7KH WUDQVSRUW OD\HU
VHWV XS WKH FRQQHFWLRQV EHWZHHQ ORFDO DQG UHPRWH KRVW 7KH UHPRWH UHIHUHQFH OD\HU RQ WKH ORFDO
KRVW FRPPXQLFDWHV ZLWK UHPRWH UHIHUHQFH OD\HU RQ WKH UHPRWH KRVW YLD WKH 50, WUDQVSRUW OD\HU

198

Comp-U-Learn

Distributed Communication RMI

Server side
Skeleton

Client side
Stub

Remote
Reference
Layer

Remote
Reference
Layer

Transport
Layer

Transport
Layer

Lower Layer Protocols

Lower Layer Protocols


Virtual Communication
Actual Communication

Fig. 8.6
7KH DERYH ILJXUH  VKRZV WKH YLUWXDO FRPPXQLFDWLRQ DQG $FWXDO FRPPXQLFDWLRQ 7KH FOLHQW
REMHFW LQYRNH WKH PHWKRGV RI WKH ORFDO VWXE RI WKH VHUYHU REMHFW 7KH ORFDO VWXE XVHV WKH UHPRWH
UHIHUHQFH OD\HU WR FRPPXQLFDWLRQ ZLWK WKH VHUYHU VNHOHWRQ 7KH UHPRWH UHIHUHQFH OD\HU XVHV WKH
WUDQVSRUW OD\HU WR VHW XS D FRQQHFWLRQ EHWZHHQ WKH ORFDO DQG UHPRWH DGGUHVV VSDFHV DQG WR
REWDLQ D UHIHUHQFH WR WKH VNHOHWRQ REMHFW

Client/Server Application Using RMI


1RZ ZH ZLOO VWDUW LPSOHPHQWLQJ WKH 50, 7KH IROORZLQJ VWHSV JLYH XV ZKDW H[DFWO\ KDSSHQV
GXULQJ XVH RI WKH 50,

Comp-U-Learn

199

Advanced Java Programming

The Client request the information from the server.


The Server receives the request from the client.
The Server processes the request.
The Server return the result to client
The Client gets the respond from the server

,Q RXU H[DPSOH WKH IROORZLQJ VWHSV RFFXU GXULQJ WKH LQYRFDWLRQ

The Clients request is to add the two numbers


The Server receives the two numbers from the client
The Server adds those two numbers
The Server returns the sum to client
The Client displays the sum.

/HW XV EHJLQ WR ZULWH WKH VRXUFH FRGH WR FRPPXQLFDWH EHWZHHQ WKH FOLHQW DQG VHUYHU
7KH WZR QXPEHUV DUH JLYHQ WR WKH FOLHQW DQG WKH FOLHQW LQYRNHV WKH PHWKRG IURP WKH VHUYHU DQG
DGG WKH QXPEHUV DQG ILQDOO\ GLVSOD\ WKH UHVXOW RQ WKH FOLHQW

Server Side Program


7KLV LV WKH ILUVW VWHS LQ RXU LQYRFDWLRQ SURFHVV WR FUHDWH DQ ,QWHUIDFH 7KH ,QWHUIDFH LV ZULWWHQ
DQG VDYHG DV -DYD DQG FRPSLOHG XVLQJ MDYDF 7KH IROORZLQJ LV WKH ,QWHUIDFH WR DGG WZR QXPEHUV

import java.rmi.*;
public interface Server_intf extends Remote
{
double add(double d1,double d2) throws RemoteException;
}
)LUVW ZH DUH JRLQJ WR FUHDWH DQ LQWHUIDFH IRU WKH UHPRWH REMHFW 7KH 5HPRWH LQWHUIDFH
6HUYHUBLQWIMDYD LV FUHDWHG 7KH LQWHUIDFH PXVW EH SXEOLF ,W UHVLGHV RQ VHUYHU 7KH SDFNDJH
MDYDUPL  LV LPSRUWHG
,W KDV D XVHU GHILQHG PHWKRG DGG ZKLFK KDV WZR SDUDPHWHUV WR DGG WKH WZR GRXEOH W\SH
QXPEHUV (DFK PHWKRG ZH GHFODUH LQ D UHPRWH LQWHUIDFH PXVW VSHFLI\ 5HPRWH([FHSWLRQ LQ LWV
WKURZV FODXVH
7KH

VHFRQG OLQH RI WKH DERYH SURJUDP H[WHQGV 5HPRWH LQWHUIDFH XVHG WR LGHQWLI\ DOO UHPRWH

REMHFWV ,W LV D SDUW RI MDYDUPL5HPRWH GHILQHV QR PHPEHUV ,WV PDMRU SXUSRVH LV WR VLPSO\

200

Comp-U-Learn

Distributed Communication RMI


LQGLFDWH WKDW DQ LQWHUIDFH XVHV UHPRWH PHWKRGV $OO UHPRWH PHWKRGV WKURZ D 5HPRWH([FHSWLRQ
7KLV SURJUDP LV VDYHG DQG FRPSLOHG LQ WKH VHUYHU VLGH
1H[W VWHS LV WR FUHDWH VRXUFH FRGH IRU WKH LPSOHPHQWDWLRQ RI WKH 5HPRWH ,QWHUIDFH )RU RXU DGG
LQWHUIDFH WKH IROORZLQJ FRGH LV XVHG

import java.rmi.*;
import java.rmi.server.*;
public class Server_impl extends UnicastRemoteObject
implements Server_intf
{
public Server_impl() throws RemoteException
{ }
public double add(double num1, double num2) throws
RemoteException
{
return num1 + num2;
}
}
7KH

6RXUFH

ILOH

6HUYHUBLPSOMDYD

LPSOHPHQWV

WKH

UHPRWH

LQWHUIDFH

,W

H[WHQGV

8QLFDVW5HPRWH2EMHFW ZKLFK LQGLFDWH WKDW WR PDNH WKH REMHFWV DYDLODEOH IURP UHPRWH PDFKLQHV
(YHQ WKH VXEFODVVHV RI WKH 5HPRWH6HUYHU FODVV FDQ DOVR EH H[WHQGHG 7KH LPSOHPHQWDWLRQ RI WKH
LQWHUIDFH VKRXOG KDYH WKH FRQVWUXFWRU

WKDW FUHDWHV DQG LQLWLDOL]HV WKH UHPRWH REMHFW

7KH

GHILQLWLRQ RI WKH PHWKRG DGG DGGV WKH WZR QXPEHUV DQG UHWXUQ LWV UHVXOW ,W DOVR WKURZV WKH
5HPRWH([FHSWLRQ 7KLV SURJUDP LV VDYHG DQG FRPSLOHG LQ WKH VHUYHU

What UnicastRemoteObject do

Implements a remote server object with all references to the remote object are
only valid during the life of the process that creates the remote object.
The remote protocol requires a TCP connection-based transport

Note
RMI supports only unicast servers. The replicated servers are not supported by RMI.
Our Server classes must either directly or indirectly extend the UnicastRemotObject
class and inherit its remote behavior. We can implement any number of remote
interfaces in our server class.
Methods that do not appear in a remote interface are only available locally.

Comp-U-Learn

201

Advanced Java Programming


,Q WKH WKLUG VWHS ZH KDYH WR ZULWH D PDLQ SURJUDP IRU WKH 6HUYHU 0DFKLQH IRU WKH 50, UHJLVWU\
7KH IROORZLQJ FRGH LV WKH PDLQ SURJUDP IRU RXU H[DPSOH

import java.net.*;
import java.rmi.*;
public class Server_main
{
public static void main(String args[])
{
try
{
Server_impl s_impl = new Server_impl();
Naming.rebind(Server_main,s-impl);
}
catch(Exception e)
{
System.out.println(Exception :
+ e);
}
}
}
7KH PDLQ VHUYHU SURJUDP 6HUYHUBPDLQMDYD LV WKH PDLQ VHUYHU SURJUDP ,WV SULPDU\ IXQFWLRQ LV
WR XSGDWH WKH 50, UHJLVWU\ RQ WKDW PDFKLQH 7KLV LV GRQH E\ XVLQJ UHELQG PHWKRG RI WKH
1DPLQJ FODVV ZKLFK LV LQ MDYDUPL 7KH ILUVW DUJXPHQW LV D VWULQJ WKDW QDPHV WKH VHUYHU DV
6HUYHUBPDLQ 7KH VHFRQG DUJXPHQW LV WKH LQVWDQFH RI WKH 6HUYHUBLPSO
7KH UHELQG PHWKRG UHJLVWHUV WKH QHZ REMHFW LQ WKH 50, UHJLVWU\ ,W UHJLVWHU WKH REMHFW ZLWK WKH
QDPH 6HUYHUBPDLQ  7KXV WKH UHJLVWUDWLRQ SURFHVV LV FRPSOHWHG 7KLV SURJUDP LV VDYHG DQG
FRPSLOHG LQ WKH VHUYHU

Client side Program


7KLV LV WKH VWHS IRXU WR FUHDWH D &OLHQW VLGH SURJUDP DV JLYHQ EHORZ

import java.rmi.*;
public class Client_prgm
{
public static void main(String args[])
{
try
{
String addServerURL =rmi:// + args[0] + /Server_main;
Server_intf addintf =
(Server_intf)Naming.lookup(addServerURL);

202

Comp-U-Learn

Distributed Communication RMI


System.out.println( The first number is : + args[1]);
double num1 =Double.valueOf(args[1]).doubleValue();
System.out.println(The second number is : + args[2]);
double num2 =Double.valueOf(args[2]).doubleValue();
System.out.println(The sum is : + addintf.add(num1,num2));
}
catch(Exception e)
{
System.out.println(Exception : + e);
}
}
}
&OLHQWBSUJPMDYD UHTXLUHV WKH FRPPDQG OLQH DUJXPHQWV )LUVW DUJXPHQW LV WKH ,3 DGGUHVV RI WKH
VHUYHU PDFKLQH 7KH VHFRQG DQG WKLUG DUJXPHQW DUH VRPH QXPHULF YDOXHV WKDW DUH WR EH
VXPPHG
7KH VWULQJ YDULDEOH DGG6HUYHU85/ XVHV WKH 50, SURWRFRO 7KH DUJXPHQWV LQFOXGH WKH ,3
DGGUHVV VWULQJ 7KH PHWKRG ORRNXS RI WKH 1DPLQJ FODVV LV LQYRNHG WR PDNH D UHIHUHQFH WR WKH
REMHFW QDPHG 6HUYHUBLQWI LQWHUIDFH RQ WKH VHUYHU RQ WKH VSHFLILHG KRVW

,W DFFHSWV WKH

DUJXPHQW DGG6HUYHU85/ DQG LW UHWXUQV D UHIHUHQFH WR DQ REMHFW RI W\SH 6HUYHUBLQWI $OO UHPRWH
PHWKRG LQYRFDWLRQV FDQ WKHQ EH GLUHFWHG WR WKLV REMHFW 7KH SURJUDP LQYRNHV WKH UHPRWH
PHWKRG DGG DQG SULQWV WKH VXP

Generate Stub and Skeleton


&UHDWH FODVV ILOH IRU 6HUYHUBLQWI 6HUYHUBLPSO6HUYHUBPDLQ 7R FUHDWH VWXE DQG VNHOHWRQ XVH UPLF

C:\jdk1.2\bin> rmic Server_impl


1RZ 6HUYHUBLPSOB6WXEFODVV DQG 6HUYHUBLPSOB6NHOFODVV DUH FUHDWHG
&RS\

&OLHQWBSUJPFODVV

6HUYHUBLQWIFODVV 6HUYHUBLPSOFODVV WR

GLUHFWRU\

RQ WKH

FOLHQW

PDFKLQH
1RZ

WKH

VHUYHU

KDV

6HUYHUBLPSOFODVV

6HUYHUBLQWIFODVV

6HUYHUBLPSOB6NHOFODVV

6HUYHUBLPSOB6WXEFODVV 6HUYHUBPDLQFODVV
7KH VL[WK VWHS LV WR VWDUW WKH 50, UHJLVWU\ RQ WKH VHUYHU PDFKLQH
)RU WKDW RQ WKH FRPPDQG SURPSW ZH KDYH WR JLYH

Comp-U-Learn

203

Advanced Java Programming


&?MGN?ELQ! VWDUW UPLUHJLVWU\

Fig. 8.7
1RZ WKH 50, UHJLVWU\ LV VWDUWHG DQG QHZ HPSW\ ZLQGRZ LV FUHDWHG

PLQLPL]H WKH ZLQGRZ DQG

NHHS LW RSHQ ,Q WKH 6HYHQWK VWHS JLYH WKH IROORZLQJ FRPPDQG WR VWDUW WKH VHUYHU 7KH VHUYHU
FRGH LV VWDUWHG IURP WKH FRPPDQG OLQH DV VKRZQ EHORZ

C:\jdk1.2\bin>

java Server_main

1RZ 6HUYHUBPDLQ FRGH LQVWDQWLDWHV 6HUYHUBLPSO DQG UHJLVWHUV WKDW REMHFW ZLWK WKH QDPH
6HUYHUBPDLQ

7KH HLJKWK VWHS LV WR VWDUW WKH &OLHQW 7KH &OLHQWBSUJP UHTXLUHV WKUHH DUJXPHQWV

<IP address of the server><value for the variable num1><value for


the variable num 2>
C:\jdk1.2\bin> java Client_prgm 205.166.222.151 55 12

+HUH  LV WKH ,3 DGGUHVV RI WKH VHUYHU WKH QXPEHUV 

DQG  DUH WKH YDOXHV WR

EH VXPPHG

Note
See to that CLASSPATH is set to include the current directory. No need to be in the
bin directory if CLASSPATH is set.

204

Comp-U-Learn

Distributed Communication RMI


)LQDOO\ ZH FDQ JHW WKH IROORZLQJ RXWSXW IRU WKH 50, SURJUDP LQ WKH FOLHQW PDFKLQH
7KH ILUVW QXPEHU LV

 

7KH VHFRQG QXPEHU LV  


7KH VXP LV

 

Note
Instead of using two machines we can implement RMI can be implemented in a
stand alone system also.
2SHQ RQH '26 ZLQGRZ DQG GR ZKDWHYHU ZH GR RQ WKH VHUYHU DQG RSHQ DQRWKHU '26 ZLQGRZ
DQG UXQ WKH FOLHQW SURJUDP DV ZH GR RQ WKH FOLHQW VLGH 6R RQ WKH ILUVW '26 ZLQGRZ WKH VHUYHU
SURJUDP ZLOO EH UXQQLQJ DQG ZH FDQ VWDUW WKH UHJLVWHU $IWHU D PLQXWH UXQ WKH FOLHQW SURJUDP RQ
WKH VHFRQG '26 ZLQGRZ

Summary
The concept of RMI is called remote object from the remote server by the local
object. The applications can be distributed to Internet / Intranet. The resources
can be accessed from the remote server. The Three-Tier Architecture is
implemented using RMI. In the next session we will see Applet programming.

Going Over It Again


I. Fill in the Blanks


&20 BBBBBBBBBBBB PDLQWDLQV LQIRUPDWLRQ DERXW DYDLODEOH FODVVHV LQ WKH V\VWHP UHJLVWU\



50, VXSSRUWV RQO\ BBBBBBBBB VHUYHUV 7KH UHSOLFDWHG VHUYHU DUH QRW VXSSRUWHG E\ BBBBBBB



7KH BBBBBBBBBBBBBB FRPSLOHU LV XVHG WR FUHDWH VWXE DQG VNHOHWRQ



7KH 7UDQVSRUW OD\HU LV XVHG WR BBBBBBBBBBBBBB



7KH 6NHOHWRQ FODVV UHVLGHV RQ BBBBBBBBBBBBBBB



7KH BBBBBBBBBBBBB FODVV UHVLGHV RQ ERWK FOLHQW DQG VHUYHU



:KHQ WKH VHUYHU SURJUDP LV FRPSLOHG ERWK BBBBBBBBB DQG BBBBBBBBBBBB LV FUHDWHG RQ
VHUYHU



7KH 6WXE FODVV UHVLGHV RQ BBBBBBBBBB

Comp-U-Learn

205

Advanced Java Programming

II. State True or False



50, UHJLVWU\ LV VWDUWHG XVLQJ VWDUW FRPPDQG



6WXE DQG VNHOHWRQ FRPPXQLFDWH YLD 5HPRWH UHIHUHQFH OD\HU



6WXE FDQ LQYRNH PXOWLSOH 6NHOHWRQ



50, LV QRW D -DYDWR-DYD DSSOLFDWLRQ



-DYD  GRHVQW UHTXLUH VNHOHWRQ WR UHVLGH RQ WKH VHUYHU

III. One line Answers



([SODLQ DERXW WKUHHWLHU DUFKLWHFWXUH



:KDW LV WKH GLIIHUHQFH EHWZHHQ GLVWULEXWLRQ RI DSSOLFDWLRQ LQ WKH ,QWUDQHW DQG ,QWHUQHW"



:KDW LV PHDQW E\ '&("



([SODLQ WKH WKUHH OD\HUV RI 50,



:KDW LV WKH XVH RI UHELQG PHWKRG"

206

Comp-U-Learn

Session 9

RMI Packages

On Completion of this Session


you will be able to understand...

) RMI Packages
) RMI Security
) Applet in RMI
) RMI Alternatives

In This Session...

RMI Packages

RMI Registry Packages

RMI Server Package

RMI Activation Package

The Object Hierarchy

Garbage Collection

RMI Security

Client Server Applets using RMI

Server side Programming

Client side Programming

RMI Alternatives

Advantages of RMI

RMI Packages

RMI Packages
1RZ WKDW ZH KDYH QRZ EHFRPH IDPLOLDU ZLWK UHPRWH REMHFW UHPRWH FOLHQW DQG KDYH DFFHVVHG WKH
UHPRWH REMHFW :H FDQ JR LQWR GHWDLOV DERXW 50, SDFNDJHV 7KH MDYDUPL LV LPSRUWHG LQ DOO WKH
SURJUDPV LQ RUGHU WR FRPPXQLFDWH ZLWK WKH VHUYHU 7KH 50, SDFNDJH GHFODUHV WKH UHPRWH
LQWHUIDFH WKH PDUVKDOOHG2EMHFW 1DPLQJ DQG 50,6HFXULW\0DQDJHU FODVVHV
7KH UHPRWH LQWHUIDFH LV XVHG IRU LGHQWLILFDWLRQ SXUSRVHV ,W VKRXOG EH LV LPSOHPHQWHG E\ DOO
UHPRWH REMHFWV
7KH UHPRWH LQWHUIDFH VKRXOG UHVLGH RQ ERWK FOLHQW DQG VHUYHU
7KH 0DUVKDOO2EMHFW FODVV LV XVHG WR PDLQWDLQ D VHULDOL]HG E\WH VWUHDP RI DQ REMHFW ,W ZDV DGGHG
LQ -'. 7KH JHW PHWKRG 0DUVKDOO2EMHFW WR UHWULHYH D GHVHULDOL]HG YHUVLRQ RI WKH REMHFW
8VLQJ 50, 85/V 1DPLQJ FODVV SURYLGH VWDWLF PHWKRGV IRU DFFHVV UHPRWH REMHFW
7KH PHWKRGV RI 1DPLQJ FODVV 

bind()
unbind()
rebind()
lookup()
list()

7KH ELQG DQG UHELQG PHWKRGV ELQG D UHPRWH REMHFW QDPH WR D VSHFLILF 50, 85/
7KH XQELQG PHWKRG UHPRYHV WKH ELQGLQJ EHWZHHQ DQ REMHFW QDPH DQG DQ 50, 85/
7KH ORRNXS PHWKRG UHWXUQV WKH UHPRWH REMHFW VSHFLILHG E\ DQ 50, 85/
7KH OLVW PHWKRG OLVW WKH 85/V WKDW DUH FXUUHQWO\ NQRZQ WR WKH 50, UHJLVWU\

RMI URL syntax


rmi://host:port//remoteObjectName
,Q WKH DERYH V\QWD[

WKH

KRVW DQG SRUW DUH RSWLRQDO LI

KRVW LV RPLWWHG WKH ORFDO KRVW LV

DVVXPHG (YHQ WKH KRVW LV JLYHQ WKH SRUW LV QRW FRPSXOVRU\ 7KH GHIDXOW SRUW LV  7KH
UHPRWH2EMHFW1DPH FDQ EH D VWULQJ
7KH 50,6HFXULW\0DQDJHU FODVV XVHV WKH GHIDXOW VHFXULW\ SROLF\ IRU UHPRWH REMHFW VWXEV
,W ZRUNV RQO\ LQ DSSOLFDWLRQV )RU $SSOHW XVH $SSOHW6HFXULW\0DQDJHU FODVV

Comp-U-Learn

209

Advanced Java Programming

7KH VHW6HFXULW\0DQDJHU PHWKRG RI WKH 6\VWHP FODVV LV XVHG WR VHW DQ 50,6HFXULW\0DQDJHU


REMHFW DV WKH FXUUHQW VHFXULW\ PDQDJHU WR EH XVHG IRU 50, VWXEV

RMI Registry Package


7KH LQWHUIDFHV 5HJLVWU\ DQG 5HJLVWU\+DQGOHU DQG WKH FODVV /RFDWH5HJLVWU\ DUH SURYLGHG E\ WKH
MDYDUPLUHJLVWU\ SDFNDJH 7KHVH LQWHUIDFHV DQG FODVVHV DUH XVHG WR DFFHVV DQG UHJLVWHU WKH UHPRWH
REMHFWV

7KH UHJLVWU\ SURFHVV LV VWDUWHG ZKHQ UPLUHJLVWU\ SURJUDP LV H[HFXWHG XVLQJ WKH

FRPPDQG VWDUW UPLUHJLVWU\ DW WKH FRPPDQG SURPSW

7KH 5HJLVWU\ LQWHUIDFH GHILQHV WKH PHWKRGV ELQG  UHELQG  XQELQG  OLVW DQG ORRNXS  7KHVH
PHWKRGV DUH XVHG E\ WKH 1DPLQJ FODVV WR DVVRFLDWH REMHFW QDPHV DQG 50, 85/V

7KH 5HJLVWU\+DQGOHU LQWHUIDFH SURYLGHV VRPH PHWKRGV IRU DFFHVVLQJ WKH

UHPRWH REMHFWV WKDW

LPSOHPHQW WKH 5HJLVWU\ LQWHUIDFH

7KH /RFDWH5HJLVWU\ FODVV SURYLGHV WKH VWDWLF JHW5HJLVWU\ PHWKRG IRU UHWULHYLQJ 5HJLVWU\ REMHFWV
RQ WKH ORFDO KRVW RU D UHPRWH KRVW

RMI Server Package


7KH MDYDUPLVHUYHU SDFNDJH LPSOHPHQWV LQWHUIDFHV DQG FODVVHV IRU FRPPXQLFDWLRQ EHWZHHQ
FOLHQW DQG VHUYHU
7KH

5HPRWH2EMHFW

FODVV

LPSOHPHQWV

WKH

5HPRWH

LQWHUIDFH

DQG

SURYLGHV

UHPRWH

LPSOHPHQWDWLRQ RI WKH 2EMHFW FODVV %RWK FOLHQW DQG VHUYHU H[WHQG 5HPRW2EMHFW
7KH 5HPRWH6HUYHU FODVV H[WHQGV 5HPRWH2EMHFW SURYLGHV VWDWLF VHW/RJ DQG JHW/RJ PHWKRGV
IRU UHWULHYLQJ RXWSXW VWUHDP
7KH 8QLFDVW5HPRWH2EMHFW FODVV H[WHQGV 5HPRWH6HUYHU DQG SURYLGHV WKH GHIDXOW UHPRWH REMHFW
LPSOHPHQWDWLRQ

RMI Activation Package


7KH MDYDUPLDFWLYDWLRQ SDFNDJH LV D QHZ UPL SDFNDJH DGGHG WR -'.  ,W LV XVHG IRU SHUVLVWHQW
REMHFW UHIHUHQFH DQG WR DFWLYDWH WKH UHPRWH REMHFW 7KH FODVV $FWLYDWDEOH KDV WZR FRQVWUXFWRUV

210

Comp-U-Learn

RMI Packages

2QH FRQVWUXFWRU LV XVHG WR FUHDWH DQG UHJLVWHU REMHFWV 7KH RWKHU FRQVWUXFWRU LV XVHG WR DFWLYDWH
DQ REMHFW EDVHG RQ $FWLYDWLRQ,G REMHFW 

The Object Hierarchy


0RVW REMHFWV WKDW DUH H[SRUWHG DV UHPRWH REMHFWV GLUHFWO\ RU LQGLUHFWO\ DIIHFW WKH VXEFODVV RI WKH
5HPRWH2EMHFW FODVV DQG LPSOHPHQW DW OHDVW RQH 5HPRWH LQWHUIDFH

Public interface Hello_intf extends Remote

,Q WKH DERYH OLQH WKH LQWHUIDFH +HOORBLQWI H[WHQGV WKH 5HPRWH LQWHUIDFH  7KLV 5HPRWH LQWHUIDFH
LV DYDLODEOH E\ LPSRUWLQJ WKH SDFNDJH MDYDUPL5HPRWH 0RVW REMHFWV WKDW DUH UHPRWHO\ DFFHVVLEOH
LPSOHPHQW WKH 5HPRWH2EMHFW FODVV LQGLUHFWO\ E\ H[WHQGLQJ WKH MDYDUPL8QLFDVW5HPRWH2EMHFW
FODVV WR DQ DSSOLFDWLRQ WKDW LPSOHPHQWV D 5HPRWH LQWHUIDFH WR VHUYH UHPRWH PHWKRGV WR FOLHQW
DSSOLFDWLRQV
7KH EDVH REMHFW RI DOO UHPRWH REMHFWV LV HIIHFWLYHO\ MDYDODQJ2EMHFW 7KH 5HPRWH2EMHFW FODVV LV
LPSOHPHQWHG

E\

LQGLUHFWO\

H[WHQGLQJ

WKH

MDYDUPLVHUYHU8QLFDVW5HPRWH2EMHFW

FODVV

,W RYHUULGHV FHUWDLQ PHWKRGV LQ WKH MDYDODQJ2EMHFW FODVV LQ RUGHU WR GLVWULEXWH WKH REMHFWV
HIIHFWLYHO\

Java.lang.Object

Java.rmi.Remote

Java.rmi.server.RemoteObject

Java.remi.server.RemoteServer

MyRemoteObject

Java.rmi.server.Unicast.RemoteObject

MyRemoteObject

The Remote Object hierarchy


Fig. 9.1

Comp-U-Learn

211

Advanced Java Programming


7KH DERYH ILJXUH VKRZV WKH KLHUDUFK\ RI WKH 5HPRWH REMHFWV

Java.lang.Object is the base class


The java.rmi.server.RemoteObject interface extends Object and implements
java.rmi.Remote
The java.rmi.server.RemoteServer class extends RemoteObject
The java.rmi.server.UnicastRemoteObject clss extends RemoteServer
$Q\ XVHUGHILQHG 5HPRWH REMHFW XVXDOO\ H[WHQGV 8QLFDVW5HPRWH2EMHFW DQG LPSOHPHQWV D XVHU
GHILQHG LQWHUIDFH WKDW H[WHQGV MDYDUPL5HPRWH

Garbage Collection
2QH RI WKH JUHDW WKLQJV DERXW GHYHORSLQJ DSSOLFDWLRQV LQ -DYD LV WKH IDFW WKDW WKH SURJUDPPHU LV
IUHHG IURP WKH GUXGJHU\ RI PHPRU\ PDQDJHPHQW
VSDFHV DIWHU PDNLQJ XVH RI LW

*DUEDJH &ROOHFWLRQ FOHDUV

WKH PHPRU\

7KH JDUEDJH FROOHFWLRQ LV DQ LQWHJUDO FRPSRQHQW WR WKH -DYD

HQYLURQPHQW *DUEDJH FROOHFWRU UXQQLQJ RQ D ORFDO PDFKLQH KDV QR SUREOHP EXW LQ FDVH RI
GLVWULEXWHG DSSOLFDWLRQ LW PD\ EH OLQNHG WR PDQ\ -DYD PDFKLQHV 3UREOHPV DULVH RXW RI
FRPSOH[LW\ RI FKHFNLQJ IRU UHIHUHQFHV WR REMHFWV
/HW XV ILQG D VROXWLRQ IRU WKLV 7KH GLVWULEXWHG JDUEDJH FROOHFWLRQ DOJRULWKP XVHG E\ WKH 50,
V\VWHP LV D UHIHUHQFHFRXQWLQJ DOJRULWKP :KHQ D FOLHQW ILUVW UHFHLYHV D UHIHUHQFH WR D UHPRWH
REMHFW D UHIHUHQFHG PHVVDJH LV VHQW WR WKH VHUYHU WKDW LV H[SRUWLQJ WKH REMHFW (YHU\
VXEVHTXHQW UHIHUHQFH ZLWKLQ WKH FOLHQWV ORFDO PDFKLQH FDXVHV D UHIHUHQFH FRXQWHU WR EH
LQFUHPHQWHG $V D ORFDO UHIHUHQFH LV ILQDOL]HG WKH UHIHUHQFH FRXQW LV GHFUHPHQWHG DQG RQFH WKH
FRXQW JRHV WR ]HUR DQ XQUHIHUHQFHG PHVVDJH LV VHQW WR WKH VHUYHU 2QFH WKH VHUYHU KDV QR
PRUH OLYH UHIHUHQFHV WR DQ REMHFW DQG WKHUH DUH QR ORFDO UHIHUHQFHV LW LV IUHH WR EH ILQDOL]HG DQG
JDUEDJH FROOHFWHG

,I D UHPRWH REMHFW LPSOHPHQWV WKH MDYDUPLVHUYHU8QUHIHUHQFHG LQWHUIDFH LW PXVW LPSOHPHQW D


ERG\ IRU WKH XQUHIHUHQFHG PHWKRG 7KLV PHWKRG ZLOO EH FDOOHG RQFH WKH REMHFW LV QR ORQJHU
UHIHUHQFHG 7KLV DOORZV XV WR ZULWH FRGH WKDW LV FDOOHG PRUH WKDQ RQFH DV WKH VHW RI UHIHUHQFHV DUH
UHPRYHG 7KH REMHFW ZRQW EH ILQDOL]HG DQG FROOHFWHG XQWLO DOO UHIHUHQFHV DUH UHPRYHG LQFOXGLQJ
ERWK ORFDO DQG UHPRWH UHIHUHQFHV

8QGHU FHUWDLQ FLUFXPVWDQFHV VXFK DV QHWZRUN IDLOXUH DQ REMHFW PD\ EH FROOHFWHG SUHPDWXUHO\
EHFDXVH WKH WUDQVSRUW OD\HU PD\ WKLQN WKDW D FRQQHFWLRQ WR D PDFKLQH FRQWDLQLQJ D UHIHUHQFH WR
WKH REMHFW LV QR ORQJHU OLYH 7KH KRVW WKHUHIRUH EHOLHYHV WKDW WKH FOLHQW QR ORQJHU PDLQWDLQV D
UHIHUHQFH WR WKH REMHFW ,Q WKLV FDVH WKH REMHFW PD\ EH FROOHFWHG HYHQ WKRXJK D UHPRWH UHIHUHQFH
VWLOO H[LVWV 7KLV ZLOO UHVXOW LQ WKURZLQJ D 5HPRWH([FHSWLRQ

212

Comp-U-Learn

RMI Packages

RMI Security
7KH

MDYD VHFXULW\ PRGHO JHQHUDOO\ WUXVWV DSSOLFDWLRQV WKDW FRPH IURP WKH ORFDO ILOH V\VWHP 7KH

LQWHUSUHWHU GRHV QRW JHQHUDOO\ YHULI\ FODVVHV WKDW ZHUH ORDGHG IURP WKH ORFDO ILOH V\VWHP 7KXV WR
VROYH WKH SUREOHP E\ LQVWDOOLQJ D VHFXULW\ PDQDJHU 7KH 50, UXQ WLPH UHTXLUHV WKDW D VHFXULW\
PDQDJHU EH H[SOLFLWO\ VHW ,Q WKH FDVH RI DSSOHW WKH $SSOHW6HFXULW\0DQDJHU LV DXWRPDWLFDOO\ VHW
EXW LQ FDVH RI VWDQG DORQH DSSOLFDWLRQ WKH GHIDXOW VHFXULW\ PDQDJHU ZLOO SUHYHQW WKH V\VWHP IURP
ORDGLQJ FODVVHV IURP DQ\ZKHUH EXW WKH ORFDO ILOH V\VWHP 7KH 50,6HFXULW\0DQDJHU LV XVHG WR VHW
WKH VHFXULW\ SROLFLHV XVHG WR JRYHUQ WKH EHKDYLRU RI WKH VWXE DQG VNHOHWRQ FODVVHV

7KH 6HFXULW\ 0DQDJHU LV VHW XVLQJ 6\VWHPVHW6HFXULW\0DQDJHU QHZ 0,6HFXULW\0DQDJHU DQG


PXVW

EH

VHW

EHIRUH

DQ\

UHPRWH

VWXE

FODVVHV

DUH

ORDGHG

RYHU

WKH

QHWZRUN

7KH

50,6HFXULW\0DQDJHU HVVHQWLDOO\ SURKLELWV WKH VWXE FODVVHV IURP GRLQJ DQ\WKLQJ EXW ORDGLQJ
QHFHVVDU\ FODVV ILOHV RYHU WKH QHWZRUN

Client/Server Applet using RMI


:H DUH QRZ IDPLOLDU ZLWK DSSOLFDWLRQ SURJUDPPLQJ XVLQJ 50, 1RZ ZH ZLOO VWDUW 50, LQ
$SSOHWV

/HW XV UHYLHZ WKH SURJUHVVLYH VWHSV RI RXU H[DPSOH

Create an interface program


Create an implementation program gives the definition of the methods
Create a server program
Create a client program to display the message on the applet. The applet is run on
the client.

Server side programming


2Q WKH VHUYHU ZULWH DQ LQWHUIDFH SURJUDP +HOORBLQWMDYD

H[WHQGV 5HPRWH ,W KDV WKH PHWKRG

JHW'HVF ZKLFK UHWXUQV VWULQJ W\SH GDWD

import java.rmi.*;
public interface Hello_int extends Remote
{
public String getDesc() throws RemoteException;
}

Comp-U-Learn

213

Advanced Java Programming


,I WKH UHPRWH PHWKRG KDV DQ\ SUREOHP LQ H[HFXWLQJ LW WKURZV D 5HPRWH([FHSWLRQ
&RPSLOH WKH +HOORBLQWMDYD XVLQJ MDYDF FRPSLOHU

C:\>javac Hello_int.java
7KH QH[W VWHS LV WR ZULWH WKH LPSOHPHQWDWLRQ IRU WKH LQWHUIDFH SURJUDP

import java.rmi.*;
import java.rmi.server.*;
public class Hello_impl extends UnicastRemoteObject implements
Hello_int
{
public Hello_impl() throws RemoteException
{
super();
}
public String getDesc() throws RemoteException
{
return Saying Hi to everyone from Remote
System.............\n;
}
}
7KH SURJUDP +HOORBLPSO H[WHQGV 8QLFDVW5HPRWH2EMHFW DQG LPSOHPHQWV WKH LQWHUIDFH
7KH FRQVWUXFWRU WKURZV WKH UHPRWH H[FHSWLRQ 7KH GHILQLWLRQ RI WKH PHWKRG UHWXUQV WKH VWULQJ
&RPSLOH WKH SURJUDP XVLQJ MDYDF FRPSLOHU LQ RUGHU WR FUHDWH D FODVV ILOH

C:\>javac Hello-impl.java
1RZ LW LV WLPH WR VWDUW ZULWLQJ WKH VHUYHU SURJUDP

import java.net.*;
import java.rmi.*;
import java.rmi.server.*;
public class Hello_test
{
public static void main(String args[])
{
try
{
Hello_int obj = new Hello_impl();
Naming.rebind(Hello_Server,obj);
System.out.println(Hello server object Bound to the
registry);
}
catch(Exception e)
{
System.out.println(e);
}
}
}

214

Comp-U-Learn

RMI Packages
7KH UHELQG PHWKRG RI WKH 1DPLQJ FODVV XSGDWHV WKH 50, UHJLVWU\ RQ WKH VHUYHU PDFKLQH ,W
UHJLVWHUV WKH QHZ REMHFW LQ WKH 50, UHJLVWU\ LQ WKH QDPH +HOORB6HUYHU

System.out.println(Hello server object Bound to the registry);


7KLV OLQH LV WR SULQW RQ WKH VHUYHU VLGH LQ RUGHU WR ILQG RXW ZKHWKHU WKH VHUYHU VLGH KDV QR
SUREOHP DQG LW H[HFXWHV SURSHUO\ &RPSLOH WKH SURJUDP XVLQJ MDYDF FRPSLOHU
7KH IRXUWK VWHS LV WR FUHDWH VWXE DQG VNHOHWRQ RQ WKH VHUYHU

C:\>rmic Hello_impl
7KH ILIWK VWHS LV WR FRS\ WKH EHORZ PHQWLRQHG ILOHV WR WKH FOLHQW
+HOORBLQWFODVV
+HOORBLPSOFODVV
+HOORBLPSOB6WXEFODVV
+HOORBLPSOB6NHOHWRQFODVV VKRXOG UHVLGH RQ VHUYHU

Client side programing


:ULWH WKH FOLHQW SURJUDP ZKLFK ZLOO FDOO WKH UHPRWH REMHFW

import java.rmi.*;
import java.rmi.server.*;
import java.net.*;
import java.applet.*;
import java.awt.*;
public class hello_client_appl extends Applet
{
public String str;
public void init()
{
try
{
Hello_int obj =
(Hello_int)Naming.lookup(rmi://205.166.222.191/Hello_Server);
str = obj.getDesc();
}
catch(Exception e)
{

Comp-U-Learn

215

Advanced Java Programming

System.out.println(e);
}
}
public void paint(Graphics g)
{
g.drawString(str,20,20);
}
}
7KLV

SURJUDP

KHOORBFOLHQWBDSSOHWMDYD

LV

DQ

DSSOHW

SURJUDP

6R

LPSRUW

MDYDDZW

DQG

MDYDDSSOHW 
7KH REMHFW LV FUHDWHG IRU DQ LQWHUIDFH WR DFFHVV WKH PHWKRG UHPRWH JHW'HVF  7KH PHWKRG
UHWXUQV WKH VWULQJ DQG LW LV VWRUHG LQ WKH YDULDEOH VWU ZKLFK LV GLVSOD\HG RQ WKH DSSOHW XVLQJ
GUDZ6WULQJ PHWKRG 
1RZ WKH VHUYHU VWDUW WKH 50, UHJLVWU\ XVLQJ WKH FRPPDQG

C:\>start rmiregistry
5PLUHJLVWU\ VWDUWV ORDGLQJ
0LQLPL]H WKH ZLQGRZ DQG UXQ WKH +HOORBWHVW SURJUDP

C:\>java Hello_test

Fig. 9.2
216

Comp-U-Learn

RMI Packages
1RZ FRPH WR WKH FOLHQW DQG UXQ WKH DSSOHW SURJUDP

C:\>start rmiregistry

Fig. 9.3

RMI Alternatives
Socket programming
7KH

-DYD

ODQJXDJH

VXSSRUWV

VRFNHWV

ZKLFK

DUH

IOH[LEOH

DQG

VXIILFLHQW

IRU

JHQHUDO

FRPPXQLFDWLRQ 7KH VRFNHWV UHTXLUH WKH FOLHQW DQG VHUYHU WR HQJDJH LQ DSSOLFDWLRQVOHYHO
SURWRFROV WR HQFRGH DQG GHFRGH PHVVDJHV IRU H[FKDQJH DQG WKH GHVLJQ RI VXFK SURWRFROV LV
FXPEHUVRPH DQG FDQ EH HUURUSURQH

Common Gateway Interface


7KHUH LV QR SURFHVVLQJ
WKH VHUYHU UHVRXUFHV

LQ WKH FOLHQW VLGH ZKHQ &*, SURJUDP LV XVHG EXW WKH FOLHQW FDQ DFFHVV

7KH +70/ IRUP FDQ EH ILOOHG XS DQG VHQW WR WKH VHUYHU EXW ZH FDQQRW

FROOHFW WKH GDWD IURP WKH ORFDO UHVRXUFHV RQ WKH FOLHQW VLGH

Advantages of RMI
50, LV IRFXVHG RQ -DYD ZLWK FRQQHFWLYLW\ WR H[LVWLQJ V\VWHPV XVLQJ QDWLYH PHWKRGV 7KXV 50,
LV D QDWXUDO GLUHFW DQG LV IXOO\SRZHUHG WR SURYLGH XV ZLWK D GLVWULEXWHG FRPSXWLQJ WHFKQRORJ\
2EMHFW 2ULHQWHG
'LVWULEXWHG *DUEDJH &ROOHFWLRQ
3DUDOOHO &RPSXWLQJ
6DIH DQG 6HFXUH

Comp-U-Learn

217

Advanced Java Programming

Summary
RMI packages are imported in order to communicate with the server. Few RMI
packages are RMI Registry Package, RMI Server Package and RMI Activation
Package. The distributed garbage collection algorithm used by the RMI system is a
reference-counting algorithm. The RMISecurityManager is used to set the security
policies. We saw how to implement the RMI using Applet.

Going Over It Again


I. Fill in the blanks




7KH BBBBBBBBBBBBB FODVV LV XVHG WR PDLQWDLQ D VHULDOL]HG E\WH VWUHDP RI DQ REMHFW

7KH LQWHUIDFHV 5HJLVWU\ DQG 5HJLVWU\+DQGOHU DQG WKH FODVV /RFDWH5HJLVWU\ DUH SURYLGHG E\
WKH BBBBBBBBBBBBBBB SDFNDJH



7KH BBBBBBBBBBBBBBB LV XVHG WR

VHW WKH VHFXULW\ SROLFLHV XVHG WR JRYHUQ WKH EHKDYLRU RI

WKH VWXE DQG VNHOHWRQ FODVVHV



7KH GLVWULEXWHG JDUEDJH FROOHFWLRQ DOJRULWKP XVHG E\ WKH 50, V\VWHP LV D BBBBBBBBB
DOJRULWKP

II. State True or False




7KH GHIDXOW SRUW LV 



,Q FDVH RI $SSOHW WKH $SSOHW6HFXULW\0DQDJHU LV DXWRPDWLFDOO\ VHW



7KH

MDYDUPLVHUYHU5HPRWH2EMHFW

LQWHUIDFH

H[WHQGV

2EMHFW

DQG

MDYDUPL5HPRWH


,Q 50, 85/ WKH KRVW QDPH LV QRW RSWLRQDO EXW WKH SRUW QXPEHU LV RSWLRQDO

III. One line Answers




:KDW LV WKH UROH RI 50, LQ VHFXULQJ WKH UHVRXUFHV



:KDW DUH WKH DGYDQWDJHV RI 50,



+RZ LV 50, PRUH HIILFLHQW WKDQ VRFNHW SURJUDPPLQJ" -XVWLI\



([SODLQ *DUEDJH &ROOHFWLRQ

218

Comp-U-Learn

LPSOHPHQWV

Session 10

CORBA An Insight

On Completion of this Session


you will be able to understand...

) Introduction to Distributed Computing


) Insight into CORBA
) Basic concepts and features of CORBA
) CORBA Architecture
) Internet Inter ORB Protocol
) VisiBroker for Java (The ORB for Java)
) Simple CORBA Program

In This Session...

Distributed Application Design

Introduction to CORBA

Java and CORBA

Features of CORBA 2.0

Object Request Broker (ORB)

CORBA 2.0 ORB Architecture

CORBA Services

Internet Inter ORB Protocol

CORBA and the Internet

VisiBroker for Java

Dynamic Invocation Interface

Client Server programming in CORBA

CORBA An Insight

7KHUH

ZDV

WLPH

IRU

DXWRPDWLRQ

7LPH

IRU

DXWRPRELOHV

DXWRPDWLF FRRNHUV DQG DXWRPDWLF FDOFXODWRUV :KHQ SHRSOH

DXWRPDWLF

ZHUH

MXVW

ZDVKLQJ

KDSS\

PDFKLQHV

HQRXJK

ZLWK

FRPSXWHU WKDW DXWRPDWLFDOO\ SHUIRUPHG FHUWDLQ WDVNV 7KH WDVNV UHSHDWHGO\ ERULQJO\ KDQGOHG E\
KXPDQ EHLQJV &RPSXWHUV JRW FHOHEUDWHG IRU DXWRPDWLFDOO\ GRLQJ WKLQJV

1R ORQJHU

7RGD\ WKDQNV WR WKH UDSLG GHYHORSPHQW RI WHFKQRORJ\ DQG PDQV QHYHU HQGLQJ KXQJHU IRU PRUH
DQG EHWWHU WKLQJV DXWRPDWHG V\VWHPV DUH EHLQJ ORRNHG DW IRU SHUIRUPLQJ VRPH WKLQJ PXFK PRUH
WKDQ PXQGDQH WDVNV )RU LQVWDQFH D FDU VKRXOGQW MXVW GULYH XV WR D FHUWDLQ ORFDWLRQ ,W VKRXOG
SOD\ WKH UDGLR KDYH DQ DLUFRQGLWLRQHU VKRZ XV WKH PDS SURWHFW XV IURP DFFLGHQWV DQG ZDUQ XV
RI WKH IXHO VWDWXV 1RW MXVW FDUV $Q\ RWKHU HTXLSPHQW WKDW ZDV D FHOHEULW\ RQFH

&RPSXWHUV

DUHQW

FRPSXWHUV

ZHUH

QHWZRUNLQJ

DQ\

H[FHSWLRQ

LQYHQWHG

&OLHQW6HUYHU

WR

7KHQ
DQG

LW
WKH

WKH

FDVH

WXUQHG
UROH

1XPEHU

RQ

NHSW

WR

FUXQFKLQJ

2IILFH

JURZLQJ

ZDV

WKH

$XWRPDWLRQ
7RGD\

ZLWK

PDMRU

7KHQ

JRDO

GDWD

,QWHUQHW

ZKHQ

VWRUDJH

:HE

DQG

(&RPPHUFH EHLQJ WKH SHUPDQHQW IL[WXUHV LQ WKH DUHQD V\VWHPV DQG ODQJXDJHV DUH H[SHFWHG WR
SHUIRUP VRPH WKLQJ PRUH WKDQ WKDW 7KH 1HZ :RUOG GHPDQGV QHZ UXOHV 1HZ UXOHV EULQJ QHZ
SOD\HUV $QG QHZ EX]]ZRUGV

7KH EX]]ZRUG LV 'LVWULEXWHG &RPSXWLQJ ZLWK WKH QHZ SOD\HUV EHLQJ &25%$ DQG &20 7KH
ELUWK RI -DYD KDV PDGH FRQVLGHUDEOH LPSDFW RYHU WKH QHZ RXWORRN RI &RPSXWLQJ 7KH DYHQXH
KDV WUDQVIRUPHG

7KLV VHVVLRQ GHDOV HVVHQWLDOO\ ZLWK WKDW WUDQVIRUPDWLRQ

:H QHHG WR DSSURDFK WKLV VHVVLRQ ZLWK XWPRVW FDUH DV WKLV PLJKW SRVH D KXJH FKDOOHQJH WR WKH
XVHU (YHQ WR WKH H[WHQW RI DSSHDULQJ WR EH WKUHDWHQLQJ %XW DV VWDWHG DERYH WKH QHZ DYHQXH
FDOOV IRU QHZ EX]]ZRUGV 7KH ELJJHU WKH WHFKQRORJ\ JURZV WKH ILWWHU LWV XVHU VKRXOG EHFRPH LQ
RUGHU WR H[WUDFW WKH EHQHILWV +HUH ZH JR

Distributed Application Design


$

GLVWULEXWHG

DSSOLFDWLRQ

LV

DQ

DSSOLFDWLRQ

ZKRVH

SURFHVVLQJ

LV

GLVWULEXWHG

DFURVV

PXOWLSOH

QHWZRUNHG FRPSXWHUV 6RPH DVSHFWV RI LW KDYH DOUHDG\ EHHQ FRYHUHG LQ WKH 50, VHVVLRQ 7KH
PDMRU DGYDQWDJH RI

D GLVWULEXWHG DSSOLFDWLRQ LV WKDW D PRGXOH ZKLFK LV DFFHVVHG FHQWUDOO\ FDQ EH

XSJUDGHG RU PRGLILHG HDVLO\ ,Q DGGLWLRQ WKLV HQIRUFHV D PDMRU DPRXQW RI XQLIRUPLW\ RYHU WKH
HQWHUSULVH EXVLQHVV V\VWHP

'LVWULEXWHG DSSOLFDWLRQV FRQFXUUHQWO\ VHUYH PXOWLSOH XVHUV DQG GHSHQGLQJ RQ WKHLU GHVLJQ PDNH
PRUH RSWLPDO XVH RI SURFHVVLQJ UHVRXUFHV 'LVWULEXWHG DSSOLFDWLRQV DUH W\SLFDOO\ LPSOHPHQWHG DV
FOLHQW

VHUYHU

DSSOLFDWLRQV

WKDW

DUH

RUJDQL]HG

DFFRUGLQJ

Comp-U-Learn

WR

WKH

XVHU

LQWHUIDFH

LQIRUPDWLRQ

221

Advanced Java Programming

SURFHVVLQJ DQG LQIRUPDWLRQ VWRUDJH OD\HUV $Q DSSOLFDWLRQ FOLHQW LPSOHPHQWV WKH XVHU LQWHUIDFH
OD\HU (PDLO SURJUDPV DQG :HE EURZVHUV DUH H[DPSOHV RI WKH XVHU LQWHUIDFH FRPSRQHQW RI
GLVWULEXWHG DSSOLFDWLRQV $Q DSSOLFDWLRQ FOLHQW RU D VHUYHU LPSOHPHQWV WKH LQIRUPDWLRQSURFHVVLQJ
OD\HU

)RU H[DPSOH D GDWDEDVH DSSOLFDWLRQ PD\ XWLOL]H D GDWDEDVH FOLHQW WR FRQYHUW XVHU VHOHFWLRQV LQWR
64/ VWDWHPHQWV $ GDWDEDVH DFFHVV VHUYHU PD\ EH XVHG WR VXSSRUW FRPPXQLFDWLRQ EHWZHHQ WKH
FOLHQW DQG D GDWDEDVH VHUYHU DQG WKH GDWDEDVH VHUYHU PD\ XVH UHSRUWLQJ VRIWZDUH WR SURFHVV WKH
LQIRUPDWLRQ UHTXHVWHG E\ D FOLHQW 'DWDEDVH VHUYHUV DQG :HE VHUYHUV ZKRVH SXUSRVH LV WR VWRUH
DQG UHWULHYH LQIRUPDWLRQ

,Q

DQ

,QWHUQHW

FOLHQW

SURJUDP

LV

H[HFXWHG

RQ

PXOWLSOH

KRVW

FRPSXWHUV

7KH

FOLHQW

XVHV

7&3,3 WR FRQQHFW WR D VHUYHU WKDW OLVWHQV WR D SRUW 7KH FOLHQW PDNHV RQH RU PRUH UHTXHVWV RI
WKH

VHUYHU

7KH

VHUYHU

SURFHVVHV

WKH

FOLHQW

UHTXHVWV

SRVVLEO\

XVLQJ

JDWHZD\

SURJUDPV

DQG

IRUZDUGV WKH UHVSRQVH WR WKH FOLHQW

Introduction to CORBA
6LQFH WKH GHPDQG IRU GLVWULEXWHG V\VWHPV JR WKURXJK WKH URRI &25%$ KDV EHFRPH D PDMRU
ZHDSRQ IRU WKH JURZLQJ FRPPXQLW\ RI GHYHORSHUV GHVLJQHUV DQG V\VWHP DUFKLWHFWV

)RU PDQ\

\HDUV &25%$ ZDV WKH RQO\ VHULRXV ODQJXDJH QHXWUDO REMHFW PRGHO DYDLODEOH DQG LWV GH IDFWR
PDMRULW\

PDGH

LW

WKH

NLQJ

RI

WKH

GLVWULEXWHG

REMHFW

ZRUOG

7KRXJK

&20

DQG

-DYD

50,

HPHUJLQJ DV VHULRXV FRPSHWLWRUV KDV VHHQ &25%$ ORVLQJ VRPH RI LWV JULS LQ WKH LQGXVWU\ VWLOO LW
HQMR\V VWDXQFK VXSSRUW LQ WKH DFDGHPLF ILQDQFLDO DQG WHFKQLFDO LQGXVWULHV

7KH

&RPPRQ

2EMHFW

5HTXHVW

%URNHU

$UFKLWHFWXUH

&25%$

LV

RQH

RI

WKH

DVSHFWV

RI

'LVWULEXWHG $SSOLFDWLRQ 'HVLJQ ZKLFK LV PRVW IDPLOLDU PLGGOHZDUH LQ WKH ,7 LQGXVWU\ WRGD\ ,W
ZDV GHVLJQHG WR LQYRNH WKH UHPRWH FRPSRQHQWV WR GLVFRYHU HDFK RWKHU DQG LQWHPSHUDWH RQ DQ
REMHFW EXV FDOOHG 25% 2EMHFW 5HTXHVW %URNHU EXV ,W DOVR SURYLGHV VRPH VHUYLFHV WKURXJK WKH
25% EXV IRU FUHDWLQJ UHPRYLQJ DQG DFFHVVLQJ WKH REMHFWV $OVR WKURXJK WKHVH VHUYLFHV ZH FDQ
VWRUH DQG UHVWRUHV WKHP XVLQJ VHULDOL]DWLRQ DQG GHVHUDOL]DWLRQ

Object Management Group (OMG)


&25%$ LV WKH SURGXFW RI WKH 20* 2EMHFW 0DQDJHPHQW *URXS  7KH 2EMHFW 0DQDJHPHQW
*URXS LV FXUUHQWO\ WKH KRPH IRU &25%$ ULJKW QRZ WKDW LQFOXGHV PRUH WKDQ  FRPSDQLHV DQG
WKHLU VLWH LV RQH RI WKH EHVW WR JHW XSWRGDWH LQIRUPDWLRQ RQ WKH JRLQJVRQ LQ WKH &25%$
ZRUOG 7KH VHFUHW WR 20*V VXFFHVV LV WKDW LW FUHDWHV LQWHUIDFH VSHFLILFDWLRQV QRW ODQJXDJH
&25%$

LV

QRW

ODQJXDJH

,W

LV

WHFKQRORJ\

$QG

WRGD\V

WHFKQRORJ\

ORRNLQJ LQ WHUPV RI SODWIRUP DQG ODQJXDJH LQGHSHQGHQFH &25%$ GRHV LW

222

Comp-U-Learn

VKRXOG

VHULRXVO\

$QG KRZ

EH

CORBA An Insight

Interface Definition Language(IDL)


7KH VSHFLILFDWLRQV DUH ZULWWHQ LQ D QHXWUDO ,QWHUIDFH 'HILQLWLRQ /DQJXDJH ,'/ WKDW GHILQHV D
FRPSRQHQWV

ERXQGDULHV

,'/

SURYLGHV

RSHUDWLQJ

V\VWHP

DQG

SURJUDPPLQJ

ODQJXDJH

LQGHSHQGHQW LQWHUIDFHV WR DOO WKH VHUYLFHV DQG FRPSRQHQWV WKDW UHVLGH LQ DQ 25% EXV $OVR LW
DOORZV WKH VHUYHU DQG FOLHQW REMHFWV ZULWWHQ LQ GLIIHUHQW ODQJXDJHV WR LQWHURSHUDWH &RPSRQHQWV
ZULWWHQ WR ,'/ VKRXOG EH SRUWDEOH DFURVV ODQJXDJHV WRROV RSHUDWLQJ V\VWHPV DQG QHWZRUNV
&25%$ REMHFWV DUH SDFNHG DV ELQDU\ FRPSRQHQWV WKDW UHPRWH FOLHQWV FDQ DFFHVV YLD PHWKRG
LQYRFDWLRQV

%RWK

WKH

ODQJXDJH

DQG

WKH

FRPSLOHU

XVHG

WR

FUHDWH

VHUYHU

REMHFWV

DUH

WRWDOO\

WUDQVSDUHQW WR FOLHQWV

)RU H[DPSOH D VHUYHU REMHFW FRXOG EH LPSOHPHQWHG DV D VHW RI & FODVVHV RU LW FRXOG EH
LPSOHPHQWHG ZLWK D PLOOLRQ OLQHV RI &2%2/ FRGH H[LVWLQJ WRGD\ 7KH FOLHQW ZLOO QRW NQRZ WKH
GLIIHUHQFH 7KH FOLHQW QHHGV WR NQRZ WKH LQWHUIDFH LWV VHUYHU REMHFW SXEOLVKHV 7KLV LQWHUIDFH
VHUYHV DV D ELQGLQJ FRQWUDFW EHWZHHQ FOLHQWV DQG VHUYHUV

8VLQJ 20* ,'/ ZH FDQ VSHFLI\ D FRPSRQHQWV DWWULEXWHV WKH SDUHQW FODVVHV LW LQKHULWV WKH
H[FHSWLRQV LW UDLVHV WKH W\SHG HYHQWV DQG WKH PHWKRGV LWV LQWHUIDFH VXSSRUWV LQFOXGLQJ WKH LQSXW
RXWSXW SDUDPHWHUV DQG WKHLU GDWD W\SHV &25%$ ,'/ DOORZV FRPSRQHQW SURYLGHUV WR VSHFLI\ LQ
D VWDQGDUG GHILQLWLRQ ODQJXDJH WKH LQWHUIDFH DQG VWUXFWXUH RI WKH REMHFWV WKH\ SURYLGH $Q ,'/
GHILQHG

FRQWUDFW

ELQGV

WKH

SURYLGHUV

RI

GLVWULEXWHG

REMHFW VHUYLFHV

WR

WKHLU

FOLHQWV

)RU

RQH

REMHFW WR UHTXHVW VRPHWKLQJ IURP DQRWKHU REMHFW LW PXVW NQRZ WKH WDUJHW REMHFWV LQWHUIDFH 7KH
&25%$ ,QWHUIDFH 5HSRVLWRU\ FRQWDLQV WKH GHILQLWLRQV RI DOO WKHVH LQWHUIDFHV ,W FRQWDLQV WKH
PHWDGDWD

WKDW

OHWV

FRPSRQHQWV

GLVFRYHU

HDFK

RWKHU

G\QDPLFDOO\

DW

UXQ

WLPH

7KH

VHUYLFHV

SURYLGHG E\ 20* GHWHUPLQH ZKLFK REMHFWV DUH RQ WKH QHWZRUN ZKLFK PHWKRGV WKH\ SURYLGH
DQG

ZKLFK

REMHFW

LQWHUIDFH

DGDSWHUV

WKH\

VXSSRUW

7KH

ORFDWLRQ

RI

WKH

REMHFW

VKRXOG

EH

WUDQVSDUHQW WR WKH FOLHQW ,W VKRXOG QRW PDWWHU ZKHWKHU WKH REMHFW LV LQ WKH VDPH SURFHVV RU
DFURVV WKH ZRUOG

Java and CORBA


7KH PDLQ UHDVRQ IRU XVLQJ -DYD ODQJXDJH PDSSLQJ RI 20* ,'/ LV WR H[SORLW WKH FRPELQDWLRQ
RI IHDWXUHV XQLTXH WR WKH -DYD ODQJXDJH

Portability across platforms


Internet programming
Object oriented language
-DYD SURJUDPV DUH KLJKO\ SRUWDEOH GXH WR WKH VWDQGDUGL]HG E\WH FRGH UHSUHVHQWDWLRQ JHQHUDWHG E\
-DYD FRPSLOHUV -DYD KDV D VLJQLILFDQW DGYDQWDJH RYHU RWKHU SURJUDPPLQJ ODQJXDJHV LQ SDUWLFXODU
IRU FOLHQW DSSOLFDWLRQV VLQFH D VLQJOH VRXUFH FRGH RU FRPSLOHG E\WH FRGH VHW ZLOO EH XVDEOH RQ DQ\

Comp-U-Learn

223

Advanced Java Programming

SODWIRUP

ZLWKRXW

SRUWLQJ

&RQVHTXHQWO\

GHYHORSPHQW

DQG

PDLQWHQDQFH

FRVWV

FDQ

EH

VLJQLILFDQWO\ UHGXFHG

7KH -DYD ODQJXDJH ELQGLQJ DOORZV LPSOHPHQWDWLRQ RI &25%$ FOLHQWV DV DSSOHWV 7KLV HQDEOHV
DFFHVV WR &25%$ REMHFWV DQG SRWHQWLDOO\ WR OHJDF\ DSSOLFDWLRQV ZUDSSHG LQWR REMHFWV XVLQJ
SRSXODU

:HE

EURZVHUV

,Q

IDFW

-DYD

HQDEOHG

:HE

EURZVHUV

DUH

EHFRPLQJ

WKH

XQLYHUVDO

*UDSKLFDO 8VHU ,QWHUIDFH ,Q DQ HQWHUSULVH WKH VDPH WHFKQRORJ\ FDQ EH XVHG LQ ,QWUDQHW EHFDXVH
WKH VDPH 7&3,3 SURWRFROV DUH XVHG

&25%$ SURYLGHV D GLVWULEXWHG REMHFW LQIUDVWUXFWXUH WKDW OHWV DSSOLFDWLRQV H[WHQG WKHLU UHDFK
DFURVV

QHWZRUNV

ODQJXDJHV

FRPSRQHQW

ERXQGDULHV

DQG

RSHUDWLQJ

V\VWHPV

-DYD

SURYLGHV

SRUWDEOH REMHFW LQIUDVWUXFWXUH WKDW ZRUNV RQ HYHU\ PDMRU RSHUDWLQJ V\VWHP &25%$ GHDOV ZLWK
QHWZRUN

WUDQVSDUHQF\

ZKHUHDV

-DYD

GHDOV

ZLWK

LPSOHPHQWDWLRQ

WUDQVSDUHQF\

,W

DOORZV

ERWK

FOLHQWV DQG VHUYHUV WR G\QDPLFDOO\ JDLQ LQWHOOLJHQFH -DYD FRGH FDQ EH GHSOR\HG DQG PDQDJHG
FHQWUDOO\

IURP

WKH

VHUYHU

2QFH

ZH

XSGDWH

RXU

FRGH

RQ

WKH

VHUYHU

WKH

FOLHQW

UHFHLYHV

LW

ZKHQHYHU DQG ZKHUHYHU WKH\ QHHG LW

-DYD LV WKH PRVW LGHDO ODQJXDJH IRU ZULWLQJ ERWK FOLHQW DQG VHUYHU REMHFWV -DYD KDV EXLOW LQ
PXOWLWKUHDGLQJ
QHWZRUNHG

JDUEDJH

REMHFWV

FROOHFWLRQ

-DYDV

REMHFW

DQG

HUURU

PRGHO

KDQGOLQJ

FRPSOHPHQWV

7KHVH

PDNH

&25%$V

LW

HDVLHU

PRGHO

WR

7KH\

ZULWH
ERWK

UREXVW

XVH

WKH

FRQFHSW RI LQWHUIDFHV WR VHSDUDWH DQ REMHFWV GHILQLWLRQ IURP LWV LPSOHPHQWDWLRQ

-DYD 6HUYOHWV FDQ EH XVHG WR DGG D QHZ SUHVHQWDWLRQ OD\HU RYHU H[LVWLQJ VROXWLRQV )RU H[DPSOH
ZH KDYH D FRQWDFW DSSOLFDWLRQ WKDW ZH ZRXOG

OLNH WR H[WHQG RYHU WKH LQWHUQHW RU DQ LQWUDQHW :H

FDQ XVH &25%$ WR ZUDS WKHVH OHJDF\ DSSOLFDWLRQV DQG WKHQ GHSOR\ WKHP RYHU WKH ,QWHUQHW RU
,QWUDQHW XVLQJ -DYD VHUYOHWV 7KH FRQYHUVH LV DOVR WUXH 1HZHU DSSOLFDWLRQV FDQ EH EXLOW XVLQJ
&25%$ DQG VHUYOHW EDVHG H[WHQVLRQV FDQ EH XVHG WR DGG ,QWHUQHW VXSSRUW WR WKHP

Features of CORBA 2.0


7KH

&RPPRQ

2EMHFW

5HTXHVW

%URNHU

$UFKLWHFWXUH

&25%$

VSHFLILFDWLRQ

ZDV

DGRSWHG

E\

2EMHFW 0DQDJHPHQW *URXS 20* WR DGGUHVV WKH FRPSOH[LW\ DQG KLJK FRVW RI GHYHORSLQJ
'LVWULEXWHG

DSSOLFDWLRQV

&25%$

XVHV

DQ

REMHFWRULHQWHG

DSSURDFK

IRU

FUHDWLQJ

VRIWZDUH

FRPSRQHQWV WKDW FDQ EH UHXVHG DQG VKDUHG EHWZHHQ DSSOLFDWLRQV (DFK REMHFW HQFDSVXODWHV WKH
GHWDLOV RI LWV LQQHU ZRUNLQJV DQG SUHVHQWV D ZHOOGHILQHG LQWHUIDFH ZKLFK UHGXFHV DSSOLFDWLRQ
FRPSOH[LW\

&25%$



VSHFLILHV

WHFKQLFDO

IUDPHZRUN

ZKLFK

DOORZV

DSSOLFDWLRQV

WKDW

XVH

GLIIHUHQW

SURWRFROV WR LQWHURSHUDWH ,Q DGGLWLRQ WR WKLV &25%$  DOVR VSHFLILHV WKH PHDQV E\ ZKLFK
SURWRFROV VXFK DV '&( 53& FDQ LQWHURSHUDWH ZLWK QDWLYH &25%$ SURWRFROV &25%$ 
DOORZHG 25%V IURP WKH VDPH YHQGRU WR LQWHURSHUDWH DFURVV PXOWLSOH SODWIRUPV 7KLV PHDQV

224

Comp-U-Learn

CORBA An Insight

WKDW LI ZH ZDQW WR UXQ &25%$ LQ PXOWLSOH SODWIRUPV ZH VHOHFW DQ 25% YHQGRU WKDW VXSSRUWV
WKRVH

SODWIRUPV

:LWK

&25%$



ZH

FDQ

FKRRVH

DQ\

YHQGRU

RI

RXU

FKRLFH

EHFDXVH

WKH

VSHFLILFDWLRQV JXDUDQWHH WKDW DSSOLFDWLRQV UXQQLQJ RQ PXOWLSOH SODWIRUPV ZRXOG ZRUN WRJHWKHU

&25%$  VSHFLILHV D PHFKDQLVP NQRZQ DV EULGJLQJ WR DOORZ PXOWLSOH 25%V WR FRPPXQLFDWH
DQG FROODERUDWH ZLWK HDFK RWKHU 7KH EULGJH FRQFHSW DFFRPSOLVKHV D QXPEHU RI IXQFWLRQV 7KH
SULPDU\

RQH

LV

WKDW

ZKHQ

ERXQGDU\

LV

FURVVHG

WKH

EULGJH

IDFLOLWDWHV

WKH

XQDPELJXRXV

WUDQVODWLRQ RI WKH VHPDQWLFV DQG VWUXFWXUH RI WKH FDOO EHWZHHQ 25%V

7KH PRVW LPSRUWDQW DVSHFW RI &25%$ LV WKDW LW LV D SHHU WR SHHU WHFKQRORJ\ 7KLV PHDQV WKDW D
&25%$ FOLHQW FRXOG E\ GHVLJQ EHFRPH D VHUYHU DQG D VHUYHU FRXOG EH PDGH LQWR D FOLHQW 7KH
UROHV

RI

VHUYHU

DQG

FOLHQW

DUH

DUELWUDU\

7KH

DGYDQWDJHV

RI

&25%$

RYHU

RWKHU

GLVWULEXWHG

DSSOLFDWLRQ LQWHJUDWLRQ DSSURDFKHV DUH QRWDEOH

It is absolutely object oriented in developing distributed applications.


It is portable, language and architecture independent. It can be used to connect
objects that are developed in any programming language, as long as an IDL stub
for the objects can be furnished.
It is recognized as an International standard and is supported by nearly all-major
software vendors.

Object Request Broker (ORB)


2EMHFW 5HTXHVW %URNHU OHWV REMHFWV WUDQVSDUHQWO\ PDNH UHTXHVWV WR DQG UHFHLYH UHVSRQVHV IURP
RWKHU

REMHFWV

ORFDWHG

ORFDOO\

RU

UHPRWHO\

&25%$

25%

SURYLGHV

YDULHW\

RI

GLVWULEXWHG

PLGGOHZDUH VHUYLFHV 7KH 25% OHWV REMHFWV GLVFRYHU HDFK RWKHU DW UXQ WLPH DQG LQYRNH HDFK
RWKHUV VHUYLFHV $Q 25% LV PXFK PRUH VRSKLVWLFDWHG WKDQ DOWHUQDWLYH IRUPV RI FOLHQWVHUYHU
PLGGOHZDUH

LQFOXGLQJ

WUDGLWLRQDO

5HPRWH

3URFHGXUH

&DOOV

7KH

)LJXUH



LOOXVWUDWHV

WKH

FRQFHSW RI 25%

,Q WKHRU\ &25%$ LV WKH EHVW FOLHQWVHUYHU PLGGOHZDUH GHILQHG ,Q SUDFWLFH &25%$ LV RQO\ DV
JRRG DV WKH SURGXFWV WKDW LPSOHPHQW LW &25%$ 2EMHFW 5HTXHVW %URNHU LV WKH PLGGOHZDUH WKDW
HVWDEOLVKHV WKH FOLHQW VHUYHU UHODWLRQVKLS EHWZHHQ REMHFWV

8VLQJ DQ

25%

FOLHQW REMHFWV

FDQ

WUDQVSDUHQWO\ FDOO D PHWKRG RQ D VHUYHU REMHFW WKDW FDQ EH RQ WKH VDPH PDFKLQH RU DFURVV D
QHWZRUN

7KH

25%

LQWHUFHSWV

WKH

FDOO

DQG

LV

UHVSRQVLEOH

IRU

ILQGLQJ

DQ

REMHFW

WKDW

FDQ

LPSOHPHQW WKH UHTXHVW SDVV SDUDPHWHUV LQYRNH LWV PHWKRG DQG UHWXUQ WKH UHVXOWV 7KH FOLHQW
GRHV

QRW

KDYH

WR

EH

DZDUH

RI

ZKHUH

WKH

REMHFW

LV

ORFDWHG

LWV

SURJUDPPLQJ

ODQJXDJH

LWV

RSHUDWLQJ V\VWHP RU DQ\ RWKHU V\VWHP DVSHFWV WKDW DUH QRW SDUW RI DQ REMHFWV LQWHUIDFH ,W LV YHU\
LPSRUWDQW

WR

QRWH

WKDW

WKH

FOLHQWVHUYHU

UROHV

DUH

RQO\

XVHG

WR

FRRUGLQDWH

WKH

LQWHUDFWLRQV

EHWZHHQ WZR REMHFWV 2EMHFWV RQ WKH 25% FDQ DFW DV HLWKHU FOLHQW RU VHUYHU GHSHQGLQJ RQ WKH
RFFDVLRQ

Comp-U-Learn

225

Advanced Java Programming

Various Languages

Various Languages

IDL

IDL

Client

Server

Objects

Objects

Object Request Broker

Fig. 10.1

7KH IROORZLQJ DUH WKH DGYDQWDJHV SURYLGHG E\ &25%$ 25%

Static and dynamic method invocations


$ &25%$ 25% DOORZV HLWKHU VWDWLFDOO\ GHILQH PHWKRG LQYRFDWLRQV DW FRPSLOH WLPH RU LW OHWV XV
G\QDPLFDOO\ GLVFRYHU WKHP DW UXQWLPH 6R ZH FDQ HLWKHU JHW VWURQJ W\SH FKHFNLQJ DW FRPSLOH WLPH
RU PD[LPXP IOH[LELOLW\ DVVRFLDWHG ZLWK ODWH

ELQGLQJ

0RVW

RWKHU IRUPV RI

PLGGOHZDUH

RQO\

VXSSRUW VWDWLF ELQGLQJV

High level language bindings


$ &25%$ 25% OHWV XV LQYRNH PHWKRGV RQ VHUYHU REMHFWV XVLQJ KLJK OHYHO ODQJXDJH RI FKRLFH ,W
GRHV QRW PDWWHU ZKDW ODQJXDJH VHUYHU REMHFWV DUH ZULWWHQ LQ &25%$ VHSDUDWHV LQWHUIDFH IURP
LPSOHPHQWDWLRQ DQG SURYLGHV ODQJXDJH QHXWUDO GDWD W\SHV WKDW PDNH LW SRVVLEOH WR FDOO REMHFWV
DFURVV ODQJXDJH DQG RSHUDWLQJ V\VWHP ERXQGDULHV

Self Describing System


&25%$ SURYLGHV UXQWLPH PHWDGDWD IRU GHVFULELQJ HYHU\ VHUYHU LQWHUIDFH NQRZQ WR WKH V\VWHP
7KH FOLHQWV XVH PHWDGDWD WR GLVFRYHU KRZ WR LQYRNH VHUYLFHV DW UXQ WLPH ,W DOVR KHOSV WRROV
JHQHUDWH FRGH RQ WKH IO\ 7KH PHWDGDWD LV JHQHUDWHG DXWRPDWLFDOO\ HLWKHU E\ DQ ,'/ RU GLUHFWO\
IURP DQ 22 ODQJXDJH

226

Comp-U-Learn

CORBA An Insight

Local/Remote transparency
$Q 25% FDQ UXQ LQ VWDQGDORQH PRGH RU LW FDQ EH LQWHU FRQQHFWHG WR HYHU\ RWKHU 25% LQ WKH
XQLYHUVH XVLQJ &25%$ V ,QWHUQHW ,QWHU 25% 3URWRFRO ,,23 VHUYLFHV $Q 25% FDQ EH
EURNHU

LQWHU

RSHUDWLQJ

REMHFW

V\VWHPV

FDOOV
,Q

ZLWKLQ

JHQHUDO

D
D

VLQJOH

SURFHVV

&25%$

FOLHQW

PXOWLSOH
VHUYHU

SURFHVVHV

UXQQLQJ

SURJUDPPHU

GRHV

QHWZRUNV

QRW

KDYH

DQG

WR

EH

FRQFHUQHG ZLWK WUDQVSRUWV VHUYHU ORFDWLRQV REMHFW DFWLYDWLRQ E\WH RUGHULQJ DFURVV GLVVLPLODU
SODWIRUPV RU WDUJHW RSHUDWLQJ V\VWHPV &25%$ PDNHV LW DOO WUDQVSDUHQW

Built in Security
7KH

25%

LQFOXGHV

FRQWH[W

LQIRUPDWLRQ

LQ

LWV

PHVVDJHV

WR

KDQGOH

VHFXULW\

DQG

WUDQVDFWLRQV

DFURVV PDFKLQH DQG 25% ERXQGDULHV

Polymorphic Messaging
$Q 25% GRHV QRW VLPSO\ LQYRNH D UHPRWH IXQFWLRQ ,W LQYRNHV D IXQFWLRQ RQ D WDUJHW REMHFW
7KLV PHDQV WKDW WKH VDPH IXQFWLRQ ZLOO KDYH GLIIHUHQW HIIHFWV GHSHQGLQJ RQ WKH REMHFW WKDW
UHFHLYHV LW

)RU H[DPSOH D FRQILJXUHB\RXUVHOI PHWKRG LQYRFDWLRQ EHKDYHV GLIIHUHQWO\ ZKHQ

DSSOLHG WR D GDWDEDVH REMHFW YHUVXV D SULQWHU REMHFW

Coexistence with existing systems


&25%$V

VHSDUDWLRQ

RI

DQ

REMHFWV

GHILQLWLRQ

IURP

LWV

LPSOHPHQWDWLRQ

LV

SHUIHFW

IRU

HQFDSVXODWLQJ H[LVWLQJ DSSOLFDWLRQV 8VLQJ &25%$ ,'/ ZH FDQ PDNH RXU H[LVWLQJ FRGH ORRN
OLNH DQ REMHFW RQ WKH 25% HYHQ LI LW LV LPSOHPHQWHG LQ VWRUHG SURFHGXUHV

CORBA 2.0 Global Repository Ids


:LWK

&25%$



25%V

SURYLGH

JOREDO

LGHQWLILHUV

FDOOHG

5HSRVLWRU\

,GV

WR

XQLTXHO\

DQG

JOREDOO\ LGHQWLI\ D FRPSRQHQW DQG LWV LQWHUIDFH DFURVV PXOWLYHQGRU 25%V DQG UHSRVLWRULHV 7KH
5HSRVLWRU ,GV DUH V\VWHP JHQHUDWHG XQLTXH VWULQJV WKDW DUH XVHG WR PDLQWDLQ FRQVLVWHQF\ LQ WKH
QDPLQJ FRQYHQWLRQV XVHG DFURVV UHSRVLWRULHV 5HSRVLWRU\ ,'V DUH JHQHUDWHG YLD SUDJPDV LQ ,'/
7KH 5HSRVLWRU\ ,' LWVHOI LV D VWULQJ FRQVLVWLQJ RI D WKUHHOHYHO QDPH KLHUDUFK\

CORBA 2.0 ORB Architecture


,Q

WKLV

VHFWLRQ

ZH

DUH

JRLQJ

WR

DQDO\]H

WKH

&25%$



YHUVLRQV

25%

DUFKLWHFWXUH

7KLV

DUFKLWHFWXUH JLYHV XV DQ LGHD DERXW WKH LPSOHPHQWDWLRQ RI DQ REMHFW LQ WKH 25% EXV 7KH )LJXUH
 JLYHV WKH DUFKLWHFWXUH RI WKH 25% GLDJUDPPDWLFDOO\ ,Q WKLV DUFKLWHFWXUH ZH FDQ VHH VRPH
ZRUGV OLNH VWXE VNHOHWRQ UHSRVLWRU\ ZKLFK ZH KDYH VHHQ DOUHDG\ LQ WKH

50,

VHVVLRQV

7KH

GHWDLOV EHORZ H[SODLQ WKH FRPSRQHQWV LQ WKLV 25% DUFKLWHFWXUH

Comp-U-Learn

227

Advanced Java Programming

Client IDL Stubs


7KH &OLHQW ,'/ 6WXEV SURYLGHV WKH VWDWLF LQWHUIDFHV WR REMHFW VHUYLFHV 7KHVH SUHFRPSLOHG VWXEV
GHILQH KRZ FOLHQWV LQYRNH FRUUHVSRQGLQJ VHUYLFHV RQ WKH VHUYHUV )URP D FOLHQWV SHUVSHFWLYH WKH
VWXE DFWV OLNH D ORFDO FDOO ,W LV D ORFDO SUR[\ IRU D UHPRWH VHUYHU REMHFW 7KH VHUYLFHV DUH GHILQHG
XVLQJ ,'/ %RWK FOLHQW DQG VHUYHU VWXEV DUH JHQHUDWHG E\ WKH ,'/ FRPSLOHU $ FOLHQW PXVW KDYH
DQ ,'/ VWXE IRU HDFK LQWHUIDFH LW XVHV RQ WKH VHUYHU

Dynamic Invocation Interface


,W GLVFRYHUV PHWKRGV WR EH LQYRNHG DW UXQWLPH &25%$ GHILQHV WKH VWDQGDUG $3,V IRU ORRNLQJ
XS WKH PHWDGDWD WKDW GHILQHV WKH VHUYHU LQWHUIDFH JHQHUDWLQJ WKH SDUDPHWHUV LVVXLQJ WKH UHPRWH
FDOO DQG JHWWLQJ EDFN WKH UHVXOWV

Client IDL
Stubs

Dynamic
Invocation

Interface
Repository
Client

ORB Interface

Object
Implementation
Object
Adapter
Dynamic
Invocation
Static
Skeleton

Implement
Repository

Fig. 10.2
Interface Repository APIs
,W DOORZV WR XV WR REWDLQ DQG PRGLI\ WKH GHVFULSWLRQV RI DOO WKH UHJLVWHUHG FRPSRQHQW LQWHUIDFHV
WKH PHWKRGV WKH\ VXSSRUW DQG WKH SDUDPHWHUV WKH\ UHTXLUH &25%$ FDOOV WKHVH GHVFULSWLRQV
PHWKRG VLJQDWXUHV 7KH $3,V DOORZ PHWDGDWD WR G\QDPLFDOO\ DFFHVV VWRUH DQG XSGDWH PHWDGDWD
LQIRUPDWLRQ

228

Comp-U-Learn

CORBA An Insight

The ORB interface


,W FRQVLVWV RI D IHZ $3,V WR ORFDO VHUYLFHV WKDW PD\ EH RI LQWHUHVW WR DQ DSSOLFDWLRQ )RU H[DPSOH
&25%$ SURYLGHV $3,V WR FRQYHUW DQ REMHFW UHIHUHQFH WR D VWULQJ DQG YLFH YHUVD 7KHVH FDOOV FDQ
EH XVHIXO ZKHQ ZH QHHG WR VWRUH DQG FRPPLW REMHFW UHIHUHQFHV

7KH VXSSRUW IRU VWDWLF DQG G\QDPLF FOLHQW VHUYHU LQYRFDWLRQV DV ZHOO DV WKH ,QWHUIDFH 5HSRVLWRU\
JLYHV

&25%$

DQ

HGJH

RYHU

WKH

FRPSHWLQJ

PLGGOH

ZDUH

6WDWLF

LQYRFDWLRQV

DUH

HDVLHU

WR

SURJUDP IDVWHU DQG VHOI GRFXPHQWLQJ '\QDPLF LQYRFDWLRQV SURYLGH PD[LPXP IOH[LELOLW\ EXW
WKH\ DUH GLIILFXOW WR SURJUDP 7KH\ DUH YHU\ XVHIXO WRROV WR GLVFRYHU VHUYLFHV DW UXQ WLPH 7KH
VHUYHU VLGH FDQQRW WHOO WKH GLIIHUHQFH EHWZHHQ D VWDWLF RU G\QDPLF LQYRFDWLRQ WKH\ ERWK KDYH WKH
VDPH

PHVVDJH

VHPDQWLFV

,Q

ERWK

WKH

FDVHV

WKH

25%

ORFDWHV

REMHFW

DGDSWHU

WUDQVPLWV

WKH

SDUDPHWHUV DQG WUDQVIHUV FRQWUROV WR WKH REMHFW LPSOHPHQWDWLRQ WKURXJK WKH VHUYHU ,'/ VWXE

Server IDL Stubs


20* FDOOV WKHP VNHOHWRQV 7KH\ SURYLGH VWDWLF LQWHUIDFHV WR HDFK VHUYLFH H[SRUWHG E\ WKH VHUYHU
7KHVH VWXEV OLNH WKH RQHV RQ WKH FOLHQW DUH FUHDWHG XVLQJ DQ ,'/ FRPSLOHU

Dynamic Skeleton Interface


,W SURYLGHV D UXQ WLPH ELQGLQJ PHFKDQLVP IRU VHUYHUV WKDW QHHG WR KDQGOH LQFRPLQJ PHWKRG FDOOV
IRU FRPSRQHQWV WKDW GR QRW KDYH ,'/ EDVHG FRPSLOHG VNHOHWRQV RU VWXEV 7KH G\QDPLF VNHOHWRQ
ORRNV DW WKH SDUDPHWHU YDOXHV LQ DQ LQFRPLQJ PHVVDJH LQ RUGHU WR ILQG WKH WDUJHW PHWKRG DQG
REMHFW '\QDPLF 6NHOHWRQV DUH YHU\ XVHIXO IRU LPSOHPHQWLQJ JHQHULF EULGJHV EHWZHHQ 25%V
,QWHUSUHWHUV DQG VFULSWLQJ ODQJXDJHV WR G\QDPLFDOO\ JHQHUDWH REMHFW LPSOHPHQWDWLRQV FDQ DOVR XVH
WKHP

Object Adapter
,W LV RQ WKH WRS RI 25%V FRPPXQLFDWLRQ VHUYLFHV DQG DFFHSWV UHTXHVWV IRU VHUYLFH RQ EHKDOI RI
WKH VHUYHUV REMHFWV ,W SURYLGHV WKH UXQWLPH HQYLURQPHQW IRU LQVWDQWLDWLQJ VHUYHU REMHFWV SDVVLQJ
UHTXHVWV WR WKHP DQG DVVLJQLQJ WKHP REMHFWV ,GV &25%$ FDOOV WKH ,GV DV REMHFW UHIHUHQFHV 7KH
2EMHFW $GDSWHU DOVR UHJLVWHUV WKH VXSSRUWHG FODVVHV DQG WKHLU UXQ WLPH LQVWDQFHV LH REMHFWV
ZLWK WKH ,PSOHPHQWDWLRQ 5HSRVLWRU\ &25%$ VSHFLILHV WKDW HDFK 25% PXVW VXSSRUW D VWDQGDUG
DGDSWHU FDOOHG WKH %DVLF 2EMHFW $GDSWHU %2$  6HUYHUV PD\ VXSSRUW PRUH WKDQ RQH REMHFW
DGDSWHU

Implementation Repository
7KLV SURYLGHV

UXQ

WLPH UHSRVLWRU\ RI

LQIRUPDWLRQ

DERXW

WKH

FODVVHV

VHUYHU

VXSSRUW

WKH

REMHFWV WKDW DUH LQVWDQWLDWHG DQG WKHLU ,'V ,W DOVR VHUYHV DV D FRPPRQ SODFH WR VWRUH DGGLWLRQDO
LQIRUPDWLRQ DVVRFLDWHG ZLWK WKH LPSOHPHQWDWLRQ RI 25%V

Comp-U-Learn

229

Advanced Java Programming

CORBA Services
&25%$

VHUYLFHV

DUH

FROOHFWLRQ

RI

V\VWHP

OHYHO

VHUYLFHV

SDFNDJHG

ZLWK

,'/

VSHFLILHG

LQWHUIDFHV &25%$ VHUYLFHV DUH WKH PDLQ FRPSRQHQW LQ WKH 20* DUFKLWHFWXUH ZKLFK LV VKRZQ
LQ WKH IROORZLQJ )LJXUH  20* KDV SXEOLVKHG VWDQGDUGV IRU VL[WHHQ REMHFW VHUYLFHV 7KHVH DUH
H[SODLQHG RQH E\ RQH

Application Objects

CORBA Facilities

ORB

CORBA Services

Fig. 10.3
The Life Cycle Service
7KLV GHILQHV RSHUDWLRQV IRU FUHDWLQJ FRS\LQJ PRYLQJ DQG GHOHWLQJ FRPSRQHQWV

The Persistence Service


,W SURYLGHV D VLQJOH LQWHUIDFH IRU VWRULQJ FRPSRQHQWV SHUVLVWHQWO\ RQ D YDULHW\ RI VWRUDJH VHUYHUV
LQFOXGLQJ 2EMHFW 'DWDEDVHV 2'%06  5HODWLRQDO 'DWDEDVHV 5'%06 DQG VLPSOH ILOHV

The Naming Service


,W DOORZV FRPSRQHQWV WR ORFDWH RWKHU FRPSRQHQWV 7KH VHUYLFH DOVR DOORZV REMHFWV WR EH ERXQG
WR WKH H[LVWLQJ QHWZRUN GLUHFWRULHV RU QDPLQJ FRQWH[WV

The Event service


,W DOORZV FRPSRQHQWV WR G\QDPLFDOO\ UHJLVWHU RU XQUHJLVWHU WKHLU LQWHUHVW LQ VSHFLILF HYHQWV 7KH
VHUYLFH GHILQHV D ZHOO NQRZQ REMHFW FDOOHG DQ HYHQW FKDQQHO WKDW FROOHFWV DQG GLVWULEXWHV HYHQWV
DPRQJ FRPSRQHQWV WKDW NQRZ QRWKLQJ RI HDFK RWKHU

230

Comp-U-Learn

CORBA An Insight

The Concurrency Control Service


,W SURYLGHV D ORFN PDQDJHU WKDW FDQ REWDLQ ORFNV RQ EHKDOI RI HLWKHU WUDQVDFWLRQV RU WKUHDGV

The Transaction Service


7KLV SURYLGHV WZR SKDVH FRPPLW FRRUGLQDWLRQ DPRQJ UHFRYHUDEOH FRPSRQHQWV XVLQJ HLWKHU IODW
RU QHVWHG WUDQVDFWLRQV

The Relationship Service


,W SURYLGHV D ZD\ WR FUHDWH G\QDPLF DVVRFLDWLRQV EHWZHHQ FRPSRQHQWV WKDW NQRZ QRWKLQJ RI
HDFK RWKHU ,W DOVR SURYLGHV PHFKDQLVPV IRU WUDYHUVLQJ WKH OLQNV WKDW JURXS WKHVH FRPSRQHQWV ,W
DOVR HQIRUFHV UHIHUHQWLDO LQWHJULW\ DQG LVVXHG IRU DQ\ RWKHU NLQG RI OLQNDJH DPRQJ FRPSRQHQWV

The Externalization Service


,W

SURYLGHV

D VWDQGDUG

ZD\

RI

JHWWLQJ

GDWD

LQ

DQG

RXW

RI D

FRPSRQHQW

XVLQJ

VWUHDP

OLNH

PHFKDQLVP

The Query Service


,W SURYLGHV TXHU\ RSHUDWLRQV IRU REMHFWV ,W LV D VXSHUVHW RI 64/ DQG LV EDVHG RQ WKH XSFRPLQJ
64/ VSHFLILFDWLRQ DQG WKH 2EMHFW 'DWDEDVH 0DQDJHPHQW *URXSV 2'0* 2EMHFW 4XHU\
/DQJXDJH

The Licensing Service


7KH VHUYLFH VXSSRUWV DQ\ PRGHO RI XVDJH FRQWURO DW DQ\ SRLQW LQ D FRPSRQHQWV OLIH F\FOH ,W
VXSSRUWV FKDUJLQJ SHU VHVVLRQ SHU QRGH SHU LQVWDQFH FUHDWLRQ DQG SHU VLWH

The Properties Service


7KLV SURYLGHV RSHUDWLRQV WR DVVRFLDWH QDPHG YDOXHV RU SURSHUWLHV ZLWK DQ\ FRPSRQHQW 8VLQJ
WKLV VHUYLFH ZH FDQ G\QDPLFDOO\ DVVRFLDWH SURSHUWLHV ZLWK D FRPSRQHQWV VWDWH IRU H[DPSOH D WLWOH
RU D GDWH

The Time Service


,W

SURYLGHV

LQWHUIDFHV

DXWKHQWLFDWLRQ

DFFHVV

IRU

V\QFKURQL]LQJ

FRQWURO

OLVWV

WLPH

LQ

FRQILGHQWLDOLW\

GLVWULEXWHG

DQG

REMHFW

QRQUHSXGLDWLRQ

VHFXULW\
,W

DOVR

,W

VXSSRUWV

PDQDJHV

WKH

GHOHJDWLRQ RI FUHGHQWLDOV EHWZHHQ REMHFWV

Comp-U-Learn

231

Advanced Java Programming

Trader Service
,W DOORZV REMHFWV WR SXEOLFL]H WKHLU VHUYLFHV DQG ELG IRU MREV

The Collection Service


,W

SURYLGHV

&25%$

LQWHUIDFHV

WR

JHQHULFDOO\

FUHDWH

DQG

PDQLSXODWH

WKH

PRVW

FRPPRQ

FROOHFWLRQV

The Startup Service


,W HQDEOHV UHTXHVWV WR DXWRPDWLFDOO\ VWDUW XS ZKHQ DQ 25% LV LQYRNHG

CORBA Facilities
7KH &25%$ IDFLOLWLHV DUH WKH FROOHFWLRQ RI WKH IUDPHZRUNV ZKLFK DUH GHILQHG E\ ,'/V ZKLFK
SURYLGH VHUYLFHV RI GLUHFW XVH WR DSSOLFDWLRQ REMHFWV &XUUHQWO\ ZH DUH XVLQJ WKH IDFLOLWLHV VXFK DV
EXVLQHVV REMHFW IUDPHZRUNV GDWD LQWHUFKDQJH DQG LQWHUQDWLRQDOL]DWLRQ

Internet Inter ORB Protocol


:H

FDQ

VD\

WKDW

&25%$

LV

WKH

SHHUWRSHHU

WHFKQRORJ\

&25%$

DSSOLFDWLRQ

FDQ

HDVLO\

LQWHJUDWH REMHFW UHIHUHQFHV DFURVV PDQ\ GLIIHUHQW GRPDLQV ,W LV FRQWH[WV VXFK DV WKHVH WKDW EURDG
DQG JHQHUDO DUFKLWHFWXUH IRU LQWHURSHUDELOLW\ QHHG WR EH GHILQHG 7KH 20* GRHV SUHFLVHO\ WKDW
ZLWK D VSHFLILFDWLRQ IRU ,QWHU25% %ULGJH 6XSSRUW UXQQLQJ RYHU FOHDUO\ GHILQHG SURWRFROV

6R

&25%$



DGGHG

WKLV

LQWHURSHUDELOLW\

E\

VSHFLI\LQJ

PDQGDWRU\

,QWHUQHW

,QWHU

25%

3URWRFRO ,,23  7KH ,,23 LV EDVLFDOO\ 7&3,3 ZLWK VRPH &25%$ GHILQHG PHVVDJH H[FKDQJH
WKDW VHUYH DV D FRPPRQ EDFNERQH SURWRFRO 6R DQ\ SURSULHWDU\ 25% FDQ FRQQHFW ZLWK WKH
XQLYHUVH RU 25%V E\ WUDQVODWLQJ UHTXHVW WR DQG IURP WKH ,,23 EDFNERQH

,,23 LV DQ LPSOHPHQWDWLRQ RI *,23 WKDW XVHV 7&3,3 DV LWV WUDQVSRUW SURWRFRO 7KH *,23
VSHFLILHV D VHW RI VWDQGDUG PHVVDJHV WKDW FDQ EH XVHG WR HQVXUH LQWHURSHUDELOLW\ EHWZHHQ 25%V
7KH *HQHUDO ,QWHU 25% 3URWRFRO IDFLOLWDWHV LQWHURSHUDELOLW\ EHWZHHQ GLIIHUHQW 25%V ,W LV D
JHQHUDO SURWRFRO WKDW FDQ ZRUN ZLWK DQ\ FRQQHFWLRQRULHQWHG SURWRFRO ,W LV D YHU\ HIILFLHQW
SURWRFRO DQG

GHVLJQHG WR

EH

DV

FRPSDFW

DV

SRVVLEOH

,,23

LPSOHPHQWDWLRQV

DOORZ

&25%$

LPSOHPHQWDWLRQV WR EH LQWHURSHUDWH RYHU WKH ,QWHUQHW GRPDLQ

,,23 LV PDQGDWRU\ IRU DQ\ 25% DVSLULQJ WR &25%$  FRPSOLDQFH ,W LV WKH IRXQGDWLRQ RI
LQWHURSHUDELOLW\ EHWZHHQ &25%$  LPSOHPHQWDWLRQV ,I DQ 25% VXSSRUWV WKH ,,23 SURWRFRO
LW FDQ FRPPXQLFDWH WUDQVSDUHQWO\ WR RWKHU 25%V $Q\ VHUYLFH WKDW LV LPSOHPHQWHG RQ WRS RI D
&25%$  FRPSOLDQW 25% FDQ EH XVHG E\ DQ\ RWKHU 25% 6R LW LV SRVVLEOH WR PL[ DQG PDWFK
VHUYLFHV DFURVV PXOWLSOH GRPDLQV &25%$ DFKLHYHV LQWHURSHUDELOLW\ E\ GHILQLQJ EULGJHV %ULGJHV

232

Comp-U-Learn

CORBA An Insight

XOWLPDWHO\ PDNH LW SRVVLEOH WR XVH REMHFW UHIHUHQFHV IURP RQH GRPDLQ WR DQRWKHU GRPDLQ 7KLV LV
DFFRPSOLVKHG E\ GHILQLQJ DQ XQDPELJXRXV LQIRUPDWLRQ PRGHO IRU REMHFW UHIHUHQFHV NQRZQ DV
WKH ,QWHURSHUDEOH 2EMHFW 5HIHUHQFHV ,25 

:H FDQ FUHDWH ,25V IURP REMHFW UHIHUHQFHV 6XFK

UHIHUHQFHV FDQ EH SDVVHG WR D FOLHQW WKDW UHTXLUHV WKH VHUYLFHV RI D VHUYHU FRPSRQHQW $W WKH
FOLHQW

VLGH

WKHVH

REMHFW

UHIHUHQFHV

ZKLFK

DUH

LQ

VWULQJV

FDQ

EH

FRQYHUWHG

EDFN

WR

REMHFW

UHIHUHQFHV DQG RSHUDWLRQV FDQ EH LQYRNHG RQ WKHP

CORBA and the Internet


1RZ ZH DUH LQ WKH :HE :RUOG :KLOH OHDUQLQJ &25%$ ZH VKRXOG NQRZ ZKHQ DQG ZKHUH
&25%$

PHHWV

,QWHUQHW

H[DFWO\

7KHUH

DUH

WKUHH

DSSURDFKHV

WR

PHUJH

&25%$

,,23

ZLWK

+773&*, 7KH ILUVW RQH LV WKH 'LJLWDOV :HE %URNHU LQ ZKLFK ZH FDQ ZULWH D &*,WR&25%$
JDWHZD\ 7KLV DSSURDFK LV H[WUHPHO\ HYROXWLRQDU\ EXW LW GRHV VROYH WKH &*, ERWWOHQHFN DQG LW
GRHV QRW H[WHQG -DYD ZLWK D GLVWULEXWHG REMHFW LQIUDVWUXFWXUH

7KH

VHFRQG

DSSURDFK

LV

WR

SURYLGH

+773WR,,23

ELGLUHFWLRQDO

JDWHZD\V

DQG

WR

ZULWH

&25%$ +773 VHUYHU WKDW VHUYLFHV +773 UHTXHVWV LQVWHDG RI ZULWLQJ VHUYOHW SURJUDPPLQJ ,Q
WKLV ZD\ ZH FDQ DOORZ &25%$ WR WRWDOO\ UHSODFH +773 LQ ROGHU HQYLURQPHQWV DQG WR GLUHFWO\
H[WHQG -DYD LQ QHZHU HQYLURQPHQW 7KH WKLUG DSSURDFK LV WKH OLYHDQGOHWOLYH HQYLURQPHQW ,Q
WKLV HQYLURQPHQW RQ WKH VHUYHU VLGH ZH VLPSO\ SURYLGH D &25%$ ,,23 VHUYHU QH[W WR DQ
DOUHDG\

H[LVWLQJ

+773

VHUYHU

2Q

WKH

FOLHQW

VLGH

ZH

PXVW

SURYLGH

&25%$

25%

LPSOHPHQWDWLRQ DV ZH KDYH VHHQ LQ WKH 25% DUFKLWHFWXUH

7KH

25% LPSOHPHQWDWLRQ

FDQ

EH

GRQH

E\

HLWKHU

LQFRUSRUDWLQJ

-DYD

25%

ZLWK

WKH

:HE

EURZVHU RU E\ GRZQORDGLQJ D -DYD 25%OHW IURP WKH VHUYHU $Q 25%OHW LV VLPSO\ DQ 25%
ZULWWHQ LQ -DYD E\WHFRGHV 7KLV WKLUG DSSURDFK LV WKH PRVW SUDJPDWLF RQH %HFDXVH LW OHWV ERWK
&25%$,,23 DQG +773 KDSSLO\ FRH[LVW RYHU WKH VDPH EDFNERQH :H RQO\ XVH &25%$ ,,23
WR

VXSSRUW

WKH

QHZ

-DYD

FOLHQWVHUYHU

LQWHUDFWLRQV

+773

FRQWLQXHV

WR

VHUYLFH

+70/

GRFXPHQWV DQG WKH OHJDF\ &*, DSSOLFDWLRQV 7KLV LV PRVW ZLGHO\ XVHG &25%$ DVSHFW LQ WKH
,QWHUQHW WHFKQRORJ\ E\ 6XQ 1HWVFDSH DQG

9LVLJHQLF

VisiBroker for Java


6R IDU ZH KDYH VHHQ &25%$ WKHRUHWLFDOO\ ,Q WKH FRPLQJ VHFWLRQV ZH DUH JRLQJ WR VHH WKH
&25%$ RULHQWHG ZLWK VRPH IXQFWLRQDOLW\ )RU WKDW ZH QHHG WR NQRZ DERXW VRPH WRROV ZKLFK
OHQG VXSSRUW IRU &25%$ +HUH ZH VKDOO GHDO ZLWK &25%$ XVLQJ 9LVL%URNHU ZKLFK LV WKH
SURGXFW RI 9LVLJHQLF 9LVL%URNHU IRU -DYD LV D &25%$ FOLHQW DQG VHUYHU 25% ZULWWHQ HQWLUHO\ LQ
-DYD $OO 9LVLJHQLF 25%6 IXOO\ LPSOHPHQW WKH ,,23 SURWRFRO ZKLFK PDNH LW HDV\ IRU HDV\ IRU
& REMHFWV WR LQYRNH PHWKRGV RQ -DYD REMHFWV DQG YLFH YHUVD

Comp-U-Learn

233

Advanced Java Programming

9LVL%URNHU IRU -DYD VXSSRUWV ERWK VWDWLF DQG G\QDPLF &25%$ PHWKRG LQYRFDWLRQV 0HWKRGV RQ
D VHUYHU FDQ EH LQYRNHG E\ -DYD FOLHQW DSSOLFDWLRQV RU E\ DSSOHWV ZLWKLQ D EURZVHU 7KH DSSOHV
FDQ

XVH

HYHQ

VHFXUH

VRFNHWV

FRPPXQLFDWLRQV

IRU

HQFU\SWHG

WUDQVPLVVLRQV

LI

WKH

EURZVHU

VXSSRUWV LW 9LVL%URNHU IRU -DYD LQFOXGHV D IXOO &25%$ ,QWHUIDFH 5HSRVLWRU\ ZULWWHQ LQ -DYD 7KH
9LVLJHQLF ,'/ WR -DYD ELQGLQJV DUH EDVHG RQ WKH 6XQ ,'/ VSHFLILFDWLRQ 9LVLJHQLF LQWHQGV WR IXOO\
FRPSO\ ZLWK WKH 20* &25%$ ELQGLQJ IRU -DYD DV VRRQ LW EHFRPHV DYDLODEOH 7KH 9LVL%URNHU
,'/ FRPSLOHU JHQHUDWHV VNHOHWRQ FRGH IRU WKH VHUYHU REMHFWV LQ & RU -DYD LW DOVR JHQHUDWHV
-DYD VWXEV IRU WKH FOLHQW VLGH

9LVL%URNHU

IRU

-DYD

FRPHV

ZLWK

IDXOW

WROHUDQW

REMHFW

QDPLQJ

VHUYLFH

FDOOHG

WKH

26$JHQW

0XOWLSOH 26$JHQWV UXQQLQJ LQ WKH VDPH QHWZRUN ORFDWH HDFK RWKHU DQG DXWRPDWLFDOO\ SDUWLWLRQ
WKH

QDPHVSDFH

DPRQJ

WKHPVHOYHV

7KLV

DOORZV

XV

WR

UHSOLFDWH

DQG

ORDG

EDODQFH

REMHFWV

RQ

GLIIHUHQW VHUYHU PDFKLQHV ,Q FDVH RI D FUDVK WKH 25% DXWRPDWLFDOO\ UHURXWHV WKH FOLHQW FDOOV WR
RQH RI WKH UHSOLFDV 9LVLJHQLF LV TXLFNO\ PDNLQJ D QDPH IRU LWVHOI LQ WKH &25%$ LQGXVWU\ 7KH
FRPSDQ\

KDV

EHHQ VXFFHVVIXO

LQ

OLFHQVLQJ

LWV

25%

WHFKQRORJ\

WR

QXPEHU

RI

KLJKSURILOH

YHQGRUV LQFOXGLQJ %RUODQG 1HWVFDSH 1RYHOO 2UDFOH 6*, DQG 6\EDVH ,Q DGGLWLRQ WR OLFHQVLQJ
LWV WHFKQRORJ\ 9LVLJHQLF DOVR RIIHUV WKH IROORZLQJ SURGXFWV

9LVL%URNHU IRU &

LV D FRPSOHWH &25%$ 25% IRU GHYHORSLQJ &25%$ DSSOLFDWLRQV LQ &

9LVL%URNHU LV DYDLODEOH RQ D YDULHW\ RI SODWIRUPV LQFOXGLQJ 6RODULV +38; $,; ,5,; 'LJLWDO
8QL[ :LQGRZV DQG :LQGRZV 17

9LVL%URNHU IRU -DYD

LV D  3XUH -DYD LPSOHPHQWDWLRQ RI D &25%$ 25% 9LVLJHQLF KDV WKH

GLVWLQFWLRQ RI EULQJLQJ WR PDUNHW WKH ILUVW &25%$ FRPSOLDQW 25% ZULWWHQ LQ  3XUH
-DYD
9LVLJHQLF DOVR SURYLGHV LPSOHPHQWDWLRQV IRU D QXPEHU RI &25%$ VHUYLFHV ZLWK LWV

1DPLQJ 6HUYLFH
73%URNHU

&25%$ 1DPLQJ 6HUYLFH 

9LVL%URNHU (YHQW 6HUYLFH

9LVL%URNHU

&25%$ (YHQW 6HUYLFH  DQG

&25%$ 7UDQVDFWLRQ 6HUYLFH 

9LVLJHQLF KDV UHFHQWO\ DQQRXQFHG WKH


LWV

SODQ

IRU

&25%$

'LVWULEXWHG $SSOLFDWLRQ 3ODWIRUP $UFKLWHFWXUH

GHYHORSPHQW

SODWIRUP

$ORQJ

ZLWK

WKH

&25%$

9LVLJHQLF'$3 
VHUYLFHV

SUHVHQWO\

RIIHUHG 9LVLJHQLF SODQV WR DGG RWKHU VHUYLFHV VXFK DV WKH &25%$ 7UDGHU 6HUYLFH LQWHJUDWHG
WUDQVDFWLRQ FDSDELOLW\ DQG DV\QFKURQRXV PHVVDJLQJ FDSDELOLW\ ,QIRUPDWLRQ RQ 9LVL%URNHU DQG
RWKHU 9LVLJHQLF SURGXFWV PDQ\ RI ZKLFK FDQ EH GRZQORDGHG DV WULDO YHUVLRQV LV DYDLODEOH IURP
9LVLJHQLFV :HE VLWH DW KWWSZZZLQSULVHFRPYLVLEURNHU

Dynamic Invocation Interface


,Q DGGLWLRQ WR VWDWLF PHWKRG LQYRFDWLRQV &25%$ DOVR SURYLGHV D G\QDPLF GLVWULEXWHG REMHFW
IRXQGDWLRQ

234

7KH

G\QDPLF

&25%$

DOORZV

FUHDWLQJ

Comp-U-Learn

YHU\

IOH[LEOH

V\VWHPV

ZKHUH

FOLHQWV

DQG

CORBA An Insight

VHUYHUV GLVFRYHU HDFK RWKHU DW UXQ WLPH 6HUYHUV RIIHU QHZ VHUYLFHV DQG LQWHUIDFHV ZKHQHYHU WKH\
EHFRPH

DYDLODEOH

&OLHQWV

GLVFRYHU

WKHVH

LQWHUIDFHV

DQG

G\QDPLFDOO\

LQYRNH

WKHP

XVLQJ

&25%$V '\QDPLF ,QYRFDWLRQ ,QWHUIDFH ',,  7UDGHU VHUYLFH DQG ,QWHUIDFH 5HSRVLWRU\ 1RZ
ZH DUH JRLQJ WR OHDUQ DERXW UXQ WLPH GLVFRYHU\ DQG ODWH ELQGLQJ LQ WKLV VHVVLRQ &OLHQWV ZLOO
UHJLVWHU IRU VHUYLFHV 6HUYHUV ZLOO FDOO WKHP EDFN ZKHQHYHU WKH\ KDYH VRPHWKLQJ WKDW PDWFKHV
WKHLU FOLHQWV QHHGV ,Q WKH H[DPSOHV VHHQ VR IDU ZH VXSSOLHG D VWXE IRU HDFK LQWHUIDFH WKH FOLHQW
XVHG

7KH

FOLHQWV

XVHG

WKLV

SUHFRPSLOHG

VWXE

WR

LQYRNH

RSHUDWLRQV

RQ

VHUYHU

REMHFW

%XW

DSSOHWV DUH PRUH G\QDPLF 7KH\ FDQ GRZQORDG WKH VWXEV E\WHFRGH DW UXQ WLPH ZKHQHYHU WKH\
QHHG WR LQYRNH DQ RSHUDWLRQ RQ D VHUYHU REMHFW 6R LQ ERWK FDVHV WKHUH LV D QHHG IRU D VWXE WR
FRQQHFW WR WKH VHUYHU 1RZ ZH DUH JRLQJ WR VHH WKH VWXEEOHV UXQWLPH ELQGLQJ DSSURDFK7KH
&25%$ '\QDPLF ,QYRFDWLRQ ,QWHUIDFH ',,  &25%$V ',, DOORZV WKH FOLHQW WR SLFN XS DQ\
WDUJHW REMHFW DW DQ\ UXQWLPH DQG G\QDPLFDOO\ LQYRNH LWV PHWKRGV 7KH FOLHQW FDQ LQYRNH DQ\
RSHUDWLRQ RQ DQ\ VHUYHU REMHFW ZLWKRXW UHTXLULQJ DQ\ SUHFRPSLOHG VWXEV 7KLV PHDQV WKDW WKH
FOLHQW GLVFRYHUV LQWHUIDFHUHODWHG LQIRUPDWLRQ DW UXQWLPH DQG NQRZV KRZ WR FDOO WKHP ,W UHTXLUHV
QR

FRPSLOH

V\VWHPV

WLPH

WR

NQRZOHGJH

UHPDLQ

IOH[LEOH

7KH

DQG

',,

SURYLGHV

H[WHQVLEOH

7KLV

YHU\

LV

G\QDPLF
YHU\

HQYLURQPHQW

GHVLUDEOH

IHDWXUH

WKDW

SHUPLWV

HVSHFLDOO\

LQ

LQWHUJDODFWLF HQYLURQPHQW OLNH WKH ,QWHUQHW

/HW XV QRZ VHH KRZ WKH FOLHQWV GLVFRYHU WKH UHPRWH REMHFWV 7KLV LV DFFRPSOLVKHG XVLQJ D YDULHW\
RI PHFKDQLVPV 2I DOO WKH DSSURDFKHV WKH VLPSOHVW DSSURDFK LV WR SURYLGH WKH FOLHQW ZLWK WKH
VWULQJLILHG REMHFW UHIHUHQFH 7KH FOLHQW FDQ WKHQ FRQYHUW WKH VWULQJ LQWR D OLYH REMHFW UHIHUHQFH
DQG PDNH WKH FRQQHFWLRQ 7KH FOLHQWV FDQ DOVR ORRN XS WKH REMHFWV E\ QDPH XVLQJ WKH &25%$
1DPLQJ 6HUYLFH &16 RU WKH\ FDQ DOVR GLVFRYHU WKH REMHFWV XVLQJ WKH 7UDGHUV 6HUYLFH 2QFH
FOLHQWV GLVFRYHU WKH REMHFW WKH\ ZLOO OHDG WKH &25%$ ',, WR LQYRNH WKH RSHUDWLRQV 7KH RWKHU
DOWHUQDWLYH LV WR GRZQORDG WKH -DYD REMHFW ZLWK D SUHEXLOW FOLHQW IRU D SDUWLFXODU VHUYLFH %RWK WKH
DSSURDFKHV DUH FRUUHFW 1RZ ZH ZLOO VHH D SURJUDP WKDW XVHV &25%$V ',,

,Q WKLV SURJUDP WKH VHUYHU SURJUDP LV WKH VDPH DV ZH KDYH VHHQ HDUOLHU IRU VWDWLF FRXQW SURJUDP
LQ

VHVVLRQ

RQH

6HUYHUV

GRQW

FDUH

ZKHWKHU

WKH

FOLHQWV

FDOO

WKHP

XVLQJ

',,

RU

WKURXJK

SUHFRPSLOHG VWXEV ,W LV DOO WKH VDPH DV IDU DV WKH VHUYHU LV FRQFHUQHG  %XW WKH FOLHQW SURJUDP
KDV WR EH UHZULWWHQ 7KH '\QDPLF &OLHQW LV PXFK PRUH FRPSOH[ WKDQ WKH VWDWLF FOLHQW /HW XV VHH
WKH SURJUDP EHKDYLRU QRZ $V WKH ILUVW VWHS ZH KDYH WR ILUVW ILQG WKH REMHFW DQG LWV UHIHUHQFH WR
ZKLFK ZH ZDQW WR LQYRNH D PHWKRG 2QFH ZH KDYH REMHFW UHIHUHQFH ZH KDYH WR IROORZ WKH VWHSV
JLYHQ EHORZ

Client Server programming in CORBA


1RZ OHW XV VHH KRZ WR ZULWH D FOLHQW VHUYHU SURJUDP LQ -DYD 7KLV LV D YHU\ VLPSOH &25%$
SURJUDP +HUH ZH KDYH D VHUYHU DQG D FOLHQW

Comp-U-Learn

235

Advanced Java Programming

%HIRUH ZULWLQJ DQ DSSOLFDWLRQ ILUVW ZH ZLOO VHH KRZ WR LQVWDOO WKH &25%$ SURGXFW *HW WKH
&25%$

SURGXFW DQG WKH FRUUHVSRQGLQJ -'. +HUH ZH XVH &25%$ IRU -$9$  VRIWZDUH

&25%$ IRU -$9$  LV FRPSDWLEOH ZLWK RQO\ -'. ,W LV QRW FRPSDWLEOH ZLWK -'.  VR
LQVWDOO -'.  ZKLOH LQVWDOOLQJ WKH &25%$ SURGXFW

:H DUH XVLQJ 9LVL*HQLFVV 9LVL%URNHU IRU RXU &25%$ GHYHORSPHQW 7KH FRPSLOHU WKDW FRPHV
DORQJ ZLWK 9LVL%URNHU LV LGOMDYD :H DUH XVLQJ WKLV FRPSLOHU WR FRPSLOH RXU LGO ILOHV )LUVW ZH
KDYH WR LQVWDOO 9LVLJHQLFV 9LVL%URNHU VRIWZDUH LQ RXU PDFKLQH 1H[W ZH KDYH WR XQMDU WKH MDU
ILOHV ZKLFK DUH LQ F?YLVLJHQLF?YEURNHU?OLE :H FDQ HLWKHU XVH ZLQ]LS RU MDU XWLOLW\ WR XQMDU WKH
ILOHV 7KHQ ZH KDYH WR VHW WKH FODVVSDWK ,QFOXGH F?YLVLJHQLF?YEURNHU?ELQ DQG WKH QHZ GLUHFWRU\
ZKLFK FRQWDLQV WKH XQMDUUHG ILOHV DORQJ ZLWK WKH H[LVWLQJ SDWK :H FDQ DOVR GR WKLV E\ ZULWLQJ LQ
DXWRH[HFEDW

RU

LQ

FRPPDQG

OLQH

$IWHU

WKHVH

VWHSV

QRZ

RXU

FODVV

SDWK

VKRXOG

KDYH

&?MGN?ELQ F?YLVLJHQLF?YEURNHU?ELQ F?YLVLJHQLF?YEURNHU?OLE $IWHU LQFOXVLRQ RI WKH SDWK


ZH KDYH WR UXQ WKH DXWRH[HFEDW RQFH PRUH

&RPSLOH WKH LGO SURJUDP XVLQJ

WKH FRPSLOHU LGOMDYD

/HW XV EXLOG D &25%$ DSSOLFDWLRQ


DSSOLFDWLRQ

ZLOO

RSHQ

EDQN

)LUVW ZH ZLOO VHH ZKDW WKLV DSSOLFDWLRQ LV JRLQJ WR GR

DFFRXQW

DQG

WR

TXHU\

FRPPXQLFDWLRQ LV XVLQJ WKH 25%

Step 1:
:ULWH DQ ,'/ SURJUDP DQG QDPH LW DV %DQNLGO

module Bank {
interface Account {
float balance();
};
interface AccountManager {
Account open(in string name);
};
};

&RPSLOH WKH LGO SURJUDP XVLQJ

WKH FRPSLOHU LGOMDYD

)LJ  VKRZV WKH FRPSLODWLRQ

236

Comp-U-Learn

WKH

EDODQFH

LQ

EDQN

DFFRXQW

7KLV
7KH

CORBA An Insight

Fig. 10.4
7KH WUDYHUVLQJ VWDUWV QHZ IROGHU ZLWK WKH LGO QDPH LV FUHDWH LH %DQN IROGHU LV FUHDWHG ZLWK DOO
WKH FRUUHVSRQGLQJ ILOHV

/LVW RI ILOHV ZLWKLQ WKH IROGHU %DQN

Account.java
AccountHolder.java
AccountHelper.java
_st_Account.java
_AccountImplBase.java
AccountOperations.java
_tie_Account.java
_example_Account.java
AccountManager.java
AccountManagerHolder.java
AccountManagerHelper.java
_st_AccountManager.java
_AccountManagerImplBase.java
AccountManagerOperations.java
_tie_AccountManager.java
_example_AccountManager.java
AccountManager.class
AccountManagerHelper.class
Account.class
_st_AccountManager.class

Comp-U-Learn

237

Advanced Java Programming


AccountHelper.class
_st_Account.class
_AccountManagerImplBase.class
_AccountImplBase.class

Step 2:
1RZ LWV WLPH WR ZULWH WKH LPSOHPHQWDWLRQ SURJUDP  7KH SURJUDP $FFRXQW0DQDJHU,PSOMDYD LV
FRPSLOHG

8VLQJ YEMF FRPSLOHU ZKLFK LV SURYLGHG E\ YLVLJHQLF


&RGLQJ IRU $FFRXQ0DQDJHU,PSOMDYD

// AccountManagerImpl.java
import java.util.*;
public class AccountManagerImpl extends
Bank._AccountManagerImplBase {
public AccountManagerImpl(String name) {
super(name);
}
public synchronized Bank.Account open(String name) {
// Lookup the account in the account dictionary.
Bank.Account account = (Bank.Account) _accounts.get(name);
// If there was no account in the dictionary, create one.
if(account == null) {
// Make up the accounts balance, between 0 and 1000
dollars.
float balance = Math.abs(_random.nextInt()) % 100000 /
100f;
// Create the account implementation, given the balance.
account = new AccountImpl(balance);
// Make the object available to the ORB.
_boa().obj_is_ready(account);
// Print out the new account.
System.out.println(Created + name + s account: +
account);
// Save the account in the account dictionary.
_accounts.put(name, account);
}
// Return the account.
return account;
}
private Dictionary _accounts = new Hashtable();
private Random _random = new Random();
}
&RPSLOH WKH SURJUDP XVLQJ YEMF FRPSLOHU

238

Comp-U-Learn

CORBA An Insight

Fig. 10.5
Step 3:
7KH QH[W VWHS LV WR ZULWH WKH VHUYHU SURJUDP

Server.java
// Server.java
public class Server {
public static void main(String[] args) {
// Initialize the ORB.
org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args,null);
// Initialize the BOA.
org.omg.CORBA.BOA boa = orb.BOA_init();
// Create the account manager object.
Bank.AccountManager manager =
new AccountManagerImpl(BankManager);
// Export the newly created object.
boa.obj_is_ready(manager);
System.out.println(manager + is ready.);
// Wait for incoming requests
boa.impl_is_ready();
}
}
%DQN VHUYHU FUHDWHV DQ LQVWDQFH RI WKH %DQN DQG FDOOV RUJRPJ&25%$%2$LPSOBLVBUHDG\ WR
PDNH WKLV REMHFW DYDLODEOH WR FOLHQW SURJUDPV
PHWKRGV

RSHQ

ZKLFK

RSHQV

EDQN

7KH %DQN 6HUYHU LPSOHPHQWDWLRQ LPSOHPHQWV WZR

DFFRXQW

DQG

EDODQFH

ZKLFK

UHWXUQV

WKH

EDODQFH

LQ

SHUVRQV DFFRXQW ZKRVH QDPH LV SURYLGHG DV LQSXW E\ JHQHUDWLQJ D UDQGRP QXPEHU 

Comp-U-Learn

239

Advanced Java Programming

)LJ  FRPSLOHV WKH VHUYHU SURJUDP XVLQJ WKH YEMF FRPSLOHU

Fig. 10.6
Step 4:
1RZ WKH QH[W WXUQ JRHV WR WKH FOLHQW 2QO\ WKURXJK WKH FOLHQW PDFKLQH ZH DUH JRLQJ WR JHW WKH
UHVXOW IRU WKH 4XHU\

// Client.java
public class Client {
public static void main(String[] args) {
// Initialize the ORB.
org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args,null);
// Locate an account manager.
Bank.AccountManager manager =
Bank.AccountManagerHelper.bind(orb, BankManager);
// use args[0] as the account name, or a default.
String name = args.length > 0 ? args[0] : Jack B. Quick;
// Request the account manager to open a named account.
Bank.Account account = manager.open(name);
// Get the balance of the account.
float balance = account.balance();
// Print out the balance.
System.out.println
(The balance in + name + s account is $ + balance);
}
}

240

Comp-U-Learn

CORBA An Insight

)LJ  VKRZV WKH FRPSLODWLRQ IRU WKH ILOH &OLHQWMDYD XVLQJ WKH YEMF FRPSLOHU

7KLV LV WKH %DQN FOLHQW ,W ELQGV WR WKH $FFRXQW0DQDJHU REMHFW DQG LQYRNHV RSHQ WR RSHQ D
EDQN DFFRXQW ,W WKHQ LQYRNHV EDODQFH RQ WKH DFFRXQW REMHFW UHIHUHQFH REWDLQHG WR TXHU\ WKH
EDODQFH

Fig. 10.7
Step 5:
$IWHU

FRPSLOLQJ DOO WKH SURJUDPV VWDUW WKH 6PDUW $JHQW WR UXQ EHIRUH UXQQLQJ WKH VHUYHU

:H ZLOO VHH KRZ WR VWDUW WKH DJHQW LQ WKH EHORZ )LJXUH 

Fig. 10.8
Comp-U-Learn

241

Advanced Java Programming

Fig. 10.9
$IWHU GRXEOH FOLFNLQJ  YLVLEURNHU 6PDUW $JHQW ZLQGRZ LV RSHQHG 'RQW FORVH WKLV ZLQGRZ MXVW
PLQLPL]H WKH ZLQGRZ 

7KH DOWHUQDWLYH IRU WKLV LV

C:\visigenic\vbroker\bin> start osagent


2QFH ZH HQWHU WKLV FRPPDQG DQG SUHVV HQWHU DXWRPDWLFDOO\ WKH YLVLEURNHU VPDUW DJHQW ZLQGRZ
LV RSHQHG

Step 6:
, WKLQN ZH DUH IDPLOLDU ZLWK 50, 6LPLODUO\ UXQ WKH VHUYHU SURJUDP LQ RQH '26 ZLQGRZ DQG
DIWHU D PLQXWH UXQ WKH FOLHQW RQ WKH RWKHU '26 ZLQGRZ 2. ILQH 8SWR QRZ ZH KDYH EHHQ
VXFFHVVIXO :H ZLOO VWDUW UXQQLQJ WKH SURJUDP VHUYHU
VKRZQ LQ WKH )LJXUH 

Fig. 10.10
242

Comp-U-Learn

SURJUDP XVLQJ WKH FRPPDQG YEM ,W LV

CORBA An Insight

1RZ WKH VHUYHU REMHFW LV UHDG\

Step 7:
7KH PDMRU VWHS LV WR UXQ WKH FOLHQW WR YLHZ WKH ILQDO UHVXOW
UXQ

WKH

FOLHQW

SURJUDP

:KLOH

UXQQLQJ

WKH

SURJUDP

-XVW RSHQ DQRWKHU '26 ZLQGRZ DQG

GRQW

IRUJHW

WR

JLYH

WKH

QDPH

RI

WKH

DFFRXQWDQW DV D FRPPDQG OLQH DUJXPHQW H[ NULVK  ,I WKH QDPH LV QRW JLYHQ DV SDUDPHWHU WKHQ LW
WDNHV WKH GHIDXOW QDPH )LJ  VKRZV WKH ILQDO RXWSXW

Fig. 10.11

7KH RXWSXW VKRZQ DERYH LV QRWKLQJ EXW EDODQFH DPRXQW IRU WKH FOLHQW NULVK 7KH DPRXQW LV
VHOHFWHG DW UDQGRP

Summary
In this session, we saw the basic concepts of CORBA and a simple program to
implement it. We saw most of the important concepts in CORBA that are essential
for programming. We also event about IIOP, the Internet Inter ORB Protocol that
is based on TCP. This protocol implementation is mandatory for any CORBA 2.0
compliant ORB.IIOP allows interoperability between different ORBs. This

Comp-U-Learn

243

Advanced Java Programming

interoperability is achieved through bridges. Exception handling is a generic part


of client/server programming with CORBA. The idl2java compiler generates the
CORBA system exceptions that a method can generate. The ORB typically
generates these exceptions. The idl2java will generate the appropriate Java
exception classes for both types of errors. To take advantage of error handling, we
must surround our code within try blocks and corresponding catch statements. It
is better to handle all the possible exceptions that can come up.

Going Over It Again


I. Fill in the blanks



&25%$ VWDQGV IRU BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB



5HSRVLWRU\ ,GV LV JHQHUDWHG YLD BBBBBBBBBBBBBBBB LQ ,'/



BBBBBBBBBBBBBBBB

SURYLGHV

UXQ

WLPH

UHSRVLWRU\

RI

LQIRUPDWLRQ

DERXW

WKH

FODVVHV

VHUYHU VXSSRUWV



BBBBBBBBBBBBBBBB VHUYLFH GHILQHV RSHUDWLRQV IRU FUHDWLQJ FRS\LQJ PRYLQJ DQG GHOHWLQJ
FRPSRQHQWV



,,23 VWDQGV IRU BBBBBBBBBBBBBBBB

II. State True or False



'LVWULEXWHG $SSOLFDWLRQV DUH PRVWO\ VLQJOH WLHU DSSOLFDWLRQV



,'/ VWDQGV IRU ,QWHUQHW 'HILQLWLRQ /DQJXDJH



2EMHFWV RQ WKH 25% FDQ DFW RQO\ DV FOLHQW



,25 VWDQGV IRU ,QWHU RSHUDEOH 2EMHFW UHIHUHQFHV



,GOMDYD LV WKH &25%$ 25% FRPSLOHU DYDLODEOH LQ 9LVL*HQLF

244

Comp-U-Learn

CORBA An Insight

III. One line Answers




*LYH VRPH H[DPSOHV IRU 'LVWULEXWHG $SSOLFDWLRQ



:ULWH VKRUW QRWHV RQ &25%$



/LVW WKH DGYDQWDJHV RI &25%$ RYHU RWKHU GLVWULEXWHG DSSOLFDWLRQV



([SODLQ 2EMHFW 5HTXHVW %URNHU



:ULWH VKRUW QRWHV RQ ,QWHUIDFH 5HSRVLWRU\UW QRWHV RQ ,QWHUIDFH 5HSRVLWRU\

Comp-U-Learn

245

Session 11

Extending Java

On Completion of this Session


you will be able to understand...

) Reflection
) Reflection APIs
) Security Manager
) Native Methods

In This Session...

Reflection

The java.lang.reflect

Method Class

Constructor Class

Modifer Class

Reflection Example

Security Concerns

Security Manager

Runtime Class

Native Methods

Calling Native Methods

Javah

Extending Java
$SDUW IURP VRPH RI WKH EUHDWKWDNLQJ WHFKQRORJLHV OLNH 50, DQG &25%$ -DYD FRPHV RXW ZLWK D
FRXSOH RI PLQRU \HW YHU\ VLJQLILFDQW IHDWXUHV 7KHVH DGGLWLRQDO IHDWXUHV RI -DYD HQDEOH D -DYD
SURJUDPPHU WR SHUIRUP 1HWZRUN SURJUDPPLQJ UHDG ,QWHUQHW DQG WR SULPDULO\ GHEXJ KLV RZQ
FRGH TXLWH HDVLO\ 7KH QHZHU VHLVPLF DVSHFWV RI -DYD QRWZLWKVWDQGLQJ VRPH VWLOO GR ILQG D QHHG WR
JHW EDFN WR OHJDF\ SURJUDPPLQJ (YHQ ZLWK -DYD 2IWHQ LW LV TXLWH WHPSWLQJ IRU D QRZ -DYD
SURJUDPPHU WKHQ && SURJUDPPHU WR ZULWH D PHWKRG RU WZR LQ && DQG FRPELQH LW
ZLWK KLV SUHVHQW -DYD FRGH %XW -DYD EHLQJ D SODWIRUP LQGHSHQGHQW HQWLW\ SRPSRXVO\ ORRNV GRZQ
RQ WKHVH ODQJXDJHV WR WKH H[WHQW RI FDOOLQJ WKHP 1DWLYH &RGH WKRXJK LW VXSSRUWV VXFK QDWLYH
FRGH LQWHUIDFHV LI LW LV WRR LUUHVLVWLEOH
,QWHUQHW KDV DZDNHQHG WKH ORQJ VOXPEHUHG TXHVW RI &RPSXWHU 3URJUDPPHUV 7KH 6HFXULW\ -DYD
WRR FDOOV IRU FHUWDLQ EDVLF VHFXULW\ UHTXLUHPHQWV ZKHQ KDYLQJ WR GR QHWZRUN EDVHG FRGLQJ 7KLV
VHVVLRQ GHDOV ZLWK VXFK PLVFHOODQHRXV WRSLFV XQGHU WKH WLWOH ([WHQGLQJ -DYD 7KLV DQG WKH QH[W
VHVVLRQ WULHV WR H[WHQG WKH FDSDELOLWLHV RI -DYD EH\RQG LWV FRQYHQWLRQDO XVDJH +HQFH WKH WLWOH

Reflection
,Q WKLV VHFWLRQ ZH DUH JRLQJ WR VHH WKH XVDJH RI WKH 5HIOHFWLRQ $3,V %HIRUH WKDW ZH KDYH WR
NQRZ ZKDW 5HIOHFWLRQ LV 8VLQJ UHIOHFWLRQ ZH FDQ JHW WKH LQIRUPDWLRQ DERXW WKH DQ\ -DYD FODVV DW
UXQWLPH /HW XV DVVXPH WKLV FDVH $ GHYHORSHU ZDQWV VRPH LQIRUPDWLRQ DERXW D FODVV DQG WKH
PHWKRGV LQ WKDW FODVV RU LQWHUIDFHV DW UXQWLPH ,Q WKLV FDVH -DYD 5HIOHFWLRQ $3,V SURYLGHV VRPH
SUHGHILQHG FODVVHV

DQG

PHWKRGV WR

JHW WKH

LQIRUPDWLRQ

6R

WKH

GHYHORSHU

FDQ

JHW

WKH

LQIRUPDWLRQ DERXW WKH FODVVHV E\ UXQQLQJ D SURJUDP ZKLFK XVHV WKH 5HIOHFWLRQ $3,V
1RZ FRPH WR WKH QH[W XVDJH

:H KDYH VHHQ LQWURVSHFWLRQ FRQFHSWV LQ WKH -DYD %HDQV VHVVLRQ

,QWURVSHFWLRQ PHDQV WR LQTXLUH :KHQ ZH JHW DQ REMHFW FUHDWHG E\ VRPHRQH HOVH IURP VRPH
RWKHU PDFKLQH ZH PD\ LQTXLUH DERXW LWV FRQVWUXFWRUV

LWV GDWD RU DERXW LWV PHWKRGV ,W LV DOVR

QHFHVVDU\ WR NQRZ DERXW WKHP EHIRUH ZH GHVHULDOL]H WKH UHFHLYHG REMHFW 7KDW LV UHDVRQ ZK\
VHULDOL]DWLRQ DQG UHIOHFWLRQ JR WRJHWKHU 6R LQ WKLV VHFWLRQ DQG VXFFHHGLQJ VHFWLRQ ZH

DUH JRLQJ

WR VHH WKH GHWDLOV DERXW UHIOHFWLRQ


7KH UHIOHFWLRQ $3, DOORZV -DYD FRGH WR H[DPLQH FODVVHV DQG REMHFWV DW UXQ WLPH 7KH QHZ
UHIOHFWLRQ FODVVHV DOORZ XV WR FDOO DQRWKHU FODVVV PHWKRGV G\QDPLFDOO\ DW UXQ WLPH :LWK
UHIOHFWLRQ FODVVHV ZH FDQ DOVR H[DPLQH DQ LQVWDQFHV ILHOGV DQG FKDQJH WKH ILHOGV FRQWHQWV 7KH
UHIOHFWLRQ FODVVHV DOVR HQDEOH XV WR FUHDWH QHZ FODVVHV DQG DUUD\ LQVWDQFHV RQ WKH IO\
7KH QHZ UHIOHFWLRQ $3, LV LQWHQGHG WR SURYLGH WKH IXQFWLRQDOLW\ UHTXLUHG E\ WKH MDYDEHDQV
SDFNDJHV WR DFFHVV WKH SXEOLF PHWKRGV DQG ILHOGV RI DUELWUDU\ FODVVHV DW UXQ WLPH 7KH UHIOHFWLRQ
$3, DOVR SURYLGHV DSSOLFDWLRQV VXFK DV GHEXJJHUV ZLWK DFFHVV WR WKH GHFODUHG PHPEHUV RI D
FODVV

Comp-U-Learn

249

Advanced Java Programming


2YHU DQG DERYH WKH QHZ UHIOHFWLRQ FODVVHV VRPH DGGLWLRQDO FODVVHV KDYH EHHQ PDGH WR WKH
MDYDODQJ SDFNDJH %\WH DQG VKRUW FODVVHV DQDORJRXV WR WKH ,QWHJHU FODVV KDYH EHHQ DGGHG WR
VHUYH DV ZUDSSHUV IRU WKH FRUUHVSRQGLQJ SULPLWLYH W\SHV

The java.lang.reflect
7KH UHIOHFWLRQ $3, FRQVLVWV RI MDYDODQJ FODVV DQG WKH MDYDODQJUHIOHFW FODVVHV 7KH\ DUH )LHOG
0HWKRG &RQVWUXFWRU $UUD\ 0RGLILHU DQG 5HIOHFW3HUPLVVLRQ FODVVHV 7KH ILUVW WKUHH RI WKHVH
UHIOHFW FODVVHV UHSUHVHQW WKH FRUUHVSRQGLQJ PHPEHUV RI FODVVHV DQG LQWHUIDFHV 7KH $UUD\ FODVV
SURYLGHV PHWKRGV IRU FUHDWLQJ DFFHVVLQJ DQG PRGLI\LQJ DUUD\V 7KH ODVW SURYLGHV PHWKRGV IRU
GHFRGLQJ PRGLILHUV VXFK DV VWDWLF DQG SXEOLF UHWXUQHG IRU FODVVHV DQG WKHLU FRPSRQHQWV $OO
WKHVH FODVVHV DOORZ ZLGHQLQJ FRQYHUVLRQV ZKHQ DSSURSULDWH EXW WKURZ DQ ,OOHJDO $UJXPHQW
([FHSWLRQ LI WKH YDOXH KDV WR EH QDUURZHG )RU H[DPSOH WKH FODVVHV GR QRW FRQYHUW D GRXEOH WR
D IORDW

Class class
7KH &ODVV FODVV ZKLFK UHPDLQV LQ WKH MDYDODQJ SDFNDJH IRU EDFNZDUGV FRPSDWLELOLW\ SURYLGHV
UXQQLQJ FRGH ZLWK D UHSUHVHQWDWLRQ RI -DYD W\SHV 7KHUH DUH QR SXEOLF FRQVWUXFWRUV IRU WKH &ODVV
FODVV 7KH YLUWXDO PDFKLQH FRQVWUXFWV &ODVV REMHFWV FDQ EH REWDLQHG LW WKH IRU1DPH PHWKRG
7KH JHW)LOHG  JHW)LHOGV  JHW'HFODUHG)LHOG  JHW0HWKRG  JHW 0HWKRGV  JHW'HFODUHG0HWKRGV
DUH WKH LPSRUWDQW PHWKRGV XQGHU &ODVV FODVV

Member Interface
7KH PHPEHU LQWHUIDFH LV XVHG WR SURYLGH LQIRUPDWLRQ DERXW WKH )LHOG 0HWKRG DQG &RQVWUXFWRU
FODVVHV ,W GHILQHV PHWKRGV WR JHW LQIRUPDWLRQ VXFK DV WKH QDPH GHFODULQJ FODVV DQG PRGLILHUV
IRU W\SH PHPEHUV 7ZR VWDWLF FRQVWDQWV 38%/,& DQG '(&/5('

DUH XVHG E\ WKH VHFXULW\

PDQDJHU WR GHWHUPLQH ZKHWKHU FRGH FDQ DFFHVV PHPEHUV

Field Class
7KH )LHOG FODVV LV XVHG WR REWDLQ LQIRUPDWLRQ DERXW WKH DFFHVV WKH ILHOG YDULDEOHV RI D FODVV ,W
FRQVLVWV RI PRUH WKDQ  PHWKRGV 7KH IROORZLQJ WDEOH OLVWV VRPH RI WKH LPSRUWDQW PHWKRGV DQG
WKHLU XVDJH

Method
getName()
getDeclaringClass()
getType()
getModifiers()

250

Usage
Returns the name of the variable.
Identifies the class in which the variable declared.
Provides access to the data type of variable.
Encodes the variables modifiers as an integer that
can be decoded by the Modifier.
Comp-U-Learn

Extending Java

Method
get()
GetBoolean()/setBoole
an
getByte()/setByte()
getInt()/setInt()
getChar()/setChar()
getDouble()/setDouble
()
getFloat()/setFloat()
getLong()/setLong()

Usage
Access the value of the variable.
Gets and sets the boolean value.
Gets and sets the byte value.
Gets and sets the Integer value.
Gets and sets the character value.
Gets and sets the double value.
Gets and sets the float value.
Gets and sets the long value.

Method Class
-XVW DV WKH )LHOG FODVV UHSUHVHQWV WKH ILHOG RI D W\SH WKH PHWKRG FODVV UHSUHVHQWV WKH PHWKRGV RI
D FODVV 7KH 0HWKRG FODVV SURYLGHV PHWKRGV WR GHWHUPLQH WKH UHWXUQ W\SH SDUDPHWHUV DQG
H[FHSWLRQV WKURZQ E\ WKH UHSUHVHQWHG PHWKRG 7KH JHW1DPH PHWKRG UHWXUQV WKH QDPH RI WKH
PHWKRG 7KH JHW'HFODULQJ&ODVV LV XVHG WR JLYH D FODVV LQ ZKLFK WKH PHWKRG LV XVHG 7KH
LQYRNH PHWKRG LV XVHG WR LQYRNH WKH PHWKRG IRU D SDUWLFXODU REMHFW DQG OLVW RI SDUDPHWHUV
$OVR WKLV FODVV KDYLQJ PHWKRGV VXFK DV JHW3DUDPHWHUV  JHW0RGLILHUV  JHW([FHSWLRQ7\SHV 
JHW5HWXUQ7\SH  7KH QHZ,QVDWDQFH PHWKRG LV XVHG WR REWDLQ DQ LQIRUPDWLRQ DERXW WKH QHZ
LQVWDQFHV

Array Class
7KH $UUD\ FODVV LV XVHG WR REWDLQ LQIRUPDWLRQ DERXW FUHDWH DQG PDQLSXODWH DUUD\V ,W FRQVLVWV RI
 VWDWLF PHWKRGV 7KH JHW/HQJWK LV XVHG WR DFFHVV WKH OHQJWK RI DQ DUUD\ 7KH JHW PHWKRG LV
XVHG WR DFFHVV DQ LQGH[HG HOHPHQW RI DQ DUUD\ 7KH JHW%RROHDQ  JHW%\WH  JHW,QW JHW)ORDW 
JHW&KDU  JHW'RXEOH  JHW/RQJ  JHW6KRUW PHWKRGV DUH XVHG WR DFFHVV DQ LQGH[HG RI DQ DUUD\
DV D SDUWLFXODU SULPLWLYH GDWD W\SHV
7KH VHW PHWKRG LV XVHG WR DFFHVV DQ LQGH[HG HOHPHQW RI DQ DUUD\ 7KH VHW%RROHDQ  VHW%\WH 
VHW,QW VHW)ORDW  VHW&KDU  VHW'RXEOH  VHW/RQJ  VHW6KRUW PHWKRGV DUH XVHG WR VHW DQ
LQGH[HG RI DQ DUUD\ DV D SDUWLFXODU SULPLWLYH GDWD W\SHV 7KH QHZ,QVWDQFH PHWKRG LV XVHG WR
FUHDWH QHZ DUUD\V RI VSHFLILHG VL]H

Constructor Class
7KH &RQVWUXFWRU FODVV UHSUHVHQWV D FRQVWUXFWRU IRU D FODVV $ &RQVWUXFWRU LQVWDQFH FDQ EH XVHG
WR FUHDWHG D QHZ LQVWDQWLDWLRQ RI WKH GHFODULQJ FODVV $V ZLWK WKH PHWKRG DQG )LHOG FODVVHV
LQVWDQFHV FDQ EH FUHDWHG RQO\ E\ WKH YLUWXDO PDFKLQH DQG DUH UHWULHYHG ZLWK WKH &ODVV FODVVV

Comp-U-Learn

251

Advanced Java Programming


JHW&RQVWUXFWRU DQG UHODWHG PHWKRGV /LNH RWKHU FODVVHV WKH FRQVWUXFWRU FODVV DOVR SURYLGHV
PHWKRGV

VXFK

DV

JHW1DPH 

JHW'HFODULQJ&ODVV 

QHZ,QVWDQFH 

JHW3DUDPHWHU7\SHV 

JHW0RGLILHUV DQG JHW([FHSWLRQ7\SHV 

Modifier Class
7KH 0RGLILHU FODVV LV D FRQYHQLHQFH FODVV WKDW GHFRGHV WKH -DYD ODQJXDJH PRGLILHUV UHWXUQHG E\
WKH RWKHU UHIOHFWLRQ $3,V FODVVHV $OO WKH 0RGLILHU PHWKRGV DUH VWDWLF &ODVVHV WKDW LPSOHPHQW WKH
0HPEHU LQWHUIDFH GHILQH D JHW0RGLILHUV PHWKRG ZKLFK UHWXUQ DQ LQWHJHU 7KLV LQWHJHU FDQ EH
SDVVHG WR WKH PHWKRGV RI WKH PRGLILHU FODVV WR GHWHUPLQH ZKLFK PRGLILHUV DUH SUHVHQW 0HWKRGV
VXFK DV LV3XEOLF DUH SURYLGHG IRU DOO WKH -DYD PRGLILHUV SXEOLF SULYDWH SURWHFWHG VWDWLF ILQDO
VXQFKURQL]HHG YRODWLOH WUDQVLHQW QDWLYH LQWHUIDFH DQG DEVWUDFW $ WR6WULQJ PHWKRG LV DOVR
SURYLGHG LW UHWXUQV D VSDFHVHSHUDWHG OLVW RI WKH PRGLILHUV UHSUHVHQWHG E\ WKH LQW SDUDPHWHU

ReflectionPermission Class
7KH 5HIOHFWLRQ3HUPLVVLRQ FODVV LV D SHUPLVVLRQ FODVV ZKLFK LV LQWURGXFHG LQ -'.  ,W LV XVHG
WR VSHFLI\ ZKHWKHU WKH GHIDXOW ODQJXDJH DFFHVV FKHFNV VKRXOG EH VXSSUHVVHG IRU UHIOHFWHG REMHFWV
:H ZLOO OHDUQ WKH XVHV RI WKLV FODVV LQ 6HFXULW\ UHODWHG WRSLFV LQ WKH VXFFHHGLQJ VHFWLRQV

Reflection Example
,Q WKLV VHFWLRQ ZH DUH JRLQJ WR VHH WKH XVDJH RI WKH 5HIOHFWLRQ $3, DQG FODVVHV XQGHU
MDYDODQJUHIOHFW

SDFNDJH

7KH

IROORZLQJ

SURJUDP

VKRZV

KRZ

WKH

GLVFRYHUV DQG GLVSOD\V WKH LQIRUPDWLRQ DERXW FODVVHV DQG LQWHUIDFHV

Example 11.1:
import java.lang.reflect.*;
public class myrefapp
{
public static void main(String args[])
{
String parm = args[0];
Class className = void.class;
try
{
className= Class.forName(parm);
}catch (ClassNotFoundException ex){
System.out.println(Not a class or interface.);
System.exit(0);
}
describeClassOrInterface(className,parm);
}

252

Comp-U-Learn

DERYH

SDFNDJH

FODVVHV

Extending Java
static void describeClassOrInterface(Class className,String
name)
{
if(className.isInterface())
{
System.out.println(Interface: +name);
displayMethods(className.getDeclaredMethods());
}
else
{
System.out.println(Class: +name);
displayInterfaces(className.getInterfaces());
displayMethods(className.getDeclaredMethods());
}
}
static void displayInterfaces(Class[] interfaces)
{
if(interfaces.length>0){
System.out.println(Interfaces: );
for(int i=0;i<interfaces.length;++i)
System.out.println(interfaces[i].getName());
}
}
static void displayMethods(Method[] methods){
if(methods.length>0){
System.out.println(Methods: );
for(int i=0;i<methods.length;++i)
System.out.println(methods[i].toString());
}
}
}
&RPSLOH WKH DERYH SURJUDP XVLQJ MDYDF DQG UXQ WKH SURJUDP E\ JLYLQJ WKH IROORZLQJ FRPPDQG
LQ WKH FRPPDQG OLQH /HW XV WU\ WR JHW LQIRUPDWLRQ DERXW WKH PHWKRGV LQ MDYDDSSOHW$SSOHW
FODVV 6R LQ FRPPDQG OLQH JLYH WKH FODVV QDPH DV DQ DUJXPHQW DV IROORZV

C:\jdk1.2\bin>java refapp java.applet.Applet


Class: java.applet.Applet
Methods:
public void java.applet.Applet.destroy()
public java.applet.AppletContext
java.applet.Applet.getAppletContext()
public java.lang.String java.applet.Applet.getAppletInfo()
public java.applet.AudioClip
java.applet.Applet.getAudioClip(java.net.URL)
public java.applet.AudioClip
java.applet.Applet.getAudioClip(java.net.URL,java.lang.String)
public java.net.URL java.applet.Applet.getCodeBase()

Comp-U-Learn

253

Advanced Java Programming

public java.net.URL java.applet.Applet.getDocumentBase()


public java.awt.Image java.applet.Applet.getImage(java.net.URL)
public java.awt.Image
java.applet.Applet.getImage(java.net.URL,java.lang.String)
public java.util.Locale java.applet.Applet.getLocale()
public java.lang.String
java.applet.Applet.getParameter(java.lang.String)
public java.lang.String[][] java.applet.Applet.getParameterInfo()
public void java.applet.Applet.init()
public boolean java.applet.Applet.isActive()
public static final java.applet.AudioClip
java.applet.Applet.newAudioClip(java.net.URL)
public void java.applet.Applet.play(java.net.URL)
public void
java.applet.Applet.play(java.net.URL,java.lang.String)
public void java.applet.Applet.resize(int,int)
public void java.applet.Applet.resize(java.awt.Dimension)
public final void
java.applet.Applet.setStub(java.applet.AppletStub)
public void java.applet.Applet.showStatus(java.lang.String)
public void java.applet.Applet.start()
public void java.applet.Applet.stop()
,Q WKH DERYH H[DPSOH ZH JHW WKH LQIRUPDWLRQ DERXW WKH PHWKRGV LQ WKH MDYDDSSOHW$SSOHW FODVV
/LNH WKLV ZH FDQ JHW DQ\ LQIRUPDWLRQ DERXW WKH FODVVHV LQWHUIDFHV PHWKRGV ILHOGV DUUD\V DQG
PRGLILHUV E\ VSHFLI\LQJ WKH FODVV QDPH

Security Concerns
$FFHVV WR FODVVHV XVLQJ 5HIOHFWLRQ $3, LV FRQWUROOHG E\ WKH 6HFXULW\ 0DQJHU DQG E\ WKH VWDQGDUG
-DYD ODQJXDJHV DFFHVV FRQWUROV %HIRUH DQ LQVWDQFH UHSUHVHQWLQJ D PHPEHU )LHOG 0HWKRG RU
&RQVWUXFWRU LV UHWXUQHG WKH 6HFXULW\0DQDJHUFKHFN0HPEHU$FFHVV PHWKRG LV FDOOHG ,I WKLV
FKHFN GRHV QRW WKURZ D 6HFXULW\([FHSWLRQ DFFHVV LV JUDQWHG ZLWK WKH FDYHDW RI WKH VWDQGDUG
FKHFNV IRU SULYDWH DQG SURWHFWHG GRQH E\ WKH YLUWXDO PDFKLQH
7KH DFFHVV SROLF\ IRU DSSOLFDWLRQV LV WKDW FRGH FDQ DFFHVV PHPEHUV IRU DQ\ FODVV WR ZKLFK LW FDQ
OLQN ZLWKLQ WKH VWDQGDUG ODQJXDJH FRQVWUDLQWV 7KH -'. $SSOHW6HFXULW\ FODVV DOORZ SXEOLF
PHPEHUV RI SXEOLF FODVVHV WR
DFFHVV WKH SXEOLF PHPEHUV RI FRGH ORDGHG E\ WKH VDPH ORDGHU LW DOVR DOORZV DFFHVV WR SXEOLF
V\VWHP FODVVHV WKH $SSOHW6HFXULW\ FODVV DOVR DOORZV DFFHVV WR QRQSXEOLF PHPEHUV RI FODVVHV
ORDGHG E\ WKH VDPH FODVV ORDGHU &RGH WKDW KDV EHHQ VLJQHG E\ D WUXVVHG HQWLW\ FDQ DFFHVV DOO
PHPEHUV RI V\VWHP FODVVHV

254

Comp-U-Learn

Extending Java
,Q DOO FDVHV VWDQGDUG -DYD DFFHVV FRQWUROV DUH DSSOLHG )RU H[DPSOH HYHQ WKRXJK FRGH FDQ JHW D
UHIHUHQFH WR D SURWHFWHG ILHOG WKH FRGH FDQQRW JHW RU VHW WKH YDOXH LW FDQ RQO\ ILQG RXW
LQIRUPDWLRQ DERXW WKH PHPEHU VXFK DV LWV GHFODULQJ FODVV DQG LWV QDPH

Security Manager
(DFK MDYD DSSOLFDWLRQ FDQ KDYH LWV RZQ VHFXULW\ PDQDJHU REMHFW WKDW DFWV DV D IXOOWLPH VHFXULW\
JXDUG 7KH 6HFXULW\0DQJHU FODVV LQ WKH MDYDODQJ SDFNDJH LV DQ DEVWUDFW FODVV WKDW SURYLGHV WKH
SURJUDPPLQJ LQWHUIDFH DQG SDUWLDO LPSOHPHQWDWLRQ IRU DOO -DYD 6HFXULW\ PDQDJHUV %\ GHIDXOW DQ
DSSOLFDWLRQ GRHV QRW KDYH D VHFXULW\ PDQDJHU 7KDW LV WKH -DYD UXQWLPH V\VWHP GRHV QRW
DXWRPDWLFDOO\ FUHDWH D VHFXULW\ PDQJHU IRU HYHU\ -DYD DSSOLFDWLRQ 6R E\ GHIDXOW DQ DSSOLFDWLRQ
DOORZV DOO RSHUDWLRQV WKDW DUH VXEMHFW WR VHFXULW\ UHVWULFWLRQV
7KH 6HFXULW\0DQDJHU FODVV FRQWDLQV VHYHUDO PHWKRGV WKDW FDQ EH RYHUULGGHQ WR LPSOHPHQW QRW
FXVWRPL]HG VHFXULW\ SROLFLHV 7KHVH PHWKRGV DUH RI WKH IRUP FKHFN;  ZKHUH ; LV WKH DFFHVV
EHLQJ FKHFNHG :H FDQ H[WHQG WKLV FODVV DQG RYHUULGH WKHVH PHWKRGV WR LPSOHPHQW FXVWRP
VHFXULW\ SROLFLHV
/HW XV WU\ WR XVH WKH 6HFXULW\0DQDJHU FODVV DQG LWV PHWKRGV 7KH IROORZLQJ H[DPSOH LV WKH FRGH
IRU DFFHSWLQJ RXU SDVVZRUG LQ WKH FRPPDQG OLQH DQG FRS\ WKH JLYHQ WH[W ILOH FRQWHQWV LQWR
DQRWKHU QHZ WH[W ILOH ZLWK UHVSHFW RXU SDVVZRUG 7KH H[DPSOH  LV WKH FRGH IRU YDOLGDWLQJ RXU
SDVVZRUG

Example 11.3:
import java.io.*;
import java.io.*;
class password extends SecurityManager
{
private String pass;
password(String pass)
{
super();
this.pass=pass;
}
private boolean access()
{
int a;
DataInputStream di=new DataInputStream(System.in);
String response;
System.out.println(Give the secret password!);
try
{

Comp-U-Learn

255

Advanced Java Programming


response=di.readLine();
if(response.equals(pass))
return true;
else
return false;
}
catch(IOException e)
{
return false;
}
}
public void checkRead(FileDescriptor fd)
{
if(!access())
throw new SecurityException(Wrong Password!);
}
public void checkRead(String fname)
{
if(!access())
throw new SecurityException(Wrong Password!);
}
public void checkRead(String fname, Object executionContext)
{
if(!access())
throw new SecurityException(Wrong Password!);
}
public void checkWrite(FileDescriptor fd)
{
if(!access())
throw new SecurityException(Wrong Password!);
}
public void checkWrite(String fname)
{
if(!access())
throw new SecurityException(Wrong Password!);
}
}
1RZ ZULWH WKH IROORZLQJ FRGH WR FRS\ WH[W ILOH FRQWHQWV VD\ WHPSW[W LQWR D QHZ WH[W ILOH VD\
P\WHPSW[W DIWHU JHWWLQJ WKH FRUUHFW SDVVZRUG %HIRUH UXQQLQJ WKH IROORZLQJ H[DPSOH FUHDWH D
WH[W ILOH WHPSWH[W LQ WKH

ELQ

GLUHFWRU\ ZLWK VRPH FRQWHQWV

import java.io.*;
import java.io.*;
class security
{
public static void main(String[] args)
{

256

Comp-U-Learn

Extending Java
try
{
System.setSecurityManager(new password(myname));
}
catch(SecurityException e)
{
System.err.println(Security Manager already existing!);
}
try
{
DataInputStream di= new DataInputStream(new
FileInputStream(temp.txt));
DataOutputStream dos= new DataOutputStream(new
FileOutputStream(mytemp.txt));
String i;
while((i=di.readLine())!=null)
{
dos.writeBytes(i);
}
di.close();
dos.close();
}
catch(IOException i)
{
System.err.println(Security Manager Failed!);
}
}
}
&RPSLOH WKH DERYH FRGH XVLQJ MDYDF DQG UXQ LW ,W ZLOO DVN XV WR JLYH D SDVVZRUG WZLFH ,I ZH JLYH
WKH FRUUHFW SDVVZRUG ZH FDQ JHW D QHZ WH[W ILOH P\WHPSW[W DGGHG LQ RXU

ELQ

GLUHFWRU\ 7KH

IROORZLQJ LV WKH RXWSXW LQ WKH FRPPDQG OLQH

C:\jdk1.2\bin>java security
Give the secret password!
myname
Give the secret password!
Myname

Runtime Class
7KH 5XQWLPH FODVV SURYLGHV DFFHVV WR WKH -DYD UXQWLPH V\VWHP ,W FRQVLVWV RI D QXPEHU RI
PHWKRGV WKDW LPSOHPHQW V\VWHP OHYHO VHUYLFHV 7KH IROORZLQJ DUH WKH PHWKRGV XQGHU WKH
5XQWLPH FODVV

Comp-U-Learn

257

Advanced Java Programming

Method
GetRuntime()
Exec()
Exit()
TotalMemory(), freeMemory() and gc()
Load()/loadLibrary()

Usage
Obtains access to an object of class
Runtime.
Executes external programs from the
Java runtime system.
Exits the Java runtime system.
Obtains information about their runtime
system and control memory used by it.
Loads dynamic link libraries.

7KH IROORZLQJ H[DPSOH VKRZV WKH DSSOLFDWLRQ RI WKH 5XQWLPH FODVV DQG LWV PHWKRGV ,Q WKLV
H[DPSOH ZH FDQ FKHFN WKH PHPRU\ VWDWXV RI RXU V\VWHP

Example 11.4:
import java.lang.System;
import java.lang.Runtime;
import java.io.IOException;
public class runtime
{
public static void main(String args[]) throws IOException
{
Runtime rt= Runtime.getRuntime();
System.out.println(The Total memory: +rt.totalMemory());
System.out.println(The Free memory: +rt.freeMemory());
}
}
$IWHU FRPSLOLQJ WKH DERYH SURJUDP ZH FDQ JHW WKH IROORZLQJ RXWSXW DV D PHPRU\ VWDWXV LQ WKH
E\WHV
7KH 7RWDO PHPRU\ 
7KH )UHH PHPRU\ 
,Q WKH DERYH SURJUDP ZH FDQ VHH WKH FODVV MDYDODQJ6\VWHP 7KLV FODVV SURYLGHV D VWDQGDUG
LQWHUIDFH WR FRPPRQ V\VWHP UHVRXUFHV DQG IXQFWLRQV ,W LPSOHPHQWV WKH VWDQGDUG LQSXW  RXWSXW
DOO VWUHDPV DQG VXSSOLHV D VHW RI PHWKRGV WKDW SURYLGH FRQWURO RYHU WKH -DYD UXQWLPH V\VWHP
6RPH RI WKHVH PHWKRGV GXSOLFDWH WKRVH SURYLGHG E\ WKH 5XQWLPH FODVV

258

Comp-U-Learn

Extending Java

Native Methods
,Q WKH VWDUWLQJ LWVHOI ZH KDYH VHHQ WKDW SRUWDELOLW\ LV RQH RI WKH SRZHU RI -DYD ,I ZH FUHDWHG DQ\
MDYD SURJUDP ZH FDQ UXQ LW DQ\ZKHUH WKDW VXSSRUWV WKH -DYD SODWIRUP 6XSSRVH ZH FUHDWH D QRQ
MDYD SURJUDP DQG ZH ZDQW WR DFFHVV WKDW LQ WKH -DYD SODWIRUP ZKDW ZLOO KDSSHQ" -DYD ZLOO OHW XV
WR GR WKLV EXW LW FRPHV DW WKH H[SHQVH RI SRUWDELOLW\ 2QFH ZH XVH QRQ-DYD FRGH LQ DQ
DSSOLFDWLRQ RU DSSOHW LW FDQ RQO\ UXQ RQ WKRVH SODWIRUPV WR ZKLFK WKH QRQ-DYD FRGH LV DOVR
SRUWHG 7KHVH SODWIRUPGHSHQGHQW IXQFWLRQV RU PHWKRGV ZKLFK DUH ZULWWHQ LQ QRQ-DYD ODQJXDJH
DUH FDOOHG 1DWLYH 0HWKRGV
)RU WKLV -'. SURYLGHV DQ LQWHUIDFH WKDW LV FDOOHG -DYD 1DWLYH ,QWHUIDFH -1,  7KLV LQWHUIDFH LV WKH
OLQN EHWZHHQ RXU MDYD DSSOLFDWLRQ DQG QDWLYH FRGH ,W DOORZV XV WR LQYRNH QDWLYH PHWKRGV IURP
DQ DSSOLFDWLRQ RU DSSOHW SDVV DUJXPHQWV WR WKHVH PHWKRGV DQG XVH WKH UHVXOW UHWXUQHG E\ WKH
PHWKRGV -1, SURYLGHV WKH FDSDELOLW\ WR DFFHVV QDWLYH PHWKRGV WKURXJK VKDUHG G\QDPLF OLQN
OLEUDULHV '// RQ :LQGRZV V\VWHPV
7KH -1, DOORZV -DYD SURJUDPV WR LQYRNH WKH QDWLYH PHWKRG SDVV DUJXPHQWV WR LW DQG UHFHLYH
WKH UHVXOWV UHWXUQHG E\ LW 7KH -1, DOVR SURYLGHV SURJUDPPHUV ZLWK WKH FDSDELOLW\ WR LQFOXGH WKH
-90 LQ QRQMDYD DSSOLFDWLRQ

Calling Native Methods


,Q WKLV VHFWLRQ ZH DUH JRLQJ WR VHH KRZ WKH QDWLYH PHWKRGV DUH FDOOHG E\ RXU -DYD 3URJUDP 7KH
FUHDWLRQ RI 1DWLYH 0HWKRGV FRQVLVWV RI WKH IROORZLQJ VWHSV

Create a Java class for the Native method and a Java class to include code to load
the native methods shared library.
Create a header file for the native method using javah.
Implement the native method as a non-Java code.
Compile and link this code to create a shared library.

Javah
-DYDK LV D MDYD WRRO ,W XVHG WR FUHDWH KHDGHU ILOH IRU WKH QDWLYH PHWKRG FDOO 7KH XVDJH RI MDYDK LV
DV VKRZQ EHORZ

Usage: javah [options] <classes>


where [options] include:
-help
-classpath <path>

Print this help message


Path from which to load classes

Comp-U-Learn

259

Advanced Java Programming


-bootclasspath <path> Path from which to load bootstrap
classes
-d <dir>
-o <file>
may be used)
-jni
(default)
-old
file
-stubs
-version
-verbose
-force

Output directory
Output file (only one of -d or -o
Generate JNI-style header file
Generate old JDK1.0-style header
Generate a stubs file
Print version information
Enable verbose output
Always write output files

<classes> are specified with their fully qualified names (for


instance, java.lang.Object).
,Q WKH QDWLYH PHWKRG FDOOV ZH FDQ XVH WKH IROORZLQJ V\QWD[ WR FUHDWH D KHDGHU ILOH

C:\jdk1.2\bin>javah -jni <classes>


/HW XV VHH DQ H[DPSOH IRU WKH QDWLYH FRGH WR FDOFXODWH WKH FXEH RI D QXPEHU 7KH IROORZLQJ LV
WKH FRGH WR FUHDWH D QDWLYH PHWKRG IRU WKDW

class mynative
{
public static void main(String args[])
{
if(args.length!=1)
{
System.out.println(This is the usage of Native call);
System.exit(0);
}
int x= new Integer(args[0]).intValue();
int a=new native1().cubecal(x);
System.out.println(a);
}
}
class native1
{
public native int cubecal(int x);
static
{
System.loadLibrary(native1);
}
}
$IWHU UXQQLQJ WKH DERYH SURJUDP ZH KDYH WR FUHDWH D KHDGHU ILOH )RU WKDW XVH WKH IROORZLQJ
FRPPDQG LQ WKH FRPPDQG OLQH

C:\jdk1.2\bin>javan -jni native1

260

Comp-U-Learn

Extending Java
6R WKH QDWLYHK ILOH ZLOO EH FUHDWHG ZLWK WKH IROORZLQJ FRQWHQWV

/* DO NOT EDIT THIS FILE - it is machine generated */


#include <jni.h>
/* Header for class native1 */
#ifndef _Included_native1
#define _Included_native1
#ifdef __cplusplus
extern C {
#endif
/*
* Class:
native1
* Method:
cubecal
* Signature: (I)I
*/
JNIEXPORT jint JNICALL Java_native1_cubecal
(JNIEnv *, jobject, jint);
#ifdef __cplusplus
}
#endif
#endif
1RZ ZH FDQ ZULWH QRQMDYD FRGH IRU FDOFXODWLQJ WKH FXEH DV F ILOH DQG FRPSLOH LW DQG FUHDWH D
GOO ILOH WR UXQ WKH SURJUDP LQ WKH -DYD SODWIRUP 7KH IROORZLQJ FRGH LV WKH F ILOH

#include <jni.h>
1#include Calc.h
int cube(int x)
{
return(x*x*x);
}
JNIEXPORT jint JNICALL
Java_native1_cubecal
(JNIEnv *e, jobject o, jint x)
{
return cube(x);
}
1RZ LI ZH UXQ WKH P\QDWLYHMDYD ILOH LW ZLOO DVN XV D QXPEHU 7KHQ LW ZLOO GLVSOD\ WKH FXEH RI WKH
JLYHQ QXPEHU

Summary
In this session we have seen the concepts of Reflection and the details about the Reflection
APIs. In this session all the classes and their functions were dealt with an example. In the
middle of the session we had learnt about the SecurityMannager class and its usage and the
Runtime class. Finally we covered Native method concepts.

Comp-U-Learn

261

Advanced Java Programming

Going Over It Again


I. Fill in the Blanks



BBBBBBBB $3, DOORZV MDYD FRGH WR H[DPLQH FODVVHV DQG REMHFWV DW UXQ WLPH



7KH BBBBBBBBBBB FODVV UHSUHVHQWV D FRQVWUXFWRU IRU D FODVV



BBBBBBBBBB SURYLGHV DFFHVV WR WKH -DYD UXQWLPH V\VWHP



BBBBBBBBBB LV D -DYD WRRO XVHG WR FUHDWH KHDGHU ILOHV



-1, VWDQGV IRU BBBBBBBBBBBBBBB

II. State True or False



&ODVV UHPDLQV LQ WKH MDYDODQJ SDFNDJH



5HIOHFWLRQ3HUPLVVLRQ FODVV LV D SHUPLVVLRQ FODVV ZKLFK LV LQWURGXFHG LQ -'. ROG YHUVLRQV



6HFXULW\0DQDJHU FODVV FRQWDLQV VHYHUDO PHWKRGV WKDW FDQ QRW EH RYHUULGGHQ



([LW LQ WKH 5XQWLPH FODVV ([LWV WKH -DYD UXQWLPH V\VWHP



-1, SURYLGHV WKH FDSDELOLW\ WR DFFHVV QDWLYH PHWKRGV WKURXJK VKDUHG '//V

III. One line Answers




:KDW LV 5HIOHFWLRQ"



/LVW WKH FODVVHV LQ WKH MDYDODQJUHIOHFW SDFNDJH



:KDW LV WKH XVH RI 6HFXULW\0DQDJHU FODVV"



/LVW WKH PHWKRGV LQ WKH 5XQWLPH FODVV



:KDW LV 1DWLYH PHWKRG"

262

Comp-U-Learn

Session 12

Java Beyond Objects

On Completion of this Session


you will be able to understand...

) JavaMail APIs
) Email System
) Java Management APIs
) Clipboard Mechanism
) Internationalization

In This Session...

Introduction to Java Mail

Email System

JavaMail API

Layer of an Email System

Java Management API

Java Management Architecture

Components of JMAPI

Clipboard

Clipboard Class Usage

Internationalization

Classes for Internationalization

Date Formatting

Java Beyond Objects

Introduction to Java Mail


(PDLO LV RQH RI WKH PRVW LPSRUWDQW SURJUDPV LQ WKH ,QWHUQHW VHUYLFHV ,W SURYLGHV VR PDQ\
IDFLOLWLHV WR ,QWHUQHW XVHUV 0DQ\ RI XV GDLO\ VHQG PDLO DQG UHFHLYH PDLO IURP VRPH RWKHUV E\
XVLQJ WKLV IDFLOLW\ 7KH MDYD PDLO $3, SURYLGHV WKH FDSDELOLW\ WR GHYHORS HPDLO FOLHQWV DQG PDLO
HQDEOHG MDYD DSSOLFDWLRQ ,Q WKLV VHVVLRQ ZH DUH JRLQJ WR OHDUQ KRZ PDLO V\VWHPV ZRUN DQG KRZ
WKH -DYD0DLO $3, SURYLGHV IDFLOLWLHV WR FUHDWH RXU RZQ HPDLO LGV

Email System
7KH (PDLO V\VWHPV FRQVLVWV RI WZR FRPSRQHQWV

Mail Client or User Agent (UA)


Mail Server or Message Transfer Agent (MTA)
0DLO FOLHQW RU 8VHU $JHQW OHWV XVHUV FRPSRVH DQG VHQG HPDLO DQG UHFHLYH HPDLO IURP WKH
0HVVDJH 7UDQVIHU $JHQW 7KH 0HVVDJH 7UDQVIHU $JHQWV VWRUH DQG IRUZDUG HPDLO IRU XVHU DJHQWV
DQG VXSSRUW WKH H[FKDQJH RI

PDLO DFURVV WKH QHWZRUNV 7KH IROORZLQJ ILJXUH VKRZV WKH

PHFKDQLVP RI WKH (PDLO

Network(s)

MTA
User

Mail
Client

MTA

MTA

Mail
Client

User

MTA

Fig. 12.1
7KH H[DPSOHV IRU WKH XVHU DJHQWV DUH HPDLO SURJUDPV VXFK DV (XGRUD 2XW /RRN 7KHVH
SURJUDPV DOVR SURYLGH OLPLWHG PHVVDJH WUDQVIHU FDSDELOLWLHV 7KH HPDLO VHUYHU SURJUDPV DUH WKH
H[DPSOHV IRU WKH 07$ 2Q WKH ,QWHUQHW WKH 3RVW 2IILFH 3URWRFRO 323 LV WKH PRVW SRSXODU
SURWRFRO IRU XVHU DJHQWV WR UHWULHYH WKH GDWD IURP WKH 07$
7KH 6LPSOH 0HVVDJH 7UDQVIHU 3URWRFRO 6073 LV WKH PRVW SRSXODU SURWRFRO IRU XVHU DJHQWV WR
VHQG

PDLO WR 07$V $OVR LW LV XVHG IRU WKH 07$ WR H[FKDQJH PDLO WR HDFK RWKHU 7KH 323

SURWRFRO LV GHVFULEHG LQ 5HTXHVW )RU &RPPHQWV 5)&  DQG 6073 SURWRFRO LV FRYHUHG LQ 5)&
7KH )LJXUH  VKRZV KRZ 323 DQG 6073 DUH XVHG RQ WKH ,QWHUQHW

Comp-U-Learn

265

Advanced Java Programming


$SDUW IURP WKH 323 DQG 6073 WKHUH LV DQRWKHU SURWRFRO ,QWHUQHW 0HVVDJH $FFHVV 3URWRFRO
,0$3 SURWRFRO DOORZV XVHU DJHQWV WR GLUHFWO\ DFFHVV PDLO IROGHUV WKDW DUH VWRUHG RQ WKH PDLO
VHUYHU ,0$3 OHDYHVPDLO RQ WKH PDLO VHUYHU DQG 323 GRZQORDGV LW WR WKH XVHUV FRPSXWHU
7KLV SURWRFRO OHWV WKH XVHU DFFHVV KLV PDLO IURP WKH PDLO VHUYHU ZLWKRXW DQ\ UHVWULFWLRQ UHJDUGLQJ
WKH FRPSXWHU KH LV XVLQJ 7KH ,0$3 LV GHVFULEHG LQ 5)& 

POP3

Incoming messages from the Storage

Mail
Server
SMTP

Outgoing Messages to Transfer

Fig. 12.2

JavaMail API
7KH -DYD0DLO $3, LV XVHG WR GHYHORS WKH XVHU DJHQWV ,W FDQ EH XVHG WR FUHDWH HPDLO FOLHQW
SURJUDPV LQ -DYD WR PDLOHQDEOH RWKHU SURJUDPV RU WR LPSOHPHQW VSHFLDO HPDLO IHDWXUHV LQ
HPEHGGHG SURGXFWV VXFK DV :HE SKRQHV 7KLV $3, LV QRW GHVLJQHG WR VXSSRUW WKH GHYHORSPHQW
RI HPDLO VHUYHUV DOWKRXJK LV GRHV SURYLGH WKH FDSDELOLW\ WR LQWHUIDFH ZLWK 07$
7KH IROORZLQJ WDEOH OLVWV WKH SDFNDJHV DYDLODEOH LQ WKH -DYD 0DLO $3, DQG WKHLU XVDJHV

Packages
javax.mail
javax.mail.event
javax.mail.internet
javax.mail.search

266

Usage
It provides the basic classes to implement the UA.
It defines events, event listeners and adapters for the
events associated with the mail clients.
It provides classes and interfaces for working with
Internet mail headers and MIME headers.
It provides classes that can be used for performing
searches of messages and message parts.
Comp-U-Learn

Java Beyond Objects

Layers of an Email System


7KH ILJXUH  VKRZV KRZ -DYD0DLO $3, VXSSRUWV WKH GHYHORSPHQW RI XVHU DJHQW VRIWZDUH 7KH
HPDLO FOLHQW SURYLGHV DQ DSSOLFDWLRQ OD\HU FRQVLVWLQJ RI WKH DSSOLFDWLRQV *8, DQG DSSOLFDWLRQ
VSHFLILF ORJLF 7KH DSSOLFDWLRQ ORJLF FRQVLVWV RI PDLO IXQFWLRQV VXFK DV FRPSRVLWLRQ DGGUHVVLQJ
DQG PDLO PDQDJHPHQW 7KHVH IXQFWLRQV XVH WKH FODVVHV DQG LQWHUIDFHV RI WKH -DYD 0DLO $3, WR
LPSOHPHQW JHQHUDO PDLO SURFHVVLQJ FDSDELOLWLHV
7KH -DYD0DLO $3, FODVVHV DQG LQWHUIDFHV SURYLGH EDVLF PDLO V\VWHP REMHFWV VXFK DV PHVVDJHV
DGGUHVVHV KHDGHUV IROGHUV DQG VR RQ 7KH -DYD0DLO $3, GRHV QRW SUHVXPH RU SURYLGH WKH
XQGHUOD\LQJ PHVVDJLQJ SURWRFROV VXFK DV 323 6073 RU ,0$3 ,QVWHDG LW SURYLGHV D JHQHUDO
IUDPHZRUN IRU ZRUNLQJ ZLWK PHVVDJLQJ V\VWHPV

Application Layer
(GUI and Application Functionality)

Java API Layer


(Messages, Folders, Transport, etc.)

Protocol Layer
(POP3, SMTP, IMAP4, others)

Fig. 12.3
-DYD 0DLO GRHV QRW SURYLGH DOO WKH SLHFHV QHHGHG WR GHYHORS XVHU DJHQW VRIWZDUH ,W RQO\ SURYLGHV
FODVVHV IRU GHDOLQJ ZLWK EDVLF PHVVDJLQJ V\VWHP REMHFWV :H PXVW DGG RXU RZQ DSSOLFDWLRQ ORJLF
DQG PHVVDJLQJ SURWRFROV

Note
JavaMail API is not part of JDK 1.2. It must be added to our JDK directory for
our use.

Comp-U-Learn

267

Advanced Java Programming

Java Management API


7KH -DYD 0DQDJHPHQW $3, LV EHLQJ GHYHORSHG E\ MDYDVRIW WR SURYLGH DQ LQWHJUDWHG VROXWLRQ IRU
WKH V\VWHP QHWZRUN DQG VHUYLFH PDQDJHPHQW :H DOUHDG\ NQRZ WKDW MDYD LV D SODWIRUP
LQGHSHQGHQW SURJUDPPLQJ ODQJXDJH %HFDXVH RI LWV QDWXUH LW HOLPLQDWHV WKH QHHG WR XVH VHYHUDO
QRQLQWHJUDWHG SODWIRUP VSHFLILF V\VWHP DQG QHWZRUN PDQDJHPHQW WRROV WR PDQJH WKH GLYHUVH
FRPSXWLQJ UHVRXUFHV WKDW DUH FRPPRQ WR PHGLXP WR ODUJH VL]HG HQWHUSULVH QHWZRUNV
,PDJLQH WKDW D SHUVRQ LV UHVSRQVLEOH IRU WKH PDQDJHPHQW RI D PHGLXP WR ODUJH VFDOH HQWHUSULVH
+LV SULPDU\ UHVSRQVLELOLWLHV DUH WR NHHS WKH

QHWZRUN

XS

DQG

UXQQLQJ

NHHS

LWV

V\VWHPV

RSHUDWLRQDO PDNH VXUH WKDW LWV VHUYLFHV DUH DYDLODEOH DQG NHHS LWV XVHUV KDSS\ +LV XVHUV GHPDQG
WKH ODWHVW LQWHUQHW DQG

LQWUDQHW VHUYLFHV +H KDV WR SURYLGH HYHU\ WKLQJ IURP WKH PRPHQW WKDW

WKH\ UHDG DERXW WKHP RQ D :HE SDJH RU LQ D PDJD]LQH 6R -DYD SURYLGHV VRPH $3,V ZKLFK ZLOO
EH KHOSIXO IRU VXFK SHRSOH
7KH ORRN DQG IHHO RI -0$3, LV SURYLGHG E\ D -$9$HQDEOHG EURZVHU $OO PDQDJHPHQW
DSSOLFDWLRQV DUH UXQ IURP D EURZVHU 1RW RQO\ GR ZH KDYH D FRPPRQ FURVVSODWIRUP XVHU
LQWHUIDFH EXW WKH RUJDQL]DWLRQ RI WKLV LQWHUIDFH LV JRYHUQHG E\ WKH UHFRPPHQGDWLRQV DQG
VWDQGDUGV RI WKH -0$3, 8VHU ,QWHUIDFH 6W\OH *XLGH 7KLV JXLGH GHVFULEHV D VWDQGDUG DSSURDFK WR
GHYHORSLQJ EURZVHUEDVHG LQWHUIDFHV IRU XVH ZLWK -0$3, 1RW RQO\ GRHV -0$3, SURYLGH XV ZLWK
D VWDQGDUG EURZVHUEDVHG LQWHUIDFH LW DOVR SURYLGHV XV ZLWK D FRPPRQ DUFKLWHFWXUH IRU PDQDJLQJ
V\VWHPV

QHWZRUNV

DQG

VHUYLFHV

7KLV

DUFKLWHFWXUH

UHIHUUHG

WR

DV

WKH

-DYD

PDQDJHPHQW

DUFKLWHFWXUH LV VKRZQ LQ )LJXUH 


$GPLQLVWUDWLRQV XVH -DYDHQDEOHG :HE EURZVHUV WR PDQDJH WKH V\VWHPV QHWZRUNV DQG VHUYLFHV
RI D QHWZRUN 7KH EURZVHUV LQWHUIDFH ZLWK PDQDJHG REMHFW VHUYHUV WKDW PDQJH RQH RU PRUH
DSSOLDQFHV ZLWKLQ WKHLU GRPDLQ $Q DSSOLDQFH LV DQ\ V\VWHP WKDW LV WR EH PDQDJHG ,W FDQ EH D
QHWZRUN FRPSXWHU 3& ZRUNVWDWLRQ RU DQ\ W\SH RI FRPSXWHU RU GHYLFH WKDW LV FDSDEOH RI
UXQQLQJ WKH -90
$JHQWV DUH REMHFWV WKDW H[HFXWH RQ DSSOLDQFHV DQG FRPPXQLFDWH ZLWK PDQDJHG REMHFW VHUYHUV
$JHQW REMHFWV PDLQWDLQ LQIRUPDWLRQ DERXW WKH FRQILJXUDWLRQ DQG VWDWXV RI WKH DSSOLDQFHV WKH\
PDQDJH DQG WKH\ UHSRUW WKLV LQIRUPDWLRQ WR PDQDJHG REMHFW VHUYHUV 7KH DJHQW REMHFWV SURYLGH
PHWKRGV WKDW DOORZ PDQDJHG REMHFW VHUYHUV WR FRQWURO DQG UHFRQILJXUH

WKHLU DSSOLDQFHV 7KH

DJHQW VRIWZDUH FDQ EH G\QDPLFDOO\ XSGDWHG DQG LV LQVWDOOHG RQ DSSOLDQFHV DV -DYD FODVVHV WKDW DUH
ORDGHG IURP :HE VHUYHUV

Java Management Architecture


0DQDJHG REMHFW VHUYHUV DUH WKH OLQN EHWZHHQ WKH EURZVHU LQWHUIDFH DQG WKH PDQDJHG DSSOLDQFHV
RI DQ HQWHUSULVH 7KH\ FRQVLVW RI -DYD DSSOLFDWLRQV WKDW SURYLGH WKH IROORZLQJ FDSDELOLWLHV

268

Comp-U-Learn

Java Beyond Objects

Appliance configuration and status reporting-Appliance configuration and status


information that was retrieved from agent objects is available as managed
objects that can be browsed by administrators.
Control and configuration of appliances The managed objects provide methods
that can be used to control the appliances or modify their configuration data.
SNMP agent interfaces These interfaces are presented to administrators as
browsable managed objects.
Managed data interfaces These data interfaces allow management information
to be maintained by relational database servers.
Database connectivity through JDBC Managed object servers use JDBC to
interface with relational database servers.
A Web server HTTP servers make management applets available to the
browsers used by administrators. These applets provide GUI controls that are
used to browse and display managed objects. The HTTP servers are also used to
distribute agent objects throughout the domains of the managed object servers.
7KH -DYD 0DQDJHPHQW $3, DQG DUFKLWHFWXUH KHOS V\VWHP DQG QHWZRUN DGPLQLVWUDWRUV VROYH WKH
SUREOHP RI PDQDJLQJ PXOWLSOH KHWHURJHQHRXV FRPSRQHQWV %\ OHYHUDJLQJ -DYDV SODWIRUP
LQGHSHQGHQFH DQG WKH FODVVHV DQG LQWHUIDFHV RI -03$, DJHQW VRIWZDUH FDQ EH TXLFNO\ GHYHORSHG
DQG GHSOR\HG WR DQ\ DSSOLDQFH WKDW LV FDSDEOH RU UXQQLQJ WKH -90
1HZ DQG XSGDWHG VRIWZDUH FDQ EH GLVWULEXWHG YLD WKH :HE VHUYHU FRPSRQHQWV RI WKH PDQDJHG
REMHFW VHUYHUV 7KHVH VDPH :HE VHUYHUV SURYLGH WKH PDQDJHPHQW DSSOHWV WKDW DUH XVHG E\
DGPLQLVWUDWRUV WR PRQLWRU DQG FRQWURO QHWZRUN UHVRXUFHV DV PDQDJHG REMHFWV
7KH PDQDJHG REMHFW VHUYHUV FUHDWH PDQDJHG REMHFW DEVWUDFWLRQV WKDW DOORZ UHVRXUFHV WR EH
PDQDJHG ZLWKRXW NQRZLQJ WKH GHWDLOV RI WKH REMHFWV LPSOHPHQWDWLRQ 7KLV VHSDUDWLRQ EHWZHHQ
PDQDJHPHQW DQG LPSOHPHQWDWLRQ DOORZV DGPLQLVWUDWRUV WR FRQFHQWUDWH RQ WKH SUREOHP DW KDQG
:KHQ DQ DGPLQLVWUDWRU LV SDJHG LQ WKH PLGGOH RI WKH QLJKW KH FDQ VHFXUHO\ DFFHVV WKH PDQDJHG
REMHFW VHUYHU E\ ODXQFKLQJ KLV EURZVHU IURP KRPH D KRWHO D FRIIHH VKRS RU DQ\ ZKHUH

Components of JMAPI
,Q WKLV VHFWLRQ ZH DUH JRLQJ WR VHH WKH FRPSRQHQWV RI WKH -0$3, -0$3, LV GLVWULEXWHG DV D VHW
RI

MDYD

FODVVHV

LQWHUIDFHV

DQG

DVVRFLDWHG

GRFXPHQWDWLRQ

,W

FRQVLVWV

RI

WKH

IROORZLQJ

FRPSRQHQWV

Comp-U-Learn

269

Advanced Java Programming

Admn. View Module


$ VHW RI FODVVHV DQG LQWHUIDFHV IRU GHYHORSLQJ WKH *8, FRPSRQHQWV RI PDQDJHPHQW DSSOHWV ,W
EXLOGV RQ WKH $:7 DQG LV RULHQWHG WRZDUG DSSOLFDWLRQV WKDW UXQ DV DSSOHWV ZLWKLQ WKH FRQWH[W RI
D :HE EURZVHU ,W FDQ DOVR EH XVHG WR GHYHORS VWDQGDORQH DSSOLFDWLRQV

Base Object Interfaces


-DYD LQWHUIDFHV WKDW DUH XVHG WR FUHDWH PDQDJHG REMHFWV 7KHVH LQWHUIDFHV DOORZ PDQDJHG REMHFWV
WR EH FUHDWHG TXLFNO\ (DVLO\ DQG FRQVLVWHQWO\

Managed Container Interfaces


-DYD LQWHUIDFHV WKDW DOORZ PDQDJHG REMHFWV WR EH FROOHFWHG DQG PDQDJHG DV D JURXS

Managed Notification Interfaces


8VHG WR VXSSRUW HYHQW GHOLYHU\ EHWZHHQ WKH HOHPHQWV RI WKH -DYD PDQDJHPHQW DUFKLWHFWXUH
7KHVH LQWHUIDFHV DUH DOVR XVHG WR VXSSRUW HYHQW KDQGOLQJ

Managed Data Interfaces


8VHG WR PDLQWDLQ V\VWHP PDQDJHPHQW GDWD YLD D UHODWLRQDO GDWDEDVH 7KHVH LQWHUIDFHV XVH -'%&
WR VXSSRUW GDWDEDVH FRQQHFWLYLW\

Managed Protocol Interfaces


6XSSRUW WKH VHFXUH FRPPXQLFDWLRQ RI PDQDJHPHQW LQIRUPDWLRQ 7KHVH LQWHUIDFHV XVH WKH
6HFXULW\ $3, DQG UHPRWH PHWKRG LQYRFDWLRQ

SNMP Interfaces
8VHG WR SURYLGH DFFHVV WR H[LVWLQJ 6103 DJHQWV 7KHVH LQWHUIDFHV DOORZ \RX WR LQFRUSRUDWH
\RXU H[LVWLQJ QHWZRUN PDQDJHPHQW DJHQWV LQWR WKH -DYD PDQDJHPHQW DUFKLWHFWXUH

Applet Integration Interfaces


7KH $SSOHW ,QWHJUDWLRQ DOORZV GHYHORSHUV WR LQWHJUDWH WKHLU DSSOHWV ZLWK LQ WKH -DYD PDQDJHPHQW
DUFKLWHFWXUH 6XSSRUW RI DSSOHW SDJH DQG OLQN UHJLVWUDWLRQ LV SURYLGHG

270

Comp-U-Learn

Java Beyond Objects


7KH -DYD 0DQDJHPHQW $3, 8VHU ,QWHUIDFHV 6W\OH *XLGH LV DOVR LQFOXGHG 7KH VW\OH JXLGH
GHVFULEHV D VWDQGDUG DSSURDFK WR GHYHORSLQJ EURZVHUEDVHG LQWHUIDFHV IRU XVH ZLWK -0$3,

7KH -03, FRPSRQHQWV SUHYLRXVO\ OLVWHG DUH XVHG WR FUHDWH DOO HOHPHQWV RI WKH -DYD PDQDJHPHQW
DUFKLWHFWXUH 7KH $GPLQ 9LHZ 0RGXOH DQG $SSOHW ,QWHJUDWLRQ ,QWHUIDFHV VLPSOLI\ WKH WDVN RI
FUHDWLQJ PDQDJHPHQW DSSOHWV WKDW FRQIRUP WR WKH -0$3, 8VHU ,QWHUIDFHV 6W\OH *XLGH 7KH RWKHU
LQWHUIDFHV DUH XVHG WR FUHDWH PDQDJHG REMHFWV DQG DJHQW REMHFWV WR LQWHUIDFH ZLWK H[LVWLQJ 6103
DJHQWV DQG WR SURYLGH GDWDEDVH FRQQHFWLYLW\

Clipboard
&OLSERDUG LV PHFKDQLVP RI FRS\LQJ DQG SDVWLQJ GDWD WR DQG IURP WKH VDPH SODFHV LQ WKH
ZLQGRZLQJ V\VWHP 7KH -'. SURYLGHV WKH EDVLV IRU IXOO VXSSRUW RI FOLSERDUG RSHUDWLRQV WKURXJK
WKH &OLSERDUG FODVV DQG RWKHU FODVVHV DQG LQWHUIDFHV RI WKH MDYDDZWWUDQVIHU FODVV ,Q WKH VHFWLRQ
ZH FDQ VHH WKH XVH RI WKHVH FODVVHV DQG LQWHUIDFHV LQ WKH &OLSERDUG PHFKDQLVP
7KH PDLQ FODVV WKDW VXSSRUWV FOLSERDUG LV MDYDDZWGDWDWUDQVIHU ,Q WKLV FODVV ZH FDQ KDYH WKUHH
LQWHUIDFHV DQG IRXU FODVVHV 7KH IROORZLQJ WDEOH OLVWV WKH FODVVHV DQG LWV XVDJH PHWKRGV LQ WKH
&OLSERDUG

Classes

Usage

&LOSERDUG

,W SURYLGHV DFFHVV WR WKH V\VWHP

*HW1DPH  JHW&RQWHQWV 

FOLSERDUG

VHW&RQWHQWV 

'DWD)ODYRU

Methods
DV

ZHOO

DV

WR

-DYD

LQWHUQDO FLOSERDUG REMHFWV

JHW6\VWHP&OLSERDUG 

,W HQFDSVXODWHV GDWD W\SHV XVHG

*HW+XPDQ3UHVHQWDEOH1D

WR SDVV GDWD WR DQG IURP WKH

PH JHW0LPH7\SH 

FLOSERDUG

QRUPDOL]H0LPH7\SH 
JHW5HSUHVHQWDWLRQ&ODVV 
HTXDOV 

6\VWHP)ODYRXU0DS

,W SURYLGHV DQ LPSOHPHQWDWLRQ

*HW1DWLYHV)RU)ODYRUV *H

RI WKH )ODYRU0DS LQWHUIDFH WKDW

W)ODYRUV)RU1DWLYHV 

DOVR

SURYLGHV

VXSSRUW

IRU

ZRUNLQJ ZLWK 0,0( W\SHV

6WULQJ6HOHFWLRQ

,W

LV

DQ

VLPSOLILHV

XVHIXO
WKH

FODVV

WKDW

*HW7UDQVIHU'DWD 

FRS\LQJ

DQG

JHW7UDQVIHU'DWD)ODYRUV 

SDVWLQJ RI WH[W

Comp-U-Learn

LV'DWD)ODYRU6XSSRHUWHG 

271

Advanced Java Programming


7KH &OLSERDUG FODVV KDV WZR ILHOG YDULDEOHV RZQHU DQG FRQWHQWV 7KH RZQHU YDULDEOH UHIHUV WR DQ
REMHFW WKDW LPSOHPHQWV WKH &OLSERDUG2ZQHU LQWHUIDFH DQG LGHQWLILHV WKH SURFHVV WKDW RZQV WKH
FOLSERDUG 7KH FRQWHQWV YDULDEOH UHIHUV WR DQ REMHFW WKDW LV SODFHG RQ WKH FOLSERDUG 7KLV REMHFW
LPSOHPHQWV WKH 7UDQVIHUDEOH LQWHUIDFH
7KH 'DWD)ODYRU FODVV GHILQHV WZR FRQVWDQWV SODLQ7H[W)ORDYRU DQG VWULQJ)ODYRU WKDW DUH XVHG WR
LGHQWLI\ VSHFLILF GDWD IODYRUV

Clipboard Class Usage


,Q WKLV VHFWLRQ ZH FDQ OHDUQ PRUH DERXW WKH &OLSERDUG PHFKDQLVP DQG LWV FODVVHV E\ XVLQJ D
SURJUDP 7KH IROORZLQJ SURJUDP LV XVHG WR UHDG WKH LQIRUPDWLRQ DERXW WKH IODYRU RI GDWD
FRQWDLQHG RQ WKH FOLSERDUG

Example 12.1:
import java.awt.*;
import java.awt.event.*;
import java.awt.datatransfer.*;
public class ReadClipApp extends Frame
{
TextArea textArea = new TextArea();
Toolkit toolkit;
int screenWidth = 500;
int screenHeight = 500;
public static void main(String args[])
{
ReadClipApp app = new ReadClipApp();
}
public ReadClipApp()
{
super(ReadClipApp);
setup();
setSize(screenWidth,screenHeight);
addWindowListener(new WindowEventHandler());
show();
}
void setup()
{

272

Comp-U-Learn

Java Beyond Objects

setupMenuBar();
toolkit=getToolkit();
add(Center,textArea);
}
void setupMenuBar()
{
MenuBar menuBar = new MenuBar();
Menu fileMenu = new Menu(File);
Menu readMenu = new Menu(Read);
MenuItem fileExit = new MenuItem(Exit);
MenuItem readClipboard = new MenuItem(Clipboard);
fileExit.addActionListener(new MenuItemHandler());
readClipboard.addActionListener(new MenuItemHandler());
fileMenu.add(fileExit);
readMenu.add(readClipboard);
menuBar.add(fileMenu);
menuBar.add(readMenu);
setMenuBar(menuBar);
}
class MenuItemHandler implements ActionListener
{
public void actionPerformed(ActionEvent ev){
String s=ev.getActionCommand();
if(s==Exit){
System.exit(0);
}
else if(s==Clipboard)
{
Clipboard clip=toolkit.getSystemClipboard();
String text=Object Name: ;
text+=clip.getName();
text+=\n\nData Flavors:;
Transferable contents=clip.getContents(ReadClipApp.this);
if(contents==null) text+=\n\nThe clipboard is empty.;
else{
DataFlavor flavors[]=contents.getTransferDataFlavors();
for(int i=0;i<flavors.length;++i){
text+=\n\n Name: +flavors[i].getHumanPresentableName();
text+=\n MIME Type: +flavors[i].getMimeType();
text+=\n Class: ;
Class cl = flavors[i].getRepresentationClass();

Comp-U-Learn

273

Advanced Java Programming

if(cl==null) text+=null;
else text+=cl.getName();
}
}
textArea.setText(text);
}
}
}
class WindowEventHandler extends WindowAdapter
{
public void windowClosing(WindowEvent e){
System.exit(0);
}
}
}
$IWHU UXQQLQJ WKH DERYH SURJUDP ZH FDQ JHW DQ DSSOHW ZLQGRZ ZLWK 5HDG PHQX ZKLFK KDV
&OLSERDUG DV PHQX LWHP ,I ZH FOLFN WKH PHQX LWHP ZH FDQ JHW WKH IROORZLQJ RXWSXW

Fig. 12.4
7KLV DSSOHW JLYHV LQIRUPDWLRQ DERXW WKH 6\VWHP FOLSERDUG 7KH UHDVRQ WKH SURJUDP GRHV QRW VHH
WKH LPDJH GDWD WKDW ZH VWRUHG LQ WKH &OLSERDUG LV EHFDXVH WKH 'DWD)ODYRU FODVV IRU WKH LPDJH
GDWD LV QRW DYDLODEOH :KHQ WKH FOLSERDUG PHQX LWHP LV VHOHFWHG

274

Comp-U-Learn

JHW6\VWHP&OLSERDUG PHWKRG

Java Beyond Objects


RI WKH 7RRONLW FODVV LV LQYRNHG LW JDLQV DFFHVV WR WKH 6\VWHP FOLSERDUG 7KLV REMHFW LV DVVLJQHG WR
WKH FOLS YDULDEOH ,Q WKLV H[DPSOH ZH FDQ VHH DOVR WKH XVDJH RI WKH VRPH PRUH PHWKRGV ZKLFK
ZH KDYH VHHQ SUHYLRXVO\

Internationalization
7KH ZRUOG JURZV VPDOOHU EHFDXVH RI WKH FRQWLQXHG VXFFHVV RI WKH ,QWHUQHW DV ZHOO DV RWKHU
GHYHORSPHQWV &RQVHTXHQWO\ LW LV EHFRPLQJ PRUH LPSRUWDQW WR ZULWH VRIWZDUH IRU WKH ZKROH
ZRUOG UDWKHU WKDQ IRU RQH ODQJXDJH RU FXOWXUH :ULWLQJ LQWHUQDWLRQDOL]HG DSSOLFDWLRQV KDV EHHQ DQ
H[WUHPHO\ FKDOOHQJLQJ WDVN SDUWO\ EHFDXVH WKH SUREOHPV ZHUH QRW ZHOO XQGHUVWRRG DQG SDUWO\
EHFDXVH JRRG WRROV DQG IDFLOLWLHV WR KHOS ZLWK WKH WDVN KDYH EHHQ KDUG WR FRPH E\
-DYD LV LQWHQGHG WR EH WKH SURJUDPPLQJ ODQJXDJH IRU WKH LQWHUQHW IRU LW WR VXFFHHG LQ WKDW UROH LW
KDV WR SURYLGH VRPH RI WKRVH WRROV IRU SURJUDPPHUV ,W VKRXOG EH HDV\ WR ZULWH LQWHUQDWLRQDOL]HG
SURJUDPV LQ -DYD -'. LV D ELJ VWHS DKHDG RI RWKHU SURJUDPPLQJ ODQJXDJHV -DYD QRZ KDV
XQSUHFHGHQWHG VXSSRUW IRU LQWHUQDWLRQDOL]DWLRQ D IXOO DUUD\ RI $3,V DQG IDFLOLWLHV WR DVVLVW
SURJUDPPHUV LQ GHYHORSLQJ IRU D JOREDO PDUNHW ,Q WKLV VHFWLRQ ZH ZLOO OHDUQ DERXW WKH SUREOHPV
RI LQWHUQDWLRQDOL]DWLRQ DQG KRZ WR XVH -DYDV LQWHUQDWLRQDOL]DWLRQ IHDWXUHV WR VROYH WKHP LQ RXU
SURJUDP
,QWHUQDWLRQDOL]DWLRQ LV WKH SURFHVV RI ZULWLQJ D SURJUDP VR WKDW LW LV UHDG\ WR VXSSRUW RWKHU
ODQJXDJHV DQG FXOWXUHV 1RWH WKDW LQWHUQDWLRQDOL]DWLRQ GRHV LQFOXGH DFWXDOO\ WUDQVODWLQJ PHVVDJHV
DQG RWKHU WDVNV VSHFLILF WR VXSSRUWLQJ D SDUWLFXODU ODQJXDJH WKDW MRE LV FDOOHG ORFDOL]DWLRQ
,Q WKLV VHVVLRQ ZH DUH FRYHULQJ WKH H[WHUQDO IHDWXUHV RI WKH -'. +HUH DOVR ZH FDQ VHH WKDW -'.
VXSSRUWV WKH LQWHUQDWLRQDOL]DWLRQ E\ XVLQJ PXOWL ODQJXDJH FKDUDFWHU VHW 8QLFRGH   -'. XVHV
/RFDOH 5HVRXUFH%XQGOH DQG RWKHU FODVVHV RI WKH MDYDXWLO SDFNDJHV 7KH XQLFRGH FKDUDFWHU
VWUHDP

VXSSRUW RI MDYDLR ,Q MDYD XQLFRGH FKDUDFWHUV DUH ZULWWHQ XVLQJ 8QLFRGH HVFDSH

FKDUDFWHU VHTXHQFHV 7KHVH VHTXHQFHV DUH RI WKH IRUP ?X[[[[ ZKHUH WKH IRXU [V DUH UHSODFHG
ZLWK KH[DGHFLPDO GLJLWV (DFK RI WKH IRXU KH[DGHFLPDO GLJLWV UHSUHVHQW IRXU ELWV RI D ELW
8QLFRGH FKDUDFWHU

Classes for Internationalization


7KH /RFDOH FODVV LV GHILQHG LQ WKH MDYDXWLO SDFNDJHV 7KLV FODVV SURYLGHV LQWHUQDWLRQDOL]DWLRQ
VXSSRUW E\ GHVFULELQJ JHRJUDSKLF SROLWLFDO RU FXOWXUDO UHJLRQV /RFDOH REMHFWV DUH FUHDWHG E\
VXSSO\LQJ D SDUWLFXODU ODQJXDJH DQG FRXQWU\ DUJXPHQWV WR WKH /RFDOH FRQVWUXFWRU RU E\ XVLQJ
DQ\ RI WKH SUHGHILQHG /RFDOH FRQVWDQWV 7KH DFFHVV PHWKRGV RI /RFDOH VXSSRUW WKH VHWWLQJ DQG
UHWULHYLQJ RI ODQJXDJHV FRXQWU\ QDPHV DQG UHODWHG YDOXHV 7KH JHW'HIDXOW PHWKRG LQ WKH
/RFDOH FODVV LV XVHG WR JLYH WKH LQIRUPDWLRQ DERXW WKH GHIDXOW FRXQWU\ LH 8QLWHG 6WDWHV

Comp-U-Learn

275

Advanced Java Programming


7KH 5HVRXUFH%XQGOH FODVV RI MDYDXWLO SDFNDJH DOVR VXSSRUWV LQWHUQDWLRQDOL]DWLRQ ,W LV XVHG WR
VWRUH ORFDOH VSHFLILF UHVRXUFHV DQG WDLORU D SURJUDPV DSSHDUDQFH WR WKH SDUWLFXODU ORFDOH LQ ZKLFK
LW LV EHLQJ UXQ 7KLV FODVV LV H[WHQGHG E\ WKH /LVW5HVRXUFH%XQGOH DQG 3URSHUW\5HVRXFH%XQGOH
FODVVHV
7KH IROORZLQJ SURJUDP VKRZV XV KRZ WKH /RFDOH FODVV LV XVHG WR JHW LQIRUPDWLRQ DERXW WKH
ODQJXDJHV

Example 12.2:
import java.util.*;
class local
{
public static void main(String args[])
{
Locale currentLocale = Locale.getDefault();
Locale locales[]={Locale.TAIWAN,Locale.KOREA,
Locale.ITALY,Locale.CANADA,Locale.CANADA_FRENCH};
System.out.println(CURRENT LOCALE:);
describeLocale(currentLocale);
System.out.println(OTHER LOCALES:);
for(int i=0;i<locales.length;++i)
describeLocale(locales[i]);
}
static void describeLocale(Locale l)
{
System.out.println(Country: +l.getDisplayCountry());
System.out.println(Language: +l.getDisplayLanguage());
System.out.println();
}
}
,I ZH UXQ WKH DERYH SURJUDP ZH FDQ JHW WKH RXWSXW DV VKRZQ EHORZ LQ WKH FRPPDQG OLQH

CURRENT LOCALE:
Country: United States
Language: English
OTHER LOCALES:
Country: Taiwan
Language: Chinese
Country: South Korea
Language: Korean
276

Comp-U-Learn

Java Beyond Objects

Country: Italy
Language: Italian
Country: Canada
Language: English
Country: Canada
Language: French

Date Formatting
7KH FODVVHV RI MDYDWH[W DUH XVHG WR SURYLGH ORFDOHVSHFLILF IRUPDW FRQYHUVLRQV IRU XVH ZLWK
QXPEHUV GDWHV DQG RWKHU REMHFWV )RUPDW LV DQ DEVWUDFW FODVV WKDW LV H[WHQGHG E\ RWKHU FODVVHV WR
VXSSRUW SDUVLQJ DQG IRUPDW FRQYHUVLRQ ,W GHFODUHV WKH IRUPDW PHWKRG WR FRQYHUW REMHFWV WR
VWULQJV DQG WKH SDUVH2EMHFW PHWKRG WR FRQYHUW VWULQJV WR REMHFWV 7KHVH PHWKRGV DUH
RYHUULGGHQ E\ LWV VXEFODVVHV
,Q WKH MDYDWH[W SDFNDJH WKHUH DUH VRPH IRUPDWWLQJ FODVVHV VXFK DV 'DWH)RUPDW 1XPEHU)RUPDW
'HFLPDO)RUPDW &KRLFH)RUPDW 7KHVH DOO DUH DEVWUDFW FODVVHV WKDW VXSSRUWV ORFDOHVSHFLILF
IRUPDWWLQJ DQG SDUVLQJ FRUUHVSRQGLQJ FRQYHUVLRQ
7KH 'DWH)RUPDW LV DQ DEVWUDFW FODVV XVHG WR IRUPDW DQG SDUVH GDWH DQG WLPH YDOXHV ,W VXSSRUWV
WKH )8// /21* 0(',80 DQG 6+257 FRQVWDQWV GHILQHG VW\OHV 7KHVH VW\OHV GHWHUPLQH
WKH OHQJWK RI WKH IRUPDWWHG RXWSXW 7KH JHW,QVWDQFH  JHW'DWH,QVWDQFH  JHW7LPH,QVWDQFH DQG
JHW'DWH7LPH,QVWDQFH PHWKRGV UHWXUQV LQVWDQFHV RI 'DWH)RUPDW WKDW DUH VSHFLILF WR D ORFDOH
7KH 6LPSOH'DWH)RUPDW FODVV H[WHQGV WKH 'DWH)RUPDW FODVV WR SURYLGH D GHIDXOW LPSOHPHQWDWLRQ
RI WKH GDWH IRUPDWWLQJ DQG SDUVLQJ FDSDELOLWLHV
7KH SDWWHUQ VWULQJ SODFHV VLQJOH TXRWHV DURXQG WH[W WKDW LV QRW D GDWHWLPH IRUPDWWLQJ SDWWHUQ
7KH IROORZLQJ DUH WKH IRUPDWWLQJ SDWWHUQ IRU WKH GDWHWLPH

yyyy- Year
GG- Era
MMMMMMMMM Month
hh Hour
a AM/PM
zzzz Time Zone

Comp-U-Learn

277

Advanced Java Programming

Summary
In this session we have seen the concepts of JavaMail and the details about the
JavaMail APIs. We learnt the Java Management API also. In the middle of the
session we dealt with the clipboard mechanism and classes used for the clipboard
mechanism. At the end of this session the internationalization process was dealt
with some formatting classes.

Going Over It Again


I. Fill in the Blanks



07$ VWDQGV IRU BBBBBBBBBBBBB


BBBBBBBBBB LV WKH PRVW SRSXODU SURWRFRO IRU XVHU DJHQWV WR UHWULHYH WKH GDWD IURP WKH
07$



-0$3, VWDQGV IRU BBBBBBBBBBBBBBBB



&OLSERDUG FODVV KDV WZR ILHOG YDULDEOHV BBBBBBBBB DQG BBBBBBBBBBBB



7KH /RFDOH FODVV LV GHILQHG LQ WKH BBBBBBBBBBBBB SDFNDJHV

II. State True or False




7KH (PDLO V\VWHPV FRQVLVWV RI WZR FRPSRQHQWV



-DYD0DLO LV GHVLJQHG WR VXSSRUW WKH GHYHORSPHQW RI HPDLO VHUYHUV



-'. VXSSRUWV WKH LQWHUQDWLRQDOL]WLRQ E\ XVLQJ PXOWLODQJXDJH FKDUDFWHU VHW



7KH PDLQ FODVV WKDW VXSSRUW FOLSERDUG LV MDYDDZWGDWDWUDQVIHU



'DWH)RUPDW FODVV WR SURYLGH D GHIDXOW LPSOHPHQWDWLRQ RI WKH GDWH IRUPDWWLQJ DQG SDUVLQJ
FDSDELOLWLHV

III. One line Answers




:KDW LV ,QWHUQDWLRQDOL]DWLRQ"



:KDW LV XVH RI -DYD0DLO $3,V"



:ULWH DERXW /RFDOH FODVV



([SODLQ WKH FRPSRQHQWV RI -0$,3



/LVW WKH FODVVHV UHODWHG WR &OLSERDUG PHFKDQLVP

278

Comp-U-Learn

Glossary

Glossary
Bean Box
7KH %HDQ %R[ LV WKH FRPSRVLWLRQ ZLQGRZ

7KH EHDQV IURP WKH 7RRO%R[

FDQ EH SDLQWHG RQ

%HDQ %R[ 7KH FRUUHVSRQGLQJ SURSHUW\ SDOOHW LV FUHDWHG LQ RUGHU WR FKDQJH WKH SURSHUWLHV 7KH
%HDQ %R[ FRQWDLQV VRPH PHQXV WR RSHUDWH RQ %HDQV

BeanDescriptor
$ %HDQ'HVFULSWRU REMHFW SURYLGHV WKH FODVV W\SH DQG WKH FXVWRPL]HU FODVV IRU WKH EHDQ
*HW%HDQ'HVFULSWRU LV WKH PHWKRG IRU %HDQ'HVFULSWRU

Bean Info
%HDQ,QIR LV D FODVV SURYLGHV D GHIDXOW LPSOHPHQWDWLRQ RI WKH %HDQ,QIR LQWHUIDFH ,W LV VXEFODVVHG
WR LPSOHPHQW %HDQ,QIR FODVVHV 6LPSOH%HDQ,QIR LV D %HDQ,QIR FODVV

Beans Developer Kit


%'.  LV WKH FXUUHQW YHUVLRQ UHOHDVHG E\ VXQ PLFURV\VWHP 7KH %'. VXSSRUWV -'.
-'. -'. %'. LV HVVHQWLDO WR UXQ WKH -DYD%HDQV7KH -DYD%HDQV 5XQ7LPH &RQWDLQPHQW
DQG 6HUYLFHV 3URWRFRO DOORZV EHDQV WR LGHQWLI\ DQG XVH WKH VHUYLFHV SURYLGHG E\ LWV HQYLURQPHQW
D :HE 6HUYHU

BOA
(DFK 25% RI &25%$ PXVW VXSSRUW D VWDQGDUG DGDSWHU FDOOHG %DVLF 2EMHFW $GDSWHU  6HUYHUV
PD\ VXSSRUW PRUH WKDQ RQH REMHFW DGDSWHU

COM
7KH 0LFURVRIW SURGXFW &RPSRQHQW 2EMHFW 0RGHO LV WKH $GYDQFHG 9HUVLRQ RI 2/( 2EMHFW
/LQNLQJ DQG (PEHGGLQJ 7KH &20 OLEUDU\ SURYLGHV D GLUHFWRU\ WR DOO FODVVHV &20 REMHFWV DUH
RUJDQL]HG LQWR LQWHUIDFHV

CGI
&RPPRQ *DWHZD\ ,QWHUIDFH LV RQH RI WKH PRVW FRPPRQ VHUYHUVLGH VROXWLRQV XVHG WR GHYHORS
ZHE DSSOLFDWLRQV

7KH :HE 6HUYHU ODXQFKHV WKH &*, LQ RUGHU WR LQYRNH WKH LQIRUPDWLRQ IURP

WKH H[WHUQDO SURJUDP VXFK DV 3HUO 3HUO LV VLPSOH DQG VLPLODU WR & ODQJXDJH  8VLQJ (QYLURQPHQW
YDULDEOHV &*, IHWFK WKH LQIRUPDWLRQ IURP 3HUO DQG VWRUH LW LQ VXLWDEOH GDWDEDVH

Comp-U-Learn

279

Advanced Java Programming

ASP
7KH G\QDPLF ZHE FRQWHQW

FDOOHG $63 6HUYHU VLGH YDOLGDWLRQ LV GRQH XVLQJ $63 7KLV FRGH LV

UHDG DQG H[HFXWHG E\ WKH :HE VHUYHU /DWHU WKH SDJH LV VHQW WR WKH FOLHQW

CORBA
&RPPRQ 2EMHFW 5HTXHVW %URNHU $UFKLWHFWXUH ZDV GHVLJQHG WR DOORZ LQWHOOLJHQW FRPSRQHQWV WR
GLVFRYHU HDFK RWKHU DQG LQWHU RSHUDWH RQ DQ REMHFW&25%$ DFFHVVHG DQ REMHFW YLD 2EMHFW
5HTXHVW %URNHU ,QWHUIDFH 'HILQLWLRQ /DQJXDJH LV XVHG WR ZULWH WKH VWXE FOLHQW VLGH LQWHUIDFH WR
WKH 25%

DCE
'LVWULEXWHG &RPSXWLQJ (QYLURQPHQW LV D WHFKQRORJ\ WR EXLOG GLVWULEXWHG DSSOLFDWLRQV '&( ZDV
GHYHORSHG E\ WKH 2SHQ 6RIWZDUH )RXQGDWLRQ 'LVWULEXWHG V\VWHPV DUH RUJDQL]HG LQWR FHOOV

DCOM
'LVWULEXWH &RPSRQHQW 2EMHFW 0RGHO LV GLVWULEXWLQJ WKH &20 REMHFW RYHU PXOWLSOH FRPSXWHUV
,W FUHDWHV D UHPRWH REMHFW FDQ EH DFFHVVHG OLNH D ORFDO REMHFW '&20

SURYLGHV VWURQJ DQG

IOH[LEOH FRPPXQLFDWLRQ VHFXULW\

GenericServelet
*HQHULF6HUYOHW

LV

FODVV

H[WHQGHG

ZKHQ

RXU

RZQ

VHUYOHW

LV

GHYHORSHG

7KH

*HQHULF6HUYOHWVHUYLFH PHWKRG KDV EHHQ GHILQHG DV DQ DEVWUDFW PHWKRG

HTTP
+\SHU 7H[W 7UDQVIHU 3URWRFRO VXSSRUWV +70/ ILOHV XVHG WR WUDQVIHU +70/ ILOH WR FOLHQW IURP
WKH :HE 6HUYHU 7KH 'HIDXOW SRUW  LV XVHG IRU +773

HTTP Servlet
+7736HUYOHW

FODVV LV H[WHQGHG IURP *HQHULF6HUYOHW

*HQHUL6HUYOHW DQG +7736HUYOHW DUH WKH

WZR PDLQ FODVVHV ZKLFK LV H[SDQGHG ZKHQ RXU RZQ VHUYOHW LV FUHDWHG

IDL
7KH VSHFLILFDWLRQV DUH ZULWWHQ LQ ,QWHUIDFH 'HILQLWLRQ /DQJXDJH ,'/ SURYLGHV RSHUDWLQJ V\VWHP
DQG SURJUDPPLQJ /DQJXDJH LQGHSHQGHQW LQWHUIDFHV WR DOO WKH VHUYLFHV DQG FRPSRQHQWV WKDW
UHVLGH RQ D &25%$ REMHFW

280

Comp-U-Learn

Glossary

IIOP
,QWHUQHW ,QWHU 25% 3URWRFRO

LV XVHG WR FRQQHFW HDFK DQG HYHU\ 25% RI

&25%$V ,,23

XVHV 7&3,3 LPSOHPHQWDWLRQ RI ,,23 DOORZ &25%$ LPSOHPHQWDWLRQV WR LQWHURSHUDWH RYHU


WKH ,QWHUQHW GRPDLQ

IMAP
,QWHUQHW 0HVVDJH $FFHVV 3URWRFRO

DOORZV XVHU DJHQWV WR GLUHFWO\ DFFHVV PDLO IROGHUV WKDW DUH

VWRUHG RQ WKH PDLO VHUYHU ,0$3 OHDYHV WKH PDLO RQ WKH 0DLO 6HUYHU DQG 323 GRZQORDGV LW WR
WKH XVHUV FRPSXWHU

Introspector
,QWURVSHFWRU LV D FODVV ZLWK RQO\ VWDWLF PHWKRGV ZKLFK SURGXFHV %HDQ,QIR REMHFWV DVVRFLDWHG
ZLWK DQ\ EHDQ FODVV

IOR
&25%$ DFKLHYHV LQWHURSHUDELOLW\ XVLQJ
GRPDLQ WR DQRWKHU

%ULGJHV %ULGJHV XVHV WKH REMHFW UHIHUHQFHV IURP RQH

,QWHU2SHUDEOH 2EMHFW 5HIHUHQFHV KDV WKH LQIRUPDWLRQ DERXW WKH REMHFWV

UHIHUHQFH

Jar
0RUH WKDQ RQH FODVV FDQ EH FRPELQHG WR IRUP MDU ILOH XVLQJ WKH MDU FRPPDQG
-DYD $UFKLYH )LOH

$IWHU FUHDWLQJ

LW LV VWRUHG LQ WKH -DU GLUHFWRU\ LQ RUGHU WR DGG LW LQ WKH 7RRO%R[

Java Servlet Development Kit 92


6HUYOHWV ZHUH GHVLJQHG IRU SRUWDELOLW\ 6HUYHOHWV DUH VXSSRUWHG RQ DOO SODWIRUPV WKDW VXSSRUW MDYD
DQG VHUYOHWV ZRUN ZLWK DOO WKH PDMRU ZHE VHUYHUV 7KH MDYD[VHUYOHW DQG MDYD[VHUYOHWKWWS
SDFNDJHV FRQVWLWXWH WKLV VHUYOHW $3, 7KHVH FODVVHV FRPH EXQGOHG ZLWK WKH -DYD 6HUYOHW
'HYHORSPHQW .LW -6'. IRU XVH ZLWK WKH -'.

JVM
-DYD 9LUWXDO 0DFKLQH LV DQ LQWHUSUHWHU ,W PDNHV -DYD D SODWIRUP LQGHSHQGHQW 7KH &ODVV ILOH FDQ
EH WUDQVIHUUHG IURP RQH PDFKLQH WR UHPRWH RQH  WKH UHPRWH RQH KDV WKH EURZVHU ZKLFK LV -DYD
(QDEOH KDV WKH OLQNHU -90

Comp-U-Learn

281

Advanced Java Programming

MTA
7KH 0HVVDJH 7UDQVIHU $JHQWV VWRUH DQG IRUZDUG HPDLO IRU XVHU DJHQWV DQG VXSSRUW H[FKDQJH RI
PDLO DFURVV WKH QHWZRUNV

OMG
2EMHFW 0DQDJHPHQW *URXS KDV KXQGUHGV

RI

PHPEHU RUJDQL]DWLRQV GHYHORSHG &25%$

20* SURYLGHV D VWDQGDUG DUFKLWHFWXUH IRU GHYHORSLQJ GLVWULEXWHG REMHFWRULHQWHG V\VWHPV

ORB
2EMHFW

5HTXHVW %URNHU OHWV REMHFW WUDQVSDUHQWO\ PDNH UHTXHVWV WR DQG UHFHLYH UHTXHVWV IURP

RWKHU REMHFWV ORFDWHG ORFDOO\ RU UHPRWHO\ &25%$ 25% SURYLGHV D YDULHW\ RI GLVWULEXWHG
PLGGOHZDUH VHUYLFHV

POP3
2Q ,QWHUQHW WKH 3RVW 2IILFH 3URWRFRO LV WKH PRVW SRSXODU SURWRFRO IRU XVHU DJHQWV WR UHWULHYH
WKH GDWD IURP WKH 07$

QuoteMonitor
7KLV EHDQ XVHV 50, WR FRQQHFW WR D VWRFNTXRWH VHUYHU RYHU WKH LQWHUQHW DQG UHWULHYH VWRFN
YDOXHV

7KH PDLQ SURSHUW\ LV D VWULQJ VWRFN V\PERO ZKLFK LV WKH IRXUOHWWHU FRGH RI WKH VWRFN

FDQ PRQLWRU TXRWHV IRU YDULRXV W\SH RI EURZVHUV

RMI
5HPRWH 0HWKRG ,QYRFDWLRQ LV D FUHDWLRQ RI GLVWULEXWHG MDYDWRMDYD DSSOLFDWLRQV

50, DOORZV D

-DYD REMHFW WKDW H[HFXWHV RQ RQH PDFKLQH WR LQYRNH D PHWKRG RI D MDYD REMHFW WKDW H[HFXWHV RQ
DQRWKHU PDFKLQH 7KH VHUYHU JHWV WKH UHTXHVW IURP WKH FOLHQW SURFHVVHV LW DQG UHVSRQGV WKH
FOLHQW

Serializable
,Q -DYD QRW DOO REMHFWV DUH 6HULDOL]DEOH $UELWUDU\ VHULDOL]DWLRQ SRVHV D VHFXULW\ ULVN EHFDXVH
VHULDOL]DWLRQ H[SRVHV WKH SULYDWH DQG SURWHFWHG ILHOGV RI DQ REMHFW DV ZHOO DV WKH SXEOLF RQHV

Skeleton
6NHOHWRQ FODVVHV VHUYH DV UHPRWH SUR[LHV

6NHOHWRQ DQG VWXE FODVVHV LPSOHPHQW WKH UHPRWH

LQWHUIDFH RI WKH VHUYHU REMHFW 7KH UHPRWH VNHOHWRQ LQYRNHV WKH PHWKRG RI WKH VHUYHU REMHFW

282

Comp-U-Learn

Glossary

SMTP 135
2Q ,QWHUQHW WKH 3RVW 2IILFH 3URWRFRO LV WKH PRVW SRSXODU SURWRFRO IRU XVHU DJHQWV WR VHQG PDLO
WR 07$ 0HVVDJH 7UDQVIHU $JHQW

Stub
6WXE FODVVHV VHUYH DV ORFDO SUR[LHV IRU WKH UHPRWH REMHFW 6WXE UHVLGHV RQ FOLHQW  7KH ORFDO VWXE
FRPPXQLFDWHV ZLWK WKH UHPRWH VNHOHWRQ

Transient
7KH WUDQVLHQW .H\ZRUG

LV XVHG WR LGHQWLI\ D ILHOG LQ D MDYD FODVV WKDW VKRXOG QRW EH VHULDOL]HG

W\SLFDOO\ D ILHOG ZKRVH YDOXH GRHV QRW GHVFULEH WKH VWDWH RI DQ REMHFW RU D ILHOG WKDW ZLOO FKDQJH
ZKHQ WKH REMHFW LV GHVHULDOL]HG

UA 135
8VHU $JHQW RU 0DLO &OLHQW OHWV XVHUV FRPSRVH DQG VHQG HPDLO DQG UHFHLYH HPDLO IURP WKH
0HVVDJHU 7UDQVIHU $JHQW

UnicastRemoteObject
7KH 8QLFDVW5HPRWH2EMHFW FODVV LV D VXEFODVV RI 5HPRWH6HUYHU WKDW SURYLGHV D GHIDXOW 50,
VHUYHU LPSOHPHQWDWLRQ $ VWXE FDQ FRPPXQLFDWH ZLWK RQO\ RQH VNHOHWRQ DW D WLPH

VISIBROKER
9LVL%URNHU IRU -DYD LV D &25%$ FOLHQW DQG VHUYHU 25% ZULWWHQ HQWLUHO\ LQ -DYD 9LVLEURNHU IRU
-DYD VXSSRUWV ERWK VWDWLF DQG G\QDPLF &25%$ PHWKRG LQYRFDWLRQV

Web Server
:HE 6HUYHU

VHUYHV

DOO :HE SDJHV RYHU WKH ,QWHUQHW ,W LPSOHPHQWV WKH +773

SURWRFRO

$SDFKH :HE 6HUYHU 6XQ :HE 6HUYHU -DYD :HE 6HUYHU DUH VRPH RI WKH ZHE VHUYHUV

Comp-U-Learn

283

Appendix A

Appendix A
Relationship between Swing and AWT
:H NQRZ WKDW -DYD )RXQGDWLRQ &ODVV -)& VXEVXPHV DQG H[WHQGV WKH $EVWUDFW :LQGRZLQJ
7RRONLW $:7 DQG FRQVLVWV RI $:7 6ZLQJ -DYD' 'UDJ DQG 'URS $FFHVVLELOLW\
:H FDQ FOHDUO\ VD\ WKDW WKH 6ZLQJ LV VHSDUDWH IURP WKH $:7 LW LV LPSOHPHQWHG LQ WHUPV RI EDVLF
$:7 FODVVHV 7KH $:7 SURYLGHV WKH LQWHUIDFH EHWZHHQ WKH XQGHUO\LQJ QDWLYH ZLQGRZLQJ V\VWHP
DQG

WKH

MDYD

*8,

FRPSRQHQWV

6ZLQJ XVHV WKLV

LQWHUIDFH

EXW

GRHV

QRW

UHO\

RQ

$:7

FRPSRQHQWV WKDW PDNH XVH RI QDWLYH ZLQGRZLQJ V\VWHP REMHFWV


7KH 6ZLQJ FRPSRQHQWV DUH FUHDWHG LQ SXUH -DYD FRGH 7KLV LV WKH PDMRU DGYDQWDJH IRU WKH 6ZLQJ
7KLV DOORZV 6ZLQJ FRPSRQHQWV WR EH LQGHSHQGHQW RI WKH QDWLYH ZLQGRZLQJ V\VWHP ZKLFK PHDQV
WKH\ FDQ UXQ RQ DQ\ ZLQGRZLQJ V\VWHP WKDW VXSSRUWV $:7 ,W DOVR DOORZV WKHVH FRPSRQHQWV WR
EH LQGHSHQGHQW RI DQ\ OLPLWDWLRQV RI WKH QDWLYH ZLQGRZLQJ V\VWHPV
7KH IROORZLQJ ILJXUH H[SODLQV WKH UHODWLRQVKLS EHWZHHQ 6ZLQJ $:7 DQG WKH -)&

Swing Event Handling


6ZLQJ HYHQWV DUH KDQGOHG XVLQJ WKH HYHQW GHOHJDWLRQ PRGHO LQWURGXFHG E\ -'. :H FDQQRW
XVH WKH GHOHJDWLRQ PRGHO IRU HYHQWV LQWURGXFHG E\ -'. LQ 6ZLQJV 7KH VZLQJHYHQW SDFNDJH
GHILQHV D QXPEHU RI HYHQWV IRU XVH ZLWK 6ZLQJ FRPSRQHQWV $OVR ZH FDQ XVH WKH $:7 HYHQWV LQ
WKH 6ZLQJ FRPSRQHQWV 7KH IROORZLQJ WDEOH OLVWV WKH HYHQWV IRU 6ZLQJV LQ VZLQJHYHQW SDFNDJH

Events
AncestorEvent
ChangeEvent
DragEvent
ListDataEvent
MenuEvent
TableModeEvent
TreeExpansionEvent
TreeModeEvent
TreeSelectionEvent

Description
Occurs when an ancestor of a Jcomponent is added,
removed or moved.
Occurs when an objects state is changed.
Occurs as a result of the dragging of an object.
Occurs as a result of changes in the list selection.
Occurs as the result of the posting, selection or
canceling of a menu.
Occurs as the result of changes in the table.
Occurs as the result of a change in trees expansion.
Occurs as the result of change in a tree model.
Occurs as the result of a change in the tree selection.
Comp-U-Learn

285

Advanced Java Programming

Paint Mode in Swing


:KHQ ZH SDLQW VKDSHV RQ WKH WRS RI RQH DQRWKHU WKH $:7 GUDZV WKH ODVW GUDZQ VKDSH RQ WKH
WRS RI HYHU\ WKLQJ XQGHU LW ,Q DGGLWLRQ WR WKLV RYHUZULWH SDLQW PRGH WKH $:7 DOVR KDV D VHFRQG
PHWKRG RI FRPELQLQJ QHZ VKDSHV ZLWK WKH ROG ZLQGRZ FRQWHQWV 7KLV LV FDOOHG DV ;25 SDLQW
PRGH %\ FDOOLQJ WKH IROORZLQJ PHWKRG ZH FDQ VHW WKH ;25 PRGH LQ RXU :LQGRZ 7KLV PHWKRG
FRPHV XQGHU WKH *UDSKLFV FODVV

g.setXORMode(Color)
7KLV ;25 SDLQW PRGH LV XVHG IRU KLJKOLJKWLQJ D SRUWLRQ RI WKH VFUHHQ 6XSSRVH ZH ZDQW WR GUDZ
D ILOOHG UHFWDQJOH RYHU D SDUW RI WKH VFUHHQ ,I ZH ZDQW WR GUDZ RQ WRS RI SL[HOV WKDW DUH DOUHDG\ LQ
WKH FXUUHQW FRORU WKDQ WKH $:7 FKDQJHV WKHP WR WKH FRORU RI WKH VHW;250RGH SDUDPHWHU ,I
ZH GUDZ VRPHWKLQJ LQ WKLV PRGH WKH $:7 FKDQJHV WKHP WR WKH FXUUHQW FRORU PRGH
$Q\ RWKHU FRORUV XQGHU WKH KLJKOLJKWHG DUHD DUH DOVR FKDQJHG E\ WKH $:7 LQ VRPH ZD\ 7KH NH\
SRLQW LV WKDW ;25 LV D WRJJOH ,I ZH GUDZ WKH VDPH VKDSH WZLFH LQ ;25 PRGH WKH VHFRQG
GUDZLQJ HUDVHV WKH ILUVW DQG WKH VFUHHQ ORRNV MXVW DV LW GLG DW WKH RXWVHW

System Colors
Color Names
Desktop
activeCaption
activeCaptionText
activeCaptionBorder
inactiveCaption
inactiveCaptionText
inactiveCaptionBorder
window
windowBorder
windowText
menu
menuText
text
textText
textHighlight
control
controlText
controlHighlight
control
scrollbar
Info
InfoText

286

Meanings
Background Color of the Desktop.
Background Color of the captions.
Text color captions.
Border color of the caption.
Background Color of inactive captions.
Text Color of inactive captions.
Border Color of inactive captions.
Background Color of windows.
Color of window border frame.
Color of window text.
Background Color for menus.
Text colors in menus.
Background Color of text.
Text Color for text.
Background Color for highlighted text.
Background Color of controls.
Text Color of controls.
Background Color for highlighted controls.
Shadow Shadow color of the controls.
Background Color of scrollbars.
Background Color of spot-help text.
Text Color of spot-help text

Comp-U-Learn

Appendix A

Appendix B
The Java Beans API
7KH -DYD %HDQV IXQFWLRQDOLW\ LV SURYLGHG E\ D VHW RI FODVVHV DQG LQWHUIDFHV LQ WKH MDYDEHDQV
SDFNDJH 7KH IROORZLQJ WDEOH OLVWV WKH LQWHUIDFHV LQ MDYDEHDQV SDFNDJH

Interface
AppletInitializer

Description
Methods in this interface are used to initialize
Beans as applets.
BeanInfo
Gives information about the properties, events and
methods of a bean.
Customizer
Allows the user to customize the beans using
GUI.
DesignMode
Determines whether the bean is executing in
design mode or not.
PropertyChangeListener When a bound property is changed a method in
this interface is invoked.
PropertyEditor
Objects that implement this interface allow the
designer to change and display property values.
VetoableChangeListener When a constrained property is changed a method
in this interface is invoked.
Visibility
Methods in this interface allow a Bean to execute
in environments where a GUI is not available.
7KH IROORZLQJ WDEOH OLVWV WKH FODVVHV LQ MDYDEHDQV SDFNDJH

BeanDescriptor

Beans
EventSetDescriptor
FeatureDescriptor
IndexedPropertyDescriptor
IntrospectionException
Introspector
MethodDescriptor

Provides information about a Bean. Also


allows us to associate a customizer with a
Bean.
Used to obtain information about a Bean.
Describes the event that can be generated by a
Bean.
Provides all the descriptor classes
Describes the indexed property of a Bean.
Generates an exception when we are analyzing
a Bean.
Analyzes a Bean and constructs a BeanInfo
object.
Describes a Method of a Bean.
Comp-U-Learn

287

Advanced Java Programming

ParameterDescriptor
PropertyDescriptor
PropertyChangeEvent
PropertyChangeSupport
PropertyEditorManager
PropertyEditorSupport
SimpleBeanInfo
VetoableChangeSupport

Describes a parameter of a method of a Bean.


Describes a property of a Bean.
Provides PropertyChangeListener and
VetoableChangeListener interfaces.
Uses the PropertyChangeListener interface.
Locates a PropertyEditor object for a given
type.
Provides functionality that can be used when
writing property editors.
Provides functionality that can be used writing
BeanInfo classes.
Notifies the VetoableChangeListener objects.

Bean Development Tools


,Q RXU ERRN ZH KDYH XVHG %'. IRU GHYHORSLQJ RXU %HDQV 7KHUH DUH VRPH RWKHU YLVXDO GHVLJQ
WRROV DOVR DYDLODEOH WR GHYHORS %HDQV 7KH IROORZLQJ WDEOH GHVFULEHV WKH EHVW RI WKHVH WRROV

288

Tool
JavaWorkSho
p
Java Studio
JavaPlan

Vendor
SunMicroSystem, Inc.
SunMicroSystem, Inc.
SunMicroSystem, Inc.

Visual Caf

Symanted, Inc.

Visual Age
Visual J++

IBM
Microsoft, Inc.

Jbuilder

Borland, Inc.

Super Mojo

Penumbra Software, Inc.

JDesignerPro

BulletProof Corp.

SuperCede

SuperCede, Inc.

Jamba

Interleaf

Description
A IDE supports applets, application
and Beans development.
Visual development tool for Beans.
A Java development tool supports
bean development.
High rated visual development tool
oriented around beans.
Visual development tool for Beans.
Java development tool with beans
development supports.
Bean oriented Java development
tools.
Java visual design tool supports
beans.
Application development tool and
middleware.
Cost effective Java visual design
tool.
Effective tool to develop beans.

Comp-U-Learn

Appendix A

JAF (JavaBeans Activation Framework)


7KH -DYD%HDQV $FWLYDWLRQ )UDPHZRUN LV XVHG WR VXSSRUW WKH GDWD SURFHVVLQJ E\ DVVRFLDWLQJ
EHDQV ZLWK WKH W\SHV RI GDWD WKDW WKH\ VXSSRUW ,W SURYLGHV D PHFKDQLVP IRU DVVRFLDWLQJ GDWD
W\SHV ZLWK GLIIHUHQW W\SHV RI GDWD ,W KDV WKH FDSDELOLW\ WR GHWHUPLQH WKH RSHUDWLRQV VXSSRUWHG E\
GDWD RI D SDUWLFXODU W\SH DQG WR LQVWDQWLDWHG EHDQV WR VXSSRUW VSHFLILF GDWD RSHUDWLRQV )RU WKLV
-$) $3,V DUH WKHUH LQ WKH MDYD[DFWLYDWLRQ SDFNDJH 7KH IROORZLQJ WDEOH OLVWV WKH FODVVHV DQG
LQWHUIDFHV LQ WKDW SDFNDJH

Class/Interface
DataHandler
DataSource

FieldDataSource
URLDataSource
DataContextHandler

CommandMap

CommandObjects
MimeType

Description
Provides a standard interface to data of
different types and entry point of the JAF.
Interface that provides encapsulated access
to data of different types. It reports the data
type and provides access to the data via input
and output streams.
Extends DataSource to provide access to file
data.
Extends DataSource to provide access to
data that is accessible via a URL.
Uses the DataHandler to convert DataSource
objects to the objects they represent, and to
convert objects to byte streams of a
particular MIME type.
Provides access to the commands supported
for a particular MIME type, and maps these
commands to objects that support those
commands.
An interface implemented by JavaBeans to
make JAF aware.
Encapsulates a MIME type.

Comp-U-Learn

289

Index

Index
A

Aggregation, 98 99
Apache Web Server, 111
API, 3, 41, 69, 70, 105 107, 111, 152, 154,
162, 164, 184 186, 195, 198, 249 250,
252, 254, 262, 265 271, 278

Email, 222
EtchedBorder, 31
ExplicitButton, 81, 82, 84

Filtering, 128, 146

Basic Object Adapter, 231


BDK, 71, 73, 77, 79, 83
BeanBox, 71, 72, 76, 89 90, 92
BeanInfo, 70, 87, 94 96, 98
Beans, 69, 70, 75, 80, 83, 84, 92, 93, 98, 99,
249
BevelBorder, 31
BlueButton, 83
BorderLayout, 55, 61
Borland, 236
Bridges, 235

CGI, 104 106, 108, 110, 115, 217, 235


ChangeReporter, 81
ChoiceFormat, 277
CLASSPATH, 204
Clipboard, 271 274, 278
COBOL, 154, 184, 223
CORBA Facilities, 234
CORBA IDL, 223, 227, 229
CORBA Services, 232
Cursor, 181

IDL, 223, 225 232, 236, 238, 245 246


IIOP, 227, 229, 234 236, 245 246
Init, 115
Input Dialog Box, 37
Integrated Development Environment, 69,
155
Interface Definition Language, 196, 223
Interface Repository, 223, 231, 236 237,
246
Internationalization, 275, 278
Internet Inter ORB Protocol, 227, 229, 234
245
Introspection, 87, 89, 164, 249
IOR, 235, 246
ISAPI, 105, 115

D
Database, 110, 149, 151, 154, 158 159,
161, 222 233, 269
DateFormat, 277 278
DCE, 224
DCOM, 194, 195, 196
DecimalFormat, 277
DELETE, 110
Destroy, 115
Distributed Computing Environment, 193
DriverManager, 145, 149, 158 159

Getter Method, 34
Getter, 34

H
HTML Generation, 129
HttpServlet, 109 111, 113, 116, 120, 126,
128, 142, 145

J
JAR, 91
Java 2D, 3
Java Foundation Class, 3, 26
Java Mail, 265, 266, 267
Java Native Interface, 259
Java Security Manager, 107
Java Servlet Development Kit, 107, 111
Javah, 259

Comp-U-Learn

291

Advanced Java Programming

OLE, 194
OMG, 222 224, 231 232, 234, 236
OPTIONS, 34
OrangeButton, 83
ORB, 196
ORB, 222 223, 225 231, 234 236, 238,
240 241, 245 246
OurButton, 74, 80, 81, 84

JavaWebServer, 108
Jbuilder, 70
Jbutton, 39
JcheckBoxMenuItem, 48
Jcomponent, 22
JDBC Driver, 149
JDBC SELECT, 82
JellyBean, 80
JFC, 3, 27, 32, 37, 60, 65
JigsawServer, 108
Jlist, 16
JMAPI, 268, 269, 271, 278
JNI, 259, 262
JradioButton, 24
JradioButtonMenuItem, 48
JrootPane, 31
JSDK, 107, 111, 112, 120
Jtable, 6
Jtree, 7
Juggler, 83
Juggler, 95, 97
JVM, 104, 195, 197, 259, 268, 269

P
Panel, 5, 11, 22
Persistence, 232
Persistence, 70
Persistence, 91, 99
POP3, 265 267
POST, 110, 118, 140 141
PrintWriter, 111, 113, 117, 124, 126, 129,
142, 145
PUT, 110, 168

QuoteMonitor, 82, 84

LineBorder, 31
Locale, 254, 275 278
Lotus, 108

Mail Client, 265


Mail Server, 265
MatteBorder, 31
Menu, 10, 48, 52, 75, 273
Message Transfer Agent, 265
Modal Dialog Box, 32
Modeless Dialog Box, 32
Molecule, 83
Motif, 58, 63, 65
MVC, 57

RDBMS, 149, 153 154, 232


Reflection, 249, 252, 254, 261, 262
Remote Procedure Call, 225
Remote Reference Layer, 198
Remote, 191, 194 198, 200, 201, 206, 210
214, 218, 225, 227, 229
Repository ID, 227, 229
Request For Comments, 265
ResourceBundle, 275 276
RFC, 265 266
RMI, 221 222, 227, 230, 244, 249
RPC, 224
Runtime, 150, 257 258, 261 262

Native Methods, 259

Serialization, 70
Serialization, 91, 99
Service, 232 234, 236 237
Servlet Context, 124
Servlet Engines, 107
ServletRequest, 109 110, 116, 123, 124,
125
Servlets, 103 104, 106 107, 111, 113,
119, 127, 144, 146, 224
Setter Method, 34

O
Object Adapter, 231
Object Database Management Group, 233
Object Management Group, 222, 224
Object Request Broker, 196, 222, 224 246
ODMG, 233

292

Comp-U-Learn

Index

Setter, 34
Signature, 261
Skeleton, 196, 198, 203, 205 206, 215,
231
SoftBevelBorder, 31
Solaris, 106, 236
SQLJ, 150 156, 158, 160, 161 166, 170
187
SSJS, 104 105, 119
Stop, 74, 75
Stub, 198, 203, 205, 206, 215
SunWebServer, 108

T
TCP/IP, 191, 192, 193
TCP/IP, 222, 224, 234
TickTock, 83
Translator, 150 152
Transport Layer, 198

U
UnicastRemoteObject, 201
UnicastRemoteObject, 210 212, 214
Unpickling, 84
User Agent, 265

V
VisiBroker, 235 236, 238
Visigenic, 235 236, 238
Visual Caf, 70

W
Web Server, 111
ZIP, 78

Comp-U-Learn

293

También podría gustarte