Professional Documents
Culture Documents
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
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.
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
0RUHRQ6HUYOHW
7DEOHRI&RQWHQWV&RQWG
-DYD6WRUHG3URFHGXUHV
'LVWULEXWHG&RPPXQLFDWLRQ50,
'HVLJQRI'LVWULEXWHG$SSOLFDWLRQV
'LVWULEXWHG$SSOLFDWLRQVRQWKH,QWHUQHW,QWUDQHW
7KH'LVWULEXWHG&RPSXWLQJ(QYLURQPHQW
7DEOHRI&RQWHQWV&RQWG
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%URNHU25%
&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\
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
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
%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
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.
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
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
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
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
([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
WKH
-DYD
FRPSRQHQWV
DQG
WRROV
:H
WKUHHWLHU
DOVR
VKRXOG
EDVHG
EH
DEOH
DSSOLFDWLRQV
WR
XVLQJ
GHYHORS
GLVWULEXWHG
WHFKQRORJLHV
VXFK
DV
iii
Session 1
Swing in Java
) 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 Swing
Swing Button
Image List
Tables
Drawing Objects
JscrollBar
JRadioButton
Swing in Java
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
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
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.
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 -%XWWRQWUDGLWLRQDO DQG HQKDQFHG *8,
%XWWRQV -7RJJOH%XWWRQFKHFN ER[HV DQG UDGLR EXWWRQV DQG -0HQX,WHPPHQXV 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
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
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
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();
}
}
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
: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 KROGHU7DE&RQWURO %DU
12
Comp-U-Learn
Swing in Java
Fig 1.4
/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
Example 1.5:
import
import
import
import
import
java.awt.*;
java.awt.event.*;
javax.swing.*;
javax.swing.event.*;
javax.swing.border.*;
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());
}
}
}
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
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 {
16
Comp-U-Learn
Swing in Java
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
Example 1.7:
import
import
import
import
import
java.awt.*;
java.awt.event.*;
javax.swing.*;
javax.swing.event.*;
javax.swing.border.*;
18
Comp-U-Learn
Swing in Java
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
20
Comp-U-Learn
Swing in Java
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
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
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
Example 1.10:
import
import
import
import
javax.swing.*;
javax.swing.event.*;
java.awt.*;
java.awt.event.*;
24
Comp-U-Learn
Swing in Java
}}
public class Radio
{
public static void main(String args[])
{
JFrame fr=new ourframe();
fr.show();
}}
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
26
Comp-U-Learn
Session 2
Swing Component
In This Session...
Introduction
Windows
Borders
Layouts
JoptionPane
Jlabel
Menus
Jtree
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
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
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
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
32
Comp-U-Learn
Swing Components
ShowMessageDialog
ShowConfirmDialog
ShowOptionDialog
ShowInputDialog
$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[]
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
&/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
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[
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
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
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
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
Example 2.5:
import
import
import
import
java.awt.*;
java.awt.event.*;
javax.swing.*;
javax.swing.border.*;
Comp-U-Learn
41
42
Comp-U-Learn
Swing Components
Comp-U-Learn
43
44
Comp-U-Learn
Swing Components
{
}
private
private
private
private
private
private
ButtonPanel
ButtonPanel
ButtonPanel
ButtonPanel
ButtonPanel
ButtonPanel
typePanel;
messagePanel;
messageTypePanel;
optionTypePanel;
optionsPanel;
inputPanel;
Fig 2.7
Comp-U-Learn
45
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
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.*;
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
});
}
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
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
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.*;
Comp-U-Learn
53
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
}
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
Comp-U-Learn
57
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
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
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
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
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
7KH PHWKRG VKRZ,QSXW'LDORJ LV XVHG WR FUHDWH D &XVWRP 'LDORJ ER[ ZLWK RXU RSWLRQV
66
Comp-U-Learn
Session 3
Beans Fundamentals
In This Session...
Beans Architecture
Bean Concepts
Bean Box
Creating a Bean
The EventMonitor
JDBC SELECT
The QuoteMonitor
Beans Fundamentals
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
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
3URSHUWLHV
DUH D %HDQV DSSHDUDQFH DQG EHKDYLRU DWWULEXWHV WKDW FDQ EH FKDQJHG DW GHVLJQ WLPH
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
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
Fig. 3.5
Comp-U-Learn
73
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
Comp-U-Learn
75
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 REMHFWVD\ %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
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
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
FYIP
GHQRWHV WKH RSWLRQV XQGHU WKH FUHDWLRQ RI WKH MDU ILOH 1RZ ZH FDQ ILQG D
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
Fig. 3.13
Fig. 3.14
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
FRQQHFWHG
WR
DQ
([SOLFLW%XWWRQ
EHDQ
HYHQW
)RU
WKDW
ZH
KDYH
WR
FRQQHFW
WKH
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.
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
Comp-U-Learn
83
:H FDQ ORDG WKH ILOH EDFN LQWR %HDQER[ ZLWK WKH /RDG PHQX LWHP LQ WKH )LOH PHQX
:KDW LV 3LFNOLQJ"
:KDW LV 8QSLFNOLQJ"
84
Comp-U-Learn
Session 4
Inside Beans
) Introspection
) Persistence in Beans
) Java.Beans Package
) BeanInfo Interface
In This Session...
Introspection
Making an Applet
Persistence
Java.Bean Package
Introspection Methods
BeanInfo Interface
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
,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
Comp-U-Learn
87
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
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[
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
Fig. 4.4
7KH IROORZLQJ ILJXUH VKRZV OLVW RI ILOHV LQ WKH
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 ,QYRFDWLRQ50, 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
Comp-U-Learn
91
: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
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
IRU
FXVWRPL]LQJ
EHDQ
7KHVH
FODVVHV
DUH
UHTXLUHG
WR
EH
VXEFODVVHV
RI
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
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
Comp-U-Learn
95
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
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
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
Other Interfaces
7KH
9HWRDEOH&KDQJH/LVWHQHU
LQWHUIDFH
LV
LPSOHPHQWHG
E\
FODVVHV
WKDW
KDQGOH
WKH
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
7R REWDLQ LQIRUPDWLRQ DERXW WKH SURSHUWLHV PHWKRGV DQG HYHQWV RI D EHDQ BBBBBBB FODVV LV
XVHG
&XVWRPL]HG VHULDOL]HG EHDQV DUH VDYHG LQ WKH ILOHV ZLWK D VHU H[WHQWLRQV
:KDW LV ,QWURVSHFWLRQ"
'HILQH 3HUVLVWHQFH
Comp-U-Learn
99
Session 5
Servlet Programming
In This Session...
Servlets
Why Servlets?
Servlet Architecture
Developing a Servlet
Running a Servlet
Service Method
Servlet Programming
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
104
Comp-U-Learn
Servlet Programming
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
Comp-U-Learn
105
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
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
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
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
Request
S ervice()
Server
Response
(Generic Servlet )
Fig. 5.1
Comp-U-Learn
109
DUH
MXVW
H[WHQVLRQV
RI
6HUYOHW5HTXHVW
DQG
6HUYOHW5HVSRQVH
ZLWK
+773
VSHFLILF
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
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
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
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
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
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
Comp-U-Learn
115
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
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
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.*;
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
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.
Comp-U-Learn
119
7ZR SDFNDJHV WKDW PDNH XS WKH VHUYOHW DUFKLWHFWXUH BBBBBBB DQG BBBBBBBBBBBB
:H FDQ XVH WKH MDYDF WRRO IRU FRPSLOLQJ RXU VHUYOHW SURJUDP
120
Comp-U-Learn
Session 6
More on Servlets
In This Session...
The Server
The Client
The Request
Servlet Chaining
HTML Generation
HTML Object
HTML Document
HTML Elements
HTML Form
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
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
Example 6.1:
import java.io.*;
import java.util.*;
import javax.servlet.*;
public class ex1 extends GenericServlet
{
Comp-U-Learn
123
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
FDQ
EH
FRQYHUWHG
WR
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
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
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
Fig. 6.2
126
Comp-U-Learn
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
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.*;
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
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
&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
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
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
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
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
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
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
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
Fig. 6.5
144
Comp-U-Learn
More on Servlet
Example 6.13:
import
import
import
import
java.io.*;
java.sql.*;
javax.servlet.*;
javax.servlet.http.*;
Comp-U-Learn
145
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.
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
6HUYOHW FRQYHUWV RQH W\SH RI FRQWHQW LQWR DQRWKHU WKH WHFKQLTXH LV FDOOHG )LOWHULQJ
$ VHUYOHW FDQ XVH WKH JHW$XWK7\SH PHWKRG WR ILQG RXW WKH 6HUYHU QDPH
Comp-U-Learn
Session 7
In This Session...
SQLJ Variables
Building an Application
Comp-U-Learn
149
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
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
Comp-U-Learn
151
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
Comp-U-Learn
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
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 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
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
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
Note
All the variables and syntaxes are case sensitive, which means class is not equivalent
to Class and VALUE is not equivalent to Value.
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
)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
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
,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
159
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 ?
-'%&SURJUDPVFDQEHSUHIHUUHG
To use dynamic SQL.
To have a SQLJ layer during deployment or development.
Three Kinds of SQLJ clauses
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
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};
$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
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
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
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
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
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
Comp-U-Learn
165
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
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
Fig. 7.4
import java.sql.*;
import java.sql.SQLException;
168
Comp-U-Learn
Fig. 7.5
Comp-U-Learn
169
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
)
};
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.
Fig. 7.5
171
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);
}
}
Comp-U-Learn
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
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
,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
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
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
178
Comp-U-Learn
,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
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
Comp-U-Learn
,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;
181
182
Comp-U-Learn
,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 )
};
: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
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
$ 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
-'%& 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
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.
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
-'%& 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
Comp-U-Learn
187
Session 8
) COM / DCOM
) RMI Three Tier Architecture
) Creating Application using RMI
In This Session...
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\
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 VHUYHU7LHU
Comp-U-Learn
191
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
Back-End
Server
Back-End
Server
Application
Server
Client
Client
Client
Fig. 8.2
192
Comp-U-Learn
WKH
-DYD
(QDEOHG
%URZVHU
VXFK
DV
,QWHUQHW
([SORUHU
RU
1HWVFDSH
1DYLJDWRU
7KH
File
Server
File
Server
Web
Server
Browser
(Applet)
Browser
(Applet)
Browser
(Applet)
Fig. 8.3
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
Directory Services
Distributed File Service
Distributed Time Service
Security Service
Remote Procedure Call
DCE Threads
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
194
Comp-U-Learn
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
Transport
Layer
Fig. 8.4
7KH ILJXUH VKRZV KRZ '&20 ZRUNV
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
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
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
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
REMHFW 7KH 5HPRWH ,QWHUIDFH LV LPSOHPHQWHG LQ RUGHU WR DFFHVV WKH UHPRWH REMHFW
Comp-U-Learn
197
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
198
Comp-U-Learn
Server side
Skeleton
Client side
Stub
Remote
Reference
Layer
Remote
Reference
Layer
Transport
Layer
Transport
Layer
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
Comp-U-Learn
199
/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
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
200
Comp-U-Learn
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
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
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
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
,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
&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
Fig. 8.7
1RZ WKH 50, UHJLVWU\ LV VWDUWHG DQG QHZ HPSW\ ZLQGRZ LV FUHDWHG
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
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
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.
&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
:KHQ WKH VHUYHU SURJUDP LV FRPSLOHG ERWK BBBBBBBBB DQG BBBBBBBBBBBB LV FUHDWHG RQ
VHUYHU
Comp-U-Learn
205
:KDW LV WKH GLIIHUHQFH EHWZHHQ GLVWULEXWLRQ RI DSSOLFDWLRQ LQ WKH ,QWUDQHW DQG ,QWHUQHW"
206
Comp-U-Learn
Session 9
RMI Packages
) RMI Packages
) RMI Security
) Applet in RMI
) RMI Alternatives
In This Session...
RMI Packages
Garbage Collection
RMI Security
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\
WKH
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
7KH UHJLVWU\ SURFHVV LV VWDUWHG ZKHQ UPLUHJLVWU\ SURJUDP LV H[HFXWHG XVLQJ WKH
7KH 5HJLVWU\ LQWHUIDFH GHILQHV WKH PHWKRGV ELQG UHELQG XQELQG OLVWDQG ORRNXS 7KHVH
PHWKRGV DUH XVHG E\ WKH 1DPLQJ FODVV WR DVVRFLDWH REMHFW QDPHV DQG 50, 85/V
7KH /RFDWH5HJLVWU\ FODVV SURYLGHV WKH VWDWLF JHW5HJLVWU\ PHWKRG IRU UHWULHYLQJ 5HJLVWU\ REMHFWV
RQ WKH ORFDO KRVW RU D UHPRWH KRVW
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
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
,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
Comp-U-Learn
211
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
WKH PHPRU\
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
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
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
import java.rmi.*;
public interface Hello_int extends Remote
{
public String getDesc() throws RemoteException;
}
Comp-U-Learn
213
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
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
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
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
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
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.
7KH LQWHUIDFHV 5HJLVWU\ DQG 5HJLVWU\+DQGOHU DQG WKH FODVV /RFDWH5HJLVWU\ DUH SURYLGHG E\
WKH BBBBBBBBBBBBBBB SDFNDJH
7KH GLVWULEXWHG JDUEDJH FROOHFWLRQ DOJRULWKP XVHG E\ WKH 50, V\VWHP LV D BBBBBBBBB
DOJRULWKP
7KH
MDYDUPLVHUYHU5HPRWH2EMHFW
LQWHUIDFH
H[WHQGV
2EMHFW
DQG
MDYDUPL5HPRWH
,Q 50, 85/ WKH KRVW QDPH LV QRW RSWLRQDO EXW WKH SRUW QXPEHU LV RSWLRQDO
218
Comp-U-Learn
LPSOHPHQWV
Session 10
CORBA An Insight
In This Session...
Introduction to CORBA
CORBA Services
CORBA An Insight
7KHUH
ZDV
WLPH
IRU
DXWRPDWLRQ
7LPH
IRU
DXWRPRELOHV
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
: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
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
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
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
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
LV
QRW
ODQJXDJH
,W
LV
WHFKQRORJ\
$QG
WRGD\V
WHFKQRORJ\
222
Comp-U-Learn
VKRXOG
VHULRXVO\
$QG KRZ
EH
CORBA An Insight
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
Comp-U-Learn
223
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
-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
-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
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
&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
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
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
Various Languages
Various Languages
IDL
IDL
Client
Server
Objects
Objects
Fig. 10.1
ELQGLQJ
0RVW
RWKHU IRUPV RI
PLGGOHZDUH
RQO\
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
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
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
&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\
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
Comp-U-Learn
227
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
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
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
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
230
Comp-U-Learn
CORBA An Insight
SURYLGHV
D VWDQGDUG
ZD\
RI
JHWWLQJ
GDWD
LQ
DQG
RXW
RI D
FRPSRQHQW
XVLQJ
VWUHDP
OLNH
PHFKDQLVP
SURYLGHV
LQWHUIDFHV
DXWKHQWLFDWLRQ
DFFHVV
IRU
V\QFKURQL]LQJ
FRQWURO
OLVWV
WLPH
LQ
FRQILGHQWLDOLW\
GLVWULEXWHG
DQG
REMHFW
QRQUHSXGLDWLRQ
VHFXULW\
,W
DOVR
,W
VXSSRUWV
PDQDJHV
WKH
Comp-U-Learn
231
Trader Service
,W DOORZV REMHFWV WR SXEOLFL]H WKHLU VHUYLFHV DQG ELG IRU MREV
SURYLGHV
&25%$
LQWHUIDFHV
WR
JHQHULFDOO\
FUHDWH
DQG
PDQLSXODWH
WKH
PRVW
FRPPRQ
FROOHFWLRQV
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
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%$
,,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
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
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%
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
Comp-U-Learn
233
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 LV DYDLODEOH RQ D YDULHW\ RI SODWIRUPV LQFOXGLQJ 6RODULV +38; $,; ,5,; 'LJLWDO
8QL[ :LQGRZV DQG :LQGRZV 17
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
9LVL%URNHU
SODQ
IRU
&25%$
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
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
/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
Comp-U-Learn
235
%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
ZLOO
RSHQ
EDQN
DFFRXQW
DQG
WR
TXHU\
Step 1:
:ULWH DQ ,'/ SURJUDP DQG QDPH LW DV %DQNLGO
module Bank {
interface Account {
float balance();
};
interface AccountManager {
Account open(in string name);
};
};
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
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
Step 2:
1RZ LWV WLPH WR ZULWH WKH LPSOHPHQWDWLRQ SURJUDP 7KH SURJUDP $FFRXQW0DQDJHU,PSOMDYD LV
FRPSLOHG
// 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
DFFRXQW
DQG
EDODQFH
ZKLFK
UHWXUQV
WKH
EDODQFH
LQ
Comp-U-Learn
239
)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
Fig. 10.9
$IWHU GRXEOH FOLFNLQJ YLVLEURNHU 6PDUW $JHQW ZLQGRZ LV RSHQHG 'RQW FORVH WKLV ZLQGRZ MXVW
PLQLPL]H WKH ZLQGRZ
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
CORBA An Insight
Step 7:
7KH PDMRU VWHS LV WR UXQ WKH FOLHQW WR YLHZ WKH ILQDO UHVXOW
UXQ
WKH
FOLHQW
SURJUDP
:KLOH
UXQQLQJ
WKH
SURJUDP
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
BBBBBBBBBBBBBBBB
SURYLGHV
UXQ
WLPH
UHSRVLWRU\
RI
LQIRUPDWLRQ
DERXW
WKH
FODVVHV
VHUYHU VXSSRUWV
BBBBBBBBBBBBBBBB VHUYLFH GHILQHV RSHUDWLRQV IRU FUHDWLQJ FRS\LQJ PRYLQJ DQG GHOHWLQJ
FRPSRQHQWV
244
Comp-U-Learn
CORBA An Insight
Comp-U-Learn
245
Session 11
Extending Java
) 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
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
,QWURVSHFWLRQ PHDQV WR LQTXLUH :KHQ ZH JHW DQ REMHFW FUHDWHG E\ VRPHRQH HOVH IURP VRPH
RWKHU PDFKLQH ZH PD\ LQTXLUH DERXW LWV FRQVWUXFWRUV
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
Comp-U-Learn
249
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('
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
VXFK
DV
JHW1DPH
JHW'HFODULQJ&ODVV
QHZ,QVWDQFH
JHW3DUDPHWHU7\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
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
Comp-U-Learn
253
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
ELQ
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
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
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
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
Comp-U-Learn
259
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
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
260
Comp-U-Learn
Extending Java
6R WKH QDWLYHK ILOH ZLOO EH FUHDWHG ZLWK WKH IROORZLQJ FRQWHQWV
#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
BBBBBBBB $3, DOORZV MDYD FRGH WR H[DPLQH FODVVHV DQG REMHFWV DW UXQ WLPH
-1, SURYLGHV WKH FDSDELOLW\ WR DFFHVV QDWLYH PHWKRGV WKURXJK VKDUHG '//V
:KDW LV 5HIOHFWLRQ"
262
Comp-U-Learn
Session 12
) JavaMail APIs
) Email System
) Java Management APIs
) Clipboard Mechanism
) Internationalization
In This Session...
Email System
JavaMail API
Components of JMAPI
Clipboard
Internationalization
Date Formatting
Email System
7KH (PDLO V\VWHPV FRQVLVWV RI WZR FRPSRQHQWV
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
POP3
Mail
Server
SMTP
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
Application Layer
(GUI and Application Functionality)
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
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
DJHQW VRIWZDUH FDQ EH G\QDPLFDOO\ XSGDWHG DQG LV LQVWDOOHG RQ DSSOLDQFHV DV -DYD FODVVHV WKDW DUH
ORDGHG IURP :HE VHUYHUV
268
Comp-U-Learn
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
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
270
Comp-U-Learn
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
*HW1DPH JHW&RQWHQWV
FOLSERDUG
VHW&RQWHQWV
'DWD)ODYRU
Methods
DV
ZHOO
DV
WR
-DYD
JHW6\VWHP&OLSERDUG
*HW+XPDQ3UHVHQWDEOH1D
PHJHW0LPH7\SH
FLOSERDUG
QRUPDOL]H0LPH7\SH
JHW5HSUHVHQWDWLRQ&ODVV
HTXDOV
6\VWHP)ODYRXU0DS
,W SURYLGHV DQ LPSOHPHQWDWLRQ
*HW1DWLYHV)RU)ODYRUV*H
W)ODYRUV)RU1DWLYHV
DOVR
SURYLGHV
VXSSRUW
IRU
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
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
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
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
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
Comp-U-Learn
275
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
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
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.
'DWH)RUPDW FODVV WR SURYLGH D GHIDXOW LPSOHPHQWDWLRQ RI WKH GDWH IRUPDWWLQJ DQG SDUVLQJ
FDSDELOLWLHV
:KDW LV ,QWHUQDWLRQDOL]DWLRQ"
278
Comp-U-Learn
Glossary
Glossary
Bean Box
7KH %HDQ %R[ LV WKH FRPSRVLWLRQ ZLQGRZ
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
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
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
GenericServelet
*HQHULF6HUYOHW
LV
FODVV
H[WHQGHG
ZKHQ
RXU
RZQ
VHUYOHW
LV
GHYHORSHG
7KH
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
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
&25%$V ,,23
IMAP
,QWHUQHW 0HVVDJH $FFHVV 3URWRFRO
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
UHIHUHQFH
Jar
0RUH WKDQ RQH FODVV FDQ EH FRPELQHG WR IRUP MDU ILOH XVLQJ WKH MDU FRPPDQG
-DYD $UFKLYH )LOH
$IWHU FUHDWLQJ
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
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
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
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
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
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
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
LQWHUIDFH
EXW
GRHV
QRW
UHO\
RQ
$:7
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
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
287
ParameterDescriptor
PropertyDescriptor
PropertyChangeEvent
PropertyChangeSupport
PropertyEditorManager
PropertyEditorSupport
SimpleBeanInfo
VetoableChangeSupport
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
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
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
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
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
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