You are on page 1of 9

My ng dung ca Google cho Java: Phn 3: Luu

gi lu bn v cc mi quan h
Luu gi lu bn da vo Java v kho luu tr d liu ca My ng dng ca Google
Muc d: Nhp mn
Rick Hightower , Gim dc, eBlox
28 05 2010
Luu giu lu bn du liu l mt phn quan trong cua vic phn phi ung dung c kha nng mo rng trong
cc mi truong doanh nghip. Trong bi vit cui cng cua loat bi gioi thiu cua mnh v My ung
dung cua Google (Google App Engine) cho Java, Rick Hightower chp nhn cc thch thuc cua cc
khung cng tc luu giu lu bn dua trn Java hin c cua My ung dung (App Engine). Tm hiu cc chi
tit v tai sao vic luu giu lu bn bng Java trong ban cc pht hnh truoc dy chua phai l hon ton
sn sng cho thoi ky cao dim, dng thoi cung nhn duoc mt trnh din lm vic thuc su v nhung g
m ban c th lm d luu giu lu bn du liu trong cc ung dung cua My ung dung cho Java. Ch
rng ban s cn phai c ung dung quan l lin h tu Phn 2 v chay n khi ban hoc cch su dung API
JDO d luu giu lu bn, truy vn, cp nht v xa cc di tuong Contact (mi lin h).
My ung dung cho Java c gng loai bo mi lo phai vit mt tng luu giu lu bn cho cc ung dung Web mo rng
duoc, nhung n thuc hin muc dch d dn muc no? Trong bi vit ny, ti kt thc bi gioi thiu cua mnh v My
ung dung cho Java voi mt tng quan v khung cng tc luu giu lu bn cua n, dua trn cc di tuong du liu Java
(Java Data Objects-JDO) v API luu giu lu bn cua Java (Java Persistence API-JPA). Mc d ban du to ra nhiu hua
hen, vic luu giu lu bn dua trn Java cua My ung dung hin tai c mt s nhuoc dim nghim trong m ti s giai
thch v chung to cc nhuoc dim d. Ban s tm hiu xem vic luu giu lu bn cua My ung dung cho Java hoat dng
nhu th no, nhung thch thuc l g v ban c nhung ty chon luu giu lu bn no khi lm vic voi nn tang dm my
cua Google dnh cho cc nh pht trin Java.
Khi ban doc bi vit ny v lm vic qua cc v du, ban s mun ghi nho mt thuc t l My ung dung cho Java hin
nay l mt ban pht hnh xem trc. Khi m vic luu giu lu bn dua trn Java c th khng phai l tt ca nhung g m
ban c th hy vong, hoc cn c, vo lc ny, diu ny l c th v cn thay di trong tuong lai. Nhung g m ti hoc
duoc trong khi vit bi huong dn ny l vic su dung My ung dung cho Java d pht trin ung dung Java tp trung
vo du liu, c kha nng mo rng, hin nay, khng phai dnh cho nhung nguoi nht nht hay bao thu. N ging nhu
ln xung dy b boi: Khng cn o trong tm mt cua nguoi cuu h nua v du n cua ban chm xung hoc boi duoc
l ty thuc noi ban.
Ch rng ung dung v du trong bi vit ny duoc dua trn ung dung quan l lin h d pht trin trong Phn 2 cua
bi vit ny. Ban s cn phai c ung dung d d xy dung v chay duoc d tip tuc cc v du o dy.
Thnh phn co bn v cc s tru tung ha c l r
Cung ging nhu My ung dung cua Google nguyn thuy, My ung dung cho Java dua vo co so ha tng ni b cua
Google voi Ba Tru Lon (Big Three) d pht trin ung dung c kha nng mo rng: phn tn, tao ban sao v cn bng
tai. V ban dang lm vic voi co so ha tng cua Google, nn hu ht cc php thut ny xay ra o hu truong v ban c
th truy cp qua cc API tiu chun cua My ung dung cho Java. Giao din kho luu tru du liu (datastore) duoc dua
trn JDO v JPA, m chnh chng lai dua trn du n ngun mo DataNucleus. My ung dung cho Java cung cung cp
mt API tip hop (adapter) muc thp d lm vic truc tip voi kho luu tru du liu cua My ung dung cho Java, kho luu
tru du liu ny dua trn vic thuc hin BigTable cua Google (xem Phn 1 d bit thm v BigTable).
Tuy nhin, vic luu giu lu bn du liu cua My ung dung cho Java l khng hon ton don gian nhu vic luu giu lu
bn trong My ung dung cua Google thun. Cc giao din JDO v JPA l ra mt s su truu tuong ha c l r do thuc
t l BigTable khng phai l mt co so du liu quan h. V du, trong My ung dung cho Java, ban khng th thuc hin
cc truy vn m chng thuc hin cc php ni (join). Ban c th thit lp cc quan h trong JPA v JDO, nhung chng
chi c th duoc su dung d luu giu lu bn cc quan h. V khi ban luu giu lu bn cc di tuong, chng chi c th
duoc duy tr trong cng mt giao dich nguyn tu nu chng o trong cng mt nhm thuc th. Theo quy uoc, cc quan
h l quan h so huu nm trong cng nhm thuc th voi thuc th cha me. Nguoc lai, cc mi quan h khng so huu
Page 1 of 9
nm trong cc nhm thuc th tch bit.
Ngh lai v chun ha d liu
Lm vic voi kho luu tru du liu c kha nng mo rng cua My ung dung di hoi ban phai suy nghi lai lun thuyt cua
mnh v cc loi ch cua du liu duoc chun ha. Tt nhin, nu ban d lm vic du lu trong th gioi thuc, c th ban
d phai mt hai ln hy sinh su chun ha d di ly hiu nng. Su khc bit l, khi lm vic voi kho luu tru du liu cua
My ung dung, ban phai khng chun ha som hon v thuong xuyn. Cha chun ha khng cn l mt tu xu nua;
thay vo d, n l mt cng cu thit k m ban s p dung trong nhiu kha canh cua cc ung dung cua My ung dung
cho Java cua ban.
Nhuoc dim chnh voi My ung dung cho su luu giu lu bn c l r cua Java s xut hin khi ban c gng chuyn
mt ung dung duoc vit cho mt RDBMS toi My ung dung cho Java. Kho luu tru du liu cua My ung dung cho
Java khng phai l mt su thay th ngay lp tuc cho mt co so du liu quan h, do d, nhung g m ban lm voi My
ung dung cho Java c th khng d dng din dich d chuyn sang cho RDBMS. Ly mt luoc d hin c v mang n
sang kho luu tru du liu l mt kich ban thm ch t kha nng hon. Nu ban quyt dinh chuyn mt ung dung doanh
nghip Java k thua toi My ung dung, hy nn tin hnh thn trong v sao luu n voi ban phn tch. My ung dung
cua Google l mt nn tang dnh cho cc ung dung duoc thit k ring bit cho n. Su h tro cua My ung dung cua
Google cho Java cho JDO v JPA cho php cc ung dung ny duoc chuyn nguoc tro lai thnh cc ung dung doanh
nghip truyn thng hon, d l chua chun ha.
Nhng rc ri vi cc mi quan h
Mt nhuoc dim khc cua My ung dung cho Java trong ban pht hnh xem truoc hin nay l vic xu l cc quan h
cua n. D tao cc quan h, hin tai ban phai su dung cc phn mo rng cho JDO dc th ring cho My ung dung cho
Java. Bit rng cc kha duoc tao ra dua trn cc tao phm cua BigTable d l, "kha chnh " c kha di tuong-
cha me duoc m ha vo tt ca cc kha cua con cua n ban s phai quan l du liu cua mnh trong mt co so du
liu khng quan h. Mt han ch khc l vic luu giu lu bn du liu. Cc su phuc tap nay sinh nu ban su dung lop
Key (Kha) khng tiu chun cua My ung dung cho Java. Truoc ht, ban su dung Key khng tiu chun nhu th no
khi chuyn m hnh cua ban sang mt RDBMS? Thu hai, my GWT khng th dich lop Key, v th bt ky di tuong
m hnh no su dung lop ny khng th duoc su dung nhu mt phn cua ung dung GWT cua ban.
Tt nhin, tai thoi dim vit bi ny, My ung dung cua Google cho Java moi chi l o ch d xem truoc. N khng
duoc xem l d sn sng cho thoi ky cao dim. Diu ny tro nn cng r rng hon khi nghin cuu ti liu huong dn v
cc quan h trong JDO, rt thua thot v chua cc v du chua hon chinh.
B cng cu pht trin cua My ung dung cho Java duoc gui km mt loat cc chuong trnh v du. Nhiu v du trong d
su dung JDO, m khng su dung JPA. Khng c mt v du no (k ca v du c tn l jdoexamples) nu th du v mt
quan h d l don gian. Thay vo d, tt ca cc v du chi su dung mt di tuong d luu tru du liu trong kho luu tru du
liu. Nhm thao lun v My ung dung cua Google cho Java bi trn ngp nhung cu hoi v cch lm th no d mt
quan h don gian hoat dng duoc, voi vi cu tra loi. Mt s nh pht trin hnh nhu d c kha nng lm cho n hoat
dng, nhung rt vt va v gp mt s kh khn.
Dim mu cht v cc quan h trong My ung dung cho Java l ban cn phai quan l chng m khng duoc h tro
nhiu tu JDO hay JPA. Tuy nhin, BigTable cua Google l mt cng ngh d duoc thu thch d san xut cc ung dung
c kha nng mo rng v ban c th xy dung bn trn n. Vic xy dung bn trn BigTable giai phng ban, khng cn
phai lm vic voi mt ngoi API, cn chua duoc hu thun dy du. Mt khc, ban s phai lm vic voi mt API muc
thp hon.
JDO trong My ng dng cho Java
Khi m vic chuyn mt ung dung Java truyn thng sang My ung dung cho Java c th khng c nghia v thm
ch d bit rng c nhung thch thuc v cc quan h, vn c cc kich ban luu giu lu bn m o dy vic su dung nn
tang ny l c . Ti s kt thc bi ny bng mt v du lm vic duoc, mang lai cho ban mt huong vi v vic My
ung dung cho Java thuc hin luu giu lu bn nhu th no. Chng ta s bt du voi ung dung quan l-lin h duoc xy
dung trong Phn 2, ln ny di qua cc thu tuc d thm h tro cho vic luu giu lu bn cc di tuong Contact bng cc
phuong tin cua kho luu tru du liu cua My ung dung cho Java.
Trong bi truoc, ban d tao mt GWT GUI don gian thuc hin cc hoat dng CRUD trn cc di tuong Contact. Ban
Page 2 of 9
d dinh nghia giao din don gian nhu thy trong Lit k 1:

