otndnld.oracle.co.jpotndnld.oracle.co.jp/products/ias/toplink/pdf/jc2005_b3... · 2005-04-14 · 11...
Post on 26-Mar-2020
11 Views
Preview:
TRANSCRIPT
1
��������������������������������O/R�� ����� ����� ����� ���
Java Computing 2005 Spring
��������������������������������
��� ��� ���������� ��� ���������� ��� ���������� ��� �������
��������������������
2
Agenda
� O/R��������
� �� O/R�����
- Oracle TopLink
�TopLink O/R�������
�TopLink ����
- ADF Business Components
� ���
3
O/R����Object/Relational��������������������������������
� Java��DB�������� ���
� �����JDBC���������
- ���������� ��������
� O/R�������� !"#$%&'�()
- JDBC ��������JDBC ������
- Java���� !"#$%&'()�DB* +,
- -./�0�,�12�34567�8�9
AP���� ���������
O/R0:;��
<�=
4
O/R����������������������������������������
� O/R���������� �����
- Java����������O/R��� �����
- O/R����������Java���������� !"#��JDBC�SQL�$%&'� ()*+,�-.��
� O/R�����������������������
- /012����3*45�67)�89:
- ������67)�89;)<=>9:
- ���?@�Java����ABC>9:
- ()*3DE�FG
- H-I09SQL�J�*�4K=L�:
- ()*�M��
- N)OP3Q���
- Lazy Loading
- RG)�S�M)�T��UV
- W�XY()FZ
- [\]^�_`
- ab�cdef…ggh/
5
Agenda
� O/R��������
� �� O/R�����
- Oracle TopLink
�TopLink O/R�������
�TopLink ����
- ADF Business Components
� ���
6
��������������������O/R������������
� ����������O/R� ����������
- Oracle TopLink - ���O/R�������
� POJO Plain Old Java Object�����������
� ����������DB������ �!"#"$����� Meet-in-the-Middle�%&"�����'()�
� *)+,�-.�/0��12�3�-4"5�%&"6�'(789
- ADF Business Components - SQL�:�;<=>?O/R�������
� @A>?SQLBCTransfer Object Value Object��DEFG
� :HIBCJKL�������FG��Transfer Object=�����
*1
TopLink
����� �����
����� �Transfer Object
��
SQL������ADF BC
�� ������Transfer Object������ !
7
Agenda
� O/R��������
� �� O/R�����
- Oracle TopLink
�TopLink O/R�������
�TopLink ����
- ADF Business Components
� ���
8
Oracle TopLink� �������O/R��� ���
- �������*1
� Java Developer’s Journal Readers’ Choice Awards: Best Java Persistence Architecture
� Editor’s Choice JavaWorld 2003 Award: Best Java Data Access Tool
� 2003 Java Pro Readers Choice Award: Best Java Data Access Tool or Driver
- ���� ����
� 1994����������Smalltalk��
� 1997��Java�����
� 2002������� !"#$%&'()
� ���DB�AP�������
- JDBC2.0*+�,$-.�/012DB
- 3452J2EE6789:;<=>�JTA?EJB@A�B;<�CDEF3G�
*1:��� http://www.oracle.com/appserver/toplink_award.html
9
TopLink
JDBC
DB���
����
SQL/JDBC
TopLink����������������������������
DB
��������
JavaBeans
�����
TopLink�
�����
Mapping Workbench
Sessions Editor
���������
O/R�������
��� ������DB
������
����������
10
Agenda
� O/R��������
� �� O/R�����
- Oracle TopLink
�TopLink O/R�������
�TopLink ����
- ADF Business Components
� ���
11
����������������JavaBeans��������O/R������������
� TopLink������JavaBeans���� ���
- �� + setter/getter����
- EJB Entity Bean���� ���������
- �������������� !"#���
� POJO������
- Plain Old Java Object$%�&'Plain Ordinary Java Object(
Customer
id
name
public class Customer {public class Customer {public class Customer {public class Customer {
private Integer id;private Integer id;private Integer id;private Integer id;
private String name;private String name;private String name;private String name;
private String email;private String email;private String email;private String email;
public Customer() { }public Customer() { }public Customer() { }public Customer() { }
public String public String public String public String getNamegetNamegetNamegetName(){(){(){(){
return this.name;return this.name;return this.name;return this.name;
}}}}
public void public void public void public void setNamesetNamesetNamesetName(String name) {(String name) {(String name) {(String name) {
this.name = name;this.name = name;this.name = name;this.name = name;
}}}}
������������������������
}}}}
12
TopLink����������������������������O/R��� ������ ������ ������ ���
� ���Direct-to-Field�����
- String VARCHAR�Integer NUMBER� ������������
� �������������
- 1�1�1������
-���
-� !"�#�$%�&����
� '()�*+,� �-./01
� ��2�������
-3!���
� String NUMBER� �456����
-789:;#&3!�
� <=String�2“Male”�”Female”/>?@?‘M’�’F’A2��BCDBDEFG
-# �(HI�J����
� KL�M2NOPQ�RS2/TUVWXY�KZ����
� >�[
-\]
� \]/^_B`JavaBeans�����
-��a !b&789:;#
� �9789:;#� /��a !bBCEF
-c!�;#&d�;���
� String� �d�;���RS/efDEF
- Aggregation�gh&gi�
� 1Q�f/KLJavaBeansD����
-KLf
� 1Q�JavaBeans/KL�fD����
13
jkl�[�JavaBeansm����������/5VnnRSo��������f5
Order LineItem
id
orderDate
lineItems
id
product
quantity
1 *
CUSTOMER
ID NAME A_ID
ADDRESS
ID CITYSTREET
ORD
ID ORDERDATE
LINEITEM
ID QTYPROD O_ID
1�������� ��������� ����������� ����������� ����������� ��
Customer
id
name
address
Address
id
street
city
1 1
1����1 ������������ ������������ ������������ ������������
Address������
Vector����� ����
1������ �������������java.util.Collection�java.util.Map
�����������
TopLink����O/R���������������������������� – ����
14
TopLink����O/R���������������������������� – ����
CustomerAddress
id
name
address
id
street
city
customer
1 1
1 1 Employee
id
name
manager
����������������������������������������� ���������� ���������� ���������� ���������
SALARY
ID SAL
EMPLOYEE
ID NAMEEmployee
id
name
salary
��������������������������������
EMPLOYEE
ID NAME START_DATE END_DATE
Aggregation����������������������������
Employee Period
id
name
period
startDate
endDate
1 1
CUSTOMER
ID NAME
ADDRESS
ID CITYSTREET
EMPLOYEE
ID NAME MGR_ID
15
Employee
id
name
FullTimeEmp
salaly
ContractEmp
hourlyPay
EMPLOYEE
ID NAME TYPE SAL H_PAY����������������������������
EMPLOYEE
ID NAME TYPE
FULLTIME_EMP
ID SALARY
CONTRACT_EMP
ID H_PAY
2���������� ��
��������������������������������������
TopLink����O/R���������������������������� – ����
Single Table per Class Hierarchy
Joined Subclass
16
GUI������������������������O/R���� ���� ���� ����
� Mapping Workbench�����O/R������
- GUI��������XML�� ������
- ��������������� �!�"�#�$%&
� GUI ���������Java��������������
- '()*�+,-.!�"�#/0�XML1234
$�56!�"�#/0�Java(7)8��9�����:;
TopLink Mapping Workbench
���������� � �� ������������ � �
���������������
17
TopLink����O/R������������������������������������
� Mapping Workbench�����������
- Bottom-Up
� ���������JavaBeans� ������������ �JavaBeans��������������
- Top-Down
� ���JavaBeans�������� �������/�����
- Meet-in-the-Middle
� ���JavaBeans����������� – ��������������������������������
� Mapping Workbench����������� �
Bottom-Up Top-Down Meet-in-the-Middle
18
Agenda
� O/R��������
� �� O/R�����
- Oracle TopLink
�TopLink O/R�������
�TopLink ����
- ADF Business Components
� ���
19
����������������������������
� ������������� �����������������
� ������� !��"#�����$ !��"%�&'$()
- ��������JavaBeans�� ��������
- ������ ���������� !"#$
� �%&�'()�� *+��� ����� ,-�.
������������������������������������
������������
DB ��� ��� ��� ���
DB����������������������������
��������������������������������
����� ��������� ��������� ��������� ����
����� !"������ !"������ !"������ !"�
������������
��������������������������������������������
��������������������
20
TopLink��������������������������������
� TopLink�5��������� – ����������
- GC������� – ���� ���������
� ���������� – GC����
� ������java.lang.ref.SoftReference� – OutOfMemoryError !����
� "���java.lang.ref.WeakReference� – GC��
� Full Identity Map
-���������
� Cache Identity Map
-� �������������
� Weak Identity Map
-���������
� Soft Cache Weak Identity Map
-�������������������JavaBeans�� �������� ��
����
� Hard Cache Weak Identity Map
-�������������������JavaBeans�� ����������
���
21
JavaBeans������������������������������������
� TopLink�������JavaBeans��� �
- Mapping Workbench����������
- �����������������/�������
� ���
- �� !"#$%&'(")$�� *+,"-$.$Full Identity Map
� /0����GC1234
- �� !")$%&'(")$.$Soft Cache Weak Identity Map
� ��'(*54�*�678�����9:GC*;<
- =�>?@�AB:%&'(C#34$.$D�E34
� ���E34
22
����������������������������
� �����
//Customer��������Customer cust = (Customer)session.readObject(Customer.class, /*�� �*/);
//���������������Order��������Vector orders = cust.getOrders();
//������ for(int i=0; i<orders.size(); i++) {totalCost += ((Order)orders.get(i)).getCost();
}
CUSTOMER
ID NAME
Customer Order
id
name
orders
id
orderDate
cost
1 *
ORD
ID C_IDO_DATE COST
���JavaBeans��������� ����
23
Lazy Loading����������������������������
� �� 1�1�������� ���
- ���������� ��������
� ����� - �TopLink�����������������
- ������������ ��� !��!�"���
�������������������������������� � ��������
� ������ �����DB����
����� ������� �
����� ����� �! �"�� �
#$�%&'() !$*�+%&',)
Address
Address
Customer
Customer
24
� �����
- #$%name&'“()�*”+,�-./01
TopLink��������������������
//name�“����”����� ����������Expression����
ExpressionBuilder builder = new ExpressionBuilder();Expression exp = builder.get(“name”).equal(“����”);
//����������Customer� !"�#�$%Customer c = (Customer)session.readObject(Customer.class, exp);
Customer
id
name
CUSTOMER
ID NAME
SELECT ID, NAME FROM CUSTOMER
WHERE (NAME = ‘����’�
��������
builder.get(“��”).< ������>()
�� ������
equal(), greaterThan(), greaterThanEqual(),between(), containsAllKeyWords()��
25
����������� �� ������������ �� ������������ �� ������������ �� � – ����
� 1�1���������� – ��
- ������city��“”��
�����
Expression exp = builder.get(“address”).get(“city”).equal(“��”);
Customer c = (Customer)session.readObject(Customer.class, exp);
CUSTOMER
ID NAME A_ID
ADDRESS
ID CITYSTREET
Customer Address
id
name
address
id
street
city
1 1
����������� ��������get(“��”)����
26
����������� �� ������������ �� ������������ �� ������������ �� � – ����
� 1����������� – ���
- cost�100����������
Expression exp = builder.anyOf(“orders”).get(“cost”).greaterThanEqual(100);
//��������Customer�� ������
Customer c = (Customer)session.readObject(Customer.class, exp);
CUSTOMER
ID NAME
Customer Order
id
name
orders
id
orderDate
cost
1 *
����������� �����anyOf(“� �”)���
ORD
ID C_IDO_DATE COST
27
����������� �� ������������ �� ������������ �� ������������ �� � – ����
Customer Order OrderItem Product
id
name
orders
orderDate
cost
orderItems
quantity
discount
product
productName
cost
weight
1 1 1 1* *
� ���������� �������������
- “����”�������� �
Expression exp = builder.anyOf(“orders”).anyOf(“orderItems”).get(“product”).get(“productName”).equal(“����”);
SELECT t3.ID, t3.NAME FROM CUSTOMER t3, ORD t2, ORD_ITEMS t1, PRODUCT t0 WHERE ((t0.PRODUCT_NAME = ‘����’) AND ((t2.CUST_ID = t3.ID) AND ((t1.ORD_ID = t2.ID) AND (t0.ID = t1.PRODUCT_ID))))
Attribute Traversal�����“��”
28
����������� ��������������� ��������������� ��������������� ����
� �������UnitOfWork��
- ����������� ������DB������
� �������
- �������� !"�������#$%&
- SQL'()�*+(,-
- ./01�23��4��5%(6!�78
��������������������������������
��������������������������������
������������
����� ����� ����� ��������� ����������������������������������������
����������������������������������������
���� � � � �
������ !"#$%&�'(��)*�� !"#$%&�'(��)*�� !"#$%&�'(��)*�� !"#$%&�'(��)*++++ ��,�- �./�01 ��,�- �./�01 ��,�- �./�01 ��,�- �./�01 2222 �345(�647�����345(�647�����345(�647�����345(�647����
�����8��� �����8��� �����8��� �����8������������� ����������� ����������� ����������� �
������������
29
����������������������������
� �������������� ����
- UPDATE����������� �
����� �������
� ������������ ����
- ������SELECT ... FOR UPDATE [NOWAIT]����
UPDATE CUSTOMER
SET NAME = ‘����', VERSION = 2
WHERE ((ID = 100) AND (VERSION = 1))
��������
��������WHERE�� ��
�����������������
c:Customer
id=100
name=“oracle”
version=1
c:Customer
id=100
name=“����”
version=1
�
��!"
#$�%&'
()*'
30
������������������������
� ��������
//��������
UnitOfWork uow = session.acquireUnitOfWork();
//�� �������
Customer cust = new Customer(1, “������”);
//���������
uow.registerObject(cust);
//�������������
uow.commit();
Customer
id
name
CUSTOMER
ID NAME
���������� ������������DB������
�� ������ !"
31
������������������������
� ��������
//Customer��������Customer cust = (Customer)session.readObject(...); //
//�� �����UnitOfWork uow = session.acquireUnitOfWork();
//����������������������Customer custCopy = (Customer)uow.registerObject(cust); //�
//������custCopy.setName(“����”);
//�� !�"# ��$��uow.commit();
Customer
id
name
CUSTOMER
ID NAME
//���������� �������Customer custCopy =
(Customer)uow.readObject(...);
����������������� !
32
������������������������
� ��������
UnitOfWork uow = session.acquireUnitOfWork();
//���������� ����������
Customer custCopy = (Customer)uow.readObject(...);
//������uow.deleteObject(custCopy);
//�������� !uow.commit();
Customer
id
name
CUSTOMER
ID NAME
33
TopLink��������������������
� O/R�������
-������
-�� �� �������������…
������� !"#$%&'
� O/R�����()�*�+
- Top Down
- Bottom Up
- Meet-in-the-Middle
� ,�-
- Mapping Workbench
- Sessions Editor
-./0���!(�*/1#"
� 2"�34 ��
-5�67(+8�4
- SQL 9:;< =>
- JTA2"�34 ��? @A
� *�4
-B�67C!67�4(*�4DE�F��GHI
-B�67C!67�4(�$(*�4DJKLMNOPQ�R �J%+8�4I
-S C!67�4(*�4DFOR UPDATETI
� Q�R(UV� W
- GCX YZ[\O]UV� W ^_`
- JavaBeansabNcde�
� fgh
- Attribute Traversalij]�klfgh
-fgh m�dnDWorkbenchNdnI
-9:op]SQL qrs
-!2)$(�* �FV tA
� ./0���!uvw
-xyz{|�F�#�z{|
-E�+z{|�!2�}z{|
-!4*�-e�~��-z{|
-��z{|
-E�+r��
-!6�2��2(UV� W
� � �
-�U� �Y��DDB ���!���� ���!�I
-�U�� UV� W�m����
- TopLink SDKij]RDB��? )4�!
-��UV� W� ��w
34
TopLink������������������������
� TopLink 10.1.3
- 2005/����������
- ����
� OC4J�CMP Entity Bean����
� JAXB������O/X�Object/XML����� !����
� "#�$%�&'(
-Time-to-Live)*+,-.�
� FlashBack/01�2
� EJB 3.0
- EJB 3.0 Entity Bean���345%�6789
TopLink 10.1.3����EJB 3.0������������������������
��� ������������� ������������� ������������� ����������!!
35
Agenda
� O/R��������
� �� O/R�����
- Oracle TopLink
�TopLink O/R�������
�TopLink ����
- ADF Business Components
� ���
36
ADF Business Components����ADF BC����
� ADF Business Components���
- MVC���������� ���������������������
- �� ������������ADF BC� !��"#
� $%&'O/R()*�+"#
� ��, -������
� ./�0 1/)�2�3�45678�������
� UI59:"#;��,<=�>?@AB'C���������DEF
� JAAS3GH�IJ59:
- JDeveloper 10g�KLMN�OP
- QDRSTUVW;Oracle EBS'CF
� ��O/R������� ��
- SQL�$X�YZ�O/R()*�+"#
37
ADF BC��������������������������������
� ADF BC����������� ������
DB
������������������������
��������������������������������������������•���� ������ ������ ������ ��• DB��������������������������������
ApplicationModule
EntityObject
ViewObject
� ������� ������� ������� ������•����� ������� ������� ������� ��•��������������������SQL���� ���� ���� ����
!����"#!����"#!����"#!����"#
����������� ������������� ������������� ������������� ��• Facade�� ���� ���� ���� ��• $�%&'(����)*$�%&'(����)*$�%&'(����)*$�%&'(����)*
Row����������������•+�+�+�+�Transfer Object
38
ADF BC�������������������� – ��������������������
ADDRESS
ID CITYSTREET
EMPLOYEE
ID NAME A_IDSALARY BONUSid
name
street
city
totalIncome
Row
SELECTEmp.ID,Emp.NAME,Addr.STREET,Addr.CITY,12*Emp.SALARY
+ NVL(Emp.BONUS, 0)AS TOTAL_INCOME
FROMEMP Emp, ADDRESS Addr
EmpInfoView
��������������������������������
• ��������������������������������
• ����� ������ ������ ������ �SQL������������
Row����������������
• ������������Transfer Object
• ViewObject����SQL������������������������������������
String name = (String)row.getAttribute(“name”);
39
ADF BC�������������������� – ����������������
ADDRESS
ID CITYSTREET
EMPLOYEE
ID NAME A_IDSALARY BONUS
id
name
street
city
totalIncome
Row
EmpInfoView
11
id
street
city
Address
id
name
salary
bonus
address
Employee
��������������������������������������������
• ��������������������������������
• ADF BC�� �� ������� �� ������� �� ������� �� �����
�������� ������������� ������������� ������������� ������������
�����
����
row.setAttribute(“name”, “���”);
40
ADF BC��������������������
� O/R�������
-��� ���������
- Oracle����������������
-����������1�1�1������� !"#
- SQL 92$%���&���'(�)
- SQL*�$+,-�����
- DB��.��+/012��3456
-78/9:;�<�=>?@�'(�)
� ��������
-A?@B�CDEF;G�<*HI,-J�K�LM������NOP�#
-QRLM�EFST�U��)�U�VW�X#�=>�Y@
-Z[��\]^)U*_LB�
-EFST`EFab�O�c�G�d�c^e
-����f6g hij�kl
� mn��o�);�bp`�qr
-U�b&^�s�^t��gu2�)v/wxyz{�d�c^e
-|}~`���������^�LM`������^*�,-����f�b&^�X�UIz{����Oracle ADF`�qr+/0#
-���.����g�Gn�^+LM��-mG���;G�<`UI`��P�����
� ��8
-���.����g�Gn�^g�����
- JDBC�������
-\�P^g�����-��c����g�u�)���e�DB�,��\�P^#
-���.����g�Gn�^g��^`����^+��0��z{���`;���
- Oracle Enterprise Manager Application Server Control*Y@,-���.������
¡��¢����
- JAASc2n�u�`qr,-�����f6�h£ij�kl
41
TopLink����ADF BC������������
� TopLink
- ���O/R�������
� ����JavaBeans�����
� � ��������
� �����������������
- TopLink�� �!"#
� $%&'()�*+,-DB#�"��./01�234�256
� 789"�#�:;<=�56
� >�?!"�@;ABCDE",F��G"H0IJK;L3256
� ADF BC
- SQL��������O/R�� +�����������������
� SQL���Transfer Object��
� ����� UI�������
� Oracle ADF���������������� !"#�
- ADF BC$%&�'�
� Oracle ADF�()*+, -.�'��/0123456789:)
� SQL1;<=�,DB�>�Java5�?@1AB89:)
42
Agenda
� O/R��������
� �� O/R�����
- Oracle TopLink
�TopLink O/R�������
�TopLink ����
- ADF Business Components
� ���
43
������������
� ���������� ����O/R�����������
- Oracle TopLink - ���O/R�������
� POJO Plain Old Java Object�����������
� ����������DB������ �!"#"$����� Meet-in-the-Middle�%&"�����'()�
� *)+,�-.�/0��12�3�-4"5�%&"6�'(789
- ADF Business Components - SQL�:�;<=>?O/R�������
� @A>?SQLBCTransfer Object Value Object��DEFG
� :HIBCJKL�������FG��Transfer Object=�����
TopLink -http://otn.oracle.co.jp/products/ias/toplink/index.html
JDeveloper -http://otn.oracle.co.jp/products/jdev/index.html
��������������������������������!!
����������������gObbgObb���������������������������������������� >>>>
gaÉîÉäçéÉê=NMÖ=gaÉîÉäçéÉê=NMÖ=��������NMKNKPNMKNKP�������� l`Qg=NMÖ=l`Qg=NMÖ=((((((((NMKNKPNMKNKP))))))))qçéiáåâ=NMÖ=qçéiáåâ=NMÖ=((((((((NMKNKPNMKNKP))))))))
SQLSQL��������JDBCJDBC��������������������������������������������������������
����������������OO--RR ������� ������� ������� ������� ������� ������� ������� �������
√ ����������� �����√ ������^mf����������
√ �� √ !"#
√ N$N%N$&%&$&√ '())ÉíÅK
����� ������� ������� ������� ������� ������� ������� ������� �� ��������������������������������������������������������
������ ������ ������ ������ ������ ������ ������ ������
√ j~ééáåÖ=tçêâÄÉåÅÜ
√ pÉëëáçåë=bÇáíçê
√ mÉêÑçêã~åÅÉ=mêçÑáäÉê
√ *+,�-√ .�/0123√ 4,5678
√ 9:123√ ;<123√ =>?/@) ÉíÅK
J2EE 1.4 J2EE 1.4 !"!"!"!"!"!"!"!" J2EEJ2EE���#���#���#���#���#���#���#���#
JSF JSF $%&'()$%&'()$%&'()$%&'()$%&'()$%&'()$%&'()$%&'()
*+��,�-./�01234*+��,�-./�01234*+��,�-./�01234*+��,�-./�01234*+��,�-./�01234*+��,�-./�01234*+��,�-./�01234*+��,�-./�01234√√ ABCDE�F�GHIJF�K/LABCDE�F�GHIJF�K/L
√√ MNOPMNOP
√√ QRSQRS
√√ ���T��UV���T��UV
√ bg_=OKNLpÉêîäÉí OKQLgpm=OKM
√ WXYgjuZ/.[\]^/@_gpoTTLgpoUU$`a
√ qçéiáåâ=`jm[b�
√ cG�^/�cG%U/dZ/.eC[f?g/���_��.d�ha
√ ijkOm`����_��������
l/Umn/da
√ o�-G@gpc=rf=C=poq/���rs
√ tugpcl�v/n��_^ac=c~ÅÉëaw
eCxy
J2EE 1.4 J2EE 1.4 $%$%$%$%$%$%$%$% 56&'()56&'()56&'()56&'()56&'()56&'()56&'()56&'()
√ bg_=OKNLpÉêîäÉí OKQLgpm=OKM
√ o�-G@bi�Umd ÉíÅK
789:;�<����789:;�<����789:;�<����789:;�<����789:;�<����789:;�<����789:;�<����789:;�<����
√ rji=�/g�.z%{/.g/.z√ U/dZ/.�VU�h ÉíÅK
<�=�><����?@AB<�=�><����?@AB<�=�><����?@AB<�=�><����?@AB<�=�><����?@AB<�=�><����?@AB<�=�><����?@AB<�=�><����?@AB
√ fab|}~b����&"[
E��d�y���
����������������������������������������
OTN-Japan: http://otn.oracle.co.jp/
��������� ��
OC4J����TopLink������������
EJB 3.0 ������ �������� �������� �������� ��!!
top related