lê~åäé= qçéiáåâ= NMÖENMKNKPF Volume2 Creation Date: Mar 04, 2005 Last Update: Aug 22, 2005 Version 1.0
...3... 3 TopLink å...4 1... 4... 4 SampleClient.java... 5 Ò... 8... 9... 10 readallsample()... 11 querysample()... 12 cachesample()... 13 2... 14 Ç... 14 createsample()... 16 updatesample()... 19 deletesample()... 19...21 Oracle TopLink 10g(10.1.3) È Volume2 2
Oracle TopLink TopLink Java - TopLink Java ~ O/R Java å JDBC š TopLink TopLink gå å Ò å p{ /URL toplink.jar java -version Ø nç < > Windows Ø Ê UNIX/Linux Oracle TopLink 10g(10.1.3) È Volume2 3
TopLink Oracle TopLink 10g(10.1.3) Volume1 TopLink O/R ~ ~ O/R TopLink Volume1 1 XML XML Foundation Library API v ñ SampleClient.java SampleApp src sample Oracle TopLink 10g(10.1.3) È Volume2 4
SampleClient.java package sample; import java.util.*; import oracle.toplink.exceptions.*; import oracle.toplink.expressions.*; import oracle.toplink.queryframework.*; import oracle.toplink.sessions.*; import oracle.toplink.tools.sessionmanagement.*; public class SampleClient { /** * */ private DatabaseSession mysession; private DatabaseSession getsession() { return mysession; private void setsession(databasesession newsession) { mysession = newsession; /** * * getsession() * - XML * - ( true) */ public void login() { print(" n n---- ----"); DatabaseSession session = (DatabaseSession)SessionManager.getManager().getSession( "SampleSession", true); setsession(session); /** * */ public void logout() { if (mysession!= null) { print(" n n---- ----"); mysession.logout(); /** * */ private void print(string msg) { System.out.println(msg); /** * */ private void printacustomer(customer acustomer) { print(acustomer.tostring()); Oracle TopLink 10g(10.1.3) È Volume2 5
print(" t" + acustomer.getaddress().tostring()); Iterator phones = acustomer.getphones().iterator(); while (phones.hasnext()) { print(" t" + phones.next().tostring()); /** * */ private void printcustomers(collection customercollecion) { Iterator customers = customercollecion.iterator(); while (customers.hasnext()) { printacustomer((customer)customers.next()); public static void main(string[] args) { SampleClient sampleclient = new SampleClient(); try { // sampleclient.login(); catch (DatabaseException loginexception) { System.out.println(" n n : "); loginexception.printstacktrace(); return; try { sampleclient.readallsample(); sampleclient.querysample(); sampleclient.cachesample(); catch (Exception e) { System.out.println(" n n : "); e.printstacktrace(); finally { // sampleclient.logout(); public void readallsample() { print(" n n---- readallsample() ----"); // getsession().getidentitymapaccessor().initializeidentitymaps(); print("-- Customer --"); Vector customers = getsession().readallobjects(customer.class); print("-- Customer (Address,Phone) --"); printcustomers(customers); print("---- readallsample() ----"); public void querysample() { print(" n n---- querysample() ----"); // getsession().getidentitymapaccessor().initializeidentitymaps(); Oracle TopLink 10g(10.1.3) È Volume2 6
print("-- Customer --"); Expression exp = new ExpressionBuilder().get("address").get("city").equal(" "); Vector customers = getsession().readallobjects(customer.class, exp); print("-- Customer (Address,Phone) --"); printcustomers(customers); print("---- querysample() ----"); public void cachesample() { print(" n n---- cachesample() ----"); print("-- Customer --"); Expression exp = new ExpressionBuilder().get("id").equal(1); Customer c = (Customer)getSession().readObject(Customer.class, exp); print("-- Customer (Address,Phone) --"); printacustomer(c); print("---- cachesample() ----"); Oracle TopLink 10g(10.1.3) È Volume2 7
p 3 1 v SessionManager SessionManager getsession() ½ javadoc TopLink Devevloper's Guide 78. Acquiring and Using Sessions at Runtime - Acquiring a Session from the Session Manager SampleClient readallsample() querysample() ~ TopLink Devevloper's Guide 96. Understanding TopLink Queries Oracle TopLink 10g(10.1.3) È Volume2 8
nç Ò SampleClient.java D: SampleApp javac -sourcepath src -classpath stage;lib toplink.jar -d stage src sample SampleClient.java SampleApp stage sample D: SampleApp java classpath stage;lib toplink.jar;lib ojdbc14.jar;lib xmlparserv2.jar;lib antlr.jar sample.sampleclient ñ ---- ---- [TopLink Info]: 2005.08.22 06:33:06.293--DatabaseSessionImpl(32961147)--TopLink : Oracle TopLink - 10g release 2 (10.1.3.0.0DP4) (Build 050715) [TopLink Info]: 2005.08.22 06:33:08.006--DatabaseSessionImpl(32961147)--SampleSession ---- readallsample() ---- -- Customer -- -- Customer (Address,Phone) -- [ 1: ] [ 1: ] [ 1: 03-1111-1111] [ 2: 03-2222-2222] [ 2: ] [ 2: ] [ 3: 03-3333-3333] [ 3: ] [ 3: ] [ 4: 03-4444-4444] ---- readallsample() ---- ---- querysample() ---- -- Customer -- -- Customer (Address,Phone) -- [ 1: ] [ 1: ] [ 1: 03-1111-1111] [ 2: 03-2222-2222] [ 2: ] Oracle TopLink 10g(10.1.3) È Volume2 9
[ 2: ] [ 3: 03-3333-3333] ---- querysample() ---- ---- cachesample() ---- -- Customer -- -- Customer (Address,Phone) -- [ 1: ] [ 1: ] [ 1: 03-1111-1111] [ 2: 03-2222-2222] ---- cachesample() ---- ---- ---- [TopLink Info]: 2005.08.22 06:33:08.376--DatabaseSessionImpl(32961147)--SampleSession å SQL ~ Workbench sessions.xml SampleSession [ ] ñ [ ] finer 2 ~ sessions.xml { ³ À SQL å À readallsample() querysample() cachesample() Oracle TopLink 10g(10.1.3) È Volume2 10
readallsample() readallsample() À ³ l ---- readallsample() ---- [TopLink Finer]: --initialize identitymaps -- Customer -- [TopLink Fine]: --SELECT ID, NAME, ADDR_ID FROM CUSTOMER [TopLink Fine]: --SELECT ID, CITY, STREET FROM ADDRESS WHERE (ID = 1) [TopLink Fine]: --SELECT ID, CITY, STREET FROM ADDRESS WHERE (ID = 2) [TopLink Fine]: --SELECT ID, CITY, STREET FROM ADDRESS WHERE (ID = 3) -- Customer (Address,Phone) -- [ 1: ] [ 1: ] [TopLink Fine]: --SELECT P_NUMBER, ID, CUST_ID FROM PHONE WHERE (CUST_ID = 1) [ 1: 03-1111-1111] [ 2: 03-2222-2222] [ 2: ] [ 2: ] [TopLink Fine]: --SELECT P_NUMBER, ID, CUST_ID FROM PHONE WHERE (CUST_ID = 2) [ 3: 03-3333-3333] [ 3: ] [ 3: ] [TopLink Fine]: --SELECT P_NUMBER, ID, CUST_ID FROM PHONE WHERE (CUST_ID = 3) [ 4: 03-4444-4444] ---- readallsample() ---- readallsample() Customer Customer Address Phone ñ readallsample() v ñ initialize identitymaps ñ å SQL và å initializeidentitymaps() À p CUSTOMER SQL å Address ADDRESS å Customer Address À Oracle TopLink 10g(10.1.3) È Volume2 11
å Customer Phone Phone å phones š À m å å m å «å m! p «å p TopLink p TopLink Devevloper's Guide 99. Using Advanced Query API - Handling Cursor and Stream Query Results querysample() querysample() À ---- querysample() ---- [TopLink Finer]: --initialize identitymaps -- Customer -- [TopLink Fine]: --SELECT t1.id, t1.name, t1.addr_id FROM ADDRESS t0, CUSTOMER t1 WHERE ((t0.city = ' ') AND (t0.id = t1.addr_id)) [TopLink Fine]: --SELECT ID, CITY, STREET FROM ADDRESS WHERE (ID = 1) Oracle TopLink 10g(10.1.3) È Volume2 12
[TopLink Fine]: --SELECT ID, CITY, STREET FROM ADDRESS WHERE (ID = 2) -- Customer (Address,Phone) -- [ 1: ] [ 1: ] [TopLink Fine]: --SELECT P_NUMBER, ID, CUST_ID FROM PHONE WHERE (CUST_ID = 1) [ 1: 03-1111-1111] [ 2: 03-2222-2222] [ 2: ] [ 2: ] [TopLink Fine]: --SELECT P_NUMBER, ID, CUST_ID FROM PHONE WHERE (CUST_ID = 2) [ 3: 03-3333-3333] ---- querysample() ---- querysample() TopLink Expression Customer å TopLink å ~ å SQL cachesample() cachesample() TopLink readallsample() querysample() cachesample() và å å ---- cachesample() ---- -- Customer -- -- Customer (Address,Phone) -- [ 1: ] [ 1: ] [ 1: 03-1111-1111] [ 2: 03-2222-2222] ---- cachesample() ---- TopLink å m å cachesample() querysample() Customer å Customer Address Phone å Oracle TopLink 10g(10.1.3) È Volume2 13
TopLink À 5 TopLink Devevloper's Guide 90. Understanding the Cache 2 SampleClient.java Ç SampleClient.java 3 createsample() updatesample() deletesample() public void createsample() { print(" n n---- createsample() ----"); // getsession().getidentitymapaccessor().initializeidentitymaps(); // UnitOfWork uow = getsession().acquireunitofwork(); Customer c = new Customer(); c.setname(" "); Address a = new Address(); a.setcity(" "); a.setstreet(" "); Phone p = new Phone(); p.setpnumber("03-5555-5555"); // c.setaddress(a); c.addphone(p); // uow.registernewobject(c); print("-- --"); uow.commit(); print("---- createsample() ----"); public void updatesample() { print(" n n---- updatesample() ----"); // getsession().getidentitymapaccessor().initializeidentitymaps(); Oracle TopLink 10g(10.1.3) È Volume2 14
print("-- Customer --"); Expression exp = new ExpressionBuilder().get("id").equal(1); Customer c = (Customer)getSession().readObject(Customer.class, exp); print("-- Customer --"); printacustomer(c); UnitOfWork uow = getsession().acquireunitofwork(); // Customer ccopy = (Customer)uow.registerObject(c); ccopy.getaddress().setstreet(" "); Phone p = new Phone(); p.setpnumber("03-6666-6666"); ccopy.addphone(p); print("-- --"); uow.commit(); print("---- updatesample() ----"); public void deletesample() { print(" n n---- deletesample() ----"); // getsession().getidentitymapaccessor().initializeidentitymaps(); UnitOfWork uow = getsession().acquireunitofwork(); print("-- Phone Customer --"); Expression exp1 = new ExpressionBuilder().get("id").equal(1); Customer c1 = (Customer)uow.readObject(Customer.class, exp1); print("-- Phone Customer --"); printacustomer(c1); Collection phones = c1.getphones(); if (phones.size() > 0) { //Customer#removePhone() Phone c1.removephone((phone)phones.iterator().next()); print("-- Customer --"); Expression exp2 = new ExpressionBuilder().get("id").equal(2); Customer c2 = (Customer)uow.readObject(Customer.class, exp2); print("-- Customer --"); printacustomer(c2); //Customer uow.deleteobject(c2); print("-- --"); uow.commit(); print("---- deletesample() ----"); SampleClient.java main try nç readallsample() querysample() cachesample() Oracle TopLink 10g(10.1.3) È Volume2 15
createsample() updatesample() deletesample() p{ try { //sampleclient.readallsample(); //sampleclient.querysample(); //sampleclient.cachesample(); sampleclient.createsample(); sampleclient.updatesample(); sampleclient.deletesample(); catch (Exception e) { SampleClient.java ~ nç createsample() updatesample() deletesample() setupsample.sql createsample() createsample() À ---- createsample() ---- [TopLink Finer]: --initialize identitymaps [TopLink Finer]: --acquire unit of work: 3532515 -- -- [TopLink Finer]: --begin unit of work commit [TopLink Finer]: --begin transaction [TopLink Fine]: --UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + 50 WHERE SEQ_NAME = 'PHONE_SEQ' [TopLink Fine]: --SELECT SEQ_COUNT FROM SEQUENCE WHERE SEQ_NAME = 'PHONE_SEQ' [TopLink Finer]: --commit transaction [TopLink Finer]: --begin transaction [TopLink Fine]: --INSERT INTO ADDRESS (ID, CITY, STREET) VALUES (11, ' ', ' ') [TopLink Fine]: --INSERT INTO CUSTOMER (ID, NAME, ADDR_ID) VALUES (11, ' ', 11) [TopLink Fine]: --INSERT INTO PHONE (P_NUMBER, ID, CUST_ID) VALUES ('03-5555-5555', 11, 11) [TopLink Finer]: --commit transaction [TopLink Finer]: --end unit of work commit [TopLink Finer]: --release unit of work ---- createsample() ---- Oracle TopLink 10g(10.1.3) È Volume2 16
TopLink UnitOfWork nç Ò ½ š j SQL å nç ñ v Ž v Ž Ò ~ [ ] Finest ~ [ ] Finest ~ SampleClient SampleClient m setupsample.sql Oracle TopLink 10g(10.1.3) È Volume2 17
... -- -- [TopLink Finer]: --begin unit of work commit [TopLink Finer]: --begin transaction [TopLink Finest]: --Execute query DataModifyQuery() [TopLink Fine]: --UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + 50 WHERE SEQ_NAME = 'PHONE_SEQ' [TopLink Finest]: --Execute query ValueReadQuery() [TopLink Fine]: --SELECT SEQ_COUNT FROM SEQUENCE WHERE SEQ_NAME = 'PHONE_SEQ' [TopLink Finest]: --local sequencing preallocation for PHONE_SEQ: objects: 50, first: 11, last: 60 [TopLink Finer]: --commit transaction [TopLink Finest]: --local sequencing preallocation is copied to preallocation after transaction commit [TopLink Finest]: --assign sequence to the object (11 -> [ 0: 03-5555-5555]) [ ] Finest ~ m o Finer Ž 50 ~ Ò Ž 50 50 Ž TopLink Ž Ž o Ž Ò Ž Address å INSERT å Customer Address Customer Phone ~ o ñå ~ o UnitOfWork TopLink Devevloper's Guide 100. Understanding TopLink Transactions Oracle TopLink 10g(10.1.3) È Volume2 18
updatesample() updatesample() nç nç UPDATE å Phone o l ~ ---- updatesample() ---- [TopLink Finer]: --initialize identitymaps -- Customer -- [TopLink Fine]: --SELECT ID, NAME, ADDR_ID FROM CUSTOMER WHERE (ID = 1) [TopLink Fine]: --SELECT ID, CITY, STREET FROM ADDRESS WHERE (ID = 1) -- Customer -- [ 1: ] [ 1: ] [TopLink Fine]: --SELECT P_NUMBER, ID, CUST_ID FROM PHONE WHERE (CUST_ID = 1) [ 1: 03-1111-1111] [ 2: 03-2222-2222] [TopLink Finer]: --acquire unit of work: 9449509 -- -- [TopLink Finer]: --begin unit of work commit [TopLink Finer]: --begin transaction [TopLink Fine]: --UPDATE ADDRESS SET STREET = ' ' WHERE (ID = 1) [TopLink Fine]: --INSERT INTO PHONE (P_NUMBER, ID, CUST_ID) VALUES ('03-6666-6666', 12, 1) [TopLink Finer]: --commit transaction [TopLink Finer]: --end unit of work commit [TopLink Finer]: --release unit of work ---- updatesample() ---- deletesample() deletesample() À ---- deletesample() ---- [TopLink Finer]: --initialize identitymaps [TopLink Finer]: --acquire unit of work: 25528992 -- Phone Customer -- [TopLink Fine]: --SELECT ID, NAME, ADDR_ID FROM CUSTOMER WHERE (ID = 1) [TopLink Fine]: --SELECT ID, CITY, STREET FROM ADDRESS WHERE (ID = 1) -- Phone Customer -- [ 1: ] [ 1: ] [TopLink Fine]: --SELECT P_NUMBER, ID, CUST_ID FROM PHONE WHERE (CUST_ID = 1) [ 1: 03-1111-1111] [ 2: 03-2222-2222] [ 12: 03-6666-6666] -- Customer -- [TopLink Fine]: --SELECT ID, NAME, ADDR_ID FROM CUSTOMER WHERE (ID = 2) [TopLink Fine]: --SELECT ID, CITY, STREET FROM ADDRESS WHERE (ID = 2) -- Customer -- [ 2: ] [ 2: ] [TopLink Fine]: --SELECT P_NUMBER, ID, CUST_ID FROM PHONE WHERE (CUST_ID = 2) [ 3: 03-3333-3333] -- -- Oracle TopLink 10g(10.1.3) È Volume2 19
[TopLink Finer]: --begin unit of work commit [TopLink Finer]: --begin transaction [TopLink Fine]: --UPDATE PHONE SET CUST_ID = NULL WHERE (ID = 1) [TopLink Fine]: --DELETE FROM PHONE WHERE (ID = 1) [TopLink Fine]: --DELETE FROM PHONE WHERE (CUST_ID = 2) [TopLink Fine]: --DELETE FROM CUSTOMER WHERE (ID = 2) [TopLink Fine]: --DELETE FROM ADDRESS WHERE (ID = 2) [TopLink Finer]: --commit transaction [TopLink Finer]: --end unit of work commit [TopLink Finer]: --release unit of work ---- deletesample() ---- deletesample() 2 Ò 1. Customer id=1 Phone 1 Customer Phone removephone() ~ Phone Phone owner š null Customer Phone Private Owned ~ Phone { owner null Phone PHONE SQL å [TopLink Fine]: --UPDATE PHONE SET CUST_ID = NULL WHERE (ID = 1) [TopLink Fine]: --DELETE FROM PHONE WHERE (ID = 1) ~ m 2 DELETE å 2. Customer id=2 Customer Customer À Customer Address Phone DELETE å [TopLink Fine]: --DELETE FROM PHONE WHERE (CUST_ID = 2) [TopLink Fine]: --DELETE FROM CUSTOMER WHERE (ID = 2) [TopLink Fine]: --DELETE FROM ADDRESS WHERE (ID = 2) Oracle TopLink 10g(10.1.3) È Volume2 20
Volume1 TopLink O/R ~ Volume3 Volume2 Oracle TopLink 10g(10.1.3) È Volume2 21
ò Copyright 2005 Oracle Corporation Japan. All Rights Reserved. ô ³ l nç ò Oracle ò å Oracle8 Oracle8i Oracle9i Oracle10g Net8 ò å ³ m Oracle TopLink 10g(10.1.3) È Volume2 22