Lit k 1. Giao din ContactDAO don gian

Tip theo, ban d tao ra mt phin ban gia, lm vic voi du liu trong mt b suu tp nm o b nho, nhu thy trong
Lit k 2:

Lit k 2. ContactDAOMock lm gia DAO

By gio hy xem diu g s xay ra khi ban thay th vic thuc hin m hnh gia bng mt phin ban cua ung dung tuong
tc voi kho luu tru du liu cua My ung dung cua Google. Voi v du ny, ban s su dung JDO d luu giu lu bn lop
Contact. Mt ung dung duoc vit bng cch su dung cc trnh cm thm Eclipse cua Google (Google Eclipse Plugin)
d c tt ca cc thu vin m n cn d su dung JDO. N cung bao gm mt tp jdoconfig.xml, do d mt khi ban ch
giai lop Contact, ban s sn sng d bt du su dung JDO.
Lit k 3 cho thy giao din ContactDAO duoc mo rng d su dung API JDO d luu giu lu bn, truy vn, cp nht v
xa cc di tuong:
package gae.examp1e.confacf.seve

1mpof ava.uf11.L1sf

1mpof gae.examp1e.confacf.c11enf.Confacf

pub11c 1nfeface ConfacfDAO {
vo1d addConfacf{Confacf confacf}
vo1d emoveConfacf{Confacf confacf}
vo1d updafeConfacf{Confacf confacf}
L1sf<Confacf> 11sfConfacfs{}
}

