Sei sulla pagina 1di 8

Exploiting Java, Objects, & Components

$129(59,(:2)64/-(0%(''('64/,1-$9$
-XOLH%DVX2UDFOH&RUSRUDWLRQ

,1752'8&7,21
2YHUWKHSDVWWZR\HDUV-DYDKDVEHFRPHWKHODQJXDJHRIFKRLFHIRUGHYHORSLQJ,QWHUQHWDQGLQWUDQHWDSSOLFDWLRQV,WV
SURPLVHRIDVWDQGDUGL]HGSRUWDEOHDQGQHWZRUNFHQWULFDSSOLFDWLRQGHYHORSPHQWVROXWLRQLVEHLQJUHDOL]HGVWHDGLO\DQG-DYD
DSSOHWVDQGVHUYOHWVDUHDSSHDULQJDOORYHUWKH:RUOG:LGH:HEEULQJLQJULFKDQGYDULHGIXQFWLRQDOLW\WRWKHSUHYLRXVO\VWDWLF
PHGLXP7KHLQGXVWU\OHDGLQJ2UDFOHLGDWDVHUYHUSURYLGHVFRPSUHKHQVLYH-DYDVXSSRUWDWERWKWKHFOLHQWDQGWKHVHUYHULQD
YDULHW\RIZD\V>@,QWKLVSDSHUZHSUHVHQWDQRYHUYLHZRIWKHIHDWXUHVRI64/-DWRROWKDWDOORZVHPEHGGLQJRIVWDWLF64/
VWDWHPHQWVWH[WXDOO\LQ-DYDSURJUDPV7KH64/-WUDQVODWRUFRQYHUWVVXFKSURJUDPVWRSXUH-DYDFRGHRSWLRQDOO\FKHFNLQJ
WKHVWDWLF64/VWDWHPHQWVDJDLQVWDGDWDEDVHVFKHPD7KHJHQHUDWHG-DYDFRGHFDQEHFRPSLOHGDQGWKHQH[HFXWHGWKURXJKD
-'%&GULYHUDJDLQVWWKHGDWDEDVH2UDFOHLDOVRVXSSRUWV64/-VWRUHGSURFHGXUHVIXQFWLRQVDQGWULJJHUVZKLFKH[HFXWHRQD
-DYD9LUWXDO0DFKLQHLQWHJUDWHGZLWKWKHGDWDVHUYHU>@WKXVHQDEOLQJIOH[LEOHGHSOR\PHQWFRQILJXUDWLRQVDQGFRGHSDUWLWLRQ
DQGPLJUDWLRQDFURVVGLIIHUHQWWLHUV6RPHPDMRUEHQHILWVRI64/-DUHLQFUHDVHGXVHUSURGXFWLYLW\WKURXJKFRPSDFWV\QWD[
UREXVWSURJUDPPLQJGXHWR64/FKHFNLQJDWGHYHORSPHQWWLPHVWDQGDUGL]DWLRQE\PDMRUGDWDEDVHYHQGRUVDQGSRUWDELOLW\RI
ELQDU\FRGHDFURVVGLIIHUHQWYHQGRUV·GDWDEDVHV
7KHSDSHULVRUJDQL]HGDVIROORZV,QVHFWLRQZHUHYLHZWKH64/-IUDPHZRUNIRUSURJUDPGHYHORSPHQWDQGLWVEHQHILWV
6HFWLRQSURYLGHVDWHFKQLFDORYHUYLHZRIWKH64/-ODQJXDJHLQFOXGLQJWKHXVHRIFRPSOH[-DYDKRVWH[SUHVVLRQVDVELQG
SDUDPHWHUV64/-LWHUDWRUVIRUTXHU\LQJGDWDDQGFDOOVWRVWRUHGSURFHGXUHV:HLOOXVWUDWHWKURXJKDGHWDLOHGH[DPSOHWKH
VWHSVLQYROYHGLQGHYHORSLQJD64/-SURJUDPVKRZLQJKRZWRKDYHWKH64/-WUDQVODWRUFKHFNDOOWKHVWDWLF64/VWDWHPHQWV
DJDLQVWDGDWDEDVHVFKHPD1H[WZHGHPRQVWUDWHWKHXVHRIG\QDPLF64/DQGVKRZKRZ64/-LQWHURSHUDWHVVHDPOHVVO\
ZLWK-'%&FRGHDOORZLQJG\QDPLF64/VWDWHPHQWVZULWWHQLQ-'%&WRFRH[LVWZLWKWKHVWDWLFRQHVLQ64/-)LQDOO\ZH
GHVFULEHWKHSURFHVVRIGHILQLQJDQGUXQQLQJD64/-VWRUHGSURFHGXUHLQWKH2UDFOHLGDWDVHUYHU:HFRQFOXGHZLWKD
FRPSDULVRQRIWKH64/-$3,ZLWKWKH-'%&LQWHUIDFHDQGVXPPDUL]HWKHEHQHILWVRI64/-DQG2UDFOH·V64/-VWUDWHJ\

 7+(64/-)5$0(:25.$1',76%(1(),76
7KLVVHFWLRQGHVFULEHVWKHDSSOLFDWLRQGHYHORSPHQWIUDPHZRUNIRU64/-LQWHUPVRIWKHVWHSVUHTXLUHGWRWUDQVODWHFRPSLOH
DQGUXQD64/-SURJUDP:HDOVRGLVFXVVWKHEHQHILWVRIWKH64/-VWDQGDUGDQGRILWVLPSOHPHQWDWLRQE\2UDFOH
'(9(/23,1*$33/,&$7,21686,1*64/-
7KH64/-WUDQVODWRUFRQYHUWV-DYDSURJUDPVFRQWDLQLQJHPEHGGHGVWDWLF64/VWDWHPHQWVLQWR-DYDSURJUDPVZLWKFDOOVWRWKH
64/-UXQWLPH7KLVSURFHVVLVVLPLODUWRWKH3UR &SUHFRPSLOHUWUDQVODWLQJ64/VWDWHPHQWVHPEHGGHGLQ&DPDLQGLIIHUHQFH
EHLQJWKDWJHQHUDWHGFRGHLQ64/-FRQIRUPVWRDYHQGRUQHXWUDOVWDQGDUG9HQGRUVSHFLILFIHDWXUHVDQGH[WHQVLRQVDUHZHOO
VXSSRUWHGLQ64/-WKURXJKVXEVHTXHQWFXVWRPL]DWLRQRI-DYDE\WHFRGH'HYHORSLQJDQGUXQQLQJD64/-DSSOLFDWLRQZLWK
2UDFOHFRQVLVWVRIIRXUVWHSVZKLFKDUHVKRZQLQ)LJXUHDQGOLVWHGEHORZ
 7UDQVODWLRQRI64/-VRXUFHILOHVZLWKWKH64/-WUDQVODWRU7KLVJHQHUDWHV-DYDILOHVZLWKFDOOVWRWKH64/-UXQWLPHDVZHOO
DVELQDU\64/-SURILOHILOHVWKDWFRQWDLQLQIRUPDWLRQDERXWWKHVWDWLF64/VWDWHPHQWVSUHVHQWLQWKH64/-VRXUFH
 &RPSLODWLRQRI-DYDFRGHZLWKD-DYDFRPSLOHU
 &XVWRPL]DWLRQRIWKHJHQHUDWHG64/-SURILOHVIRUXVLQJ2UDFOHVSHFLILFGDWDW\SHVDQGH[WHQVLRQV
 5XQQLQJWKHDSSOLFDWLRQXVLQJWKH64/-UXQWLPHOLEUDU\DQGD-'%&GULYHUIRU2UDFOH
64/-FDQSHUIRUP6WHSVWRE\WUDQVSDUHQWO\LQYRNLQJWKH64/-WUDQVODWRUD-DYDFRPSLOHUDQGWKHQDSURILOHFXVWRPL]HU
$WWUDQVODWLRQWLPHWKHWUDQVODWRUFDQRSWLRQDOO\FKHFNWKH64/V\QWD[DQGVHPDQWLFVDJDLQVWDXVHUVFKHPDDQGYHULI\WKH
W\SHFRPSDWLELOLW\RIKRVWYDULDEOHVZLWK64/W\SHVIRUDOOVWDWLF64/VWDWHPHQWVLQWKHSURJUDP,QJHQHUDOWKH64/-UXQWLPH
LVDEOHWRXVHDQ\-'%&GULYHUIRUH[HFXWLRQDQGZLOOZRUNHYHQZLWKDQRQ-'%&LPSOHPHQWDWLRQ7KH2UDFOH64/-

Paper 607
Exploiting Java, Objects, & Components

UXQWLPHFDQXVHHLWKHU2UDFOH·V-'%&2&,RU-'%&WKLQGULYHUVDVVSHFLILHGE\WKHXVHU'HWDLOVRIWKH-'%&2&,DQG
-'%&WKLQGULYHUVIURP2UDFOHFDQEHIRXQGLQ>@

-DYD -DYD 2 UDFOH


64 /-FRGH 64 / - -DYD
FRGH E\WH & XVWRP L]HU 5 XQ
7UDQVODWRU & RP SLOHU FRGH

2 UDFOH 2 UDFOH

)LJXUH7KH64/-$SSOLFDWLRQ'HYHORSPHQW3URFHVV

$5HIHUHQFH,PSOHPHQWDWLRQRI64/-KDVEHHQGHYHORSHGDW2UDFOHLQFROODERUDWLRQZLWKPDMRUYHQGRUVVXFKDV,%0,QIRUPL[
-DYD6RIW6\EDVH7DQGHPDQGRWKHUV7KLV5HIHUHQFH,PSOHPHQWDWLRQLVZULWWHQHQWLUHO\LQ-DYDDQGKDVDSOXJLQ
DUFKLWHFWXUHIRUHDV\LQWHJUDWLRQLQWRGHYHORSPHQWWRROV7KH64/-WUDQVODWRUDUFKLWHFWXUHLVDOVRRSHQDQGH[WHQVLEOHZKLFK
SHUPLWV64/FKHFNLQJDQGUXQWLPHFXVWRPL]DWLRQIRUDUELWUDU\GDWDEDVHVWKURXJK-DYDSOXJLQV6RXUFHFRGHIRUWKH64/-
5HIHUHQFH,PSOHPHQWDWLRQKDVEHHQPDGHDYDLODEOHIUHHO\WRWKHSXEOLFDQGWRRWKHUGDWDEDVHYHQGRUV

%(1(),762)7+(64/-67$1'$5'
64/-ZDVGHYHORSHGFRRSHUDWLYHO\E\WKHPDMRUGDWDEDVHYHQGRUVSULPDULO\WRSURYLGH-DYDDSSOLFDWLRQGHYHORSHUVZLWKD
VLPSOHDQGKLJKO\SURGXFWLYHGDWDEDVHSURJUDPPLQJWRRO7KHPDMRUEHQHILWVRIWKH64/-VWDQGDUGDUHHQXPHUDWHGEHORZ
 $PXFKPRUHFRQFLVHV\QWD[IRUGDWDEDVHDFFHVVDQGLPSURYHGGHYHORSHUSURGXFWLYLW\
 7UDQVODWHWLPHFKHFNLQJRIWKHV\QWD[DQGVHPDQWLFVRIDOOVWDWLF64/VWDWHPHQWV
 6WURQJW\SLQJRITXHULHVWKURXJKLWHUDWRUW\SHVDQGRIGDWDEDVHFRQQHFWLRQVWKURXJKFRQQHFWLRQFRQWH[WW\SHV
 '\QDPLF64/VXSSRUWWKURXJKWKHHVWDEOLVKHG-'%&LQWHUIDFHIRUGDWDEDVHDFFHVV64/-DQG-'%&FRQVWLWXWH
FRPSOHPHQWDU\WHFKQRORJLHVDQGLWLVSRVVLEOHWRPL[DQGPDWFK64/-DQG-'%&FRGHLQWKHVDPHDSSOLFDWLRQ
 6RXUFHOHYHOSRUWDELOLW\WKURXJKYHQGRUQHXWUDOODQJXDJHV\QWD[DQGELQDU\SRUWDELOLW\WKURXJK$16,VWDQGDUGL]DWLRQRI
64/-SURILOHVDQGUXQWLPH$GGLWLRQDOXQLIRUPLW\LVREWDLQHGIURPWKHVKDUHG5HIHUHQFH,PSOHPHQWDWLRQDQG
VWDQGDUGL]HG-'%&GULYHUV
 'DWDEDVHLQGHSHQGHQFHWKURXJKFXVWRPL]DWLRQRIWKHELQDU\64/-SURILOHVWKDWGHVFULEHWKHVWDWLF64/VWDWHPHQWV
&XVWRPL]DWLRQFDQEHXWLOL]HGIRUYHQGRUVSHFLILFIHDWXUHVIRUPLJUDWLRQWRGLIIHUHQWGDWDEDVHVIRUGHEXJJLQJDQGORJJLQJ
SXUSRVHVDQGIRUSHUIRUPDQFHHQKDQFHPHQWVWKURXJKFDFKLQJRUSUHFRPSLODWLRQRI64/RSHUDWLRQV
 )OH[LEOHGHSOR\PHQWFRQILJXUDWLRQV7KH64/-UXQWLPHLVZULWWHQLQSXUH-DYDZKLFKPHDQVWKDW64/-DSSOLFDWLRQVFDQ
EHGHSOR\HGZKHUHYHU-'%&LVGHSOR\HGVXFKDVRQDWKLQFOLHQWDWKLFNFOLHQWLQWKHPLGGOHWLHURULQWKHVHUYHU
$VSDUWRIWKHPXOWLYHQGRUVWDQGDUGVHIIRUWWKH64/-3DUWVSHFLILFDWLRQIRUWKHHPEHGGLQJRIVWDWLF64/VWDWHPHQWVLQWKH
-DYDODQJXDJHKDVEHHQVXEPLWWHGWR$16,DV'UDIW;+64/-3DUWDQG3DUWSURSRVDOVGHDOZLWK64/-VWRUHG
SURFHGXUHVDQGVWRUHG-DYDFODVVHVDQGDUHDWSUHVHQWEHLQJGHYHORSHGE\WKH64/-SDUWQHUVLQFOXGLQJ2UDFOH

675(1*7+62)25$&/(·664/-,03/(0(17$7,21
$VWKHLQGXVWU\OHDGHU2UDFOHKDVQRWRQO\KHOSHGWRGHYHORSWKH64/-VWDQGDUGEXWKDVDOVRDGRSWHGLWIXOO\$GGLWLRQDOO\
2UDFOHKDVLQWHJUDWHG64/-LQLWVGDWDEDVHDQGWRROV:HQRWHEHORZWKHPDMRUVWUHQJWKVRI2UDFOH·V64/-LPSOHPHQWDWLRQ
 7LJKWLQWHJUDWLRQZLWKWKH-DYD90HPEHGGHGLQWKH2UDFOHLGDWDVHUYHU Integrating SQLJ with the server allows stored
procedures, functions, and triggers to be written in SQLJ, and supports a uniform programming style at the client and the server.
 ,QWHJUDWLRQRIWKH64/-WUDQVODWRUZLWK2UDFOH·V-'HYHORSHUWRRO-'HYHORSHULVDJUDSKLFDO,'(WKDWDOORZV SQLJ
translation, Java compilation, and profile customization to be performed in one step, also provides debugging support at the SQLJ
source code level. A production version of JDeveloper is currently available.
 2UDFOH·VRZQ64/&KHFNHUPRGXOHIRUWUDQVODWHWLPHYHULILFDWLRQRIWKHV\QWD[DQGVHPDQWLFVRIVWDWLF64/VWDWHPHQWV
Paper 607
Exploiting Java, Objects, & Components

 Support for Oracle-specific datatypes such as REFCURSORs, LOBs, and Oracle8 object types through Oracle’s own profile
customizer. The SQLJ customization process allows Oracle-specific extensions without jeopardizing standards compliance.
 ,PSURYHGSHUIRUPDQFHIRUWKH2UDFOHGDWDEDVHWKURXJKFXVWRPL]HGSURILOHV
)XUWKHUH[WHQVLRQVDQGLPSURYHPHQWVDUHSODQQHGLQ2UDFOH·V64/-VXSSRUWVXFKDVLQWHJUDWLRQZLWKWKH3HUVRQDO2UDFOH/LWH
GDWDEDVHFRPSOHWH1/6PHVVDJHVIRUJOREDOL]DWLRQDQGEHWWHUSHUIRUPDQFHDQGVFDODELOLW\WKURXJKIXUWKHULQWHJUDWLRQZLWK
2UDFOH·V-'%&GULYHUV

64/-/$1*8$*()($785(6
,QWKLVVHFWLRQZHLOOXVWUDWHWKHPDLQFRQFHSWVDQGFRQVWUXFWVLQWKH64/-ODQJXDJHZLWKWKHKHOSRIDQH[DPSOH7RSLFV
FRYHUHGLQFOXGHXVLQJKRVWH[SUHVVLRQVLQ64/VWDWHPHQWVSHUIRUPLQJXSGDWHVTXHU\LQJGDWDWKURXJK64/-LWHUDWRUVFDOOLQJ
3/64/VWRUHGSURFHGXUHVDQGIXQFWLRQVDQGXVLQJ-'%&IRUG\QDPLF64/RSHUDWLRQV
(;$03/(
:HFRQVLGHUDPLQLSURMHFWWUDFNLQJV\VWHPFRQVLVWLQJRIDWDEOHPROJECTSZLWKDQHVWHGWDEOHFROXPQOWNERSRIW\SH
OWNER_SET WKDWFRQWDLQVWKHQDPHVRIWKHRZQHUVRIDSURMHFW
CREATE TYPE OWNER_SET AS TABLE OF VARCHAR(20)
/
CREATE TABLE PROJECTS (
ID NUMBER(4),
NAME VARCHAR(30) PRIMARY KEY,
START_DATE DATE,
DURATION NUMBER(3),
OWNERS OWNER_SET ) NESTED TABLE OWNERS STORE AS OWNERS_TAB
/
/HWXVGHVLJQDQDSSOLFDWLRQWKDWFDQ  XSGDWHWKHGXUDWLRQRIDSURMHFW  OLVWWKHRSHQSURMHFWVWKDWDUH\HWWREH
FRPSOHWHG  VKRZWKHWLPHWRFRPSOHWHDOORSHQSURMHFWV  FDOFXODWHZKLFKSURMHFWVDUHGXHWKLVPRQWKHWF:HZLOO
LPSOHPHQWHDFKRIWKHVHIXQFWLRQVXVLQJDGLIIHUHQWIHDWXUHRI64/-%HORZLVWKHVNHOHWRQRIWKH-DYDFODVVProjDemoIRU
WKLVDSSOLFDWLRQ)ROORZLQJ-DYD·VILOHQDPLQJUXOHVWKHILOHFRQWDLQLQJWKLVSXEOLFFODVVPXVWEHQDPHGProjDemo.sqlj

import sqlj.runtime.*;
import sqlj.runtime.ref.*;
import java.sql.*;

public class ProjDemo {


public static void main(String[] args) {
try {
dbConnect(); // logon to the database
int numDays = 5;
String projName = "That Project";
updateDuration(projName, numDays); // update project duration
listOpenProjects(); // list open projects using named iterator
listOwners(projName); // list owners using positional iterator
getMaxDeadline(); // get max deadline via PL/SQL procedure
boolean dueThisMonth = true;
projectsDue(dueThisMonth ); // list due projects via dynamic SQL/JDBC
Date deadline = projDeadline(projName); // get deadline via SQLJ stored function
}
catch (Exception e) {
System.err.println( "Error running ProjDemo: " + e );
}
… Definitions of the above methods …
}
:HZLOOJUDGXDOO\ILOOLQWKHPHWKRGGHILQLWLRQVRIWKHProjDemoFODVVLQWKHIROORZLQJVHFWLRQV

Paper 607
Exploiting Java, Objects, & Components

64/-67$7(0(176
$OO64/-VWDWHPHQWVVWDUWZLWKWKH#sqlSUHIL[DQGHQGZLWKDVHPLFRORQ64/-VWDWHPHQWVDUHFODVVLILHGLQWRWZR
FDWHJRULHVGHFODUDWLYHDQGH[HFXWDEOH'HFODUDWLYHVWDWHPHQWVLQWURGXFH-DYDW\SHVLQWKHSURJUDPZKHUHDVH[HFXWDEOHVWDWHPHQWV
VSHFLI\GDWDEDVHRSHUDWLRQV-DYDW\SHVIRU64/-LWHUDWRUVDQGFRQQHFWLRQFRQWH[WVDUHGHILQHGWKURXJKWKHGHFODUDWLYHVWDWHPHQWV
DQGVXFKW\SHGHFODUDWLRQVPD\DSSHDUZKHUHD-DYDFODVVGHILQLWLRQFDQOHJDOO\DSSHDU,QFRQWUDVWH[HFXWDEOH64/-
VWDWHPHQWVFRQWDLQDVWDWLF64/RSHUDWLRQZLWKLQFXUO\EUDFHVDQGFDQEHSODFHGZKHUHYHUD-DYDVWDWHPHQWPD\DSSHDU
([DPSOHVRIGHFODUDWLYHDQGH[HFXWDEOH64/-VWDWHPHQWVDUHJLYHQEHORZ
#sql iterator ProjIter (String name, int id, Date deadline); // declares Java type

#sql { CREATE UNIQUE INDEX projid_index ON projects (id) }; // executes SQL

+267(;35(66,216
,QH[HFXWDEOH64/-VWDWHPHQWVWKHLQSXWVDQGRXWSXWVWR64/RFFXUWKURXJK-DYDKRVWH[SUHVVLRQVWKDWDUHHPEHGGHGLQWRWKH
64/VWDWHPHQWVZLWKDFRORQSUHIL[,QLWVEDVLFIRUPDKRVWH[SUHVVLRQLVWKHVLPSOHQDPHRIDQ\YDOLG-DYDYDULDEOHILHOGRU
SDUDPHWHU,QRXUH[DPSOHWKHPHWKRGupdateDuration() FDQEHLPSOHPHQWHGZLWKKRVWYDULDEOHVprojNameDQG
numDaysDVIROORZV
public static void updateDuration(String projName, int numDays) throws SQLException {
#sql { UPDATE projects SET duration = duration + : numDays
WHERE name = :projName };
#sql { COMMIT };
}
64/-DOVRVXSSRUWVWKHXVHRITXDOLILHGQDPHVDQGFRPSOH[-DYDKRVWH[SUHVVLRQVZKLFKPXVWDSSHDULQSDUHQWKHVHVDIWHUWKH
FRORQSUHIL[DVVKRZQLQWKHH[DPSOHEHORZ
#sql { UPDATE PROJECTS SET duration = :(getNewDuration(id)) WHERE ID = :id };
+HUHgetNewDuration(id) LVD-DYDPHWKRGFDOOWKDWUHWXUQVDQXPHULFYDOXHGHQRWLQJWKHXSGDWHGGXUDWLRQRIWKH
SURMHFW$WUXQWLPHWKLVH[SUHVVLRQLVHYDOXDWHGLQ-DYDDQGWKHQSDVVHGWRWKH64/VWDWHPHQWDVDQLQSXWELQGSDUDPHWHU
$OOVWDQGDUG-'%&W\SHVVXFKDVERROHDQE\WHVKRUWLQW6WULQJE\WH>@,QWHJHU'RXEOHMDYDVTO'DWHHWFDUHYDOLGKRVW
H[SUHVVLRQW\SHVLQ64/-$GGLWLRQDOO\2UDFOH·V64/-WUDQVODWRUVXSSRUWVWKHXVHRI2UDFOHDQG2UDFOHW\SHVVXFKDV
52:,'&/2%%/2%DVZHOODV2EMHFWDQG5()W\SHV'HWDLOVRQXVHRIWKH2UDFOHW\SHVPD\EHIRXQGLQ>@DQG>@

,7(5$7256
,QD64/-SURJUDPDUHVXOWVHWUHWXUQHGE\D64/TXHU\FDQEHUHSUHVHQWHGDVDQLWHUDWRUREMHFWWKDWLVXVHGWRH[DPLQHWKH
GDWD$QLWHUDWRUREMHFWLVDQLQVWDQFHRIDQLWHUDWRUFODVVZKLFKPD\EHGHILQHGXVLQJWKH#sql iterator QDPH! ...
GHFODUDWLRQ$QLWHUDWRUW\SHGHFODUDWLRQLVH[SDQGHGE\WKH64/-WUDQVODWRUWRD-DYDFODVVGHFODUDWLRQRIWKHVDPHQDPH$
64/-LWHUDWRUFODVVFRUUHVSRQGVWRWKH-'%&UHVXOWVHWZLWKWKHDGGLWLRQDOLPSRUWDQWSURSHUW\WKDWLWLVVWURQJO\W\SHGLQ
WHUPVRIWKHVKDSHRIWKH64/TXHU\DVGHILQHGE\WKHQXPEHUDQG-DYDW\SHVRIVHOHFWHGDWWULEXWHVDQGRSWLRQDOO\WKHLUQDPHV
WRR7KLVVWURQJW\SLQJRI64/-LWHUDWRUVDOORZVWKHPWREHWUHDWHGDVW\SHVDIHILUVWFODVV-DYDREMHFWVZLWKNQRZQURZ
VKDSHVVRWKDWERWKWKH64/-WUDQVODWRUDQGWKH-DYDFRPSLOHUFDQVWDWLFDOO\FKHFNWKHYDOLGLW\RIFROXPQGDWDDFFHVVZKHUHYHU
WKHLWHUDWRULVXVHG64/-VXSSRUWVWZRGLIIHUHQWW\SHVRILWHUDWRUVQDPHGDQGSRVLWLRQDOERWKRIZKLFKDUHLOOXVWUDWHGEHORZ
1$0(',7(5$7256
$QDPHGLWHUDWRUGHFODUDWLRQVSHFLILHVERWKFROXPQDFFHVVRUQDPHVDQGWKHLU-DYDW\SHV7KHDFFHVVRUQDPHVPXVWPDWFKWKH
QDPHV RUDOLDVHV RIWKHVHOHFWHGFROXPQVLQD64/TXHU\ERXQGWRWKHLWHUDWRUDQGWKHDFFHVVRUW\SHVPXVWEHYDOLG-'%&
RU2UDFOHW\SHVFRPSDWLEOHZLWKWKHFRUUHVSRQGLQJ64/GDWDW\SHV)RURXUH[DPSOHWKHIROORZLQJGHFODUDWLYHVWDWHPHQW
LQWURGXFHVDQDPHGLWHUDWRUW\SHProjIterZLWKWKUHHFROXPQVnameidDQGdeadline
#sql iterator ProjIter (String name, int id, Date deadline);
7KLVW\SHGHFODUDWLRQFDQEHSODFHGZKHUHD-DYDFODVVGHILQLWLRQFDQDSSHDUIRUH[DPSOHDIWHUWKHLPSRUWVLQWKHILOH
ProjDemo.sqlj 'XULQJWUDQVODWLRQRIWKLV64/-SURJUDPWKHDERYHGHFODUDWLRQJHQHUDWHVD-DYDFODVVQDPHGProjIter
ZLWKWKUHHVSHFLDOFROXPQDFFHVVRUPHWKRGVname()id()DQGdeadline()WKDWUHWXUQStringintDQGMDYDVTODate
YDOXHVUHVSHFWLYHO\DQGDUHXVHGWRDFFHVVWKHIHWFKHGFROXPQYDOXHV2WKHUPHWKRGVRIWKHProjIterFODVVDUHVLPLODUWR
WKRVHIRXQGRQ-'%&UHVXOWVHWVVXFKDVnext()WRLWHUDWHRYHUIHWFKHGURZVDQGclose()WRUHOHDVHWKHUHVRXUFHVKHOGE\
WKHLWHUDWRU
Paper 607
Exploiting Java, Objects, & Components

$IWHUDQLWHUDWRUW\SHLVGHILQHGD64/-SURJUDPFDQGHFODUHLQVWDQFHVRIWKLVLWHUDWRUW\SHDQGSRSXODWHLWXVLQJD64/TXHU\
'XULQJH[HFXWLRQWKH64/-UXQWLPHPDWFKHVWKHQDPHVRIWKHFROXPQDFFHVVRUVLQWKHLWHUDWRUZLWKWKH64/FROXPQQDPHV
LQDFDVHLQVHQVLWLYHZD\1RWHWKDWFROXPQDOLDVHVPXVWEHXVHGIRUWKRVH64/FROXPQVZKRVHQDPHVDUHQRWYDOLG-DYD
LGHQWLILHUV:HQRZLOOXVWUDWHWKHVHFRQFHSWVLQWKHPHWKRGlistOpenProjects() IRURXUH[DPSOH
public static void listOpenProjects() throws SQLException {
ProjIter projs = null; // Declare the iterator instance
// Populate the iterator with a SQL query
#sql projs = { SELECT start_date + duration as deadline, name, id
FROM projects WHERE start_date + duration >= sysdate

while (projs.next()) { // Loop through the result rows


// Access data via column accessors
System.out.println("Project named ’" + projs.name() + "’ id " +
projs.id() + " completes on " + projs.deadline());
}
projs.close();
}
1RWLFHWKDWWKHFROXPQVVHOHFWHGE\WKHTXHU\GRQRWPDWFKWKHLWHUDWRUDFFHVVRUVLQRUGHUEXWKDYHWKHVDPHQDPHV$QDOLDV
QDPHGdeadlineGHQRWHVWKHFRPSOHWLRQWLPHRIDSURMHFWDVFRPSXWHGE\DGGLQJLWVstart_dateWRLWVduration
326,7,21$/,7(5$7256
,QFRQWUDVWWRQDPHGLWHUDWRUVSRVLWLRQDOLWHUDWRUVVSHFLI\RQO\WKHQXPEHUDQGW\SHVRIFROXPQVDQGQRWWKHLUQDPHVDVLQ
#sql iterator OwnerIter (String);
$VIRUQDPHGLWHUDWRUVWKLVGHFODUDWLRQJHQHUDWHVD-DYDFODVVQDPHGOwnerIterEXWLWGRHVQRWKDYHDQ\VSHFLDOPHWKRGV
IRUFROXPQDFFHVVKRZHYHULQWHUQDOO\LWHQFRGHVWKHTXHU\VKDSH&ROXPQGDWDPD\EHDFFHVVHGE\SRVLWLRQRQO\WKURXJK
WUDGLWLRQDOFETCH..INTOV\QWD[7KHVDPHEHQHILWVRIVWURQJW\SLQJDVIRUQDPHGLWHUDWRUVDUHDSSOLFDEOHIRUSRVLWLRQDO
LWHUDWRUVDOVR7KHRQO\GLIIHUHQFHLVLQWKHZD\FROXPQGDWDLVDFFHVVHGQDPHGDFFHVVEHLQJPRUHIOH[LEOHDQGOHVVHUURU
SURQHLQVRPHFDVHVZKLOHFETCH..INTOPD\EHDGHTXDWHDQGPRUHFRQYHQLHQWLQRWKHUV7KHFKRLFHLVOHIWWRWKH64/-
XVHUGHSHQGLQJRQWKHUHTXLUHPHQWVRIKLVKHUSURJUDP%HORZZHGHILQHWKHPHWKRGlistOwners()IRURXUH[DPSOH
XVLQJDSRVLWLRQDOLWHUDWRUownersRIW\SHOwnerIter
public static void listOwners(String projName) throws SQLException {

OwnerIter owners = null; // Declare the iterator instance


#sql owners = { SELECT * // Populate iterator with SQL query
FROM THE(SELECT (p.owners) FROM projects p
WHERE p.name = :projName) };
String ownerName = null;
while (true) { // Loop though the results
#sql { FETCH :owners INTO :ownerName }; // FETCH implicitly gets next row
if (owners.endFetch()) break; // Check if no more rows
System.out.println(ownerName); // Else print data
}
owners.close(); // Close the iterator
}
2EVHUYHWKDWWKHWHUPLQDWLRQFRQGLWLRQLQWKHwhileORRSIRUWKHFETCHVWDWHPHQWLVGHWHFWHGE\FDOOLQJWKHendFetch()
PHWKRGRQWKHownersLWHUDWRUDQGWKLVFRQGLWLRQPXVWDOZD\VEHFKHFNHGEHIRUHIHWFKHGGDWDLVDFFHVVHG7KLVPHWKRGLV
DYDLODEOHRQO\IRUSRVLWLRQDOLWHUDWRUVDQGQRWIRUQDPHGRQHV3RVLWLRQDODQGQDPHGLWHUDWRUVDUHVHSDUDWH-DYDHQWLWLHVDQG
WKHWZRSDUDGLJPVFDQQRWEHPL[HGIRUWKHVDPHLWHUDWRU

&$//,1*3/64/6725('352&('85(6)81&7,216$1'$121<0286%/2&.6
64/-SURYLGHVFRQYHQLHQWVKRUWKDQGV\QWD[WRFDOOVWRUHGSURFHGXUHVDQGIXQFWLRQVVWRUHGLQWKHGDWDEDVHDVZHOODV
DQRQ\PRXVSURFHGXUDOEORFNV$VVXPHIRURXUH[DPSOHWKDWZHZLVKWRSULQWWKHFRPSOHWLRQGDWHRIDOORSHQSURMHFWV
:HFDQGHILQHDVWRUHGSURFHGXUHQDPHGMAX_DEADLINEXVLQJ3/64/LQWKH2UDFOHGDWDEDVHDVIROORZV
CREATE OR REPLACE PROCEDURE MAX_DEADLINE (deadline OUT DATE) IS
BEGIN SELECT MAX(start_date + duration) INTO deadline FROM projects;
END;

Paper 607
Exploiting Java, Objects, & Components

/
7KHQZHFDQFDOOWKLVVWRUHGSURFHGXUHIURP64/-DVLQWKHPHWKRGgetMaxDeadline() EHORZ
public static void getMaxDeadline() throws SQLException {
Date maxDeadline;
#sql { CALL MAX_DEADLINE(:OUT maxDeadline) }; // CALL syntax for stored procedures
System.out.println("Last project completes on " + maxDeadline);
}
287DQG,1287SDUDPHWHUPRGHVPXVWEHGHFODUHGH[SOLFLWO\IRUVWRUHGSURFHGXUHVIXQFWLRQVDQGDQRQ\PRXVEORFNV
7KHV\QWD[IRUDIXQFWLRQFDOOLVGLIIHUHQWIURPWKDWRIDSURFHGXUHFDOOLQWKDWLWXVHVWKHVALUESFRQVWUXFWLQVWHDGRICALL
)RUH[DPSOHLIZHGHILQHGD3/64/IXQFWLRQGET_MAX_DEADLINE UHWXUQLQJDDATELQVWHDGRIWKHVWRUHGSURFHGXUH
MAX_DEADLINEZLWKDQRXWSDUDPHWHUWKHFDOOWRWKLVIXQFWLRQZRXOGDSSHDULQ64/-DV
#sql maxDeadline = { VALUES(GET_MAX_DEADLINE()) }; // VALUES syntax for stored functions
$QRQ\PRXVEORFNVLQ64/-VWDWHPHQWVDUHSODFHGZLWKLQWKHFXUO\EUDFHVXVLQJBEGIN..ENDV\QWD[

&211(&7,1*727+('$7$%$6(
'DWDEDVHFRQQHFWLRQVFRPHLQWRWKHSLFWXUHDWDSSOLFDWLRQUXQWLPHDQGDWWUDQVODWLRQWLPHDVZHOO5XQWLPH64/RSHUDWLRQV
XVLQJWKHGHIDXOWFRQWH[WUHTXLUHWKH64/-DefaultContext WREHLQLWLDOL]HGZLWKDFRQQHFWLRQIURPWKH-'%&GULYHU
(VWDEOLVKLQJDUXQWLPHFRQQHFWLRQWRWKH2UDFOHGDWDEDVHFRQVLVWVRIWKHVWHSVVKRZQEHORZ
public static void dbConnect() throws Exception
{ DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());// register driver
String url = "jdbc:oracle:oci8:@"; // Using JDBC/OCI driver to connect
String user = "scott"; String pwd = "tiger"; // Logon user id and password
DefaultContext.setDefaultContext( // Initialize SQLJ default context
new DefaultContext(url, user, pwd, false)); // with autoCommit off
}
7KLVFRQQHFWLRQLVXVHGWRH[HFXWHDOO#sqlVWDWHPHQWVWKDWGRQRWKDYHDFRQWH[WWDJDVLQWKHProjDemoH[DPSOHVDERYH
7RHQDEOH64/FKHFNLQJDWWUDQVODWLRQWLPHGDWDEDVHFRQQHFWLRQLQIRUPDWLRQFDQDOVREHVSHFLILHGRQWKH64/-FRPPDQG
OLQHRUPRUHFRQYHQLHQWO\LQD64/-SURSHUWLHVILOH%HORZZHVKRZDQH[DPSOHRI64/-FRPPDQGOLQHLQYRFDWLRQWKDWXVHV
WKH-'%&2&,GULYHUDQGWKHVFRWWWLJHUVFKHPDGXULQJWUDQVODWLRQWRFKHFNVWDWLF64/RSHUDWLRQVRQWKHGHIDXOWFRQWH[W
sqlj -user=scott/tiger -url=jdbc:oracle:oci8:@ ProjDemo.sqlj
)RUIOH[LELOLW\64/-VXSSRUWVPDQ\RWKHURSWLRQVVXFKDVIRUVSHFLILFDWLRQRIWKH-'%&GULYHUFODVVXVHGDWWUDQVODWLRQWLPH
0RVWRSWLRQVKDYHFRPPRQGHIDXOWYDOXHVHJWKHGULYHULVSUHVHWWRoracle.jdbc.driver.OracleDriver 

&211(&7,1*7208/7,3/('$7$%$6(6
,QWKHH[DPSOHVJLYHQDERYHZHKDYHXVHGDVLQJOHGHIDXOWFRQQHFWLRQFRQWH[WIRUDOORXU64/RSHUDWLRQV64/-VXSSRUWV
FRQQHFWLQJWRPXOWLSOHVFKHPDVLQWKHVDPHSURJUDP'LIIHUHQWVFKHPDVXVHGDWUXQWLPHDUHPRGHOHGDVGLVWLQFWFRQQHFWLRQ
FRQWH[WFODVVHVLQ64/-SURJUDPV)RUH[DPSOHDQRQGHIDXOWFRQQHFWLRQFRQWH[WFODVVProjDbLVGHILQHGDV
#sql context ProjDb;
7KLVGHFODUDWLRQLVH[SDQGHGE\WKH64/-WUDQVODWRUWRD-DYDFODVVQDPHGProjDbRIZKLFKDQLQVWDQFHFDQEHGHFODUHGDQG
LQLWLDOL]HGZLWKDGDWDEDVHFRQQHFWLRQDVIROORZV
ProjDb myProjDb; // Declare instance of ProjDb connection context class
myProjDb = new ProjDb(url, user, pwd, true); // Initialize with autoCommit on
6XEVHTXHQWO\WKLVFRQQHFWLRQFRQWH[WLQVWDQFHPD\EHXVHGLQDQHPEHGGHG64/RSHUDWLRQDVIROORZV
#sql [myProjDb] { UPDATE … }; // Execute SQL on myProjDb connection context
7KH64/-WUDQVODWRUDOVRVXSSRUWV64/FKHFNLQJRQPXOWLSOHFRQQHFWLRQFRQWH[WVDWWUDQVODWHWLPHWKURXJKFRPPDQGOLQH
RSWLRQVWKDWDUH RSWLRQDOO\ WDJJHGZLWKWKHFRQQHFWLRQFRQWH[WFODVVQDPH$QH[DPSOHRIVXFKXVHLV
sqlj -user=scott/tiger -user@ProjDb=roger/lion -url=jdbc:oracle:oci8:@ ProjDemo.sqlj
6XFKDQLQYRFDWLRQPDNHVWKH64/-WUDQVODWRUXVHWZRGLIIHUHQWVFKHPDVIRUFKHFNLQJ64/RSHUDWLRQVVFRWWWLJHUIRUWKRVH
WKDWXVHWKHGHIDXOWFRQWH[WDQGURJHUOLRQIRUWKH64/H[HFXWHGRQLQVWDQFHVRIWKHProjDbFRQQHFWLRQFRQWH[WFODVV

Paper 607
Exploiting Java, Objects, & Components

86,1*'<1$0,&64/7+528*+-'%&
,QVRPHFDVHVIRUH[DPSOHZKHQDWHEREFODXVHFRQGLWLRQRUWKHVHWRIVHOHFWHGDWWULEXWHVLVXQNQRZQWKH64/VWDWHPHQWLV
QRWNQRZQLQDGYDQFHDQGWKHUHIRUHG\QDPLF64/PXVWEHXVHG7KHG\QDPLF64/$3,IRU64/-LV-'%&DQGD64/-
SURJUDPPD\FRQWDLQERWK64/-FRGHDQG-'%&FDOOV$FFHVVWR-'%&FRQQHFWLRQVDQGUHVXOWVHWVIURPD64/-SURJUDP
PLJKWDOVREHQHFHVVDU\IRUILQHUJUDQXODULW\RIFRQWURO7KHWZRSDUDGLJPVLQWHURSHUDWHVHDPOHVVO\ZLWKHDFKRWKHUWKURXJK
FRQYHUVLRQVEHWZHHQ-'%&FRQQHFWLRQVDQG64/-FRQQHFWLRQFRQWH[WVDQGEHWZHHQ-'%&UHVXOWVHWVDQG64/-LWHUDWRUV
)RUH[DPSOHD64/-FRQQHFWLRQFRQWH[WFDQEHLQLWLDOL]HGZLWKDQH[LVWLQJ-'%&FRQQHFWLRQ
java.sql.Connection conn = …; // Create JDBC connection
ProjDb pdb = new ProjDB(conn); // Use to initialize SQLJ connection context

&RQYHUVHO\LWLVDOVRSRVVLEOHWRH[WUDFWD-'%&FRQQHFWLRQREMHFWIURPD64/-FRQQHFWLRQFRQWH[WLQVWDQFH7KLVIHDWXUHLV
LOOXVWUDWHGEHORZZKHUHZHGHILQHWKHPHWKRGprojectsDue()XVLQJG\QDPLF64/YLD-'%&VWDWHPHQWVDQGFRQQHFWLRQV
public static void projectsDue(boolean dueThisMonth) throws SQLException {
// get JDBC connection from previously initialized SQLJ DefaultContext
Connection conn = DefaultContext.getDefaultContext().getConnection();

String query = "SELECT name, start_date + duration FROM projects " +


"WHERE start_date + duration >= sysdate "; // Query open projects
if (dueThisMonth) // Add condition to check month due
query += " AND to_char(start_date + duration, 'Month') " +
" = to_char(sysdate, 'Month') "; // Extract and compare month from dates

PreparedStatement pstmt = conn.prepareStatement(query);


ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
System.out.println("Project: " + rs.getString(1) + " Deadline: " + rs.getDate(2));
}
rs.close(); pstmt.close();
}
6LPLODUFRQYHUVLRQVDVIRUGDWDEDVHFRQQHFWLRQVDUHDOVRVXSSRUWHGEHWZHHQ-'%&UHVXOWVHWVDQG64/-LWHUDWRUV
ProjIter projs; // Declare iterator instance
#sql projs = { SELECT … }; // Initialize it
java.sql.ResultSet rsProjs = projs.getResultSet(); // Get its JDBC result set
/LNHZLVHZHFDQLQVWDQWLDWHD64/-LWHUDWRUREMHFWXVLQJD-'%&UHVXOWVHW7KHH[DPSOHEHORZVKRZVVXFKDFRQYHUVLRQWR
WKH64/-QDPHGLWHUDWRUprojs,QWKLVFDVHWKHFROXPQQDPHVLQWKH64/TXHU\PXVWPDWFKWKHDFFHVVRUVLQWKHLWHUDWRU
java.sql.ResultSet rs = …; // Create and initialize a JDBC result set
#sql projs = {CAST :rs}; // Cast the result set to a SQLJ iterator
1RWLFHWKHXVHRIWKHCASTRSHUDWRUDERYHZKLFKLVVSHFLDOV\QWD[SURYLGHGIRUFRQYHUVLRQRI-'%&UHVXOWVHWVWRLWHUDWRUV

'(),1,1*64/-6725('352&('85(6217+(6(59(5
)LQDOO\ZHGHPRQVWUDWHWKHXVHRI64/-VWRUHGSURFHGXUHVDQGIXQFWLRQVRQWKH2UDFOHLGDWDVHUYHUZKLFKSURYLGHVDQ
LQWHJUDWHG-DYD90>@DQGVXSSRUWV64/-64/-FRGHGHILQHGDWWKHVHUYHULVDXWRPDWLFDOO\WUDQVODWHGLQWR-DYDE\WHFRGH
DQGWKHQVWRUHGLQWKHGDWDEDVH)RUH[DPSOHXVLQJ64/ 3OXVZHFDQGHILQHDVWDWLFIXQFWLRQgetDeadline()LQD-DYD
FODVVQDPHGProjUtilDVIROORZV
CREATE OR REPLACE JAVA SOURCE NAMED "ProjUtil" AS
import java.sql.*;
public class ProjUtil {
public static Date getDeadline (String projName) {
// Note: connection is automatic for server-side execution of SQLJ programs
try {
Date completionDate;
#sql { SELECT start_date + duration INTO :completionDate FROM projects
WHERE name = :projName }; // single-row query by key project name
return completionDate;
} catch (SQLException e) { return null; } } }
/

Paper 607
Exploiting Java, Objects, & Components

2QFHWKLV64/-IXQFWLRQKDVEHHQFUHDWHGVXFFHVVIXOO\LWFDQEHLQYRNHGIURP64/VWDWHPHQWV%XWILUVWDZUDSSHUKDVWREH
GHILQHGIRUPDSSLQJWKH-DYDLQYRFDWLRQVLJQDWXUHWR64/7KLVZUDSSHUGHILQLWLRQLVEDVHGRQ3/64/V\QWD[HJ
CREATE OR REPLACE FUNCTION getDeadline(projName VARCHAR2) RETURN DATE
AS LANGUAGE JAVA NAME ’ProjUtil.getDeadline(java.lang.String) return java.sql.Date’;

7KHQWKHVWRUHGIXQFWLRQRUSURFHGXUHFDQEHLQYRNHGIURPERWKFOLHQWVLGHDQGVHUYHUVLGH64/-FRGHMXVWOLNHDQ\RWKHU
VWRUHG3/64/IXQFWLRQRUSURFHGXUH7KXVZHFDQGHILQHWKHPHWKRGprojDeadline() XVLQJWKHDERYH64/ZUDSSHU
public static Date projDeadline(String projName) throws SQLException {
Date deadline = null;
#sql deadline = { VALUES(getDeadline(:IN projName)) };
return deadline;
}
&21&/86,216
7KLVSDSHUKDVSUHVHQWHGDFRPSUHKHQVLYHRYHUYLHZRIWKHJRDOVEHQHILWVDQGFDSDELOLWLHVRI64/-8VLQJDGHWDLOHGH[DPSOH
ZHKDYHH[SODLQHGWKHYDULRXVODQJXDJHIHDWXUHVDQGGHPRQVWUDWHGWKHLUXVDJH)URPWKHH[DPSOHVLQWKLVSDSHUZHVHHWKDW
64/-VWDWHPHQWVDUHXVXDOO\PXFKVKRUWHUWKDQWKHHTXLYDOHQWG\QDPLF64/FDOOVLQ-'%&EHFDXVH64/-XVHVHPEHGGHG-DYD
KRVWYDULDEOHVWRSDVVDUJXPHQWVWR64/,QFRQWUDVWWKH-'%&XVHUPXVWZULWHVHSDUDWHFDOOVWRELQGHDFKDUJXPHQWDQGWR
UHWULHYHHDFKUHVXOW$QRWKHULPSRUWDQWDGYDQWDJHRI64/-LVWKDWLWVXSSRUWVWUDQVODWHWLPHFKHFNLQJRIDOOVWDWLF64/
VWDWHPHQWVDJDLQVWDGDWDEDVHVFKHPDDQGYHULILFDWLRQRIWKHW\SHFRPSDWLELOLW\RIKRVWYDULDEOHVZLWK64/GDWDW\SHV
$GGLWLRQDOO\VWURQJO\W\SHG64/-LWHUDWRUVHQDEOH-DYDW\SHFKHFNLQJDQG64/VFKHPDFKHFNLQJZKHUHGDWDLVIHWFKHGIURP
DQLWHUDWRU HLWKHUXVLQJQDPHGFROXPQDFFHVVRUVRUWKURXJKDFETCH..INTOVWDWHPHQW EHFDXVHWKHLWHUDWRU·VFODVVGHILQHV
WKHQXPEHUDQGW\SHVRIWKHIHWFKHGFROXPQV7KLVW\SHFKHFNLQJJUHDWO\HQKDQFHVSURJUDPUREXVWQHVVE\FDWFKLQJHUURUVDW
GHYHORSPHQWWLPHUDWKHUWKDQDWDSSOLFDWLRQUXQWLPHDQGVXFKEHQHILWVFDQQRWEHREWDLQHGLQDG\QDPLF$3,OLNH-'%&
+RZHYHU64/-DQG-'%&DUHFRPSOHPHQWDU\WRHDFKRWKHUWKHIRUPHUKDQGOHVG\QDPLF64/ZKLOHWKHODWWHUDGGUHVVHV
VWDWLF64/7KHXVHUFDQHDVLO\FRPELQHERWK64/-DQG-'%&FRGHLQWKHVDPHDSSOLFDWLRQSURJUDPDQGKDYHWKHP
LQWHURSHUDWHDWWKHOHYHORIFRQQHFWLRQVFRQWH[WVDQGUHVXOWVHWVLWHUDWRUV
%HVLGHVWKHLQKHUHQWSRZHURI-DYD·VSRUWDEOHGHYHORSPHQWDQGIOH[LEOHGHSOR\PHQWPRGHOWKH64/-DSSOLFDWLRQGHYHORSPHQW
IUDPHZRUNSURYLGHVPDQ\RWKHULPSRUWDQWDGYDQWDJHV7KH64/-ODQJXDJHDQGUXQWLPHDUHEHLQJVWDQGDUGL]HGE\$16,VR
WKDW64/-SURJUDPVZULWWHQIRURQHYHQGRU·VGDWDEDVHFDQEHHDVLO\DGDSWHGWRDQRWKHU·V%\GHVLJQ64/-VXSSRUWVFRGH
SRUWDELOLW\QRWRQO\DWWKHVRXUFHOHYHOWKURXJKVWDQGDUGV\QWD[EXWDOVRDWWKHOHYHORIELQDULHVVLQFHLWDGGVYHQGRUVSHFLILF
FXVWRPL]DWLRQVWRWKHELQDU\SURILOHILOHV$GGLWLRQDOO\D5HIHUHQFH,PSOHPHQWDWLRQRI64/-KDVEHHQGHYHORSHGDW2UDFOH
XVLQJ-DYDDQGLWVVRXUFHFRGHLVDYDLODEOHIUHHO\WRWKHSXEOLFDQGWRRWKHUGDWDEDVHYHQGRUV64/-LVEOD]LQJDQHZSDWKLQ
LWVGRPDLQLQWHUPVRILWVRSHQQHVVUREXVWQHVVIOH[LELOLW\H[WHQVLELOLW\VWDQGDUGL]DWLRQDQGLQWHJUDWLRQZLWKWRROV$VWKH
LQGXVWU\OHDGHU2UDFOHKDVIXUWKHUUHLQIRUFHGWKHSRZHURI64/-WKURXJKWLJKWO\LQWHJUDWHGVXSSRUWIRULWRQWKH2UDFOHLGDWD
VHUYHUDOORZLQJ64/-SURFHGXUHVDQGIXQFWLRQVWREHVWRUHGLQWKHGDWDEDVHDQGLQYRNHGIURP64/3/64/DQG-DYD
2UDFOHVSHFLILFGDWDW\SHVDQG64/H[WHQVLRQVDUHIXOO\DFFHVVLEOHLQ64/-WKURXJKELQDU\SURILOHFXVWRPL]DWLRQZLWKRXW
FRPSURPLVLQJVWDQGDUGVFRPSOLDQFH2UDFOHW\SHVVXFKDV/2%VREMHFWVDQGFROOHFWLRQVDUHDOVRHDVLO\PDQLSXODWHGLQ
64/->@2UDFOH·V-'HYHORSHUWRROSURYLGHVDQLQWHJUDWHGGHYHORSPHQWHQYLURQPHQWZLWKEXLOWLQVXSSRUWIRUHGLWLQJ
WUDQVODWLRQDQGGHEXJJLQJRI64/-FRGH)XUWKHULPSURYHPHQWVLQLQWHJUDWLRQWRROVDQGSHUIRUPDQFHDUHRQWKHZD\
$&.12:/('*0(176
7KLVSDSHULVEDVHGRQWKHZRUNRIWKH64/--'%&DQG-DYD90WHDPVDW2UDFOH,ZRXOGOLNHWRWKDQN%ULDQ%HFNHU5DJDPD\L
%K\UDYDEKRWOD&KHXN&KDX5DNHVK'KRRSDU3LHUUH'XIRXU7KRPDV.XULDQ(NNHKDUG5RKZHGGHUDQG%ULDQ:ULJKWIRUWKHLU
FRQWULEXWLRQVDQGKHOSIXOFRPPHQWV
5()(5(1&(6
>@ 2UDFOHDQG-DYD7HFKQLFDO:KLWH3DSHU2UDFOH&RUSRUDWLRQ
>@ ,QGXVWULDO6WUHQJWK-DYD2YHUYLHZRI2UDFOH·V6HUYHU6LGH-DYD'DYH5RVHQEHUJ2UDFOH2SHQ:RUOG1RY
>@ 8VLQJ2UDFOH2EMHFWVLQ64/-3URJUDPV(NNHKDUG5RKZHGGHU2UDFOH2SHQ:RUOG1RY
>@ 2UDFOHL64/-DQG-'%&8VHU'RFXPHQWDWLRQ2UDFOH&RUSRUDWLRQ

Paper 607

Potrebbero piacerti anche