package gae.examp1e.confacf.seve

1mpof gae.examp1e.confacf.c11enf.Confacf

1mpof ava.uf11.AayL1sf
1mpof ava.uf11.Co11ecf1ons
1mpof ava.uf11.L1nkedhashMap
1mpof ava.uf11.L1sf
1mpof ava.uf11.Map

pub11c c1ass ConfacfDAOMock 1mp1emenfs ConfacfDAO {

Map<5f1ng, Confacf> map = neW L1nkedhashMap<5f1ng, Confacf>{}

{
map.puf{"h1ghfoWe0mammafus.com", neW Confacf{"k1ck h1ghfoWe",
"h1ghfoWe0mammafus.com", "520-555-1212"}}
map.puf{"scoff0mammafus.com", neW Confacf{"5coff Iauebach",
"scoff0mammafus.com", "520-555-1213"}}
map.puf{"bob0mammafus.com", neW Confacf{"8ob Dean",
"bob0mammafus.com", "520-555-1214"}}

}

pub11c vo1d addConfacf{Confacf confacf} {
5f1ng ema11 = confacf.gefLma11{}
map.puf{ema11, confacf}
}

pub11c L1sf<Confacf> 11sfConfacfs{} {
efun Co11ecf1ons.unmod1f1ab1eL1sf{neW AayL1sf<Confacf>{map.va1ues{}}}
}

pub11c vo1d emoveConfacf{Confacf confacf} {
map.emove{confacf.gefLma11{}}
}

pub11c vo1d updafeConfacf{Confacf confacf} {
map.puf{confacf.gefLma11{}, confacf}
}

}

Page 3 of 9

Lit k 3. ContactDAO vi JDO
package gae.examp1e.confacf.seve

1mpof gae.examp1e.confacf.c11enf.Confacf

1mpof ava.uf11.L1sf

1mpof avax.do.JDOhe1pe
1mpof avax.do.Pes1sfenceManage
1mpof avax.do.Pes1sfenceManageIacfoy

pub11c c1ass ConfacfJdoDAO 1mp1emenfs ConfacfDAO {
p1vafe sfaf1c f1na1 Pes1sfenceManageIacfoy pmflnsfance = JDOhe1pe
.gefPes1sfenceManageIacfoy{"fansacf1ons-opf1ona1"}

pub11c sfaf1c Pes1sfenceManageIacfoy gefPes1sfenceManageIacfoy{} {
efun pmflnsfance
}

pub11c vo1d addConfacf{Confacf confacf} {
Pes1sfenceManage pm = gefPes1sfenceManageIacfoy{}
.gefPes1sfenceManage{}
fy {
pm.makePes1sfenf{confacf}
} f1na11y {
pm.c1ose{}
}
}

05uppessWan1ngs{"unchecked"}
pub11c L1sf<Confacf> 11sfConfacfs{} {
Pes1sfenceManage pm = gefPes1sfenceManageIacfoy{}
.gefPes1sfenceManage{}
5f1ng quey = "se1ecf fom " + Confacf.c1ass.gefName{}
efun {L1sf<Confacf>} pm.neWquey{quey}.execufe{}
}

pub11c vo1d emoveConfacf{Confacf confacf} {
Pes1sfenceManage pm = gefPes1sfenceManageIacfoy{}
.gefPes1sfenceManage{}
fy {
pm.cuenf1ansacf1on{}.beg1n{}

// We donf have a efeence fo fhe se1ecfed Poducf.
// 5o We have fo 1ook 1f up f1sf,
confacf = pm.gefObecf8yld{Confacf.c1ass, confacf.gefld{}}
pm.de1efePes1sfenf{confacf}

pm.cuenf1ansacf1on{}.comm1f{}
} cafch {Lxcepf1on ex} {
pm.cuenf1ansacf1on{}.o11back{}
fhoW neW kunf1meLxcepf1on{ex}
} f1na11y {
pm.c1ose{}
}
}

pub11c vo1d updafeConfacf{Confacf confacf} {
Pes1sfenceManage pm = gefPes1sfenceManageIacfoy{}
.gefPes1sfenceManage{}
5f1ng name = confacf.gefName{}
5f1ng phone = confacf.gefPhone{}
5f1ng ema11 = confacf.gefLma11{}

fy {
pm.cuenf1ansacf1on{}.beg1n{}
// We donf have a efeence fo fhe se1ecfed Poducf.
// 5o We have fo 1ook 1f up f1sf,
confacf = pm.gefObecf8yld{Confacf.c1ass, confacf.gefld{}}
confacf.sefName{name}
confacf.sefPhone{phone}
confacf.sefLma11{ema11}
pm.makePes1sfenf{confacf}
pm.cuenf1ansacf1on{}.comm1f{}
} cafch {Lxcepf1on ex} {
pm.cuenf1ansacf1on{}.o11back{}
fhoW neW kunf1meLxcepf1on{ex}
} f1na11y {
pm.c1ose{}
}
}

}
Page 4 of 9

Theo tng phuong thc
By gio chng ta hy xem xt nhung g dang xay ra voi mi mt trong cc phuong thuc trong Lit k 3. Ban s thy
rng trong khi cc tn phuong thuc c th l moi, hnh dng cua chng phn nhiu l d quen thuc.
Truoc tin, d truy cp vo PersistenceManager, ban d tao ra mt PersistenceManagerFactory tinh. Nu ban
d lm vic voi JPA tu truoc, PersistenceManager tuong tu voi mt EntityManager trong JPA. Nu ban d lm
vic voi Hibernate, PersistenceManager tuong tu nhu mt phin Hibernate. V ban cht, PersistenceManager
l giao din chnh cho h thng luu giu lu bn JDO. N dai din cho mt phin lm vic voi co so du liu. Phuong
thuc getPersistenceManagerFactory() tra v PersistenceManagerFactory, duoc khoi tao tinh, nhu chi ra
trong Lit k 4:

Lit k 4. getPersistenceManagerFactory() tra v PersistenceManagerFactory

Phuong thuc addContact() b sung thm mt mi lin h moi vo kho luu tru du liu ny. D lm diu ny, n cn
phai tao ra mt c th cua PersistenceManager v sau d goi phuong thuc makePersistence() cua
PersistenceManager ny. Phuong thuc makePersistence() ly di tuong Contact tam thoi (m nguoi dng s
phai din vo trong GWT GUI) v lm cho n thnh mt di tuong luu giu lu bn. Tt ca nhung vic ny duoc th
hin trong Lit k 5:

Lit k 5. addContact()

Ch trong Lit k 5 persistenceManager duoc gi trong mt khi finally nhu th no. Diu ny dam bao n
xa ngun ti nguyn kt hop voi persistenceManager.
Phuong thuc listContact(), duoc hin thi trong Lit k 6, tao ra mt di tuong truy vn tu persistenceManager
m n tm kim. N goi phuong thuc execute(), tra v danh sch cc Contact tu kho luu tru du liu.

Lit k 6. listContact()

Phuong thuc removeContact() tm kim mi lin h bng m nhn dang (ID) truoc khi n loai bo mi lin h y
khoi kho luu tru du liu, nhu chi ra trong Lit k 7. N phai lm diu ny chu khng phai chi xa ngay mi lin h v
di tuong Contact dn tu GWT GUI khng bit g v JDO. Ban phai ly ra mt Contact duoc kt hop voi mt vng
nho nhanh (cache) cua PersistenceManager truoc khi ban c th xa n.

Lit k 7. removeContact()
p1vafe sfaf1c f1na1 Pes1sfenceManageIacfoy pmflnsfance = JDOhe1pe
.gefPes1sfenceManageIacfoy{"fansacf1ons-opf1ona1"}

pub11c sfaf1c Pes1sfenceManageIacfoy gefPes1sfenceManageIacfoy{} {
efun pmflnsfance
}

pub11c vo1d addConfacf{Confacf confacf} {
Pes1sfenceManage pm = gefPes1sfenceManageIacfoy{}
.gefPes1sfenceManage{}
fy {
pm.makePes1sfenf{confacf}
} f1na11y {
pm.c1ose{}
}
}
05uppessWan1ngs{"unchecked"}
pub11c L1sf<Confacf> 11sfConfacfs{} {
Pes1sfenceManage pm = gefPes1sfenceManageIacfoy{}
.gefPes1sfenceManage{}
5f1ng quey = "se1ecf fom " + Confacf.c1ass.gefName{}
efun {L1sf<Confacf>} pm.neWquey{quey}.execufe{}
}

Page 5 of 9

Phuong thuc updateContact(), trong Lit k 8, tuong tu nhu phuong thuc removeContact(), o ch l n cung
tm kim Contact. Phuong thuc updateContact() sau d sao chp cc thuc tnh tu Contact. Cc thuc tnh ny
duoc chuyn nhu mt di s dn Contact, d duoc tm kim voi trnh quan l luu giu lu bn.
PersistenceManager kim tra cc thay di cua cc di tuong duoc tm kim. Nu mt di tuong d thay di, cc
thay di ny duoc PersistenceManager trt sang co so du liu khi mt giao dich cam kt.

Lit k 8. updateContact()

Ch gii cho vic luu gi lu bn di tung
D mt Contact duoc luu giu lu bn, ban phai nhn bit n nhu l mt di tuong c kha nng - luu giu lu bn voi
ch giai @PersistenceCapable. Sau d ban cn phai ch giai tt ca cc truong c kha nng luu giu lu bn cua n,
nhu th hin trong Lit k 9:

Lit k 9. Contact c kha nng luu gi lu bn
pub11c vo1d emoveConfacf{Confacf confacf} {
Pes1sfenceManage pm = gefPes1sfenceManageIacfoy{}
.gefPes1sfenceManage{}
fy {
pm.cuenf1ansacf1on{}.beg1n{}

// We donf have a efeence fo fhe se1ecfed Poducf.
// 5o We have fo 1ook 1f up f1sf,
confacf = pm.gefObecf8yld{Confacf.c1ass, confacf.gefld{}}
pm.de1efePes1sfenf{confacf}

pm.cuenf1ansacf1on{}.comm1f{}
} cafch {Lxcepf1on ex} {
pm.cuenf1ansacf1on{}.o11back{}
fhoW neW kunf1meLxcepf1on{ex}
} f1na11y {
pm.c1ose{}
}
}
pub11c vo1d updafeConfacf{Confacf confacf} {
Pes1sfenceManage pm = gefPes1sfenceManageIacfoy{}
.gefPes1sfenceManage{}
5f1ng name = confacf.gefName{}
5f1ng phone = confacf.gefPhone{}
5f1ng ema11 = confacf.gefLma11{}

fy {
pm.cuenf1ansacf1on{}.beg1n{}
// We donf have a efeence fo fhe se1ecfed Poducf.
// 5o We have fo 1ook 1f up f1sf,
confacf = pm.gefObecf8yld{Confacf.c1ass, confacf.gefld{}}
confacf.sefName{name}
confacf.sefPhone{phone}
confacf.sefLma11{ema11}
pm.makePes1sfenf{confacf}
pm.cuenf1ansacf1on{}.comm1f{}
} cafch {Lxcepf1on ex} {
pm.cuenf1ansacf1on{}.o11back{}
fhoW neW kunf1meLxcepf1on{ex}
} f1na11y {
pm.c1ose{}
}
}
package gae.examp1e.confacf.c11enf

1mpof ava.1o.5e1a11zab1e

1mpof avax.do.annofaf1ons.ldGeneafo5fafegy
1mpof avax.do.annofaf1ons.ldenf1fy1ype
1mpof avax.do.annofaf1ons.Pes1sfenceCapab1e
1mpof avax.do.annofaf1ons.Pes1sfenf
1mpof avax.do.annofaf1ons.P1maykey

0Pes1sfenceCapab1e{1denf1fy1ype = ldenf1fy1ype.APPLlCA1lON}
pub11c c1ass Confacf 1mp1emenfs 5e1a11zab1e {

p1vafe sfaf1c f1na1 1ong se1a1ves1onulD = 1L
Page 6 of 9

Nho su ky diu cua lp trnh huong di tuong v cc nguyn l thit k bng giao din, ban c th thay th
ContactDAOMock ban du cua ban bng ContactJdoDAO moi. GWT GUI sau d s lm vic voi JDO m khng cn
thay di.
Cui cng, ci thc s thay di voi su trao di ny l cch m DAO duoc thuyt minh trong dich vu, nhu th hin
trong Lit k 10:

Lit k 10. RemoteServiceServlet

Kt lun
Trong bi vit ba phn ny, ti d gioi thiu su h tro hin tai cua My ung dung cua Google cho Java dnh cho vic
luu giu lu bn, n l mt trong nhung hn d tang cua vic phn phi ung dung c kha nng mo rng. Tng th
nhung diu pht hin duoc l kh tht vong, mc d diu quan trong l cn nho rng dy l mt nn tang dang pht
trin. Cc ung dung duoc vit cho ban pht hnh xem truoc cua My ung dung cho Java duoc buc cht voi co so ha
0P1maykey
0Pes1sfenf{va1ue5fafegy = ldGeneafo5fafegy.lDLN1l1Y}
p1vafe Long 1d
0Pes1sfenf
p1vafe 5f1ng name
0Pes1sfenf
p1vafe 5f1ng ema11
0Pes1sfenf
p1vafe 5f1ng phone

pub11c Confacf{} {

}

pub11c Confacf{5f1ng name, 5f1ng ema11, 5f1ng phone} {
supe{}
fh1s.name = name
fh1s.ema11 = ema11
fh1s.phone = phone
}

pub11c Long gefld{} {
efun 1d
}

pub11c vo1d sefld{Long 1d} {
fh1s.1d = 1d
}

pub11c 5f1ng gefName{} {
efun name
}

pub11c vo1d sefName{5f1ng name} {
fh1s.name = name
}

pub11c 5f1ng gefLma11{} {
efun ema11
}

pub11c vo1d sefLma11{5f1ng ema11} {
fh1s.ema11 = ema11
}

pub11c 5f1ng gefPhone{} {
efun phone
}

pub11c vo1d sefPhone{5f1ng phone} {
fh1s.phone = phone
}

}
pub11c c1ass Confacf5ev1celmp1 exfends kemofe5ev1ce5ev1ef 1mp1emenfs Confacf5ev1ce {
p1vafe sfaf1c f1na1 1ong se1a1ves1onulD = 1L
//p1vafe ConfacfDAO confacfDAO = neW ConfacfDAOMock{}
p1vafe ConfacfDAO confacfDAO = neW ConfacfJdoDAO{}
...
Page 7 of 9
tng luu giu lu bn cua My ung dung, mc d chng c th su dung JDO hay JPA. My ung dung cho Java trong
phin ban xem truoc cua n cung cung cp t ti liu huong dn v khung cng tc luu giu lu bn cua n v cc v du
m My ung dung cho Java gui km lm cho gn nhu khng th trin khai thuc hin duoc cc quan h d l don gian.
Thm ch nu vic hin thuc JDO v JPA hon ton l m hnh gia, th hin nay hu nhu khng c kha nng d ban c
th vit mt ung dung cua My ung dung cho Java v chuyn n mt cch d dng sang thnh mt ung dung doanh
nghip dua trn-DBMS. t nht, ban s phai lm mt s cng vic nng v m ha d thuc hin chuyn di d.
Hy vong cua ti v vic luu giu lu bn l n s hon thin theo thoi gian. Nu ban thuc su cn phai lm vic voi My
ung dung cho Java ngay by gio, c th ban s mun bo qua cc API Java v vit truc tip dn API kho luu tru du liu
muc thp. Lm vic voi nn tang My ung dung cho Java l c th duoc, nhung nu ban quen lm vic voi JPA
v/hoc JDO, th ban s phai tm hiu kh nhiu, ca do su truu tuong ha c l r duoc m ta o du cua bi vit ny
ln do cc tnh nng hoc vn chua lm vic tt hoc hin nay chua c ti liu huong dn tt.


Ti nguyn
Hc tp
"My ung dung cua Google cho Java, Phn 1: R my ln!" (Rick Hightower, developerWorks, 08.2009): Bt
du voi cc trnh cm thm Eclipse cho My ung dung cho Java v tm hiu lm th no d nhanh chng xy
dung cc ung dung don gian c th mo rng.

"My ung dung cua Google cho Java, Phn 2: Xy dung ung dung st thu" (Rick Hightower, developerWorks,
08.2009): Kch thch lng ham mun v nhung g c th v My ung dung, voi bi huong dn ngn v vic xy
dung mt GWT GUI ty chinh cho ung dung quan l lin h. Diu kin cn c truoc d hon thnh cc bi tp
trong huong dn ny.

"Ni dn dm my, Phn 1: Su dung dm my trong cc ung dung" (Mark O'Neill, developerWorks, 04.2009):
Mt tng quan ba phn v cc nn tang din ton dm my tu cc nh cung cp lon: Amazon, Google,
Microsoft v SalesForce.com.

Phin video IO cua Google: Kha canh mm mai hon cua cc luoc d: Max Ross, k su cua Google, giai thch
JDO v JPA tiu chun tuong tc voi kho luu tru du liu cua My ung dung cua Google nhu th no.

Huong dn JDO, du n Apache DB: Tm hiu cch su dung ObjectRelationalBridge v JDO API trong
mt kich ban ung dung don gian.

BigTable l g?: Doc n phm nghin cuu cua Google d tm hiu.

Du n DataNucleus: Mt du n m ngun mo cung cp mt loat cc san phm phn mm xung quanh vic quan
l du liu bng cch su dung ngn ngu lp trnh Java; truoc dy l Cc di tuong luu giu lu bn cua Java (Java
Persistent Objects -JPOX).

Trang chu cua My ung dung cua Google: Tm hiu thm v My ung dung.

Cc ti liu Java cua My ung dung cua Google: Thng tin thm v vic pht trin Java voi My ung dung cho
Java.

N c chay duoc trong My ung dung cho Java khng?: Tm hiu cc Java API tiu chun v cc khung cng
tc no tuong thch voi My ung dung cho Java.

Duyt qua hiu sch cng ngh voi cc sch v chu d k thut ny v cc chu d khc.

Vng cng ngh Java cua developerWorks: Tm hng trm bi vit v moi kha canh v lp trnh Java.


Ly san phm v cng ngh
Page 8 of 9
Java v tt ca cc tn thuong mai dua trn Java l cc tn thuong mai cua Sun Microsystems, Inc o Hoa Ky, cc nuoc
khc, hoc ca hai. Microsoft, Windows, Windows NT v biu tuong Windows l cc tn thuong mai cua Tp don
Microsoft tai Hoa Ky, cc nuoc khc, hoc ca hai. Tn cua cng ty, san phm hay dich vu c th l nhn hiu dng k
hoc nhn hiu dich vu cua nguoi khc.
Cc trnh cm thm cua Google cho Eclipse: Tai v cc trnh cm thm d bt du.

Ti khoan cua My ung dung: Ban s cn mt ti khoan d trin khai ung dung st thu cua ban khi su dung co
so ha tng My ung dung cua Google.


Thao lun
Nhm thao lun cua My ung dung cho Java: Dng k vo nhm ny d dng gp v nhn su gip d v loi
khuyn khi ban tm hiu v My ung dung cho Java.

Dnh tm tr cho cng dng My developerWorks.


i nt v tc gi







Rick Hightower phuc vu voi tu cch l gim dc cng ngh cho Mammatus Inc., mt cng ty do tao chuyn v pht
trin din ton dm my, GWT, Java EE, Spring v Hibernate. ng l dng tc gia cua cun sch ni ting Cc cng
cu Java cho lp trnh cuc bin (Java Tools for Extreme Programming) v tc gia cua n ban du tin cua Struts Live
duoc tai v nhiu nht trn TheServerSide.com trong nhiu nm. ng cung d vit cc bi bo v cc huong dn
cho developerWorks cua IBM v o trong Ban bin tp cua Tap ch nh pht trin Java, cung nhu l mt cng tc vin
thuong xuyn v cc chu d Java v Groovy trn DZone
Page 9 of 9

You might also like