Sie sind auf Seite 1von 713

Head First EJB™

by Kathy Sierra and Bert Bates

Copyright © 2003 O’Reilly Media, Inc. All rights reserved.


Printed in the United States of America.

Published by O’Reilly Media, Inc., 1005 Gravenstein Highway North, Sebastopol, CA 95472.
O’Reilly books may be purchased for educational, business, or sales promotional use. Online editions are
also available for most titles (safari.oreilly.com). For more information, contact our corporate/institutional sales
department: (800) 998-9938 or corporate@oreilly.com.

Editor: Mike Loukides


Cover Designer: Edie Freedman
Interior Decorators: Kathy Sierra and Bert Bates
Anthropomorphizer: Bert Bates
Bean Wrangler: Kathy Sierra
Printing History:
October 2003: First Edition.

The O’Reilly logo is a registered trademark of O’Reilly Media, Inc. Java and all Java-based trademarks and logos
are trademarks or registered trademarks of Sun Microsystems, Inc., in the United States and other countries.
O’Reilly Media, Inc. is independent of Sun Microsystems.
Many of the designations used by manufacturers and sellers to distinguish their products are claimed as
trademarks.
Where those designations appear in this book, and O’Reilly was aware of a trademark claim, the designations
have been printed in caps or initial caps.
While every precaution has been taken in the preparation of this book, the publisher and the authors assume no
responsibility for errors or omissions, or for damages resulting from the use of the information contained herein.
In other words, if you use anything in Head First EJB™ to, say, run a nuclear power plant or air traffic control
system, you’re on your own.
And although some people have been able to pass the exam simply by placing this book under their pillow each
night for three consecutive weeks, we generally don’t recommend it. Most people find it helpful to actually read
the book or at least look at the pictures.

ISBN-10: 0-596-00571-7
ISBN-13: 978-0-596-00571-9
[M] [8/07]
Table of Contents (summary)
Intro xix
1 Welcome to EJB: an introduction 1
2 EJB Architecture: architectural overview 61
3 Exposing Yourself: the client view 111
4 Being a Session Bean: session bean lifecycle 173
5 Entities are Persistent: entity bean intro 259
6 Being an Entity Bean: bean/entity synchronization 295
7 When Beans Relate: entity bean relationships 373
8 Getting the Message: message-driven beans 437
9 The Atomic Age: EJB transactions 469
10 When Beans Go Bad: exceptions in EJB 525
11 Protect Your Secrets: security in EJB 569
12 The Joy of Deployment: a bean’s environment 599
A Appendix A: Final Mock Exam 637

Table of Contents (the real thing)

i Intro
Your brain on EJB. Here you are trying to learn something, while here your brain
is doing you a favor by making sure the learning doesn’t stick. Your brain’s thinking, “Better
leave room for more important things, like which wild animals to avoid and whether naked
snowboarding is a bad idea.” So how do you trick your brain into thinking that your life
depends on knowing EJB?

Who is this book for? xviii


We know what your brain is thinking xix
Metacognition xxi
Bend your brain into submission xxiii
What you need for this book xxiv
Passing the certification exam xxvi
Technical reviewers xxviii
Acknowledgements xxix

ix
1 Welcome to EJB
Enterprise JavaBeans are easy. Well, at least when you compare EJB
to what you’d have to do to write your own scalable, transactional, secure, persistent,
concurrent enterprise component server. In this chapter, we’ll develop, deploy, and run an
EJB application, and then dive into the details. Before we’re done, we’ll look at the use,
benefits, and characteristics of EJB, and we’ll look (briefly) at how EJB containers work.

Exam objectives 2
Server What is EJB all about? 3
No more vendor lock-in! 5
biz interface

services

biz logic How does it all work? 7


EJB t En separate
an

obj e c terp se be
ri from data Behind the scenes... 8
EJB Container DB
Beans come in three flavors 11
The Advice Guy bean 15
Five things you do to build a bean 16
EJB Roles and Responsibilities 26
Tutorial 28
Coffee Cram 59

2 EJB Architecture
EJB is about infrastructure. Your components are the building blocks. With
EJB, you can build big applications. The kind of applications that could run everything
from the Victoria’s Secret back-end to document-handling systems at CERN. But an
architecture with this much flexibility, power, and scalability isn’t simple. It all begins with a
distributed programming model...

Exam objectives 62

<<interface>> <<interface>>
Making a Remote method call 64
(J2SE API) Remote (J2EE API) EnterpriseBean
no methods no methods What about arguments and return values? 67
The client calls business methods through the Remote interface 79
<<interface>> <<interface>>
(J2EE API)
EJBObject
// several methods
(J2EE API) SessionBean EJB uses RMI 81
// several methods

The Remote object is not the bean, it’s the bean’s bodyguard 82
YOU write this
<<interface>>
BookCart YOU write this
BookCartBean Architectural overview: Session beans 98
interface class
addBook() addBook()
(the remote
component
removeBook()
showBooksInCart()
(the bean class)
removeBook()
showBooksInCart()
Architectural overview: Entity beans 99
interface) doCheckout() doCheckout()

// other methods
Architectural overview: Creating a Stateful Session bean 100
Architectural overview: Creating a Stateless Session bean 101
Architectural overview: Message-driven beans 106
Organize your beans 108

x
3 Exposing Yourself
You can’t keep your bean private. Clients need to see what you’ve got.
(Except for message-driven beans, which don’t have a client view). The Advice Bean
exposes the getAdvice() method in its Component interface—the place where you declare
business methods. But that’s not all the client sees. Remember, the Advice interface
extends EJBObject, an interface with methods of its own. Methods the client can see.
Methods the client can call. And it works the same way with the Home interface.

Stateless Exam objectives 112


beans
What the client really wants 113

These beans are What’s JNDI? 116


all identical PortableRemoteObject.narrow() (exotic casting) 121
Writing the Remote home interface for a session bean 125

bean
Thankfully, we’ve got handles (online shopping takes time) 139
bean
Which methods make sense for the local client interfaces? 148
bean
Why so many remove methods? 151
For stateless session beans from
Comparing Remote vs. Local interfaces 154
the same home, isIdentical() always
returns true, even for different beans. Arguments to Remote vs. local methods 163
Coffee Cram 168

4 Being a Session Bean


Session beans are created and removed. If you’re lucky, you’re a
stateless bean. Because the life of a stateful bean is tied to the whims of a heartless
client. Stateful beans are created at the client’s insistence, and live and die only to serve
that one client. But ahhhh, the life of a stateless bean is fabulous! Pools, those little
umbrella drinks, and no boredom since you get to meet so many different clients.

Exam objectives 174


For me? This is
such a special moment!
Container callbacks, for the special moments in a bean’s life 181
Once in a lifetime...
Bean Creation 188
Bean things you can do within business methods 199
Passivation: a stateful bean’s chance at scalability 200
Bean Removal 208
Writing a Session Bean: your job as Bean Provider 230
SessionContext: you need it more than it needs you 240
Coffee Cram 244

xi
5 Entities are Persistent
Entity beans persist. Entity beans exist. Entity beans are. They are object
representations of something in an underlying persistent store. (Think: database,
because most entity beans represent something from a relational database.) If you have

If you’ve got any last a Customer entity bean, then one bean might represent the entity Tyler Durden, ID #343,
words, you better do
it in your ejbRemove()... while another is the entity Donny Darko, ID #42. Three beans, representing three real
entities. An entity bean is simply a realization of something that already exists.

Exam objectives 260


What’s an entity bean? 261
Entity beans from the client’s point of view 265
No, Please, No!
I’ll give you whatever A very simple Customer entity bean 268
you want, just don’t
call remove()! Entity bean Remote component interface 270
Entity bean Remote home interface 273
What does the client really want from an entity bean home? 274
Home business methods to the rescue 278
Session bean create() vs. entity bean create() 281
Session bean remove() vs. entity bean remove() 282
Entity/bean/instance death 285
Coffee Cram 288

6 Being an Entity Bean


Entity beans are actors. As long as they’re alive, they’re either in the pool or
they’re being somebody. Somebody from the underlying persistent store (an entity from
the database). When a bean is playing a part, the bean and the underlying entity have to
If I’m a bean I say
to a method, “Don’t stay in sync. Imagine the horror if the bean is pretending to be, say, Audrey Leone, and
call me, call my bodyguard,
and here’s his contact someone lowers Audrey’s credit limit in the database... but forgets to tell the bean.
information...”
Exam objectives 296
The real power of entity beans is synchronization 298
Instead of:
bean
Container-managed vs. bean-managed persistence 303
doStuff(this); The EntityBean interface adds new container callbacks 310
EJB
object
Writing a CMP entity bean 313
Use:
doStuff(myContext.getEJBObject()); Object identity: the primary key 332
Finder methods 339
Home business methods 345
Coffee Cram 362
xii
7 When Beans Relate
Entity beans need relationships. An Order needs a Customer. A LineItem
needs an Order. An Order needs LineItems. Entity beans can have container-managed
relationships (CMR) and the Container takes care of virtually everything. Make a new
LineItem that’s related to an Order? If you ask the Customer to show you his Orders,
you’ll see the new LineItem. Best of all, you can use EJB-QL to write portable queries.

Exam objectives 374


Relationships 378
Multiplicity: Multiplicity:
many one Multiplicity 380
Movie Director CMP and CMR fields 383
Director getDirector() Collection getMovies()
Cascade delete can propagate 393
0..* 1
EJB-QL for the MovieBean 402

one Director. SELECT and FROM are the mandatory! 409


Each Movie has y Movies.
man
A Director has
The WHERE clause 411
Collections don’t bark()! 414
The BETWEEN, IN, IS EMPTY, and LIKE expression 416
Relationship assignments 421
Coffee cram 425

8
Getting the Message
It’s fun to receive messages. Not as much fun as, say, getting that eBay
package with the genuine Smurf™ lamp, but fun and efficient nonetheless. Imagine if
you sent your order to eBay, and you couldn’t leave your house until the package was
<<interface>>
EJBContext delivered. That’s what it’s like with Session and Entity beans. But with message-driven
beans, the client can send a message and walk away.
getCallerPrincipal()
getEJBHome() Exam objectives 438
isCallerInRole(String s)
getRollbackOnly() Writing a message-driven bean: your job as Bean Provider 447
getEJBLocalHome() My life is sad. I
getUserTransaction() have no home, I have Complete DD for a message-driven bean 449
setRollbackOnly()
no clients... I can use
my context ONLY for Topics and Queues 450
transactions... Oh well,
at least I get a
MessageDrivenContext 455
pool. Message acknowledgement 458
<<interface>>
MessageDrivenContext Coffee Cram 463
// this interface adds no
// new methods

xiii
9 The Atomic Age
Transactions protect you. With transactions, you can try something knowing
that if anything goes wrong along the way, you can just pretend the whole thing didn’t
happen. Everything goes back to the way it was before. Transactions in EJB are a thing
of beauty—you can deploy a bean with customized transaction behavior without touching
the bean’s source code! But you can write transaction code, if you need to.

Exam objectives 470


The ACID test 472
How it works in EJB 474
������������� Transaction propagation 475

CMT beans ru How do I make (or get) a transaction? 476


n
transactions setRollbackOnly() lives in TWO interfaces 487
unknown,
while BMT be
ans BMT can be a really BAD idea. BMT hurts bean reuse 490
use only their
own. Container-managed transactions 491
OK, not our be
st work, we kn
ow. So why How attributes work 492
don’t you tr y
it. Memor y de
help, but they vices can Methods you MUST mark with an attribute (for a CMT bean) 498
work much be
you create th tter when
em yourself.
“Unspecified Transaction Context” 499
DD example for CMT 503
SessionSynchronization “special moments” 512
Coffee cram 516

Oh sh**! A system
10
exception. Nothing I can
When Beans Go Bad
Expect the unexpected. Despite your best efforts, things can go wrong.
Terribly, tragically, wrong. You need to protect yourself. You can’t let your entire program
collapse, just because one bean in the family throws an exception. The application must
do about it. There goes my
stateful bean. I’ll have to
start over... go on. You can’t prevent tragedy, but you can prepare for it. You need to know what is
and is not recoverable, and who is responsible when a problem occurs.

Exam objectives 526


Gotta love application
exceptions... I can
recover from this if I put
In EJB, exceptions come in two flavors 532
in a different value for the
argument to the create() With an Application Exception, the Container will... 533
method...
With a System Exception, the Container will... 534
RemoteException vs. EJBException 539
Bean Provider’s responsibilities 541
The five standard EJB application exceptions 548
Common system exceptions 551
Coffee cram 563
xiv
11 Protect Your Secrets
Keep your secrets. Security is about authentication and authorization. First,
you have to prove your identity, and then we’ll tell you what you’re allowed to do. Security
is easy in EJB, because you’re only dealing with authorization. You decide who gets to
call which methods on your beans. Except one problem... if you’re a Bean Provider or App
Assembler, you probably don’t know who the users are going to be!

Exam objectives 570


In the EJB In a vendor- In a company-
Deployment specific way specific way How to do security in EJB 573
Descriptor
The Application Assembler’s job: access control 574

real people
Defining the method permissions 578
<security-role-ref> <security-role> users and groups
The Deployer’s job: mapping actual humans to abstract roles 583
Class-level vs. instance-level security 586
Using programmatic security to custom-tailor a method 587
Use <run-as> security identity to pretend someone else is calling... 591
Security context propagation with <run-as> 592
Coffee cram 593

12 The Joy of Deployment


You worked hard on that bean. You coded, you compiled, you tested. About
a hundred zillion times. The last thing you want to touch is already-tested source code,
just because something simple changed in the deployment configuration. And what if you
don’t even have the source code? EJB supports bean reuse through the customizable

JAR
Deployment Descriptor and a bean’s special environment.
1
Exam objectives 600
ejb-jar A bean’s special place- java:comp/env 602
Creating and using a subcontext 609
com META-INF
Bean Provider and Application Assembler responsibility 617
<?xml ver-
sion=”1.0”
encoding
Deployer responsibility 618
=”UTF-8”?>

Remembering who does what 619


<!DOCTYPE

headfirst
ejb-jar
PUBInc./

ejb-jar.xml
Which APIs does EJB 2.0 guarantee? 621
011 0 1
011 0 1
What MUST be in an ejb-jar? 624
1100 1
1100 1 0 100 0
0 100 0 0 1 1 1
011 0 1
0 1 1 1 0111 0 11
1100 1
0111 0 11
00011 01
0 100 0
0 1 1 1
00011 01
Programming restrictions 625
Advice.class
0111 0 11
00011 01 AdviceBean.class
Coffee cram 627
AdviceHome.class

xv
A
Appendix A

The final Coffee Cram Mock Exam. This is it. 70 questions. The tone, topics,
and difficulty level are virtually identical to the real exam. We know.

Final Mock Exam 637

i Index 685

xvi
Intro to EJB
5
4
4 :HOFRPHWR(-%
<RX·UHJRQQDORYH
(-%$QGER\ZRQ·W-LPDQG
%HWW\EHHQYLRXVZKHQ\RXU
HQWHUSULVHEDFNHQGLVELJJHU
WKDQWKHLUV\RXPLJKWHYHQ
JHWWKDWSURPRWLRQ

(QWHUSULVH-DYD%HDQVDUHHDV\:HOODWOHDVWZKHQ\RXFRPSDUH(-%WRZKDW
\RX¶GKDYHWRGRWRZULWH\RXURZQVFDODEOHWUDQVDFWLRQDOVHFXUHFRQFXUUHQWHQWHUSULVH
VHUYHU,QWKLVFKDSWHUZH¶OOGHYHORSGHSOR\DQGUXQDQ(-%DSSOLFDWLRQEHIRUHGLYLQJ
LQWRWKHGHWDLOV%HIRUHZH¶UHGRQHZH¶OOORRNDWWKHXVHEHQH¿WVDQGFKDUDFWHULVWLFVRI
(-%DQGZH¶OOORRN EULHÀ\ DWKRZ(-%FRQWDLQHUVZRUN:H¶OOWDNHDKLJKOHYHOORRNDWWKH
DUFKLWHFWXUHRI(-%DQGOHDUQDERXWWKHWKUHHEHDQW\SHV7KHPRUH\RXXQGHUVWDQGIURP
WKLVFKDSWHUWKHOHVV\RX¶OOKDYHWRPHPRUL]HODWHUVRGRQ¶WVNLSLW ,I\RX¶UHDQ(-%H[SHUW
\RXFDQSUREDEO\JHWDZD\ZLWKMXVWDTXLFNVNLP

WKLVLVDQHZFKDSWHU 
H[DPREMHFWLYHV

(QWHUSULVH-DYDEHDQV2YHUYLHZ

2IILFLDO :KDWLWUHDOO\PHDQV
,GHQWLI\WKHXVHEHQH¿WVDQG <RXQHHGWRNQRZKRZ(-%ZRUNVRYHUDOO
FKDUDFWHULVWLFVRI(QWHUSULVH ZKDWLW¶VJRRGIRUZKDWLWSURYLGHVDQG
-DYDEHDQVWHFKQRORJ\IRUYHUVLRQ ZKDWLWGRHVQ¶WSURYLGH
RIWKH(-%VSHFL¿FDWLRQ
<RXQHHGWRXQGHUVWDQGWKHRYHUDOO
DUFKLWHFWXUHRI(-%DQGKRZWKDW
DUFKLWHFWXUHVXSSRUWVWKHIHDWXUHVRI(-%
)RUH[DPSOH\RXQHHGWRNQRZWKDW
(-%VXSSRUWVWUDQVDFWLRQVVHFXULW\DQG
FRQFXUUHQF\EXWLWGRHVQRWJXDUDQWHH
ORDGEDODQFLQJIDLORYHURUFOXVWHULQJ<RX
QHHGWRNQRZWKDW(-%VXSSRUWVWKUHH
EHDQW\SHVVHVVLRQHQWLW\DQGPHVVDJH
GULYHQDQGWKDWVHVVLRQEHDQVFDQEH
VWDWHOHVVRUVWDWHIXO

 &KDSWHU
LQWURWR(-%

?PI\Q[-2*ITTIJW]\' ts built
componens-R-Us
by Bean
&RPSRQHQWEDVHGGHYHORSPHQW &XVWRPHU
7ITHENTERPRISEJAVABEANS YOUCANDEVELOPBUILDING FRPSRQHQW
BLOCKSˆ%*"COMPONENTSˆTHATYOUORSOMEONEELSECAN
ASSEMBLEANDREASSEMBLEINTODIFFERENTAPPLICATIONS
Fred w
&OREXAMPLE YOUMIGHTCREATEA#USTOMERBEANBEANIS this onerote 2UGHU
ANOTHERWORDFORCOMPONENT THATREPRESENTSACUSTOMER
INADATABASE9OUCANUSETHAT#USTOMERBEANINAN FRPSRQHQW
ACCOUNTINGPROGRAM ANE COMMERCESHOPPINGCART
SYSTEM ATECHSUPPORTAPPLICATION ORVIRTUALLYANYOTHER &DUW
APPLICATIONTHATMIGHTNEEDTOREPRESENTACUSTOMER FRPSRQHQW
)NFACT WITHSOMEBEANS THEBEANDEVELOPERANDTHE
APPLICATIONASSEMBLERMIGHTNOTWORKFORTHESAME
COMPANYORHAVEANYKNOWLEDGEOFONEANOTHER $SSOLFDWLRQ$RQOLQHVKRSSLQJ
)FYOUREABEANDEVELOPER YOUMIGHTBUILDAN/RDER )UHGDVVHPEOHVDQRQOLQHVKRSSLQJ
BEAN ORA0AYROLLBEAN ORA3HOPPING#ARTBEANTHAT DSSOLFDWLRQXVLQJWZRFRPSRQHQWVKH
ERXJKWIURP%HDQV58VSOXVDWKLUG
DEVELOPERSINSOMEUNRELATEDCOMPANYCANBUYANDUSE
FRPSRQHQW)UHGGHYHORSHGDWKLV
TOCONSTRUCTTHEIROWNCUSTOMAPPLICATIONS FRPSDQ\
/NEBEAUTYOFCOMPONENT BASEDDEVELOPMENTISTHAT
YOUTAKECODEREUSETOAWHOLENEWLEVEL)NSTEADOF
uilt
components b-Us
REUSING*AVACLASSES YOUGETTOREUSEABIGGERCHUNKOF
FUNCTIONALITY/FTEN YOUCANMODIFYTHEWAYABEAN
WORKSWITHOUTEVERTOUCHINGITS*AVACODE9OULLLEARNIN by Beans-R 6XSSRUW
FRPSRQHQW
THISCHAPTERTHATWHENYOUDEPLOYABEANINTOASERVER
YOUCANCONlGUREANDCUSTOMIZETHEBEANDECLARATIVELYˆ
&XVWRPHU
THROUGHAN8-, BASEDDEPLOYMENTDESCRIPTORˆTOCHANGE FRPSRQHQW
THEWAYTHEBEANBEHAVESATRUNTIME Bill made
these two
With component-based development,
2UGHU
you take code reuse to a whole new ,QYHQWRU\ FRPSRQHQW
FRPSRQHQW
level. With OO development, you reuse
classes, but with components, you
$SSOLFDWLRQ%WHFKQLFDOVXSSRUW
reuse a bigger chunk of functionality, %LOODVVHPEOHVDWHFKQLFDOVXSSRUWDSS
XVLQJWZRFRPSRQHQWVKHERXJKWIURP
and you can customize them without %HDQV58VSOXVWZRFRPSRQHQWVKH
GHYHORSHGKLPVHOI
touching code!
\RXDUHKHUH 
EHQH¿WVRI(-%

?PI\LWM[-2*ZMITTaOQ^MUM'
(-%OHWV\RXIRFXVRQWKHEXVLQHVVORJLF
IRU\RXUEXVLQHVVDQGOHDYHWKHXQGHUO\LQJ
(-%VHUYHUVJLYH\RXDEXQFK
VHUYLFHV WUDQVDFWLRQVQHWZRUNLQJ
RIVHUYLFHVVRWKDW\RXGRQ·W
VHFXULW\HWF WRWKH(-%VHUYHUYHQGRU KDYHWRZULWHWKHP\RXUVHOI

)MAGINEYOUWORKFOR'UITAR,AND ACOMPANYTHATSELLS
57UDQVDFWLRQPDQDJHPHQW
MUSICIANSGEARONLINE9OUHAVEBETTERTHINGSTODOTHAN
WORKHOURSAWEEK SOWHEREWOULDYOUWANTTOSPENDYOUR
TIME7OULDNTYOURATHERCONCENTRATEONHOW'UITAR,AND
56HFXULW\
DOESBUSINESSONLINE ASOPPOSEDTOWRITINGYOUROWNSECURE
NETWORKED TRANSACTIONMANAGEMENTSERVER7HYNOTWORK
ONWHATYOUKNOWBESTBUSINESSLOGICFORYOURPARTICULAR
5&RQFXUUHQF\
BUSINESS ANDLEAVETHEHEAVYLIFTINGIE
THEBIGINFRASTRUCTURESERVICESYOUGET
FROMTHESERVER TOSOMEONEELSE
51HWZRUNLQJ
4HE%*"MODELISTOLETEVERYONEDO
WHATTHEYDOBESTˆTHESERVERVENDORS
CONCENTRATEONTHEINFRASTRUCTURETHATMOST 55HVRXUFHPDQDJHPHQW
ENTERPRISEAPPLICATIONSNEED WHILETHE
BUSINESSDEVELOPERSCONCENTRATEONTHEIROWN
BUSINESSLOGIC 53HUVLVWHQFH

(-%OHW·V\RXFXVWRPL]HDQG
FRQÀJXUHUHXVDEOHFRPSRQHQWVDW 50HVVDJLQJ
GHSOR\WLPHZLWKRXWWRXFKLQJWKH
VRXUFHFRGH
5'HSOR\WLPHFXVWRPL]DWLRQ
9OUCANCHANGETHEWAYABEANUSESTHE
UNDERLYINGSERVICESSIMPLYBYTWEAKINGAN8-LDOCUMENT
ATDEPLOY TIME&OREXAMPLE YOUCANCOMPLETELYDElNETHE
SECURITYACCESSCONTROLFORABEANSMETHODSWITHIN8-,
y alre a d y wrotef,
DECLARATIVELY RATHERTHANWITHINTHEBEANSSOURCECODE
Somebodsted all this stuf
PROGRAMMATICALLY !NDYOUCANCUSTOMIZETHEWAYABEANS
and te donÕt have to.
METHODSRUNINTRANSACTIONS ALLWITHINTHEDEPLOYMENT so you
DESCRIPTOR WITHOUTHAVINGTOHARD CODEINTRANSACTION
BOUNDARIESANDBEHAVIORS4HATJUSTROCKS

 &KDSWHU
LQWURWR(-%

you

vendor

6WUWZM^MVLWZTWKSQV
(QWHUSULVHEHDQVDUHSRUWDEOH³
QRWMXVWWRGLIIHUHQW-90·VEXW ,QVWHDGRIOHDUQLQJ
WRGLIIHUHQW(-%VHUYHUV DQHZ$3,IRUHDFKDSSVHUYHU
ZLWK(-%,RQO\OHDUQ21(DQGP\
FRPSRQHQWVZLOOZRUNRQDQ\(-%VHUYHU
/NEOFTHEREASONSWEALLLOVE*AVAISITS 7KRVHYHQGRUVDUHJRQQDKDYHWRVXFNXS
PORTABILITYACROSSMULTIPLEPLATFORMS4HEWHOLE WR0(IRUDFKDQJH
WRITE ONCE RUN ANYWHERE7/2! THING
%*"TAKESPORTABILITYTOANEWLEVEL INSTEADOF
WRITE ONCE RUN ANYWHERE ITSWRITE ONCE DEPLOY
ANYWHERE7/$! *USTAS7/2!FREESYOU
FROMBEINGFORCEDTOWORKONASINGLE/3
7/$!FREESYOUFROMBEINGATTHEMERCYOF
YOURAPPLICATIONSERVERVENDOR!NDTHENOF
COURSETHERES9/$! BUTWEDIGRESS
)NTHEOLDDAYS EACHAPPLICATIONSERVERVENDOR
HADITSOWNPROPRIETARY!0)9OULEARNIT WORK
WITHIT ANDlNALLYGETYOURENTERPRISEAPPSUP
ANDRUNNING!NDTHENGUESSWHAT9OUNEEDA
NEWFEATURE!NDTHENGUESSWHAT9OURVENDOR
SAYS h7ERECONSIDERINGTHATFOR1OFNEXT
YEARv.OWWHAT,IKEADRUGDEALER THEYVE
HOOKEDYOU ANDNOWITSJUSTTOOPAINFULTO
CONSIDERGIVINGTHEMUP'IVETHEMUPFOR
WHAT!NOTHERVENDORANDANOTHERPROPRIETARY
!0)ANDMORELOCK IN
/NEOFTHECRUCIALBENElTSOF%*"IS7/$!
!NDNOWTHEVENDORSHAVETOCOMPETENOTJUST
TOSELLYOUINTHElRSTPLACE BUTTOKEEPYOU
"ECAUSEASEVERYBODYKNOWS YOUCANJUSTPACK
UPYOURBEANSANDGOELSEWHERE

\RXDUHKHUH 
(-%TXHVWLRQV

WKHUH DUH QR
'XPE 4XHVWLRQV
Q: 7HATSTHEDIFFERENCE Q: #AN)USE%*"COMPONENTS Q: 7HATSTHEDIFFERENCE
BETWEEN%*"AND*%% WITHOUTAN%*" COMPLIANTAPP BETWEENREGULARJAVABEANSAND
SERVER ENTERPRISEJAVABEANS

A: "OTH*%%AND%*"ARE
A: A:
SPECIFICATIONSFORASERVER"UT%*" .OPE%*"COMPONENTSCANT #ONGRATULATIONS9OURETHE
ISACTUALLYASUBSETOF*%%)NOTHER LIVEOUTSIDEOFAN%*"CONTAINER4HEY MILLIONTHPERSONTOHAVEASKEDTHAT
WORDS A*%%SERVERMUSTINCLUDE DONTHAVEAMAINMETHOD ANDEVEN QUESTION
AN%*"CONTAINER7EVEUSEDTHE IFYOUADDONETOYOURBEANCLASS 4HETERMhJAVABEANvMEANSA
WORDSERVERONTHESEFIRSTPAGES BUT THEBEANWOULDNTBEVERYUSEFUL REUSABLECOMPONENT2EGULAROLD
TECHNICALLY THETHINGTHATENTERPRISE ONITSOWN-OSTOFTHEMETHODSIN NON ENTERPRISEBEANSANDBEANSIS
JAVABEANSRUNINISCALLEDAN%*" ANENTERPRISEBEANARECALLEDBYTHE JUSTASHORTERFORMOFJAVABEANS ARE
CONTAINER3O EVERY*%%SERVERMUST CONTAINERITSELFANDHAVENOMEANING
REUSABLECOMPONENTSTHATFOLLOWA
INCLUDEAN%*"CONTAINERALONG OUTSIDETHESERVER2EMEMBER THE NAMINGCONVENTIONTHATCANBEUSED
WITHA7EBCONTAINERTHATCANRUN WHOLEPOINTOFAN%*"SERVERISTO BYDEVELOPMENTTOOLS
SERVLETSAND*30S  GIVEYOUALLTHEBIGSERVICESSECURITY
TRANSACTIONS ETC ANDWITHOUTTHE "YFAR THEMOSTCOMMONTYPEOF
4HISEXAMISABOUTTHE%*"PORTION
SERVER YOUDLOSEEVERYTHINGBUT JAVABEANISANY'5)COMPONENTLIKE
OF*%% WHEREASTHE3#7#$EXAM
YOURBASICBUSINESSLOGIC!NDIFTHAT A3WINGBUTTONORTEXTFIELD .EARLY
3UN#ERTIFIED7EB#OMPONENT
BUSINESSLOGICRELIESONTHECONTAINER ALL*AVA)$%SAREJAVABEAN COMPLIANT
$EVELOPER ISABOUTTHE7EBPORTION
FOREXAMPLE CALLINGMETHODS SOTHATIFYOUREWORKINGINAVISUAL
OF*%%
ONINTERFACESPROVIDEDBYTHE LAYOUTTOOLYOUCANCLICKONABUTTON
,ATERINTHISCHAPTER WELLGETMORE CONTAINER THENEVENTHEBUSINESS ANDUPPOPSAPROPERTYSHEETWHERE
INTOTHEDETAILSOFHOW*%%AND%*" LOGICWOULDFAIL YOUCANSETTHECOLOR SIZE FONT ETC
FITTOGETHER 4HETOOLKNOWSWHICHPROPERTIESTHE
&ORTHERESTOFTHISBOOK WEUSE
THETERMS%*"SERVER CONTAINER
Q: #AN)DESIGNANDWRITEMY
BEANHASBECAUSETHEBEANFOLLOWS
CONVENTIONSFORGETTERSANDSETTERS
ANDSERVERINTERCHANGEABLY)FTHE CODEINSUCHAWAYTHATMOSTOF "UTREGULARJAVABEANSARENTJUST
DIFFERENCEBETWEENTHETERMS THEBUSINESSLOGICISINAPLAINOLD FOR'5)COMPONENTSˆOTHER*AVA
MATTERS WELLMAKEITCLEAR *AVACLASS ANDJUSTHAVETHEBEAN TECHNOLOGIES INCLUDING*INIAND
CALLMETHODSONTHATCLASS4HAT 3ERVLETS CANUSEJAVABEANFEATURES
WAY)COULDSTILLREUSETHEBUSINESS
LOGIC %NTERPRISEJAVABEANSAREALSO
REUSABLECOMPONENTS BUTTHATS
WHERETHESIMILARITYENDS4HE@BEAN
A: 9ES YOUCANDOTHAT ANDIN PARTOFAREGULARJAVABEANISUSED
MOSTLYATDEVELOPMENT TIME ASA
FACTALOTOFDESIGNERSWRITESEPARATE
NON BEAN REUSABLECLASSESANDTHEN WAYTOEASEORSPEEDUPHOOKING
HAVETHEBEANSINVOKEMETHODS ONEBEANSEVENTSTOANOTHERBEANS
ONTHOSECLASSES)FYOURBEANCALLS METHODS ORSETTINGPROPERTYVALUES
AMETHODONANON BEAN*AVA WHICHOFTENMEANTHESAMETHING
CLASS THATMETHODISSTILLUNDERTHE ASINSTANCEVARIABLEVALUES !REGULAR
CONTROLOFTHECONTAINER SOASFAR BEANRUNSINA*6- JUSTLIKEANY
ASTHECONTAINERISCONCERNED THAT OTHERNORMAL*AVACLASS"UTTHE
NON BEANMETHODISJUSTPARTOFTHE hBEANvPARTOFANENTERPRISEBEAN
BEANSFUNCTIONALITY KICKSINATRUNTIME ANDANENTERPRISE
BEANMUSTBERUNUNDERTHECONTROL
OFAN%*"CONTAINER
&ORTHERESTOFTHEBOOK WHENWE
SAYBEAN WEMEANENTERPRISEBEAN
 &KDSWHU
LQWURWR(-%

0W_LWM[Q\ITT_WZS'
<RXUEHDQVUXQXQGHUWKHFRQWURO DQGSURWHFWLRQ 
RIWKH(-%VHUYHU

7KHVHUYHUVWHSVLQWRWKHPLGGOHRIHYHU\
PHWKRGFDOOIURPDFOLHQWWRDEHDQDQGLQVHUWV
WKH´VHUYLFHVµOLNHVHFXULW\WUDQVDFWLRQVDQG
SHUVLVWHQFH
9OURBEANSLIVEANDRUNINTHESERVER ANDTHESERVERDOESVIRTUALLY
EVERYTHINGTOMANAGETRANSACTIONS SECURITY PERSISTENCE ANDEVENTHELIFE
ANDDEATHOFYOUROBJECTS!NDITDOESALLTHISBYSTEPPINGINEACHTIME
ACLIENTMAKESAREQUESTIECALLSABUSINESSMETHODONTHEBEAN 4HE
SERVERJUMPSINANDSTARTSASKINGQUESTIONSLIKE
h$OESTHISCLIENTHAVESECURITYCLEARANCETOCALLTHISMETHODvOR
h$OESTHISBEANNEEDTORUNASPARTOFALARGERTRANSACTIONvOR
h$OESTHISBEANNEEDTOREFRESHITSELFWITHDATAFROMTHEDATABASE BEFORERUNNING
THATMETHODFORTHECLIENTv

s...
The EJB object HereÕs where it all happd en
the serve r st ep s in an
intercepts the calls to
This client could be let, a the bean. A client can layers in the services. y for
ANYTHINGÑa servapp, NEVER talk directly Most of what you pa
stand-alone Java bean, a to the bean. happens here. Business logic
another enterprise lives here!
mobile device... 6HUYHU
&OLHQW
EL]LQWHUIDFH

VHUYLFHV

biz logic
separate


W
DQ

(Q
& OL
HQWREMHFW
 (-%
REMHF WHUS VHEH
UL
from data

(-%&RQWDLQHU '%

$ULGLFXORXVO\KLJKOHYHOYLHZRI(-%DUFKLWHFWXUH

\RXDUHKHUH 
ZKDWUHDOO\KDSSHQV

*MPQVL\PM[KMVM[
1RWVRIDVWEXGG\
1RERG\EXW12%2'<WDONVWR
WKHEHDQH[FHSWWKHFRQWDLQHU,I\RX
ZDQWWKHEHDQ\RXJRWWDJRWKURXJKPH
6KRZPHVRPH,'DQG,·OOFKHFNZLWK
WKHFRQWDLQHUDQGLILW·V2.,·OO
SDVVRQ\RXUUHTXHVW
8K\HDKSXW
WKH%URNHUEHDQRQ
WKHSKRQH³,QHHGWR
PDNHDWUDGH12: +PPPPOHW·V
VHHKHGRHVVHHP
WREHRQWKHDSSURYHGOLVW
IRUFDOOLQJPDNH7UDGH RQD
%URNHUEHDQ


(-%2EMHFW

&OLHQW

&RQWDLQHU

 &KDSWHU
LQWURWR(-%

:KDWGR\RXPHDQ
WKHUH·VQREHDQ"-XVW
JHWRQHIURPWKHIUHDNLQ·SRRO1R
,QHHGD%URNHUEHDQ
LWGRHVQ·WPDWWHUZKLFKRQH<HV,
GRZQKHUHQRZ6OLP6OHD]\
.12:WKHEHDQVDUHVSRLOHGOLWWOH
QHHGVWRPDNHDWUDGH2KDQG
SULPDGRQQDVEXWWKH\$5(WKHVWDUV
PDNHVXUHWKHEHDQJHWVKLVRZQ
RIWKHVKRZULJKWQRZ
QHZWUDQVDFWLRQ

&RQWDLQHU &RQWDLQHU
 
2.WKHEHDQLVUHDG\
VRJRDKHDGDQGSDVV
WKHFOLHQW·VPHWKRGUHTXHVWWR
:K\DUHZHXVLQJWKH5,"
WKHEHDQ$QGE\WKHZD\\RXFDQ
$UHQ·W\RXMXVWPDNLQJPHOHDUQ
WHOOOLWWOHPLVV´EHDQTXHHQµVKH
VRPHWKLQJWKDW,FDQQHYHUXVH
EHWWHUVKDSHXS,LQVWDQWLDWHG
LQWKHUHDOZRUOG":K\FDQ·WZH
KHUDQG,FDQVHQGKHUWRWKH
+H\ , ZHQWODVW 7KH\62GRQ·WSD\ XVHD5($/DSSVHUYHU"
JDUEDJHFROOHFWRU
WLPHVRRQHRI\RXFDQ XVHQRXJKIRUWKLV
JRQRZ%HVLGHV,·PVWLOO :H·UHWKHRQHVZKRGRWKH5($/
UHFRYHULQJIURPWKDWELJ EXVLQHVVORJLF%XWDWOHDVWZH
WUDQVDFWLRQUROOEDFN QHYHUKDYHWRWDONWRWKHFOLHQWV
<HDKKDYLQ·DQ(-%2EMHFW
ERG\JXDUGLVSUHWW\
FRRO


 &RQWDLQHU
WKH%HDQ3RRO

\RXDUHKHUH 
(-%DUFKLWHFWXUH

6KDUSHQ \RXU SHQFLO

 /DEHOWKHWKUHHSDUWVLQWKHGLDJUDP

VHUYHU
&OLHQW %

EL]LQWHUIDFH

& OL 
HQWREMHFW $ &
'%

 'HVFULEH EULHÀ\ ZKDWHDFKRIWKHWKUHHWKLQJVDUH


UHVSRQVLEOHIRURUKRZWKH\EHKDYH

&

 &KDSWHU
LQWURWR(-%
EHDQV

*MIV[KWUMQV\PZMMNTI^WZ[
(QWLW\
5SEANENTITYBEANTOREPRESENTATHINGINA 7UL[LD/LQ 3DUW
PERSISTENTSTORE4HATALMOSTALWAYSMEANS ,' /DYD/DPS
SOMETHINGINADATABASE WHEREANINSTANCE
'% OFANENTITYBEANREPRESENTSAROWINATABLE %R2OHDQ
ALTHOUGHIFTHEDATABASEISNORMALIZED THE ,'
BEANMIGHTBEDRAWINGFROMROWSINMULTIPLE
&XVWRPHU ,QYHQWRU\
TABLES !TYPICALENTITYEXAMPLEIS#USTOMER %HDQ %HDQ
WHEREONEENTITYMIGHTREPRESENT"O/LEAN
)$ ANDANOTHERENTITYMIGHTREPRESENT &XVWRPHU
4RIXIA,IN)$  %HDQ

0HVVDJHGULYHQ
5SEAMESSAGE DRIVENBEANONLYWHENYOU
NEEDA*-3CONSUMER)NOTHERWORDS ABEAN ,·PZDLWLQJIRU
THATCANLISTENFORMESSAGESFROMA*-3MESSAGING DQQRXQFHPHQWVDERXW ,·PZDLWLQJIRUD
SERVICE#LIENTSNEVERCALLMESSAGE DRIVEN QHZFXVWRPHUV ELJFDOFXODWLRQMRE
BEANSDIRECTLYINORDERTOGETAMESSAGE WREHSRVWHG
DRIVENBEANTODOSOMETHING ACLIENTMUST
SENDAMESSAGETOAMESSAGINGSERVICE
4HATMEANSAMESSAGE DRIVENBEANHASNO
%*"/BJECTBECAUSETHESERVERGETSTHECLIENT 1HZ&XVWRPHU/LVWHQHU
REQUESTSDIRECTLYFROMAMESSAGINGSERVICE %HDQ %LJ&DOF-RE/LVWHQHU
RATHERTHANASACALLFROMTHECLIENTTOTHE %HDQ
BEAN!TYPICALMESSAGE DRIVENBEANMIGHT
BEA.EW#USTOMER.OTIlCATIONSUBSCRIBER

6HVVLRQ
5SEASESSIONBEANFOREVERYTHINGELSE ,YHULI\
!LMOSTANYKINDOFBACK ENDSERVICECAN FUHGLWFDUGV ,GRJHQHWLF
ANDOFTENSHOULD BEGINWITHASESSIONBEAN PDWFKLQJ
7HEREANENTITYBEANREPRESENTSATHING A
SESSIONBEANTYPICALLYREPRESENTSAPROCESS4O
,·PDQRQOLQH
PUTITANOTHERWAY WHENYOUTHINKOFENTITY VKRSSLQJVHVVLRQ
BEANS THINKNOUN ANDWHENYOUTHINKOF &DUG9HUL¿HU
%HDQ *HQH%HDQ
SESSIONBEANS THINKVERB!SHOPPINGSESSION
ISATYPICALEXAMPLEOFASESSIONBEAN WHILE
ACREDITCARDPROCESSINGSYSTEMMIGHTBE
ANOTHERSESSIONBEAN &DUW%HDQ

\RXDUHKHUH 
VWDWHIXODQGVWDWHOHVVVHVVLRQEHDQV

;M[[QWVJMIV[KIVJM[\I\MTM[[
WZ[\I\MN]T
7ELLGOOVERALLTHISINDETAILINTHE3ESSION"EAN
CHAPTER&ORNOW YOUNEEDTOKNOWTHATSESSION
WKHUH DUH QR
BEANSCANBEMARKEDATDEPLOYMENTTIME AS
EITHERSTATELESSORSTATEFUL
'XPE 4XHVWLRQV
!STATEFULBEANCANREMEMBERCONVERSATIONALSTATE Q: )VEHEARDTHATONLY
BETWEENMETHODCALLS WHILEASTATELESSBEANWONT STATELESSSESSIONBEANSARE
REMEMBERANYTHINGABOUTTHECLIENTBETWEEN SCALABLE ANDTHATNOBODYSHOULD
METHODINVOCATIONS EVERUSESTATEFULSESSIONBEANS
)STHATTRUE
4HEPHRASEhCONVERSATIONALSTATEvREALLYMEANS
hCLIENT SPECIlCSTATEv ANDATYPICALEXAMPLEIS
ASHOPPINGCART)TWOULDNTBEFUNIFYOUTHE A: .O NOTCOMPLETELY)TIS
SHOPPER GOTACART PUTSOMETHINGIN BUTTHEN TRUETHATSTATELESSSESSIONBEANS
WHENYOUGOTOPUTTHESECONDTHINGIN THE AREGENERALLYMORESCALABLETHAN
lRSTTHINGVANISHESFROMTHECART.OTTOOUSER STATEFULSESSIONBEANSBECAUSE
FRIENDLY3O AGOODSHOPPINGCARTWILLKEEPTHE OFTHEWAYSTATELESSBEANSARE
MANAGEDBYTHECONTAINER9OULL
CLIENTSHOPPERSTATEIETHEITEMSINTHECART
SEETHEREASONSFORTHISINTHE
FORASLONGASTHESHOPPINGSESSIONISALIVE7ELL 3ESSION"EANCHAPTER
EXPLAINWHATWEMEANBYALIVEINTHE3ESSION"EAN
"UTTHATDOESNTMEANYOU
CHAPTER
SHOULDNEVERUSESTATEFULBEANS
3TATELESSBEANSSIMPLYFORGETABOUTTHECLIENT 9OUSHOULDCONSIDERSTATEFULBEANS
ONCETHEMETHODCALLCOMPLETES3O STATELESS WHENYOUNEEDCONVERSATIONAL
BEANSAREFORSERVICESTHATDONTREQUIREA STATE ANDWHENTHEALTERNATIVES
CONTINUEDCONVERSATIONBETWEENTHECLIENTAND FORSAVINGTHATSTATELIKEUSING
THECLIENTTOSTORESTATE ORUSING
THESERVICE4HATDOESNTMEANTHECLIENTWONT
ASERVLETTOSTORESTATE ORUSINGA
KEEPCALLINGMETHODSONTHESTATELESSBEAN BUT DATABASETOSTORESTATEBETWEEN
ITDOESMEANTHATTHECLIENTCANTDEPENDONTHE EACHMETHODCALLFROMTHECLIENT
BEANREMEMBERINGANYTHINGABOUTTHEPREVIOUS AREMOREOFAPERFORMANCEHIT
METHODCALLS THANTHELESS SCALABLENATUREOF
STATEFULSESSIONBEANS

6WDWHOHVVEHDQV&$1
KDYHVWDWH -XVWQRW

:DWFKLW FOLHQWVSHFLÀFVWDWH
OHVV´PHDQV
6RPHSHRSOHWKLQN³VWDWH
WDWH OHVVE HDQ FDQKDYH
³QRVWDWH´$V
\R WKHUREMHFW
LQVWDQFHYDULDEOHVOLNHDQ
HP WRPD LQWD LQYDOXHV
LWMXVWFDQ¶WXVHWK
SD UWLFXOD UFOLHQ W
VSHFL¿FWRD

 &KDSWHU
LQWURWR(-%

 
Q  , 6  V R P H WKLQJ
HD
$QHQWLW\E V R P HWKLQJ
HDQ ' 2 ( 6 
$VHVVLRQE
6KDUSHQ \RXU SHQFLO

.QRZ\RXUEHDQW\SHV

/RRNDWWKHSUREOHPGHVFULSWLRQRQWKHOHIWDQGSXW
DFKHFNPDUNIRUWKHEHDQW\SHWKDWZRXOGEHVW¿W
WKHSUREOHP7KHUHLVQ¶WRQHSHUIHFWULJKWDQVZHU
IRUWKHVH\RXPLJKWGHFLGHWKDWRQHEHDQW\SHZLOO
ZRUNLI\RXDSSURDFKLWRQHZD\EXWDQRWKHUEHDQ
ZLOOZRUNLI\RXVROYHWKHSUREOHPLQDGLIIHUHQWZD\

(QWLW\ 0HVVDJHGULYHQ 6HVVLRQEHDQ


FLUFOHVWDWHOHVVVWDWHIXORUERWK

%RRNLQJDWLFNHWIRUDURFNFRQFHUW VWDWHIXOVWDWHOHVV

$EDQNDFFRXQW VWDWHIXOVWDWHOHVV

6HDUFKLQJDSURGXFWGDWDEDVH VWDWHIXOVWDWHOHVV

'DWLQJVHUYLFHPDWFKXSV VWDWHIXOVWDWHOHVV

5HFHLYLQJVXEPLWWHGH[SHQVHUHSRUWVDQG VWDWHIXOVWDWHOHVV
VHQGLQJWKHPRXWIRUDSSURYDO

2QOLQHH[SHUWGLDJQRVLV²\RXGHVFULEHD VWDWHIXOVWDWHOHVV
V\PSWRPDQGWKHV\VWHPKHOSV\RXGHWHU
PLQHWKHFDXVH
7KHERRNVLQDOLEUDU\ VWDWHIXOVWDWHOHVV

\RXDUHKHUH 
7LNLEHDQ/RXQJH
RYHUYLHZ
EHDQEXOOHWSRLQWV

VHVVLRQEHDQDQGEDUWHQGHU

:MDD=LHGAFLK
ƒ (-%LVDFRPSRQHQWEDVHG
GHYHORSPHQWPRGHO
ƒ &RPSRQHQWVDUHUHXVDEOHFKXQNV
RIIXQFWLRQDOLW\\RXFDQPRGLI\IRU
6HVVLRQEHDQ,·PVRWLUHGRIGRLQJDOOWKHZRUNDQGJHWWLQJQRQH GLIIHUHQWDSSOLFDWLRQVZLWKRXWWRXFKLQJ
RIWKHJORU\ WKHMDYDVRXUFHFRGH

%DUWHQGHU:KDWGR\RXPHDQ´QRQHRIWKHJORU\·µ"$UHQ·W\RXWKH ƒ 2QHEHQHILWRI(-%LV:2'$³:ULWH
RQO\EHDQWKDW·VEHHQUHTXLUHGE\WKHVSHFVLQFHWKHYHU\EHJLQQLQJ" 2QFH'HSOR\$Q\ZKHUH<RXFDQ
6LQFH(-%" GHSOR\\RXU(-%FRPSRQHQWV
WRDQ\DSSVHUYHUWKDW·V(-%
6HVVLRQEHDQ)DWORWRIJRRG7+$7GRHVPH$OODQ\RQHZDQWV FRPSOLDQW
WRWDONDERXWQRZLVHQWLW\EHDQV(QWLW\EHDQVHQWLW\EHDQVHQWLW\
EHDQV1RWWKDW,GRQ·WOLNHWKHP³VRPHRIP\EHVWIULHQGVDUH ƒ :2'$PHDQV\RXKDYHWROHDUQ
HQWLW\EHDQVEXW,ZLVKSHRSOHZRXOGWDONDERXWZKDW,GR RQO\RQHVWDQGDUG$3,UDWKHUWKDQ
SURSULHWDU\YHQGRUVSHFLILF$3,V
%DUWHQGHU1RZWKDW\RXPHQWLRQLWHQWLW\EHDQVDUHPRVWO\
ZKDWIRONVWDONDERXWKHUHDWWKHEDUZKDWZLWKWKHELJ&03 ƒ 7KH(-%DUFKLWHFWXUHXVHVDQ
LPSURYHPHQWVLQ(-% (-%2EMHFWWRLQWHUFHSWFOLHQWFDOOVWRD
EHDQ7KLVJLYHVWKHVHUYHUFRQWDLQHU
6HVVLRQEHDQ$QGWKDW·VDQRWKHUWKLQJZKDWLVWKH%LJ'HDOZLWK DFKDQFHWRVWHSLQDQGDGGVHUYLFHV
&03",W·VMXVWJRLQJWRDGDWDEDVH6HULRXVO\WHOOPH:+$7LVVR
VSHFLDODERXWWKDW"´2RRKKKORRN,WXSGDWHGDUHFRUGµ3OHDVH
ƒ (-%VHUYLFHVLQFOXGHWUDQVDFWLRQV
VHFXULW\UHVRXUFHPDQDJHPHQW
%DUWHQGHU<HDKEXWWKHSURJUDPPHUVDURXQGKHUHVHHPWROLNH QHWZRUNLQJDQGSHUVLVWHQFH
QRWKDYLQJWRGRDOOWKHGDWDEDVHFRGHQRZ$QGWKHUH·VVRPHWKLQJ ƒ %HDQVFRPHLQWKUHHIODYRUV(QWLW\
DERXWSHUVLVWHQWUHODWLRQVKLSV,MXVWFDQ·WTXLWHUHPHPEHU
6HVVLRQDQG0HVVDJHGULYHQ
6HVVLRQEHDQ&05&RQWDLQHUPDQDJHGUHODWLRQVKLSV2.HYHQ ƒ (QWLW\EHDQVUHSUHVHQWDXQLTXHO\
,KDYHWRDGPLWWKDW&05PDNHVWKLQJVDORWHDVLHUIRUGHYHORSHUV LGHQWLILDEOHWKLQJLQDSHUVLVWHQW
%XWWKDW·VQRWZKDWEXJVPH³,.12:HYHU\ERG\OLNHVHQWLW\EHDQV VWRUHXVXDOO\WKDWPHDQVDURZLQD
EXWZKDWDERXW0(":KDWDERXWHYHU\WKLQJ,GR"(QWLW\EHDQV
GDWDEDVHWDEOH
UHSUHVHQWWKLQJVLQWKHV\VWHPEXWZLWKRXWPHWKRVHWKLQJVGRQ·W
GRPXFK0D\EHDQHQWLW\KDVVRPHJHWWHUVDQGVHWWHUVDQGVRPH ƒ 0HVVDJHGULYHQEHDQVDUH-06
TXHULHVVXUHEXWQRWDORWRIEXVLQHVVORJLF7RXVHHQWLW\EHDQVLQDQ PHVVDJLQJVHUYLFHFRQVXPHUV
DSS\RXSUHWW\PXFK+$9(WRXVHVHVVLRQEHDQVWRGRWKHEXVLQHVV
SURFHVVLQJ/LNHDQHQWLW\EHDQPLJKWUHSUHVHQWWKHGULQNV\RXVHOO ƒ 6HVVLRQEHDQVDUHHYHU\WKLQJHOVH
KHUHDQGWKHLQGLYLGXDOFXVWRPHUVEXWZKDWJRRGDUHGULQNVDQG
ƒ 6HVVLRQEHDQVFDQEHVWDWHIXORU
FXVWRPHUVZLWKRXWDEDUWHQGHU"<RXQHHGVRPHRQHWRDFWXDOO\SXW
VWDWHOHVV
WKHHQWLWLHV WKHGULQNVDQGWKHFXVWRPHUV WRJHWKHULQDPHDQLQJIXO
ZD\$QGWKDW·VZKDWVHVVLRQEHDQVGR:HGRWKHGHDOV:HZRUN ƒ 6WDWHIXOEHDQVFDQUHPHPEHU
ZLWKWKHFOLHQWWRJHWVRPHWKLQJGRQHZKLOHHQWLWLHVMXVWVLWWKHUH ´FRQYHUVDWLRQDOVWDWHµZLWKDFOLHQW
ZDLWLQJIRUVHVVLRQEHDQVWRXVHWKHP+H\FDQ,JHWDQRWKHURQHRI ZKLOHVWDWHOHVVEHDQVFDQQRW
WKRVH"$QGGRQ·WHYHQJHWPHVWDUWHGRQPHVVDJHGULYHQEHDQV

>7REHFRQWLQXHG@

 &KDSWHU
LQWURWR(-%

7HOO\RXUERVV
7UHDW\RXUVHOIWR
WKHUHSRUWZLOO
DFROGRQH<RX
KDYHWRZDLW7KHUH·V
GHVHUYHLW
SRZGHUDW$VSHQ

-`IUXTM"
7KDWVKDGHRI
<PM)L^QKM/]aJMIV JUHHQLVQ·WUHDOO\
"EFOREWEGETINTOTHEGUTSOF%*" LETS ZRUNLQ·IRU\RX
LOOKATHOWTODEVELOP DEPLOY ANDTEST
ABEANFROMSTARTTOlNISH)FYOURE
NOTALREADYFAMILIARWITH%*" YOUWONT
UNDERSTANDEVERYTHINGHERE$ONTWORRY
ABOUTITNOWWELLlGUREITALLOUTINLATER
CHAPTERS4HISISJUSTTOGIVEYOUAFEELING
FORWHATITSLIKETOGETABEANUPAND
RUNNING
/URlRSTBEANISFORTHE!DVICE'UY 7KH$GYLFH*X\
SERVICEˆAREMOTESERVICETHATGIVESBACK
ANADVICE3TRINGEACHTIMETHECLIENT 2XU¿UVWEHDQLVIRUWKH$GYLFH*X\
MAKESAREQUEST7ELLSPENDTHENEXT VHUYLFH(DFKWLPHWKHFOLHQWPDNHV
SEVERALPAGESLOOKINGATTHEPROCESS AND DUHTXHVWWKH$GYLFH*X\VHUYLFH
THENWELLACTUALLYMAKETHISBEAN ASA DQHQWHUSULVHMDYDEHDQ JLYHVEDFN
TUTORIAL DSLHFHRIVWXQQLQJO\KHOSIXO DQG
SUHWHUQDWXUDOO\DSSURSULDWH DGYLFH

,Q+HDG)LUVW-DYDZHGHSOR\HGWKH$GYLFH
*X\VHUYLFHXVLQJVWUDLJKW7&3VRFNHWV1RZ
IRURQO\ILYHWLPHVWKHDPRXQWRIFRGHDQG
HIIRUWZHJHWWRKDYHWKHVDPHVHUYLFHLQ(-%
2IFRXUVHLIRQHIHOWOLNHLWRQHFRXOGDUJXH
WKDWWKH$GYLFH*X\GRHVQ·WUHDOO\QHHGDOO
WKRVH(-%VHUYLFHVEXWZHGLVDJUHH:H·UH
DOUHDG\SODQQLQJWKH,32IRUWKLVEDE\

\RXDUHKHUH 
¿YHVWHSVWREXLOGLQJDEHDQ

.Q^M\PQVO[aW]LW\WJ]QTLIJMIV"
7KHVHDUHWKH
VWHSV\RX·OOJRWKURXJK
 &RGHWKHEHDQFODVVZLWKDOORIWKH IRUDOPRVWHYHU\EHDQ\RX·OO
MDYD[HME 
LPSRUWMDYD
UPL5HPRWH([ EXVLQHVVPHWKRGV PDNH&RGLQJLVVLPSOHWKH
FHSWLRQ
WULFN\SDUWLVGHSOR\LQJ
$GYLFH%HDQMDYD

 &RGHWZRLQWHUIDFHVIRUWKHEHDQ
MDYD[HME 
LPSRUWMDYD
UPL5HPRWH([
FHSWLRQ
KRPHDQGFRPSRQHQW
$GYLFH+RPHMDYD
$GYLFHMDYD

 &UHDWHDQ;0/GHSOR\PHQWGHVFULSWRU
'2&7<3(
HMEMDU
WKDWWHOOVWKHVHUYHUZKDW\RXUEHDQLVDQG
38%,QF

HMEMDU[PO
KRZLWVKRXOGEHPDQDJHG<RXPXVWQDPHLW
HMEMDU[PO

 3XWWKHEHDQWKHLQWHUIDFHVDQGWKH
-$5
GHSOR\PHQWGHVFULSWRULQWRDQHMEMDU¿OH
7KHUHPLJKWEHPRUHWKDQRQHEHDQLQWKH
HMEMDU
HMEMDUEXWWKHUHZLOODOZD\VEHMXVWRQH
GHSOR\PHQWGHVFULSWRU

 'HSOR\WKHEHDQLQWRWKHVHUYHUXVLQJWKH
WRROVSURYLGHGE\WKHVHUYHUYHQGRU

<RXGRQ¶WQHHGWREHDQ;0/H[SHUW
,QIDFW\RXGRQ¶WKDYHWRNQRZDQ\WKLQJDWDOODERXWKRZ;0/ZRUNV<RXGRQHHG
WRNQRZDERXWPDQ\RIWKHGHSOR\PHQWGHVFULSWRUWDJVEXW\RXGRQ¶WQHHGWRNQRZ
DERXW;0/LQRUGHUWROHDUQWKHWDJV,I\RXWKLQNRIWKHWDJVDVVLPSO\ODEHOVLQDGRFXPHQW
ZLWKYHU\VSHFL¿FUHTXLUHPHQWVIRUZKDW\RX¶UHDOORZHGWRW\SHZLWKLQWKRVHODEHOVWKHQDOO\RX
QHHGWRNQRZIRUWKHH[DPLVWKHQDPHDQGUHTXLUHPHQWVIRUVRPHRIWKHPRVWLPSRUWDQWODEHOV
WDJV :H¶OOORRNDWWKRVHFUXFLDOWDJVLQVHYHUDOFKDSWHUV

 &KDSWHU
LQWURWR(-%

EHDQFODVV
LQWHUIDFHV
;0/'' MDYD[HME 
LPSRUWMDYD
HMEMDU UPL5HPRWH([
FHSWLRQ

GHSOR\ $GYLFH%HDQMDYD

 :ULWHWKHEHDQFODVVZLWK a ve o n ly o ne businessBean
we h for the Advice
WKHDFWXDOEXVLQHVVPHWKRGV method
WKHFOLHQWFDOOV
SXEOLF6WULQJJHW$GYLFH ^
4HISISWHEREITALLHAPPENS4HE DGYLFHJHQHUDWLQJFRGH
IMPLEMENTATIONOFYOURBUSINESS `
METHODSDElNEDINTHECOMPONENT
INTERFACE)NOTHERWORDS YOUWRITEYOUR
BUSINESSLOGICINTHEBEANCLASS
4HEREARETHREEBEANTYPESTOCHOOSE <RXPXVWNQ
WRZULWHDOO
RZKRZ
WKHFRGH
KRXW
FROM 3ESSION %NTITY AND-ESSAGE DRIVEN :DWFKLW E\KDQGZ (
LW
-% UHDG\
ANDWELLCOVEREACHONEINDETAILINLATER XVLQJDQ
WWRRO
CHAPTERSOFTHEBOOK"EFOREMAKING GHYHORSPHQ
ABEAN THOUGH YOUMUSTDECIDEWHAT WRZULWH
GWRNQRZKRZ
TYPEYOUNEEDBECAUSEYOURBEANCLASS <RX¶UHH[SHFWH GWK H EH DQFODVV
FHVDQ
MUSTIMPLEMENTONEOFTHREEINTERFACES WKHWZRLQWHUID QVMXVWWKH
JHGULYHQEHD
DEPENDINGONTHETYPEYOUCHOOSE RUIRUPHVVD \ RX VKRXOG
DWPHDQV
EHDQFODVV 7K DU HGH YH ORSPHQW
-%D Z
7EVECHOSENA3ESSIONBEANHERE 127XVHDQ( EH DQRU
VRPHRIWKH
BECAUSEITSPERFECTFORTHE!DVICE'UY WRROWKDWEXLOGV QW LO\R X¶UH
IRU\RXX
APPLICATION!DVICE'UYGIVESBACK LQWHUIDFHFRGH FWO\ Z KD WF RGHWKH
ZH [D
ANADVICE3TRINGWHENYOUINVOKETHE FHUWDLQ\RXNQR
IRU\RX
SURPRISINGLY NAMEDGET!DVICE METHOD WRROLVFUHDWLQJ GWR
SLOH R IUXOHV\RXQHH
3OOURBEANCLASSONTHENEXTPAGE 7KHUH¶VD QG LQ WK H QH[WIHZ
[DP D
NQRZIRUWKHH JR U\ GHWDLOV
IMPLEMENTSTHE3ESSION"EANINTERFACE UV Z H¶OOJHWLQWRWKH
FK DS WH HPRUL]LQJ
!ND3ESSION"EANISNTJUSTAMARKER ZRUU\DERXWP
)RUQRZGRQ¶W LVH[HUFLVH
INTERFACE
ˆITHASMETHODSYOURBEAN WKHFRGHLQWK
DQ\WKLQJIURP QH HG WROHDUQLW
\RX:,//
CLASSMUSTIMPLEMENT -XVWNQRZWKDW
GRQH
4HEMETHODSYOUIMPLEMENTFROM DOOEHIRUHZH¶UH
HYHU²
THE3ESSION"EANINTERFACEAREKNOWN JRRGQHZVKRZ
7KHUHLVVRPH H;0/
ASCONTAINER CALLBACKS BECAUSETHE WRROWREXLOGWK
\RX&$1XVHD H[ DP
FULSWRU7KH
CONTAINERUSESTHEMTONOTIFYYOUOF GHSOR\PHQWGHV HP RU L]HDOOWKH
W\RXWRP
IMPORTANTMILESTONESINTHEBEANSLIFE GRHVQ¶WH[SHF LOOQHHGWR
OWKRXJK\RXZ
;0/WDJV $ YHUWKHP
RZ D IH Z H OH PHQWVZH¶OOFR
NQ
ODWHU 
$PDUNHULQWHUIDFH DOVRFDOOHGDWDJLQWHUIDFH KDV
QRPHWKRGVWRLPSOHPHQWDQGH[LVWVVRWKDW\RXFDQ
DQQRXQFHWRWKHZRUOGWKDW´<HV,FDQGRWKLVµ

\RXDUHKHUH 
WKHEHDQFODVV

MDYD[HME 
LPSRUWMDYD
UPL5HPRWH([
FHSWLRQ

%HDQFODVV $GYLFH%HDQMDYD

4HE!DVICE"EANIMPLEMENTSTHE3ESSION"EANINTERFACE SOITMUSTIMPLEMENT
THEMETHODSDECLAREDINJAVAXEJB3ESSION"EAN7ELLGRILLYOUONEVERYTHING
ALITTLELATER FORNOW JUSTREMEMBERTHATTHEBEANCLASSISWHEREYOURACTUAL
BUSINESSLOGICGOES)NOTHERWORDS THEREASONYOURBEANEXISTSINTHElRST
PLACE&ORTHE!DVICE'UY THATMEANSTHEGET!DVICE METHOD

an type
e of the threeDberiven)
SDFNDJHKHDG¿UVW
age pl em en t on
LPSRUWMDYD[HME  you need this pack im
You MUST sion, Entity, or Message
interfaces (Ses
SXEOLFFODVV$GYLFH%HDQLPSOHPHQWV6HVVLRQ%HDQ^

SULYDWH6WULQJ>@DGYLFH6WULQJV ^³2QHZRUGLQDSSURSULDWH´³<RXPLJKW
ZDQWWRUHWKLQNWKDWKDLUFXW´³<RXUERVVZLOOUHVSHFW\RXLI\RXWHOOKLP
ZKDW\RX5($//<WKLQNRIKLP´³9LVXDOL]H\RXUVHOIZLWKEHWWHUFORWKHV´
³2IFRXUVH\RXGRQ¶WKDYHWRJRWRZRUNWRGD\´³'R\RXUHDOO\WKLQN\RX
VKRXOGEHOHDYLQJWKHKRXVHOLNHWKDW"´³5HDGDERRNRQFHD\HDUZKHWKHU
\RXQHHGWRRUQRW´` The business method

(g etAdvice()) randomly pic
e of these Strings to re ks
SXEOLFYRLGHME$FWLYDWH ^
6\VWHPRXWSULQWOQ ³HMEDFWLYDWH´  on
turn.
`
he
SXEOLFYRLGHME3DVVLYDWH ^
m e t h o d s are from thave
6\VWHPRXWSULQWOQ ³HMESDVVLYDWH´  u
These foueran interface, so yohis simple
`
SessionB hem in here. For t anything
SXEOLFYRLGHME5HPRYH ^ to put t donÕt need to do got print
6\VWHPRXWSULQWOQ ³HMEUHPRYH´  bean, we ethods, but weÕve when (or
` in the m ts so you can see donÕt
statemen e called. For now, e for !
SXEOLFYRLGVHW6HVVLRQ&RQWH[W 6HVVLRQ&RQWH[WFW[ ^ if) theyÕrout what these ar
6\VWHPRXWSULQWOQ ³VHVVLRQFRQWH[W´  worry ab
`

Finally! The actual


SXEOLF6WULQJJHW$GYLFH ^ business method from th
6\VWHPRXWSULQWOQ ³LQJHWDGYLFH´  component interface. ItÕse
LQWUDQGRP  LQW  0DWKUDQGRP  DGYLFH6WULQJVOHQJWK  the whole point of th
UHWXUQDGYLFH6WULQJV>UDQGRP@ bean... the thing the clie en
`
wants to call. t
SXEOLFYRLGHME&UHDWH ^ You must have an ejb ea
6\VWHPRXWSULQWOQ ³LQHMEFUHDWH´  ItÕs an EJB rule youÕlCr
l lea
te() method.
` later. But it does not co rn about
` the SessionBean interfa me from
ce.
 &KDSWHU
LQWURWR(-%

EHDQ
LQWHUIDFHV LPSRUW
MDYD[HME 
;0/'' LPSRUWMDYD

FHSWLRQ MDYD[HME 
HMEMDU LPSRUWMDYD
UPL5HPRWH([
$GYLFHMDYD FHSWLRQ
GHSOR\
$GYLFH+RPHMDYD

 :ULWHWZRLQWHUIDFHVIRUWKHEHDQ
4HESEARETHEINTERFACESTHECLIENTSEES7EHAVEANENTIRECHAPTER
DEVOTEDTOTHESEINTERFACES SOYOUDONTHAVETOUNDERSTANDITALLNOW

&20321(17LQWHUIDFH FRPSRQHQW
LPSRUW
LQWHUIDFH
4HISISWHEREALLTHEBUSINESSMETHODSAREDECLARED)NOTHERWORDS MDYD[HME 
LPSRUWMDYD
UPL5HPRWH([ EXVLQHVV
ITSWHEREYOUPUTTHEMETHODSTHECLIENTWANTSTOCALL FHSWLRQ

PHWKRGV
$GYLFHMDYD
SDFNDJHKHDG¿UVW
o
you need theseentwts.
LPSRUWMDYD[HME  import statem terface,
the EJBObjectteinr
LPSRUWMDYDUPL5HPRWH([FHSWLRQ
exte nd eith er
It must which weÕll see la
or E JBLocalObject,
SXEOLFLQWHUIDFH$GYLFHH[WHQGV(-%2EMHFW^ You must declare Remote-
Exception on all methods in
SXEOLF6WULQJJHW$GYLFH WKURZV5HPRWH([FHSWLRQ
this interface!
This is the
`
whole reasonacttheual business method. (the
correspond to bean exists). It MUST
a method in the
bean class.

+20(LQWHUIDFH KRPH
LPSRUW
LQWHUIDFH
4HECLIENTUSESTHEHOMEINTERFACETOASKFORAREFERENCETOTHE MDYD[HME 
LPSRUWMDYD
DIDFWRU\
COMPONENTINTERFACE4HEHOMEISTHECLIENTSSTARTINGPOINTFORGETTING FHSWLRQ

IRUEHDQ
$GYLFH+RPHMDYD
HOLDOFAREFERENCETOABEANORATLEASTWHATTHECLIENTTHINKSISTHE UHIHUHQFHV
BEAN BUTWELLGETTOTHATLATER &ORNOW THINKOFTHEHOMEASAKIND
OFFACTORYTHATMAKESANDDISTRIBUTESBEANREFERENCESTOCLIENTS
statements
SDFNDJHKHDG¿UVW
same import
LPSRUWMDYD[HME  as above. nd
ome
either the EJBeÕHll see later
m e m ust exte w
LPSRUWMDYDUPL5HPRWH([FHSWLRQ The ho LocalHome, which exceptions,
interface, or EJB need TWO ption
This time weeption and RemoteExce
SXEOLFLQWHUIDFH$GYLFH+RPHH[WHQGV(-%+RPH^ CreateExc
SXEOLF$GYLFHFUHDWH WKURZV&UHDWH([FHSWLRQ5HPRWH([FHSWLRQ
the create() method
`
component interface must return your
type!!
\RXDUHKHUH 
WKHEHDQLQWHUIDFHUHODWLRQVKLS

:DLWMXVWDPLQXWH
KHUHKRZFRPHZH·UH
PDNLQJWKHEHDQFODVV
EHIRUHWKHLQWHUIDFHV"
7KDWGRHVQ·WVRXQGULJKW

$QGWKDW·VQRWHYHQWKHZRUVW
WKLQJ$GYLFH%HDQGRHVQ·W
LPSOHPHQWWKH$GYLFHLQWHUIDFH"/HWPH
JHWWKLVVWUDLJKW\RX0867KDYHWKHVDPH
PHWKRGVLQWKHEHDQWKDW\RXKDYHLQWKH
FRPSRQHQWLQWHUIDFH\HW\RXGRQ·WPDNHWKH
EHDQLPSOHPHQWWKHLQWHUIDFH"

(MMMTWOGOODQUESTIONS)NANON BEAN*AVAWORLD THEWAYWERE


DOINGTHINGSHEREWOULDNTMAKEMUCHSENSE"UTBEANWORLDHAS
DIFFERENTRULESANDPRACTICES7ECOULDWRITETHEINTERFACESlRST AND
SOMEDEVELOPERSDO3OMETIMESTHECHOICEOFWHICHTODEVELOPlRST
DEPENDSONTHEDEVELOPMENTTOOLSYOUREUSINGTOBUILDYOURBEANS
3OMETOOLS FOREXAMPLE EXPECTYOUTOlRSTBUILDYOURBEANCODING
THEACTUALBUSINESSLOGIC ANDTHENTHETOOLWILLBUILDTHEINTERFACES
TOMATCH!NDSOMETOOLSDOJUSTTHEOPPOSITE LOOKINGATTHE
INTERFACESANDBUILDINGAhYOURCODEGOESHEREvBEANCLASS WITHALL
OFTHEMETHODSFROMTHEINTERFACE&ORLEARNING%*" WELIKETOSTART
WITHTHEBEAN FOCUSINGONTHEBUSINESSLOGIC BEFORElGURINGOUTTHE
INTERFACES,ATERINTHEBOOK WELLDOITTHEOTHERWAYAROUND
!SFORTHEBEANNOTIMPLEMENTINGTHECOMPONENTINTERFACE YOUCOULD
DOITTHATWAY BUTTHISTIMEWESTRONGLYURGEYOUNOTTO/NTHENEXT
PAGE WELLLOOKATTHISINMOREDETAIL

 &KDSWHU
LQWURWR(-%

WKHUH DUH QR
'XPE 4XHVWLRQV
Q: 3OWHYDOESNTTHEBEAN Q: "UTTHERESANEASYSOLUTIONTO
Q: "UTIFYOUDONTHAVETHE
CLASS!DVICE"EAN IMPLEMENT 4(!4PROBLEMYOUCOULDHAVETHE BEANIMPLEMENTTHEINTERFACE IN
THECOMPONENTINTERFACE!DVICE BEANEXTENDACLASSTHATHASALLTHE OTHERWORDS IF!DVICE"EANDOESNT
IFITHASTOIMPLEMENTTHESAME IMPLEMENTATIONSTHATYOUNEEDTO IMPLEMENT!DVICE DOESNTTHISMEAN
METHODS*AVACLASSESAREALLOWED SATISFYTHECOMPILER BUTDONTREALLY THATTHECOMPILERWONTCATCHYOUIF
TOIMPLEMENTMORETHANONE NEEDTOIMPLEMENTINYOURCODE,IKE THEBEANBLOWSITANDDOESNTMATCH
INTERFACE SOWHATSTHEPROBLEMWITH THEADAPTEREVENTLISTENERCLASSESIN THEMETHODSOFTHEINTERFACE
SAYING !747HYNOTDOSOMETHINGLIKETHAT
FODVV$GYLFH%HDQLPSOHPHQWV
$GYLFH6HVVLRQ%HDQ
HEREANDMAKEASUPERCLASSFORYOUR
BEANTHATIMPLEMENTSTHEMETHODS
A: 9ES THATSEXACTLYWHATIT
MEANS!NDYES THATMAKESMOST
*AVADEVELOPERSALITTLEQUEASYJUST
A: ,EGALLY THEBEANCLASSCAN A: 9ES YOUCOULDDOTHAT ANDIT
THINKINGABOUTIT!FTERALL THATSONE
OFTHEBENEFITSOFINTERFACESIN*AVAˆ
IMPLEMENTTHECOMPONENTINTERFACE WOULDBELEGAL"UTITSTILLMEANSYOUR
THATTHECOMPILERGUARANTEESTHAT
BUTTHESPECDOESNTRECOMMENDIT BEANISCAPABLEOFHAVINGMETHODS
YOUHAVEALLOFTHEINTERFACEMETHODS
2EMEMBER ALTHOUGHTOTHECLIENTIT INVOKEDTHATTHEBEANSHOULD
PROPERLYIMPLEMENTED
LOOKSASTHOUGHTHE!DVICE"EANISTHE NEVERKNOWABOUT4HEMETHODSOF
OBJECTTHECLIENTSINVOKINGMETHODS %*"/BJECTAREMETHODSFORTHECLIENT "UTDONTPANIC)NOURDEVELOPMENT
ONTHEOBJECTTHATIMPLEMENTSˆIN TOCALLONTHEBEAN BUT./4FORTHE INTHISBOOK WEDOHAVETOBECAREFUL
THETRUE*AVASENSEˆTHECOMPONENT BEANTOACTUALLYIMPLEMENT3OITSNOT SINCETHECOMPILERISNTMAKINGSURE
INTERFACE THECLIENTREALLYINVOKES THEBEST//PRACTICE THATWEVEIMPLEMENTEDTHEBUSINESS
METHODSONSOMETHINGCALLEDAN METHODSFROMTHECOMPONENT
!NDTHERESSTILLANOTHERREASONWHY
%*"/BJECT THATSIMPLEMENTEDBYTHE INTERFACE)NTHEREALWORLD HOWEVER
ITSNOTGOODPRACTICETOHAVETHE
SERVERATDEPLOY TIME4HECLIENTNEVER YOULLALMOSTCERTAINLYBEUSINGAN
BEANIMPLEMENTTHECOMPONENT
INTERACTSDIRECTLYWITHTHEBEAN.EVER %*" READYDEVELOPMENTENVIRONMENT
INTERFACEˆIFTHEINTERFACEISREMOTE
EVER EVER,ATERINTHEBOOK YOULLSEE THATWILLMAKESUREYOUPROVIDETHE
AND%*"/BJECTIS SINCEITEXTENDSTHE
THATIFTHEBEANDOESIMPLEMENTTHE METHODS EITHERBYPUTTINGAhYOUR
JAVARMI2EMOTEINTERFACE THATWOULD
COMPONENTINTERFACE YOUCOULDSNEAK CODEGOESHEREvVERSIONOFTHEMETHOD
MAKETHEBEANCLASSA2EMOTECLASS
THINGSPASTTHECOMPILERTHATWOULD INYOURBEANCLASS ORBYDOINGTHE
ANDTHATMUSTNEVERBE4HEBEANIS
EXPLODEATRUNTIME3OWESTRONGLY REVERSEˆFINDINGTHEBUSINESSMETHOD
PROTECTEDBYTHESERVER ANDMUST
URGEYOUNOTTOHAVEYOURBEAN INTHEBEANCLASSANDPUTTINGITINTO
NEVERBEACCESSEDINANYOTHERWAY
IMPLEMENTTHECOMPONENTINTERFACE THECOMPONENTINTERFACE!TTHEVERY
BYANYTHINGBUTTHESERVER)TSTHE
LEAST MOSTSERVERSWILLCHECKBEFORE
"UTTHERESANOTHERISSUEASWELLˆTHE SERVERTHATMAKESTHE%*"/BJECTBY
ORATTHETIMEYOUDEPLOYTHEBEAN
COMPONENTINTERFACEEXTENDSANOTHER IMPLEMENTINGTHE!DVICEINTERFACE
THATYOURCOMPONENTINTERFACEAND
INTERFACE)NOUREXAMPLE !DVICE WHICH)3REMOTE ANDWHICHINTERCEPTS
BEANCLASSHAVEMATCHINGMETHODS
EXTENDS%*"/BJECT AND%*"/BJECT ALLBUSINESSMETHODCALLSTOTHEBEAN
ISNOTAMARKERINTERFACE)THAS )FTHISSTILLBOTHERSYOU THOUGH WEDO
METHODS4HISMEANSTHATANYCLASS HAVEATECHNIQUEFORGETTINGAROUNDIT
IMPLEMENTING!DVICEMUSTALSO THATWELLLOOKATALITTLELATER#HANCES
IMPLEMENTTHEMETHODSOF%*"/BJECT ARE YOUWONTNEEDTOUSEIT
3O YOURBEANWOULDENDUP
IMPLEMENTINGABUNCHOFMETHODSIT
SHOULDNEVERHAVELIKEGET(ANDLE
GET%*"(OME 

\RXDUHKHUH 
EHDQ%UDLQ3RZHU

YiX`e
7KHQDPLQJ
FRQYHQWLRQ gfn\i
IRUEHDQVLV
127SDUWRI  <RXVDZKRZWKHEHDQGRHVQ¶WLPSOHPHQWWKHFRPSRQHQW
WKH(-%VSHF LQWHUIDFHHYHQWKRXJKWKHEHDQPXVWKDYHWKHVDPHPHWKRGV
%UDLQVWRUPDZD\ WKHUHPD\EHPRUHWKDQRQH LQZKLFK\RX
$GYLFH$GYLFH+RPH FRXOGKDQGOHWKHVHUHTXLUHPHQWVIRUWKH$GYLFH*X\EHDQ
$GYLFH%HDQ
HVH
<RX¶UHQRWUHTXLUHGWRXVHWK 7KHFRPSRQHQWLQWHUIDFH $GYLFH PXVWH[WHQG(-%2EMHFW
HV IRUHQW HUS ULVHEH DQV 
QDP
RRG
,W¶VDUHDOO\UHDOO\UHDOO\J 7KHEHDQPXVWLPSOHPHQWWKH6HVVLRQ%HDQLQWHUIDFH7KH
HYH U % HV XUH WKD W EHDQPXVWQRWLPSOHPHQWWKHFRPSRQHQWLQWHUIDFH $GYLFH 
LGHDKRZ
¶UHQRW IRR OHG E\WKH QD PH
\RX
OHJDO
RIDFODVVRULQWHUIDFH²LW¶V :HZDQWWKHFRPSLOHUWRYHULI\WKDWWKHEHDQ $GYLFH%HDQ 
RP SRQ HQW LQWHUID FH KDVWKHVDPHPHWKRGVDVWKRVHLQWKHFRPSRQHQWLQWHUIDFH
WRKDYHDF

QDPHG$GYLFH+RPHDQGD
HG
FRPSRQHQWLQWHUIDFHQDP +LQW³WKHVDPHPHWKRGVDVWKRVHLQWKHFRPSRQHQWLQWHU
%HD QI RUH [DP SOH 2 Q IDFH´GRHVQRWPHDQWKHVDPHWKLQJDV³WKHVDPHPHWKRGV
$GYLFH

WKHH[DPDOZD\VJRE\WKH DVWKRVHGHFODUHGLQWKHFRPSRQHQWLQWHUIDFH´
WLRQ
FODVVRULQWHUIDFHGHFODUD
KDQ WKH QD PH RIWKH FODVV +LQWWKLVUHTXLUHVRQO\-DYDNQRZOHGJHQRW(-%NQRZOHGJH
UDWKHUW

7RGD\PDQ\(-%SURJUDPPHUVXVH(-%VDYY\GHYHORSPHQW
WRROV,QRWKHUZRUGVDEHDQFDSDEOH,'(WKDWNQRZVKRZ
WKHWKUHHSLHFHV²KRPHLQWHUIDFHFRPSRQHQWLQWHUIDFH
DQGEHDQFODVV²DUHUHODWHGWRRQHDQRWKHU0DQ\RI
WKHVHWRROVDOVRNQRZKRZWRWDONGLUHFWO\WRRQHRU
PRUHDSSVHUYHUVVRWKDW\RXFDQXVHWKHWRROWRERWK
GHYHORSDQGGHSOR\\RXUEHDQUDWKHUWKDQVZLWFKLQJIURP
%HDQDZDUH DGHYHORSPHQWHQYLURQPHQWWRWKHVHUYHU¶VRZQ DQGRIWHQ
GHYHORSPHQW OHVVIULHQGO\ GHSOR\PHQWWRROV2QHRIWKHDGYDQWDJHVRIDQ
WRROV (-%GHYHORSPHQWWRROLVWKDW\RXPLJKWQRWKDYHWRZRUU\DERXW
PDWFKLQJXSWKHEXVLQHVVPHWKRGVLQWKHFRPSRQHQWLQWHUIDFH
ZLWKWKHDFWXDOEHDQFODVVRUYLFHYHUVD$JRRG(-%DZDUH,'(
ZLOOPDNHVXUH\RX¶YHJRWHYHU\WKLQJV\QFHGXS

 &KDSWHU
LQWURWR(-%

EHDQ
D Þle
required! ThemDlÓ
LQWHUIDFHV
;0/'' '2&7<3( This name is ed Òejb-jar.x
must be nam
HMEMDU
HMEMDU 38%,QF

GHSOR\ HMEMDU[PO
tually
 &UHDWHDQ;0/GHSOR\PHQWGHVFULSWRU (In this book, we wonÕt ac let the
ll
WKDWWHOOVWKHVHUYHUZKDW\RXUEHDQLVDQGKRZwrite this ourselves;uiwldeÕit for us.)
sb
LWVKRXOGEHPDQDJHG deployment tool
4HEDEPLOYMENTDESCRIPTOR$$ DESCRIBESTHESTRUCTURE
OFYOURBEANINCLUDINGHOWTHETHREElLESCOMPONENT
INTERFACE HOMEINTERFACE ANDBEANCLASS ARERELATEDTOONE
ANOTHER4HESERVERWONTLOOKATYOURNAMINGCONVENTION You donÕt have to write
ANDlGUREOUTWHICHISTHEHOME WHICHISTHEBEAN ETC9OU
HAVETOTELLTHESERVER THROUGHTHE$$ WHICHCLASSISWHICH the XML by hand if you
ANDHOWTHEYRECONNECTED"UTTHE$$DOESALOTMORETHAN
THAT!NDFORSOMEBEANS THE$$CANBESEVERALPAGESLONG use a tool that can help
&ORTHISSIMPLEBEAN THE$$ISSHORT2EMEMBER YOUDONT
NEEDTOMEMORIZETHESYNTAXOFTHE8-,INTHE$$,ATER
you build a deployment
INTHEBOOKINSEVERALDIFFERENTCHAPTERS WELLGOOVERTHE
ASPECTSOFTHE$$THATYOUDONEEDTOKNOW
descriptor.
"[POYHUVLRQ ´´HQFRGLQJ ´87)´"!
You can use the J2EE
'2&7<3(HMEMDU38%/,&µ6XQ0LFURV\VWHPV RI bean wizard to do it
,QF'7'(QWHUSULVH-DYD%HDQV(1¶µKWWS
MDYDVXQFRPGWGHMEMDUBBGWG¶! for you, and the XML
HMEMDU!
GLVSOD\QDPH!(MEGLVSOD\QDPH!
it spits out will work in
HQWHUSULVHEHDQV! any EJB 2.0 container!
VHVVLRQ!
GLVSOD\QDPH!$GYLFH%HDQGLVSOD\QDPH!
HMEQDPH!$GYLFH%HDQHMEQDPH!
KRPH!KHDG¿UVW$GYLFH+RPHKRPH!
UHPRWH!KHDG¿UVW$GYLFHUHPRWH!
HMEFODVV!KHDG¿UVW$GYLFH%HDQHMEFODVV!
VHVVLRQW\SH!6WDWHOHVVVHVVLRQW\SH!
WUDQVDFWLRQW\SH!%HDQWUDQVDFWLRQW\SH!
VHFXULW\LGHQWLW\!
GHVFULSWLRQ!GHVFULSWLRQ! For now, just know th
XVHFDOOHULGHQWLW\!XVHFDOOHULGHQWLW\! bean in an application at
mu
every
VHFXULW\LGHQWLW\! st
element in the DD that have an
VHVVLRQ! the beanÕs structure and describes
type.
HQWHUSULVHEHDQV!
HMEMDU!

\RXDUHKHUH 
WKHHMEMDU

EHDQ
LQWHUIDFHV
-$5
;0/''
HMEMDU
HMEMDU
Õt use the JAs;R
GHSOR\
is b oo k, w e w on
 3XWWKHEHDQWKHLQWHUIDFHVDQGWKH
(in th
to m ak e t h e ejb-bar ours)elve
tool loytools do it
GHSOR\PHQWGHVFULSWRULQWRDQHMEMDU¿OH weÕll let the dep
!SABEANDEVELOPEROFlCIALLYCALLEDA"EAN0ROVIDER YOULLALWAYSPUTYOURBEANSIN
A*!24HESPECSAYSANEJB JARISA*!2lLETHATHOLDSTHETHINGSTHEBEANDEPENDSON
CLASSESANDINTERFACES ALONGWITHTHEDEPLOYMENTDESCRIPTOR 
9OUDONTHAVETODOTHISBYHANDSINCEWELLUSETHE2)2ATHERTHANWRITINGTHE8-,$$
ANDUSINGTHEMDUTOOLTOPACKAGEIT WELLUSETHE2)GHSOR\WRROWIZARDTOMAKEIT
EASIERANDLESSERROR PRONE )NOTHERWORDS WEREGOINGTOCOMBINESTEPSANDINTO
ONE&ORNOW YOUNEEDTOKNOWTHATABEANISNTABEANUNTILYOUMAKEA*!2lLEWITH
THECOMPILEDCLASSANDINTERFACES ANDTHE$$

The ejb-jar Þle must inc


the bean .class Þles (the lude all three of
t descriptor plus the bean implementattwo interfaces
The deploymaenmed Òejb-jar.xmlÓ
P\HMEMDU
the deployment descripto ion class) and
MUST be n be in a directory ejb-jar Þle whatever yo r. Name the
and MUST TA-INFÓ required name for the ejbu like; thereÕs no
named ÒME -jar.

0(7$,1)
any ot he r JAR Þle, the directory
KHDGILUVW
As wi th
the package must be
structure matchinegthe JAR. In other words,
immediately inside have been deÞned in the
since these thre e, the Þles must be inside



ÒheadÞrstÓ packagdirectory.
 
'2&7<3(   
HMEMDU   

the ÒheadÞrstÓ
38%,QF
 
 
HMEMDU[PO 
$GYLFHFODVV
$GYLFH+RPHFODVV
$G L % O

7KHH[DPH[SHFWV\RXWRNQRZZKDWLVVXSSRVHGWREHLQWKHHMEMDU¿OHDQGDOVR
ZKDWLVQRWVXSSRVHGWREHLQWKHUH7KHFODVVHVDQGLQWHUIDFHVJHQHUDWHGE\WKH
:DWFKLW FRQWDLQHU \RX¶OOOHDUQZKDWWKRVHDUHDOLWWOHODWHU PXVWQRWEHLQWKHHMEMDU¿OH7KLQN
RIWKHHMEMDUDVWKHWKLQJ\RXFUHDWHDVDEHDQGHYHORSHU,W¶V\RXUGHOLYHUDEOH7KH
FRQWDLQHUVHUYHUKDVLWVRZQGHOLYHUDEOHVDQGWKRVHGHOLYHUDEOHVGRQ¶WJRLQWRWKHHME
MDU,PDJLQHWKDW\RXZRUNIRU%HDQV58VDQG\RXGRQ¶WHYHQKDYHDQ(-%FDSDEOH
VHUYHU7KDW¶VWKHZKROHLGHDRIWKHHMEMDULW¶VZKHUHWKHEHDQGHYHORSHUSXWVKLV
EXLOGLQJEORFNFRPSRQHQWV LHEHDQV WKDWVRPHRWKHUGHYHORSHUFDQXVHWRDVVHPEOH
DQDSSOLFDWLRQ<RXPLJKWXVHDVHUYHUWRROWRKHOSFUHDWHWKH;0/''EXWWKH''LVVWLOO
\RXUGHOLYHUDEOHUHJDUGOHVVRIZKR RUZKDW FUHDWHVLW

 &KDSWHU
LQWURWR(-%

EHDQ
LQWHUIDFHV
;0/''
HMEMDU
GHSOR\

 'HSOR\WKHEHDQLQWRWKHVHUYHUXVLQJWKH
WRROVSURYLGHGE\WKHVHUYHUYHQGRU
3OONERORLATER YOURBEANSHAVETODOSOMETHING4HEYHAVETOBEASSEMBLED
INTOANAPPLICATIONANDDEPLOYEDINTOASERVER WAITINGFORCLIENTSTOCALL
4HISISAHUGESTEP)NFACT WECHEATEDALITTLE BECAUSEITSACTUALLYTWOSTEPS
!PPLICATION!SSEMBLYAND$EPLOYMENT
5!PPLICATION!SSEMBLY
4HISMEANSTAKINGTHEBEANFROMTHEREUSABLECOMPONENTSTAGETOBEINGPARTOF
ANAPPLICATION&ORSIMPLEBEANS THATMIGHTMEANSIMPLYWRITINGACLIENTTHAT
CANACCESSTHEBEANIECALLTHEBEANSBUSINESSMETHODS )NOTHERWORDS A
SINGLEBEANMIGHTBETHEENTIREAPPLICATIONONTHESERVERSIDE"UTTHISCOULD
ALSOBETHESTEPWHEREYOUINTEGRATEMULTIPLEBEANSANDOTHER*AVACLASSES
INTOACUSTOMAPPLICATION ANDTHATUSUALLYMEANSTAKINGDIFFERENTBEANSEACH
INITSOWNEJB JARWITHITSOWN$$ ANDPUTTINGTHEMINTOANEW SINGLEEJB JAR
WITHASINGLE$$THATMIGHTDESCRIBEHOWTWOORMOREBEANSARERELATEDTOONE
ANOTHER
$URINGASSEMBLY YOUMIGHTALSOADDNEWINFORMATIONTOTHE$$ FORTHINGSTHE
BEANDEVELOPERDIDNTKNOWABOUT&OREXAMPLE THEBEANDEVELOPERMIGHT
WRITECODETHATUSESASPECIALBEAN SPECIlChPROPERTYvCALLEDANENVIRONMENT
ENTRY WHICHWELLGETINTOINALATERCHAPTER FORTHETAXAMOUNTUSEDBYTHIS
APPLICATION"UTTHEBEANDEVELOPERHASNOIDEAWHATVALUETOGIVETHETAX
AMOUNTPROPERTY SOHELEAVESTHEVALUEBLANKINTHE$$4HENTHEAPPLICATION
ASSEMBLERCOMESALONG SEESBYREADINGTHE$$ THATTHEBEANUSESAPROPERTY
lGURESOUTWHATTHEVALUESHOULDBE ANDADDSITTOTHE$$
&ORTHE!DVICEBEAN PUTTINGTHEBEANINTHEEJB JAR BUILDINGTHE$$ AND
DEPLOYINGWILLHAPPENASONEBIGSTEP
5$EPLOYMENT
4HISISWHERETHERUBBERMEETSTHEROAD THEBEANMEETSTHESERVER THE
DEVELOPERMEETSTHESYSADMIN4HETWOCRUCIALPARTSOFDEPLOYMENTARENAMING
THEBEANSOTHECLIENTWILLKNOWHOWTOlNDIT ANDGETTINGTHEBEANINTOTHE
CONTAINERSCONTROL
4HESPECDOESNTSAYANYTHINGABOUTTHEWAYINWHICHYOUDEPLOYYOURBEANSIT
ALLDEPENDSONTHE%*"SERVERCONTAINERTHATYOUREUSING

\RXDUHKHUH 
(-%UROHV

-2*:WTM[IVL:M[XWV[QJQTQ\QM[
,ZRUNIRU%HDQV
58VDQG,GHYHORS
UHXVDEOHFRPSRQHQWV
WKDWZHVHOOWRRWKHU
GHYHORSHUV

(-%5ROH%HDQ3URYLGHU
Bill 'HOLYHUDEOHHMEMDU¿OHV WKDW
LQFOXGHRQHRUPRUHEHDQVDQGDQ;0/
GHSOR\PHQWGHVFULSWRU

3ULPDU\UHVSRQVLELOLW\'HVLJQDQG ,·PDGHYHORSHUIRUD
ELJRQOLQHERRNVWRUH
SURJUDPHQWHUSULVHMDYDEHDQV,QRWKHU :HEX\DORWRIEHDQVIURP
ZRUGVZULWHWKHEHDQFRGH %HDQV58VEXW,DOVRPDNHP\
RZQEHDQV,PL[WKHPWRJHWKHU
&KDUDFWHULVWLFV.QRZVWKHEXVLQHVV LQWRQHZDSSOLFDWLRQVFXVWRPL]HG
ORJLFWKDWVKRXOGEHLQDSDUWLFXODUW\SHRI IRUWKHEXVLQHVVUXOHVRIKRZ
FRPSRQHQWIRUDSDUWLFXODUGRPDLQ ZHVHOOERRNV

Annie
(-%5ROH
$SSOLFDWLRQ$VVHPEOHU
7KHH[DP
FRYHUVVXEWOH
:DWFKLW GLIIHUHQFHV 'HOLYHUDEOHHMEMDU¿OHV WKDWLQFOXGH
EHWZHHQUROHV RQHRUPRUHEHDQVDQGDQ;0/
DQ\
3D\YHU\FORVHDWWHQWLRQWR GHSOR\PHQWGHVFULSWRUZLWK%HDQ
QWLRQR I(- %U ROH VLQ WKL V 3URYLGHULQIRDVZHOODVDSSOLFDWLRQ
PH
FRYHU
ERRNHVSHFLDOO\ZKHQZH DVVHPEO\LQIR 0D\DOVRFUHDWHFOLHQWV
LOVR IWKHG HSO R\P HQW
PRUHGHWD
LQJ WHV WHG RUGH¿QHLQWHUDFWLRQEHWZHHQRWKHU
GHVFULSWRU&RXQWRQEH
DWDQG FR XQW 
RQZKRGRHVZK FRPSRQHQWV VXFKDV-63V 
VXEWOH
RQWKRVHTXHVWLRQVEHLQJ
%H DQ 3ULPDU\UHVSRQVLELOLW\&RPELQH
7KH$SS$VVHPEOHUDQG
LQVHY HUD ODU HDV
3URYLGHURYHUODS RQHRUPRUHHQWHUSULVHEHDQVLQWRD
VWK H' HSO R\H UDQ GWK H
DVGRH ODUJHUDSSOLFDWLRQ0D\VRPHWLPHVZHDUWKH%HDQ
P
$SS$VVHPEOHU)RUWKHH[D 3URYLGHUKDWPL[LQJQHZDQGH[LVWLQJEHDQV
QRZ ZK LFK URO HK DV
\RXQHHGWRN
U\U HVS RQV LELOLW\I RUD  WRJHWKHUWREXLOGDQDSS'H¿QHVWKHVHFXULW\DQG
WKHSU LPD
OO\K DYL QJ WR
SDUWLFXODUWDVN XVXD WUDQVDFWLRQEHKDYLRUIRUWKHDSSOLFDWLRQ
VFULSWRU
GRZLWKWKHGHSOR\PHQWGH
UPD WLRQ 7K HV WXII RQ WKL VSDJH &KDUDFWHULVWLFV'H¿QLWHO\DGRPDLQH[SHUW
LQIR
DV WDUW 
DQGWKHQH[WDUHMXVW 0LJKWQRWGRDVPXFKFRGLQJDVWKH%HDQ3URYLGHU

 &KDSWHU
LQWURWR(-%

(-%5ROH 'HSOR\HU
'HOLYHUDEOH(QWHUSULVHEHDQVWKDWKDYHEHHQ
:RZ,WDFWXDOO\GHSOR\HG FXVWRPL]HGIRUDVSHFL¿FRSHUDWLRQDOHQYLURQPHQWDQG
8QEHOLHYDEOH,ZRUNIRU GHSOR\HGLQWRWKHVHUYHU
WKHVDPHRQOLQHERRNVWRUHDVWKHDSS
DVVHPEOHUDQG,WDNHKHUHMEMDUVWXG\ 3ULPDU\UHVSRQVLELOLW\7DNHWKH$SSOLFDWLRQ
WKHGHSOR\PHQWGHVFULSWRUDQGJHWWKHWKLQJ $VVHPEOHU¶VGHOLYHUDEOHVWXG\WKHGHSOR\PHQWGHVFULSWRU
DFWXDOO\UXQQLQJLQWRWKHVHUYHUDQGZDLWLQJ DQGUHVROYHDQ\H[WHUQDOGHSHQGHQFLHV)RUH[DPSOH
IRUFOLHQWV,NQRZD/27DERXWWKHZD\RXU
V\VWHPVDUHFRQÀJXUHGDQGUXQQLQJKHUH LIWKHEHDQUHOLHVRQDSDUWLFXODUUHVRXUFHWKHGHSOR\HU
PXVWPDSWKHORJLFDOQDPHIURPWKH%HDQ3URYLGHUWRWKH
DFWXDOQDPHRIWKHUHVRXUFHRQWKHVHUYHU5HPHPEHU
Dick
ZKHQ%LOOZURWHWKHEHDQFRGHKHGLGQ¶WNQRZLWZRXOG
HQGXSRQ'LFN¶VVHUYHU%LOOKDGWRPDNHXSDµIDNH¶QDPH
IRUWKHGDWDEDVHDQG'LFNKDVWRELQGWKHIDNHQDPHWR
VRPHWKLQJUHDO

&KDUDFWHULVWLFV$QH[SHUWLQDVSHFL¿FRSHUDWLRQDO
GRPDLQ.QRZVWKHVHFXULW\XVHUVDQGUROHVIRUWKLV
V\VWHPNQRZVZKDW¶VFRQ¿JXUHGLQWRWKHVHUYHUDQG
XQGHUVWDQGVKRZWRLQWHUSUHWWKHGHSOR\PHQWGHVFULSWRU
LQIRIURPWKH%HDQ3URYLGHUDQG$SS$VVHPEOHU

:HGRWKH
ELJVHUYLFHVVR\RXJHW
WRIRFXVRQ\RXUEXVLQHVVORJLF
:HZRUNIRUWKH :HFRPSHWHZLWK,%0%($
6XSHU6HUYHUFRPSDQ\ DQG2UDFOHDQGVRPHGD\ZH·OO
:H·UHH[SHUWVLQORZOHYHO NLFN/DUU\(OOLVRQ·VEXWW
VHUYLFHVOLNHWUDQVDFWLRQ
PDQDJHPHQWSRROLQJDQG
VHFXULW\ Sue

(-%5ROH &RQWDLQHUDQG6HUYHU3URYLGHU
'HOLYHUDEOH(-%FRPSOLDQWVHUYHUGHSOR\PHQW
WRROVUXQWLPHHQYLURQPHQWIRUHQWHUSULVHEHDQV

3ULPDU\UHVSRQVLELOLW\,PSOHPHQWLQJWKHVSHF

&KDUDFWHULVWLFV([SHUWVLQGLVWULEXWHGREMHFWVDQG
WUDQVDFWLRQVDQGRWKHUORZOHYHOV\VWHPVHUYLFHV Carl

\RXDUHKHUH 
$GYLFH%HDQWXWRULDO

<]\WZQIT"
/HW·VPDNHGHSOR\DQGWHVWWKH$GYLFH%HDQ
7ELLWRITETHECODE COMPILEIT STARTTHESERVER STARTTHE
DEPLOYTOOL USETHEDEPLOYTOOLTOMAKETHE$$ANDTHE Remember, the exam is for
EJB JAR DEPLOYTHEBEAN CREATEACLIENT ANDTESTTHEBEAN 1.3, NOT 1.4! Whatever you J2EE
USINGTHECLIENT4HEONLYTHINGWEWONTDOISINSTALLAND NOT study for the exam usi do, do
CONlGURETHESERVER7EASSUMEYOUALREADYDIDTHAT 1.4 spec. See the intro for mong the
)FYOUDONTYETHAVETHE*%%2)UPANDRUNNING GO details about why the exam re
TOHTTPJAVASUNCOMJEEANDDOWNLOADVERSION and not 1.4Ñthe short versiouses 1.3
OF*%%ITINCLUDESSET UPINSTRUCTIONS THENGOBACKAND we donÕt want to certify fol n is:
DOWNLOADTHE*%%!0)DOCUMENTATION something that almost nobod ks on
CertiÞcation is NOT about ÒIy is using.
the latest and greatest releas know
:K\DUHZHXVLQJ about ÒI know the technology eÓ. ItÕs
WKH5, ":K\FDQ·WZHXVH people are using now. IÕve been that
D5($/DSSVHUYHU" for at least six months.Ó using it

RWKLQJ
:KLFKVHUYHUZRXOGZHXVH":HXVHWKH 7KHUH¶VQ P
[D
5,IRUOHDUQLQJDQGSUDFWLFLQJEHFDXVH RQWKHH ((5,
ZHGRQ¶WNQRZZKLFKVHUYHU\RX¶OOQHHG XWWKH-
DER  U
WRXVHDQGWKH5,LVWKHVLPSOHVWRIDOO RQVHUYH
\R WK H UDSSOLFDWL XWDQ\
WKHIUHHO\DYDLODEOHVHUYHUV:HZDQW 2UDQ NQRZDE
R
¶WKDYHWR LQJ6XQ¶V IRU
LWWREHDVHDV\DVSRVVLEOHIRU\RXWR <RXGRQ G
ROV LQFOX W<RX
IRFXVRQ(-%WHFKQRORJ\DQGLJQRUHWKH YHQGRUWR WRUGHSOR\PHQ
S P H Q DELOLWLHV
WRROVSHFL¿FWDVNV GHYHOR Q R ZZ KDWFDS
GRQHHG
WRN HUZLOO
S OLDQWVHUY
% F R P NQRZ
2SHQVRXUFHSURGXFWVOLNH-%RVVDUH HYHU\(- RXGRQ¶WQHHGWR
\ U
KDYH E X W HDWX VR
UH
VWLOOUHDOSURGXFWLRQVHUYHUVVRWKH\WHQG H Q G R UVSHFL¿FI
DQ\Y LOV
WRKDYHDORWPRUHFRQ¿JXUDWLRQDQG WLRQGHWD
FRQ¿JXUD
DGPLQLVWUDWLRQWDVNVWRFRSHZLWK8VLQJ
WKH5,OHWV\RXVSHQGPRUHWLPHGRLQJ
WKHWKLQJV\RX¶OOKDYHWRGRUHJDUGOHVV
RIWKHVHUYHUZLWKWKHOHDVWDPRXQWRI
WLPHVSHQWOHDUQLQJDVHUYHUVSHFL¿F
DSSURDFKWRWKRVHWKLQJV

 &KDSWHU
LQWURWR(-%

7ZOIVQbMaW]ZXZWRMK\LQZMK\WZa
!LLTHEBEANSINTHISBOOKAREORGANIZEDINTOPACKAGES WHICHMEANSYOU
MUSTBEALITTLEMORECAREFULABOUTCOMPILINGANDRUNNING%VERYINSTRUCTION
INTHISCHAPTERASSUMESYOUVEORGANIZEDYOURPROJECTEXACTLYTHEWAYITS
SHOWNHERE)FYOUDEVIATEFROMTHISSTRUCTURE YOUREONYOUROWNFOR
MAPPINGOURCOMMAND LINEANDDEPLOYMENTFORMULASTOYOUROWNSTRUCTURE

7KHUH·VRQO\21(SURMHFWV
SURMHFWV GLUHFWRU\IRUWKHZKROH
ERRN

(DFKSURMHFWLQWKHERRNKDVLWV
SURMHFWRUJDQL]DWLRQ

RZQGLUHFWRU\7KLVGLUHFWRU\LV
VKRSSLQJ DGYLFH IRUWKHDGYLFHSURMHFW

(DFKSURMHFWKDVD
VUFGLUHFWRU\ IRUMDYD
VRXUFH¿OHV DQGD
FODVVHV VUF FODVVHV VUF FODVVHVGLUHFWRU\ IRU
FODVVE\WHFRGH¿OHV 

7KLVLVZKHUHWKHSDFNDJH
SDFNDJH

GLUHFWRU\VWUXFWXUHEHJLQV
KHDGILUVW KHDGILUVW KHDGILUVW KHDGILUVW 0RVWSURMHFWFODVVHVDUH
LQWKH³KHDG¿UVW´SDFNDJH
ZKLFKPHDQVWKHFODVVHV
PXVWEHLQDGLUHFWRU\
  QDPHGKHDG¿UVW
 
 
 MDYD[HME   MDYD[HME 
 LPSRUWMDYD  LPSRUWMDYD
 UPL5HPRWH([  UPL5HPRWH([
 FHSWLRQ  FHSWLRQ
 

MDYDILOHV MDYDILOHV
FODVVILOHV FODVVILOHV

7ZOIVQbQVOaW]Z\MZUQVITKWUUIVLTQVM
)LOH(GLW:LQGRZ+HOS$FFHVVRUL]H

FGaSURMHFWVDGYLFHVUF FRPSLOHIURPWKHVUFGLUHFWRU\

FGaSURMHFWVDGYLFH UXQFOLHQWVIURPWKHVSHFL¿F
SURMHFWGLUHFWRU\

\RXDUHKHUH 
FRPSLOLQJWKHLQWHUIDFHVDQGEHDQFODVV

+ WUXQTM\PM\ _WQV\MZNIKM[
IVL\PMJMIVKTI[[ 5LJKWQRZWKLVLVKRZ
\RXUSURMHFWVGLUHFWRU\
3OFAR WEVEWRITTENTHETWOINTERFACESANDTHE VWUXFWXUHVKRXOGORRN
BEANCLASS BUTWESTILLHAVETOCOMPILETHEM
!FTERTHAT WELLMAKETHEEJB JARWHICHHOLDS
CLASSlLES NOTSOURCElLES  SURMHFWV

)LOH(GLW:LQGRZ+HOS:K\$P,+HUH

FGaSURMHFWVDGYLFHVUF
DGYLFH
MDYDFGFODVVHVKHDG¿UVW MDYD

7EREUSINGTHEGCOMPILERmAG SOTHECOMMAND FODVVHV VUF


LINEABOVESAYS h#OMPILEALLTHEJAVAlLESINTHE
@HEADlRSTDIRECTORY ANDTHENPUTTHECOMPILED
CLASSlLESINTOTHE@CLASSESDIRECTORY WHICHYOULL
lNDBYGOINGUPONELEVELFROMTHECURRENTSRC
DIRECTORY/HYEAH ALMOSTFORGOT BESURETOPUT KHDGILUVW KHDGILUVW
THECLASSESINTHEIRCORRECT0!#+!'%DIRECTORY
,OOKFORTHEPACKAGESTRUCTUREINSIDETHE@CLASSES
DIRECTORY WHICHMEANSYOUSHOULDSEEADIRECTORY When we
NAMED@HEADlRST AND4(!4SWHERETHECLASS the .class compile, weÕll make
MDYD[HME  LPSRUW
LPSRUWMDYD MDYD[HME 

in the clas Þles land here,


UPL5HPRWH([ LPSRUWMDYD

lLESNEEDTOGOANDIFYOUDO./4lNDTHE FHSWLRQ UPL5HPRWH([


FHSWLRQ

directory. ses/headÞrst
@HEADlRSTDIRECTORYTHERE THENMAKEONEFORME $GYLFH%HDQMDYD $GYLFHMDYD
4HANKSv
MDYD[HME 
LPSRUWMDYD
UPL5HPRWH([
FHSWLRQ

$GYLFH+RPHMDYD

va Þles
All three .jathe src/
must be in directory.
headÞrst

 &KDSWHU
LQWURWR(-%

;\IZ\\PM[MZ ^MZ
/PENUPANEWTERMINALFORTHESERVER9OULLLEAVEITRUNNING ANDWE
WANTTOSEETHEOUTPUT ASITRUNS SODONTUSETHISTERMINALFORANYTHING
ELSE-AKETHEADVICEDIRECTORYYOURWORKINGDIRECTORY

)LOH(GLW:LQGRZ+HOS%ODK%ODK%ODK

FGSURMHFWVDGYLFH
MHHYHUERVH

AW]¼TT[MM[WUM\PQVOTQSM\PQ[
4HE VERBOSEmAGWHICHISNTREQUIRED BUTWELIKE
IT PRINTSOUTABUNCHOFSTUFFINTHETERMINAL

)LOH(GLW:LQGRZ+HOS:KDW7KH"

MHHYHUERVH
-((VHUYHUOLVWHQSRUW
1DPLQJVHUYLFHVWDUWHG
%LQGLQJ'DWD6RXUFHQDPH MGEF'%XUO MGEFFORXGVFDSHUPL&ORXGVFDSH'%FUHDWH WUXH
%LQGLQJ'DWD6RXUFHQDPH MGEF,QYHQWRU\'%XUO MGEFFORXGVFDSHUPL
&ORXGVFDSH'%FUHDWH WUXH
%LQGLQJ'DWD6RXUFHQDPH MGEF'%XUO MGEFFORXGVFDSHUPL&ORXGVFDSH'%FUHDWH WUXH
%LQGLQJ'DWD6RXUFHQDPH MGEF(VWRUH'%XUO MGEFFORXGVFDSHUPL
&ORXGVFDSH'%FUHDWH WUXH
%LQGLQJ'DWD6RXUFHQDPH MGEF&ORXGVFDSHXUO MGEFFORXGVFDSHUPL
&ORXGVFDSH'%FUHDWH WUXH
%LQGLQJ'DWD6RXUFHQDPH MGEF;$&ORXGVFDSHXUO MGEF;$&ORXGVFDSHBB[D
%LQGLQJ'DWD6RXUFHQDPH MGEF;$&ORXGVFDSHBB[DGDWD6RXUFH &20FORXGVFDSHFRUH5HPRWH;
D'DWD6RXUFH#F
6WDUWLQJ-06VHUYLFH,QLWLDOL]DWLRQFRPSOHWHZDLWLQJIRUFOLHQWUHTXHVWV%LQGLQJ
-06'HVWLQDWLRQMPV7RSLFMDYD[MPV7RSLF!%LQGLQJ-06'HVWLQDWLRQMPV4XHXH
MDYD[MPV4XHXH!%LQGLQJ-06&Q[)DFWRU\4XHXH&RQQHFWLRQ)DFWRU\4XHXH1RSURS
HUWLHV!%LQGLQJ-06&Q[)DFWRU\MPV7RSLF&RQQHFWLRQ)DFWRU\7RSLF1RSURSHUWLHV
!%LQGLQJ-06&Q[)DFWRU\MPV4XHXH&RQQHFWLRQ)DFWRU\4XHXH1RSURSHUWLHV!%LQGLQJ
-06&Q[)DFWRU\7RSLF&RQQHFWLRQ)DFWRU\7RSLF1RSURSHUWLHV!
6WDUWLQJZHEVHUYLFHDWSRUW
6WDUWLQJVHFXUHZHEVHUYLFHDWSRUW
-((6'.
6WDUWLQJZHEVHUYLFHDWSRUW
-((6'.
-((VHUYHUVWDUWXSFRPSOHWH

\RXDUHKHUH 
VWDUWLQJGHSOR\WRRO

;\IZ\LMXTWa\WWT
/PENUPANEWTERMINALFORTHEDEPLOYTOOL4HISTOOLIS
PARTOFTHE*%%2) ANDITHASEVERYTHINGYOUNEEDTO
CREATETHEEJB JAR THE$$ ANDTODOTHElNALDEPLOYMENT
INTOTHE2)SERVER

)LOH(GLW:LQGRZ+HOS&KLOO

GHSOR\WRRO
6WDUWLQJ'HSOR\PHQWWRROYHUVLRQ
7\SHµGHSOR\WRROKHOS¶IRUFRPPDQGOLQH
RSWLRQV

aW]¼TT[MM[WUM\PQVOTQSM\PQ[
!LOVELYSPLASHSCREENPOPSUPANDSITSWHILETHE
APPLICATIONLOADS)FYOUCLICKTHESPLASHSCREEN IT
DISAPPEARS SODONTPANICIFITTHENLOOKSLIKENOTHINGS
HAPPENING0ATIENCE

 &KDSWHU
LQWURWR(-%

5ISMIVM_)XXTQKI\QWV WKHUH DUH QR


'XPE 4XHVWLRQV
4HE2)ISA*%%SERVER REMEMBER NOTJUSTAN%*"CONTAINER
3OWEHAVETODOASMALLBITOF*%%ISHSTUFFBEFOREWECAN
Q: $OESTHISMEANTHAT)
MAKETHEEJB JARANDDEPLOYTHEAPP4HISSTEPISWHERE -534HAVEA*%%SERVERIF)
WANTTOUSESERVLETSAND%*"S
WECREATEANEW*%%APPLICATION ANDFORNOW YOUCAN
TOGETHER
THINKOFTHE*%%APPLICATIONASSOMETHINGTHATWRAPSTHE
BEANSANDADDSALITTLEMOREINFORMATIONFORTHESERVER
4HEMAINDIFFERENCEBETWEENA*%%APPLICATIONANDAN
%*"APPLICATIONISTHATA*%%APPLICATIONCANINCLUDEWEB
A: .O7ITHA*%%SERVER
THEWEBCOMPONENTSAND%*"
COMPONENTSSERVLETSAND*30S ASWELLAS%*"COMPONENTS COMPONENTSAREMORETIGHTLY
ALLINTEGRATEDASPARTOFASINGLEAPP INTEGRATED WHICHMEANSYOU
CANHAVEALLOFTHECOMPONENTS
&KRRVH)LOH1HZ$SSOLFDWLRQ RESPECTONEANOTHERSTRANSAC
TIONSANDSECURITY"UTYOURE
ALWAYSFREETOUSEASERVLETAS
ACLIENTTOANENTERPRISEBEAN
EVENIFTHATBEANISNTRUNNING
INTHESAMEAPPLICATIONSERVER
OREVENTHESAMEPHYSICAL
MACHINE !NOTHERADVANTAGE
OFA*%%SERVERISTHEEASEWITH
WHICHYOUCANDEPLOYBOTH
COMPONENTTYPESASPARTOFONE
ENTERPRISEAPPLICATION
(AVINGSAIDALLTHIS CHANCESARE
EXTREMELYHIGHTHATIFYOUREDO
ING%*"APPLICATIONS YOUARE
RUNNINGTHEMINA*%%SERVER
2EMEMBER THEREAREVERYFEW
STANDALONE%*"CONTAINERS
TODAY6IRTUALLYALLSIGNIFICANT
VENDORSRUNTHEIR%*"CONTAINERS
WITHINA*%%SERVER

$-((VHUYHUYHQGRUPXVWSDVVD
PDVVLYHSLOHRIFRPSDWLELOLW\WHVWV
EHIRUHWKHVHUYHUFDQEHFDOOHG
´-((FRPSOLDQWµ$-((VHUYHU
IRUH[DPSOHPXVWLQFOXGHDQ(-%
FRQWDLQHUDQGWKDWFRQWDLQHUPXVW
LPSOHPHQWWKH(-%VSHFLILFDWLRQ

\RXDUHKHUH 
GHSOR\WRROPDNLQJDQHZDSSOLFDWLRQ

6IUMIVL[I^M\PMVM_IXXTQKI\QWV
4HISPARTSALITTLEAWKWARD9OUCANUSETHE"ROWSEBUTTONTONAVIGATE
THROUGHYOUROWNDIRECTORYTREE BUTTHEEASIESTWAYTONAMEAND
SAVETHEAPPLICATIONISTOTYPETHECOMPLETEPATHTOTHElLEYOURE
ABOUTTOCREATE4HETHINGWEREMAKINGISNOTTHEBEANITSELFˆYOU
CANTHINKOFITMORELIKEADOCUMENTTHATHOLDSALLTHEINFORMATION
ABOUTTHEAPPLICATION!SACONVENTION WESAVETHEAPPLICATIONIN
THEPROJECTS;WHATEVER=DIRECTORYˆTHEDIRECTORYCORRESPONDINGTO
THATPARTICULARPROJECT&ORTHE!DVICEBEAN THATMEANSTHEPROJECTS
ADVICEDIRECTORY)FYOUSTARTEDTHESERVERFROMTHEPROJECTSADVICE
DIRECTORYINOTHERWORDS IFADVICEISYOURCURRENTWORKINGDIRECTORY
THENYOULLGETTHERIGHTNAMEANDLOCATIONBYDEFAULT

1DPHWKHDSSOLFDWLRQ$GYLFH$SS
,IQHHGHGLQFOXGHWKHIXOOSDWKWRSURMHFWVDGYLFH$GYLFH$SS
&OLFN2.

DonÕt w
Applicatioorry about the
the tool wn Display Name Þe
in with th ill automatically Þ ld;
Applicatio e Þle name from t ll it
n File Nam
e Þeld. he

 &KDSWHU
LQWURWR(-%

?PI\aW]¼TT[MMIN\MZaW]KZMI\MIVLVIUM
\PMIXXTQKI\QWV
.OW YOUREBACKATTHEMAINSCREENOFTHEDEPLOYTOOL9OUMIGHT
HAVETOCLICKONTHE&ILESOR!PPLICATIONSICONSTOEXPANDTHEM BUT
YOULLSEETHATTHETOOLHASCREATEDAN!PPLICATIONSDIRECTORYWITH
SOMETHINGCALLED!DVICE!PPINSIDE#LICKONTHE!DVICE!PPICON
ANDYOULLSEEINFORMATIONABOUTTHEAPPLICATIONINCLUDINGTHE
NAME LOCATION ANDCURRENTCONTENTS!TTHISPOINT THERESNOTHING
BUTA-%4! ).&DIRECTORYTHATHOLDSMOREINFOABOUTTHEAPP
WHICHWEWONTEVERNEEDTOLOOKAT 

&OLFNRQWKH$GYLFH$SSLFRQ

\RXDUHKHUH 
GHSOR\WRROPDNLQJDQHZHQWHUSULVHEHDQ

6W_TM\¼[UISM\PMVM_MV\MZXZQ[M
JMIV\PMMRJRIZIVL\PM,,
4HISISWHATWEREREALLYAFTERˆTHEACTUALBEAN4HEPREVIOUS
STEPSMAKINGTHE*%%APPLICATION WERETOSATISFYTHE*%%2)
BECAUSEWEHAVETODEPLOYTHEBEANWITHINA*%%APP

&KRRVH)LOH1HZ(QWHUSULVH%HDQ

 &KDSWHU
LQWURWR(-%

6W__M¼ZMQV\PMZMITTaKWWT
6M_-V\MZXZQ[M*MIV?QbIZL
4HISPARTOFTHEDEPLOYTOOLISWHEREALMOSTEVERYTHINGHAPPENS
4HEKEYTHINGSWELLDOARE
5#REATETHEEJB JAR
50UTTHEBEANCLASSANDTHETWOINTERFACESINTOTHEEJB JAR
5#REATETHEDEPLOYMENTDESCRIPTORTHATDESCRIBESTHEBEAN

&OLFN1H[W!

\RXDUHKHUH 
GHSOR\WRROFUHDWHDQHZHMEMDU

+ZMI\M\PMVM_MRJRIZ
&ORNOW JUSTACCEPTTHEDEFAULTS4HERADIOBUTTONONTHETOPLEFTOF
THESCREENSHOWSTHATYOUREMAKINGANEW*!2WITHINTHE!DVICE!PP
APPLICATION.OTICETHATTHE!DVICE!PPISPARTOFADROP DOWNLISTˆIF
THEREWEREOTHEREJB JARSALREADYINTHEAPPLICATION WECOULDHAVE
CHOSENTOPUTTHENEWBEANINAPRE EXISTING*!2
4HETOOLPICKSANESPECIALLYHELPFULDISPLAYNAME h%JBv ANDYOULLSEE
THISBACKONTHEMAINDEPLOYTOOLSCREENWHENWEREDONE4HATNAME
ISNTUSEDANYWHEREINYOURREALAPPLICATION SOITSNOBIGDEAL BUTIF
YOUHAVEMORETHANONE*!2INANAPPLICATION YOUMIGHTWANTTOGIVEIT
AMOREDESCRIPTIVENAME#ART*!2 !CCOUNT*!2 ETC 

&OLFN(GLW

 &KDSWHU
LQWURWR(-%

)LL\PM\PZMMKTI[[NQTM[QVKT]LQVO\PMQZ
XIKSIOMLQZMK\WZa\W\PM2):
4HISISTHEMOSTIMPORTANTPARTOFTHEWHOLEPROCESS)NOTHERWORDS DONT
SCREWITUP4HEKEYISTOGETTHECORRECTCLASSESINTOTHE*!2INTHEIRPACKAGE
DIRECTORYSTRUCTURE ANDONLYTHEIRPACKAGEDIRECTORYSTRUCTURE)NOTHERWORDS
IFYOUPUTTHETHREECLASSlLESINTOTHE*!2WITHOUTTHEHEADlRSTDIRECTORY
YOURBEANWONTDEPLOY/R IFYOUINCLUDETHECLASSESDIRECTORYASWELLASTHE
HEADlRSTDIRECTORY YOURBEANSWONTDEPLOY2EMEMBER THEEJB JARISSTILLA
*!2lLE SOTHEUSUAL*!2RULESABOUTPACKAGESTRUCTURESAPPLYHERE
1DYLJDWHWRWKH$GYLFHGLUHFWRU\
([SDQGWKHFODVVHVGLUHFWRU\WRVHHWKHKHDGÀUVWGLUHFWRU\
6HOHFWWKHKHDGÀUVWGLUHFWRU\
&OLFN$GG

Use the navigation


controls here to get to
your Advice directory
where you can see your,
classes and src direc rie
Then select the headto
Þr
s.
directory. You donÕt st
to expand it... we didhave
it so that you could see
whatÕs in there.

\RXDUHKHUH 
GHSOR\WRROFRQ¿UP-$5FRQWHQWV

+WVNQZU\PI\aW]ILLML764A\PM
XIKSIOMLQZMK\WZaIVL\PMKTI[[NQTM[
9OUGOTTAGETTHISPARTRIGHT,OOKATTHEBOTTOMWINDOWTHATSAYSh#ONTENTSOF
%JBvANDVERIFYTHATTHEONLYTHINGINTHE*!2BESIDESTHE-%4! ).&DIRECTORY
ISTHEHEADlRSTDIRECTORYINCLUDINGTHECONTENTSOFTHEDIRECTORY 4HECLASSIC
MISTAKEWESEEALLTHETIMENOTTHATYOUDEVERDOTHAT ISTOADDONLYTHECLASSlLES
BUTNOTTHEPACKAGEDIRECTORY"ESURETHATYOUHAVETHEHEADlRSTDIRECTORYAND
NOTTHECLASSESDIRECTORY WITHTHETHREECLASSlLES!NOTHERCOMMONMISTAKEISTO
ADDTHESOURCElLESINSTEADOFTHECLASSlLES3ODONTFEELBADIFITHAPPENSTOYOU

9HULI\WKDW\RXKDYHWKHULJKWFODVVHV DQGSDFNDJHGLUHFWRU\
,I\RXGRQ¶WVHOHFWWKHPIURPWKHERWWRPZLQGRZFOLFN5HPRYHDQGVWDUWRYHU
&OLFN2.ZKHQ\RX¶UHGRQHWKHQFOLFN1(;7

 &KDSWHU
LQWURWR(-%

5ISMQ\I;\I\MTM[[;M[[QWVJMIV
.OW WEREATTHEPLACEWHEREWEGIVETHETOOLTHEBEANS@STRUCTURALINFORMATION7HATKINDOF
BEANITIS WHICHCLASSlLEISTHEHOMEINTERFACE ANDSOON2EMEMBER THETOOLUSESTHISTOCREATE
THEDEPLOYMENTDESCRIPTOR!NDTHE%*"CONTAINERUSESTHEDEPLOYMENTDESCRIPTORTOlGUREOUT
HOWTODEPLOYANDMANAGETHEBEAN
4HE!DVICEBEANISSIMPLEˆCLIENTCALLSAMETHODONTHEREMOTEOBJECT THEREMOTEOBJECTRETURNS
AVALUE THENTHEREMOTEOBJECTFORGETSTHEWHOLETHINGEVERHAPPENED%NDOFSTORY4HATSCENARIO
ISJUSTPERFECTFORASTATELESSSESSIONBEANSOLUTION)FTHE!DVICEBEANNEEDEDTOREMEMBERTHEADVICE
ITGAVETOTHECLIENT ANDUSEITINSOMEWAYINFUTUREINVOCATIONSFROMTHATSAMECLIENT THENWED
MAKEITSTATEFUL"UTWEDONT SOWEWONT
!NDASYOULLLEARNLATER ITWOULDNTMAKESENSETOHAVETHE!DVICEBEANBEANENTITYORMESSAGE
DRIVENBEAN"UTITSTOOLATETOMAKEITANYTHINGBUTASESSIONBEANANYWAYˆYOURBEANCLASS
IMPLEMENTSTHE3ESSION"EANINTERFACE3OYOUREALREADYCOMMITTEDTOABEANTYPE"UTWHETHER
THESESSIONBEANISSTATELESSORSTATEFULCANBEALITTLEMORESUBTLE&ORNOW JUSTMAKEITSTATELESS

6HOHFWWKH6HVVLRQUDGLREXWWRQ
6HOHFWWKH6WDWHOHVVUDGLREXWWRQ

DonÕt click the Next


button!! We have way
more to do on this screen
.

\RXDUHKHUH 
GHSOR\WRROUHODWLQJWKHEHDQ¶VFODVV¿OHV

<MTTQ\_PQKPWN\PM\PZMMKTI[[NQTM[QV\PM2):
Q[\PMIK\]IT*-)6KTI[[
9OUHAVETHREECLASSlLESINTHE*!2THEHOMEINTERFACE!DVICE(OME THE
COMPONENTINTERFACE!DVICE ANDTHEBEAN!DVICE"EAN "UTTHE%*"
CONTAINERNEEDSTOKNOWWHICHISWHICH2EMEMBER THENAMINGCONVENTION
DOESNTMEANANYTHINGTOANYONEBUTYOU4HECONTAINERWONTLOOKATTHE
THREECLASSESINTHE*!2ANDRECOGNIZETHAT!DVICE(OMEMUSTBETHEHOME
INTERFACE ANDSOON
.O THENAMINGCONVENTIONISFORYOUANDANYONEELSE
USINGYOURBEANCOMPONENTS
3O NOWYOUHAVETOTELLTHETOOLWHICHOFTHElLESISTHEBEANCLASSWELLDO
THETWOINTERFACESONTHENEXTPAGE 4HETOOL THEN WILLPUTTHISINFOINTO
THEDEPLOYMENTDESCRIPTOR

&OLFNWKH(QWHUSULVH%HDQ&ODVVGURSGRZQPHQX
6HOHFWKHDGÀUVW$GYLFH%HDQ

7KHUHDUHVRPHYHQGRUWRROV
WKDWFDQXVH\RXUQDPLQJ
FRQYHQWLRQDPRQJRWKHU
WKLQJVWRILJXUHRXWZKLFKLV
WKHKRPHZKLFKLVWKHEHDQ
HWF%XWWKH5,GRHVQ·WGRWKLV
DQGGHYHORSPHQWWRROVXSSRUW
LVQRWSDUWRIWKH(-%VSHF
7KHRQO\WRROVUHTXLUHGE\
WKHVSHFDUHIRUWKH'HSOR\HU
QRWWKH%HDQ3URYLGHURU$SS
$VVHPEOHU

 &KDSWHU
LQWURWR(-%

<MTTQ\_PQKPQ[\PM0WUMQV\MZNIKMIVL_PQKP
Q[\PM+WUXWVMV\QV\MZNIKM
.OW YOUHAVETODOTHESAMETHINGYOUDIDFORTHEBEANCLASS BUTWITHTHETWO
INTERFACES9OULLNOTICETHATTHEREARETWODIFFERENTPLACESWHEREYOUCANSELECT
INTERFACESˆ,OCALAND2EMOTE4HISBEANISREMOTEWHICHMEANSITSA*AVA2-)
REMOTESERVICE BUTWELLGETINTOTHATINTHENEXTCHAPTER SOWEREUSINGONLYTHE
BOTTOMSECTION FOR2EMOTEINTERFACES*USTLEAVETHE,OCALINTERFACESSECTIONALONE
4HESTRANGEPARTISTHATTHISSCREENUSESTHETERM2EMOTE)NTERFACERATHERTHAN
2EMOTE#OMPONENT)NTERFACE4HATSJUSTABADINTERFACEDESIGNINTHEDEPLOYTOOL
)TSACTUALLYANARTIFACTOFTHEPREVIOUSVERSIONOF%*" WHENTHEREWEREONLYREMOTE
INTERFACES,OCALINTERFACESARENEWTO%*" BUTWEHAVETOLIVEWITHIT
&OLFNWKH5HPRWH+RPH,QWHUIDFHGURSGRZQPHQX
6HOHFWKHDGÀUVW$GYLFH+RPH

&OLFNWKH5HPRWH,QWHUIDFHGURSGRZQPHQX
6HOHFWKHDGÀUVW$GYLFH

\RXDUHKHUH 
GHSOR\WRROYHULI\VWUXFWXUDOLQIRUPDWLRQ

>MZQNaM^MZa\PQVOWV\PQ[[KZMMV
#HOOSINGTHEBEANCLASS THEHOMEINTERFACE ANDTHECOMPONENTINTERFACEISA
PERMANENTDECISION/NCEYOUREDONEWITHTHERESTOFTHEBEANWIZARD ANDTHE
DEPLOYMENTDESCRIPTORISCREATED YOURESTUCKWITHIT)FYOUACCIDENTALLYMIXUP
THEHOMEANDCOMPONENTINTERFACES YOURBEANWONTWORK)NTHE2) ITWONTEVEN
DEPLOYSOMESERVERSLETYOUDEPLOYSTRUCTURALLYBADBEANS WHICHMEANSTHEYBLOWUP
ATRUNTIME BUTTHE2)WONTEVENLETYOUINTHESERVERDOOR 

%HVXUH\RXKDYHWKHIROORZLQJVHWWLQJV

(QWHUSULVH%HDQ&ODVVKHDGÀUVW$GYLFH%HDQ
5HPRWH+RPH,QWHUIDFHKHDGÀUVW$GYLFH+RPH
5HPRWH,QWHUIDFHKHDGÀUVW$GYLFH

&OLFN1(;7

Be sure your screen looks


just like this before yo
hit the Next > button !u

 &KDSWHU
LQWURWR(-%

AW]¼ZMLWVMKTQKS.QVQ[P
"ECAUSETHISBEANISSOSIMPLE ANDWEDONTCAREABOUTTRANSACTIONS SECURITY
ENVIRONMENTENTRIES ANDDATABASEACCESS WEVEDONEEVERYTHINGWENEEDTO
MAKETHEDEPLOYMENTDESCRIPTORANDPUTITINA*!2WITHTHECLASSlLES
3O YOUCANIGNORETHE4RANSACTIONS-ANAGEMENTSCREEN ALTHOUGHYOULL
BECOMEINTIMATEWITHITLATERINTHEBOOK

&OLFN)LQLVK

\RXDUHKHUH 
GHSOR\WRROPDLQVFUHHQDIWHUPDNLQJDEHDQ

5MIV_PQTMJIKSWV\PMUIQVLMXTWa\WWT[KZMMV
4HINGSHAVECHANGED4HE!DVICE!PPICONEXPANDSTOSHOWYOUREJB JAR
NAMEDh%JBv ANDTHEEJB JAREXPANDSTOSHOWTHECUTEBEANICONNAMED
h!DVICE"EANv)FYOUSELECTTHE!DVICE"EAN YOULLSEEABUNCHOFTABBEDPANELS
THATLLSHOWYOUTHECHOICESYOUMADEINTHEBEANWIZARD3OMEOFTHETHINGSYOU
CHOSECANBECHANGED BUTSOMECANT)NTHE'ENERALPANEL FOREXAMPLE YOU
CANTCHANGETHECLASSlLEDESIGNATIONSFORTHEHOME COMPONENT ANDBEAN)N
FACT YOUCANSEETHATTHEDROP DOWNLISTSFORTHESEAREGRAYED OUTHERE"UTGEE
YOUCANSTILLCHANGEITFROM3TATELESSTO3TATEFUL

$GPLUH\RXUZRUN

 &KDSWHU
LQWURWR(-%

:]VaW]ZJMIV\PZW]OP\PMLMXTWa\WWT^MZQNQMZ
9OUALREADYKNOWYOURBEANCLASSESCOMPILE BUTJUSTBECAUSEITCOMPILES
DOESNTMEANITFOLLOWSBEANLAW4HEVERIlERTAKESYOURJARANDRUNSIT
THROUGHABUNCHOFTESTSTOSEEIFITMEETSTHEMINIMUMREQUIREMENTSFOR
DEPLOYMENT!SYOULEARNMOREABOUTTHE%*"SPEC YOULLSEETHATTHE
VERIlERISTESTINGYOURBEANSCODEANDTHEDEPLOYMENTDESCRIPTOR TOSEE
IFITCOMPLIESWITHTHESPEC&OREXAMPLE ASTATELESSSESSIONBEANSHOME
INTERFACEMUSTHAVEANO ARGCREATE METHODDECLARED ANDNOTHINGELSE
!NDTHEBEANCLASSMUSTHAVEMETHODSTHATMATCHTHOSEDECLAREDINTHE
COMPONENTINTERFACE!NDIFTHECOMPONENTINTERFACEISREMOTE ITMUST
DECLARETHATEACHMETHODTHROWS2EMOTE%XCEPTION$ONTWORRYABOUT
REMEMBERINGTHESEEXAMPLESITSJUSTTOGIVEYOUANIDEAOFTHEKINDSOF
THINGSTHEVERIlERDOES

&OLFNRQWKH(MELFRQ WKHOLWWOHMDU WRKLJKOLJKWLW


&KRRVH7RROV9HULÀHU

&URVV\RXU¿QJHUV

\RXDUHKHUH 
GHSOR\WRROUXQQLQJWKHYHUL¿HU

+TW[MaW]ZMaM[IVLKTQKS73
4HEVERIlERSCREENSHOWSYOUTHENAMEOFTHE*!2ASEJB JAR ICJAR INATMP
DIRECTORY BUTTHATSJUSTHOWTHE2)SAVESYOUREJB JARUNTILYOUREREADYTO
DEPLOY4HETMPlLEANDTHE*!2 WILLGOAWAYWHENYOUDEPLOYORDELETE
THEBEANFROMYOURAPPLICATION
!TLEASTITSSUPPOSEDTO3OMETIMESYOUMIGHTHAVETOlNDTHATDIRECTORYAND
DELETEITYOURSELF2EPEATAFTERME4HEDEPLOYTOOLISFREE4HEDEPLOYTOOLIS
NOTAPRODUCTIONTOOL)DIDNOTPAYANYMONEYFORTHISTOOL)WILLLEARNTO
APPRECIATEITSSTRENGTHSANDLOOKPASTTHEWAYSITISAPAININTHEA

&KRRVHWKH)DLOXUHV2QO\UDGLREXWWRQ
&OLFN2.

 &KDSWHU
LQWURWR(-%

?PM_ 6WNIQTML\M[\[
)FEVERYTHINGVERIlES YOUSEEANICELITTLEMESSAGEINTHE$ETAILSBOXATTHEBOTTOMOFTHE
VERIlERWINDOW)FTHEREAREFAILURES YOULLSEETHEMINTHE2ESULTSBOX9OUCANCLICKONA
@FAILUREMESSAGETOGETMOREDETAILSABOUTWHATWENTWRONG$ONTPANICIFYOUSEEAMILLION
FAILURESUSUALLYYOUCANlXONETHINGANDTHEYALLGOAWAY5NLIKECOMPILERERRORMESSAGES
WHICHARESOMETIMESABOUTASHELPFULAS6#2INSTRUCTIONS THEVERIlERFAILUREMESSAGESARE
PRETTYEXPLICIT9OUCANUSUALLYlGUREOUTEXACTLYWHEREYOUWENTWRONG
3OMETIMES YOUCANlXTHEPROBLEMBACKINTHEMAINDEPLOYTOOLWINDOWBYCLICKINGONONEOF
THETABBEDPANELSANDCHANGINGSOMETHING&OREXAMPLE IFYOUFORGOTTOSPECIFYATRANSACTION
ATTRIBUTEFORANENTITYBEANMETHOD YOUCANGOTOTHE4RANSACTIONSTABBEDPANELINTHE
DEPLOYTOOLWINDOWANDSETTHEATTRIBUTE WITHOUTSTARTINGOVERINTHEBEANWIZARD
"UTIFYOUHAVEPROBLEMSWITHYOURACTUALCLASSlLES YOULLHAVETOMODIFYTHEM RECOMPILE
THEM ANDTHENUPDATEYOUREJB JAR
/R IFTHEPROBLEMISTHATYOUMADEASETTINGINTHEBEAN
WIZARDTHATCANTBECHANGEDLIKE SELECTINGTHEBEANCLASSWHENTHETOOLASKSFORTHEHOME
INTERFACE YOULLHAVETODELETETHEEJB JARANDSTARTOVERWITHTHEBEANWIZARD

%HKDSS\DERXWWKHZRQGHUIXOPHVVDJHDWWKHERWWRP
&OLFN&ORVH

Click Close to put


away the window.
If you click OK,
youÕll just run the
veriÞer again.


4OUPDATEYOUR
EJB JARlLECHOOSE
THE@4OOLSTHEN
@5PDATE&ILES
MENUOPTIONS

\RXDUHKHUH 
GHSOR\WRROGRLQJWKHGHSOR\

<QUM\W,MXTWa
/NCEYOUVEVERIlED YOUREREADYTODEPLOY4HERESNOTMUCHTHATCANGO
WRONGUNLESSSOMETHINGBADHAPPENSINTHESERVER!TTHISPOINT ALMOST
ANYTHINGTHATGOESWRONGCANBElXEDBYSHUTTINGDOWNTHESERVERAND
DEPLOYTOOLANDSTARTINGTHEMBACKUPAGAIN$RASTIC YES BUTITUSUALLYWORKS
3OMETIMESYOUDOHAVETOTAKEEVENHARSHERACTION BYRETURNINGTHESERVER
BACKTOITSFRESHLYINSTALLEDSTATE BUTFORTUNATELYTHERESACOMMANDTHAT
CANDOTHAT7HENALLELSEFAILS BRINGUPANEWTERMINALANDTYPECLEANUP
4HISSCRIPTSHUTSDOWNTHE*%%SERVER BUTITALSOCLEANSOUTALLTHELOGS
DIRECTORIES ANDlLESTHATHAVEBEENMADEONTHATMACHINE!FTERTHAT YOU
CANTRYSTARTINGTHESERVER THENTHEDEPLOYTOOL ANDDEPLOYINGAGAIN!NDIF
YOUEVEROPENTHEDEPLOYTOOLANDYOUDONTSEEYOURAPPLICATION DONTPANIC
*USTGOTOTHE&ILEMENUANDCHOOSE/PEN JUSTLIKEYOUWOULDTOOPENA
DOCUMENTINANYOTHERAPPLICATION4HINKOFTHE*%%APPLIKEADOCUMENTAS
FARASTHEDEPLOYTOOLISCONCERNED

&KRRVH7RROV'HSOR\

 &KDSWHU
LQWURWR(-%

5ISMQ\:M\]ZVI+TQMV\2IZ
/NCEITSTARTS THESERVERISGOINGTODOATONOFTHINGSTOGETYOURBEANREADY/NEOF
THEMISTOGENERATETHECLASSlLESTHATIMPLEMENTYOURTWOINTERFACESTHEHOMEANDTHE
COMPONENTINTERFACES !NDSINCETHEYREREMOTEINTERFACES THESERVERWILLALSOCREATE
THEREMOTESTUBCLASSESFORTHOSEINTERFACES,OTSMOREONTHESELATER 7ELL THECLIENT
NEEDSTHETWOINTERFACESANDTHETWOSTUBS9OUCOULDHAVEGIVENTHECLIENTTHEINTERFACES
SINCEYOUCREATEDTHOSE"UTONLYTHESERVERCANMAKETHESTUBCLASSES ANDTHECLIENTWILL
NEVERWORKWITHOUTTHEM3OYOURCLIENTAPPLICATIONMIGHTBESITTINGTHERE ALLNICEAND
COMPILED ANDJUSTWAITINGFORYOUTOGIVEITTHESTUBCLASSESSOTHATITCANACTUALLYRUN
&ORTUNATELY YOUCANASKTHE2)DEPLOYTOOLTOGIVEYOUACLIENTJARTHATHASEVERYTHINGTHE
CLIENTNEEDSANDALOTMORE ITTURNSOUT BUTSINCETHISISNTAREALPRODUCTIONENVIRONMENT
WEREJUSTGOINGTOLETTHATGO 
6IRTUALLYALL%*"APPLICATIONSERVERSMUSTCREATETHESTUBCLASSES SOYOULLHAVETOlNDOUT
WHEREYOURSERVERPUTSTHEM SOYOUCANGIVETHEMTOTHECLIENT

6HOHFWWKH5HWXUQ&OLHQW-DUFKHFNER[ SXWLWLQWKHSURMHFWVDGYLFHGLUHFWRU\
&OLFN1H[W!

\RXDUHKHUH 
GHSOR\WRROJLYLQJWKHEHDQD-1',QDPH

/Q^MQ\IVIUM[WKTQMV\[KIVTWWSQ\]X
7ERENOWDANGEROUSLYCLOSETODEPLOYMENT ANDTHELASTSTEPISTOGIVETHEBEANA
*.$)NAME4HATSTHENAMECLIENTSUSETOGETAREFERENCETOTHEBEAN7ELL TOWHAT
THECLIENTTHINKSISTHEBEAN BUTWELLSAVETHEGORYDETAILSFORTHENEXTCHAPTER
4HEBEANS*.$)NAMEISSIMPLYTHELOGICALNAMEYOUCHOOSEOR INTHEREALWORLD
WHOEVERDEPLOYSTHEBEAN )TDOESNTHAVETOMATCHANYTHINGFROMTHEBEANITSELF7E
COULD FOREXAMPLE NAMETHISBEAN(OMER WHICHWOULDINFACTMAKEITEVENMORE
FUNANDCHALLENGINGFORTHECLIENTSTHANITALREADYWOULDBEWITHAMEANINGFULNAME

7\SHLQWKH-1',QDPH$GYLVRU
&OLFN)LQLVK
7DNHDGHHSEUHDWKDQGKROGLWXQWLOWKHGHSOR\SURFHVVFRPSOHWHV

$GYLVRU

 &KDSWHU
LQWURWR(-%

?I\KP\PMXZWOZM[[JIZ[OW]X\PMVKMTMJZI\M
7AITFORITWAITFORITWAITFORIT
7HENTHEBEANSDEPLOYED SUCCESSFULLY YOULLSEETHELINEh$EPLOYMENTOF!DVICE!PP
ISCOMPLETEvINTHEWINDOW!TTHATPOINT CLIENTSCANACCESSTHEBEAN
9OUDIDIT

&OLFN2.

ItÕs a miracle !
It worked !

\RXDUHKHUH 
GHSOR\WRROPDLQVFUHHQDIWHUGHSOR\LQJ

6W_aW]¼TT[MM\PM)L^QKM)XXQV[QLM\PM[MZ ^MZ
5NDERTHE3ERVERSICON YOULLSEETHELOCALHOSTICONREPRESENTINGTHE*%%SERVER
YOUSTARTEDBEFOREYOULAUNCHEDTHEDEPLOYTOOL!NDUNDERTHELOCALHOSTICON YOU
CANNOWSEETHATYOUR!DVICE!PPISDEPLOYED9OULLALSOSEETHE5NDEPLOYBUTTON
THATYOUCANUSETO WELL UNDEPLOY

([SDQGWKH6HUYHUV!ORFDOKRVWLFRQVWRVHHWKH$GYLFH$SS

 &KDSWHU
LQWURWR(-%

6W_ITT_MVMMLQ[IKTQMV\
7EHAVEAFRESHLYDEPLOYEDBEANINA*%%SERVER BUTWECANT
TESTITUNTILWEHAVEACLIENT4HECLIENTHASTODOlVETHINGS

 *HWDUHIHUHQFHWRD-1',,QLWLDO&RQWH[W :H·UHXVLQJDVWDQGDORQH-DYD
ZH¶OOOHDUQDERXWWKDWLQWKH&OLHQW9LHZFKDSWHU  SURJUDPDVWKHFOLHQW

 8VHWKH,QLWLDO&RQWH[WWRGRDORRNXSRQWKH ,QWKHUHDOZRUOG\RXUFOLHQWV
KRPHLQWHUIDFHRIWKHEHDQ WKDWZHQDPHG ZLOOOLNHO\EHVHUYOHWVRURWKHU
³$GYLVRU´ZKHQZHGHSOR\HG  EHDQV

 1DUURZDQGFDVWWKHWKLQJZHJHWEDFN
IURPWKHORRNXS 7KDWWKLQJLVVRPHWKLQJ
7KHÀYHWKLQJVWKHFOLHQWPXVW
WKDWLPSOHPHQWVWKH$GYLFH+RPHLQWHUIDFH  GRDUHWKHVDPHUHJDUGOHVVRI
:H¶OOOHDUQDERXWQDUURZLQJLQWKH&OLHQW9LHZ WKHW\SHRIFOLHQW
FKDSWHU
6RXVLQJDVWDQGDORQH-DYD
 &DOOFUHDWHRQWKHKRPHLQWHUIDFHWRJHW SURJUDPWHDFKHV\RXWRGRWKH
EDFNDUHIHUHQFHWRWKHFRPSRQHQWLQWHUIDFH VDPHWKLQJV\RX·OOQHHGWRGR
ZLWKDVHUYOHWFOLHQW
 &DOOJHW$GYLFH  WKHEXVLQHVVPHWKRG
WKHUHDVRQZH¶UHKHUHUHPHPEHU" RQWKH ,I\RXUFOLHQWLVDQRWKHU
FRPSRQHQWLQWHUIDFHDQGSULQWWKHUHVXOW HQWHUSULVHEHDQWKHFRGHZLOO
EHVOLJKWO\GLIIHUHQWEXW\RX
VWLOOKDYHWRGRWKHÀYHVWHSV

7KHUH¶VQRWKLQJRQWKHH[DPDERXWVHUYOHWVRU-63V
7KHH[DPH[SHFWV\RXWRNQRZKRZWKHFOLHQWJHWVDQGXVHVD
EHDQ WKHVWHSVDERYH EXWWKHW\SHRIFOLHQWGRHVQ¶WPDWWHU7KHFOLHQW
FRGHIRUJHWWLQJDUHIHUHQFHWRDEHDQDQGXOWLPDWHO\FDOOLQJPHWKRGVRQWKH
EHDQLVYLUWXDOO\WKHVDPHZKHWKHUWKHFOLHQWLVDVHUYOHWRUVWDQGDORQH-DYD
DSS$QGDOOWKHH[DPFDUHVDERXWLVWKHSDUWRIWKHFRGHZKHUHWKHFOLHQWLV
WU\LQJWRJHWDQGXVHDEHDQ
7KHRQO\NQRZOHGJHRIVHUYOHWVDQG-63V\RXQHHGIRUWKHH[DPLVWRNQRZ
WKDWWKH(-%VSHFGRHV127JXDUDQWHHVXSSRUWIRUWKHP6HUYOHWVDQG-63V
DUHJXDUDQWHHGE\WKH-((VSHFEXWQRWE\WKH(-%VSHF

\RXDUHKHUH 
RUJDQL]LQJWKHFRPSOHWHSURMHFW

7ZOIVQbQVOaW]ZXZWRMK\LQZMK\WZaNWZ\PMKTQMV\

7KLVLVZKDW\RXUSURMHFWVDGYLFH
so we
ster client,in a
GLUHFWRU\VKRXOGORRNOLNHDIWHUZH
ZULWHDQGFRPSLOHWKHFOLHQWFRGH ju st a t e
This is the client class ep it
wonÕt putWeÕre just gonna ke nd class)
package. put it all (source a
easy and vice directory.
This is the client JA SURMHFWV in the ad
the server gave us R
MDYD[HME 
LPSRUWMDYD
UPL5HPRWH([
FHSWLRQ

when we deployed. $GYLFH&OLHQWMDYD







$GYLFH$SS&OLHQWMDU DGYLFH
$GYLFH&OLHQWFODVV

FODVVHV VUF

KHDGILUVW KHDGILUVW


 
 
 
  MDYD[HME  LPSRUW
LPSRUWMDYD MDYD[HME 
 UPL5HPRWH([ LPSRUWMDYD
FHSWLRQ

$GYLFH%HDQFODVV FHSWLRQ

$GYLFHFODVV $GYLFH%HDQMDYD $GYLFHMDYD






MDYD[HME 
 LPSRUWMDYD
UPL5HPRWH([
FHSWLRQ

$GYLFH+RPHFODVV $GYLFH+RPHMDYD

 &KDSWHU
LQWURWR(-%

7KH&OLHQW&RGH $GYLFH&OLHQWMDYD

LPSRUWMDYD[QDPLQJ 
LPSRUWMDYDUPL 
LPSRUWMDYD[UPL  A bunch of imports
LPSRUWKHDG¿UVW 
LPSRUWMDYD[HME 

SXEOLFFODVV$GYLFH&OLHQW^

SXEOLFVWDWLFYRLGPDLQ 6WULQJ>@DUJV ^
QHZ$GYLFH&OLHQW JR 
` InitialContext is our entry po,int
into the JND nami
I ng service
kup.
SXEOLFYRLGJR ^
where we do the loo I
WU\^
Lookup the Aditvicdu e bean using thet.JND
&RQWH[WLF QHZ,QLWLDO&RQWH[W 
ring de plo ym en
2EMHFWR LFORRNXS ³$GYLVRU´  name we gave

$GYLFH+RPHKRPH  $GYLFH+RPH 3RUWDEOH5HPRWH2EMHFWQDUURZ R$GYLFH+RPHFODVV 

$GYLFHDGYLVRU KRPHFUHDWH 
6\VWHPRXWSULQWOQ DGYLVRUJHW$GYLFH  Just go with it for now.
`FDWFK ([FHSWLRQH[ ^ make perfect sense a lit ItÕll all
H[SULQW6WDFN7UDFH 
tle later.
` Finally we get to the ac
` tual business
`
The method declare d in the componenmethod!
(Advice) and implement t erface
ed in the bean claint
ss.

&RPSLOHWKHFOLHQW

)LOH(GLW:LQGRZ+HOS$OO7KLV)RU-XVW7KDW

FGaSURMHFWVDGYLFH The client class


The client JAR Þle
MDYDFFODVVSDWK^&/$663$7+`$GYLFH$SS&OLHQWMDU$GYLFH&OLHQWMDYD

4HECLIENTNEEDSACCESSTOTHETWOINTERFACES!DVICE !DVICE(OME ANDTHETWOSTUB


CLASSESTHATIMPLEMENTTHOSEINTERFACES4HEYREBOTHINTHECLIENT*!2THESERVERMADE
BUTWECANTCOMPILETHECLIENTWITHOUTTHEM4HECLEANESTWAYISTOADDTHEMTOTHE
CLASSPATHATCOMPILE TIME USINGTHEFODVVSDWKCOMPILERmAG

\RXDUHKHUH 
UXQQLQJWKHFOLHQW

5XQWKHFOLHQW
)LOH(GLW:LQGRZ+HOS$OO7KLV)RU-XVW7KDW

FGaSURMHFWVDGYLFH

MDYDFS^&/$663$7+`$GYLFH$SS&OLHQWMDU$GYLFH&OLHQW

!TRUNTIME THECLIENTSTILLNEEDSACCESSTOTHETWOINTERFACES!DVICE
!DVICE(OME ANDTHETWOSTUBCLASSESTHATIMPLEMENTTHOSEINTERFACES
4HEYREBOTHINTHECLIENT*!2THESERVERMADE WEHAVETOADDTHEMTOTHE
CLASSPATH4HEBESTWAYISTOUSETHEFSCOMPILERmAG
.OTE&ORNOW THECLIENTMUSTBEONTHESAMEPHYSICALMACHINEASTHESERVER
,ATER WELLSEEHOWTOCHANGETHIS ANDRUNTHECLIENTAGAINSTA*%%SERVERON
ADIFFERENTMACHINE

,WKLQN,FDQDQVZHUWKDW³\HDKWKLV
<RX·UHNLGGLQJPH LVPDMRURYHUNLOOIRUD+HOOR:RUOGLVK
ULJKW"$OOWKLVZRUNMXVWWR DSSOLNHWKH$GYLFH%HDQ%XWLQWKHFRQWH[WRI
FDOORQHOLWWOHPHWKRGWKDWUHWXUQV DUHDOHQWHUSULVHDSSZLWKD]LOOLRQFXVWRPHUVDGD\
D6WULQJ",KDYHWRGRDOOWKLV KLWWLQJ\RXUVHUYHU DQGDQLQVDQHO\VKRUWGHDGOLQH 
MXVWWRGR+HOOR:RUOGLQ(-%" WKLVH[WUDZRUNDQGUXQWLPHRYHUKHDGLVSUHWW\WULYLDO
(VSHFLDOO\ZKHQ\RXFRQVLGHUHYHU\WKLQJ\RX*(76R,
WKLQN\RXQHHGWRORRNDWWKLVIURPDPRUHUHDO
ZRUOGSHUVSHFWLYH
 2.\HVLI\RX·UHJRQQDEHDOOSLFN\DERXWLW
,·P QRWUHDOEXWWKDWVKRXOGQ·W
DIIHFWP\FUHGLELOLW\

 &KDSWHU
LQWURWR(-%

0RFN([DP
7HICHAREFEATURESEVERY%*"CONTAINERMUSTIMPLEMENTORSUPPORT
1 #HOOSEALLTHATAPPLY
R! !'5)BEANDEPLOYMENTUTILITY
R" 3YNCHRONOUSINVOCATIONFORALLBEANTYPES
R# 4RANSACTIONSUPPORTFORALLBEANTYPES
R$ 2EMOTECLIENTVIEWSFORALLBEANTYPES
R% *.$)NAMESPACE

7HICHAREGUARANTEEDCAPABILITIESOF%*"#HOOSEALLTHATAPPLY
2
R! ,OCALHOMEINTERFACESFORMESSAGE DRIVENBEANS
R" $IRTYDETECTIONMECHANISMSTOREDUCEMEMORYFOOTPRINTS
R# 2UN ASSECURITYIDENTITYFUNCTIONALITY
R$ 4HE*$"#EXTENSION
R% 3ESSIONBEANFAILOVER

7HICHAREFEATURESIN%*"#HOOSEALLTHATAPPLY
3
R! 0ORTABLElNDERQUERYSYNTAX
R" #ONTAINERMANAGEDPERSISTENCE
R# ,OCALINTERFACESFORSESSIONBEANS
R$ 8-,BASEDDEPLOYMENTDESCRIPTORS
R% 3YNCHRONOUSMESSAGE DRIVENBEANS

\RXDUHKHUH 
PRFNH[DPDQVZHUV

0RFN([DP$QVZHUV

1 7HICHAREFEATURESEVERY%*"CONTAINERMUSTIMPLEMENTORSUPPORT (spec: 30)


#HOOSEALLTHATAPPLY
to be GUI
R! !'5)BEANDEPLOYMENTUTILITY - it doesnÕt have
R" 3YNCHRONOUSINVOCATIONFORALLBEANTYPES - MDBs cannot be synchronous
R# 4RANSACTIONSUPPORTFORALLBEANTYPES
R$ 2EMOTECLIENTVIEWSFORALLBEANTYPES - MDBs d
o not have clie
R% *.$)NAMESPACE nt views

7HICHAREGUARANTEEDCAPABILITIESOF%*"#HOOSEALLTHATAPPLY
2 ve clients
R! ,OCALHOMEINTERFACESFORMESSAGE DRIVENBEANS - MDBs donÕt ha
R" $IRTYDETECTIONMECHANISMSTOREDUCEMEMORYFOOTPRINTS - nice, but not guaranteed
R# 2UN ASSECURITYIDENTITYFUNCTIONALITY
R$ 4HE*$"#EXTENSION
R% 3ESSIONBEANFAILOVER - maybe available, but not gua
ranteed

3 7HICHAREFEATURESIN%*"#HOOSEALLTHATAPPLY
(spec: 25-26)
R! 0ORTABLElNDERQUERYSYNTAX
R" #ONTAINERMANAGEDPERSISTENCE
R# ,OCALINTERFACESFORSESSIONBEANS
R$ 8-,BASEDDEPLOYMENTDESCRIPTORS
R% 3YNCHRONOUSMESSAGE DRIVENBEANS - MDBs are always asynchron
ous

 &KDSWHU
architectural overview
5
4
4 (-%$UFKLWHFWXUH

,WDOOORRNVVR
LPSUHVVLYHIURPWKLV
YLHZ7RREDGZHFDQ·W
VWD\DWWKLVOHYHO

(-%LVDERXWLQIUDVWUXFWXUH<RXUFRPSRQHQWVDUHWKHEXLOGLQJEORFNV:LWK
(-%\RXFDQEXLOGELJDSSOLFDWLRQV7KHNLQGRIDSSOLFDWLRQVWKDWFRXOGUXQHYHU\WKLQJ
IURPWKH9LFWRULD¶V6HFUHWEDFNHQGWRGRFXPHQWKDQGOLQJV\VWHPVDW&(51%XWDQ
DUFKLWHFWXUHZLWKWKLVPXFKÀH[LELOLW\SRZHUDQGVFDODELOLW\LVQ¶WVLPSOH,WDOOEHJLQVZLWK
DGLVWULEXWHGSURJUDPPLQJPRGHOZKHUHFOLHQWVVHUYHUVDQGHYHQGLIIHUHQWSLHFHVRIWKH
VDPHDSSOLFDWLRQDUHUXQQLQJZKRNQRZVZKHUHRQWKHQHWZRUN%XWKRZGRHVWKHFOLHQW
¿QGDEHDQ"+RZGRHVWKHFOLHQWFDOOPHWKRGVLW":K\DUHWKHUHGLIIHUHQWEHDQW\SHV":LOO
%HQPDUU\-/R"
WKLVLVDQHZFKDSWHU 
QRREMHFWLYHV

%DFNJURXQG

:H¶UHLQWKLVFKDSWHUIRUEDFNJURXQGQRWEHFDXVHRIDQH[DP
REMHFWLYH$OWKRXJK\RXFRXOGVD\WKDWHYHU\REMHFWLYHLQWKH
H[DPGHSHQGVRQ\RXUXQGHUVWDQGLQJZKDW¶VLQWKLVFKDSWHU

%XWGRQ¶WZRUU\ZH¶OOKDYHSOHQW\RIREMHFWLYHVEHJLQQLQJ
ZLWK&KDSWHU%\&KDSWHU\RXZLOOORRNEDFNORQJLQJO\RQ
WKLVFKDSWHUDQGUHPHPEHUZKDWLWZDVOLNHQRWWRKDYHDQ\
REMHFWLYHV<RX¶OOPLVVWKLVFKDSWHUZKHQLW¶VJRQHVRVDYRUWKH
PRPHQWV\RXKDYHZLWKLW

 &KDSWHU
DUFKLWHFWXUDORYHUYLHZ

AW]ZMUMUJMZ\PQ[XQK\]ZM
"UTITWASTOOHIGH LEVELTOGETUSANYWHERE4HINKABOUTHOWMUCHIS
MISSINGFROMTHISPICTURE,IKE HOWDOESTHECLIENTGETAREFERENCETO
SOMETHINGRUNNINGONADIFFERENTMACHINE(OWDOESTHECLIENTACTUALLY
COMMUNICATEWITHTHEBEAN(OWISITTHATTHESERVERCANSTEPINTOTHE
MIDDLEOFACLIENT TO BEANMETHODCALL
"ENEATH%*" THERES*AVASDISTRIBUTEDTECHNOLOGYFOR2EMOTE-ETHOD
)NVOCATION2-) !LTHOUGH%*"HIDESSOMEOFTHECOMPLEXITIESOF2-)
FROMTHEBEANDEVELOPER ITSSTILLTHERE ANDUNLESSYOUTRULYUNDERSTANDIT
SOMEPIECESWILLNEVERMAKESENSE
3O WESTARTOURDESCENTFROMAHIGH LEVELVIEWTOTHEBLOODANDGUTSOF%*"
WITHALESSONON2-))FYOUREONEOFTHEFORTUNATEWHOVEALREADYWORKED
ALOTWITH2-) YOUCANSKIPTHISANDGOSTRAIGHTTOTHEPARTWHEREWETALK
ABOUTTHEWAYSINWHICH%*"USES2-)"UTYOUSHOULDSTILLATLEASTSKIMIT
EVENIFYOUREANEXPERIENCED%*"DEVELOPER IFFORNOOTHERREASONTHANTO
GETCOMFORTABLEWITHTHETERMINOLOGYANDPICTURESWELLUSETHROUGHOUTTHE
RESTOFTHEBOOK
/+ BACKTOWHEREWESTARTEDˆWHATSMISSINGFROMTHISPICTURE3TARTBY
LOOKINGATTHEPLACESWHEREAMIRACLEOCCURS

eÕs
too soon to tell if ththerere
a miracle he re , bu t
miracle occurs here probably is...

miracle occurs here VHUYHU


&OLHQW
EL]LQWHUIDFH

VHUYLFHV

W
DQ

(-% (Q
& OL  REMHF WHUS VHEH
HQWREMHFW UL

'%

$ULGLFXORXVO\KLJKOHYHOYLHZRI(-%DUFKLWHFWXUH

\RXDUHKHUH 
UHPRWHPHWKRGV

5ISQVOIZMUW\MUM\PWLKITT
7HENYOUWRITEACLIENTTOACCESSABEAN THECLIENTISEITHERLOCAL
ORREMOTE!LOCALCLIENTMEANSTHECLIENTISRUNNINGINTHESAME
*6-ASTHEBEAN)NOTHERWORDS BOTHTHEBEANANDTHECLIENT
LIVEINTHESAMEHEAP7ELLTALKABOUTTHATMUCHMOREINTHE :LWK50,\RXUFOLHQWREMHFW
#LIENT6IEWCHAPTER BUTFORNOW REMEMBERTHATLOCALMEANS JHWVWRDFWOLNHLW·VPDNLQJD
SAMEHEAP*6-#HANCESARE YOULLUSELOCALCLIENTSONLYWITH
ENTITYBEANS ANDONLYUNDERVERYSPECIALCIRCUMSTANCES UHPRWHPHWKRGFDOO%XWZKDW
9OULLUSEAREMOTECLIENTWHENYOUWANTABEANTOBEUSEDBYTHE
OUTSIDEWORLD-OSTENTERPRISEAPPLICATIONSHAVEAREMOTECLIENT
LW·VUHDOO\GRLQJLVFDOOLQJD
EVENIFSOMEOFTHEBEANSUSEDINTHEAPPLICATIONTALKTOONE PHWKRGRQD´SUR[\µREMHFW
ANOTHERASLOCALCLIENTS7ELLEXPLOREEVERYGORYDETAILABOUT
THISBEFORETHEBOOKISOVER UXQQLQJLQWKHVDPHKHDS
3OHOWDOESANOBJECTINONEHEAP*6-DIRECTLYCALLAMETHOD ZLWKWKHFOLHQW7KHSUR[\LV
ONAREFERENCETOANOBJECTRUNNINGINANOTHERHEAP*6-
4ECHNICALLY ITSNOTPOSSIBLE*AVAREFERENCESHOLDBITSTHATDONT FDOOHGD´VWXEµDQGLWKDQGOHV
MEANANYTHINGOUTSIDETHECURRENTLYRUNNING*6-)FYOUREAN
OBJECTANDYOUHAVEAREFERENCETOANOTHEROBJECT THATOBJECTMUST DOOWKHORZOHYHOQHWZRUNLQJ
BEINTHESAMEHEAPWITHYOU
VRFNHWVDQGVWUHDPV
*AVA2-)2EMOTE-ETHOD)NVOCATION SOLVESTHISPROBLEMBY
GIVINGTHECLIENTAPROXYCALLEDASTUB OBJECTTHATACTSASTHE
GO BETWEENFORTHECLIENTAND2EMOTEOBJECT4HECLIENTCALLS
AMETHODONTHESTUB ANDTHESTUBTAKESCAREOFTHELOW LEVEL
COMMUNICATIONSOCKETSANDSTREAMS WITHTHE2EMOTEOBJECT
,
et en d s to be th e Remote object
Helper ÒstubÓ prproxy... something that knows .
but itÕs just a icate with the Remote object
how to commun
&OLHQWKHDS JHW$GYLFH
$ G Y LF H 6HUYHUKHDS
JHW

UHP E· 5H
W

RWH¶VWX PRWH REMHF


FOL  
HQWREMH FW
The clientÕs goal is to ca
object (the thing that doll a method on the Remote The Remote Object is the object with the
Remote object is in a dif es the real work). But since the method that actually does the real work
method on a local ÒstubÓ ferent heap, the client calls a for whatever that method is supposed to do
over the network) object (which in turn sen (checkCredit(), calculatePi(), etc.).
ds info

 &KDSWHU
DUFKLWHFWXUDORYHUYLHZ

<PMZM¼[I¹PMTXMZºWV\PM[MZ ^MZI[_MTT
4HE2EMOTEOBJECTHASTHEMETHODTHECLIENTWANTSTOCALL"UTWHENTHESTUB
MAKESANETWORKCONNECTIONTOTHESERVER SOMETHINGONTHESERVERHASTOTAKETHE
INFORMATIONINTHEINCOMINGSTREAMANDTURNITINTOAMETHODCALLONTHE2EMOTE
OBJECT9OUCOULDPUTTHENETWORKINGCODEINTOYOUR2EMOTEOBJECT BUTTHAT
DEFEATSTHEWHOLEPOINTOF2-)ˆTOMAKEITASEASYFORYOURCLIENTTOCALLAMETHOD
ONANOBJECTACROSSTHENETWORKASITISTOCALLAMETHODONANOBJECTINTHESAME
HEAP4HEGOALOF2-)ISTOPROMOTENETWORKTRANSPARENCY)NOTHERWORDS THEFACT
THATTHEOBJECTSAREINDIFFERENTMACHINESSHOULDBENEARLYTRANSPARENTTOTHE
DEVELOPER7HICHMEANSTOYOULESSCODEˆSIMPLERCODE
3O WITHTHATASTHEGOAL 2-)TAKESCAREOFTHESERVER SIDEOFTHEMETHODCALLAS
WELL4HETHINGONTHESERVER SIDETHATACCEPTSTHESOCKETCONNECTIONISCALLEDA
SKELETON)TSTHECOUNTERPARTTOTHECLIENTSTUB)NTHEEARLYVERSIONSOF2-) FOR
EVERYSTUBTHEREWASAMATCHINGSKELETONOBJECT4ODAY THOUGH THATSNOTALWAYS
TRUE4HEFUNCTIONALITYOFTHESKELETONHASTOHAPPENSOMEHOWONTHESERVER SIDE
BUTANACTUALSKELETONOBJECTISOPTIONAL7EWONTGOINTOANYOFTHEDETAILSBECAUSE
ITDOESNTMAKEANYDIFFERENCETOUSWITH%*"(OWTHECONTAINERCHOOSESTO
IMPLEMENTITSSKELETONBEHAVIORISUPTOTHEVENDOR
!LLWECAREABOUTISTHATSOMETHINGISONTHESERVERTHATTHESTUBKNOWSHOWTO
TALKTO ANDTHATSOMETHINGKNOWSHOWTOINTERPRETTHEMESSAGEFROMTHESTUBAND
INVOKEAMETHODONTHE2EMOTEOBJECT

tion
pt s th e in co m in g Socket connyiecng,
The skeleton ac, ceÞgures out what the stub is ansad calls
from the stub hod to call on which object)
(i.e. which met the Remote object.
the method on
&OLHQWKHDS 6HUYHUKHDS
JHW$GYLFH
JHW$GYLFH
$ G YL F H
JHW

5H
W

UHP E· ¶VNHOHWRQ· PRWH REMHF


RWH¶VWX 
FOL 
HQWREMHFW

a method call to To the Remote object, itÕs just a method call


To the client, itÕs juste same heap. from another object in the same heap.
another object in th

\RXDUHKHUH 
(-%DUFKLWHFWXUH

WKHUH DUH QR
'XPE 4XHVWLRQV
Q: (OWCANYOUHAVEhNETWORKTRANSPARENCYv Q: !M)RESPONSIBLEFORBUILDINGTHESTUB
7HATHAPPENSIFTHENETWORKORTHESERVERIS ANDTHESKELETON(OWDOESTHESTUBKNOWWHAT
DOWNWHENTHECLIENTCALLSTHEREMOTEMETHOD)T METHODSMY2EMOTEOBJECTHAS&ORTHATMATTER
SEEMSLIKETHERESA,/4MORETHATCANGOWRONG HOWDOESTHECLIENTKNOWWHATMETHODSMY
THANIFTHECLIENTOBJECTISJUSTMAKINGAPLAINOLD 2EMOTEOBJECTHAS
METHODCALLTOANOTHEROBJECTINTHEHEAP

A: A: .O YOUDONTNEEDTOMAKETHESTUBSAND
9ES YES9OUOBVIOUSLYUNDERSTANDTHAT SKELETONS7ITHPLAINOLD2-) YOUUSETHE2-)
hNETWORKTRANSPARENCYvISNOTONLYAMYTH ITSABAD COMPILERRMIC TOGENERATETHEM"UTFORTHEOTHER
IDEA/FCOURSETHEREMOTEMETHODCALLCANFAILIN TWOQUESTIONSWELLLETYOUTHINKABOUTITFORA
WAYSALOCALMETHODCALLWOULDNOT ANDTHECLIENT MINUTEBEFOREWELOOKATTHEDETAILS
NEEDSTOBEPREPAREDFORTHAT
4HATSWHY IN*AVA2-) ALLREMOTEMETHODSMUST
DECLAREAJAVARMI2EMOTE%XCEPTION WHICHISA
CHECKEDEXCEPTION4HATMEANSTHECLIENTHASTO
HANDLEORDECLARETHEEXCEPTION)NOTHERWORDS YiX`e
THECLIENTCANTREALLYPRETENDTHEMETHODCALLISNT
REMOTE
gfn\i
"UTWAIT THERESMOREˆTHECLIENTHASTODO
SOMETHINGSPECIALTOEVENGETTHEREFERENCETOTHE
,Q-DYDZKDW¶VWKHEHVWZD\WRWHOOWKHFOLHQW
2EMOTEOBJECTINTHEFIRSTPLACE!NDWHATEXACTLYIS
THATREFERENCE)TSREALLYAREFERENCETOTHE2EMOTE ZKDWPHWKRGVVKHFDQFDOO",QRWKHUZRUGV
OBJECTSPROXYˆTHESTUB KRZGR\RXH[SRVH\RXUSXEOLFPHWKRGVWR
RWKHUV"
3ONO 2-)DOESNOTGIVEYOUTRUENETWORK
TRANSPARENCY4HEDESIGNERSOF2-)WANTTHECLIENT
TOACKNOWLEDGETHATTHINGSCANGOHORRIBLYWRONG
WITHAREMOTEMETHODINVOCATION
7KLQNDERXWWKHUHODWLRQVKLSEHWZHHQWKH
3TILL WHENYOULOOKATEVERYTHINGTHATNEEDSTO
VWXEDQGWKHDFWXDO5HPRWHREMHFW:KDW
HAPPENTOMAKEAREMOTEMETHODCALLNETWORKING
3OCKETCONNECTION STREAMS PACKAGINGUP PXVWWKH\ERWKKDYHLQFRPPRQ"
ARGUMENTS ETC THECLIENTHASTODOONLYACOUPLE
OFTHINGSUSEASPECIALLOOKUPPROCESSTOGETTHE
REFERENCETOTHEREMOTEOBJECT ANDWRAPREMOTE
METHODCALLSINATRYCATCH4HATSPRETTYTRIVIAL
:H·OOVHHWKHDQVZHUVHYHUDOSDJHVIURPQRZ
WHENYOUCONSIDERWHATITWOULDTAKEIFTHECLIENT
HADTOMANAGETHEWHOLEPROCESS
!NDTHERESEVENAWAYTOMAKEITEASIERFORTHE
CLIENT USINGAN%*"DESIGNPATTERNWELLSEEINTHE
LASTCHAPTER 

 &KDSWHU
DUFKLWHFWXUDORYHUYLHZ


?PI\IJW]\IZO]UMV\[IVLZM\]ZV^IT]M['
7KHVWXEDQGVNHOHWRQ
2EMOTEMETHODCALLSAREJUSTLIKELOCALMETHODCALLS EXCEPTFORTHE DUHLQLWIRUWKHZKROH
2EMOTE%XCEPTIONS!NDWHATGOODWOULDAMETHODCALLBEIFYOU URXQGWULS7KH\·UHERWK
COULDNTPASSARGUMENTSORGETARETURNVALUE9OUMIGHTASWELLBE UHVSRQVLEOHIRUSDFNLQJ
DOING20#
THEWAYYOURPARENTSDID DQGXQSDFNLQJWKHYDOXHV
4HISBRINGSUSTOONEOFTHEKEYJOBSFORTHESTUBANDTHESKELETONOR VKLSSHGRYHUWKHZLUH
WHATEVERISDOINGTHESKELETONISHTHINGS ˆPACKINGANDUNPACKING %XWLWZRQ·WZRUNLIWKH
VALUESSHIPPEDOVERTHEWIRE DUJXPHQWVDQGUHWXUQ
2EMEMBER THECLIENTISREALLYCALLINGAMETHODONTHESTUB ANDTHE YDOXHVDUHQ·WVKLSSDEOH
STUBISLOCALTOTHECLIENTIEINTHESAMEHEAP 3O FROMTHECLIENTS
PERSPECTIVE THERESNOTHINGSPECIALABOUTSENDINGARGUMENTSWITH 6KLSSDEOHYDOXHVPXVWEH
THEMETHOD)TSTHESTUBTHATDOESALLTHEDIRTYWORK4HESTUBHASTO RQHRIWKHVH
PACKAGEUPTHEARGUMENTSTHROUGHAPROCESSKNOWNASMARSHALLING
ANDSENDTHEMINTHEOUTPUTSTREAM THROUGHTHE3OCKETCONNECTION 5 3ULPLWLYHV
WITHTHESERVER
4HESKELETON THINGONTHESERVERHASTOPROCESSTHESTREAMFROMTHE 5 6HULDOL]DEOHREMHFWV
STUB UNPACKTHEARGUMENTS lGUREOUTWHATTODOWITHEVERYTHINGFOR
INSTANCE WHICHMETHODTOCALLONWHICHOBJECT ANDTHENINVOKETHE 5 $QDUUD\RUFROOHFWLRQ
METHODALOCALCALL ONTHE2EMOTEOBJECT WITHTHEARGUMENTS RISULPLWLYHVRU
6HULDOL]DEOHREMHFWV
4HENITALLHAPPENSINREVERSE4HESKELETONPACKAGESUPTHERETURN
VALUESANDSHIPSTHEMTOTHESTUB WHOUNPACKSTHEMANDGIVESTHEM
TOTHECLIENTASPLAINOLDGARDEN VARIETYRETURNVALUES"UTINORDERTO
5 $5HPRWHREMHFW
SENDARGUMENTSANDRETURNVALUES THEYMUSTBEPRIMITIVES 3ERIALIZABLE
OBJECTS ANARRAYORCOLLECTIONOFPRIMITIVESOR3ERIALIZABLEOBJECTS ORA
2EMOTEOBJECT

JHW1DPH 
1DPH  JHW1DPH 
&OLHQW JHW
6HUYHU

´-RQµ
´-RQµ VNHOHWRQ
´-RQµ VWXE 5HPRWHREMHFW
FOLHQW

e argument and The skeleton (or whatever is doing the skeleton


The stub packages upththod call information, behavior on the server) unpacks the method
sends it with the meturn value for the client. arguments for the Remote object method call, then
then unpacks the re packs and ships the return value.

53&VWDQGVIRU5HPRWH3URFHGXUH&DOO%RULQJ
\RXDUHKHUH 
SDVVLQJREMHFWVUHPRWHO\

:DLW DPLQXWH-DYD
SDVVHVREMHFWVE\SDVVLQJ
DFRS\RIWKHREMHFWUHIHUHQFH
QRWWKHREMHFWLWVHOI6RKRZFDQ
7+$7HYHUZRUNZLWKDUHPRWH
PHWKRGFDOO"7KDWUHIHUHQFH
ZRXOGQ·WPHDQDQ\WKLQJRQ
WKHRWKHUKHDS

,QRUGLQDU\ORFDOPHWKRGFDOOV-DYD
SDVVHVDQREMHFWUHIHUHQFHE\YDOXH
,QRWKHUZRUGVE\FRS\LQJWKHELWVLQ
WKHUHIHUHQFHYDULDEOH

7KHREMHFWLWVHOILVQHYHUSDVVHG

WeÕll think of
remote controla local Java reference as a 'RJ
Something we cato an object on the heap. REMHFW
call methods) on n use to push buttons (i.e.
the object. ^a\g

'RJ

ng here??
What are we really passi
YRLGJR ^
'RJ¿GR QHZ'RJ 
WKLVWUDLQ3HW ¿GR 
`
A copy of the reference (the remote control),
not the Dog object

'RJ
YRLGWUDLQ3HW 'RJDUJ ^` REMHFW
Yj_
:HNQRZ\RXNQRZDOOWKLV
REYLRXVO\EXWMXVWVR¶ZH·UHDOO ter and the
Now the ÒargÓ parame
^a\g
tical copies. Both
RQWKHVDPHSDJH· ZKLFKLV 'RJ
DQRGGWKLQJWRVD\VLQFHZH en
ÒÞdoÓ variable are idDog object. 'RJ
FOHDUO\$5(DOORQWKHVDPH
SDJH EXW\RXJHWWKHLGHD
reference the same

 &KDSWHU
DUFKLWHFWXUDORYHUYLHZ

?PI\ZMITTaOM\[XI[[ML _PMVaW]
XI[[IVWJRMK\\WIZMUW\MUM\PWL'

'RJ
REMHFW

^a\g

'RJ ,I\RXUUHPRWHPHWKRG
&OLHQW KDVDQDUJXPHQW
,PDJLQHWKLV&/,(17FRGH WKDW·VDQREMHFWW\SH
WU\^
WKHDUJXPHQWLV
NOW what are we SDVVHGDVDIXOOFRS\
'RJ¿GR QHZ'RJ 
really passing here?? RIWKHREMHFWLWVHOI
UHPRWH6WXEWUDLQ3HW ¿GR  )RUUHPRWHFDOOV
`FDWFK 5HPRWH([FHSWLRQH[ ^ -DYDSDVVHVREMHFWV
H[SULQW6WDFN7UDFH  E\REMHFWFRS\QRW
!
`
'RJ
REMHFW
NOT the reference value UHIHUHQFHFRS\
ItÕs a serialized copyctof. $VHULDOL]HGFRS\RI
the actual Dog obje
$QGWKLV5(027(PHWKRG WKHREMHFWLVVKLSSHG
WRWKH5HPRWHREMHFW
YRLGWUDLQ3HW 'RJDUJ ^`

py 6HULDOL]DEOH
The server Dog is a co
of the client Dog.
'RJ 'RJ
REMHFW REMHFW 'RJ

^a\g Yj_

'RJ 'RJ
'RJLPSOHPHQWV
&OLHQW 6HUYHU 6HULDOL]DEOH

\RXDUHKHUH 
UHPRWHPHWKRGDUJXPHQWV

*HWWLQJWKHREMHFWDUJXPHQWIURP
WKHFOLHQWWRWKHVHUYHU

 &OLHQWLQYRNHVWUDLQ3HW P\'RJ RQWKH


VWXESDVVLQJDFRS\RIWKHUHIHUHQFHWR
WKH'RJREMHFW
Client passes a co
of a reference to py
the Dog object on
'RJ the heap. ThereÕs
only one Dog object.
3H 5HPRWH
WUDLQ W P\'RJ VNHO
REMHFW
FOLHQW
VWXE

 7KHVWXEPDNHVDVHULDOL]HGFRS\RI
WKHREMHFWDQGVHQGVWKDWFRS\RYHU
WKHZLUHWRWKHVNHOHWRQ
a serialized
The stub sendDs og.
copy of the
'RJ
'RJ

VNHO 5HPRWH
REMHFW
FOLHQW
VWXE

 &KDSWHU
DUFKLWHFWXUDORYHUYLHZ

8QSDFNLQJ GHVHULDOL]LQJ WKH


REMHFWRQWKHVHUYHU

 7KHVNHOHWRQGHVHULDOL]HVWKHSDVVHG
DUJXPHQWFUHDWLQJDQHZ'RJREMHFWLQWKH
5HPRWHREMHFW·VKHDS

'RJ

VNHO 5HPRWH
REMHFW
FOLHQW
VWXE 'RJ

The new D
one on the ocgli is just like the
ent side.

 7KHVNHOHWRQLQYRNHVWKHPHWKRGRQ
WKH5HPRWHREMHFWSDVVLQJDSODLQROG
-DYDUHIHUHQFHWRWKHQHZ'RJREMHFW

'RJ

VNHO 5HPRWH
WUD
LQ3HW QHZ'RJ REMHFW
FOLHQW
VWXE 'RJ

mote object gets


By the time the Reion the Dog is
the method invocat on, the heap.
just another object
\RXDUHKHUH 
UHPRWHPHWKRGDUJXPHQWV

WKHUH DUH QR
'XPE 4XHVWLRQV
Q: )MSITTINGHEREWITHA(ASH-APFULLOF Q: )FSOMETHINGYOUREPASSINGTOAREMOTE
3ERIALIZABLE#USTOMEROBJECTSWITH3TRINGKEYS METHODISNT3ERIALIZABLE ISTHISACOMPILE TIMEOR
$O)HAVETOWORRYABOUTWHETHERTHE(ASH-AP RUNTIMEFAILURE
ITSELFIS3ERIALIZABLE

A: A: 2UNTIME5SUALLY ANYWAY2EMEMBERTHATTHE
/+ THISISKINDOFATRICKYONE!LLOFTHE DECLAREDARGUMENTORRETURNTYPEISNOTNECESSARILY
#OLLECTIONIMPLEMENTATIONSINTHE*3%!0)ARE THESAMEASTHEACTUALRUNTIMETYPE
3ERIALIZABLE3OYOUDONTHAVETOWORRYABOUTA 4HEONLYCASEWHEREITCANFAILATCOMPILETIMEISIF
(ASHMAPˆASLONGASWHATYOUPUTINTHE(ASHMAP THEREMOTEMETHODACTUALLYUSES3ERIALIZABLEASTHE
IS3ERIALIZABLE YOUREFINE DECLAREDTYPEOFTHEARGUMENTORRETURNVALUE
"UTTHEREISONEPLACEWHERETHINGSCANFAIL SXEOLFYRLGWDNH,W 6HULDOL]DEOHV 
#HANCESARE YOULLNEVERSEETHIS BUTITSSTILLWORTH
MENTIONING9OUPROBABLYALREADYKNOWTHATTHE )NTHATCIRCUMSTANCE THECOMPILERCANUSENORMAL
-APCLASSESLIKE(ASH-APAND(ASHTABLEHAVEA *AVATYPE CHECKINGTOSEEIFTHEDECLAREDTYPEOFTHE
VALUES METHODTHATRETURNSACOLLECTIONOFJUST THINGBEINGPASSEDIMPLEMENTS3ERIALIZABLE
THEVALUES WITHOUTTHEKEYS)NOTHERWORDS IFYOU -OSTOFTHETIME THEDECLAREDARGUMENTORRETURN
CALLEDITONYOUR(ASH-AP YOUDGETA#OLLECTIONOF TYPEISSOMETHINGOTHERTHAN3ERIALIZABLELIKE$OG
#USTOMEROBJECTS !RRAY,IST 3TRING ETC SO*AVAWONTKNOWWHETHERTHE
"UTWHATTYPEOFCOLLECTION!NDTHERESTHE RUNTIMEOBJECTIS3ERIALIZABLEUNTILITACTUALLYTRIESTO
PROBLEM9OUDONTKNOW!LLYOUKNOWISTHAT DOTHESERIALIZATIONANDTHENITTHROWSANEXCEPTION 
ITSSOMETHINGTHATIMPLEMENTSTHE#OLLECTION !NDWITHCOLLECTIONSANDARRAYS IFANYOFTHEOBJECTS
INTERFACE"UTTHATISNTENOUGHTOTELLYOUWHETHER INSIDEARENT3ERIALIZABLE THEWHOLESERIALIZATIONFAILS
THE#OLLECTIONRETURNEDBYVALUES IS3ERIALIZABLE
)NOTHERWORDS YOUMIGHTGETBACKA#OLLECTION
THATˆEVENWHENFILLEDWITH3ERIALIZABLEOBJECTSˆIS
NOTITSELF3ERIALIZABLE Q: $OESMYCLASSHAVETOEXPLICITLYIMPLEMENT
3ERIALIZABLE ORCAN)INHERIT3ERIALIZABLENESSFROMMY
4HEBOTTOMLINEDONTRELYONTHE#OLLECTION
SUPERCLASS
RETURNEDFROMAMAPSVALUES METHODTOBE
3ERIALIZABLE0UTYOURVALUESINTOSOMETHINGYOUCAN
TRUSTTOBE3ERIALIZABLE LIKE!RRAY,IST BEFORETRYING
TOSHIPTHEMASPARTOFAREMOTEMETHODCALL
A: 2EMEMBER*AVAS)3 !RULEIFYOURPARENT
SUPERCLASS ISSOMETHING THENSOAREYOU)F$OG
EXTENDS!NIMAL AND!NIMALIMPLEMENTS3ERIALIZABLE
THEN$OGIS3ERIALIZABLEWHETHERTHE$OGCLASS
EXPLICITLYDECLARESITORNOT
(OWEVER ITISCONSIDEREDGOODPRACTICETOEXPLICITLY
DECLAREYOURCLASSAS3ERIALIZABLEEVENIFYOURSUPERCLASS
DOES JUSTSOTHATOTHERSLOOKINGATYOURCLASS!0)DONT
HAVETOHUNTTHROUGHYOURCLASSINHERITANCETREETOSEE
IFSOMEBODYUPTHEREIS3ERIALIZABLE

 &KDSWHU
DUFKLWHFWXUDORYHUYLHZ

5HPHPEHUDUJXPHQWVDQG
UHWXUQYDOXHVIRUDUHPRWH
PHWKRGPXVWEHRQHRIWKHVH

5 3ULPLWLYHV ,GRQ·WJHWZK\LW·VOHJDO
WRSDVVD5HPRWHREMHFWLQD
UHPRWHPHWKRG,VQ·WWKHZKROH
5 6HULDOL]DEOHREMHFWV SRLQWRID5HPRWHREMHFWWRVWD\
UHPRWH":K\ZRXOG\RXVHQGD
5 $QDUUD\RUFROOHFWLRQRISULPLWLYHV 5HPRWHREMHFWWRWKHFOLHQW""
RU6HULDOL]DEOHREMHFWV 7KDWPDNHVQRVHQVH

5 $5HPRWHREMHFW

ItÕll make sense in a minute.


But before you turn the
page, think about the
implications of passing a
Remote object through a
remote method call...

\RXDUHKHUH 
UHPRWHPHWKRGDUJXPHQWV

8I[[QVOI:MUW\MWJRMK\\PZW]OPI
ZMUW\MUM\PWLKITT
:KHQ\RXSDVVD5HPRWH
)TDOESNOTMAKESENSETOSENDA2EMOTEOBJECTINA
REMOTEMETHODCALL!FTERALL THEWHOLEPOINTOFA REMHFWWRRUIURPDUHPRWH
2EMOTEOBJECTISTOSTAYREMOTE4OBEACCESSEDBY
CLIENTSWHOLIVESOMEWHEREELSE)NANOTHERHEAP
PHWKRG-DYDDFWXDOO\VHQGV
"UTWHATIFYOUWANTTOPASSAREMOTECLIENTA WKH5HPRWHREMHFW·VVWXE
REFERENCETOANOTHER2EMOTEOBJECT7HATIF
RATHERTHANHANDINGYOURCLIENTAFULL BLOWNCOPY ,QRWKHUZRUGVDWUXQWLPH
OFA#USTOMER YOUSENDHIMASTUBTOA2EMOTE
#USTOMER WKH5HPRWHREMHFWVWD\VULJKW
4HINKABOUTIT"EFOREYOUREADTHENEXTPAGE ZKHUHLWLVDQGLWVVWXELV
VHQWRYHUWKHZLUHLQVWHDG

YiX`e
gfn\i A remote re
remote obje ference is a stub to a
:KDWDUHWKHLPSOLFDWLRQVRISDVVLQJDVWXEWRD a remote re ct. If the client has
5HPRWH&XVWRPHUREMHFWDVRSSRVHGWRSDVVLQJD reference toference, he has a local
QRQUHPRWH&XVWRPHUREMHFW"
talk to the a stub, and the stub
Remote obje can
ct.

:KDWDUHWKHEHQH¿WVRISDVVLQJDVWXELQVWHDGRI
WKHUHDO&XVWRPHUREMHFW" FOLHQW VHUYHU

)RR 5HPRWH
VWXE )RR
:KDWDUHWKHGUDZEDFNV" REMHFW
^gg^
stub to a
)RR Remote object
nce
local refere
1RWHZKHWKHUWRSDVVVHULDOL]HGREMHFWVRUVWXEV
WRUHPRWHREMHFWVLVDFUXFLDOGHVLJQGHFLVLRQ:H¶OO
to a stub
H[SORUHWKLVZKHQZHORRNDWSHUIRUPDQFHDQG
SDWWHUQV

 &KDSWHU
DUFKLWHFWXUDORYHUYLHZ

:KHQWKHUHWXUQYDOXHLVD
5HPRWHREMHFW

 7KHFOLHQWLQYRNHVJHW&XVWRPHU RQ5HPRWH
REMHFW$ XVLQJVWXE$ 

JHW&XVWRPHU
JHW&XVWRPHU
JHW&XVWRPHU 5HPRWH
VNHO
FOLHQW REMHFW$
VWXE$
5HPRWH
REMHFW%

&XVWRPHU

 5HPRWHREMHFW$UHWXUQVDUHIHUHQFHWRD
&XVWRPHUREMHFW 5HPRWHREMHFW% 7KHVNHOHWRQ turns
VXEVWLWXWHV DQGVHULDOL]HV WKH5HPRWHREMHFW·V
he R em ot e ob je ct (A) simply mreer
T to the Custo
a local referencee object B), but itÕs
VWXEDQGVHQGVLWEDFNWRWKHFOLHQW

7KH&XVWRPHUVWXE % LVGHVHULDOL]HGRQWKH object (Remot ub that gets sent back.


FOLHQWDQGWKHFOLHQWJHWVDORFDOUHIHUHQFHWRWKH actually the st
QHZVWXEREMHFW

VNHO 5HPRWH
REMHFW$
FOLHQW VWXE$
5HPRWH
ORFDOUHIHUHQFH 5HPRWH REMHFW%
VWXE%
WRVWXE% VWXE%
Serialized stub &XVWRPHU
B (the Customerto Remote object
a local object).
Now the client gets backme r stub
reference to the Cu sto
object (B).

\RXDUHKHUH 
50,TXHVWLRQV

WKHUH DUH QR
'XPE 4XHVWLRQV
:MDD=LHGAFLK
Q: 7HATHAPPENSIFTHECLIENTOBJECTANDTHE
2EMOTEOBJECTARERUNNINGINDIFFERENT*6-S BUT ƒ (-%XVHV-DYD50, 5HPRWH0HWKRG,QYRFDWLRQ VR
ONTHESAMEPHYSICALMACHINE)NOTHERWORDS WKDW\RXUEHDQVFDQEHDFFHVVHGE\UHPRWHFOLHQWV
THEYREBOTHRUNNINGIN*AVAPROGRAMSONTHESAME
SERVER ƒ $UHPRWHFOLHQWLQWKLVFRQWH[WLVDQREMHFWUXQQLQJLQ
DGLIIHUHQW-90ZKLFKDOVRPHDQVDGLIIHUHQWKHDS

A: $OESNTMAKEANYDIFFERENCE!LLTHATMATTERS ƒ $5HPRWHREMHFWVWD\VLQLWVRZQKHDSZKLOHFOLHQWV
LQYRNHPHWKRGVRQWKH5HPRWHREMHFW·VSUR[\FDOOHG
ISWHETHERTHETWOOBJECTSLIVEINDIFFERENTHEAPS
AND*6-SDONOTSHAREHEAPSWITHONEANOTHER THANK DVWXE
YOUVERYMUCH NOMATTERHOWINTIMATETHEYARE
COHABITINGTHESAMESERVER  ƒ 7KHVWXEREMHFWKDQGOHVDOOWKHORZOHYHOQHWZRUNLQJ
GHWDLOVLQFRPPXQLFDWLQJZLWKWKH5HPRWHREMHFW
)NFACT YOUCANANDWITH%*"OFTENMUST USE2-)
EVENWHENTHEOBJECTSAREINTHESAMEHEAP ƒ :KHQWKHFOLHQWZDQWVWRFDOODPHWKRGRQD5HPRWH
REMHFWWKHFOLHQWFDOOVWKHVDPHPHWKRGRQWKHVWXE
Q: 7HYINTHEWORLDWOULDYOUEVERWANTTODO
7KHVWXEOLYHVLQWKHVDPHKHDSDVWKHFOLHQW
USE2-)IFYOUDONTNEEDTO)SNTTHEREENOUGH ƒ 7RWKHFOLHQWDUHPRWHPHWKRGFDOOLVLGHQWLFDOWRD
OVERHEADWITHREMOTECALLSASITIS ORFDOPHWKRGFDOOH[FHSWDUHPRWHPHWKRGFDQWKURZ
D5HPRWH([FHSWLRQ DFKHFNHGH[FHSWLRQ 
A: 7ELLGOINTOTHISINMOREDETAILLATER BUT ƒ 7KHVWXESDFNDJHVXSWKHPHWKRGDUJXPHQWVDQG
THEMAINREASONISBECAUSEIFYOUDONTUSE2-)FOR VHQGVLQIRUPDWLRQDERXWWKHFDOOWRDVNHOHWRQRQ
METHODCALLS YOURELOCKINGDOWNYOURDESIGNIN WKHVHUYHU7KHVNHOHWRQREMHFWLWVHOILVRSWLRQDOEXW
SUCHAWAYTHATYOUCANTDISTRIBUTEYOUROBJECTSIN WKHVNHOHWRQ·VZRUNPXVWEHGRQHE\VRPHWKLQJRQ
DIFFERENTPLACESINYOURNETWORKOREVENONTHESAME
WKHVHUYHU:HGRQ·WKDYHWRFDUHZKR³RUZKDW³LV
SERVER )NOTHERWORDS WITHOUT2-) YOUMUSTHAVE
BOTHOBJECTSINTHESAMEHEAP
DFWXDOO\GRLQJWKHVNHOHWRQ·VZRUN
&ORADISTRIBUTEDPROGRAMMINGMODEL THATSAPRETTY ƒ $UJXPHQWVDQGUHWXUQYDOXHVPXVWEHRQHRIWKH
PERMANENTDECISION WITHNOCHANCETOCHANGEYOUR IROORZLQJDSULPLWLYHD6HULDOL]DEOHREMHFWDQDUUD\
MINDLATER WITHOUTREWRITINGCODE/NTHEOTHER RUFROOHFWLRQRISULPLWLYHVRU6HULDOL]DEOHREMHFWVRUD
HAND IFYOUDOUSE2-) YOUCANDECIDELATERTOSPLIT 5HPRWHREMHFW,IWKHYDOXHLVQ·WRQHRIWKHVH\RX·OO
YOURPROGRAMUPINTODIFFERENTNODESONYOURSYSTEM JHWDUXQWLPHH[FHSWLRQ
WITHLITTLEORUSUALLYNOCODECHANGES
3OTHETRADEOFFISFLEXIBILITYFORPERFORMANCE BUTFOR ƒ ,IDQREMHFWLVSDVVHGDVDQDUJXPHQWRUUHWXUQ
MOSTDISTRIBUTEDENTERPRISEAPPS THEOVERHEADOFA YDOXHWKHREMHFWLVVHQWDVDVHULDOL]HGFRS\WKHQ
REMOTECALLISNOTYOURBIGGESTPROBLEM)TSUSUALLY GHVHULDOL]HGRQWKH5HPRWHREMHFW·VORFDOKHDS
YOURBANDWIDTHANDORCONCURRENCYTHATHURTSTHE
MOST/VERALL YOUPROBABLYHAVEBIGGERPERFORMANCE ƒ ,ID5HPRWHREMHFWLVSDVVHGDVDQDUJXPHQWRUUHWXUQ
FISHTOFRYINAREASOTHERTHANWHETHERYOURCALLSARE YDOXHWKHREMHFW·VVWXELVVHQWLQVWHDG
REMOTEORLOCAL"UTTHESTORYISNTALWAYSTHATSIMPLE
SOWELLEXPLORETHISAGAINLATERINTHEBOOK

 &KDSWHU
DUFKLWHFWXUDORYHUYLHZ

2KP\,DOPRVWIRUJRWWKH
PRVWLPSRUWDQWWKLQJDERXWUHPRWH
PHWKRGFDOOV:KHQ\RXSDVVDVHULDOL]HG
REMHFWDVDQDUJXPHQWRUUHWXUQYDOXH\RX
EHWWHUPDNHVXUHWKHFODVVÀOHIRUWKHW\SH
\RX·UHSDVVLQJLVDYDLODEOHRQWKHRWKHU
VLGH,IWKHFODVVLVQ·WWKHUHWKHREMHFW
ZLOOQHYHUGHVHULDOL]HDQG
\RX·UHVFUHZHG

7KDWLQFOXGHVWKHVWXE
FODVVHV,IWKHFOLHQW
GRHVQ·WKDYHWKHFODVVIRU
WKHVWXEREMHFWLW·V
KRSHOHVV

\RXDUHKHUH 
5HPRWHLQWHUIDFH

?PI\U][\\PM:MUW\MWJRMK\
IVL\PM[\]JPI^MQVKWUUWV'
(OWDOESTHECLIENTKNOWWHICHMETHODSTOCALL ,WDOOEHJLQVZLWKD5HPRWH
(OWDOESTHESTUBKNOWWHICHMETHODSTHE
2EMOTEOBJECTHAS
LQWHUIDFH%RWKWKH5HPRWH
2EMEMBER IFTHESTUBISPRETENDINGTOBETHE REMHFWDQGWKHVWXELPSOHPHQW
2EMOTEOBJECT THESTUBMUSTHAVETHESAME
METHODSASTHE2EMOTEOBJECT
WKHVDPHLQWHUIDFHWKHRQH
/FCOURSEYOUKNOWTHEANSWERTOTHIS ZLWKWKHPHWKRGVWKHFOLHQW
!NINTERFACE ZDQWVWRFDOO
4HEWAYALLMETHODSINADISTRIBUTEDENVIRONMENT
SHOULDBEEXPOSEDTOACLIENT $5HPRWHLQWHUIDFHPXVW
7ECALLTHISTHEBUSINESSINTERFACEBECAUSEITHAS
THEBUSINESSMETHODS THECLIENTWANTSTOCALL H[WHQGMDYDUPL5HPRWHDQG
4ECHNICALLY THEBUSINESSINTERFACEFORA2EMOTE
OBJECTMUSTBE SURPRISINGLY A2EMOTEINTERFACE
HYHU\PHWKRGPXVWGHFODUHD
5HPRWH([FHSWLRQ
4OBE2EMOTE ANINTERFACEMUSTFOLLOWTHREE
RULES

5 LWPXVWH[WHQGMDYDUPL5HPRWH

5 HDFKPHWKRGPXVWGHFODUHD
MDYDUPL5HPRWH([FHSWLRQ

5 DUJXPHQWVDQGUHWXUQW\SHVPXVWEH
VKLSSDEOH 6HULDOL]DEOHSULPLWLYHHWF

mote
RemoteException and.rmRei package emote
LPSRUWMDYDUPL  interface are in java te rface M U ST extend java.rmi.R
A Remote in .
SXEOLFLQWHUIDFH'LFH5ROOHUH[WHQGV5HPRWH^ (which doesnÕt
have any methods)
All of your methods must declare
SXEOLFLQWUROO'LFH WKURZV5HPRWH([FHSWLRQ
`
a RemoteException.

 &KDSWHU
DUFKLWHFWXUDORYHUYLHZ

<PMKTQMV\KITT[J][QVM[[UM\PWL[
WV\PM[\]J\PZW]OP\PM:MUW\M
J][QVM[[QV\MZNIKM LQWHUIDFH!!
5HPRWH
2EMEMBER ASFARASTHECLIENTSCONCERNED HESCALLING
METHODSON4HE2EAL4HING4HEACTUAL2EMOTEOBJECT4HE
THINGTHATHASTHEMETHODSHEWANTSTOCALL
4HEONLYTHINGREMINDINGTHECLIENTTHATHEISNT
CALLINGMETHODSDIRECTLYONTHE2EMOTEOBJECTISTHE LQWHUIDFH!!
2EMOTE%XCEPTIONSHEHASTODEALWITH 'LFH5ROOHU the Remote rface
UROO'LFH
(business) inte

'LFH5ROOHU6WXE 'LFH5ROOHU,PSO
the stub class te
UROO'LFH UROO'LFH the Remcolass
obje c t

ice R o ll e r Im p l (the Remote


Both the D the actual dice rolling ub
object with y) and the DiceRoller stterface.
functionalit he Remote DiceRoller in
&OLHQWKHDS implement t
6HUYHUKHDS
'LFH5ROOHU
'LFH5ROOHU

O

'L 'L
PS
XE

FH5 FH5
ROOHUVW ROOHU,
FOLHQW

From this
mote business to show a skpoeint forward, weÕre not
The client uses the Re s on the stub. about is that leton object. All we ca going
interface to call methmoodte object both is handling th SOMETHING on the re
The stub and the Rete interface. e skeleton fu se
nctionality. rver
implement the Remo

\RXDUHKHUH 
(-%DUFKLWHFWXUH

6KDUSHQ \RXU SHQFLO


This sharpen gets you on the one most common
mistake EJB developers make. So donÕt skip it!

%DVHGRQWKLVVFHQDULRGUDZWKHFODVVHVEHORZLQWRWKH
DSSURSULDWHVORWIRUZKHWKHUWKH\PXVWEHRQWKHFOLHQWVHUYHURU
ERWK \RXFDQUHXVHDFODVV 7KHSLFWXUHLVVLPSOL¿HGVR\RX
DUHQ¶WVHHLQJDOORIWKHSOD\HUVLQYROYHG

'RJ
'RJ
5HPRWH
3H
WUDLQ W P\'RJ 'RJ7UDLQHU

FOLHQW
VWXE


 
 
 
  
  

  
 
  
 
 
 
 
'RJ7UDLQHU,PSO 
 'RJ7UDLQHU6WXE




 


'RJ7UDLQHU FOLHQWFODVV 

LQWHUIDFH 'RJ

 &KDSWHU
DUFKLWHFWXUDORYHUYLHZ

0W_-2*][M[:51
)N%*" ACLIENTSENTRYPOINTINTOTHE 3O2-)LIESATTHEHEARTOFMOSTCLIENT TO
ENTERPRISEAPPLICATIONISNEARLYALWAYS BEANCOMMUNICATION"UTASYOUSAWAHINT
THROUGHAREFERENCESTUB TOA2EMOTE OFINTHElRSTCHAPTER THE%*"ARCHITECTURE
OBJECT9ES ITISPOSSIBLE ANDSOMETIMES ISALITTLEMORECOMPLEXTHANASIMPLE
NECESSARY TOUSEALOCALCLIENTIEA CLIENT TO STUB TO 2EMOTE OBJECTSCENARIO
CLIENTINTHESAMEHEAPASTHEBEAN AND )N%*" THEBEANˆTHETHINGONWHICHTHE
WHICHDOESNTUSE2-)TOINVOKEBUSINESS CLIENTWANTSTOCALLBUSINESSMETHODSˆIS
METHODS BUTTHISISFORONLYAFEWVERY NOT2EMOTE
SPECIALCASES

3ODLQ50, Business logic


lives here!
VHUYHU
&OLHQW
EL]LQWHUIDFH
EL]LQWHUIDFH

5HPRWH
VWXE REMHFW

FOLHQW

KHDS '%

50,LQ(-% Business logic


lives here!
VHUYHU
&OLHQW
EL]LQWHUIDFH

VHUYLFHV
EL]LQWHUIDFH

5HPRWH
VWXE REMHFW

DQ

FOLHQW (-% W (Q
WHUS VHEH
2EM H F UL

KHDS '%

\RXDUHKHUH 
(-%REMHFW

<PM:MUW\MWJRMK\Q[VW\\PMJMIVQ\¼[
\PMJMIV¼[JWLaO]IZL ¸ \PM-2*7JRMK\
%RWKWKH5HPRWHREMHFW
)N%*" REMEMBER THE2EMOTEOBJECT%*"/BJECT ISTHE
BEANSBODYGUARD4HEBEANSITSBACK PROTECTEDFROMALL
DQGWKHVWXELPSOHPHQWWKH
CLIENTINVOCATIONS WHILETHE%*"/BJECTIMPLEMENTSTHE VDPHLQWHUIDFH³WKHEXVLQHVV
2EMOTEINTERFACEANDTAKESTHEREMOTECALLS/NCETHECALL
GETSTOTHE%*"/BJECT THESERVERJUMPSINWITHALLTHESERVICES LQWHUIDFH FDOOHGD&RPSRQHQW
LIKESECURITYISTHISCLIENTAUTHORIZEDTOCALLTHISMETHOD
TRANSACTIONSISTHISCALLPARTOFANEXISTINGTRANSACTION OR LQWHUIDFH ³EXWZLWKRXWWKH
SHOULDWESTARTANOTHERTRANSACTION ANDPERSISTENCEDOES
THEBEANNEEDTOLOADINFOFROMTHEDATABASEBEFORERUNNING
UHDOEXVLQHVVORJLFEHKDYLRU
THECLIENTSMETHOD 
4HE%*"/BJECTIMPLEMENTSTHE2EMOTEBUSINESSINTERFACE SO 7KHEHDQFODVVGRHV127
THEREMOTECALLSFROMTHECLIENTCOMETOTHE%*"/BJECT"UT LPSOHPHQWWKHEXVLQHVV
ITSSTILLTHEBEANTHATHASTHEREALBUSINESSLOGIC EVENTHOUGH
THEBEANDOESNTIMPLEMENTTHE2EMOTEINTERFACEINTHE LQWHUIDFH LQWKHIRUPDO
TECHNICAL*AVAWAY
-DYDZD\ EXWWKHEHDQ
KDVWKHUHDOEXVLQHVVORJLF
1RERG\WDONVWRWKH IXQFWLRQDOLW\
EHDQZLWKRXWJRLQJ
WKURXJKPHÀUVW

te The bean doesnÕ


t h t h e st ub and the Remino terface, the Remote (bustinactually implement
Bo ent the same it DOES have the ess) interface! (But
object impleomnÕt have the REAL real business logic.)
but they d c implementations.
business logi (-%VHUYHU
&OLHQW
EL]LQWHUIDFH

VHUYLFHV
EL]LQWHUIDFH

5HPRWH
VWXE REMHFW

DQ

FOLHQW (-% W (Q
WHUS VHEH
2EM H F UL

KHDS '%

 &KDSWHU
DUFKLWHFWXUDORYHUYLHZ

<PM+WUXWVMV\QV\MZNIKM
)N%*" THEBUSINESSINTERFACEISCALLEDTHECOMPONENT
INTERFACE4HISISWHEREYOUEXPOSEYOURBUSINESS
METHODSTOTHECLIENT4HEMAINDIFFERENCEBETWEEN
es
AN2-)INTERFACEANDAREMOTECOMPONENTINTERFACE LQWHUIDFH!! All Remote interfac
ISTHATWITH%*"YOUEXTENDJAVAXEJB%*"/BJECT 5HPRWH must ex te nd
INSTEADOFJAVARMI2EMOTE java.rmi.Remote.

.H\SRLQWV
LQWHUIDFH!! In RMI,
$Q\LQWHUIDFHZLWKMDYDUPL5HPRWHLQLWVLQKHULWDQFH (-%2EMHFW java.rmi.Ryeomu extend

WUHHLVD5HPRWHLQWHUIDFH EJB, your inote directly. In
VHYHUDOPHWKRGV javax.ejb terface extend
in turn ex.EtJeBObject, which s
nds Remote.
 7KH(-%2EMHFWLQWHUIDFHH[WHQGV5HPRWHVR
(-%2EMHFWLVD5HPRWHLQWHUIDFH
LQWHUIDFH!!
%RRN&DUW Your componentejb.E interface
<RXUUHPRWHFRPSRQHQWLQWHUIDFHPXVWH[WHQGWKH extends ja va x. JBObject.

(-%2EMHFWLQWHUIDFH
DGG%RRN yo u
This is where ods. This pu t your
UHPRYH%RRN
s me th is
busines t us es !
<RXFDQKDYHDORFDOFRPSRQHQWLQWHUIDFHDQGWKH
VKRZ%RRNV,Q&DUW
what the cli en
GR&KHFNRXW
UXOHVDUHGLIIHUHQWEXWZH¶OOORRNDWWKDWLQWKHFKDSWHU
RQ&OLHQW9LHZ

 <RXH[SRVH\RXUEXVLQHVVPHWKRGVWRWKHFOLHQW
:KRHYHULPSOHPHQWVWKH%RRN&DUW
WKURXJKWKHFRPSRQHQWLQWHUIDFH
LQWHUIDFHPXVWLPSOHPHQWDOOWKHPHWKRGV
IURPERWK%RRN&DUWDQG(-%2EMHFW7KH
(-%2EMHFWLQWHUIDFHDGGVWKHPHWKRGV
7KH(-%2EMHFWLQWHUIDFHDGGVDGGLWLRQDOPHWKRGVIRU WKDWDOO(-%FOLHQWVPLJKWQHHG

WKHFOLHQWWRXVH :H¶OOVHHWKRVHODWHU

\RXDUHKHUH 
WKHEHDQFODVV

+RZWKHEHDQFODVVÀWVLQ

LQWHUIDFH!! LQWHUIDFH!!
-6($3, 5HPRWH -(($3, (QWHUSULVH%HDQ
QRPHWKRGV QRPHWKRGV

LQWHUIDFH!! LQWHUIDFH!!
-(($3, -(($3,
(-%2EMHFW 6HVVLRQ%HDQ
VHYHUDOPHWKRGV VHYHUDOPHWKRGV

LQWHUIDFH!! %RRN&DUW%HDQ
<28ZULWHWKLV <28ZULWHWKLV
%RRN&DUW
LQWHUIDFH FODVV
DGG%RRN DGG%RRN
WKHUHPRWH UHPRYH%RRN UHPRYH%RRN
WKHEHDQFODVV
FRPSRQHQW VKRZ%RRNV,Q&DUW VKRZ%RRNV,Q&DUW
LQWHUIDFH GR&KHFNRXW GR&KHFNRXW

RWKHUPHWKRGV

<RX5($//<
KDYHWRNQRZ
ookCCartBean
ookCart interfdoacese! not implement the
WKHLQWHUIDFHV
ut it sure looks lik
7KHH[DPH[SHFWV\RXWRN
QRZ e it does...)
HD FK PH WKR GOL YHV
H[DFWO\ZKHUH
QH HGWRN QRZ ZK LFK PH WKRGV
<RX
DUHLQ(-%2EMHFWDQGZK
LFKDUH
The bean developer must make sure that h the
LQ6HVVLRQ %HD QIRUH [DP SOH
the bean class has methods that matcexac tly
$QG \RXK DYH WRNQR ZWKH H[DFW
methods in the comp onen t inte rface,
VLJQDWXUHIRUWKRVH PH WKR GV 
as if the bean class DID imple ment the
VH LQWH UIDF HV LQ
:H¶OOJHWL
[WF
QWR
RXS
WKH
OHR IFK DSW HUV DQG component interface.
WKH QH

ZKHQZHGRSD\DWWHQWLRQ

 &KDSWHU
DUFKLWHFWXUDORYHUYLHZ

WKHUH DUH QR
'XPE 4XHVWLRQV
Q: )JUSTWANTTOBESURE)MCLEARABOUTTHIS Q: 7HYDOESNTTHEBEANIMPLEMENTTHE
INTERFACESCAN%84%.$OTHERINTERFACES 2EMOTEBUSINESSINTERFACE)SNTTHEWHOLE
POINTOFANINTERFACEIMPLEMENTATIONTOUSETHE

A: 9ES INTERFACESHAVETHEIROWNINHERITANCETREE
COMPILERTOKEEPYOUHONEST ANDTOSUPPORT*AVA
TYPE CHECKING
)NFACT WITHINTERFACES YOUCANDOSOMETHINGYOU
CANTEVERDOWITHACLASSˆANINTERFACECANEXTEND
MORETHANONEINTERFACE A: 9OUASKEDTHISQUESTIONBEFORE"UT HEY
LQWHUIDFH&DUWH[WHQGV(-%2EMHFW&DUW%XVLQHVV WEALLFORGETTHINGS SOWELLREMINDYOUAGAIN4HE
BEANDOESNTIMPLEMENTTHE2EMOTEINTERFACE
Q: "UTWHATDOESTHATREALLYMEANWHENAN
BECAUSETHEBEANISNEVERSUPPOSEDTOBEA
2EMOTEOBJECTINTHE*AVA2-)SENSE )NOTHER
INTERFACEEXTENDSANOTHERINTERFACE%XTENDING WORDS YOUNEVEREVERWANTANYONETOHAVEASTUB
MEANSINHERITANCE BUTWHATISTHEINTERFACE TOTHEACTUALBEAN)FYOUWERETOSOMEHOWSNEAK
INHERITING AREMOTEREFERENCEIEASTUB OUTTOTHEWORLD
YOUDBEDEFEATINGTHEWHOLEPURPOSEOF%*")FYOU

A: 7HENONEINTERFACEEXTENDSANOTHER IT
LETACLIENTTALKDIRECTLYTOTHEBEAN THENTHESERVER
WOULDNTBEABLETOAPPLYITSSERVICES ANDIFYOU
INHERITSEVERYTHINGFROMTHATINTERFACE7HOEVER DONTNEEDTHESERVICESYOUSEEWHEREWEREGOING
IMPLEMENTSANINTERFACEMUSTIMPLEMENTNOTJUSTTHE HERE
METHODSFROMTHATINTERFACE BUTALSOTHEMETHODS
4ECHNICALLY ITISLEGALTOHAVETHEBEANIMPLEMENT
FROMEVERYINTERFACETHATINTERFACEEXTENDSALLTHE
THE2EMOTEINTERFACE BUTITSAREALLYBADIDEA SINCE
WAYUPTHEINTERFACEINHERITANCETREE
YOUCOULDMAKEMISTAKESTHATWOULDNTBECAUGHT
3O INTHISEXAMPLE WHOEVERIMPLEMENTS"OOK#ART ATCOMPILETIMEBUTWHICHWOULDBLOWUPLATER 
MUSTALSOIMPLEMENTTHEMETHODSOF%*"/BJECT "UTYOUDONTNEEDTODOIT SINCEVIRTUALLYALLBEAN
DEVELOPMENTTOOLSINCLUDINGNEARLYEVERYBEAN
AWARE)$% UNDERSTANDTHERELATIONSHIPBETWEEN
THEBEAN THE%*"/BJECT ANDTHE2EMOTEINTERFACE
ANDTHEYGUARANTEETHATTHECOMPONENTINTERFACE
:KHQ\RXLPSOHPHQW ANDTHEBEANCLASSHAVEMATCHINGMETHODS

DQLQWHUIDFH\RXPXVW
LPSOHPHQWDOOWKH Q: "UTWHATIF)JUSTlNDTHISTOODISTURBING
4HISWHOLEIDEAVIOLATESMY*AVASENSIBILITIES THE
PHWKRGVWKDWLQWHUIDFH VERYPRINCIPLESUPONWHICH)CODE3URELYTHERE
LQKHULWVIURPLWVVXSHU MUSTBESOMETHING)CANDO
LQWHUIDFHV
6RZKRHYHULPSOHPHQWV A: 9OUCOULDTRUSTUSONTHEWHOLEhYOURE
ALMOSTCERTAINLYUSINGTOOLS SOITREALLYWONT
%RRN&DUWPXVWLPSOHPHQW MATTER2EALLYvTHING BUTNOSOIFYOUINSIST YES
WKHPHWKRGVIURPERWK THEREISSOMETHINGYOUCANDOTHATLLPROBABLYHELP
%RRN&DUWDQG(-%2EMHFW YOUFEELBETTER)TSONTHENEXTPAGE BUTYOUCAN
PROBABLYFIGUREITOUTYOURSELFANYWAY
.ONETHELESS WERESTICKINGBYOURSTORYTHATMOST
DEVELOPERSWONTNEEDTODOTHIS

\RXDUHKHUH 
LQWHUIDFHLPSOHPHQWDWLRQ

$GHVLJQIRUWKRVHZKRIHHO
VTXHDPLVKWKDWWKHEHDQ
GRHVQ·WLPSOHPHQWWKH
EXVLQHVVPHWKRGLQWHUIDFH

Create an inte
the business metrfhoace that has
not extend EJBObjds, but does
not a remote interfect (so itÕs
LQWHUIDFH!! ace). LQWHUIDFH!!
5HPRWH (QWHUSULVH%HDQ
QRPHWKRGV QRPHWKRGV
LQWHUIDFH!!
%RRN&DUW%XVLQHVV
DGG%RRN
LQWHUIDFH!! UHPRYH%RRN LQWHUIDFH!!
(-%2EMHFW VKRZ%RRNV,Q&DUW 6HVVLRQ%HDQ
VHYHUDOPHWKRGV GR&KHFNRXW VHYHUDOPHWKRGV

LQWHUIDFH!! %RRN&DUW%HDQ
%RRN&DUW
QRPHWKRGV DGG%RRN
UHPRYH%RRN
VKRZ%RRNV,Q&DUW
GR&KHFNRXW

RWKHUPHWKRGV

ace
t h e c o m po nent intebrfject
Now, both the EJBO ss Make the bean class pleme
extends e AND the busine both the SessionBeanimint er
nt
interfac interface. AND the business me od ce fa
method interface. Now, the cothmp
make sure you have the rigiler will
methods in the bean class. ht

 &KDSWHU
DUFKLWHFWXUDORYHUYLHZ

6R,ZULWHP\EHDQDQG
,SXWLQPDWFKLQJPHWKRGV
IURPWKHFRPSRQHQWLQWHUIDFH
ZLWKRXWRIÀFLDOO\LPSOHPHQWLQJ
WKHFRPSRQHQWLQWHUIDFH%XWLI,
GRQ·WLPSOHPHQWWKHFRPSRQHQW
LQWHUIDFHZKRGRHV"

?PW_ZQ\M[\PMKTI[[\PI\ZMITTa,7-;
QUXTMUMV\\PMKWUXWVMV\QV\MZNIKM'
1VW\PMZ_WZL[_PWUISM[\PM
-2*7JRMK\KTI[['
4HECONTAINER9OUDECLARETHEMETHODS BUTTHECONTAINER
IMPLEMENTSYOURCOMPONENTINTERFACE2EMEMBER YOUR
COMPONENTINTERFACEISTHEONETHATEXTENDS%*"/BJECT SOTHE
CONTAINERHASTOIMPLEMENTNOTJUSTYOURBUSINESSMETHODS BUT
ALSOTHEMETHODSOF%*"/BJECTWHICHWEHAVENTYETLOOKEDAT 

Q: "UTHOWDOESTHECONTAINERKNOWWHATTOPUTINTHOSE
METHODS)MTHEONEWHODECLAREDTHOSEMETHODS

A: 2EMEMBER THECONTAINERISNTIMPLEMENTINGTHEREALBUSINESS
LOGIC4HETRUEFUNCTIONALITYFORTHOSEBUSINESSMETHODSLIVESINYOUR
BEANCLASSˆTHECLASSTHATYOUIMPLEMENT4HECLASSIMPLEMENTINGTHE
COMPONENTINTERFACEISGOINGTOBETHE%*"/BJECT4HEBODYGUARD4HE
2EMOTEOBJECT!NDREMEMBERTHATTHE%*"/BJECTISONLYPRETENDING
TOBETHEBEAN)TCANRESPONDTOTHEREMOTEMETHODCALLSCOMINGFROM
THECLIENTVIATHESTUB BUTTHE%*"/BJECTSONLYJOBISTOCAPTURETHE
INCOMINGCLIENTCALLSTOTHEBEAN!FTERTHAT ITSUPTOTHECONTAINER
SERVERTOTAKEOVER
7EDONTREALLYKNOWHOWTHE%*"/BJECTISIMPLEMENTEDˆITS
COMPLETELYUPTOTHEVENDOR"UTWEDONTREALLYCARE!LLYOUNEEDTO
KNOWISTHATAN%*"CONTAINERISREQUIREDBYTHESPECTOGENERATETHE
CODEFORTHE%*"/BJECTANDITSCORRESPONDINGSTUB 

\RXDUHKHUH 
ZKRFUHDWHVZKLFKFODVV

?PWKZMI\M[_PI\'
&ORABEANWITHAREMOTECLIENTVIEWINOTHERWORDS ABEANTHATCANBEACCESSED
BYREMOTECLIENTS YOUKNOWTHATYOUHAVETOWRITETHE#OMPONENTINTERFACEAND
THE"EANCLASS"UTSOMEBODYHASTOWRITETHECLASSTHATIMPLEMENTSYOUR#OMPONENT
INTERFACETOMAKETHE2EMOTE%*"/BJECT ANDSOMEBODYHASTOMAKETHESTUBTHAT
GOESWITHTHAT%*"/BJECT4HATSOMEBODYISTHE#ONTAINER!ND THOUGHWEHAVENTYET
TALKEDABOUTTHE(OME WEVELISTEDTHERELEVANTPIECESHEREFORCOMPLETENESS

<RX WKH&RQWDLQHU
 7KH&RPSRQHQWLQWHUIDFH  7KH(-%2EMHFWFODVV
H[WHQGVMDYD[HME(-%2EMHFW LPSOHPHQWV\RXU&RPSRQHQWLQWHUIDFH 

 7KH%HDQFODVV  7KH(-%2EMHFWVWXEFODVV
LPSOHPHQWVMDYD[HME6HVVLRQ%HDQ LPSOHPHQWV\RXU&RPSRQHQWLQWHUIDFH
RUMDYD[HME(QWLW\%HDQ DQGNQRZVKRZWRWDONWRWKH(-%2EMHFW

 7KH+RPHLQWHUIDFH  7KH+RPHFODVV
H[WHQGVMDYD[HME(-%+RPHZH¶OO LPSOHPHQWV\RXU+RPHLQWHUIDFH
WDONDERXWWKLVRQWKHQH[WSDJH
We havenÕt lked 
so we donÕt ta
7KH+RPHVWXEFODVV
about
show it on thisthpie Home yet, LPSOHPHQWV\RXU+RPHLQWHUIDFH
cture. DQGNQRZVKRZWRWDONWRWKH+RPH

VHUYHU
FRPSRQHQWLQWHUIDFH

&OLHQW
VHUYLFHV

5HPRWH
REMHFW
VWXE
W


(-%
DQ

&RQWDLQHU 2EMHF (Q
WHUS VHEH
UL
&RQWDLQHU <RX
<RX
'%

 &KDSWHU
DUFKLWHFWXUDORYHUYLHZ

(-%2EMHFW+H\%HDQLHGRQ·W\RXHYHUJHWWLUHGRI (-%2EMHFW,JXHVVWKDWPDNHVVHQVH<RXSXWWKH
DOZD\VKDYLQJPHLQWKHPLGGOHRIHYHU\WKLQJ"'RQ·W VHFXULW\FKHFNVLQWKH;0/GHSOR\PHQWGHVFULSWRUDQG
\RXHYHUMXVWZDQWWRKDYHDGLUHFWFRQYHUVDWLRQZLWK WKHQZKHQ,JHWWKHFDOOWKHVHUYHUFDQFKHFNWRVHH
VRPHRQH" LIWKHFOLHQWKDVWKHULJKWDXWKRUL]DWLRQ%XWZKDWLI
%HDQ1R,·PWRRLPSRUWDQW,·PWRRYDOXDEOH$QG VHFXULW\LVQ·WHYHQDQLVVXHIRU\RX":KDWLIZKRHYHU
,·PVXUHDVKHOOQRWJRQQDVWDUWVFUHHQLQJP\RZQFDOOV GHSOR\V\RXGRHVQ·WFDUHZKRFDOOVWKHPHWKRGV"
7KDW·VZKDW\RXSHRSOHDUHIRU %HDQ1RWWRREULJKWDUH\RX"%XWDWOHDVW\RXFDQOLIW
(-%2EMHFW<RXSHRSOH" KHDY\REMHFWV7+,1.DERXWDOOWKHRWKHUWKLQJVWKDW
PDWWHUOLNHWUDQVDFWLRQVDQGSHUVLVWHQFH
%HDQ<HDK\RXSHRSOHZKRZRUNIRUWKHFRQWDLQHU
<RXWKH+RPHWKHVWXEVDOORI\RX0\MRELVWRKDQGOH (-%2EMHFW2K,IRUJRWDERXWWUDQVDFWLRQV2.WKDW
WKHFRPSOH[EXVLQHVVORJLF7KHFULWLFDOIXQFWLRQVWKDW PDNHVVHQVHWRR7KHVHUYHUKDVWRÀJXUHRXWLIWKHUH·V
PHDQWKHGLIIHUHQFHEHWZHHQVXFFHVVDQGIDLOXUHLQDQ DWUDQVDFWLRQFRQWH[WEHIRUHLWFDOOV\RXUPHWKRGVR
HQWHUSULVHHQYLURQPHQW WKDW\RXUPHWKRGFDQUXQLQDWUDQVDFWLRQ(LWKHU\RXU
RZQRUWKHFDOOHU·V
(-%2EMHFW *HH]VRXQGVOLNHDPDUNHWLQJVSHHFK 
2.VR\RXKDYHVRPHLPSRUWDQWPHWKRGVEXW,VWLOO %HDQ'XK
GRQ·WVHHZK\\RXQHHGWRKDYHPHLQHYHU\FDOO (-%2EMHFW%XWZKHUHGRHVSHUVLVWHQFHFRPHLQ"
%HDQ/RRNP\ZRUNLVWRRLPSRUWDQWWREH %HDQ:HOOWKLQNDERXWHQWLW\EHDQVIRUDPLQXWH,I
LQWHUUXSWHGE\FOLHQWVZKRKDYHQREXVLQHVVFDOOLQJPH ,·PDQHQWLW\EHDQWKDWPHDQV,·PUHSUHVHQWLQJVRPH
LQWKHÀUVWSODFH'R\RXKRQHVWO\WKLQNWKDW,DPJRLQJ HQWLW\LQWKHXQGHUO\LQJSHUVLVWHQWVWRUHDQG³
WRFKHFNVHFXULW\FOHDUDQFHVIRUHYHU\FDOOHU"/LNH,
(-%2EMHFW³ZDLW³E\SHUVLVWHQWVWRUHGRQ·W\RXMXVW
GRQ·WKDYHEHWWHUWKLQJVWRGR"
PHDQ'$7$%$6(":K\GRQ·W\RXMXVWVD\GDWDEDVH"
(-%2EMHFW2.VRLW·VUHDOO\MXVWDVHFXULW\WKLQJEXW %HDQ8KQHZVÁDVKWKHZRUGSKUDVH´SHUVLVWHQW
,GRQ·WVHHZK\\RXFDQ·WMXVWKDYHWKHFRGHWRFKHFN VWRUHµLVQRWDV\QRQ\PIRU´GDWDEDVHµ$GDWDEDVHLV
WKHVHFXULW\DFFHVVRIWKHFDOOHU7KDWZRXOGVDYHDORW MXVWRQHH[DPSOHRIDSHUVLVWHQWVWRUH%XWLILWPDNHV
RIRYHUKHDG QDPHO\0( 
\RXIHHOEHWWHUWRWKLQNDERXWLWWKDWZD\JRDKHDGIRU
%HDQ)LUVWRIDOOVHFXULW\LVMXVW21(RIWKHUHDVRQV QRZ%XWDV,ZDVVD\LQJLI,UHSUHVHQWDQHQWLW\VD\
\RXKDYHWRWDNHP\FDOOV,·OOJHWWRWKRVHRWKHU DFXVWRPHUQDPHG7RP'XIIWKHQZKDWKDSSHQVLIWKH
UHDVRQVLQDPLQXWH%XWDVIRUSXWWLQJLQFRGHWRGRP\ FOLHQWFDOOVP\JHW$GGUHVV PHWKRG"7KHVHUYHUFDQ·W
RZQFKHFNVDFWXDOO\,&$1GRWKDWLIWKHSURJUDPPHU MXVWKDQGPHWKHFDOO
ZDQWVPHWR%XWLW·VXVXDOO\QRWWKHZD\WRKDQGOH (-%2EMHFW%HFDXVH
VHFXULW\
%HDQ%HFDXVH,KDYHWRORDGLQ7RP'XII·V
(-%2EMHFW:KDW·VZURQJZLWK\RXKDQGOLQJWKH LQIRUPDWLRQIURPWKHGDWDEDVHÀUVW
VHFXULW\FKHFNVLQ\RXURZQFRGH"
(-%2EMHFW%HFDXVH
%HDQ<RXUHDOO\GRQ·WNQRZGR\RX">UROOVH\HV@)LUVW
LIWKHVHFXULW\FKHFNVDUHFRGHGLQWRPHWKHQ,·PQRW %HDQ%HFDXVH,·GUHWXUQDQDGGUHVVWKDWPLJKWQRW
DVUHXVDEOH7KHZKROHSRLQWRI(-%LVWRFRQÀJXUHDQG HYHQEHYDOLG8QOHVV,·PVWLOOLQDSUHYLRXVWUDQVDFWLRQ
FXVWRPL]HEHDQVDWUXQWLPHZLWKRXWUHZULWLQJWKHFRGH ZLWKWKLVFOLHQWWKHQWKHVHUYHUKDVWRWHOOPHWR
,I,·YHJRWVHFXULW\SURJUDPPLQJLQP\-DYDFRGHWKHQ ORDGP\VHOIZLWK7RP'XII·VGDWDEDVHLQIR%()25(
LWFDQ·WEHFKDQJHGZLWKRXWWRXFKLQJWKHVRXUFH$QG WKHVHUYHUWHOOVPHWRUXQWKHJHW$GGUHVV PHWKRG
ZKRZDQWVWKDW" 2WKHUZLVHZKRNQRZVZKDW,·GUHWXUQ"2.ZHOOWKDW·V
ODVWFDOOVRZH·OOKDYHWRFRQWLQXHWKLVVRPHRWKHUWLPH

\RXDUHKHUH 
(-%DUFKLWHFWXUH

there are no
Dumb Questions
Q: (OWANDWHENDOESTHE
LETSYOUVIEWPOSSIBLYEVENHACK
THEGENERATEDSOURCECODE BUTDONT
&ORTHEMOSTPART YOULLBARELYNOTICE
THEDIFFERENCEBETWEENPLAINOLD2-)
CONTAINERCREATETHE%*"/BJECTAND COUNTONIT!NDIFWEWEREYOU WE AND2-) ))/0"UTTHEREAREACOUPLE
THE(OMEANDTHESTUBS JUSTWOULDNTGOTHERE EVENIFWE
COULD OFPLACESWHEREITSDIFFERENT ANDONE
OFTHESEDIFFERENCESISDEFINITELYON
A: 7HENYOUDEPLOYABEAN
THECONTAINERLOOKSATTHE$$AND
Q: 3OTHESECLASSESAREUPTOTHE
THEEXAMˆTHENEEDTONARROWASTUB
7ELLCOVERNARROWINGINDETAILINTHE
TAKESITFROMTHERE2EMEMBER THE VENDORSIMPLEMENTATION NEXTCHAPTERON#LIENT6IEW&ORNOW
$$GIVESTHEFULLYQUALIFIEDNAMEOF JUSTKNOWTHATITSSOMETHINGACLIENT
YOUR2EMOTE#OMPONENT%*"/BJECT
INTERFACEANDYOUR2EMOTE(OME A: 9ES4HEVENDORHASALLSORTS
OFCHOICESFORIMPLEMENTINGTHESE
MUSTDOWITHAN%*"STUBTHATTHEY
DONTHAVETODOWITHAPLAIN*AVA
STUBBECAUSETHE%*"SPECTELLSYOUTO
INTERFACE3O ONCETHECONTAINERGETS
THOSEINTERFACES ITGENERATESCODE CLASSESANDMIGHTUSETHESTUBSAND ASSUMETHATTHESTUBISUSING))/0AND
FORTHETWOCLASSESIMPLEMENTING OR(OMEAND%*"/BJECTSTOGETSOME THUSMIGHTBEADIFFERENTKINDOFSTUB
THOSEINTERFACES!NDBECAUSETHEYRE PERFORMANCEADVANTAGES"UTAGAIN
2EMOTE THECONTAINERALSOCREATES
THECLIENTSTUBSTHATKNOWHOWTO
THATSNOTUPFORYOUTOMESSWITH OR
EVENKNOWABOUT Q: 7HENAREWEGOINGTOTALK
COMMUNICATEBACKTOTHE2EMOTE ABOUTTHE(OME
4HEONLYREQUIREMENTINTHESPEC
OBJECTS THATYOUREGUARANTEEDANDREQUIRED
TOADHERETO ISTHAT2EMOTEOBJECTS
MUSTFOLLOWTHERULESFOR2-) ))/0 A: .EXTPAGE
Q: !RETHESEALWAYSPLAINOLD2-) WHICHMEANS*AVAS2EMOTE-ETHOD
)NVOCATIONUSINGTHE))/0#/2"! Q:
STUBS)SEETHATWHENWEDEPLOYED 7HYDIDYOUTAKESOLONG
STANDARD WIREPROTOCOL
USINGTHE2) ITPRINTEDOUTAMESSAGE )SNTTHE(OMEIMPORTANT
THATITWASRUNNINGRMIC
Q: 9OUBROUGHTITUPHOWIS2-)
A:
A: 4HECONTAINERCANDOWHAT
EVERITWANTSTOCREATETHESTUBSTHE
))/0DIFFERENTFROMREGULAR2-) !SCRUCIALASTHE(OMEIS
ITSUSUALLYJUSTTHEWAYYOUGET
AREFERENCETOSOMETHINGTHAT
REQUIREMENTISTHATTHESTUBSBE2-)
))/0COMPLIANT)NFACT ASERVERCAN
A: 0LAINOLD2-)USES*2-0ASITS
WIREPROTOCOL"UT))/0LETS2EMOTE
IMPLEMENTSTHE#OMPONENTINTERFACE
)NOTHERWORDS YOUUSETHE(OMETO
USESOMETHINGCALLEDDYNAMICPROXIES OBJECTSINTEROPERATETHROUGH#/2"! GETAN%*"/BJECTSTUBFOR2EMOTE
TOIMPLEMENTTHESTUBFUNCTIONAL WEWONTBESAYINGMUCHATALLABOUT CLIENTS WHICHISALLWEVETALKEDABOUT
ITY BUTWEDONTCARE7HENWESAY #/2"!INTHISBOOKITSDEFINITELYOUT SOFAR 
hSTUBvWEMEANSOMETHINGWITHSTUB OFSCOPEFORTHEEXAMANDTHEBOOK &OR%NTITYBEANS THE(OMECANHAVE
BEHAVIOR7HETHERITSAN2-)STUBOR EXCEPTINAFEWTINYCASESWELLSEE AMOREIMPORTANTROLE ANDWELLSEE
SOMETHINGELSE ISANIMPLEMENTATION SCATTEREDTHROUGHOUTTHECHAPTERS  THAT BUTEVENWITH%NTITYBEANS THE
DETAILFORTHESERVER7ELLLOOKATTHAT
4HATGIVESYOUROBJECTSACHANCETOBE (OMESPRIMARYUSEISSTILLTOGET
INMOREDETAILINTHENEXTCHAPTER4HE
ACCESSED FOREXAMPLE BYEVENNON %*"/BJECTSTUBS!FTERTHAT MOSTOF
BOTTOMLINEISTHATYOUREALLYDONT
*AVACLIENTS/NETHING))/0SPECIFIESIS THECOMMUNICATIONBETWEENTHE
KNOWWHATTHESTUBCLASSCODELOOKS
THEWAYINFORMATIONFORTRANSACTIONS CLIENTANDTHEBEANCOMESTHROUGH
LIKE&ORTHATMATTER YOUREALLYDONT
ANDSECURITYCANBEPROPAGATED THE%*"/BJECTANDNOTTHE(OME
KNOWHOWTHE%*"/BJECTANDTHE
ALONGWITHTHEMETHODCALL ANDYOUR -OSTOFTHETIME INFACT CLIENTSUSE
(OMEAREIMPLEMENTED9OURENOT
CONTAINERMIGHTBETAKINGADVANTAGE THE(OMEJUSTTOGETTHE%*"/BJECT
SUPPOSEDTOKNOW
OFTHAT REFERENCE ANDTHENTHE(OME
9OUMIGHTHAVEAN%*"CONTAINERTHAT REFERENCEISTOSSEDOUT NOTNEEDED

 &KDSWHU
DUFKLWHFWXUDORYHUYLHZ

<PMJMIV0WUM
%VERY3ESSIONAND%NTITYBEANHASA(OME
-ESSAGE DRIVENBEANSDONTHAVEHOMESBECAUSE
MESSAGE DRIVENBEANSDONTHAVEACLIENTVIEWINOTHER
WORDS CLIENTSCANTGETAREFERENCETOA-ESSAGE DRIVEN
BEAN 
4HE(OMEHASONEMAINJOBTOHANDOUTREFERENCESTO
ABEANS#OMPONENTINTERFACE&ORA3ESSIONBEAN THATS
JUSTABOUTALLYOULLDOWITHTHEBEANS(OME&OR%NTITY
BEANS THOUGH THE(OMEPLAYSAMUCHBIGGERROLE
%ACHDEPLOYEDBEANHASITSOWN(OME ANDTHAT(OME
ISRESPONSIBLEFORALLBEANINSTANCESOFTHATTYPE&OR
EXAMPLE IFYOUDEPLOYA3HOPPING#ART3ESSIONBEAN
THECONTAINERWILLCREATEONE3HOPPING#ARTBEAN
(OME4HAT3HOPPING#ART(OMETAKESCAREOFALLTHE
INSTANCESOF3HOPPING#ARTBEANS)NOTHERWORDS IF (DFKGHSOR\HG6HVVLRQDQG
 CLIENTSEACHWANTTHEIROWN3HOPPING#ARTBEAN
REFERENCEWHICH REMEMBER MEANSAREFERENCETOTHE (QWLW\EHDQKDVD+RPH)RU
3HOPPING#ARTBEANS#OMPONENTINTERFACE THEONE H[DPSOHWKH$GYLFH%HDQKDV
ANDONLY3HOPPING#ART(OMEWILLHANDOUTALL 
REFERENCES DQ$GYLFH%HDQ+RPH1R
)FYOUDEPLOYTHREEBEANSASPARTOFANAPPLICATION SAY
A3HOPPING#ART #USTOMER AND0RODUCT THEREWILLBE
PDWWHUKRZPDQ\FOLHQWVJHW
THREE(OMESINTHESERVERREPRESENTINGEACHOFTHOSE DQ$GYLFH%HDQWKHUH·VRQO\
DEPLOYEDBEANS)TMAKESNODIFFERENCEHOWMANY
%*"/BJECTSANDSTUBSTHE(OMEOBJECTSHANDOUT THERE RQH$GYLFH%HDQ+RPH
WILLSTILLBEONLYTHREE(OMES
3ODOESTHATMEANTHATFOREACH(OMETHEREISONLYA 7KH+RPH·VMRELVWRKDQG
SINGLEINSTANCEOFTHECLASSTHATIMPLEMENTSTHE(OME
INTERFACEFORTHATBEANTYPE.OTNECESSARILY BUTTHATS RXWUHIHUHQFHVWRWKDWEHDQ·V
EXACTLYHOWWERESUPPOSEDTOTHINKABOUTIT7ELL &RPSRQHQWLQWHUIDFH
ACTUALLYREFERTOTHE(OMEASTHE(OMEOBJECT ANDWELL
ASSUMETHATTHERESALWAYSJUSTONEPERDEPLOYEDBEAN
TYPE4HESPECGUARANTEESTHATYOUCANTHINKABOUTIT
THATWAY REGARDLESSOFWHATYOURVENDORACTUALLYDOES 7HFKQLFDOO\WKHUH¶VDOLWWOHPRUHWRWKHVWRU\
WITHITSIMPLEMENTATIONFORTHE(OME EHFDXVHDEHDQPLJKWKDYHERWKDORFDO+RPH
DQGD5HPRWH+RPHEXWWKDW¶VUHDOO\XQOLNHO\
(YHQWKHQWKHUHZRXOGEHRQO\RQHRIHDFK
+RPHW\SH 5HPRWHRUORFDO QRPDWWHUKRZ
PDQ\EHDQVRIWKDWW\SHDUHDOLYH

\RXDUHKHUH 
WKHKRPH

*HWWLQJDQGXVLQJD+RPHIRUWKH$GYLFH%HDQ
 7KLVVFHQDULRDVVXPHV$GYLFH%HDQLVDVWDWHIXO6HVVLRQEHDQ

 7KH$GYLFH%HDQLVGHSOR\HGDQGWKHVHUYHU
LQVWDQWLDWHVWKH$GYLFH%HDQ+RPHREMHFW
DQGUHJLVWHUVLWZLWK-1',

VHUYLFHV
FOLHQW

+RPHLQWHUIDFH
+RPH
REMHFW

-1',1DPLQJ
6HUYLFH

³$GYLVRU´ VWXE

 7KHFOLHQWGRHVD-1',ORRNXSRQWKH+RPH
XVLQJWKHUHJLVWHUHGQDPH´$GYLVRUµ
VHUYLFHV

FOLHQW
+RPHLQWHUIDFH

+RPH
REMHFW

-1',1DPLQJ
6HUYLFH
ORRNX
S ´$G ³$GYLVRU´ VWXE
YLVRU
µ

 &KDSWHU
DUFKLWHFWXUDORYHUYLHZ

 -1',VHQGVEDFNDVWXEWRWKH5HPRWH+RPHREMHFW

VHUYLFHV
FOLHQW

+RPHLQWHUIDFH
+RPH
REMHFW

-1',1DPLQJ
6HUYLFH
VWXE

³$GYLVRU´ VWXE

 7KHFOLHQWDVNVWKH+RPHIRUDUHIHUHQFHWRWKH
&RPSRQHQWLQWHUIDFHE\FDOOLQJFUHDWH

,QRWKHUZRUGVWKHFOLHQWZDQWVWR´FUHDWHµDEHDQDQG
JHWWKHVWXEEDFNWRWKHEHDQ·V(-%2EMHFW
VHUYLFHV

FOLHQW
+RPHLQWHUIDFH
+RPHLQWHUIDFH

+RPH
FUH REMHFW
DWH

VWXE

\RXDUHKHUH 
WKHKRPH

7KH+RPHREMHFWPDNHVWKH(-%2EMHFW
DQGVHQGVEDFNWKHVWXE

 1RZWKH´VHUYLFHVµNLFNLQDQGWKHEHDQLVFUHDWHG

VHUYLFHV
FUH
DWH
EHDQ

FOLHQW

+RPHLQWHUIDFH
+RPHLQWHUIDFH

+RPH
REMHFW

VWXE

 7KH(-%2EMHFWLVPDGH WKHERG\JXDUGIRUWKLVQHZO\
FUHDWHGEHDQ DQGLWVVWXELVUHWXUQHGWRWKHFOLHQW
&RPSRQHQWLQWHUIDFH

VHUYLFHV

(-%
REMHFW

EHDQ

FOLHQW
+RPHLQWHUIDFH
+RPHLQWHUIDFH

+RPH
REMHFW

VWXE VWXE

 &KDSWHU
DUFKLWHFWXUDORYHUYLHZ

 1RZWKHFOLHQWFDQ ÀQDOO\ GRZKDWKH5($//<ZDQWV


WRGR³FDOODEXVLQHVVPHWKRGRQWKHEHDQ :KLFKRI
FRXUVHKDVWRJRWKURXJKWKH&RPSRQHQWLQWHUIDFH

&RPSRQHQWLQWHUIDFH
&RPSRQHQWLQWHUIDFH

VHUYLFHV
(-%
VWXE REMHFW

EHDQ

FOLHQW

+RPHLQWHUIDFH
+RPHLQWHUIDFH

+RPH
REMHFW

VWXE

 7KHFOLHQWFDQJHWULGRIKLV+RPHVWXELIKHGRHVQ·W
ZDQWDFFHVVWRPRUHEHDQVRIWKLVW\SH $GYLFH%HDQ 
EXWKHFDQVWLOONHHSFDOOLQJPHWKRGVRQWKH
&RPSRQHQWLQWHUIDFH
&RPSRQHQWLQWHUIDFH
&RPSRQHQWLQWHUIDFH

VHUYLFHV

(-%
VWXE REMHFW

EHDQ

FOLHQW
+RPHLQWHUIDFH
+RPHLQWHUIDFH

+RPH
REMHFW

VWXE

\RXDUHKHUH 
(-%DUFKLWHFWXUH

6KDUSHQ \RXU SHQFLO ,QWKHVFHQDULREHORZDVVXPHWKHFOLHQWKDVSUHYLRXVO\GRQHD-1',ORRNXSDQG


JRWWHQEDFNDVWXEWRWKH5HPRWH+RPHREMHFW
(YHU\WKLQJLQWKHSLFWXUHLVZKDWKDSSHQV$)7(5WKHFOLHQWKDVWKH+RPHVWXEDQG
QRZZDQWVWRJHWDUHIHUHQFHWRDQ(-%2EMHFWDQGXOWLPDWHO\FDOODEXVLQHVVPHWKRG
RQWKHEHDQ
(-%/LIHF\FOH

&OLHQWKDVRQO\D 1XPEHUWKHDUURZV XVLQJWKHER[HVRYHUWKHDUURZV LQWKHRUGHULQZKLFKWKH\


+RPHVWXEEXWZDQWV RFFXU7KHVHDUURZVDUHQ¶WQHFHVVDULO\GLUHFWPHWKRGFDOOV DOWKRXJKWKH\PLJKWEH 
WRLQYRNHDEXVLQHVV EXWUDWKHUDUURZVSRLQWLQJWRWKHQH[W7+,1*WKDWKDSSHQV7HOODVWRU\IRUZKDWKDS
PHWKRGRQDEHDQ SHQVDWHDFKDUURZ7KHUHPLJKWEHPRUHWKDQRQHULJKWDQVZHUGHSHQGLQJRQKRZ
\RXWHOOWKHVWRU\6RPHDUURZVDUHPLVVLQJ\RXFDQDGGWKHPLI\RXZDQWRUMXVW
DVVXPHVRPHWKLQJVDUHKDSSHQLQJWKDW\RXGRQ¶WKDYHDUURZVIRU

5HOD[DQGWDNH\RXUWLPH
,I\RXJHWVWXFNÀLSEDFNWKURXJKWKHSUHYLRXVSDJHVDQGVWXG\WKHGLDJUDPV

VHUYLFHV
VWXE (-%
REMHFW
EHDQ

FOLHQW

+RPH
VWXE REMHFW
2

 

 The stub tells the Home that the client wants 


to ÒcreateÓ a bean.
 

 

 


 &KDSWHU
DUFKLWHFWXUDORYHUYLHZ

:MDD=LHGAFLK

ƒ %HDQVWKDWDUHH[SRVHGWRUHPRWHFOLHQWVKDYHWZR5HPRWH
LQWHUIDFHVRQHIRUWKH(-%+RPHDQGRQHIRUWKH(-%2EMHFW
5HPRWHLQWHUIDFHPXVWH[WHQG GLUHFWO\RULQGLUHFWO\ 
YDUPL5HPRWHDQGDOOPHWKRGVPXVWGHFODUHD
YDUPL5HPRWH([FHSWLRQ
(-%WKHLQWHUIDFHWKDWH[WHQGV(-%2EMHFWLVFDOOHGWKH

 
HPRWH&RPSRQHQWLQWHUIDFH,WLVZKHUHWKHEXVLQHVVPHWKRGV
HGHFODUHG

AREBLUE
S A RE R E D VIOLETS RI TTENBY9
/5 KHFOLHQWQHYHUFDOOVPHWKRGVRQWKHEHDQLWVHOIEHFDXVHWKH
2OSE RF A C E SAREW
OTEIN TE HDQLV127D5HPRWHREMHFW
4HE2EM
CT
BIGPROJE KHFRQWDLQHULPSOHPHQWVWKH5HPRWH&RPSRQHQWLQWHUIDFHE\
R E D A N DQUITEA T
2OSESARE /BJEC XLOGLQJDFODVVWKDWLPSOHPHQWVLW7KLVFODVVLVXVHGWRPDNHWKH
ETHE%*"
S E RV E R WILLMAK -%2EMHFWIRUWKHEHDQ 7KHEHDQ·VERG\JXDUG
4HE
T
WILLFLOA
E D T HEPETALS TE
KHFRQWDLQHUDOVRFUHDWHVWKHVWXEWRWKH(-%2EMHFW
2OSESA RE R ER2E O
M
LA S S I TS ELF ISNEV RXFUHDWHWKH5HPRWH&RPSRQHQWLQWHUIDFHE\ZULWLQJDQ
C
4HEBEAN
UTRYIT
WHUIDFHWKDWH[WHQGVMDYD[HME(-%2EMHFW DQLQWHUIDFHWKDW
R N
l E ST WORK9O TMORE [WHQGVMDYDUPL5HPRWH 
NOTO U STICKALO
9EAH /+ THESETHINGSWILL ELF
ER URS
2EMEMB UPWITHTHEMYO ƒ <RXDOVRFUHDWHWKHEHDQFODVVZKHUHWKHDFWXDOEXVLQHVV
ME
IFYOUCO PHWKRGVDUHLPSOHPHQWHG GHVSLWHWKHIDFWWKDWWKHEHDQFODVV
WHFKQLFDOO\GRHVQ·WLPSOHPHQWWKH5HPRWH&RPSRQHQWLQWHUIDFH 
ƒ 7KH+RPHLVWKHIDFWRU\IRUWKHEHDQ,WVPDLQMRELVWRKDQGWKH
FOLHQWDUHIHUHQFHWRWKHEHDQ%XWUHPHPEHUWKHFOLHQWFDQQHYHU
WUXO\JHWDUHIHUHQFHWRWKHEHDQ³WKHEHVWWKHFOLHQWFDQGRLVWR
JHWDUHIHUHQFHWRWKHEHDQ·V(-%2EMHFW
ƒ <RXFUHDWHWKH+RPHLQWHUIDFHE\ZULWLQJDQLQWHUIDFHWKDW
H[WHQGVMDYD[HME(-%+RPH DQLQWHUIDFHWKDWH[WHQGV
MDYDUPL5HPRWH 
ƒ 7KHFRQWDLQHULVUHVSRQVLEOHIRULPSOHPHQWLQJWKH+RPHLQWHUIDFH
E\EXLOGLQJDFODVVWKDWLPSOHPHQWVLWDQGWKHFRQWDLQHUDOVR
JHQHUDWHVWKHVWXEIRUWKH+RPH
ƒ 7KHUHLVRQO\RQH+RPHSHUGHSOR\HGEHDQ)RUH[DPSOHD
6KRSSLQJ&DUWEHDQZRXOGKDYHDVLQJOH6KRSSLQJ&DUW+RPH
UHJDUGOHVVRIKRZPDQ\6KRSSLQJ&DUWEHDQVKDYHEHHQFUHDWHG

\RXDUHKHUH 
VHVVLRQEHDQRYHUYLHZ

)ZKPQ\MK\]ZITW^MZ ^QM_";M[[QWVJMIV[
&OLHQWVVKDUHWKH+RPHEXWQHYHUWKHEHDQ
(DFKFOLHQWJHWVKLVRZQ(-%2EMHFWUHIHUHQFHDQGKLVRZQEHDQ7KHFOLHQWQHYHU
VKDUHVDEHDQZLWKDQRWKHUFOLHQWDOWKRXJKWKHPHDQLQJRI³VKDUHV´GHSHQGV
RQZKHWKHUWKHEHDQLVVWDWHIXORUVWDWHOHVV :H¶OOVHHWKDWLQWKHQH[WFKDSWHU 
+RZHYHUWKHUH¶VRQO\RQH+RPHREMHFWIRUWKLVSDUWLFXODUEHDQW\SH VD\
$GYLFH%HDQ VRERWKFOLHQWVKDYHDVWXEWRWKHRQHDQGRQO\$GYLFH+RPH%RWK
FOLHQWVDVNWKHVDPH$GYLFH+RPHIRUDUHIHUHQFHWRDQ$GYLFHEHDQ 2IFRXUVH
WKHFOLHQWQHYHUJHWVWKHUHIHUHQFHWRWKHEHDQLQVWDQFHEXWLQVWHDGJHWVDUHIHUHQFH
WRWKHEHDQ¶V(-%2EMHFW$QGVLQFH(-%2EMHFWLV5HPRWHWKHFOLHQWVJHWVDVWXE

6HUYHU
&OLHQW2QH

VHUYLFHV
(-%
VWXE REMHFW
FOLHQW
EHDQ

VWXE
7KHUH·VRQO\RQH+RPH
REMHFWEXWHDFKFOLHQW
JHWVKLVRZQGHGLFDWHG
+RPH EHDQDQG(-%2EMHFW
REMHFW

EHDQ
VHUYLFHV

&OLHQW7ZR
(-%
REMHFW

FOLHQW VWXE

A session bean client is guaranteed to


be the only client executing a method
on that bean. While the client is in
VWXE the middle of a business method, that
bean belongs to that client.

 &KDSWHU
DUFKLWHFWXUDORYHUYLHZ

)ZKPQ\MK\]ZITW^MZ ^QM_"-V\Q\aJMIV[
&OLHQWVVKDUHWKH+RPHDQGPD\VKDUHWKHEHDQ
(DFKFOLHQWKDVKLVRZQUHIHUHQFHWRWKHRQHDQGRQO\+RPHIRUWKLVEHDQ VD\
&XVWRPHU%HDQ %XWLIWZRFOLHQWVDUHWU\LQJWRDFFHVVWKHVDPH&XVWRPHU )UHG6PLWK
 WKHQERWKFOLHQWVKDYHDUHIHUHQFHWRWKHVDPH(-%2EMHFW7KH(-%2EMHFWIRU
,QRWKHUZRUGVWKH(-%2EMHFWLVWKHERG\JXDUGIRUDSDUWLFXODU&XVWRPHU OLNH)UHG6PLWK 
,IDOOWKHFOLHQWVDUHWU\LQJWRDFFHVV)UHG6PLWKWKH\ZLOOHDFKKDYHWKHLURZQVWXE
RIFRXUVHEXWDOOVWXEVZLOOFRPPXQLFDWHZLWKWKHVDPH5HPRWH(-%2EMHFW$QGWKHUHZLOO
EHRQO\RQHEHDQUHSUHVHQWLQJ)UHG6PLWK,IDFOLHQWZDQWVWRDFFHVVWZRGLIIHUHQW
FXVWRPHUVWKRXJKWKHFOLHQWZLOOKDYHWZRVWXEVDQGWKRVHVWXEVZLOOEHIRUWZRGLIIHUHQW
(-%2EMHFWVRQHIRUHDFKFXVWRPHU$QGWKDWDOVRPHDQVWZRGLIIHUHQWEHDQV

&OLHQW2QH 6HUYHU

)UHG6PLWK
VWXE )UHG6PLWK·V
FOLHQW  
ERG\JXDUG

EHDQ
VWXE &XVWRPHU
(-% WDEOH
REMHFW

'%
VHUYLFHV

+RPH
REMHFW

&OLHQW7ZR

EHDQ

6N\OHU6DQ
(-%
VWXE REMHFW 

FOLHQW 6N\OHU6DQ·V
ERG\JXDUG
VWXE


VWXE


\RXDUHKHUH 
VHVVLRQEHDQRYHUYLHZ

)ZKPQ\MK\]ZITW^MZ ^QM_"
+ZMI\QVOI;\I\MN]T;M[[QWVJMIV
$IWHUJHWWLQJD+RPHVWXEWKHFOLHQWFDOOV³FUHDWH´RQWKH+RPH
7KH+RPHFUHDWHVWKHEHDQDQGWKH(-%2EMHFWIRUWKHEHDQDQG
KDQGVEDFNWKH(-%2EMHFWVWXE

VHUYLFHV
(-% 
VWXE REMHFW

EHDQ


FOLHQW 
+RPH
REMHFW

VWXE


 The client calls create() on the Home stub (create() is a method in the
Home interface).
 The stub sends the create() call to the Remote Home object.

 The Home object steps in and adds its services.

 The EJBObject is created/instantiated for the bean.

 The bean itself is instantiated.

 The EJBObject stub is returned to the client, so the client can call
business methods on the Component interface.

 &KDSWHU
DUFKLWHFWXUDORYHUYLHZ

)ZKPQ\MK\]ZITW^MZ ^QM_"
+ZMI\QVOI;\I\MTM[[;M[[QWVJMIV
$IWHUJHWWLQJD+RPHVWXEWKHFOLHQWFDOOV³FUHDWH´RQWKH+RPH7KH
+RPHJLYHVWKHFOLHQWDVWXEWRDQH[LVWLQJ(-%2EMHFWEXWGRHVQRW
DVVRFLDWHDEHDQZLWKWKLV(-%2EMHFW,QVWHDGWKHEHDQVWD\VLQDSRRO
XQWLOWKHFOLHQWXVHVWKH(-%2EMHFWVWXEWRFDOODEXVLQHVVPHWKRG

VHUYLFHV
(-% 
VWXE REMHFW

EHDQ

FOLHQW  
+RPH
REMHFW
EHDQSRRO

VWXE


 The client calls create() on the Home stub (create() is a method in the
Home interface).
 The stub sends the create() call to the Remote Home object.

 The Home container steps in and adds its services.

 An EJBObject is created for this client.

 The bean stays in the bean pool ! It comes out only to service an actual
business method, if the client invokes one on the EJBObject stub.
 The EJBObject stub is returned to the client, so the client can call
business methods on the Component interface.

\RXDUHKHUH 
VHVVLRQEHDQRYHUYLHZ

2.VRWKHEHDQFRPHVRXW
RIWKHSRRORQO\ZKHQWKHFOLHQW
FDOOVDEXVLQHVVPHWKRGEXWWKHQ
KRZGLGWKHEHDQJHWLQWKHSRROLQ
WKHÀUVWSODFH",ILWZDVQ·WFUHDWHG
ZKHQWKHFOLHQWFDOOHGFUHDWH 
WKHQZKDWGLGFDXVHWKHEHDQWR
EHFUHDWHG"

?PWKZMI\M[\PM[\I\MTM[[[M[[QWV
JMIVIVL_PMV'
&IRST WEHAVETODElNEWHATCREATEMEANS&ORASESSIONBEAN IT
MEANSTHEBEANINSTANCEISPHYSICALLYINSTANTIATEDANDINITIALIZED
ASABEAN&ORANENTITYBEAN ITSCOMPLETELYDIFFERENT SOTHIS
CONVERSATIONAPPLIESJUSTTOSESSIONBEANS,ATERWELLGETINTO
WHATITMEANSTOCREATEANENTITYBEAN
&ORSTATEFULSESSIONBEANS THECREATEISTRIGGEREDBYTHECLIENT
4HECLIENTCALLSCREATEONA(OMESTUB ANDEVERYTHINGHAPPENS
ATTHATPOINTˆAN%*"/BJECTISINSTANTIATEDFORTHISNEWABOUT TO
BE CREATED BEAN ANDTHENTHEBEANITSELFISCREATEDANDLINKEDTO
THE%*"/BJECTTHEBEANSBODYGUARD 
"UTFORSTATELESSSESSIONBEANS THECLIENTCREATEANDTHEACTUAL
CREATIONOFTHEBEANAREDECOUPLED)NOTHERWORDS JUSTBECAUSE
THECLIENTCALLSCREATEONA(OMESTUBDOESNTMEANABEANWILL
BECREATEDATTHATPOINT
3TATELESSSESSIONBEANSARENTCREATEDUNTILTHECONTAINERDECIDES
ITNEEDSONE ANDTHATSREALLYUPTOTHECONTAINER)TMIGHT
FOREXAMPLE MAKEABUNCHOFBEANINSTANCESIECREATESOME
BEANS ANDPLOPTHEMINAPOOLBEFOREEVENASINGLECLIENT
HASASKEDFORONEBYCALLINGCREATEONA(OMESTUB /R THE
CONTAINERMIGHTMAKEJUST IN TIMEBEANS ANDWAITUNTILTHE
CLIENTINVOKESABUSINESSMETHODBEFOREGOINGTOTHETROUBLEOF
PHYSICALLYCREATINGTHEBEAN

 &KDSWHU
DUFKLWHFWXUDORYHUYLHZ

;\I\MTM[[[M[[QWVJMIV[IZMUWZM[KITIJTM
&OLHQWVGRQ·WVKDUH(-%2EMHFWVEXWWKHVDPH
EHDQFDQVHUYLFHPXOWLSOH(-%2EMHFWV-XVWQRWDW
WKHVDPHWLPH$VLQJOHEHDQFDQKDQGOHPXOWLSOH
FOLHQWVDVORQJDVRQO\RQHFOLHQWDWDWLPHLVLQWKH
PLGGOHRIDEXVLQHVVPHWKRGLQYRFDWLRQ

&OLHQW2QH 6HUYHU

VWXE
FOLHQW

VWXE
(-%
REMHFW

+RPH
REMHFW EHDQ

&OLHQW7ZR

(-% EHDQSRRO
REMHFW

VWXE

FOLHQW
The bean comes out of the pool
VWXE
ONLY when a client invokes
a business method on the
EJBObject stub. So, a single
bean can jump out to handle
one clientÕs call, then jump back
in the pool, then jump out to
handle a different clientÕs call,
and then jump back in the pool...

\RXDUHKHUH 
VHVVLRQEHDQRYHUYLHZ

YiX`e 6KDUSHQ \RXU SHQFLO


gfn\i
:K\GRHVWKH³SRRO´DUFKLWHFWXUHZRUNWRPDNH
7) $VWDWHIXOVHVVLRQEHDQFDQEHVKDUHG
EHWZHHQPXOWLSOHFOLHQWV
VWDWHOHVVVHVVLRQEHDQVPRUHVFDODEOHEXW
QRWVWDWHIXOVHVVLRQEHDQV":K\FDQ¶WVWDWHIXO
VHVVLRQEHDQVXVHWKHEHDQSRRO" 7) $QHQWLW\EHDQFDQEHVKDUHGEHWZHHQ
PXOWLSOHFOLHQWVDVORQJDVWKHHQWLW\
EHLQJVKDUHGLVWKHVDPH

7) 6WDWHOHVVVHVVLRQEHDQVDUHFUHDWHG
there are no ZKHQWKHFOLHQWLQYRNHVFUHDWHRQWKH
Dumb Questions +RPH

Q: (ERESSOMETHINGTHATIS2%!,,9
7) 6WDWHIXOVHVVLRQEHDQVDUHFUHDWHG
ZKHQWKHFOLHQWLQYRNHVFUHDWHRQWKH
STARTINGTOANNOYMEWHYDOYOUHAVEA +RPH
#OMPONENTINTERFACEANDA(OMEINTERFACE
WHENTHE2EMOTEOBJECTSARECALLEDTHE
7) 7KHUHPXVWEHRQHVWDWHOHVVVHVVLRQ
(OMEANDTHE%*"/BJECT7HYISNTITJUST EHDQSHUFOLHQWIRUDVORQJDVWKHFOLHQW
THE%*"/BJECTINTERFACEANDTHE(OME/BJECT KROGVDUHIHUHQFHWRDQ(-%2EMHFW
INTERFACE/RTHE(OMEANDTHE%*"
INTERFACES7HYTHEINCONSISTENCY
7) 7KHUHPXVWEHRQHVWDWHOHVVVHVVLRQ
EHDQSHUFOLHQWIRUDVORQJDVWKHFOLHQW

A: !CTUALLY THATREALLYPISSESUSOFFTOO"UT
YOULLGETUSEDTOIT"ETHANKFUL ITWASEVEN
LVLQWKHPLGGOHRIDEXVLQHVVPHWKRG
LQYRFDWLRQRQWKHEHDQ

WORSEIFYOULEARNED%*"PRIORTOVERSION
WHENITWASCALLEDTHE(OMEANDTHE2EMOTE 7) (DFKHQWLW\EHDQPXVWKDYHLWV
.OWTHATWASAREALPROBLEMBECAUSE FIRST (-%2EMHFW
OFALL BOTHTHE(OMEANDTHE2EMOTEWERE
2EMOTEINTHEJAVARMISENSE3ECOND ASOF
%*"YOUCANHAVEA(OMEANDA2EMOTE
THATARENTACTUALLY2EMOTE3O THEYHAD
TOCHANGETHENAMETO#OMPONENTINTERFACE
INSTEADOFCALLINGIT4(%2EMOTEINTERFACE
SINCEITMIGHT INFACT NOTBE2EMOTE)FYOU
JUSTREMEMBERTHATTHE#OMPONENTINTERFACE
ISWHERETHEBUSINESSMETHODSARE ANDTHE
(OMEISWHERETHE UM (OMEMETHODSARE
YOUSHOULDBEFINE*USTREMEMBER #OMPONENT
BUSINESS%*"/BJECTOR%*",OCAL/BJECT BUT
WEWONTGOTHEREUNTILTHENEXTCHAPTER  $QVZHUV)7)7)77

 &KDSWHU
DUFKLWHFWXUDORYHUYLHZ

there are no
Dumb Questions

Q: (OWDOESTHISWORK)STHERE
MADEITTHISFAR WEASSUMETHATYOU
ALREADYKNOWTHEANSWERANDWERE Q: (OWLONGDOESASTATEFULBEAN
ONEBEANPOOLFORALLBEANS ORONE JUSTCONFIRMINGIT KEEPCLIENT SPECIlCSTATE
BEANPOOLFORAPARTICULARTYPEOF !STATEFULBEAN REMEMBER HOLDSCLIENT
BEAN CONVERSATIONALSTATE4HATMEANSTHE
BEANHASTOSAVECLIENT SPECIFICSTATE A: /NLYFORTHELIFEOFTHESESSION

A: )NREALITY WEDONTKNOWWHAT
THECONTAINERIMPLEMENTATIONIS BUT
INOTHERWORDS ITHASTOREMEMBER
THINGSABOUTTHISCLIENT ACROSS
!SESSIONCONTINUESUNTILTHECLIENT
TELLSTHEBEANHESDONEBYCALLING
REMOVE ONTHEBEANS#OMPONENT
MULTIPLEMETHODINVOCATIONSFROMTHE
CONCEPTUALLYTHERESONEPOOLFOR CLIENT INTERFACE ORTHESERVERCRASHES ORTHE
EVERYBEANTYPE3O IFYOUDEPLOY BEANTIMESOUTWELLCOVERTHATINTHE
AN!DVICE"EANANDA7EATHER"EAN 4HINKOFASHOPPINGCARTAGAINˆA 3ESSIONLIFECYCLECHAPTER 
ANDBOTHARESTATELESSSESSIONBEANS STATEFULBEANNEEDSTOREMEMBER
THEYLLEACHGETTHEIROWNPOOL WHATSINTHECLIENTSCARTEACHTIMETHE
CLIENTCALLSADD)TEM4O#ART !STATELESS
BEAN ONTHEOTHERHAND DOESNTHAVE Q: 3OSTATEFULSESSIONBEANS
Q: $OESEACHSTATELESSSESSION
TOREMEMBERANYTHINGONTHECLIENTS
BEHALF SOTOACLIENT ONESTATELESS ARENTSCALABLE
BEANHAVEITSOWN%*"/BJECT BEANOFAPARTICULARTYPE ISASGOOD
ASANYOTHERBEANOFTHATTYPE
A: .O THEYARE*USTNOTASSCALABLE
A: 3ORTOF!STATELESSSESSION
BEANDOESNTNEEDABODYGUARD
)FTHE!DVICE"EANSIMPLYRETURNS
APIECEOFADVICENOTCONNECTED
ASSTATELESSBEANS

INANYWAYTOANYTHINGITTOLDTHE
UNTILHESACTUALLYINVOLVEDINA CLIENTBEFOREORANYTHINGTHECLIENT
METHODINVOCATION3O THECLIENT
GETSAREFERENCETOAN%*"/BJECT
TOLDIT THENTHERESNONEEDFORTHE
!DVICE"EANTOBESTATEFUL)NTHATCASE
Q: (OWCANASTATEFULBEANBE
BUTTHEBEANISNTASSOCIATEDWITH SCALABLEIFYOUALWAYSNEEDONEBEAN
EACHTIMEACLIENTCALLSGET!DVICE
THAT%*"/BJECTUNTILTHECLIENTCALLS FOREVERYCLIENT
ONTHE#OMPONENTINTERFACEIETHE
ABUSINESSMETHOD!TTHATPOINT %*"/BJECT ANY!DVICE"EANISJUSTAS
THEBEANSLIDESOUTOFTHEPOOLTO
SERVICETHEMETHOD3O THE%*"/BJECT
THECLIENTHASISFORAKINDOFBEAN
CAPABLEOFRUNNINGTHEMETHODASANY
OTHER A: 9OUDONEEDASEPARATEBEAN
ALLOCATEDFOREACHCLIENT BUTNOTEVERY
!DVICE"EAN 7EATHER"EAN ETC BUT /NTHEOTHERHAND IFTHE!DVICE"EAN BEANHASTOBEACTIVELYCONSUMING
NOTASPECIFICINSTANCEOFABEAN WEREMODIFIEDTORETURN SAY RANDOM RESOURCES)FTHESTATEFULSESSIONBEAN
BUTNON REPEATINGADVICE THENTHE CLIENTISTAKINGALONGTIMEBETWEEN
!DVICE"EANWOULDHAVETOBESTATEFUL METHODCALLS THESTATEFULBEANCAN
SOTHATITCOULDKEEPTRACKOFPREVIOUS BETEMPORARILYTAKENDOWNANDPUT
Q: 7HYDONTSTATEFULSESSION
ADVICEANDNEVERREPEATIT INASTATECALLEDPASSIVATION4HISSTATE
PRESERVESTHECLIENT SPECIFICSTATE OF
BEANSHAVEAPOOL
COURSE BUTREDUCESTHENUMBEROF
BEANSCURRENTLYALIVEINTHESERVER4HE
A: (AVEYOUALREADYTHOUGHT
ABOUTTHISINTHE"RAIN0OWERONTHE
BEANCOMESOUTOFPASSIVATIONAND
BACKINTOACTIVEDUTYACTIVATION WHEN
PREVIOUSPAGE"ECAUSEIFYOUHAVENT THECLIENTCALLSABUSINESSMETHOD
DONTREADANYFURTHERUNTILYOUVE
COMEUPWITHYOUROWNIDEAS)FYOU

\RXDUHKHUH 
PHVVDJHGULYHQEHDQRYHUYLHZ

)ZKPQ\MK\]ZITW^MZ ^QM_"
5M[[IOMLZQ^MVJMIV[
0HVVDJHGULYHQEHDQVGRQ¶WKDYHDFOLHQWYLHZ7KDWPHDQVWKH\GRQ¶W
KDYHLQWHUIDFHV 5HPRWHRUORFDO WKDWH[SRVHPHWKRGVWRWKHFOLHQW,Q
RWKHUZRUGVPHVVDJHGULYHQEHDQVGRQ¶WKDYHD+RPHRU(-%2EMHFW
7KH\GRQ¶WKDYHD+RPHLQWHUIDFHRUD&RPSRQHQWLQWHUIDFH

O
-DYD0HVVDJLQJ6HUYLFH -06



M VHUYLFHV
FOLHQW

E
  EHDQ

D
EHDQ EHDQSRRO

 The client sends a message to a JMS messaging service.

 The messaging service delivers the message to the container.

 The container gets a message-driven bean out of the pool.

 The container delivers the message to the bean (by calling the beanÕs
onMessage() MessageListener interface method).

 &KDSWHU
DUFKLWHFWXUDORYHUYLHZ

?PI\OWM[_PMZM'
3ODFHWKHREMHFWVDQGFODVVHVLQWKHDSSURSULDWHVSRWRQHLWKHU
([HUFLVH WKHFOLHQWWKHVHUYHURULQERWKSODFHV \HV\RXFDQUHXVHDQ
REMHFW 1RWHQRWDOOWKHSLHFHVDUHKHUHVRZKHQ\RX¶UHGRQH
LI\RXFDQWKLQNRIRWKHUWKLQJVWKDWVKRXOGJRLQWRWKHSLFWXUH
FODVVHVRUREMHFWV GUDZWKHPLQ

FOLHQW VHUYHU

(-%
REMHFW





 
 
 




(-%2EMHFWLQWHUIDFH

EHDQ
FOLHQWFODVV

 VWXE


 



'% 




EHDQFODVV VWXE







KRPHFODVV






KRPHVWXEFODVV
+RPH
REMHFW

\RXDUHKHUH 
EHDQWDEOH

7ZOIVQbMaW]ZJMIV[
)LQLVKWKHWDEOHE\SXWWLQJLQDFKHFNPDUN HYHQEHWWHULI\RX
([HUFLVH DGGQRWHV LQWKHER[HVFRUUHVSRQGLQJWRWKHODEHOVWKDWDSSO\
WRWKDWEHDQW\SH:H¶YHGRQHRQHRIWKHER[HVIRU\RX,I\RX
JHWVWXFNJREDFNWKURXJKWKHSUHYLRXVWZRFKDSWHUV<RXPLJKW
KDYHWRPDNH\RXUEHVWJXHVVRQDIHZWKLQJV7KDW¶V2.²
\RX¶OOKDYHLWDOOZRUNHGRXWZD\EHIRUHWKHHQGRIWKHERRN:H
EHOLHYHLQ\RX<RXFDQGRLW>FXHWKHPHVRQJIURP³5RFN\´@

6WDWHIXO6HVVLRQ 6WDWHIXO6HVVLRQ (QWLW\%HDQV 0HVVDJHGULYHQ


%HDQV %HDQV %HDQV

8VHVDSRRO Yes. Since they


donÕt keep any
client-speciÞc data,
you donÕt need one
per each client.
0XOWLSOHFOLHQWVFDQKDYHDUHIHUHQFH
WRWKHVDPHEHDQ

*XDUDQWHHGWRVXUYLYHDFRQWDLQHU
FUDVK

+DVDFOLHQWYLHZ

$OORZVDV\QFKURQRXVFRPPXQLFDWLRQ

5HSUHVHQWVDSURFHVV

5HSUHVHQWVD´WKLQJµLQDQXQGHUO\
LQJSHUVLVWHQWVWRUH OLNHDGDWDEDVH

 &KDSWHU
H[HUFLVHVROXWLRQ DUFKLWHFWXUDORYHUYLHZ

([HUFLVH
6ROXWLRQV
?PI\OWM[_PMZM'














EHDQ

 EHDQFODVV 

VWXE (-% 


(-%2EMHFWLQWHUIDFH 
REMHFW 









 (-%2EMHFWLQWHUIDFH
 
 

  +RPH 



KRPHVWXEFODVV 
 REMHFW






FOLHQWFODVV VWXE 






KRPHFODVV KRPHVWXEFODVV

FOLHQW VHUYHU '%

127(\RXZRQ¶W¿QGD¿QLVKHGVROXWLRQIRUWKH2UJDQL]H
<RXU%HDQVWDEOH:HZDQW<28WR¿OOWKLVRXW,W¶V\HW
DQRWKHUVSHFLDO/HDUQLQJ2SSRUWXQLW\IRUZKLFK\RX¶OO
DOZD\VUHPHPEHUXVZLWKIRQGQHVV

\RXDUHKHUH 
(-%DUFKLWHFWXUH

2KPDQ7KLVFKDSWHUZDV
TXLWHDQRUGHDO&DQZHSOHDVH
MXVWVNLSWKHH[DPTXHVWLRQVIRUWKLV
FKDSWHU",SURPLVH,·OOGRWKHPLQDOO
WKHRWKHUFKDSWHUV

<RX¶UHLQOXFN7KLVFKDSWHULV
DOOEDFNJURXQGNQRZOHGJHVR
WKHUHDUHQ¶WDQ\REMHFWLYHVRU
H[DPTXHVWLRQV
$SSUHFLDWHWKHPRPHQW²
&KDSWHULVMXVWDSDJHWXUQ
DZD\

 &KDSWHU
the client view
5 4
4 ([SRVLQJ<RXUVHOI

<RXFDQ·WNHHS\RXUEHDQSULYDWH&OLHQWVQHHGWRVHHZKDW\RX¶YHJRW
([FHSWIRUPHVVDJHGULYHQEHDQVZKLFKGRQ¶WKDYHDFOLHQWYLHZ 7KH$GYLFH%HDQ
H[SRVHGWKHJHW$GYLFH PHWKRGLQLWV&RPSRQHQWLQWHUIDFH²WKHSODFHZKHUH\RXGHFODUH
EXVLQHVVPHWKRGV%XWWKDW¶VQRWDOOWKHFOLHQWVHHV5HPHPEHUWKH$GYLFHLQWHUIDFH
H[WHQGHG(-%2EMHFWDQLQWHUIDFHZLWKPHWKRGVRILWVRZQ0HWKRGVWKHFOLHQWFDQVHH
0HWKRGVWKHFOLHQWFDQFDOO$QGLWZRUNVWKHVDPHZD\ZLWKWKH+RPHLQWHUIDFH,QWKLV
FKDSWHUZH¶OOOHDUQZKDW\RXUHDOO\H[SRVHWRWKHFOLHQWDQGKRZWKHFOLHQWZRUNVLQFOXGLQJ
ERWK5HPRWHDQGORFDOLQWHUIDFHV

WKLVLVDQHZFKDSWHU 
H[DPREMHFWLYHV

7KH&OLHQW9LHZ

2IILFLDO :KDWLWUHDOO\PHDQV
 ,GHQWLI\FRUUHFWDQGLQFRUUHFW <RXKDYHWRNQRZHYHU\WKLQJDERXWWKHKRPHLQWHUIDFH
VWDWHPHQWVRUH[DPSOHVDERXWWKH 7KLVSDUWLFXODUREMHFWLYHGRHVQ¶WLQFOXGHWKHVSHFLDO
FOLHQWYLHZRIDVHVVLRQEHDQ¶VORFDO FKDUDFWHULVWLFVRIDQHQWLW\EHDQKRPHEXWPRVWRIWKH
DQGUHPRWHKRPHLQWHUIDFHVLQFOXGLQJ GHWDLOVDERXWWKHFOLHQW¶VYLHZRIDEHDQ¶VKRPHDUHVWLOO
WKHFRGHXVHGE\WKHFOLHQWWRORFDWHD FRYHUHGLQWKLVREMHFWLYH DQGWKLVFKDSWHU 
VHVVLRQEHDQ¶VKRPHLQWHUIDFH )RUH[DPSOH\RXKDYHWRNQRZH[DFWO\ZKLFKPHWKRGV
DUHLQMDYD[HME(-%+RPH WKH5HPRWHKRPHLQWHUIDFH 
DQGZKLFKPHWKRGVDUHLQMDYD[HME(-%/RFDO+RPH
WKHORFDOKRPHLQWHUIDFH $QGLW¶VQRWHQRXJKWRNQRZ
ZKDWWKHPHWKRGVDUH²\RXDOVRKDYHWRNQRZWKH
FLUFXPVWDQFHVXQGHUZKLFKWKH\FDQEHFDOOHG<RXKDYH
WRNQRZIRULQVWDQFHWKDWD5HPRWHVHVVLRQEHDQFOLHQW
FDQUHPRYHDEHDQXVLQJWKHEHDQ¶VKRPHEXWDORFDO
FOLHQWFDQQRW$QG\RXKDYHWRNQRZWKDWDORFDOKRPH
KDVIHZHUPHWKRGVWKDQD5HPRWHKRPHDQGZKDWWKDW
PHDQVIRUWKHFOLHQW
)LQDOO\IRU2EMHFWLYH\RXKDYHWRNQRZWKHLQVDQG
RXWVRIKRZDFOLHQWGRHVD-1',ORRNXSRQDEHDQ¶V
KRPHLQWHUIDFH7KDWLQFOXGHVWKHV\QWD[RIWKHFOLHQW¶V
ORRNXSFRGHWKHUXOHVIRUSHUIRUPLQJWKHORRNXSDQG
KRZWRXVHWKHKRPHLQWHUIDFHWRJHWDUHIHUHQFHWR
DEHDQ¶VFRPSRQHQWLQWHUIDFH<RXKDYHWRNQRZIRU
H[DPSOHWKHUXOHVIRUQDUURZLQJDKRPHVWXEDQGJLYHQ
DFRGHVQLSSHW\RXPXVWEHDEOHWRUHFRJQL]HZKHWKHU
WKHFOLHQWLVORFDORU5HPRWH

 ,GHQWLI\FRUUHFWDQGLQFRUUHFW 7KLVREMHFWLYHLVMXVWOLNHH[FHSWLW¶VDERXWWKH


VWDWHPHQWVRUH[DPSOHVDERXWWKH FRPSRQHQWLQWHUIDFH%XWDJDLQ\RXPXVWNQRZDOOWKH
FOLHQWYLHZRIDVHVVLRQEHDQ¶VORFDO PHWKRGVRIERWKMDYD[HME(-%2EMHFWDQG
DQGUHPRWHFRPSRQHQWLQWHUIDFHV MDYD[HME(-%/RFDO2EMHFWDQGKRZWKH\¶UHXVHGE\WKH
FOLHQWDQG\RXPXVWEHDEOHWRUHFRJQL]HWKHGLIIHUHQFH
EHWZHHQD5HPRWHDQGORFDOFOLHQWMXVWE\ORRNLQJDW
FRGH

 &KDSWHU
WKHFOLHQWYLHZ

?PI\\PMKTQMV\ZMITTa_IV\[
4HECLIENTHASAGOAL!VISION!QUEST3HEWANTSTOCALLABUSINESSMETHODONTHE
BEAN3OMETHINGEXPOSEDINTHECOMPONENTINTERFACE.EVERFORGETTHATULTIMATE
GOALITISEASYTOGETBOGGEDDOWNINALLTHEDETAILS"UTIFYOUKEEPFOCUSEDONTHE
CLIENTSDRIVINGNEED YOULLHAVEAMUCHEASIERTIMEREMEMBERINGTHINGSLIKE SAY
THERETURNTYPEOFASESSIONBEANSHOMECREATE METHOD

%XW,FDQ·W %XWKRZGR,JHWD
JHWDUHIHUHQFH UHIHUHQFHWRWKH(-%REMHFW"
WRWKHEHDQ,KDYHWR ,KDYHWRJRWKURXJKWKHEHDQ·V
:KDW,UHDOO\ JRWKURXJKWKHEHDQ·V KRPH<HDKWKDW·VULJKW,QHHG
ZDQWLVWRFDOOD FRPSRQHQWLQWHUIDFH WRVWDUWE\JHWWLQJWKHVWXEWR
EXVLQHVVPHWKRGRQ WKH(-%REMHFW WKHEHDQ·V+RPHREMHFW
DEHDQ

\RXDUHKHUH 
WKH+RPHLQWHUIDFH

1\ITT[\IZ\[_Q\P\PMPWUMQV\MZNIKM
4HECLIENTWANTSTHEBEAN7ELL TOOBAD4HE
CLIENTWILLNEVERGETTHEBEAN BECAUSENOBODY
TALKSTOTHEBEANEXCEPTTHECONTAINER 
4HEBESTTHECLIENTCANHOPEFORISA
REFERENCETOTHEBEANSBODYGUARDˆTHE
COMPONENTINTERFACE!NDTHECLIENT
GETSAREFERENCETOTHEBEANSCOMPONENT :KDWWKHFOLHQW5($//<
INTERFACEBYCALLINGAMETHODONTHE
BEANSHOMEINTERFACE ZDQWVLVDUHIHUHQFHWRWKH
WKHUH DUH QR EHDQ%XWWKHEHVWWKHFOLHQW
'XPE 4XHVWLRQV
FDQGRLVJHWDUHIHUHQFH
Q: (OWCOMEYOUSAID h!NDTHECLIENTGETSAREFERENCETO
WRWKHEHDQ·VFRPSRQHQW
THEBEANSCOMPONENTINTERFACEv9OUCANTHAVEAREFERENCETO
ANINTERFACEIN*AVAˆYOUCANREFERENCEANOBJECT BUTYOUCANT
REFERENCEANINTERFACE4HEREFERENCEVARIABLECANBEDECLARED
LQWHUIDFHWKH(-%REMHFW 
ASANINTERFACETYPE BUTTHATSNOTTHESAMETHING
%XWLIVKHZDQWVDQ(-%
A: 7ELL ACTUALLYITISTHESAMETHING)NTHISBOOK ANDINTHE REMHFWUHIHUHQFHWKHFOLHQW
SPEC ANDINTHEEXAM EVERYWHEREYOUSEETHEPHRASE hREFERENCE
TOANINTERFACEv DOAMENTALSEARCHANDREPLACETOMAKEIT KDVWRJHWDUHIHUHQFHWRWKH
hREFERENCETOANOBJECTTHATIMPLEMENTSTHEINTERFACEv
EHDQ·VKRPHLQWHUIDFH
)TCANFEELALITTLESTRANGE IFYOUHAVENTREADDOCUMENTSTHATUSE
THISCONVENTION BUTYOUBETTERGETUSEDTOIT"UTDONTWORRY BY
#HAPTER YOULLWONDERHOWANYONEEVERSAIDITDIFFERENTLY 6RWKDW·VZKHUHLWEHJLQV
WKHFOLHQWGRHVDORRNXSRQ
Q: 9OUSAIDTHECLIENTSULTIMATEGOALISTOCALLMETHODSON
WKHEHDQ·VKRPH
THEBEAN/+ THECOMPONENTINTERFACE BUTYOUKNOWWHAT)
MEAN "UTWITHENTITYBEANS YOUCANHAVEBUSINESSMETHODS
INTHEHOME RIGHT3OWITHENTITYBEANS ISNTITTRUETHAT
SOMETIMESTHECLIENTSGOALIS*534TOUSETHEHOME

A: 9ES YOURERIGHT4HEYRECALLEDhHOMEBUSINESSMETHODSv
ASOPPOSEDTOPLAINOLDhHOMEMETHODSvORPLAINOLDhBUSINESS
METHODSv "UTTHEYREASPECIALCASEWELLLOOKATLATERINTHE
BOOK4HEREAREOTHERREASONS TOO FORWHYYOUMIGHTNEEDONLY :HXVHWKHZRUG³(-%REMHFW´WRPHDQWKH
THEHOMEOFANENTITYBEAN&OREXAMPLE IFYOUWANTTOCREATEA EHDQ¶VFRPSRQHQWLQWHUIDFH WKHERG\JXDUG 
BUNCHOFNEWCUSTOMERSINADATABASE BUTYOUDONTWANTTODO LHWKHWKLQJUHFHLYLQJPHWKRGFDOOVPHDQW
ANYOTHEROPERATIONSONREFERENCESTOTHOSEENTITYCUSTOMERS IRUWKHEHDQUHJDUGOHVVRIZKHWKHUWKHFOLHQW
LVORFDORUUHPRWH

 &KDSWHU
WKHFOLHQWYLHZ

0W_IKTQMV\][M[I[M[[QWVJMIV"
KZMI\M][MIVLZMUW^M Note: over the next sev
pages, weÕre lookin eral
REMOTE interfaceg satfoonly the
LQWHUIDFH!! Later weÕll see r a bean.
5HPRWH ÒlocalÓ versions). the special-case

 &UHDWH
&OLHQWDVNVWKHKRPHLQWHUIDFHIRUDUHIHUHQFHWR LQWHUIDFH!!
WKHEHDQ¶VFRPSRQHQWLQWHUIDFH (-%+RPH
PHWKRGV
:KLFKPHDQVWKHFOLHQWFDOOVDFUHDWH PHWKRG
RQWKHKRPHVWXE

LQWHUIDFH!!
per must
The bean deve()lome
put a create thod
$GYLFH+RPH me
in the bean Õs ho
FUHDWH

LQWHUIDFH!!
 8VH 5HPRWH
&OLHQWFDOOVEXVLQHVVPHWKRGVGHFODUHGLQWKH
FRPSRQHQWLQWHUIDFH

:KLFKPHDQVWKHFOLHQWFDOOVPHWKRGVRQWKH(-%
REMHFWVWXE LQWHUIDFH!!
(-%2EMHFW The javax.ejb.s EJ BObject
ve()
UHPRYH interface ha clientmocan
a re
PRUHPHWKRGV meth od th e
call.
 5HPRYH
&OLHQWWHOOVWKHEHDQWKDWKH¶VGRQHXVLQJLW
LQWHUIDFH!! In the c
:KLFKPHDQVWKHFOLHQWFDOOVUHPRYH RQWKH $GYLFH the deveolompeponent interface,
EHDQ¶V(-%REMHFWVWXE JHW$GYLFH business met r puts in the
compone hods, but since
the EJBnOtbjeinterface EXTENthDeS
client se t ct interface, the
BOTH inetserf he methods
from
aces.

\RXDUHKHUH 
XVLQJ-1',WRJHWWKHKRPH

*]\NQZ[\_MPI^M\WOM\IPWUMQV\MZNIKMZMNMZMVKM
1VW\PMZ_WZL[_MPI^M\WOM\\PM[\]J\W\PMPWUM
WJRMK\\PM\PQVO_M][M\WKITTKZMI\M[W\PI\_MKIVOM\
_PI\_MZMITTa_IV\¸\PM-2*WJRMK\[\]J
7HENYOUTHECLIENT WANTAREFERENCETOAHOMEINTERFACE YOUGOTHROUGH
*.$)4HEPROCESSISPRETTYSTRAIGHTFORWARDYOUGIVE*.$)ALOGICALNAME
THENAMETHEDEPLOYERTOLDTHESERVERTOUSE ANDYOUGETBACKSOMETHING
THATIMPLEMENTSTHEHOMEINTERFACE
ject assigned
The InitialContfeexretncobe to the JNDI
&RQWH[WLF QHZ,QLWLDO&RQWH[W  to ÒicÓ is a re
lookup service.
2EMHFWR LFORRNXS ³$GYLVRU´  Give it a name
used to regist (whatever the
bean loyer
and get back an that bean with thedep
er
server)
DIHZPRUHVWHSV object.

JNDI organizesorythtrings into a


?PI\¼[26,1' eeÓ.
Òvirtual direct
e tree is eitheed r
*.$)STANDSFOR*AVA.AMINGAND IRR Each level of thdi re ctor y (c all a
al
another virtu an object.
$IRECTORY)NTERFACE ANDITSAN!0)FOR
ACCESSINGNAMINGANDDIRECTORYSERVICES ÒcontextÓ) or...
!LTHOUGH*.$)ISQUITEPOWERFUL THERE
AREONLYAFEWPIECESOFITYOUNEEDTO
KNOWFOR%*"ˆHOWCLIENTSlNDIT HOW EDU a JNDI Ôc
ED] ontextÕ
CLIENTSUSEIT HOWBEANSUSEIT ANDHOWTO
PUTTHINGSINTOIT
object
4HE*.$)!0)CANWORKWITHMANY REM just a plain old
DIFFERENTSERVICES ASLONGASTHAT REM
SERVICEHASA*.$)DRIVERCALLEDA REM
3ERVICE0ROVIDER )TSALOTLIKE*$"# a JNDI context can
WHEREYOUTHEDEVELOPER USETHE*$"# EDW hold objects as well as
!0)TOSEND31,STATEMENTSTOAVARIETY WD] other contexts.
OFDIFFERENTDATABASES4HE*.$)DRIVER
TRANSLATESTHEMETHODCALLSYOUMAKE
ONTHE*.$)!0)INTOSOMETHINGTHE REM
UNDERLYINGNAMINGDIRECTORYSERVICE REM ]RR
UNDERSTANDS

 &KDSWHU
WKHFOLHQWYLHZ

$-1',´YLUWXDO
*HWWLQJWKHKRPHLQWHUIDFHVWXE GLUHFWRU\WUHHµ

IRR LetÕs say thatthe


 *HWDQ,QLWLDO&RQWH[W ÒbarÓ is where is
InitialContext
&RQWH[WLF QHZ,QLWLDO&RQWH[W  for your beans.
7KH,QLWLDO&RQWH[W DVXEW\SHRI&RQWH[W LV\RXUHQWU\
SRLQWLQWRWKH-1',WUHH,W¶VVLPSO\WKH¿UVWFRQWH[WIURP EDU
ZKLFK\RXVWDUWQDYLJDWLQJ.LQGRIOLNH\RXUFXUUHQW ED]
ZRUNLQJGLUHFWRU\ WKHRQH\RXFGWR 

7KH,QLWLDO&RQWH[WFRQVWUXFWRU¿JXUHVRXWZKHUH\RX REM
VKRXOGVWDUW :H¶OOWDONDERXWWKDWLQDPLQXWH %RWK REM REM
&RQWH[WDQG,QLWLDO&RQWH[WDUHSDUWRIWKHMDYD[QDPLQJ $GYLVRU
SDFNDJHSDUWRI-((EXWDOVRDGGHGWR-6(ZLWK &XVWRPHU 7D[5DWH
YHUVLRQ EDW
Whichever contex t you start wi,thifis WD]
ext. For example
your InitialContex s ÒtazÓ, then
the InitialCo yotu wa
nt
co uld lookup from
the only thing the ÒItemDBÓ object REM
here would be REM ]RR 6KRSSHU
,WHP'%
 /RRNXSWKHEHDQ·VKRPHXVLQJWKH
,QLWLDO&RQWH[W

2EMHFWR LFORRNXS ³$GYLVRU´ 


7KHORRNXSPHWKRGWDNHVD6WULQJWKDWPXVWPDWFKWKHQDPH
DVVLJQHGWRWKLVEHDQ¶V-1',GHSOR\PHQW,IWKHGHSOR\HU
DVVLJQHGDQDGGLWLRQDOFRQWH[WWRWKHEHDQE\QDPLQJLW
DWGHSOR\WLPH ³EDW$GYLVRU´WKHQWKHORRNXSFRGHZRXOG
FKDQJHWR
LFORRNXS ³EDW$GYLVRU´ 

 $VVLJQWKHUHVXOWRIWKHORRNXSWRWKH
+RPHLQWHUIDFHUHIHUHQFH

$GYLFH+RPHKRPH  $GYLFH+RPH R Warning: This coh de isnÕt quite


it LOOKS like it
right... althougl Þn out whatÕs
7KHUHWXUQW\SHRIWKHFRQWH[WORRNXSPHWKRGLV2EMHFW should be. WeÕl fewd pages.
VR\RXKDYHWRFDVWLWEDFNWRWKHEHDQ¶VKRPHLQWHUIDFH wrong in just a
W\SHEHIRUH\RXFDQFDOO$GYLFH+RPHPHWKRGV

\RXDUHKHUH 
WKH+RPHLQWHUIDFH

WKHUH DUH QR
'XPE 4XHVWLRQV
Q: (OWDO)KNOWWHATTHE Q: )JUSTTHOUGHTOFANEVEN
DEVELOPERNAMEDTHEBEAN ")''%2PROBLEMHOWTHEHECKDO)
KNOWWHERETOlNDTHESERVER!ND

A: !CTUALLY ITSNOTUPTOTHEBEAN
HOWDO)SPECIFYIT)DIDNTSEEANY
CODEFORAN)0ADDRESSOR4#0PORT
DEVELOPERTHE%*"ROLEKNOWNAS"EAN NUMBER
0ROVIDERˆTHEONEWHOACTUALLYWROTE
THEBEANCODE TOGIVETHEBEAN
ITS*.$)NAME2EMEMBER THE"EAN A: 'OODCATCH9EAH THATSALL
0ROVIDERMIGHTHAVEWRITTENTHATBEAN ABITOFAMYSTERY ISNTIT7EHAVE
ASAREUSABLECOMPONENTFOR"EANS@2 )RUWKHH[DP\RXGRQ¶WQHHG
THREEANSWERSFORNOW
5SANDTHUSMIGHTHAVENOIDEAWHERE WRNQRZPXFKDERXW-1',
 7ERECHEATINGALITTLE BECAUSE
ANDHOWTHEBEANWILLBEUSED
THECODEWEREUSINGWORKSONLY )RUWKHFOLHQWUHODWHGREMHFWLYHV
)TSTHEDEPLOYERˆTHEPERSONWHO BECAUSEWEREUSINGTHE2EFERENCE WKHRQHVIURPWKLVFKDSWHU 
ACTUALLYGETSTHEBEANRUNNINGINTHE )MPLEMENTATION ANDEVENTHENONLY DOO\RXQHHGWRNQRZLVWKH
SERVERASPARTOFSOMEAPPLICATIONˆ BECAUSEWERERUNNINGTHESERVERON IXQGDPHQWDOSURFHVVIRUGRLQJD
WHOREGISTERSTHEBEANUNDERA THESAMEPHYSICALMACHINEASTHE -1',ORRNXSWKDW\RXQHHGWR
LOGICALNAME"UTTHEBOTTOMLINEIS CLIENT3O WERETAKINGADVANTAGE VWDUWZLWKDQ,QLWLDO&RQWH[WDQG
THATTHERESNOSTANDARDORAUTOMATIC OFDEFAULTSETTINGSTHATAREINPLACE WKHQFDOOORRNXS ZKLFKUHWXUQV
MECHANISMFORLEARNINGTHENAMES AUTOMATICALLY BECAUSEWERERUNNING VRPHWKLQJRIW\SH2EMHFW
OFREGISTEREDBEANS!SACLIENT THE2EFERENCE)MPLEMENTATION
SOMEBODY SOMEHOW HASTOTELLYOU <RXGR127QHHGWRNQRZKRZ
 7ELIEDALITTLEINPOINTNUMBER
THAT SAY THEBEANWASREGISTEREDAS WKHFOLHQWRUVHUYHU¿QGVDQG
ABOVE BECAUSETHISCODECOULDBE
h!DVISORv JHWVDUHIHUHQFHWRWKHFRUUHFW
CORRECTIFITWEREINSIDEABEAN7ELL
.OTICETHATh!DVISORv WHILEDESCRIBING GETTOTHATINTHE"EAN%NVIRONMENT ,QLWLDO&RQWH[WRQO\WKDWDQ
THESERVICE ISNOTA3TRINGTHAT CHAPTER ,QLWLDO&RQWH[WLVQHHGHG
CORRESPONDSDIRECTLYTOTHENAMESOF
 )NREALITY ACLIENTDOESNEEDTO ,QWKH%HDQ(QYLURQPHQW
ANYOFTHEOTHERPIECESOFTHEBEAN
KNOWHOWTOFINDTHE*.$)SERVICE FKDSWHUZH¶OODGGDWLQ\ELWPRUH
2EMEMBER THECOMPONENTINTERFACE
WHEREABEANSHOMEISREGISTERED -1',LQIRIRUKRZWKHEHDQLWVHOI
WAS!DVICE THEHOMEINTERFACEWAS
4HEREARESEVERALWAYSYOUCANDO XVHV-1',WRORRNXSWKLQJVWKDW
!DVICE(OME ANDTHEBEANITSELFIS
THISˆYOUCOULDPASSINFORMATION KDYHEHHQVSHFL¿FDOO\SODFHG
!DVICE"EAN4HENAMEh!DVISORvWAS
TOTHE)NITIAL#ONTEXTCONSTRUCTOR WKHUHIRUWKHEHDQ
JUSTSOMETHINGTHEDEPLOYERTHOUGHT
A0ROPERTIESOBJECTTHATCONTAINS
HADANICERINGTOIT
EVERYTHINGTHE)NITIAL#ONTEXTNEEDS %XWWKDW¶VDERXWLWIRU\RXU-1',
/FCOURSE INYOURCOMPANY YOUMIGHT TOFINDTHESERVERANDTHESTARTING NQRZOHGJH<RXGRQ¶WKDYHWR
ANDPROBABLYWILL HAVESTRICTNAMING CONTEXT /R THEREARESEVERAL NQRZDQ\GHWDLOVDERXWWKHUHVW
GUIDELINESTOFOLLOWFORHOWBEANSARE PLACESWHERE*.$)PROPERTIESCAN RIWKH-1',$3,RWKHUWKDQWKH
REGISTEREDWITH*.$)ATDEPLOYMENT BEPLACEDONTHECLIENTSMACHINE &RQWH[WORRNXS PHWKRG
TIME )NEITHERCASE THECLIENT-534BE
5NLESSITSYOUROWNCOMPANY IN GIVENSOMETHINGˆEITHERINFOFOR
WHICHCASEYOUCANDOWHATEVERYOU THE)NITIAL#ONTEXTCONSTRUCTOR ORA
DARNWELLPLEASE INCLUDINGNAMING PROPERTIESFILE)TSDIFFERENTFOREACH
EACHBEANAFTERYOURFAVORITEROCKSTAR VENDORSSERVER TOO SOYOUHAVETO
OR-ATRIXCHARACTER CHECKYOURDOCUMENTATIONINORDER
TOKNOWWHATTHECLIENTNEEDS
 &KDSWHU
WKHFOLHQWYLHZ

4M\¼[\ISMIVW\PMZTWWSI\\PMKWUXTM\MKTQMV\KWLM
LPSRUWMDYD[QDPLQJ 
LPSRUWMDYDUPL  weÕll look
LPSRUWMDYD[UPL  A bunch of impoivirtdus, ally at the
LPSRUWKHDG¿UVW  at each one ind page
LPSRUWMDYD[HME  bottom of the
SXEOLFFODVV$GYLFH&OLHQW^

SXEOLFVWDWLFYRLGPDLQ 6WULQJ>@DUJV ^
o the
is our entry pointdoint
QHZ$GYLFH&OLHQW JR 
` InitialContext , wh ere we th e lookup
JN DI naming service rÓ
SXEOLFYRLGJR ^
WU\^
on the name ÒAdviso
&RQWH[WLF QHZ,QLWLDO&RQWH[W  What is THIS??? Why
2EMHFWR LFORRNXS ³$GYLVRU´  just a plain old ca not
st?

$GYLFH+RPHKRPH  $GYLFH+RPH 3RUWDEOH5HPRWH2EMHFWQDUURZ R$GYLFH+RPHFODVV 
 Call create on the home
$GYLFHDGYLVRU KRPHFUHDWH  to get us wh
REALLY want Ñ the at
component interfawe
ce.
6\VWHPRXWSULQWOQ DGYLVRUJHW$GYLFH 

`FDWFK 5HPRWH([FHSWLRQUH[ ^ The point of everything! To call a business


UH[SULQW6WDFN7UDFH  method on the bean (via the EJBObject stub)
`FDWFK &UHDWH([FHSWLRQFH[ ^
FH[SULQW6WDFN7UDFH 
`FDWFK ([FHSWLRQH[ ^
Not a good way to handle (or ns
H[SULQW6WDFN7UDFH  ha nd le) exceptio
` rather, NOTe want to show some
` here... but wked exceptions...
` of the chec

6KDUSHQ \RXU SHQFLO


0ACKAGE.AME #LASS.AME
-ATCHTHECLASSNAMEWITH MDYD[QDPLQJ ,QLWLDO&RQWH[W
THEPACKAGEITSFROM9OUCAN
USETHESAMEPACKAGENAME MDYDUPL $GYLFH+RPH
MORETHANONCE
MDYD[UPL 3RUWDEOH5HPRWH2EMHFW
)FYOURENOTSURE MAKEYOUR
BESTGUESS
KHDG¿UVW 5HPRWH([FHSWLRQ

MDYD[HME $GYLFH

&UHDWH([FHSWLRQ

\RXDUHKHUH 
FDVWLQJDQGQDUURZLQJ

2][\_PMVaW]\PW]OP\I[QUXTMKI[\_W]TLJMMVW]OP
4HERETURNVALUEOFTHE#ONTEXTLOOKUP METHODISTYPE/BJECT3OWERE
THINKINGASIMPLECASTSHOULDBEENOUGHTOFORCETHEOBJECTREFERENCEDBYO
BACKTOTHE!DVICE(OMEIMPLEMENTATIONTHATWEKNOWITREALLYIS

&RQWH[WLF QHZ,QLWLDO&RQWH[W 
This LOOKS right , but isnÕt.
2EMHFWR LFORRNXS ³$GYLVRU´  interface,
$GYLFH+RPHKRPH  $GYLFH+RPH R With a Remoteenhooume
gh .
casting is no t

*]\67AW]PI^M\WVIZZW_\PMWJRMK\I[_MTT
.ARROWINGFORCESTHEOBJECTRETURNEDFROMTHE*.$)LOOKUPTOBEABSOLUTELY
POSITIVELY SOMETHINGTHATIMPLEMENTSTHEHOMEINTERFACE)NOTHERWORDS
SOMETHINGYOUCANCASTTO!DVICE(OME
&RQWH[WLF QHZ,QLWLDO&RQWH[W 
2EMHFWR LFORRNXS ³$GYLVRU´ 
$GYLFH+RPHKRPH  $GYLFH+RPH 3RUWDEOH5HPRWH2EMHFWQDUURZ R$GYLFH+RPHFODVV 

731¼TTJQ\M?PaKIV¼\aW]R][\LWIXTIQVWTLKI[\ '
!CCORDINGTOTHESPEC YOUˆTHECLIENTˆMUSTASSUMETHATTHESERVERISUSING2-)
))/0RATHERTHANREGULAROLD2-).ORMAL2-)USES*2-0ASTHEWIREPROTOCOL
WHICHASSUMESTHATWEREALWAYSTALKING*AVAALLTHEWAYDOWN)FTHISWEREPLAIN
2-) YOUDALWAYSKNOWTHATWHATYOUGETOUTOFTHELOOKUPISPOLYMORPHICALLY
SOMETHINGTHAT)3 !HOMEINTERFACE)NOTHERWORDS ANOBJECTWHOSECLASSTYPE
IMPLEMENTSTHEHOMEINTERFACEFORTHATBEAN!NDFORTHATSCENARIO ANORMAL*AVA
LANGUAGECASTWOULDLETYOUASSIGNTHEOBJECTBACKTOTHEHOMEINTERFACETYPE
SOTHATYOUCANCALLTHEHOMEMETHODS/THERWISE REMEMBER YOUDBESTUCK
CALLINGONLYMETHODSOFTYPE/BJECTEQUALS HASH#ODE TO3TRING ETC
WHENWHATYOUREALLYWANTTOCALLISCREATE 
"UTWHENTHEWIREPROTOCOLIS))/0 THERULESCHANGEALITTLE4HENARROW
OPERATIONGIVESYOUSOMETHINGTHATISCASTABLE

 &KDSWHU
WKHFOLHQWYLHZ

8WZ\IJTM:MUW\M7JRMK\VIZZW_
4HEJAVAXRMI0ORTABLE2EMOTE/BJECTSNARROW METHOD
RUNSCODEWRITTENBYTHESERVERVENDOR"UTALLWECAREABOUT
ISTHATITTAKESTHEOBJECTWEGOTFROM*.$)ANDGIVESUSBACK
SOMETHINGTHATREALLYDOESIMPLEMENTTHEHOMEINTERFACE 7KHKRPHVWXEUHWXUQHGIURP
)NOTHERWORDS ITGIVESUSBACKSOMETHINGWECANTHENCAST
TOTHEHOMEINTERFACETYPE ANDCALLCREATE 
D-1',ORRNXSPLJKWQRW
LPSOHPHQWWKHKRPHLQWHUIDFH
<RXPLJKWJHWEDFNDQ,,23
3RUWDEOH5HPRWH2EMHFWQDUURZ R$GYLFH+RPHFODVV 
VWXEWKDWLVQ·WFDVWDEOHWRWKH
the object you the interfac KRPHLQWHUIDFHRI\RXUEHDQ
got from JNDI want it to bee. ty pe you
It must
be a Remote inte
rface! $QGWKDWPHDQV\RXFRXOGQ·W
FDOOFUHDWH 
7RJHWDVWXEWKDW·VFDVWDEOH
HWDLOVRI,,23
Q ¶WQ HH G WR NQRZWKHG WRWKHKRPHLQWHUIDFH\RX
<RXGR
23
NQRZKRZ,, KDYHWRILUVWQDUURZ WKH
GRQ¶WQHHGWR -DYD
)RU(-%\RX LQWHQGWRG HY HO RS Q RQ
QO HV V\R X H 1 RW
ZRUNVX ¶WJRWKHU
&2 5 % $ F OLHQW V%XWZHZRQ H[ DP H LWK HU REMHFW\RXJHWIURPWKH-1',
H ER RN D QG QRWLQWKH
KHUHLQWK IVFRSH ORRNXSRQWKHEHDQKRPH
UHZD\RXWR
7KHGHWDLOVD
HF
ZWKDWWKHVS
QHHGWRNQR DWWKH %XWRQO\ZKHQWKHKRPH
%XW\RX'2 D VV XP HWK
Q3URYLGHUVWR DW\RXUEHDQ
UHTXLUHV%HD WK
XV LQJ,,23DQG LQWHUIDFHLV5HPRWH
FRQWDLQHULV LD QW 
FRPSO
PXVWEH,,23 FRPSOLDQW"
VLWWD NHWREH,,23 HG
:KD WG RH VZKHQQHHG
H5HPRWHVWXE 
1DUURZLQJWK IRWK HU WLQ\ ,,2 3
HDFRXSOHR
$QGWKHUHDU WLQWK LVFKDSWHU
RN D
LVVXHVZH¶OOOR \ RX '2KDYHWRE
H
QHLVWKDW GRQ¶W
7KHERWWRPOL VH GE XW \ RX
23LVEHLQJX H¶OO
DZDUHWKDW,, KP RU HWKDQWKDW: 
WR N QR Z P XF Z D ER XW
QH HG WRN QR
LQJ\RXQHHG
FRYHUHYHU\WK RQ H
HFKDSWHU¶VG
,,23EHIRUHWK

\RXDUHKHUH 
3RUWDEOH5HPRWH2EMHFWQDUURZ

:LWKD5HPRWH
KRPHVWXEIURP
-1',DQRUGLQDU\FDVW
LVQ·WJRRGHQRXJK<RXQHHG
VRPHWKLQJPRUHH[RWLF
\RXQHHGWRQDUURZLW

7KLQNRIQDUURZLQJDV
´([RWLF&DVWLQJµ

.ARROWINGISNOTTHESAMEASCASTING BUTYOU
CANTHINKOFITASAFORMOFhEXOTICCASTINGv
#ASTINGISABOUTPOLYMORPHISM7ITHACAST
THEOBJECTDOESNTCHANGE BUTTHEWAYYOU
REFERTOTHATOBJECTDOES7ITHNARROWING YOU
MIGHTACTUALLYGETADIFFERENTOBJECT

&DVW
$QLPDODQL QHZ'RJ 
'RJ¿GR  'RJ DQL

'RJ
Casting lets yo u see
REMHFW
ONE ob je ct in multiple
e
ways. The reines nc
fe re
w hat
type de te rm
u ca n call,
Yfa
methods yo ct itself
^a\g
but the obje itÕs a Dog.
$QLPDO
always knows
'RJ

1DUURZ
QDUURZ R$GYLFH+RPHFODVV 

The narrow method


,,23 might return a
KRPH
VWXE
VWXE
completely different
object (or it might
not). But regardless,
g youÕll get a stub that
`ge] really DOES implem
2EMHFW the interface, so youent
$GYLFH+RPH can then cast it.

 &KDSWHU
WKHFOLHQWYLHZ

1RZWKDWZH ÀQDOO\ KDYHWKHKRPHVWXE


OHW·VXVHLWWRJHWZKDWZH5($//<ZDQW

 &DOOFUHDWH RQWKHKRPHLQWHUIDFHWR
JHWWKH(-%REMHFWVWXE :DLWDPLQXWHKRZ
FRPHZHGLGQ·WKDYHWR
FDVWDQGQDUURZWKH(-%
$GYLFHDGYLVRU KRPHFUHDWH 
REMHFWVWXEEXWZHKDGWR
7KHFUHDWHPHWKRGUHWXUQVDUHIHUHQFHWRWKH IRUWKHKRPHVWXE"
FRPSRQHQWLQWHUIDFH$GYLFH,QRWKHUZRUGVLWUHWXUQV
DVWXEWRWKH(-%REMHFW ZKLFKLPSOHPHQWV$GYLFHWKH
5HPRWHFRPSRQHQWLQWHUIDFHIRUWKLVEHDQ <RXGRQ¶W
QHHGWRFDVWDQGQDUURZWKH(-%REMHFWVWXE

 &DOODEXVLQHVVPHWKRGRQWKH
FRPSRQHQWLQWHUIDFH (-%REMHFWVWXE

6\VWHPRXWSULQWOQ DGYLVRUJHW$GYLFH 

1RWKLQJVSHFLDOKHUH,W¶VMXVWDSODLQROGPHWKRGFDOORQWKH
UHIHUHQFHWRWKH$GYLFHLQWHUIDFH

:HOOQRWTXLWH5HPHPEHUHYHU\5HPRWHPHWKRGFDOO
GHFODUHVD5HPRWH([FHSWLRQ$QGWKDW¶VDFKHFNHG
H[FHSWLRQVR\RX0867KDQGOHRUGHFODUHLW

WU\^
6\VWHPRXWSULQWOQ DGYLVRUJHW$GYLFH 
`FDWFK 5HPRWH([FHSWLRQUH[ ^
UH[SULQW6WDFN7UDFH 
`
9
1

\RXDUHKHUH 
GRQ¶WQDUURZWKH(-%2EMHFW

WKHUH DUH QR
'XPE 4XHVWLRQV
Q: /+ )KNOW )KNOW )DONTNEEDTOLEARNTHE
DETAILSOF))/0 BUT)STILLWANTTOUNDERSTAND7(9THEY
USEIT

A:
/+ ALITTLEMORE))/0 THEWIREPROTOCOLFOR
#/2"! CANREPRESENTMOREINFORMATIONTHANPLAIN2-)
&OREXAMPLE ))/0CANPROPAGATEBOTHTRANSACTIONAND
SECURITYINFORMATIONIMPORTANTTHINGSTHATYOUCANT 7KHGHFODUHGUHWXUQW\SHRI
SENDWITHANON ))/0REMOTEMETHODCALL
3O))/0LETSACONTAINERATLEASTHAVETHEPOTENTIALFOR FUHDWH LVWKHFRPSRQHQW
INTEROPERATINGWITHOTHERSERVERS INCLUDINGPOSSIBLY
ONETHATISNT*AVA BASED LQWHUIDFHQRW2EMHFW
2EMEMBER #/2"!ISASTANDARDTHATAMONGOTHER
THINGS CANGIVETWOOBJECTS WRITTENINTWODIFFERENT
LANGUAGES ACHANCETOINVOKEEACHOTHERSMETHODS
4HISDOESNOTMEANTHATYOURSERVERISNECESSARILYUSING
6RWKH(-%REMHFWFRPHVEDFN
))/04HESPECSAYSTHAT9/5ˆTHEDEVELOPERˆHAVETO
ASSUMETHESERVERISUSING))/0 WHICHMEANSYOUHAVE IURPFUHDWH DOUHDG\NQRZLQJ
TOBESUREYOURBEANSARE))/0 COMPLIANTWELLTALK
ABOUT))/0COMPLIANCEALITTLELATERINTHISCHAPTER  ZKDWLWLV DQLPSOHPHQWDWLRQ
Q: )FMYSERVERDOESNTUSE))/0 DO)STILLHAVETO
RI\RXUFRPSRQHQWLQWHUIDFH 
DOTHEWHOLENARROWINGTHING

A:
9ESANDNO9OURCODEMIGHTWORKJUSTFINEWITH
SXEOLF$GYLFHFUHDWH
NOTHINGMORETHANACAST"UTˆANDTHISISAREALLYHUGE
BUTˆYOURCLIENTCODEWONTBEVENDOR INDEPENDENT)N
e home
The return type ofmeththod is
OTHERWORDS YOUWONTHAVEAPORTABLEAPPIFYOUDONT
USENARROW BECAUSEREDEPLOYINGTHEBEANONASERVER ()
interface create
THATDOESUSE))/0WILLBREAKTHECLIENTS t interface
ALWAYS the componen
doesnÕt need
Q: )STHEREANYDOWNSIDETOUSINGNARROW%SPE So the EJB object..stub
a cast or a narrow
CIALLYIFTHESERVERISNOTUSING))/0

A:
.ODOWNSIDEWELL WHATEVEROVERHEADTHERE
ISWOULDNTBEWORTHTHEPORTABILITYTRADEOFF )FYOUR
SERVERISNTUSING))/0 NARROW ISMOSTLIKELYANO OPIE
DO NOTHING METHOD4HESPECSAYSTOALWAYSNARROW
ANDITWONTHURTYOUIFITISNTNEEDED

 &KDSWHU
WKHFOLHQWYLHZ

?ZQ\QVO\PM:MUW\MPWUMQV\MZNIKMNWZI[M[[QWVJMIV
.OWTHATYOUVESEENTHELOOKUPANDCREATEPROCESSFROMTHECLIENTSPOINTOFVIEW
WELLSEEWHATYOUHAVETODOTOWRITEAHOMEINTERFACEFORYOURBEAN&ORSESSION
BEANS THEPROCESSISVERYEASY)NFACT FORSTATELESSSESSIONBEANS ITSLUDICROUSLY
EASYˆYOUJUSTDECLAREASINGLE NO ARGCREATE METHOD

SDFNDJHKHDG¿UVW

LPSRUWMDYD[HME 
LPSRUWMDYDUPL5HPRWH([FHSWLRQ

SXEOLFLQWHUIDFH$GYLFH+RPHH[WHQGV(-%+RPH^

SXEOLF$GYLFHFUHDWH WKURZV&UHDWH([FHSWLRQ5HPRWH([FHSWLRQ

5XOHVIRUWKHKRPHLQWHUIDFH

 ,PSRUWMDYD[HME DQGMDYDUPL5HPRWH([FHSWLRQ

 ([WHQG(-%+RPH

 'HFODUHDFUHDWH PHWKRGWKDWUHWXUQVWKHFRPSRQHQWLQWHUIDFHDQG
GHFODUHVD&UHDWH([FHSWLRQDQG5HPRWH([FHSWLRQ

4 )RUVWDWHOHVVVHVVLRQEHDQVWKHUHFDQEHRQO\RQHFUHDWH DQGLWPXVW127
KDYHDUJXPHQWV

4 6WDWHIXOVHVVLRQEHDQVFDQKDYHPXOWLSOHRYHUORDGHGFUHDWH PHWKRGVDQG
GR127QHHGWRKDYHDQRDUJFUHDWH 

4 $OOFUHDWH PHWKRGVPXVWGHFODUHD&UHDWH([FHSWLRQDQG5HPRWH([FHSWLRQ
EXWWKH\FDQDOVRGHFODUHRWKHUDSSOLFDWLRQ FKHFNHG H[FHSWLRQV

4 7KHQDPHRIFUHDWHPHWKRGVLQVWDWHIXOEHDQVPXVWEHJLQZLWK³FUHDWH´
FUHDWH$FFRXQW FUHDWH%LJ'RJ FUHDWH)DVKLRQ$GYLVRU HWF 

4 )RUVWDWHIXOVHVVLRQEHDQVDUJXPHQWVPXVWEH50,,,23FRPSDWLEOH \RX
NQRZ6HULDOL]DEOHSULPWLYH5HPRWHRUDUUD\VRUFROOHFWLRQVRIDQ\RIWKRVH 

\RXDUHKHUH 
WKH+RPHLQWHUIDFH

:MUW\MPWUMQV\MZNIKMM`IUXTM[NWZ[M[[QWVJMIV[
4HEEXAMPLESONTHISPAGEAREALLLEGALEXAMPLESOF2EMOTEHOMEINTERFACES
9OULLSEESOMETHATCOULDBEBOTHSTATELESSANDSTATEFUL ANDSOMETHATCOULDBE
ONLYSTATEFULBECAUSETHEYHAVEACREATEMETHODWITHARGUMENTS 7EVEDROPPED
THEPACKAGEANDIMPORTSTATEMENTSTOPUTMOREONTHEPAGE

 SXEOLFLQWHUIDFH&DUW+RPHH[WHQGV(-%+RPH^
SXEOLF&DUWFUHDWH 6WULQJVWRUH,' WKURZV&UHDWH([FHSWLRQ5HPRWH([FHSWLRQ
SXEOLF&DUWFUHDWH WKURZV&UHDWH([FHSWLRQ5HPRWH([FHSWLRQ
`

 SXEOLFLQWHUIDFH0DWFKHU+RPHH[WHQGV(-%+RPH^
SXEOLF0DWFKHUFUHDWH 6WULQJFXVWRPHU,' WKURZV&UHDWH([FHSWLRQ5HPRWH([FHSWLRQ
SXEOLF0DWFKHUFUHDWH1HZ&XVWRPHU 6WULQJQDPH6WULQJORJLQ 
WKURZV&UHDWH([FHSWLRQ5HPRWH([FHSWLRQ
`

 SXEOLFLQWHUIDFH7LFNHWV+RPHH[WHQGV(-%+RPH^
SXEOLF7LFNHWVFUHDWH WKURZV&UHDWH([FHSWLRQ5HPRWH([FHSWLRQ
`

 SXEOLFLQWHUIDFH&OXE+RPHH[WHQGV(-%+RPH^
SXEOLF&OXEFUHDWH([LVWLQJ 6WULQJFOXE,' WKURZV&UHDWH([FHSWLRQ5HPRWH([FHSWLRQ
SXEOLF&OXEFUHDWH1HZ&OXE 6WULQJFOXE1DPH WKURZV&UHDWH([FHSWLRQ5HPRWH([FHSWLRQ
`

7KHUH¶VRQO\RQHLQWHUIDFHKHUHWKDWFRXOGEHDVWDWHOHVVVHVVLRQEHDQ¶V
KRPH²QXPEHU1RWLFHWRRWKDWQXPEHUKDVWZRFUHDWHPHWKRGVWKDW
ERWKKDYHWKHVDPHDUJXPHQW²D6WULQJ²EXWWKHPHWKRGVDUHQDPHG
GLIIHUHQWO\WRUHÀHFWZKDWWKDWSDUWLFXODUFUHDWHPHWKRGLVIRU

 &KDSWHU
WKHFOLHQWYLHZ

,ZRQGHUZKDWHOVH
,FDQGRZLWKWKHKRPH
LQWHUIDFH,NQRZWKHUH·V
PRUHWKDQMXVWWKHFUHDWH
PHWKRGZKDWPHWKRGVDUH
LQ(-%+RPH"

LQWHUIDFH!!
5HPRWH

LQWHUIDFH!!
(-%+RPH
The client sees
ZKDWPHWKRGV EJBHome! All ofeverything in
DUHLQKHUH"
are exposed to these methods
the AdviceHome the client through
FOLHQWFDQFDOO interface.
WKHVHPHWKRGV

Remember, any class that


LQWHUIDFH!!
implements AdviceHome must from
implement ALL the methods e
$GYLFH+RPH
FUHDWH both AdviceHome AND EJBHom
(Remote doesnÕt have any methods).

\RXDUHKHUH 
WKH(-%+RPHLQWHUIDFH

:KDW<28ZULWH :KDWWKH&/,(17VHHV

LQWHUIDFH!! LQWHUIDFH!!
$GYLFH+RPH $GYLFH+RPH
FUHDWH FUHDWH

JHW(-%0HWD'DWD
JHW+RPH+DQGOH
UHPRYH +DQGOHK
UHPRYH 2EMHFWNH\

5HPHPEHUWKHFRQWDLQHU
$GYLFH+RPH,PSO $GYLFH+RPH,PSOBVWXE
LPSOHPHQWV\RXUKRPH
LQWHUIDFHDQGPDWFKLQJVWXE FUHDWH FUHDWH

7KHFRQWDLQHUPXVW JHW(-%0HWD'DWD JHW(-%0HWD'DWD


JHW+RPH+DQGOH JHW+RPH+DQGOH
LPSOHPHQW(9(5<7+,1*IURP UHPRYH +DQGOHK UHPRYH +DQGOHK
$GYLFH+RPHDQG(-%+RPH UHPRYH 2EMHFWNH\ UHPRYH 2EMHFWNH\

the class of the actual the class


home objecof the
Remote home object t stub

1RWHWKHVHDUHQ¶WQHFHVVDULO\WKHUHDOQDPHV²
WKHVHUYHUJHQHUDWHVWKHVHFODVVHVDQGLWFDQ
QDPHWKHPZKDWHYHULWZDQWVWR

 &KDSWHU
WKHFOLHQWYLHZ

,I\RX·UHDFOLHQWDQG\RXZDQWWR &DOOWKLVPHWKRG

 JHWUHÁHFWLRQOLNHLQIRUPDWLRQDERXWWKHEHDQ LQWHUIDFH!!
8QOHVV\RX¶UHDWRROYHQGRU\RX¶OOSUREDEO\QHYHUQHHGWRFDOOWKLV (-%+RPH
PHWKRG,WUHWXUQVWKH(-%0HWD'DWDLQWHUIDFH²VRPHWKLQJ\RXFDQ (-%0HWD'DWDJHW(-%0HWD'DWD
XVHWRJHWPRUHVSHFL¿FFODVVLQIRUPDWLRQDERXWWKHEHDQ,I\RX¶YH +RPH+DQGOHJHW+RPH+DQGOH
JRW\RXUVHOIDQ(-%0HWD'DWDUHIHUHQFH E\FDOOLQJJHW(-%0HWD'DWD  YRLGUHPRYH +DQGOHK
\RXFDQFDOOJHW+RPH,QWHUIDFH&ODVV JHW3ULPDU\.H\&ODVV 
YRLGUHPRYH 2EMHFWNH\
LV6HVVLRQ DQGPRUH

 VHULDOL]HWKHKRPHVRWKDW\RXFDQXVHWKHKRPH LQWHUIDFH!!
DJDLQODWHUZLWKRXWKDYLQJWRJRWKURXJK-1', (-%+RPH
,PDJLQH\RX¶UHDFOLHQWDQG\RX¶YHEHHQZRUNLQJZLWKDKRPH² (-%0HWD'DWDJHW(-%0HWD'DWD
PDNLQJDEXQFKRIEHDQVFDOOLQJKRPHPHWKRGVRQHQWLW\EHDQV +RPH+DQGOHJHW+RPH+DQGOH
ZKDWHYHU$QGQRZ\RXKDYHWRUHERRW\RXUPDFKLQH2UPRYHWR YRLGUHPRYH +DQGOHK
DQRWKHUPDFKLQH%XW\RXZDQWWRFRQWLQXHZRUNLQJZLWKWKLVKRPH YRLGUHPRYH 2EMHFWNH\
:KDWGR\RXGR"
<RXFRXOGJREDFNWKURXJK-1',DQGGRWKHZKROHORRNXSWKLQJDJDLQ
%XWLI\RXDVNWKHKRPHIRUDKDQGOH\RX¶OOJHWEDFND6HULDOL]DEOH
WKLQJ\RXFDQVDYHDQGXVHODWHUWRJHWWKHKRPHVWXEEDFNZLWKRXW
JRLQJWKURXJK-1', PRUHRQKDQGOHVDOLWWOHODWHU 

 WHOOWKHKRPH\RX·UHGRQHZLWKDVHVVLRQEHDQ LQWHUIDFH!!
(-%+RPH
:KHQ\RX¶UHGRQHZLWKDVHVVLRQEHDQ\RXFDQWHOOWKHKRPHE\FDOOLQJ
(-%0HWD'DWDJHW(-%0HWD'DWD
UHPRYH DQGSDVVLQJWKH(-%REMHFW¶VKDQGOH<HVWKDW¶VULJKWWKH(-%
REMHFW-XVWDVWKHKRPHREMHFWFDQJLYH\RXDKDQGOH VRWKDW\RXFDQ +RPH+DQGOHJHW+RPH+DQGOH
JHWWKHKRPHVWXEEDFNODWHUZLWKRXWJRLQJWKURXJK-1', WKH(-%REMHFW YRLGUHPRYH +DQGOHK
FDQJLYH\RXDKDQGOHWRLWVHOI :H¶OOVHHPRUHRIWKDWODWHULQWKLVFKDSWHU  YRLGUHPRYH 2EMHFWNH\
<RXFDQXVHWKLVYHUVLRQRIUHPRYH IRUHQWLW\EHDQVDVZHOOEXWZLWK
HQWLW\EHDQVLW¶VXVXDOO\HDVLHUWRFDOOWKHRWKHUUHPRYH 

 WHOOWKHKRPHWRUHPRYHDQHQWLW\EHDQ LQWHUIDFH!!
1RWLFHZHGLGQ¶WVD\³7HOOWKHKRPH\RX¶UHGRQHZLWKDQHQWLW\EHDQ´7KDW¶V (-%+RPH
EHFDXVHFDOOLQJUHPRYHRQDQHQWLW\EHDQLVGUDVWLFDOO\GLIIHUHQWIURPFDOO (-%0HWD'DWDJHW(-%0HWD'DWD
LQJUHPRYHRQDVHVVLRQEHDQ:H¶OOJHWLQWRWKHGHWDLOVLQWKHHQWLW\EHDQ +RPH+DQGOHJHW+RPH+DQGOH
FKDSWHUVEXWWKHVKRUWYHUVLRQLVZKHQ\RXUHPRYHDQHQWLW\EHDQ\RX¶UH
YRLGUHPRYH +DQGOHK
QRWMXVWWHOOLQJWKHFRQWDLQHUWKDW\RX¶UHGRQHZLWKWKHEHDQ\RX¶UHWHOOLQJLW
YRLGUHPRYH 2EMHFWNH\
WKDWHYHU\RQHLVGRQHZLWKWKHEHDQ)RUHYHU%HFDXVHFDOOLQJUHPRYH RQ
DQHQWLW\EHDQPHDQV³'HOHWHWKLVHQWLW\IURPWKHSHUVLVWHQWVWRUH´ :KLFK
XVXDOO\PHDQV³'HOHWHWKLVURZIURPWKHGDWDEDVH´
7KLVYHUVLRQRIUHPRYHWDNHVDSULPDU\NH\ZKLFKVHVVLRQEHDQVGRQ¶WKDYH
VRXQOLNHWKHRWKHUUHPRYH WKLVYHUVLRQFDQEHXVHGIRUHQWLW\EHDQVRQO\

\RXDUHKHUH 
WKH(-%+RPHLQWHUIDFH

,NQRZLVQ·WWKDWRGG"
%XWORRNWKHUH·VRQO\RQH
+H\GLG,MXVW KRPHLQWHUIDFH(-%+RPH
VHHVRPHWKLQJDERXW UHJDUGOHVVRIWKHEHDQW\SH7KHUH·V
DSULPDU\NH\",QWKHKRPH QRVHSDUDWH(-%6HVVLRQ+RPH
LQWHUIDFHIRUDVHVVLRQ RU(-%(QWLW\+RPHLW·VMXVW
EHDQ"7KDWFDQ·WEH (-%+RPHIRUHYHU\WKLQJ
ULJKW

Q: $OESTHISMEANTHECLIENTHASTOKNOWTHATSHESUSINGASESSIONBEANAND
NOTANENTITYBEAN)SNTTHATSOMETHINGTHECLIENTSHOULDNTHAVETOKNOW

A: 9ES THECLIENTDOESHAVETOKNOWTHATWHENSHESGOTTHEHOMEINTERFACEFOR
ASESSIONBEAN HECANTCALLTHEREMOVE/BJECTPRIMARY+EY METHOD)FSHEDOES
SHELLGETANEXCEPTIONJAVAXEJB2EMOVE%XCEPTION )TDOESFEELLIKEMOREOFAN
IMPLEMENTATIONDETAILTHANTHECLIENTSHOULDHAVETOKNOWIETHATITSASESSIONVS
ENTITYBEAN BUTINREALITY YOUCANTEXPECTTOWRITEAN%*"CLIENTWITHOUTKNOWING
WHETHERYOURECOMMUNICATINGWITHASESSIONORENTITYBEAN&ORONETHING THEWAY
THECLIENTINTERACTSWITHANENTITYBEANHOMEISCOMPLETELYDIFFERENTFROMTHEWAYA
CLIENTUSESASESSIONBEANHOME9OULLSEEDRAMATICDIFFERENCESWHENWEGETTOTHE
ENTITYBEANCHAPTERS

 &KDSWHU
WKHFOLHQWYLHZ

:MDD=LHGAFLK
ƒ 7KHPHWKRGVRIWKHEHDQDUHH[SRVHGWRWKHFOLHQW
WKURXJKWKHFRPSRQHQWLQWHUIDFH
7KHFOLHQWFDQ·WGLUHFWO\JHWDUHIHUHQFHWRWKH
EHDQWKHFOLHQWPXVWJRWKURXJKWKHEHDQ·V(-%
REMHFWZKLFKLPSOHPHQWVWKHFRPSRQHQWLQWHU
IDFH
7KHFOLHQWJHWVDUHIHUHQFHWRWKHEHDQ·V(-%
  REMHFWIURPWKHEHDQ·VKRPH
7RJHWWKHEHDQ·VKRPHWKHFOLHQWGRHVDORRNXS
ECLIENT
H O M E S TUBONTH RQ-1',XVLQJWKHORJLFDOQDPHXQGHUZKLFKWKH
SA
4HEREWA EDEFIANT EHDQZDVGHSOR\HG
A D E T H E6-QUIT
4HATM D E D 7RGRD-1',ORRNXSWKHFOLHQWPXVWILUVWJHWDQ
WASNEE
!NARROW H EEDED ,QLWLDO&RQWH[WZKLFKLVWKHHQWU\SRLQWLQWRWKH
E C A STTOBE ANT
&O R TH !COMPLI VHUYHU·V-1',´YLUWXDOGLUHFWRU\WUHHµ
U S E I T W AS#/2"
" E CA
)RUD5HPRWHKRPHLQWHUIDFHWKHVWXEUHWXUQHG
IURP-1',PXVWEHERWKFDVWDQGQDUURZHG
1DUURZLQJLVWKH´H[RWLFFDVWLQJµQHHGHGIRUVWXE
REMHFWVWKDWFRPHIURPDPHWKRGWKDWGRHVQRW
UHWXUQWKHVWXE·VFOLHQWLQWHUIDFH6LQFHWKH-1',
ORRNXSUHWXUQVW\SH2EMHFWWKHREMHFWUHWXUQHG
IURPWKHORRNXSPXVWEHQDUURZHGWRWKHEHDQ·V
KRPHLQWHUIDFHDQGWKHQFDVWWRWKHEHDQ·VKRPH
LQWHUIDFH
   ƒ 1DUURZLQJLVUHTXLUHGIRU,,23VWXEV ,,23LV
WKHZLUHSURWRFROIRU&25%$ EHFDXVHZKDW·V
UHWXUQHGIURPWKHORRNXSPLJKWQRWEHFDSDEOHRI
2OSESARERED BLUEISTHESKY LPSOHPHQWLQJPXOWLSOHLQWHUIDFHVDQGWKXVZRXOG

YOUCANTGETABEANFROM*.$ NQRZRQO\DERXWWKHPHWKRGVLQW\SH2EMHFW
)
1DUURZLQJUHWXUQVDQREMHFWWKDWLPSOHPHQWVWKH
)TSONLYTHEHOMEACLIENTWI KRPHLQWHUIDFH
LLSPY
WHENHEDOESALOOKUPON*.$ ƒ 7KHKRPHLQWHUIDFHH[WHQGV(-%+RPHZKLFKKDV
)
IRXUDGGLWLRQDOPHWKRGVWKHFOLHQWFDQVHH
JHW(-%0HWD'DWDJHW+RPH+DQGOH
UHPRYH +DQGOHK UHPRYH 2EMHFWSULPDU\.H\ 
7KHUHPRYH 2EMHFWSULPDU\.H\ PXVWQRWEH
FDOOHGRQDVHVVLRQEHDQ

\RXDUHKHUH 
WKH+RPHLQWHUIDFH

6KDUSHQ \RXU SHQFLO


%DVHGRQWKHUXOHVIRUVHVVLRQEHDQKRPHLQWHUIDFHVZKLFK
VWDWHPHQWVDUHWUXHDERXWWKLVLQWHUIDFH

LPSRUWMDYD[HME(-%+RPH
LPSRUWMDYDUPL5HPRWH([FHSWLRQ

SXEOLFLQWHUIDFH&DUW+RPHH[WHQGV(-%+RPH^

SXEOLF&DUWFUHDWH WKURZV&UHDWH([FHSWLRQ5HPRWH([FHSWLRQ

R&DUW+RPHPXVWQRWEHWKHKRPHRIDVWDWHIXOVHVVLRQEHDQ
R7KHLQWHUIDFHLVPLVVLQJDQLPSRUWVWDWHPHQW
R7KHFUHDWHPHWKRGLVPLVVLQJDQH[FHSWLRQ
R&DUWPXVWEHWKHFODVVW\SHRIWKHEHDQ
R&DUWPXVWEHWKHLQWHUIDFHWKDWH[WHQGV(-%2EMHFW
R7KHREMHFWUHWXUQHGIURPFUHDWH PXVWEHQDUURZHG
R7KHREMHFWUHWXUQHGIURPFUHDWH GRHVQRWQHHGDFDVW

<RX0867EH
DEOHWRORRNDW
FRGHDQGLQIHU
DORWDERXWLW
RRNDW
7KHH[DPH[SHFWV\RXWRO
UEH DQFRG HDQG
FOLHQWLQWHUIDFHR
UHQFHV DE RXWWKLQJV \RX
PDNHLQIH
QRZ DOO RI
GRQ¶WVHH<RX0867N
HDQG FRP SRQ HQW
WKHUXOHVIRUKRP
HV$QGWK HUH¶VP RUH 
LQWHUIDF

 &KDSWHU
WKHFOLHQWYLHZ

*]\MVW]OPIJW]\\PMPWUMTM\¼[\ITSIJW]\
\PM-2*WJRMK\<PMKWUXWVMV\QV\MZNIKM
<PM\PQVOaW]:-)44A_IV\
2EMEMBER ALLTHAT)NITIAL#ONTEXT *.$) LOOKUP CAST NARROW CREATEBUSINESS
WASJUSTTOGETWHATYOUREALLYWANTEDALLALONGˆSOMETHINGWITHTHEBUSINESS
METHODS3OMETHINGYOUCANUSETOGETTHEBEANTODOWHATEVERITISTHATBEAN
WASCREATEDFOR.UMBERCRUNCHING ONLINESHOPPING ADVICE

SDFNDJHKHDG¿UVW

LPSRUWMDYD[HME 
LPSRUWMDYDUPL5HPRWH([FHSWLRQ

SXEOLFLQWHUIDFH$GYLFHH[WHQGV(-%2EMHFW^

SXEOLF6WULQJJHW$GYLFH WKURZV5HPRWH([FHSWLRQ

5XOHVIRUWKHFRPSRQHQWLQWHUIDFH

 ,PSRUWMDYD[HME DQGMDYDUPL5HPRWH([FHSWLRQ

 ([WHQG(-%2EMHFW

 'HFODUHRQHRUPRUHEXVLQHVVPHWKRGVWKDWWKURZD5HPRWH([FHSWLRQ

4 $UJXPHQWVDQGUHWXUQW\SHVPXVWEH50,,,23FRPSDWLEOH 6HULDOL]DEOHSULPL
WLYH5HPRWHRUDUUD\VRUFROOHFWLRQVRIDQ\RIWKRVH 

4 <RXFDQKDYHRYHUORDGHGPHWKRGV
4 (DFKPHWKRGPXVWGHFODUHD5HPRWH([FHSWLRQ
4 <RXFDQGHFODUH\RXURZQDSSOLFDWLRQH[FHSWLRQVEXWWKH\PXVW127EHUXQ
WLPHH[FHSWLRQV LQRWKHUZRUGVWKH\PXVWEHFRPSLOHUFKHFNHGH[FHSWLRQV²
VXEFODVVHVRI([FHSWLRQEXWQRWVXEFODVVHVRI5XQWLPH([FHSWLRQ 

\RXDUHKHUH 
WKH&RPSRQHQWLQWHUIDFH

,ZRQGHUZKDWHOVH,
FDQGRZLWKWKHFRPSRQHQW
LQWHUIDFH,NQRZWKHUH·V
PRUHWKDQMXVWWKHEXVLQHVV
PHWKRGVZKDWPHWKRGVDUH
LQ(-%2EMHFW"

LQWHUIDFH!!
5HPRWH

LQWHUIDFH!!
(-%2EMHFW
Just as with
ZKDWPHWKRGV interface, thethcle EJBHome
DUHLQKHUH"
in EJBObject ient sees everything
methods are ex! po
All of these
FOLHQWFDQFDOO
through the bean sed to the client
interface (Advice Õs component
WKHVHPHWKRGV
).

Any class that implements the


LQWHUIDFH!!
Advice must implement ALL D
methods from both Advice AN
$GYLFH
JHW$GYLFH EJBObject.

 &KDSWHU
WKHFOLHQWYLHZ

1UIOQVM_PI\MT[MaW]UQOP\_IV\\WLW
_Q\PaW]Z-2*WJRMK\ZMNMZMVKM
9OUREACLIENT9OUHAVEAREFERENCETOTHE!DVICE"EANSCOMPONENT
INTERFACE9OUKNOWYOUCANCALLGET!DVICE "UTNOWTHATYOUVEGONE
TOALLTHETROUBLEOFGETTINGTHESTUB ARETHEREOTHERTHINGSYOUMIGHT
WANTTODO

,FDQWKLQNRIVRPHWKLQJV
OLNHZKDWLI,KDYHWKHEHDQEXW,
ORVWWKHUHIHUHQFHWRWKHKRPHDQGQRZ
,ZDQWWRPDNHPRUHEHDQVRIWKDWW\SH"
6XUHO\WKHEHDQNQRZVLWVRZQKRPHULJKW"
,FDQ·WEHOLHYHWKH\ZRXOGKDYHEHHQ
VWXSLGHQRXJKWRPDNH\RXJREDFN
WKURXJK-1',

\RXDUHKHUH 
WKH(-%2EMHFWLQWHUIDFH

:KDW<28ZULWH :KDWWKH&/,(17VHHV

LQWHUIDFH!! LQWHUIDFH!!
$GYLFH $GYLFH
JHW$GYLFH JHW$GYLFH
JHW3ULPDU\.H\
JHW(-%+RPH
JHW+DQGOH
UHPRYH
(-%2EMHFW WKH
EHDQ·VERG\JXDUG LV,GHQWLFDO
IRUEXVLQHVV
PHWKRGV

5HPHPEHUWKHFRQWDLQHU
$GYLFH,PSO $GYLFH,PSOBVWXE
LPSOHPHQWV\RXUFRPSRQHQW
LQWHUIDFHDQGPDWFKLQJVWXE JHW$GYLFH JHW$GYLFH
JHW3ULPDU\.H\ JHW3ULPDU\.H\
7KHFRQWDLQHUPXVWLPSOHPHQW JHW(-%+RPH JHW(-%+RPH
JHW+DQGOH JHW+DQGOH
(9(5<7+,1*IURP$GYLFHDQG
UHPRYH UHPRYH
(-%2EMHFW LV,GHQWLFDO LV,GHQWLFDO

the class of the actual the class


EJB objecof the
<RXEHWWHU Remote EJB object t stub
NQRZWKHVH
RWKHUPHWKRGV
LQVLGHDQGRXW
QRZDOO
7KHH[DPH[SHFWV\RXWRN
GV LQ( -%2 EMHFW
¿YHRIWKHPHWKR
WRNQRZ WKD WWKH\¶UH
<RXKDYH
DQG
DYDLODEOHWR5HPRWHFOLHQWV
H[DFWO\KRZWKH\ ¶UH XVH G

 &KDSWHU
WKHFOLHQWYLHZ

,I\RX·UHDFOLHQWDQG\RXZDQWWR FDOOWKLVPHWKRG

 JHWWKHSULPDU\NH\RIDQHQWLW\EHDQ LQWHUIDFH!!
:HZRQ¶WJRLQWRWKLVQRZVLQFHZHKDYHPLOOLRQSDJHVRQHQWLW\EHDQV (-%2EMHFW
FRPLQJXS-XVWNQRZWKDWWKLVGRHVQRWDSSO\WRVHVVLRQEHDQVZKLFKGRQ¶W 2EMHFWJHW3ULPDU\.H\
KDYHDXQLTXHLGHQWLW\H[SRVHGWRWKHFOLHQW%XWLIWKHFOLHQWVRPHKRZJHWV (-%+RPHJHW(-%+RPH
DUHIHUHQFHWRDQHQWLW\EHDQ PD\EHE\VHDUFKLQJRQDFXVWRPHU¶VQDPH  +DQGOHJHW+DQGOH
DQGZDQWVWKHDFWXDOSULPDU\NH\WKLVLVWKHPHWKRGWRFDOO7U\LWRQD YRLGUHPRYH
VHVVLRQEHDQDQG\RX¶OOJHWDELJIDW5HPRWH([FHSWLRQ RU(-%([FHSWLRQLI ERROHDQLV,GHQWLFDO 2EMHFWR
WKHFOLHQWLVORFDO 
 JHWWKHEHDQ·VKRPH LQWHUIDFH!!
,PDJLQH\RX¶YHJRWDEHDQEXW\RXGRQ¶WKDYHWKHEHDQ¶VKRPH$QGQRZ (-%2EMHFW
\RXZDQWWRPDNHPRUHEHDQVRIWKDWW\SH:KDWGR\RXGR"<RXFRXOGGRD 2EMHFWJHW3ULPDU\.H\
-1',ORRNXSDQGJHWWKHKRPHLQWKHXVXDOZD\%XWZKDWLI\RXGRQ¶WKDYH (-%+RPHJHW(-%+RPH
HQRXJKLQIRUPDWLRQWRGRWKH-1',ORRNXS"<RXFDQDVNWKHEHDQWRJLYH +DQGOHJHW+DQGOH
\RXDUHIHUHQFHWRLWVKRPH(YHQLI\RXDUHFDSDEOHRIGRLQJD-1',ORRNXS YRLGUHPRYH
RQWKHKRPHFDOOLQJJHW(-%+RPH RQWKHEHDQLVPRUHHI¿FLHQW ERROHDQLV,GHQWLFDO 2EMHFWR

 VDYHDUHIHUHQFHWRWKH(-%2EMHFW LQWHUIDFH!!
<RX¶UHVKRSSLQJRQOLQHFDUHIXOO\SXWWLQJLWHPVLQ\RXUFDUWDIWHUKRXUVRI (-%2EMHFW
SDLQVWDNLQJUHVHDUFKDQGGHFLVLRQPDNLQJRQZKHWKHU\RXUJLUOIULHQGZLOO 2EMHFWJHW3ULPDU\.H\
SUHIHU\RXLQFRUQÀRZHUEOXHRUWKH0DUWKD6WHZDUWVHDIRDPJUHHQ%XW (-%+RPHJHW(-%+RPH
EHIRUH\RXFDQ¿QLVK\RXKDYHWRVZLWFKWRDQRWKHUPDFKLQH1RSUREOHP +DQGOHJHW+DQGOH
<RXFDQDVNWKHEHDQIRUDKDQGOHWRWKH(-%REMHFW<RXFDQXVHWKH YRLGUHPRYH
KDQGOHWRJHWEDFNWR\RXURULJLQDO(-%REMHFWDQGNHHSVKRSSLQJ ERROHDQLV,GHQWLFDO 2EMHFWR

 WHOOWKHEHDQ\RX·UHGRQHZLWKLW LQWHUIDFH!!
:KHQ\RX¶UH¿QLVKHGZLWKWKHEHDQLW¶VJRRGPDQQHUVWRWHOOLW\RX¶UHGRQH (-%2EMHFW
VRWKHFRQWDLQHUFDQIUHHXSDQ\UHVRXUFHVLWPLJKWEHNHHSLQJRQ\RXU 2EMHFWJHW3ULPDU\.H\
EHKDOI'$1*(5:H¶UHWDONLQJRQO\DERXWVHVVLRQEHDQVKHUH$OWKRXJK (-%+RPHJHW(-%+RPH
\RXFDQFDOOUHPRYH RQDQHQWLW\EHDQUHPHPEHULWKDVDYHU\GLIIHUHQW +DQGOHJHW+DQGOH
PHDQLQJ ZH¶OOVHHWKDWLQWKHHQWLW\EHDQFKDSWHUV  YRLGUHPRYH
ERROHDQLV,GHQWLFDO 2EMHFWR

 FRPSDUHWZR(-%REMHFWUHIHUHQFHVWRVHHLIWKH\ LQWHUIDFH!!
UHIHUHQFHWKHVDPHEHDQ (-%2EMHFW
<RX¶YHJRWWZRUHIHUHQFHVWRVHVVLRQEHDQ(-%REMHFWV1RZ\RXZDQWWR 2EMHFWJHW3ULPDU\.H\
NQRZLIWKH\¶UHUHDOO\UHIHUHQFHVWRWKHVDPHEHDQ7KHLV,GHQWLFDO PHWKRG (-%+RPHJHW(-%+RPH
WDNHVDQ(-%REMHFWUHIHUHQFHDQGFRPSDUHVLWWRWKH(-%REMHFWRQZKLFK +DQGOHJHW+DQGOH
\RXLQYRNHGLV,GHQWLFDO DQGUHWXUQVWUXHRUIDOVH YRLGUHPRYH
ERROHDQLV,GHQWLFDO 2EMHFWR

\RXDUHKHUH 
WKHJHW+DQGOH PHWKRG

9OURESHOPPING)TSTOUGH
BECAUSEYOUCANTDECIDEWHETHER
7VTQVM[PWXXQVO[PW]TLVW\JMZ][PML
YOUREASPRINGORASUMMER
9OUDONTWANTTOBERUSHED BUT
YOUVEALREADYGOTABUNCHOF
STUFFINYOURCARTWHENYOUREALIZE
YOURElVEMINUTESLATEFORWORK
9OUDLOVETOCONTINUEWITHYOUR
SHOPPINGONCEYOUGETTOWORK
7HATDOYOUDO)FITWERE
!MAZON YOURSHOPPINGCART
WOULDSTILLBETHEREWHENYOU
LOG INFROMTHE7EB"UTTHISISA
PROPRIETARY3WING BASEDSHOPPING +PPPP\QH[WGRRU
CLIENTAPPYOUREUSING(OWCAN QHLJKERUVD\VFRZER\ERRWV
YOUGETYOUR%*"OBJECTSTUBFROM DUHVH[\%XWWKHVDQGDOVZLOOPDNH
YOURHOMEMACHINETOYOURWORK PHORRNPRUHVHQVLWLYH7KHQDJDLQ
MACHINE JLUOVOLNHWKDWUXJJHGORRNVRPD\EH
,VKRXOGJRZLWKWKHKLNLQJERRWV
9OUCOULDTRYSERIALIZINGTHESTUB 6KRSSLQJLVVRWLPHFRQVXPLQJ
9EAH THATMIGHTWORK4HEN
AGAIN ITMIGHTNOT4HESTUBHAS
ALIVENETWORKCONNECTION AND
THERESCERTAINLYNOGUARANTEEYOU
CANGETTHATSAMECONNECTION
TOTHESAME%*"OBJECTAGAIN
!NDSINCETHAT%*"OBJECTIS
THECOMPONENTINTERFACEFOR
YOUROWNPERSONAL TEMPORARY
SHOPPINGCARTBEAN YOUNEED
AWAYTOGETBACKTOYOUREXACT
SAME%*"OBJECTAGAINFROMWORK

LQWHUIDFH!!
(-%2EMHFW
2EMHFWJHW3ULPDU\.H\
(-%+RPHJHW(-%+RPH
+DQGOHJHW+DQGOH
YRLGUHPRYH
ERROHDQLV,GHQWLFDO 2EMHFWR

 &KDSWHU
WKHFOLHQWYLHZ

<PIVSN]TTa_M¼^MOW\PIVLTM[ handle
handle
handle

LQWHUIDFH!!
handle +DQGOH
JHW(-%2EMHFW

no handle

!HANDLECANRESCUEYOURSHOPPINGEXPERIENCE!SK $KDQGOHLVD6HULDOL]DEOH
THEBEANVIATHE%*"/BJECTINTERFACE FORAHANDLE
REMHFWWKDWNQRZVKRZWRJHW
+DQGOHP\+DQGOH P\&DUWJHW+DQGOH 
EDFNWRWKHRULJLQDO5HPRWH
SERIALIZEIT EMAILITTOYOURSELF THENDESERIALIZEONYOUR
WORKMACHINEANDYOUREBACKINBUSINESS (-%REMHFW,W·VQRWDVWXE
4HEHANDLEISA3ERIALIZABLETHINGTHATKNOWSHOWTO EXWLWFDQ*(7WKHVWXE
GETBACKTOTHESTUB)THASASINGLEMETHOD
SXEOLF(-%2EMHFWJHW(-%2EMHFW ,WKDVMXVWRQHPHWKRG
3OWHENYOUCALLIT YOUHAVETOCASTANDNARROWTHE JHW(-%2EMHFW WKDWUHWXUQV
STUBTHATCOMESBACK2EMEMBER YOUALWAYSHAVETO
CASTANDNARROWASTUBUNLESSTHEMETHODTHATRETURNS W\SH2EMHFW
ITHASTHEACTUAL2EMOTEINTERFACEASITSDECLAREDRETURN
TYPE3INCETHEHANDLESMETHODHASNOFRICKINCLUE 6R\RXKDYHWRQDUURZDQG
WHATYOURCOMPONENTINTERFACEISSAY 3HOPPING#ART
YOUREFACEDWITHTHESAMESCENARIOYOUHADWITHTHE FDVWWKHVWXE\RXJHWEDFN
HOMESTUBYOUGOTFROMTHE*.$)LOOKUP METHOD
#ASTANDNARROW#ASTANDNARROW#ASTANDNARROW
)NYOURCLIENTCODE YOULLHAVESOMETHINGLIKE
\RXUFRGHWRJHWWKHVHULDOL]HGKDQGOH\RXVDYHGHDUOLHU
+DQGOHK WKLVUHVWRUH7KH+DQGOH 

QRZXVHLWWRJHWWKH(-%2EMHFWVWXE
2EMHFWR KJHW(-%2EMHFW 
6KRSSLQJFDUW  6KRSSLQJ 3RUWDEOH5HPRWH2EMHFWQDUURZ R6KRSSLQJFODVV 

\RXDUHKHUH 
(-%+DQGOHV

:DLWDPLQXWHLVQ·WDKDQGOHDELJ
VHFXULW\SUREOHP"<RXDOUHDG\VDLG,FRXOG
VHULDOL]HDKDQGOHDQGSXWLWRQDQRWKHUPDFKLQHVR
ZKDW·VWRVWRSPHIURPJLYLQJWKHKDQGOHWRVRPHRQH
HOVH"6RPHRQHZKRGLGQ·WKDYHDFFHVVWRWKHVWXELQWKH
ÀUVWSODFH"$QGDQRWKHUWKLQJEXJVPHDERXWKDQGOHV
,KRSH\RX·UHQRWWHOOLQJPHWKHVHUYHUKDVWRNHHS
VKRSSLQJFDUWVDURXQGIRUHYHUMXVWLQFDVHD
FOLHQWFRPHVEDFNXVLQJDKDQGOH
*RRGE\HVFDODELOLW\

'RQ·WZRUU\<RXFDQ·WXVHDKDQGOHDVD
ZD\WRYLRODWH\RXUEHDQ·VVHFXULW\

9OURSECURITYISONAMETHOD BY METHODBASIS SO


EVENIFYOUGIVEAHANDLETOSOMEONEELSE IFTHAT
CLIENTDOESNTHAVEAUTHORIZATIONTOCALLMETHODS
ONTHEBEAN THESTUBTHEYGETBACKFROMTHE
HANDLEWILLBEUSELESS

-XVWEHFDXVH\RXVWLOOKDYHDKDQGOHGRHVQ·W
PHDQWKHVHUYHUVWLOOKDV\RXUEHDQ

)FYOURESHOPPINGANDYOUGETAHANDLE AND
THENTHESERVERDETECTSTHATYOUHAVENTBEEN
DOINGANYTHINGWITHYOURCARTFORAWHILE THE
SERVERCANTEMPORARILYSAVEYOURBEANKNOWNAS
PASSIVATION TOCONSERVERESOURCES BUTKEEPYOUR
CARTAROUNDJUSTINCASEYOUCOMEBACK"UTIFYOU
STILLDONTCOMEBACKWITHINSOMETIMEPERIOD
THESERVERWILLDESTROYYOURCARTWITHNOHOPEOF
RESURRECTINGIT4HATBEANISHISTORY
)NTHATCASE YOURCARTWONTBETHEREWHENYOU
CALLGET%*"/BJECT ONTHEHANDLE ANDYOULLGET
A2EMOTE%XCEPTION

 &KDSWHU
WKHFOLHQWYLHZ

Q[1LMV\QKIT'
PW_\WNQVLW]\QN\ _W[\]J[
ZMNMZ\W\PM[IUMJMIV
LQWHUIDFH!!
(-%2EMHFW
2EMHFWJHW3ULPDU\.H\
These twins ar (-%+RPHJHW(-%+RPH
theyÕre stateLEe identical if +DQGOHJHW+DQGOH
can each do the SS, since they YRLGUHPRYH
clients wonÕt knowsame thing and ERROHDQLV,GHQWLFDO 2EMHFWR
But if theyÕr the difference.
they are alwayes stateFUL, then
twins cannot be distinct. Stateful )FYOUVEGOTTWOSTUBS ANDYOUWANTTOKNOWIFTHEYREFER
they can hold identical, because TOTHESAMEBEAN YOUCALLIS)DENTICALONONEREFERENCE
to their own uniniqformation speciÞc PASSINGINTHEREFERENCEYOUWANTTOCOMPAREITAGAINST
ue client. *USTLIKETHEWAYYOUUSETHEEQUALS METHOD
4HETRICKIS STATELESSSESSIONBEANS STATEFULSESSIONBEANS
ANDENTITYBEANSEACHHAVEDIFFERENTRULESFORWHATCAUSES
IS)DENTICAL TORETURNTRUE

6WDWHOHVVVHVVLRQEHDQV
4RUEIFBOTHREFERENCESCAMEFROMTHESAMEHOME EVENIF
THESTUBSAREREFERRINGTOTWODIFFERENT2EMOTE%*"OBJECTS
4OTHESERVER ONESTATELESSBEANISASGOODASANYOTHER
BEANFROMTHESAMEHOME BECAUSETHECLIENTWOULDNEVER
BEABLETOTELLTHEDIFFERENCESINCETHEBEANCANTHOLDANY
CLIENT SPECIlCSTATE 

6WDWHIXOVHVVLRQEHDQV
&ALSENOMATTERWHAT FORANYTWOUNIQUESTUBS
EVENIFFROMTHESAMEHOME!FTERALL MY
SHOPPINGCARTISNTTHESAMEASYOURS

(QWLW\EHDQV
4RUEIFTHESTUBSREFERTOTWOENTITIESWITHTHESAMEPRIMARYKEY

\RXDUHKHUH 
WKHLV,GHQWLFDO PHWKRG

6WDWHOHVV
EHDQV

These beans ar
all identical e 7KHLV,GHQWLFDO PHWKRGLV
OLNHFDOOLQJD5HPRWHHTXDOV 
PHWKRGH[FHSW\RX·UHQRW
EHDQ
EHDQ
DVNLQJLIWZRREMHFWVRQ\RXU
EHDQ
KHDSDUHPHDQLQJIXOO\HTXLYDOHQW
LV,GHQWLFDO DOZD\VUHWXUQVWUXH \RX·UHDVNLQJLIWZR5HPRWH
HYHQIRUGLIIHUHQWEHDQV
REMHFWVDUHPHDQLQJIXOO\
HTXLYDOHQWRQWKHVHUYHU

6WDWHIXO (QWLW\
EHDQV EHDQV
These beans are
NEVER identical.
Your cart is
different from
mine.

EHDQ These two are EHDQ


identical
EHDQ  EHDQ

EHDQ
 EHDQ

LV,GHQWLFDO DOZD\VUHWXUQVIDOVH LV,GHQWLFDO UHWXUQVWUXHIRUEHDQV 


IRUGLIIHUHQWEHDQVHYHQLIWKH WKDWUHIHUHQFHWKHVDPHHQWLW\ LQ
EHDQVDUHIURPWKHVDPHKRPH RWKHUZRUGVWKHVDPHSULPDU\NH\
:HXVHWKHWHUP´EHDQµKHUHDOLWWOHORRVHO\EHFDXVH
FRQFHSWXDOO\WKHVHUYHUXVHVRQO\RQHEHDQWR
UHSUHVHQWDSDUWLFXODUHQWLW\6RWKHUHZRXOGEHRQO\
RQHEHDQZLWKDSULPDU\NH\RIEXWFOLHQWVPD\
KDYHPXOWLSOH(-%REMHFWUHIHUHQFHVWRLW

 &KDSWHU
WKHFOLHQWYLHZ

WKHUH DUH QR
'XPE 4XHVWLRQV
Q: 7HYCANTYOUJUSTUSETHEEQUALS METHOD Q: (OWCOMETHERESAMETHODINTHE%*"/BJECT
INSTEADOFIS)DENTICAL )SNTTHATWHATEQUALS ISFOR INTERFACEFORGETTINGTHEBEANSHOME)FYOUDONT
(!6%THEHOME THENHOWDIDYOUGETTHEBEANINTHE

A: 2EMEMBER WERETALKINGABOUT2EMOTEOBJECTS
lRSTPLACE

4HEEQUALS METHODCOMPARESTWOOBJECTSONTHE
SAME(%!0 WHEREIS)DENTICAL COMPARESTWO2EMOTE A: 4HEREAREOTHERWAYSTOGETAREFERENCETOAN%*"
OBJECTSONTHE3%26%2 OBJECT)TSTRUETHATYOUCANTUSE*.$)TOLOOKUPTHE
%*"OBJECTONLYTHEHOMEISREGISTERED
Q: )STILLDONTSEEWHYTHEYCOULDNTHAVEJUST
"54THERESNOTHINGTOSTOPYOUFROMPASSINGAN%*"
OBJECTREFERENCEASANARGUMENTORRETURNVALUE9OU
IMPLEMENTEDTHEEQUALS METHODONTHESTUBTODO
MIGHTHAVEABUSINESSMETHODINONEBEAN WHOSESOLE
THESAMETHING
JOBISTOHANDYOUBACKAREFERENCETOAN%*"OBJECTFORA
DIFFERENTBEAN
A: 4HEEQUALS METHODISNOTAREMOTEMETHOD .OWSUPPOSEYOUHAVETHIS%*"OBJECTREFERENCE TOA
BEANWHOSEHOMEYOUNEVERHAD ANDNOWYOUWANTTO
FORONETHING9OUCANALWAYSCALLEQUALS ONASTUB
BECAUSEYOUCANCALLITONANYOBJECTONYOURHEAP MAKEMOREOFTHOSEBEANSFORYOURSELF9OUCANDOTHAT
"UTITSNOTPARTOFTHEREMOTEINTERFACE SOITCANTBE BYASKINGFORTHEBEANSHOMEUSINGGET%*"(OME 
AREMOTEMETHODFOREXAMPLE ITDOESNTDECLAREA !NDEVENIFYOUDOHAVEENOUGHINFORMATIONTODOA
2EMOTE%XCEPTION ETC LOOKUPIN*.$)FORTHATBEANSHOME *.$)LOOKUPSARE
!NDREMEMBER THEEQUALS METHODISUSEDTOSEEIF EXPENSIVE9OULLSAVESOMEOVERHEADIFYOUJUSTGETTHE
TWOOBJECTSONTHEHEAPAREMEANINGFULLYEQUIVALENT HOMEREFERENCEFROMTHEBEANDIRECTLY
4HEVENDORCANIMPLEMENTTHEEQUALS METHODON
THESTUBANYWAYITLIKES BUTTHATSTILLDOESNTTELLYOU
ANYTHINGABOUTWHATSGOINGONBACKATTHESERVER
Q: 7HYCANTYOUSERIALIZETHESTUB7HYDOWE
END*USTBECAUSETWOSTUBSDONTPASSTHEEQUALS TEST NEEDHANDLES
DOESNTMEANTHESERVERDOESNTCONSIDERTHETWO%*"
OBJECTSTOBEIDENTICALORREFERENCINGIDENTICALBEANS 
9OURSERVERMAYBEUSING2-)STUBS FOREXAMPLE THAT
A: 7EDIDNTSAYTHESTUBWASNT3ERIALIZABLE"UT
EVENIFYOUCANSERIALIZEIT THATDOESNTMEANITSGOT
HAVENOLOGICFORHOWTHEIRCOMPARISONSRELATETO ENOUGHINFORMATIONTOGETYOUBACKTOTHESAMEOR
MEANINGFULCOMPARISONSOFTWO%*"OBJECTSONTHE MEANINGFULLYIDENTICAL %*"OBJECT7HENTHESTUBCOMES
SERVER2-)STUBSKNOWABOUT2EMOTEOBJECTS BUTTHEY OVERFROMTHESERVER ITSALREADYKNOWLEDGEABLEABOUT
DONTKNOWWHATTHOSE2EMOTEOBJECTSREPRESENT HOWTOCONTACTAPARTICULAR2EMOTEOBJECT7HENTHAT
STUBISRECREATED THATEXACT2EMOTEOBJECTMIGHTNOT
EVENEXISTANYLONGER

Q: 4HENHOWWOULDTHEHANDLEBEANYBETTER

A: 4HEHANDLEHASTHE@SMARTSTOCOMMUNICATE
WITHTHESERVERANDGETBACKSOMETHINGTHATISJUSTTHE
SAMEASTHE%*"OBJECTYOUHADBEFORE)NOTHERWORDS
ITMIGHTNOTBETHESAME%*"OBJECT BUTTHECLIENTWILL
NEVERBEABLETOTELLTHEDIFFERENCE
\RXDUHKHUH 
WKH5HPRWHLQWHUIDFHV

:MDD=LHGAFLK

ƒ <RXH[SRVH\RXUEHDQ·VEXVLQHVVPHWKRGVLQWKH
FRPSRQHQWLQWHUIDFH
5HPRWHFRPSRQHQWLQWHUIDFHVPXVWH[WHQG
MDYD[HME(-%2EMHFW
7KHFOLHQWJHWVDUHIHUHQFHWRWKHEHDQ·V(-%2EMHFW

  
E\FDOOLQJDPHWKRGRQWKHEHDQ·VKRPHLQWHUIDFH
 TATELESSH
OME 5HIHUHQFHVWRERWKVWDWHOHVVDQGVWDWHIXOVHVVLRQ
)NYOURS MORE EHDQVDUHUHWULHYHGIURPWKHKRPH·VFUHDWH 
EANDNO
WRITEON SEE PHWKRGV
LIENTWILL
BUTTHEC R
IONALFOU )URPWKH(-%2EMHFWLQWHUIDFHWKHFOLHQWVHHVILYH
ANADDIT
S= DGGLWLRQDOPHWKRGVJHW(-%+RPH JHW+DQGOH 
;METHOD
UHPRYH LV,GHQWLFDO DQGJHW3ULPDU\.H\ 
AREALIVE
D W HENTHEY
2OSESARE
R E TSFIVE 2QO\HQWLW\EHDQFOLHQWVDUHDOORZHGWRFDOO
JE C T T H E CLIENTGE
/B JHW3ULPDU\.H\ RQWKHEHDQ·VFRPSRQHQW
&ROM%*"
O D S= LQWHUIDFH6HVVLRQEHDQFOLHQWVZLOOJHWD
;METH
5HPRWH([FHSWLRQ
 7KHJHW(-%+RPH PHWKRGUHWXUQVDUHIHUHQFHWR
WKHEHDQ·VKRPHLQWHUIDFHVRWKDWWKHFOLHQWGRHVQ·W
,Q(-%WKHUH
·V
KDYHWRJRWKURXJKD-1',ORRNXSLIWKH\ZDQWWR
:DWFKLW FDQDQGWKHU PDNHPRUHEHDQVRIWKDWW\SH
H·V
FDQ
2QWKHH[DPV
RPHIRONVDUHF
ƒ 7KHJHW+DQGOH PHWKRGUHWXUQVD6HULDOL]DEOH
WKHZRUG³FDQ´ RQIXVHGE\ REMHFWWKDWFDQEHXVHGODWHUWRUHHVWDEOLVKFRQWDFW
DVLQ³&DQDVHV
FOLHQWFDOOJHW3U VLRQEHDQ ZLWKWKHVHUYHUDQGJHWEDFNWKHVWXEWRWKH
LPDU\.H\ RQWK
REMHFWVWXE"´ H(-%
FRPSRQHQWLQWHUIDFHWKDWWKHFOLHQWXVHGWRJHWWKH
'HSHQGVRQKRZ
KDQGOH
\RXGH¿QH³FDQ
IRUWKHH[DPWKH ´$QG ƒ 7KHKDQGOHKDVRQHPHWKRGJHW(-%2EMHFW WKDW
DQVZHUZRXOGE
,QRWKHUZRUGVM H12
XVWEHFDXVHVRP UHWXUQVWKH5HPRWHVWXEDVW\SH(-%2EMHFW7KDW
LVOHJDOO\H[SRV HWKLQJ
PHDQVWKHFDOOH
HGWRWKHFDOOHU
ZKLFK PHDQVWKHVWXEPXVWEHFDVWDQGQDUURZHGMXVWDV
UFDQ&203,/( \RXPXVWGRZLWKWKHKRPHVWXEWKDW\RXJHWIURPD
PHWKRGFDOOLIWK ZLWKWKH
HVSHFVD\V\R -1',ORRNXS
WKHQ\RXFDQ¶W6 XFDQ¶W
RMXVWEHFDXVH\
FRPSLOH GRHVQ RXFDQ
LQJWRWKHVSHF 
¶WPHDQ\RXFD
Q DFFRUG ƒ 7KHLV,GHQWLFDO PHWKRGLVNLQGRIOLNHGRLQJDQ
5HPHPEHUWKHU HTXDOV PHWKRGRQWKHVHUYHU,WUHWXUQVWUXHIRU
SLOHUODZDQGWK H¶VFRP
HQWKHUH¶V(-% WZRGLIIHUHQWVWDWHOHVVEHDQVIURPWKHVDPHKRPH
2QWKHH[DPZ VSHFODZ
H¶UHORRNLQJIRU(
WKHTXHVWLRQ'2 -%ODZ,I IDOVHIRUWZRGLIIHUHQWVWDWHIXOEHDQVIURPWKHVDPH
(6LQYROYHFRP
\RX¶OONQRZIURP SLODWLRQ KRPHDQGWUXHIRUUHIHUHQFHVWRHQWLWLHVZLWKWKH
WKHZRUGLQJ
VDPHSULPDU\NH\

 &KDSWHU
WKHFOLHQWYLHZ

)JMIV¼[KTQMV\QV\MZNIKM[KIVJMTWKIT
7EVELOOKEDATONLYTHE2EMOTECLIENTINTERFACESFORABEANSOFAR BUTAS
OF%*" SESSIONANDENTITYBEANSCANEXPOSEALOCALCLIENTVIEW)NOTHER
WORDS CLIENTINTERFACESTHATDONOTEXTENDJAVARMI2EMOTE
7HATDOESTHISMEAN4HATTHEHOMEOBJECTAND%*"OBJECTARENOT2EMOTE
OBJECTS4HEYRERUNNINGINTHESAME*6-ASTHECLIENTANDTHEBEAN)NTHE
ENTITYBEAN#-2CHAPTER WELLLOOKATWHYLOCALINTERFACESWEREADDEDTO
THESPEC&ORNOW THINKOFTHEMASAVERYSPECIALCASE

5HPRWHFOLHQWYLHZ /RFDOFOLHQWYLHZ

LQWHUIDFH!! LQWHUIDFH!! LQWHUIDFH!! LQWHUIDFH!!


5HPRWH 5HPRWH (-%/RFDO+RPH (-%/RFDO2EMHFW
PHWKRGV PHWKRGV

LQWHUIDFH!! LQWHUIDFH!! LQWHUIDFH!! LQWHUIDFH!!


(-%+RPH (-%2EMHFW $GYLFH+RPH/RFDO $GYLFH/RFDO
PHWKRGV PHWKRGV FUHDWH JHW$GYLFH

LQWHUIDFH!! LQWHUIDFH!! The local interfaces do NOT


$GYLFH+RPH $GYLFH extend java.rmi.Remote
FUHDWH JHW$GYLFH (and our naming conventio n is
not required... but you nee d
to distin gui sh it
SOMETHING ace s)
from you r Re mo te int erf

YiX`e
gfn\i
7KH5HPRWHLQWHUIDFHV(-%+RPHDQG(-%2EMHFWKDYHPRUHPHWKRGV
WKDQWKHORFDOLQWHUIDFHV(-%/RFDO+RPHDQG(-%/RFDO2EMHFW)OLS
EDFNWKURXJKWKLVFKDSWHUDQGORRNDWWKHPHWKRGVIRU(-%+RPH
DQG(-%2EMHFWDQGWU\WRZRUNRXWZKLFKPHWKRGVLQWKRVH5HPRWH
LQWHUIDFHVPLJKWEHLQDSSURSULDWHRUQRWQHHGHGLQWKHORFDOLQWHUIDFHV

7KLQNDERXWWKHLPSOLFDWLRQVRIKDYLQJWKHLQWHUIDFHVORFDOWRWKHFOLHQW

\RXDUHKHUH 
5HPRWHYVORFDOFOLHQWYLHZ

5(027(FOLHQWYLHZ

&RPSRQHQWLQWHUIDFH
&RPSRQHQWLQWHUIDFH

VHUYLFHV
(-%
VWXE REMHFW

EHDQ

HV
FOLHQW

+RPHLQWHUIDFH

VHUYLF
+RPHLQWHUIDFH

+RPH
REMHFW

FOLHQWKHDS VWXE

VHUYHUKHDS

/2&$/FOLHQWYLHZ
&RPSRQHQWLQWHUIDFH

The client still canÕt get to No stubs!!


VHUYLFHV

the bean directly, because (-%


the server still needs a place REMHFW
to intercept the call to the EHDQ
bean (so the server can add FOLHQW
services). But this time, the
HV

client has a local reference


+RPHLQWHUIDFH

VHUYLF

to the home and component +RPH


interface objects. REMHFW

VHUYHUKHDS

 &KDSWHU
WKHFOLHQWYLHZ

6KDUSHQ \RXU SHQFLO

*LYHQWKDWWKHFOLHQWKDVDSODLQROGHYHU\GD\-DYD
UHIHUHQFHWRWKHKRPHDQGFRPSRQHQWLQWHUIDFHV
LHWKHKRPHREMHFWDQGWKH(-%REMHFW ZKLFK
RIWKH5HPRWHLQWHUIDFHPHWKRGVGR\RXWKLQNDUH
DSSURSULDWHIRUWKHORFDOFOLHQWYLHZ"

,QRWKHUZRUGVZKLFKPHWKRGVRI(-%+RPHDUHQRWLQ
(-%/RFDO+RPHDQGZKLFKPHWKRGVRI(-%2EMHFWDUHQRWLQ
(-%/RFDO2EMHFW":K\"

2IWKHIRXUPHWKRGVLQ
(-%+RPH(-%/RFDO+RPH
KDVRQO\RQH:KLFKRQH"

LQWHUIDFH!! LQWHUIDFH!!
(-%+RPH (-%/RFDO+RPH

(-%0HWD'DWDJHW(-%0HWD'DWD
+RPH+DQGOHJHW+RPH+DQGOH 1 BBBBBBBBBBBBBBBBBBBBBBBBB
YRLGUHPRYH +DQGOHK
YRLGUHPRYH 2EMHFWNH\

2IWKH¿YHPHWKRGVLQ(-%2EMHFW
(-%/RFDO2EMHFWKDVRQO\IRXU DQG
RQHRIWKHIRXULVVOLJKWO\GLIIHUHQW 
:KLFKIRXU"

LQWHUIDFH!! LQWHUIDFH!!
(-%2EMHFW (-%/RFDO2EMHFW

2EMHFWJHW3ULPDU\.H\
BBBBBBBBBBBBBBBBBBBBBBBBB
(-%+RPHJHW(-%+RPH 1
2 BBBBBBBBBBBBBBBBBBBBBBBBB
+DQGOHJHW+DQGOH
3 BBBBBBBBBBBBBBBBBBBBBBBBB
YRLGUHPRYH
4 BBBBBBBBBBBBBBBBBBBBBBBBB
ERROHDQLV,GHQWLFDO (-%2EMHFWR

\RXDUHKHUH 
ORFDOLQWHUIDFHV

?PQKPUM\PWL[UISM[MV[MNWZ\PMTWKITKTQMV\QV\MZNIKM['
9OUALREADYKNOWTHATTHELOCALCLIENTINTERFACESAREMISSINGSOMEOFTHEMETHODS
FROMTHEIR2EMOTECOUNTERPARTS,ETSlGUREOUTWHICHONESAREMISSING ANDWHY

,W_MVMMLPIVLTM[_Q\PTWKITQV\MZNIKM['
2EMEMBERWHYHANDLESEXISTIN%*"ˆTOGIVEYOUA3ERIALIZABLEOBJECTTHATYOU
CANUSETORE ESTABLISHASTUBTOTHE%*"OBJECTYOUDBEENWORKINGWITH4HE
HANDLEISJUSTANABSTRACTIONOFAREMOTECONNECTION3ODOESTHISMAKESENSE
ONALOCALCLIENT

,W_MVMML-2*5M\I,I\I_Q\PTWKITQV\MZNIKM['
2EMEMBERWHAT%*"-ETA$ATAISUSEDFORˆTOGETREmECTION LIKEINFOABOUTA
BEAN)FYOUCALLGET%*"-ETA$ATA ONABEANS2EMOTEHOME YOUGETBACK
ANOBJECTTHATIMPLEMENTS%*"-ETA$ATA4HATINTERFACE%*"-ETA$ATA HAS
METHODSTHATLETYOUINTERROGATETHEBEANANDLEARNMOREABOUTTHECLASSESTHAT
MAKEUPTHECOMPONENT7OULDALOCALCLIENTEVERNEED%*"-ETA$ATA

,W_MVMMLQ[1LMV\QKIT_Q\PTWKITQV\MZNIKM['
2EMEMBERWHYIS)DENTICAL EXISTSˆTOLETYOUCOMPARETWOHOMEOR
COMPONENTINTERFACEREFERENCESTOSEEIFTHEYREFERTOhMEANINGFULLYEQUIVALENTv
BEANSONTHESERVER7OULDYOUNEEDTOUSEIS)DENTICAL ONALOCALCLIENT"IG
(INTTHESERVERISFREETOIMPLEMENTEQUALS ANYWAYITCHOOSES

,W_MVMMLXZQUIZaSMaQVNWZUI\QWV_Q\PTWKITQV\MZNIKM['
2EMEMBERWHYPRIMARYKEYSEXISTˆTOUNIQUELYIDENTIFYENTITYBEANS7OULD
YOUEVERNEEDTOIDENTIFYANENTITYBEANONALOCALCLIENT

,W_MVMMLZMUW^MUM\PWL[_Q\PTWKITQV\MZNIKM['
2EMEMBERWHATREMOVE ISUSEDFORˆTOTELLTHECONTAINERTHATYOUREDONE
WITHABEAN FOR3ESSIONBEANS ORTOTELLTHECONTAINERTOPERMANENTLYDELETETHE
ENTITY FORENTITYBEANS7OULDALOCALCLIENTNEEDTOCALLREMOVE ONABEAN

 &KDSWHU
WKHFOLHQWYLHZ

?PMVaW]\PQVSPIVLTM\PQVS:MUW\M
4WKITKTQMV\[LWV¼\VMMLPIVLTM[
,OCALCLIENTSHAVENOUSEFORAHANDLE BECAUSEHANDLESARE
STRICTLYFORGETTINGASAVABLE3ERIALIZABLE OBJECTTHATKNOWSHOW
TOREESTABLISHCOMMUNICATIONWITHTHE2EMOTEOBJECT

/2&$/FOLHQWYLHZ

A local client
Java referencehatos a plain old no stubs,
or component inte the home no handles

VHUYLFHV
thereÕs no need rface, so (-%
for handles. REMHFW

EHDQ
FOLHQW

HV
VHUYLF
+RPH
REMHFW

?PWVMML[-2*5M\I,I\I_PMV
aW]¼^MOW\ZMNTMK\QWV'
4WKITKTQMV\[LWV¼\VMML-2*5M\I,I\I
7ITHTHE*AVAREmECTION!0) YOUCANINTERROGATEANOBJECTTOGETALL
SORTSOFINFORMATIONABOUTITSCLASS7ITH2EMOTEOBJECTS YOUDONTHAVE
THATOPTION BECAUSEYOUCANTGETAREFERENCETOTHECLASSOFTHE2EMOTE
OBJECT4HEONLYTHINGYOUCANINTERROGATEONA2EMOTECLIENTARETHE
STUBOBJECTS BUTTHEYCANTTELLYOUANYTHINGABOUTTHEREAL%*"OBJECTOR
(OMEOBJECT
3OWHILEA2EMOTEHOMECLIENTHASTOUSE%*"-ETA$ATATHEINTERFACE
RETURNEDFROMTHE%*"(OMEGET%*"-ETA$ATA METHOD TOGETINFO A
LOCALCLIENTWILLSIMPLYUSETHE*AVAREmECTIONMETHODSGET#LASS ETC 

\RXDUHKHUH 
ORFDOLQWHUIDFHV

,WaW]VMMLQ[1LMV\QKIT_PMV\PMZM¼[MY]IT[ '
4WKITKTQMV\[[\QTTVMMLQ[1LMV\QKIT
2EMEMBERFORA2EMOTECLIENT THEONLYLOCALCOMPARISONYOUDOISONTWOSTUBOBJECTS
USINGEQUALS 4HISDOESNTWORKWHENYOUWANTTOCOMPARESOMETHINGBACKONTHE
SERVER INTHISCASETHETWO%*"OBJECTREFERENCES4HATSWHATIS)DENTICAL ISFOR"UTLOCAL
CLIENTSHAVETHEREALTHING4HEYHAVETHEREALREFERENCETOTHE%*"OBJECT SOTHEYCANUSE
EQUALS TOSEEIFTWO%*"OBJECTLOCAL REFERENCESAREMEANINGFULLYEQUIVALENT"UT
THATSSTILLNOTWHATYOUWANT4HEREISNOGUARANTEEINTHESPEC FORTHERESULTSYOULLGET
WITHEQUALS 3OWHILEITSEEMSLIKEYOUCOULDJUSTUSEEQUALS RATHERTHANIS)DENTICAL
WITHALOCALCLIENT THESPECDOESNOTGUARANTEETHATTHERESULTSWILLBETHESAME"OTTOM
LINEIFYOUWANTTOKNOWIFTWO%*"OBJECTREFERENCESAREREFERENCINGTHESAMESESSION
OBJECT YOUHAVETOUSEIS)DENTICAL EVENWHENTHE%*"OBJECTISLOCAL

5(027(FOLHQWYLHZ


LV,GHQWLFDO LV,GHQWLFDO

VHUYLFHV
(-%
FOLHQW VWXE REMHFW EHDQ

A Remote clie
method call, isnt
Id
has to make a R
emote
en
meaningful compa tical(), to get
EJB object. Cal rison info about an
wonÕt tell you anling equals() on a stub
ything useful.

/2&$/FOLHQWYLHZ

ical() on
() and isIdent
Calling equals object reference are e HTXDOV
a local EJBteed to give you the sam
VHUYLFHV

FOLHQW
not guaran still need isIdentical()
(-%
LV,GHQWLFDO REMHFW
result. You e if two EJB object EHDQ
to determinare to the same Session
references
object.

 &KDSWHU
WKHFOLHQWYLHZ

?Pa[WUIVaZMUW^MUM\PWL['
.WZ:MUW\MKTQMV\[\ _WQV\PMPWUMXT][WVMQV\PM
KWUXWVMV\QV\MZNIKM
2EMEMBER 2EMOTECLIENTSHAVETHREEREMOVE METHODSAVAILABLE TWOINTHE
HOME ANDONEINTHECOMPONENTINTERFACE4HEREMOVE THATCOMESFROM
%*"/BJECTISSIMPLEIFYOUCALLIT YOURESAYINGYOUWANTTOREMOVETHATVERYBEAN)N
OTHERWORDS THEBEANWHOSE%*"/BJECTYOUUSEDTOCALLREMOVE !NDFORSESSION
BEANS REMEMBER CALLINGREMOVE SIMPLYTELLSTHECONTAINERTHATYOUREDONEWITH
THEBEAN)TSGOODMANNERS ANDITIMPROVESSCALABILITYSINCETHESERVERCANSTOP
KEEPINGCLIENT SPECIlCRESOURCESONYOURBEHALF RATHERTHANWAITING SAY FORYOUR
SHOPPINGSESSIONTOTIMEOUTFROMINACTIVITY
"UTTHINGSARENTSOSIMPLEWHENYOUCALLREMOVEONAHOME&ORONETHING YOU
ACTUALLYCANTREMOVEAHOME4HESERVERKEEPSTHEBEANHOMEALIVEWHETHERYOURE
AROUNDORNOT SOTHERESNOSIGNIlCANTCLIENT SPECIlCRESOURCES4HERESNONEEDTO
TELLTHESERVERYOUREDONEWITHTHEHOME BECAUSETHESERVERWOULDSIMPLYSAY h3O
WHATv
4HENWHATDOESITMEANTOCALLREMOVE ONAHOME
)TMEANSYOURETELLINGTHEHOMETOREMOVEONEOFTHEBEANSTHATCAMEFROMTHAT
HOME!NDTHATMEANSYOUHAVETOIDENTIFYWHICHBEANYOURETALKINGABOUT

5(027(FOLHQWYLHZ

LQWHUIDFH!! LQWHUIDFH!!
(-%+RPH (-%2EMHFW

(-%0HWD'DWDJHW(-%0HWD'DWD 2EMHFWJHW3ULPDU\.H\
+RPH+DQGOHJHW+RPH+DQGOH (-%+RPHJHW(-%+RPH
YRLGUHPRYH +DQGOHK +DQGOHJHW+DQGOH
YRLGUHPRYH 2EMHFWNH\ YRLGUHPRYH
ERROHDQLV,GHQWLFDO 2EMHFWR

ainer
es tell the contthat
These two remov iÞc bean from This version tells
to remove a spechave to say WHICH to remove the be the container
home, but you er the handle (session an
EJBObject you on whose
invoked remove().
bean using eith s), or primary key
or entity beanonly).
(entity beans

\RXDUHKHUH 
UHPRYHPHWKRGV

:K\WKHUH·VQRWDQRDUJUHPRYH
PHWKRGLQWKHKRPH

+H\KRPLH,·G
OLNHWRUHPRYHRQHRIWKH
EHDQV\RXMXVWJDYHPH
7KDQNV
5RJHUWKDW
0U&OLHQW,·OOWHOOWKH
FRQWDLQHUULJKWQRZ


:KLFKEHDQ"""<RX·YHJLYHQRXW
OLNHDPLOOLRQEHDQVVRIDUDQG,KDYH
QRLGHDZKLFKRQH\RXZDQWWRQXNH
&RPHRQZRUNZLWKPHKHUH+RPLH,
QHHGVRPHWKLQJWKDWXQLTXHO\LGHQWLÀHV
WKHEHDQ2WKHUZLVH,·OOMXVWSLFNRQHDW
UDQGRPDQGNLOOLW$QGZHUHDOO\GRQ·W
ZDQWWKDWQRZGRZH"

&RQWDLQHUSOHDVH
UHPRYHDEHDQRQ 
EHKDOIRIWKLVFOLHQW

 &KDSWHU
WKHFOLHQWYLHZ

0W_KIVaW]][MIZMUW^M\PI\\ISM[I
PIVLTM_PMVaW]LWV¼\PI^MIPIVLTM'
4WKITKTQMV\[LWV¼\PI^MPIVLTM[[WTWKITPWUM[ <RXGRQ·WFDOOUHPRYHRQD
LWV¼\PI^MIZMUW^M\PI\\ISM[IPIVLTM KRPHWRUHPRYHWKHKRPH
)FLOCALHOMEINTERFACESDONTHAVEHANDLES THEN
THERESNOWAYYOUCOULDHAVEAREMOVEMETHODTHAT <RXFDOOUHPRYHRQDKRPH
TAKESAHANDLE"ECAUSEINORDERTOPASSAHANDLETO
THEHOME THATUNIQUELYIDENTIlESTHEBEANYOURE WRWHOOWKHKRPHWRUHPRYH
TRYINGTOREMOVE YOUDHAVETOlRSTGETTHEBEANS
HANDLE!NDSINCELOCALLY EXPOSEDBEANSDONTHAVE DEHDQ
HANDLESYOUSEETHEPROBLEM

WKHUH DUH QR $EHDQIURPWKDWKRPHW\SH


'XPE 4XHVWLRQV
Q: 7HATIFYOUHAVEALOCALHOME BUTYOUHAVEA 7KDWPHDQV\RXPXVW
2EMOTE%*"OBJECTREFERENCE#ANTYOUPASSTHE2EMOTE
BEANSHANDLETOTHELOCALHOME XQLTXHO\LGHQWLI\WKHEHDQ
A: \RXZDQWUHPRYHGZKHQ
./"ECAUSEYOUCANTMIXLOCALAND2EMOTE
INTERFACESTOGETHER/NLYALOCALBEANCOMESFROMALOCAL
HOME ANDVICE VERSA3OITWILL.%6%2BEPOSSIBLETOHAVE
\RXFDOODKRPHUHPRYH
A2EMOTEBEANSHANDLE TOGIVETOTHATSAME2EMOTE
BEANSHOME UNLESSTHATHOMEISALSO2EMOTE
PHWKRG)RUHQWLW\EHDQV
7EDIDNTSAYTHATVERYWELL DIDWE/+HOWABOUT
THISˆA2EMOTEHOMEWILLHANDOUTONLY2EMOTEREFERENCES
XVHWKHSULPDU\NH\RUD
TOTHECOMPONENT%*"/BJECT INTERFACEFORTHATBEANTYPE
ANDALOCALHOMEWILLONLYRETURNLOCALREFERENCESTOTHE
KDQGOHDQGIRUVHVVLRQ
COMPONENT%*",OCAL/BJECT INTERFACE
EHDQVXVHDKDQGOH
Q: 4ELLMEAGAINWHYYOUCANTREMOVETHEHOME
%XWKDQGOHVRQO\ZRUNIRU
A: 4HERESNEVERAREASONTOREMOVETHEHOMEIN 5HPRWHKRPHFOLHQWV
OTHERWORDS TOTELLTHECONTAINERYOUREDONEWITHIT
BECAUSETHECONTAINERMUSTKEEPTHEHOMEAROUNDWITH
ORWITHOUTYOURINTEREST3OIFYOUWEREABLETOSAYREMOVE
TOTHEHOME THECONTAINERWOULDSAY h'EEDONTFLATTER
YOURSELFBUDDY7HAT)DOHEREONTHESERVERISNOT!"/54
YOU)COULDCARELESSWHENYOUREDONEWITHYOURHOME
REFERENCEv

\RXDUHKHUH 
FRPSDULQJORFDOYV5HPRWH

+WUXIZQVO:MUW\M^[4WKITQV\MZNIKM[
4HE%*"/BJECTAND%*"(OMEINTERFACESHAVEMOREMETHODSTHANTHE
%*",OCAL/BJECTAND%*",OCAL(OMEINTERFACESBECAUSETHEREAREMETHODS
THATDONTMAKESENSEINALOCALCONTEXT

5(027(FOLHQWYLHZ /2&$/FOLHQWYLHZ

LQWHUIDFH!! LQWHUIDFH!!
(-%+RPH (-%/RFDO+RPH
Local clients can
(-%0HWD'DWDJHW(-%0HWD'DWD (-%0HWD'DWDJHW(-%0HWD'DWD
they donÕt need use reßection
+RPH+DQGOHJHW+RPH+DQGOH
EJBMetaData., so
+RPH+DQGOHJHW+RPH+DQGOH No need for a ha
clientÑthereÕs no ndle with a local
YRLGUHPRYH +DQGOHK YRLGUHPRYH +DQGOHK stub!
YRLGUHPRYH 2EMHFWNH\ YRLGUHPRYH 2EMHFWNH\ locally-accessed
handles, so you cabeans donÕt have
remove one. nÕt use a handle
to

LQWHUIDFH!! LQWHUIDFH!!
(-%2EMHFW (-%/RFDO2EMHFW
2EMHFWJHW3ULPDU\.H\ 2EMHFWJHW3ULPDU\.H\
(-%+RPHJHW(-%+RPH (-%/RFDO+RPHJHW(-%/RFDO+RPH changes from Remote to local
l clients
+DQGOHJHW+DQGOH +DQGOHJHW+DQGOH No handles in loca
YRLGUHPRYH YRLGUHPRYH
ERROHDQLV,GHQWLFDO (-%2EMHFWR ERROHDQLV,GHQWLFDO 2EMHFWR

 &KDSWHU
WKHFOLHQWYLHZ

6KDUSHQ \RXU SHQFLO


%DVHGRQZKDW\RXQRZNQRZDERXWWKHGLIIHUHQFHEHWZHHQORFDO
DQG5HPRWHFOLHQWLQWHUIDFHVGHFLGHLIWKHIROORZLQJVWDWHPHQWV
DUHWUXHRUIDOVH<RX¶OOKDYHWRPDNHVRPHLQIHUHQFHVDQGVPDUW
JXHVVHVIRUVRPHRIWKHP

6HOHFWDOOWKDWDUHWUXH

R7KHRQO\ZD\WRUHPRYHDORFDOVHVVLRQEHDQLVWKURXJKWKHFRPSRQHQWLQWHUIDFH
R(QWLW\EHDQVFDQEHUHPRYHGWKURXJKDORFDOKRPHLQWHUIDFH
R,I\RXVHHDQLV,GHQWLFDO FDOOWKLVPXVWEHDORFDOEHDQ
R,I\RXVHHDJHW+DQGOH FDOOWKLVPXVWEHD5HPRWHEHDQ
R,IWKHFOLHQWLVFDWFKLQJD5HPRWH([FHSWLRQRQDKRPHPHWKRGWKHEHDQ¶VKRPH
LQWHUIDFHPXVWH[WHQG(-%/RFDO+RPH

R,IWKHFOLHQWLVQRWKDQGOLQJD5HPRWH([FHSWLRQRQDEXVLQHVVPHWKRGWKHEHDQ¶V
FRPSRQHQWLQWHUIDFHPXVWH[WHQG(-%2EMHFW

R,I\RXVHHDFDOOWRJHW(-%0HWD'DWD WKHEHDQ¶VFRPSRQHQWLQWHUIDFHPXVWH[WHQG
(-%/RFDO2EMHFW

R,I\RXGRD-1',ORRNXSRQDORFDOKRPH\RXPXVWQDUURZWKHREMHFWUHWXUQHGIURP-1',
R7KHUHDUHWKUHHPHWKRGVLQWKH(-%/RFDO2EMHFWLQWHUIDFH
R7KHUHDUHWZRPHWKRGVLQWKH(-%/RFDO+RPHLQWHUIDFH

\RXDUHKHUH 
ORFDOLQWHUIDFHV

?ZQ\QVO\PMTWKITKTQMV\QV\MZNIKM[
.OWTHATWEVECOVEREDWHATTHECLIENTSEESINALOCALINTERFACE LETSLOOKAT
YOURRESPONSIBILITYASA"EAN0ROVIDER)NOTHERWORDS WHATYOUHAVETODOTO
WRITETHELOCALINTERFACESFORYOURBEAN

&RPSRQHQWLQWHUIDFH
ocalObject
SDFNDJHKHDG¿UVW extend EJBLJBObject
LPSRUWMDYD[HME  instead of E
SXEOLFLQWHUIDFH$GYLFH/RFDOH[WHQGV(-%/RFDO2EMHFW^
SXEOLF6WULQJJHW$GYLFH 
No RemoteExce
`
this return type doesnÕt need to be RMI- ption!!
IIOP compliant (although it certainly can
be, of course, like String)
+RPHLQWHUIDFH
ocalHome
SDFNDJHKHDG¿UVW extend EJBLJBHome
LPSRUWMDYD[HME  instead of E
SXEOLFLQWHUIDFH$GYLFH+RPH/RFDOH[WHQGV(-%/RFDO+RPH^
SXEOLF$GYLFH/RFDOFUHDWH WKURZV&UHDWH([FHSWLRQ
`
This MUST be the loc
al component interface ! still needs a CreateException
but no RemoteException

5XOHVIRUORFDOLQWHUIDFHV
 ,PSRUWMDYD[HME  RUXVHIXOO\TXDOL¿HGQDPHV 

 ([WHQG(-%/RFDO2EMHFW IRUWKHFRPSRQHQWLQWHUIDFH RU


(-%/RFDO+RPH IRUWKHKRPHLQWHUIDFH 

 'HFODUHRQHRUPRUHEXVLQHVVPHWKRGVLQWKHFRPSRQHQWLQWHUIDFH

 $OOFUHDWHPHWKRGVLQWKHORFDOKRPHPXVWUHWXUQWKHORFDOFRPSRQHQWLQWHUIDFH
DQGGHFODUHD&UHDWH([FHSWLRQ

 $Q\PHWKRG\RXGHFODUHLQWKHKRPHRUFRPSRQHQWLQWHUIDFHFDQGHFODUH\RXU
RZQDSSOLFDWLRQH[FHSWLRQVZKLFKPXVWEHFRPSLOHUFKHFNHGH[FHSWLRQV LH
QRWVXEFODVVHVRI5XQWLPH([FHSWLRQ 

 <RXPXVW127GHFODUHD5HPRWH([FHSWLRQIRUDQ\PHWKRGV

 &KDSWHU
WKHFOLHQWYLHZ

AW]KIVPI^MJW\PI:MUW\M
IVLTWKITKTQMV\^QM_NWZIJMIV
J]\aW]XZWJIJTa_WV¼\ <RXFDQ·WPL[ORFDODQG
7EMENTIONEDEARLIERTHATLOCALINTERFACESARE 5HPRWHLQWHUIDFHVWRJHWKHU
AVERYSPECIALCASEFORACLIENTVIEW4HEYWERE
INTRODUCEDWITHVERSIONOFTHE%*"SPECWHICH IRUWKHVDPHEHDQHYHQ
THISBOOKISBASEDON ANDTHEORIGINALINTENTWAS
TOSUPPORTCONTAINER MANAGEDRELATIONSHIPSIN WKRXJKDJLYHQEHDQFDQ
ENTITYBEANS"UTENOUGHCUSTOMERSANDVENDORS
ASKEDFORTHEABILITYTOHAVENON 2EMOTEINTERFACES H[SRVHERWKD5HPRWHDQG
FORBEANS SOTHE*%%TEAMDECIDEDTOMAKEIT
AVAILABLEFORSESSIONBEANSASWELLASENTITYBEANS ORFDOFOLHQWYLHZ
"UTREGARDLESSOFWHICHYOUCHOOSE ITSVERY
UNLIKELYYOULLHAVEADESIGNTHATREQUIRESBOTH
ALOCALAND2EMOTECLIENTVIEW)FYOURBEANISIN
%XWD5HPRWHKRPHZLOOJLYH
ACONTAINER MANAGEDRELATIONSHIPWITHANOTHER
ENTITYBEANYOULLLEARNALLABOUTTHISINTHEENTITY
RXWRQO\5HPRWHFRPSRQHQW
CHAPTERS YOUHAVENOCHOICE4HEBEANMUST
EXPOSEITSELFLOCALLY!NDINTHATCASE ITSALMOST
LQWHUIDFHUHIHUHQFHV VWXEV 
IMPOSSIBLETOTHINKOFAREASONTOALSOHAVETHAT
SAMEBEANEXPOSEDTO2EMOTECLIENTSFOROTHER
DQGDORFDOKRPHZLOOJLYH
PURPOSES RXWRQO\ORFDOFRPSRQHQW
*USTKNOWTHATITISLEGALTOHAVEBOTH
"UTYOUCANNEVER EVER EVERMIXANDMATCH
LQWHUIDFHUHIHUHQFHV
!2EMOTEHOMEINTERFACECANGIVEOUTONLY2EMOTE UHJXODU-DYDUHIHUHQFHV 
COMPONENTINTERFACEREFERENCESINOTHERWORDS A
STUBTOTHE2EMOTE%*"/BJECT !LOCALHOMECAN
GIVEOUTONLYLOCALCOMPONENTINTERFACEREFERENCES
INOTHERWORDS AREGULAR*AVAHEAPREFERENCETO
THE%*",OCAL/BJECT 

\RXDUHKHUH 
ORFDOFOLHQWV

6KDUSHQ \RXU SHQFLO


&KDQJHWKH$GYLFH&OLHQWIURPD5HPRWHFOLHQWWRDORFDOFOLHQW
XVLQJWKHORFDOLQWHUIDFHVIRU$GYLFH/RFDODQG$GYLFH+RPH/RFDO
'R127WXUQWKHQH[WSDJH
LPSRUWMDYD[QDPLQJ 
LPSRUWMDYDUPL 
LPSRUWMDYD[UPL 
LPSRUWKHDG¿UVW 
LPSRUWMDYD[HME 

SXEOLFFODVV$GYLFH&OLHQW^

SXEOLFVWDWLFYRLGPDLQ 6WULQJ>@DUJV ^
QHZ$GYLFH&OLHQW JR 
`

SXEOLFYRLGJR ^
WU\^
&RQWH[WLF QHZ,QLWLDO&RQWH[W 
2EMHFWR LFORRNXS ³$GYLVRU´ 

$GYLFH+RPHKRPH  $GYLFH+RPH 3RUWDEOH5HPRWH2EMHFWQDUURZ R$GYLFH+RPHFODVV 

$GYLFHDGYLVRU KRPHFUHDWH 
6\VWHPRXWSULQWOQ DGYLVRUJHW$GYLFH 
`FDWFK ([FHSWLRQH[ ^
H[SULQW6WDFN7UDFH 
`
`
`
:KDWKDVWRFKDQJH":ULWHWKHFKDQJHGOLQH RUOLQHV EHORZ

 &KDSWHU
WKHFOLHQWYLHZ

-`KMX\QWV[QVKTQMV\QV\MZNIKM["_PI\\PMKTQMV\UQOP\OM\
!2EMOTEINTERFACEMUSTHAVE2EMOTE%XCEPTIONDECLAREDONEVERYMETHOD4HATMEANSTHE
CLIENTUSINGA2EMOTEINTERFACEMUSTDEALWITH2EMOTE%XCEPTIONFOREVERY2EMOTEMETHODCALL
"UTLOCALINTERFACESDONTHAVETHATRESTRICTION4HEONLYMETHODSINALOCALCLIENTINTERFACETHAT
MUSTDECLAREEXCEPTIONSARETHECREATE ANDREMOVE METHODSFORSESSIONBEANSENTITYBEANS
ALSOHAVEAlNDERMETHODTHATDECLARESA&INDER%XCEPTION 
7EHAVEAWHOLECHAPTERDEVOTEDTOEXCEPTIONSIN%*" SOWEWONTGOINTOTHEDETAILSNOW BUT
THEESSENCEISTHISIFABEANORTHE#ONTAINER GENERATESARUNTIMEEXCEPTION 2EMOTECLIENTSSEE
THEEXCEPTIONASACHECKED2EMOTE%XCEPTION BUTLOCALCLIENTSSEEITASANUNCHECKED%*"%XCEPTION
)NADDITIONTOWHATEVEROTHERCHECKEDEXCEPTIONSCALLEDAPPLICATIONEXCEPTIONSIN%*" THE
INTERFACEMETHODSDECLARE ALL2EMOTEINTERFACEMETHODSCANTHROWA2EMOTE%XCEPTIONAND
LOCALCLIENTINTERFACEMETHODSCANALWAYSTHROWAN%*"%XCEPTION3O2EMOTECLIENTSMUSTWRAPALL
CALLSTOAHOMEORCOMPONENTINTERFACEMETHODINATRYCATCH WHILELOCALCLIENTSUSEATRYCATCH
ONLYIFTHEINTERFACEMETHODDECLARESANAPPLICATIONEXCEPTIONWHICHINCLUDES#REATE%XCEPTION
2EMOVE%XCEPTION &INDER%XCEPTION ANDANYOTHEREXCEPTIONSTHE"EAN0ROVIDERDECLARESINTHE
METHODSOFTHEBEANSCLIENTINTERFACES 

 LNDICATESACOMPILER CHECKEDEXCEPTIONIENON 2UNTIME%XCEPTION

5(027(FOLHQWYLHZ /2&$/FOLHQWYLHZ

$//PHWKRGV MDYD[HME5HPRWH([FHSWLRQ MDYD[HME(-%([FHSWLRQ

&5($7(PHWKRGV MDYD[HME5HPRWH([FHSWLRQ MDYD[HME(-%([FHSWLRQ


MDYD[HME&UHDWH([FHSWLRQ MDYD[HME&UHDWH([FHSWLRQ

5(029(PHWKRGV MDYD[HME5HPRWH([FHSWLRQ MDYD[HME(-%([FHSWLRQ


MDYD[HME5HPRYH([FHSWLRQ MDYD[HME5HPRYH([FHSWLRQ

\RXDUHKHUH 
ORFDOFOLHQWV

4WKITKTQMV\KWLM
#OMPARETHISTOTHECODEMODIlCATIONSYOUMADEONTHEPREVIOUSSHARPEN
4OHELPSHOWTHATTHECALLSTOTHEHOMEANDCOMPONENTINTERFACEARENO
LONGER2EMOTE WEVEMADETHEEXCEPTIONHANDLINGMORElNE GRAINED.OTICE
THATWERENOTCATCHINGA2EMOTE%XCEPTION

LPSRUWMDYD[QDPLQJ 
LPSRUWKHDG¿UVW  we got rid of javax.rmi and
LPSRUWMDYD[HME  java.rmi imports
SXEOLFFODVV$GYLFH/RFDO&OLHQW^

SXEOLFVWDWLFYRLGPDLQ 6WULQJ>@DUJV ^
QHZ$GYLFH/RFDO&OLHQW JR 
`

SXEOLFYRLGJR ^
okup the
2EMHFWR QXOO
ug h J N D I, and do the loa real
to go thro ference to
WU\^ You still have ly this time you get a cere of EJBLocalHome),
usual way, onon the heap (an instan Home object..
&RQWH[WLF QHZ,QLWLDO&RQWH[W  Java object a stub to a Remote EJB
R LFORRNXS ³$GYLVRU/RFDO´  instead of
`FDWFK 1DPLQJ([FHSWLRQQH[ ^
QH[SULQW6WDFN7UDFH 
`
HereÕs a big ch
old cast (we stan ge! No narrowing!

Just a pl
return type of lo have to cast because the ain
ill
$GYLFH+RPH/RFDOKRPH  $GYLFH+RPH/RFDO R
have to narrow it okup is Object, but we donÕt
$GYLFH/RFDODGYLVRU QXOO
since it isnÕt a st
WU\^ ub.)

DGYLVRU KRPHFUHDWH 
od still declares a ception
The create() methbu not a RemoteEx
CreateException, t
`FDWFK &UHDWH([FHSWLRQFH[ ^
FH[SULQW6WDFN7UDFH 
`

6\VWHPRXWSULQWOQ DGYLVRUJHW$GYLFH  The busines


 method calls. method call is no longer
` and since get Just a normal local met a Remote
` excpetions, t Advice() doesnÕt decla hod call,
have to be w he business method callre any
rapped in a t
ry/catch. doesnÕt

 &KDSWHU
WKHFOLHQWYLHZ

YiX`e
gfn\i

?PI\PI[\WKPIVOMQV[QLM\PMJMIVKTI[['
7EVESEENHOWTHEINTERFACESCHANGE ANDHOWTHECLIENTCODEHASTO
CHANGE WHENYOUGOFROMA2EMOTETOLOCALCLIENTVIEW"UTWHATABOUTTHE
BEANCLASSITSELF7HATDOYOUTHINK$OESTHEBEANCODENEEDTOCHANGE
IFYOUREGOINGTODEPLOYITWITHALOCALCLIENTVIEWINSTEADOFA2EMOTECLIENT
VIEW7HATIFYOUPLANTODEPLOYITWITHBOTHALOCALAND2EMOTECLIENTVIEW
&ORNOW LETSASSUMETHATTHEONLYMETHODTHATMATTERSISTHEBEANS
BUSINESSMETHOD(ERESHOWITLOOKSINTHEORIGINALBEANCLASS

SXEOLF6WULQJJHW$GYLFH ^
6\VWHPRXWSULQWOQ ³LQJHWDGYLFH´ 
LQWUDQGRP  LQW  0DWKUDQGRP  DGYLFH6WULQJVOHQJWK 
UHWXUQDGYLFH6WULQJV>UDQGRP@
`

$OYOUSEEANYTHINGINTHATMETHODTHATLOOKSSPECIlCTOA2EMOTECLIENT
VIEW7OULDYOUNEEDTODOANYTHINGDIFFERENTWITHALOCALCLIENT
.O DONTTHINKSO
!NYTHINGTHATWORKSASARETURNTYPEORARGUMENTFORA2EMOTEMETHODIS
GUARANTEEDTOWORKFORALOCALMETHODASWELL SOWERE/+THERE+IND
OFANO BRAINERWHENTHERETURNTYPEIS3TRING THOUGH /+ THEREISONE
EXCEPTIONˆREMEMBER ACCORDINGTO"EANLAWYOUMUSTNOTRETURNABEANS
2EMOTEINTERFACEFROMALOCALINTERFACEMETHOD
3OITLOOKSLIKEATLEASTWITHTHISBEAN WESHOULDNEVERHAVETOKNOWOR
CARE7ESHOULDBEABLETODEPLOYTHEBEANASWRITTEN ANDTHEBEANSHOULD
BEKEPTUNAWAREOFWHETHERITSCLIENTSARE2EMOTEORLOCAL
3OUNDSGOOD DOESNTIT3IMPLE CLEAN OBJECT ORIENTED
"UTTHINKABOUTITSOMEMORE)MAGINEABEANWITHMORECOMPLEXLOGIC
-OREBUSINESSMETHODS!RGUMENTSTOTHOSEMETHODS!RGUMENTSTHE
METHODMIGHTEVENNEEDTOACTON
(MMMMMCANYOUTHINKOFANYTHINGTHATTHEBEANMIGHTWANTTOTREAT
DIFFERENTLY IFITKNEWTHECLIENTWERELOCALINSTEADOF2EMOTE

\RXDUHKHUH 
SDVVLQJREMHFWVORFDOO\

:DLWDPLQXWH-DYD
SDVVHVREMHFWVORFDOO\E\SDVVLQJ
DFRS\RIWKHREMHFWUHIHUHQFHQRW
WKHREMHFWLWVHOI%XWZHNQRZWKDW
5HPRWHPHWKRGDUJXPHQWVDQGUHWXUQ
YDOXHVDUHSDVVHGDVD6HULDOL]HG
FRS\RIWKHDFWXDOREMHFW

,QRUGLQDU\ORFDOPHWKRGFDOOV-DYDSDVVHV
DQREMHFWUHIHUHQFHE\YDOXHDVDFRS\RIWKH
UHIHUHQFHYDULDEOH

7KHREMHFWLWVHOILVQHYHUSDVVHG

%XWZLWK5HPRWHFDOOVWKHREMHFWLWVHOILVFRSLHG

:LWK5HPRWHFDOOVWKHFDOOHGPHWKRGLVDOZD\V
ZRUNLQJRQDFRS\RIWKHFDOOHU¶VREMHFW

:LWKORFDOFDOOVWKHFDOOHGPHWKRGLVDOZD\VZRUNLQJ
ZLWKWKHFDOOHU¶VRULJLQDOREMHFW²QRWDFRS\

 &KDSWHU
WKHFOLHQWYLHZ

)ZO]UMV\[\W:MUW\M^[TWKITUM\PWL[

/2&$/PHWKRGFDOO
'RJ
'RJ¿GR QHZ'RJ  REMHFW
WKLVWUDLQ3HW ¿GR 
^a\g
%()25(GRJ
a copy of the reference 'RJ UHIHUHQFH
(the remote control) not
the Dog object

YRLGWUDLQ3HW 'RJDUJ ^` 'RJ


REMHFW

r and the ÔÞdoÕ Yj_


Now the ÔargÕ paramel te pies. Both
variable are identicaDco
^a\g
'RJ
object. %()25(GRJ
reference the same og 'RJ UHIHUHQFHV

5(027(PHWKRGFDOO

'RJ¿GR QHZ'RJ 
UHPRWH6WXEWUDLQ3HW ¿GR 
'RJ
!
NOT the reference value REMHFW
'RJ
ItÕs a serialized copyctof
the actual Dog obje
REMHFW
^a\g
%()25(GRJ
'RJ UHIHUHQFH

py
YRLGWUDLQ3HW 'RJDUJ ^` The server Dog is a co
of the clien t D og

'RJ 'RJ
REMHFW REMHFW

^a\g Yj_

'RJ $)7(5GRJV
&OLHQW 'RJ
UHIHUHQFHV 6HUYHU

\RXDUHKHUH 
5HPRWHYVORFDO

WKHUH DUH QR
'XPE 4XHVWLRQV
Q: 3O )MSTILLNOTCLEARIFTHE
THEBEANNEVERHASTOWORRYTHATA
LOCALCLIENTMIGHTBEMODIFYINGTHE
!NDALOCALCLIENTWONTHAVECODE
TOHANDLETHE2EMOTE%XCEPTIONSOR
BEAN-534ALWAYSKNOWIFTHECLIENT BEANSOBJECT NARROWTHESTUBS
IS2EMOTEORLOCAL 4HEBOTTOMLINEISTHATDEPLOYINGA
Q: 4HENITSJUSTABOUT
BEANWITHA2EMOTEVSLOCALCLIENT
A: )TSNOTTHATTHEBEANMUST ARGUMENTSANDRETURNVALUES)S
THEREANYOTHERREASONYOUCOULDNT
VIEWISA"IG$EAL)TSACOMMITMENT
4HECLIENTHASTOKNOWINADVANCE
BUTRATHERTHATTHEBEANMIGHTHAVE
DEPLOYABEANANDMAKETHE
TOKNOW)FITMATTERSTHATTHEBEAN
ISWORKINGONATHECALLERSOBJECT
VIAACOPYOFTHECALLERSREFERENCE
DECISIONFOR2EMOTEVSLOCALVIEWAT
DEPLOYTIME
Q: #ANYOUGETAROUNDTHISBY
DECLARINGYOUR2EMOTE%XCEPTIONS
ASOPPOSEDTOACOPYOFTHECALLERS ONYOURLOCALINTERFACE!NDCOULD
OBJECT YOURBEANCODEMIGHTHAVE
TOCHANGE!NDTHATGOESFORRETURN A: 4HEREISANOTHERREASON4HE
YOUMAKEANINTERFACETHATISBOTH
2EMOTEANDLOCALBYHAVING
VALUESTOO)FITMATTERSTHATTHECALLING CLIENTCODE%VENIFTHEBEANDOESNT YOURCOMPONENTINTERFACELIKE
METHODGETSBACKACOPYOFAREFER NEEDTOKNOWHOWITSCLIENTIS !DVICE EXTENDBOTH2EMOTEAND
ENCEVSACOPYOFANOBJECT THEBEAN ACCESSINGIT THECLIENTMUSTKNOW! %*",OCAL/BJECT7HATSTHEHARM
CODEMIGHTHAVETOCHANGE CLIENTWRITTENTOACCESSABEANLOCALLY IFTHECLIENTSIMPLYALWAYSHANDLES
WOULDNTWORKIFTHEBEANS2EMOTE 2EMOTE%XCEPTIONS ANDALWAYSDOES
CLIENTINTERFACES ANDVICE VERSA
THENARROW 4HATWAYTHECLIENT

Q: "UT)THOUGHTTHATCHOOSINGTO Q: 7HYNOT
SHOULDNTHAVETOKNOW

DEPLOYABEANWITHLOCALVS2EMOTE
CLIENTVIEWSWASJUSTAMATTEROF A: 3TILLWONTWORK&ORONETHING
SWITCHINGASWITCHATDEPLOYTIME A: 4HECLIENTMUSTKNOWIN ACCORDINGTOBEANLAW YOURENOT
ALLOWEDTODECLARE2EMOTE%XCEPTIONS
ADVANCEWHETHERITSACCESSINGA
A: ./././,ETSIMAGINETHAT
BEANS2EMOTEORLOCALCLIENTVIEW
BECAUSETHEINTERFACESTHEMSELVES
ONLOCALMETHODS3OTHERESNO
GUARANTEETHATYOURSERVERWOULD
YOUDIDWRITETWOSETSOFINTERFACES AREDIFFERENT0OLYMORPHICALLY YOU EVENLETYOUDEPLOYABEANWITH
ONEFORALOCALCLIENTVIEWANDONE CANTUSETHE2EMOTEANDLOCAL ALOCALINTERFACETHATDECLARES
FORA2EMOTECLIENTVIEW)TISTRUE VIEWSINTERCHANGEABLY BECAUSETHE 2EMOTE%XCEPTIONS!NDTHEREISNO
THATATDEPLOYMENTYOUCOULDDECIDE INTERFACESTHEMSELVESAREDIFFERENT GUARANTEETHATTHENARROW METHOD
WHICHOFTHETWOVIEWSYOUWANTEDTO WOULDNOTCAUSEPROBLEMS!NDTHEN
EXPOSEORBOTH "UTTHATWORKSONLY 4HERESNOWAYTHECLIENTCANBE THEREAREHANDLESANDALLTHATOTHER
IFTHEBEANCODEDOESNTCAREWHERE KEPTBLISSFULLYIGNORANT
BECAUSE STUFF9OUNEEDTOJUSTLETTHISGO
THECLIENTIS!BEANMETHODWITHNO THEBEHAVIOROFTHEBEANISDIFFERENT
ARGUMENTSORRETURNVALUESMIGHTBE 2EMEMBER A2EMOTECLIENTMUST
SAFEREGARDLESSOFHOWTHECLIENTIS HANDLE2EMOTE%XCEPTIONS AND
ACCESSINGIT NARROWTHE2EMOTESTUBCOMINGBACK
FROMTHELOOKUP!NDA2EMOTECLIENT
/NESOLUTIONMIGHTBETOWRITETHE ISEXPOSEDTOMETHODSINTHEBEANS
BEANCODEASSUMINGTHEBEANIS CLIENTINTERFACESˆMETHODSTHAT
ALWAYSGETTINGACOPY ANDTHENIFTHE DONTEXISTINTHELOCALINTERFACES3OA
CLIENTISLOCAL HAVETHECLIENTMAKE 2EMOTECLIENTMIGHT FOREXAMPLE TRY
ACOPYCLONE OFTHEOBJECTBEFORE TOCALLAGET(ANDLE METHODONTHE
PASSINGIT/R FORRETURNVALUES YOU LOCALCOMPONENTINTERFACE AMETHOD
MIGHTALWAYSHAVETHEBEANMAKEA CALLTHATWOULDNEVERWORK
COPYBEFOREHANDINGITBACK4HATWAY

 &KDSWHU
WKHFOLHQWYLHZ

%(WKH&RQWDLQHU
(DFKRIWKHFRGHVQLSSHWVRQWKLVSDJHUHSUHVHQWVFRGHIURPHLWKHU
DQLQWHUIDFHRUDFOLHQW<RXUMRELVWRSOD\&RQWDLQHUDQGGHFLGH
([HUFLVH ZKHWKHUHDFKLVOHJDODFFRUGLQJWRERWK-DYDODZDQG%HDQ
ODZ,QRWKHUZRUGVHYHQLIWKHFRGHFRPSLOHVLWPLJKWVWLOOEH
:521*WRWKH&RQWDLQHUEHFDXVHLWGRHVQ·WFRPSO\ZLWKWKH
UXOHVRIWKH(-%VSHF$VVXPHWKDWHYHU\WKLQJ\RXGR127VHHLV
OHJDODQGFRUUHFW)LJXUHRXWLIWKHSUREOHPLVDFRPSLOHUHUURURUD
SUREOHPWRWKH&RQWDLQHUDQGILJXUHRXWKRZWRIL[LW

$,QDORFDOFOLHQW %,QD5HPRWHFOLHQW
SXEOLFYRLGJR ^ SXEOLFYRLGJR ^
2EMHFWR QXOO WU\^
WU\^ ORRNXSWKH$GYLFHEHDQDVVLJQLW
WRDGYLVRU
&RQWH[WLF QHZ,QLWLDO&RQWH[W  `FDWFK ([FHSWLRQH[ ^
R LFORRNXS ³$GYLVRU/RFDO´  H[SULQW6WDFN7UDFH 
`
`FDWFK 1DPLQJ([FHSWLRQQH[ ^ 6\VWHPRXWSULQWOQ DGYLVRUJHW$GYLFH 
QH[SULQW6WDFN7UDFH  `
` 
$GYLFH+RPH/RFDOKRPH  $GYLFH+RPH/RFDO R
$GYLFH/RFDODGYLVRU QXOO
PRUHVWXII
`

&,QDEHDQ·VKRPHLQWHUIDFH
SDFNDJHKHDG¿UVW
LPSRUWMDYD[HME 
SXEOLFLQWHUIDFH$GYLFH+RPHH[WHQGV(-%+RPH^
SXEOLF$GYLFHFUHDWH WKURZV&UHDWH([FHSWLRQ
`

',QDEHDQ·VFRPSRQHQWLQWHUIDFH
SDFNDJHKHDG¿UVW
LPSRUWMDYD[HME 
SXEOLFLQWHUIDFH$GYLFH/RFDOH[WHQGV(-%/RFDO2EMHFW^
SXEOLF6WULQJJHW$GYLFH 
`

\RXDUHKHUH 
ORFDOLQWHUIDFHV

:MDD=LHGAFLK

ƒ <RXFDQH[SRVH\RXUEHDQWRORFDOFOLHQWVXVLQJDORFDOFOLHQWYLHZ
ƒ /RFDOFRPSRQHQWLQWHUIDFHVPXVWH[WHQGMDYD[HME(-%/RFDO2EMHFW
/RFDOKRPHLQWHUIDFHVPXVWH[WHQGMDYD[HME(-%/RFDO+RPH
ƒ 0HWKRGVLQORFDOFOLHQWLQWHUIDFHVGR127GHFODUH
<RXKDYHWR
UHFRJQL]HD
5HPRWH([FHSWLRQ :DWFKLW ORFDOYV5HPRWH
FOLHQWYLHZ
ƒ 6RPHRIWKHLQWHUIDFHPHWKRGVH[SRVHGWR5HPRWHFOLHQWVDUHQRW
H[SRVHGWRORFDOFOLHQWV QFRGH
%HSUHSDUHGWRORRNDWEHD
RGH RU LQW HUID FH FRG HDQG
ƒ /RFDOFOLHQWVFDQQRWJHWKDQGOHVVLQFHKDQGOHVDUHXVHGWRUH FOLHQWF
ORR NLQ JD WD
NQRZZKHWKHU\RX¶UH
HVWDEOLVKDFRQQHFWLRQWRWKH5HPRWHREMHFW FDO FOLH QWY LHZ 
5HPRWHRUOR
ƒ (-%0HWD'DWDLVQRWXVHGZLWKORFDOFOLHQWVVLQFHDORFDOFOLHQWFDQ $QGLWPLJKWEHVXEWOH
HWKH
XVHUHIOHFWLRQWRLQWHUURJDWHWKH(-%REMHFWDQG+RPHREMHFW )RUH[DPSOH\RXPLJKWVH
DE XVL QHV VP HWK RGFDOO
FOLHQWPDNH
PH WKR G
ƒ /RFDOKRPHLQWHUIDFHVKDYHRQO\RQHUHPRYH PHWKRG³WKHRQH DQGWKHDUJXPHQWWRWKH
EOH RE MHF W6 LQF H
WKDWWDNHVDSULPDU\NH\7KHUHPRYH WKDWWDNHVD+DQGOHGRHVQ·W LVDQRQ6HULDOL]D
DVV XP HWK DWW KH PH WKR G
H[LVWLQWKHORFDOKRPHLQWHUIDFHVLQFH+DQGOHVDUHQ·WXVHGZLWKD \RXDUHWR
.1 2: 
ORFDOFOLHQWYLHZ LVOHJDODQGFRUUHFW\RX
WHUIDFH²
WKDWWKLVPXVWEHDORFDOLQ
SDV VD QR Q6 HULD OL]DEOH
ƒ %HFDXVHWKHRQO\UHPRYH LQWKHORFDOKRPHLQWHUIDFHUHTXLUHVD \RXFDQ¶W
RU UHWX UQ
SULPDU\NH\DUJXPHQWORFDOVHVVLRQEHDQFOLHQWVFDQQRWUHPRYH REMHFWDVDQDUJXPHQW
PD 5H PR WHP HWK RG
DEHDQXVLQJWKHEHDQ·VKRPHWKH\FDQFDOOUHPRYH RQO\RQWKH YDOXHWRRUIUR
KHU JR WFK DV WRW HOO\RX 
6RPHR IRW
EHDQ·VFRPSRQHQWLQWHUIDFH ZKHWKHUWKHEHDQLVORF DOR U5 H

ƒ (-%/RFDO+RPHKDVRQO\RQHPHWKRGUHPRYH WKDWWDNHVD PRWHLQFOXGH


KH+RPH
SULPDU\NH\EHFDXVHWKHJHW+RPH+DQGOH JHW(-%0HWD'DWD  &OLHQWGRHVQ¶WQDUURZW
OHD Q\
&OLHQWGRHVQ¶WKDQG
DQGUHPRYH +DQGOH PHWKRGVWKDWDUHLQ(-%+RPHGRQ·WDSSO\WRD SWLR QV RQ DE XVLQHVV
FKHFNHGH[FH
ORFDOFOLHQWYLHZ PH WKRGF DOO
QGOH RQ
ƒ 7KHRQO\PHWKRGLQ(-%2EMHFWWKDWLVQRWDOVRLQ(-%/RFDO2EMHFWLV &OLHQWFDOOVUHPRYH +D
DEHDQ¶VK RP H
JHW+DQGOH 
ƒ $UJXPHQWVDQGUHWXUQYDOXHVDUHSDVVHGE\YDOXHZKHQXVLQJD
ORFDOFOLHQWYLHZ,QRWKHUZRUGVWKH\·UHSDVVHGLQWKHQRUPDO-DYD
ZD\ REMHFWVSDVVHGE\DFRS\RIWKHUHIHUHQFHSULPLWLYHVSDVVHG
E\DFRS\RIWKHYDOXH 
ƒ /RFDOFOLHQWVGRQRWQHHGWRQDUURZWKH+RPHUHIHUHQFHEHFDXVH
LW·VDQRUPDO-DYDUHIHUHQFHQRWDVWXEWRD5HPRWHREMHFW
ƒ /RFDOFOLHQWVGRQRWQHHGWRFDWFK5HPRWH([FHSWLRQVVLQFHORFDO
LQWHUIDFHPHWKRGVGRQ·WGHFODUH5HPRWH([FHSWLRQV

 &KDSWHU
WKHFOLHQWYLHZ

([HUFLVH %(WKH&RQWDLQHU
6ROXWLRQV

$,QDORFDOFOLHQW %,QD5HPRWHFOLHQW
SXEOLFYRLGJR ^ SXEOLFYRLGJR ^
2EMHFWR QXOO WU\^
WU\^ ORRNXSWKH$GYLFHEHDQDVVLJQ
LWWRDGYLVRU
&RQWH[WLF QHZ,QLWLDO&RQWH[W  `FDWFK ([FHSWLRQH[ ^
R LFORRNXS ³$GYLVRU/RFDO´  H[SULQW6WDFN7UDFH 
`
`FDWFK 1DPLQJ([FHSWLRQQH[ ^ 6\VWHPRXWSULQWOQ DGYLVRUJHW$GYLFH 
QH[SULQW6WDFN7UDFH  `
` 
$GYLFH+RPH/RFDOKRPH  $GYLFH+RPH/RFDO R
emote
dvice() is a r
$GYLFH/RFDODGYLVRU QXOO
PRUHVWXII r r o r ! g e t A
` Compiler e t it isnÕt handling the e last line
A is Þne. Because itÕs local, it method, bu eption. If we moved th ork.
does not need to narrow the Ho
me RemoteExce try block, it would w
reference. Only a cast is needed
. INSIDE th

Container error! EJBHome is a Remote


interface, and the rule is that you must declare
&,QDEHDQ·VKRPHLQWHUIDFH RemoteException on each method in the interface.
The compiler doesnÕt care, but the Container will.
SDFNDJHKHDG¿UVW At some point in the deploy process, this will fail.
LPSRUWMDYD[HME 
SXEOLFLQWHUIDFH$GYLFH+RPHH[WHQGV(-%+RPH^
SXEOLF$GYLFHFUHDWH WKURZV&UHDWH([FHSWLRQ needs RemoteException
` (look at the imports; no java.rmi.*)

',QDEHDQ·VFRPSRQHQWLQWHUIDFH
a local
D works Þne.. ItÕsace, and it SDFNDJHKHDG¿UVW
component interfdeclare any LPSRUWMDYD[HME 
doesnÕt need to e business SXEOLFLQWHUIDFH$GYLFH/RFDOH[WHQGV(-%/RFDO2EMHFW^
exceptions on th
methods. SXEOLF6WULQJJHW$GYLFH  OK, needs no exceptions declared
`
\RXDUHKHUH 
FRIIHHFUDPPRFNH[DP

0RFN([DP
7HICHCAPABILITIESAREPROVIDEDBYBOTHREMOTEANDLOCALHOMEINTERFACESFOR
1 SESSIONBEANS#HOOSEALLTHATAPPLY
R! #REATINGASESSIONOBJECT
R" 2EMOVINGASESSIONOBJECT
R# 'ETTINGASESSIONOBJECTS%*"-ETA$ATA
R$ 'ETTINGASESSIONOBJECTSHANDLE

7HENLOCATINGASESSIONBEANSREMOTEHOMEINTERFACE WHICHARESTEPSTHAT
2 MUSTOCCURTOCREATEAVALIDHOMEINTERFACEREFERENCE#HOOSEALLTHAT
APPLY
R! 4HESESSIONCONTEXTMUSTBENARROWED ANDTHENARROWEDRESULTCAST
R" 4HERESULTOFTHE*.$)LOOKUPMUSTBENARROWED ANDTHENARROWED
RESULTCAST
R# 4HEINITIALCONTEXTMUSTBENARROWED ANDTHENARROWEDRESULTCAST
R$4HERESULTOFTHE*.$)LOOKUPMUSTBECASTTOANINITIALCONTEXT AND
THENNARROWED

'IVENAREMOTECLIENT@2 THATHASVALIDREFERENCESTOSESSIONBEANS@!AND@"
3 ANDGIVENTHAT!ISALOCALCLIENTTO" WHICHSTATEMENTSARETRUE#HOOSEALL
THATAPPLY
R! 2CANNOTPASSHISREFERENCEFOR! TO"
R" !CANNOTPASSHISREFERENCEFOR" TO2
R# !CANNOTINVOKEMETHODSON"
R$"CANNOTINVOKEMETHODSON2

 &KDSWHU
WKHFOLHQWYLHZ

7HENCOMPARINGTWOSESSIONOBJECTS WHATISTRUE#HOOSEALLTHATAPPLY
4
R! 5SINGTHEIS)DENTICAL METHOD STATELESSSESSIONBEANSFROMTHESAME
HOMEWILLALWAYSRETURNTRUE
R" 5SINGTHEIS)DENTICAL METHOD STATEFULSESSIONBEANSFROMTHESAME
HOMEWILLALWAYSRETURNTRUE
R# 4HEIS)DENTICAL METHODCANBEUSEDFORONLYREMOTEOBJECT
REFERENCES
R$ 5SINGTHEEQUALS METHOD STATELESSSESSIONBEANSFROMTHESAMEHOME
AREGUARANTEEDTORETURNTRUE
R% 5SINGTHEEQUALS METHOD STATEFULSESSIONBEANSFROMTHESAMEHOME
AREGUARANTEEDTORETURNTRUE

7HICHSTATEMENTS ABOUTSESSIONBEANSARETRUE#HOOSEALLTHATAPPLY
5
R! 4HEBEANPROVIDERMUSTWRITETHEMETHODPUBLICVOIDREMOVE IN
BOTHSTATELESSANDSTATEFULSESSIONCLASSES
R" ,OCALCLIENTSCANREMOVESESSIONBEANSBYCALLINGAMETHODONTHE
BEANSHOME
R# 4HEREMOVE METHODINTHECOMPONENTINTERFACECANBEUSEDONLYBY
REMOTECLIENTS
R$ 4OASKTHE%*"(OMETOREMOVEASESSIONBEAN THECLIENTMUSTPROVIDE
THEBEANSHANDLE

\RXDUHKHUH 
FRIIHHFUDPPRFNH[DP

0RFN([DP$QVZHUV
7HICHCAPABILITIESAREPROVIDEDBYBOTHREMOTEANDLOCALHOMEINTERFACESFOR
1 SESSIONBEANS#HOOSEALLTHATAPPLY nÕt be removed here is
session beanlos cacal home interface becausye ket y
R! #REATINGASESSIONOBJECT through a ove() that takes a primar
R" 2EMOVINGASESSIONOBJECT - only
a rem
R# 'ETTINGASESSIONOBJECTS%*"-ETA$ATA - not in a local home
R$ 'ETTINGASESSIONOBJECTSHANDLE - not in a local home

7HENLOCATINGASESSIONBEANSREMOTEHOMEINTERFACE WHICHARESTEPSTHAT
2 MUSTOCCURTOCREATEAVALIDHOMEINTERFACEREFERENCE#HOOSEALLTHAT
(spec: 57)
APPLY
R! 4HESESSIONCONTEXTMUSTBENARROWED ANDTHENARROWEDRESULTCAST
R" 4HERESULTOFTHE*.$)LOOKUPMUSTBENARROWED ANDTHENARROWED
RESULTCAST
R# 4HEINITIALCONTEXTMUSTBENARROWED ANDTHENARROWEDRESULTCAST
R$4HERESULTOFTHE*.$)LOOKUPMUSTBECASTTOANINITIALCONTEXT AND
THENNARROWED

'IVENAREMOTECLIENT@2 THATHASVALIDREFERENCESTOSESSIONBEANS@!AND@"
3 ANDGIVENTHAT!ISALOCALCLIENTTO" WHICHSTATEMENTSARETRUE#HOOSEALL
THATAPPLY
l
R! 2CANNOTPASSHISREFERENCEFOR! TO" ca nÕ t gi ve a re mote clienta alolocacal
You B through
R" !CANNOTPASSHISREFERENCEFOR" TO2 reference, A sees
reference
R# !CANNOTINVOKEMETHODSON"
R$"CANNOTINVOKEMETHODSON2

 &KDSWHU
WKHFOLHQWYLHZ

4 7HENCOMPARINGTWOSESSIONOBJECTS WHATISTRUE#HOOSEALLTHATAPPLY (spec: 65-66)


R! 5SINGTHEIS)DENTICAL METHOD STATELESSSESSIONBEANSFROMTHESAME
HOMEWILLALWAYSRETURNTRUE
R" 5SINGTHEIS)DENTICAL METHOD STATEFULSESSIONBEANSFROMTHESAME
HOMEWILLALWAYSRETURNTRUE
R# 4HEIS)DENTICAL METHODCANBEUSEDFORONLYREMOTEOBJECT
REFERENCES
of equals()
R$ 5SINGTHEEQUALS METHOD STATELESSSESSIONBEANSFROMTHESAMEHOME The behavior
iÞed
AREGUARANTEEDTORETURNTRUE is not spec
R% 5SINGTHEEQUALS METHOD STATEFULSESSIONBEANSFROMTHESAMEHOME
AREGUARANTEEDTORETURNTRUE

7HICHSTATEMENTS ABOUTSESSIONBEANSARETRUE#HOOSEALLTHATAPPLY
5 ove(), not remov
e( )
R! 4HEBEANPROVIDERMUSTWRITETHEMETHODPUBLICVOIDREMOVE IN- itÕs ejbRem
BOTHSTATELESSANDSTATEFULSESSIONCLASSES
- local homes have only a
R" ,OCALCLIENTSCANREMOVESESSIONBEANSBYCALLINGAMETHODONTHE
remove() that takes a
BEANSHOME primary key
R# 4HEREMOVE METHODINTHECOMPONENTINTERFACECANBEUSEDONLYBY - no,
REMOTECLIENTS
only for local
R$ 4OASKTHE%*"(OMETOREMOVEASESSIONBEAN THECLIENTMUSTPROVIDE
THEBEANSHANDLE
- but not true for EJBLocalHo
me

\RXDUHKHUH 
session bean lifecycle
5
4
4 %HLQJD6HVVLRQ%HDQ

,KDWHLWZKHQ,JHW
FRQWDLQHUFDOOEDFNV,MXVWNQRZ
LW·VJRQQDEHDQHME5HPRYH EXW,
ZDVRQO\MXVWFUHDWHG,ZLVK,ZDV
VWDWHOHVV7KH\ZRQ·WHYHQOHW
PHJRLQWKHSRRO

6HVVLRQEHDQVDUHFUHDWHGDQGUHPRYHG,I\RX¶UHOXFN\\RX¶UHD
VWDWHOHVVEHDQ%HFDXVHWKHOLIHRIDVWDWHIXOEHDQLVWLHGWRWKHZKLPVRIDKHDUWOHVV
FOLHQW6WDWHIXOEHDQVDUHFUHDWHGDWWKHFOLHQW¶VLQVLVWHQFHDQGH[LVWRQO\WRVHUYHWKDW
RQHFOLHQW$VDVWDWHIXOEHDQWKHEHVW\RXFDQKRSHIRULVWKDWWKHFOLHQWFUDVKHVRU
IRUJHWVWRFDOOUHPRYH LWPLJKWWDNHWKH&RQWDLQHUDZKLOHWR¿JXUHRXW\RX¶YHEHFRPH
XVHOHVV%XWDKKKKWKHOLIHRIDVWDWHOHVVEHDQLVIDEXORXV3RROVWKRVHOLWWOHXPEUHOOD
GULQNVDQGQRERUHGRPVLQFH\RXJHWWRPHHWVRPDQ\GLIIHUHQWFOLHQWV2IFRXUVHHYHQ
DVWDWHOHVVEHDQGLHVZLWKDQXQFKHFNHGH[FHSWLRQ

WKLVLVDQHZFKDSWHU 
H[DPREMHFWLYHV

6HVVLRQ%HDQV
2IILFLDO :KDWLWUHDOO\PHDQV
 ,GHQWLI\FRUUHFWDQGLQFRUUHFWVWDWHPHQWVRU 7KLVREMHFWLYHFDQKLW\RXRQDQ\WKLQJUHODWHGWR
H[DPSOHVDERXWVHVVLRQEHDQVLQFOXGLQJ VHVVLRQEHDQVVR\RXSUHWW\PXFKKDYHWRNQRZLW
FRQYHUVDWLRQDOVWDWHWKH6HVVLRQ%HDQ DOOLQFOXGLQJWKHGHWDLOVRIERWKVWDWHOHVVDQGVWDWHIXO
LQWHUIDFHDQGFUHDWHPHWKRGV EHDQOLIHF\FOHVWKHFRQWDLQHUFDOOEDFNPHWKRGV
RI6HVVLRQ%HDQZKDW\RXPXVWZULWHLQDEHDQ
FODVVDQGZKDWDEHDQFDQJHWIURPLWV(-%&RQWH[W
$Q\WKLQJFRYHUHGE\WKHRWKHUVHVVLRQEHDQREMHFWLYHV
LVIDLUJDPH

 ,GHQWLI\WKHXVHRIDQGWKHEHKDYLRURIWKH )LUVW\RXKDYHWRNQRZWKDWSDVVLYDWLRQLVIRURQO\


HME3DVVLYDWHPHWKRGLQDVHVVLRQEHDQ VWDWHIXOVHVVLRQEHDQV6WDWHOHVVEHDQVJREDFNWR
LQFOXGLQJWKHUHVSRQVLELOLWLHVRIERWKWKH WKHEHDQSRROZLWKRXWJRLQJWKURXJKSDVVLYDWLRQ6R
FRQWDLQHUDQGWKHEHDQSURYLGHU HME3DVVLYDWH ZLOOQHYHUEHFDOOHGRQDVWDWHOHVV
EHDQ<RXKDYHWRNQRZWKDW\RXUUHVSRQVLELOLW\LQ
HME3DVVLYDWH LVWRPDNHVXUHWKDWZKHQWKHPHWKRG
HQGV\RXUEHDQLVUHDG\IRUSDVVLYDWLRQDQGWKDW
SDVVLYDWLRQPD\RUPD\QRWLQYROYHVHULDOL]DWLRQ<RX
PXVWNQRZWKHVWDWHWKDW\RXULQVWDQFHYDULDEOHVPXVW
EHLQDWWKHWLPHHME3DVVLYDWH HQGV$QGHYHQWKRXJK
WKLVREMHFWLYHGRHVQ¶WPHQWLRQHME$FWLYDWH \RXKDYH
WRXQGHUVWDQGKRZHME$FWLYDWH ZRUNVDVZHOO

 ,GHQWLI\WKHLQWHUIDFHDQGPHWKRGIRU <RXPXVWEHDEOHWRORRNDWDGHVFULSWLRQRIDGHVLUHG


HDFKRIWKHIROORZLQJUHWULHYHWKHVHVVLRQ EHKDYLRUOLNH¿JXUHRXWWKHVHFXULW\SULQFLSDORIWKH
EHDQ¶VUHPRWHKRPHLQWHUIDFHUHWULHYHWKH FOLHQWDQGNQRZZKLFKPHWKRG\RXFDQFDOODQGRQ
VHVVLRQEHDQ¶VORFDOFRPSRQHQWLQWHUIDFH ZKLFKLQWHUIDFHWRJHWWKDWEHKDYLRU LQWKLVFDVH
GHWHUPLQHLIWKHVHVVLRQEHDQ¶VFDOOHUKDV JHW&DOOHU3ULQFLSDO FDOOHGRQWKH6HVVLRQ&RQWH[W
DSDUWLFXODUUROHDOORZWKHLQVWDQFHWRPDUN LQWHUIDFH 
WKHFXUUHQWWUDQVDFWLRQDVDUROOEDFNUHWULHYH 7RDQVZHUWKHVHTXHVWLRQV\RXKDYHWRNQRZHYHU\
WKH8VHU7UDQVDFWLRQLQWHUIDFHSUHSDUHWKH PHWKRGLQWKHWKUHHNH\LQWHUIDFHV6HVVLRQ%HDQ WKH
LQVWDQFHIRUUHXVHIROORZLQJSDVVLYDWLRQ LQWHUIDFH\RXUEHDQLPSOHPHQWV 6HVVLRQ&RQWH[W
UHOHDVHUHVRXUFHVSULRUWRUHPRYDO WKHLQWHUIDFH\RXUEHDQKDVDUHIHUHQFHWR DQG
LGHQWLI\WKHLQYRNHURIWKHEHDQLQVWDQFH¶V 6HVVLRQ6\QFKURQL]DWLRQ DQRSWLRQDOLQWHUIDFHWKDWD
FRPSRQHQWLQWHUIDFHEHQRWL¿HGWKDWDQHZ VWDWHIXOEHDQFDQLPSOHPHQW 
WUDQVDFWLRQKDVEHJXQEHQRWL¿HGWKDWWKH ,QWKLVFKDSWHUZH¶OOFRYHUHYHU\WKLQJDERXWVHVVLRQ
FXUUHQWWUDQVDFWLRQKDVFRPSOHWHG EHDQLQWHUIDFHVH[FHSW6HVVLRQ6\QFKURQL]DWLRQ
ZKLFKLVFRYHUHGLQWKHWUDQVDFWLRQVFKDSWHU
 &KDSWHU
VHVVLRQEHDQOLIHF\FOH

2EMHFWLYH

6HVVLRQ%HDQV
2IILFLDO :KDWLWUHDOO\PHDQV
 0DWFKFRUUHFWGHVFULSWLRQVDERXWSXUSRVH <RXKDYHWRNQRZWKHGLIIHUHQFHVEHWZHHQVWDWHOHVV
DQGIXQFWLRQZLWKZKLFKVHVVLRQEHDQ DQGVWDWHIXOEHDQVLQFOXGLQJZKHQ\RX¶GFKRRVHRQH
W\SHWKH\DSSO\WRVWDWHOHVVVWDWHIXORU RYHUWKHRWKHU<RXPXVWNQRZWKHEHDQUXOHVLQFOXGLQJ
ERWK WKHUHFDQEHRQO\RQHFUHDWHPHWKRGLQDVWDWHOHVVEHDQ
DQGLWPXVWKDYHQRDUJXPHQWVRQO\VWDWHIXOEHDQVFDQ
LPSOHPHQW6HVVLRQ6\QFKURQL]DWLRQERWKVWDWHOHVVDQG
VWDWHIXOEHDQVZLOOQRWVXUYLYHDFRQWDLQHUFUDVKVWDWH
OHVVEHDQVZLOOQHYHUEHSDVVLYDWHGVWDWHOHVVEHDQ
FUHDWLRQDQGUHPRYDOLVQRWWLHGWRWKHFOLHQW

 *LYHQDOLVWRIUHVSRQVLELOLWLHVUHODWHGWR <RXKDYHWRNQRZZKDWLVDQGLVQ¶WJXDUDQWHHGLQWKH


VHVVLRQEHDQVLQGHQWLI\WKRVHZKLFKDUH VSHF)RUH[DPSOHWKHFRQWDLQHUZRQ¶WDOORZFRQFXUUHQW
WKHUHVSRQVLELOLW\RIWKHVHVVLRQEHDQ DFFHVVWRDVLQJOHVHVVLRQEHDQ LIFOLHQW$LVXVLQJWKH
SURYLGHUDQGWKRVHZKLFKDUHWKH EHDQFOLHQW%ZLOOJHWDQH[FHSWLRQLILWFDOOVDPHWKRG
UHVSRQVLELOLW\RIWKH(-%FRQWDLQHU RQWKDWEHDQ $QGWKHFRQWDLQHULVQ¶WUHTXLUHGWRDOORZ
SURYLGHU DEHDQLQRQH($5¿OHWREHDORFDOFOLHQWWRDEHDQLQ
DGLIIHUHQW($5$QG\RXKDYHWRNQRZH[DFWO\ZKLFK
FODVVHVDQGPHWKRGVDUHLPSOHPHQWHGE\\RX WKHEHDQ
WKHHME5HPRYH DQGHME&UHDWH PHWKRGVHWF DQG
ZKLFKDUHLPSOHPHQWHGE\WKHFRQWDLQHU WKHKDQGOHV
WKHKRPHDQGFRPSRQHQWREMHFWVWKHVWXEV IRU5HPRWH
FOLHQWLQWHUIDFHV WKHJHW(-%2EMHFW PHWKRGHWF 0RVW
RIZKDW¶VLQWKLVREMHFWLYHRYHUODSVZLWKDQG

 *LYHQDOLVWRIUHTXLUHPHQWVLGHQWLI\ 7KLVLVDERXWNQRZLQJEHDQODZ²WKHUXOHV\RXKDYHWR


WKRVHZKLFKDUHWKHUHTXLUHPHQWVIRUD IROORZDFFRUGLQJWRWKHVSHFHYHQLQWKHFDVHVZKHUH
VHVVLRQEHDQFODVVUHPRWHFRPSRQHQW FRPSLOHUZRQ¶WFDUHLI\RXGRQ¶W)RUH[DPSOH\RXPXVW
LQWHUIDFHUHPRWHKRPHLQWHUIDFHFUHDWH KDYHDPDWFKLQJHME&UHDWH PHWKRGIRUHDFKFUHDWH
PHWKRGVEXVLQHVVPHWKRGVORFDO PHWKRGLQWKHKRPHEXWWKHFRPSLOHUZRQ¶WVWRS\RXLI
FRPSRQHQWLQWHUIDFHUHPRWHFRPSRQHQW \RXOHDYHLWRXW$QG\RXPXVWNQRZWKDWORFDOLQWHUIDFH
LQWHUIDFH PHWKRGVPXVWQRWGHFODUHD5HPRWH([FHSWLRQEXW
5HPRWHLQWHUIDFHPHWKRGVPXVW$QG\RXPXVWNQRZ
WKDWREMHFWW\SHDUJXPHQWVWRD5HPRWHLQWHUIDFH
PHWKRGDUHVHQWDVVHULDOL]HGFRSLHVRIWKHREMHFWZKLOH
DUJXPHQWVWRORFDOLQWHUIDFHVDUHVHQWDVFRSLHVRIWKH
UHIHUHQFH

\RXDUHKHUH 
VHVVLRQEHDQV

-`XTWZQVO\PM[M[[QWVJMIVTQNMKaKTM
)MAGINEYOUREASESSIONBEAN7HATMATTERSTOYOU7HATARETHEKEYMOMENTS
INYOURLIFE7HATDOYOUNEEDTOKNOWABOUTTHECLIENT7HATDOYOUNEEDTO
KNOWABOUTTHE#ONTAINER7HATDOYOUNEEDTOGETFROMTHE#ONTAINER
.OWIMAGINEYOURETHECLIENT7HATSYOURMOTIVATION7HATDOYOUNEEDTO
KNOWABOUTHOWTHE#ONTAINERWORKS!NDWHATIFYOURETHE#ONTAINER7HAT
DOYOUHAVETODOTOMANAGEABEANSLIFE ANDWHENDOYOUHAVETODOIT
)FYOURETHE"EAN0ROVIDER WHATDOYOUHAVETOKNOWABOUTTHEBEANSLIFECYCLE
INORDERTOWRITECODETHATWORKS7HATIFYOUWANTTHATCODETOBEEFlCIENT
)NTHISCHAPTER WELOOKATTHEENTIREWORLDOFASESSIONBEAN ANDWEDOITFROM
DIFFERENTPOINTSOFVIEW7ETAKEAN//APPROACHTOTHISCHAPTER ITERATING
THROUGHDEEPERLEVELSOFDETAIL3ODONTPANICIFTHElRSTSEVERALPAGESFEEL
ALITTLETOOHIGH LEVEL ORLEAVEYOUWITHQUESTIONS9OULLBEDOWNINTHEDIRT
BEFORETHECHAPTERSDONE
"EFOREWESTART LETSINTRODUCETHEPLAYERS

+WV\IQVMZ
+TQMV\ *MIV8ZW^QLMZ

*MIV *RDOEHWKHEHDQ
*RDOXQGHUVWDQGWKH JRG0DQDJHWKHOLIH
WUXHPHDQLQJRILWVOLIH DQGGHDWKRIEHDQV
:KHUHLWFDPHIURP LQWHUFHSWLQJDOORIWKH
ZKDWLWVSXUSRVHLV EHDQ·VPHWKRGFDOOV
KRZZLOOLWDOOHQG *RDOZULWHGHSOR\DEOH
*RDOFDOOEXVLQHVV ZHOOEHKDYHGEHDQV
PHWKRGVRQDEHDQ .QRZWKHEHDQ$3,ZHOO
HQRXJKWRSXWWKHULJKW
FRGHLQWKHULJKWSODFH

 &KDSWHU
VHVVLRQEHDQOLIHF\FOH

,FUHDWHXVHDQGUHPRYH
EHDQVE\FDOOLQJPHWKRGVRQWKH
KRPHDQGFRPSRQHQWLQWHUIDFHVWXEV
6RPHGD\,ZLOONLOOWKH%HDQ3URYLGHU ,·PDQREMHFWDQG,UXQ
ZLWKP\EDUHKDQGVIRUQHYHUJLYLQJ EXVLQHVVPHWKRGVEXW,·PDOVR
PHWKHULJKWVWXEV DEHDQ$VDEHDQ,SD\DWWHQWLRQWRNH\
PLOHVWRQHVLQP\OLIHOLNHFRQVWUXFWLRQ ERULQJ EHDQ
FUHDWLRQ YHU\LPSRUWDQW SDVVLYDWLRQ JRLQJWR
VOHHS DFWLYDWLRQ ZDNLQJXS DQGUHPRYDO GHDWK
QRWJRRGLI\RX·UHPH 7KHFRQWDLQHUWHOOVPH
+TQMV\ HYHU\WLPHRQHRIWKHVHVSHFLDOPRPHQWVRFFXUV
0RVWKDSSHQMXVWRQFH FRQVWUXFWLRQFUHDWLRQ
UHPRYDO EXWDFWLYDWLRQSDVVLYDWLRQDQG
EXVLQHVVPHWKRGVFDQKDSSHQRYHU
DQGRYHUDJDLQ

*MIV

,ZULWHWKHEHDQFRGH%HVLGHVWKH
EXVLQHVVPHWKRGV,KDYHWRLPSOHPHQW
WKHFRQWDLQHUFDOOEDFNV WKHRQHVWKH ,FRQVWUXFWWKHEHDQ,
FRQWDLQHUFDOOVZKHQVRPHWKLQJKDSSHQVLQWKH JLYHWKHEHDQLWVEHDQQHVV
EHDQ·VOLIH ,DOVRKDYHWRZULWHWKHHME&UHDWH  VSHFLDOEHDQFDSDELOLWLHV DQG,FDOOFUHDWH
PHWKRGVWRPDWFKWKHKRPHFUHDWH PHWKRGV RQWKHEHDQSDVVLQJLQFOLHQWDUJXPHQWVLI
$QG,·PXQGHUSDLGDQGWKH\VWLOOKDYHQ·W LW·VDVWDWHIXOEHDQ,GHFLGHLIDQGZKHQWKH
JLYHQPHRQHRIWKRVH$HURQŒFKDLUV EHDQVKRXOGVOHHSDQGZDNHXSDQG,·PWKH
RQO\RQHWKDWFDQNLOO UHPRYH DEHDQ,
GHFLGHKRZDQGLIDEXVLQHVVPHWKRGLV
FDOOHGRQDEHDQIDFWRULQJLQWKLQJV
OLNHVHFXULW\DQGWUDQVDFWLRQV
7RDEHDQ,·PDJRG
*MIV8ZW^QLMZ

+WV\IQVMZ

\RXDUHKHUH 
VHVVLRQEHDQV

AW]ZMUMUJMZPW_Q\ITT_WZS[ZQOP\ '
/M\\QVOIVL][QVOI[\I\MN]T[M[[QWVJMIV
4HISPICTURESHOWSWHATHAPPENSAFTERTHECLIENTDOESALOOKUP
IN*.$)ANDGETSTHEHOMESTUB)NOTHERWORDS ITSHOWSTHE
CLIENTGETTINGANDTHENUSINGABEAN4HISPICTUREISSTILLTOO
HIGH LEVEL THOUGH SOWELLGOALOTDEEPERLATERINTHISCHAPTER
&OREXAMPLE WELLCOVERWHATREALLYHAPPENSBETWEENSTEPTWO
HOMEOBJECTGETSTHECLIENTSCREATE CALL ANDSTEPFOURHOME
MAKESTHEBEAN 4HEEXAMEXPECTSYOUTOKNOWJUSTEXACTLY
WHATSINVOLVEDINhMAKESTHEBEANv

 &OLHQWFDOOVFUHDWH RQWKHKRPHVWXE

 +RPHREMHFWJHWVWKHFUHDWH FDOO
creating a bean
 +RPHFRQWDLQHUPDNHVWKH(-%2EMHFW FRPSRQHQWLQWHUIDFH IRUWKHEHDQ

 +RPHFRQWDLQHUPDNHVWKHEHDQ

 +RPHUHWXUQVWKH(-%2EMHFW FRPSRQHQWLQWHUIDFH VWXEWRWKHFOLHQW

 &OLHQWFDOOVDEXVLQHVVPHWKRGRQWKHFRPSRQHQWLQWHUIDFHVWXE JHW$GYLFH
using a bean
 (-%2EMHFWJHWVWKHJHW$GYLFH FDOO

 &RQWDLQHUVWHSVLQDQGJHW$GYLFH LVFDOOHGRQWKHEHDQ

 &KDSWHU
VHVVLRQEHDQOLIHF\FOH

6WDWHIXO6HVVLRQ%HDQ

&5($7,21

(-%
VWXE REMHFW

EHDQ
 

PDNH
 UHW

VHU
NH
FOLHQW XUQ PD

YLF
VWX
E

HV
+RPH
 REMHFW
FU 
HD
WH VWXE
H
FUHDW

86(
EXVLQHVVPHWKRGFDOO

 JHW$GYLFH
JHW$GYLFH
VHUYLFHV


YLFH (-% 
G VWXE REMHFW
W$
JH
 EHDQ

FOLHQW

+RPH
REMHFW

\RXDUHKHUH 
VHVVLRQEHDQV

<PMZM¼[WJ^QW][TaUWZM\W\PMJMIV¼[TQNMKaKTM
\PIVR][\KZMI\QWVIVLJ][QVM[[UM\PWL[
7HATABOUTWHENACLIENTWANTSTOREMOVEABEAN7HATABOUTACTIVATION
ANDPASSIVATIONOFSTATEFULSESSIONBEANS!NDWHATREALLYDOESHAPPEN
WHENABEANISCREATED7HATMAKESBEANCREATIONDIFFERENTFROMPLAIN
OLDOBJECTCONSTRUCTION
)NTHISCHAPTER WELLLOOKATALLTHESTAGESOFASESSIONBEANSLIFE FOR
BOTHSTATEFULANDSTATELESSSESSIONBEANS

7KHEHDQOLIHF\FOH VSHFLDOPRPHQWVLQDEHDQ·VOLIH

6WDWHIXOVHVVLRQEHDQV

ƒ %HDQFUHDWLRQ ZKHQWKHFOLHQWZDQWVDEHDQ
ƒ %HDQXVH ZKHQWKHFOLHQWFDOOVDEXVLQHVVPHWKRG
ƒ %HDQSDVVLYDWLRQ WKHEHDQLVSXWWRVOHHSWRFRQVHUYH
UHVRXUFHV

ƒ %HDQDFWLYDWLRQ WKHEHDQZDNHVXSWRVHUYLFHDEXVLQHVV
PHWKRGIURPWKHFOLHQW

ƒ %HDQUHPRYDO ZKHQWKHFOLHQWLVILQLVKHGZLWKWKHEHDQRU
WKHEHDQWLPHVRXW

6WDWHOHVVVHVVLRQEHDQV

ƒ %HDQFUHDWLRQ ZKHQWKHFRQWDLQHUZDQWVWRPDNHDEHDQ
ƒ %HDQXVH ZKHQWKHFOLHQWFDOOVDEXVLQHVVPHWKRG
ƒ %HDQUHPRYDO ZKHQWKHFRQWDLQHUGHFLGHVWKHUHDUHWRR
PDQ\EHDQVLQWKHSRRO

 &KDSWHU
VHVVLRQEHDQOLIHF\FOH

+WV\IQVMZ+ITTJIKS[
NWZ\PM[XMKQITUWUMV\[QVIJMIV¼[TQNM

+H\LWKDSSHQVRQO\
RQFHLQDOLIHWLPHVR
\RXEHWWHUPDNHWKH
PRVWRILW
)RUPH"7KLV
LVVXFKDVSHFLDO
PRPHQW

$VD%HDQ3URYLGHU<28PXVWLPSOHPHQW
FRQWDLQHUFDOOEDFNVLQ\RXUEHDQFODVV

7HENABEANHASASPECIALMOMENT ITDOESNTKNOWUNTILTHE
#ONTAINERCALLSONEOFTHEBEANSCONTAINERCALLBACKMETHODS
4HESEARESPECIALMETHODSTHE#ONTAINERKNOWSABOUT
THATYOUTHE"EAN0ROVIDER MUSTIMPLEMENTINYOUR
BEANCLASS9OUCANTHINKOFTHECONTAINERCALLBACKSAS
BEINGKINDOFLIKEEVENTHANDLERS
#ONTAINERCALLBACKSCOMEFROMTWOPLACESYOURBEANS
HOMEINTERFACE ANDTHE3ESSION"EANINTERFACEYOUR
SESSIONBEANCLASSMUSTIMPLEMENT
&ORASESSIONBEAN THEHOME RELATEDCONTAINERCALLBACKS
AREMATCHINGCREATIONMETHODSEJB#REATE FOREACH
CREATE METHODDECLAREDINTHEBEANSHOMEINTERFACE
4HE3ESSION"EANINTERFACEDECLARESFOURCONTAINER
CALLBACKMETHODSFORGIVINGTHEBEANITSBEANCONTEXT
ACTIVATINGIT PASSIVATINGIT ANDREMOVINGIT7ELLLOOKAT
THEACTUALMETHODSONTHENEXTPAGE

\RXDUHKHUH 
FRQWDLQHUFDOOEDFNV

+WV\IQVMZ+ITTJIKS[KWUMNZWU<?7XTIKM["

 
<RXUKRPHLQWHUIDFH 6HVVLRQ%HDQLQWHUIDFH
MDYD[HME6HVVLRQ%HDQ

LQWHUIDFH!! LQWHUIDFH!!
$GYLFH+RPH $GYLFH%HDQ 6HVVLRQ%HDQ
FUHDWH 6WULQJFOLHQW1DPH VHW6HVVLRQ&RQWH[W 6HVVLRQ&RQWH[WVF
VHW6HVVLRQ&RQWH[W 6HVVLRQ&RQWH[WVF
HME$FWLYDWH HME$FWLYDWH
 HME3DVVLYDWH
HME3DVVLYDWH
for eve HME5HPRYH
the homry create() in
HME5HPRYH

a match e, there must


in the b ing ejbCreate( be HME&UHDWH 6WULQJFOLHQW1DPH  you must always implement
ean ) these FOUR container callba
JHW$GYLFH methods in your session bean ck
class
e
s s m e t h o d from toht a
Busine nt interface, n
compone r callback
containe

&ORANYSESSIONBEAN YOUWILLALWAYSALWAYSALWAYSHAVEATLEASTlVECONTAINER
CALLBACKSˆFOURFROMTHE3ESSION"EANINTERFACEIMPLEMENTATIONS ANDATLEAST
ONEEJB#REATE TOMATCHTHECREATE METHODDECLAREDINTHEHOMEINTERFACE
&ORSTATELESSSESSIONBEANS THEREWILLBEEXACTLYlVECONTAINERCALLBACKS
SINCESTATELESSSESSIONBEANSCANHAVEONLYONECREATE METHOD!NDSINCE
THESTATELESSBEANSCREATE ISALWAYSANO ARG YOUKNOWTHATTHEBEANS
EJB#REATE WILLALWAYSBEANO ARG
&ORSTATEFULBEANS REMEMBER THEREMUSTBEATLEASTONECREATE BUTTHERECAN
BEMORE INCLUDINGBOTHOVERLOADEDCREATE METHODSANDCREATESOMETHING
METHODS&OREXAMPLE ASTATEFULBEANHOMEMIGHTHAVETHREECREATEMETHODS
CREATE CREATE3TRINGS CREATE"IG#USTOMER3TRINGS 4HATWOULDMEAN
THEBEANWOULDHAVETHREECONTAINERCALLBACKSFROMTHEHOMEEJB#REATE
EJB#REATE3TRINGS EJB#REATE"IG#USTOMER3TRINGS 

 &KDSWHU
VHVVLRQEHDQOLIHF\FOH

1UXTMUMV\QVO\PMKWV\IQVMZKITTJIKS[
4HIS!DVICE"EANCODEISCOMPLETELYLEGAL)TCOMPILESANDRUNS2IGHTNOW WEDONT
NEEDANYTHINGINTHECALLBACKMETHODS BECAUSETHEBEANSBUSINESSLOGICDOESNT
DEPENDONANYTHINGELSETHATHAPPENSATOTHERTIMESINTHEBEANSLIFE9OULLNOTICE
THATWEARESAVINGTHE3ESSION#ONTEXTPARAMETERWEGETFROMTHESET3ESSION#ONTEXT
CONTAINERCALLBACK BUTWEARENTUSINGITINTHISCODE,ATERINTHISCHAPTER YOULL
LEARNWHYYOUMIGHTWANTTOASSIGNTHECONTEXTTOANINSTANCEVARIABLE ANDTHE
CIRCUMSTANCESUNDERWHICHYOUWOULDPUTCODEINEACHOFTHESECALLBACKMETHODS

ent SessionBean
You MUST implem
SDFNDJHKHDG¿UVW
LPSRUWMDYD[HME 

SXEOLFFODVV$GYLFH%HDQLPSOHPHQWV6HVVLRQ%HDQ^

SULYDWH6HVVLRQ&RQWH[WFRQWH[W instance variable to hold the context we
SULYDWH6WULQJQDPH get from a container callback method.


SXEOLFYRLGHME$FWLYDWH ^

` ethods of SessionBean
the four m implement
SXEOLFYRLGHME3DVVLYDWH ^ that you must

`

SXEOLFYRLGHME5HPRYH ^

`

SXEOLFYRLGVHW6HVVLRQ&RQWH[W 6HVVLRQ&RQWH[WFW[ ^
FRQWH[W FW[
`

This must match the


SXEOLFYRLGHME&UHDWH 6WULQJFOLHQW1DPH ^ from the home interfacrceeate method
QDPH FOLHQW1DPH
` business meth od from the component
interface... not a contain
SXEOLF6WULQJJHW$GYLFH ^ er callback
UHWXUQ³$GYLFHIRU³QDPH³WKHUHLVQRVSRRQ´
`
`

\RXDUHKHUH 
FRQWDLQHUFDOOEDFNV

:KHQDUHFRQWDLQHUFDOOEDFNVLQYRNHG"
)RUVWDWHIXOVHVVLRQEHDQVZKHQWKHEHDQWUDQVLWLRQV
IURPRQHVWDWHWRDQRWKHU

EHDQWKURZVV\VWHPH[FHSWLRQ
GRHVQRWH[LVW XQFKHFNHGXQFDXJKW

FRQVWUXFWRU
VHW6HVVLRQ&RQWH[W
HME5HPRYH ===
HME&UHDWH
RUWLPHRXW ===
WLPHRXW

HME3DVVLYDWH

PHWKRGUHDG\ SDVVLYDWHG
PHWKRGFDOOV HME$FWLYDWH

 GRHVQRWH[LVW %HIRUHDEHDQLVDEHDQ RUHYHQDQREMHFW LWGRHVQRWH[LVW7KHVSHFPDNHVDELJSRLQWRI


WKLVMXVWLQFDVHWKHUH·VDQ\FRQIXVLRQDERXWVRPHWKLQJH[LVWLQJEHIRUHLWH[LVWV6RWKHVWDWH
RIQRQH[LVWHQFHLVLQGHHGDVWDWHWKDWDEHDQFDQEHLQHYHQWKRXJKLWGRHVQRW\HWH[LVW
:KHQDVHVVLRQEHDQPRYHVRXWRIWKLVVWDWHWKHEHDQ·VFRQVWUXFWRUUXQVWKHQVHW6HVVLRQ
&RQWH[W DQGILQDOO\WKHHME&UHDWH PHWKRG7KLVLVDOVRWKHVWDWHDEHDQUHWXUQVWRDIWHU
DQ\RQHRIWKHVHWKLQJVRFFXUVEHDQWLPHVRXWEHDQWKURZVDV\VWHPH[FHSWLRQRUDFOLHQW
FDOOVUHPRYH 7KHEHDQZLOOJHWDQHME5HPRYH FDOOLIWKHFOLHQWFDOOVUHPRYH RUWLPHVRXW
ZKLOHLQWKHPHWKRGUHDG\ DFWLYH VWDWH

 PHWKRGUHDG\ $EHDQLQWKHPHWKRGUHDG\VWDWHLVHLWKHUH[HFXWLQJDFOLHQW·VPHWKRGRUZDLWLQJIRUWKHFOLHQW
WRPDNHDQRWKHUEXVLQHVVPHWKRGFDOO$VWDWHIXOEHDQPLJKWRUPLJKWQRWEHLQDQDFWLYH
WUDQVDFWLRQZKLOHLQWKLVVWDWH GHSHQGVRQWKHGHSOR\PHQWWUDQVDFWLRQVHWWLQJVDQGWKHFDOOHU·V
WUDQVDFWLRQVWDWXV EXWLIWKHEHDQLVLQDWUDQVDFWLRQWKHEHDQFDQQRWEHSDVVLYDWHG

 SDVVLYDWHG $SDVVLYDWHGEHDQLVWHPSRUDULO\VDYHGLQVRPHNLQGRIVHFRQGDU\VWRUDJHWRFRQVHUYH
UHVRXUFHVEHWZHHQFOLHQWFDOOV3DVVLYDWLRQPLJKWEHVHULDOL]DWLRQDOWKRXJKWKH&RQWDLQHU
FDQXVHDQ\WKLQJLWZDQWVDVORQJDVLWEHKDYHVOLNHVHULDOL]DWLRQ ZLWKRQHVPDOOH[FHSWLRQ
ZH·OOVHHODWHULQWKLVFKDSWHU $OWKRXJKDSDVVLYDWHGEHDQLVQRORQJHUDQDFWLYHREMHFWRQ
WKHKHDSWKH&RQWDLQHUZLOOUHDFWLYDWHWKHEHDQ FDOOLQJHME$FWLYDWH ZKHQWKHFOLHQWFDOOVD
EXVLQHVVPHWKRG,IDSDVVLYDWHGEHDQWLPHVRXWWKHEHDQZLOOVLPSO\GLHZLWKRXWILUVWEHLQJ
UHDFWLYDWHG
 &KDSWHU
VHVVLRQEHDQOLIHF\FOH

:HKDYHWRORRNDWWKHWUDQVLWLRQV
.OWTHATYOUVESEENTHEOVERALLSTATEDIAGRAM WEHAVETO
DRILLDOWNANDlNDOUTWHATREALLYHAPPENSANDWHY WHEN
ASTATEFULSESSIONBEANTRANSITIONSFROMONESTATETOANOTHER

EHDQWKURZVV\VWHPH[FHSWLRQ
0RYLQJIURPGRHVQRWH[LVW XQFKHFNHGXQFDXJKW
GRHVQRWH[LVW
WRPHWKRGUHDG\

FRQVWUXFWRU
VHW6HVVLRQ&RQWH[W 
HME5HPRYH
FRQVWUXFWRU HME&UHDWH
RUWLPHRXW
WLPHRXW
VHW6HVVLRQ&RQWH[W 
HME3DVVLYDWH
HME&UHDWH
PHWKRGUHDG\ SDVVLYDWHG
HME$FWLYDWH

0RYLQJIURPPHWKRGUHDG\ EHDQWKURZVV\VWHPH[FHSWLRQ
GRHVQRWH[LVW XQFKHFNHGXQFDXJKW
WRSDVVLYDWHGDQGYLFHYHUVD

FRQVWUXFWRU
VHW6HVVLRQ&RQWH[W 
HME&UHDWH HME5HPRYH
HME3DVVLYDWH RUWLPHRXW
WLPHRXW
HME$FWLYDWH
HME3DVVLYDWH

PHWKRGUHDG\ SDVVLYDWHG
HME$FWLYDWH

0RYLQJIURPSDVVLYDWHGRU EHDQWKURZVV\VWHPH[FHSWLRQ
GRHVQRWH[LVW XQFKHFNHGXQFDXJKW
PHWKRGUHDG\WRGRHVQRWH[LVW

FRQVWUXFWRU
VHW6HVVLRQ&RQWH[W 
WLPHRXWV\VWHPH[FHSWLRQ HME&UHDWH
HME5HPRYH
RUWLPHRXW
WLPHRXW
RU
HME3DVVLYDWH
HME5HPRYH
PHWKRGUHDG\ SDVVLYDWHG
HME$FWLYDWH

\RXDUHKHUH 
VHVVLRQEHDQV

WKHUH DUH QR
'XPE 4XHVWLRQV
Q: )FITSSOCOMMONTOLEAVETHEMETHODSEMPTY WHYDONT
6KDUSHQ \RXU SHQFLO
THEYHAVEADAPTERCLASSESLIKETHEYHAVEFOREVENTHANDLERSˆTHAT
IMPLEMENTALLTHEMETHODSFROMTHEINTERFACE)STHEREANYREASON
WHYYOURBEANCLASSCANTEXTENDACLASSTHATIMPLEMENTSTHE
3ESSION"EANINTERFACE
)RUWKHH[DP\RXKDYHWRNQRZH[DFWO\
ZKLFKPHWKRGVDUHLQWKH6HVVLRQ%HDQ
A: 4HE!0)DOESNTHAVEADAPTERCLASSESFOR3ESSION"EAN
LQWHUIDFHVRQRZLVDJRRGWLPHWRVWDUW
PHPRUL]LQJWKHP6HHLI\RXFDQUHPHPEHU
IMPLEMENTATIONSIEACLASSTHATIMPLEMENTSALLOFTHEMETHODS "UT
THERESNOREASONYOUCANTMAKEONEYOURSELF+EEPINMIND THOUGH WKHQDPHRIWKHPHWKRGWKDWPDWFKHVWKH
THATWITHREAL WORLDBEANSYOUPROBABLYWILLHAVECODEINONEORMORE EHKDYLRUGHVFULEHG:H·YHLQFOXGHGVRPH
OFTHEMETHODS!NDYOUMIGHTEVENBEWORKINGWITHABEAN AWARE)$% SUHWW\ELJKLQWVKHUHEHFDXVHLW·V\RXUILUVW
THATPUTSTHEMETHODSINFORYOUANYWAY WLPHEXWWKHPRFNH[DPTXHVWLRQVZLOOEH
3TILL ITMIGHTBEHANDYTOMAKEYOURSELFAGENERICBEANTHATYOU PXFKOHVVREYLRXV
TYPICALLYEXTENDFROM THATHASALLOFTHEMETHODSFROM3ESSION"EAN
7ITHSTATELESSBEANS ESPECIALLY YOUHAVETOIMPLEMENTEJB!CTIVATE AND
EJB0ASSIVATE EVENTHOUGHTHEYLLNEVERBECALLED3TATELESSBEANSARE 7KLVPHWKRGLVFDOOHGZKHQWKHFOLHQWWHOOV
NEVERPASSIVATEDYOULLSEEMOREONTHATLATERINTHECHAPTER WKH&RQWDLQHUWKDWKH·VGRQHXVLQJDVWDWHIXO
VHVVLRQEHDQ7KHEHDQLV127KDSS\
Q: )JUSTREMEMBEREDTHAT)READSOMEWHERETHATENTERPRISEBEANS BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
DONTSUPPORTINHERITANCE7HATSTHATABOUT

A: !HACOMMONMISCONCEPTION7ELL SORTOF%*"SUPPORTSREGULAR 7KLVPHWKRGLVFDOOHGZKHQWKHEHDQ


LVSXWWRVOHHSWRWHPSRUDULO\FRQVHUYH
*AVACLASSINHERITANCE BUTHASNOCONCEPTOFBEANINHERITANCE!NDNOW
YOUREASKING h7HATTHEHECKISTHEDIFFERENCEv9OUALREADYKNOWWHAT UHVRXUFHV
CLASSINHERITANCEIS ITSTHETHINGYOUDOIN*AVAWHENONECLASSEXTENDS
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
ANOTHER!NDYOUCANDOTHATWITHABEAN JUSTLIKEANYOTHERCLASS
"UTBEANINHERITANCEIFITWERESUPPORTED WOULDMEANTHATABEAN
CLASSCOULDEXTENDANOTHERBEANCLASSANDINHERITNOTJUSTTHECLASS
7KLVPHWKRGLVFDOOHGZKHQWKHSUHYLRXVO\
INHERITABLEMEMBERS BUTALSOITSBEANNESS7HATKINDOFBEANNESS
MIGHTBEINHERITABLE*USTINCASETHEYDODECIDETOSUPPORTTHISIN VOHHSLQJEHDQLVFDOOHGEDFNWRDFWLYHGXW\
THEFUTURE WHICHISAPOSSIBILITY2EGULAROLDNON ENTERPRISEBEANSDO WRVHUYLFHDEXVLQHVVPHWKRG
SUPPORTBEANINHERITANCE BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
/NEIDEAMIGHTBETOHAVEYOURBEANSUBCLASSINHERITSOMEOFTHE
DEPLOYMENTDESCRIPTORSETTINGSOFITSSUPERCLASS ANDTHENOVERRIDETHE
ONESITWANTSTOCHANGEWITHAMUCHSMALLER INCOMPLETEDEPLOYMENT 7KLVPHWKRGLVFDOOHGQHDUWKHEHJLQQLQJ
DESCRIPTOR4HATMIGHTBECOOLWERENOTSURE"UTRIGHTNOW ITSJUSTOUR
RIWKHEHDQ·VOLIHZKHQWKH&RQWDLQHUKDQGV
LITTLEFANTASY
WKHEHDQDUHIHUHQFHWRWKHEHDQ·VVSHFLDO
)NTHEMEANTIME GOAHEADANDLETYOURBEANEXTENDANOTHERCLASS IFIT OLQNWRWKH&RQWDLQHU
MAKESSENSEFORYOUR//DESIGN
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB

 &KDSWHU
VHVVLRQEHDQOLIHF\FOH

6KDUSHQ \RXU SHQFLO


)LOOLQWKHPLVVLQJPHWKRGV'RQ·WZRUU\LI\RXGRQ·WJHWWKH
QDPHH[DFWO\ULJKWMXVWWU\WRZRUNRXWZKDWKDSSHQVDWHDFK
RIWKHWUDQVLWLRQVLQWKHVWDWHIXOVHVVLRQEHDQVWDWHGLDJUDP

EHDQWKURZVV\VWHPH[FHSWLRQ
GRHVQRWH[LVW XQFKHFNHGXQFDXJKW

RUWLPHRXW ===
===
WLPHRXW

PHWKRGUHDG\ SDVVLYDWHG
PHWKRGFDOOV

<RXKDYHWR
NQRZWKLV
OLIHF\FOH
WKDQN
,I\RXWDNHWKHH[DP\RX¶OO
HDW KE HFD XVH
XVIRUEHDWLQJLWWRG
XVWNQ RZ LWE DFN ZD UGV
\RXUHDOO\P
DQGIRUZDUG
RSHUWKLV
%XWHYHQDVDEHDQGHYHO
PH QWD OWRZU LWLQ J\RXU
LVVRIXQGD
DQW WR
EHDQFRGHWKDW\RX'2Z
HG 7K LVLV Q¶W
KDYHWKLVPHPRUL]
IWKRVH $3 ,P HP RUL] DWLRQ
OLNHRQHR
LQN ³,V Q¶W
TXHVWLRQVZKHUH\RXWK

WKDWZKDWWKHGRFVDUHIRU
\R XK DYH DQ ,' (WK DWSXWV
(YHQLI
LQW R\ RXU
WKHFRQWDLQHUFDOOEDFNV
RX VWLOOKD YH WR
FRGHIRU\RX\
GZKDW
NQRZZKDWWKH\PHDQDQ
RWG RLQ
\RXVKRXOGRUVKRXOGQ
HDFKRQH

\RXDUHKHUH 
EHDQFUHDWLRQ

GRHVQRWH[LVW
*MIV+ZMI\QWV"
_PMVIVWJRMK\JMKWUM[IJMIV
FRQVWUXFWRU

VHW6HVVLRQ&RQWH[W

HME&UHDWH 7KHSURXGHVWPRPHQWRIP\OLIH
LVZKHQWKH*UDQG0DVWHU&RQWDLQHU
PDNHVPHDEHDQE\JLYLQJPHDFRQWH[WDQG
PHWKRGUHDG\ FDOOLQJP\FUHDWH %HIRUHWKDW,·PMXVWDQ
RUGLQDU\REMHFW%XWDVDEHDQ,KDYHVSHFLDO

e xt () a n d ejbCreate()life, SULYLOHJHV EHVLGHVWKHVHFUHWKDQGVKDNH 


n t Õs OLNHWKHDELOLW\WRJHWVHFXULW\
setSessionCoonce in a session beayn to do RUWUDQVDFWLRQLQIR
happe n o n ly on Õt t r
w it ! And d is too
so donÕt blosoon... the constructor
things too o any bean things.
early to d

!BEANMOVESFROMDOESNOTEXISTTOMETHODREADYSTILL
FEELSCREEPYDOESNTITHAVETOEXISTBEFOREITCANMOVE
BEGINNINGWITHACONSTRUCTOR"UTTHECONSTRUCTORMAKES
ANOBJECT NOTABEAN4OBEABEAN THEOBJECTNEEDSTOBE
GRANTEDBEANNESS
7HENANOBJECTBECOMESABEAN ITGETSALLTHEUNIQUE
PRIVILEGESTHATCOMEWITHBEANNESS LIKETHEABILITYTOGET
SECURITYINFOABOUTTHECLIENT ORLOOKUPSPECIALDEPLOY
TIMEPROPERTIESINTHEBEANSSPECIALSPACEIN*.$) ORGETA
*$"##ONNECTIONFROMAPOOLMANAGEDBYTHECONTAINER
7HYDOYOUCAREABOUTCREATIONDETAILS
"ECAUSESOMEWHEREBETWEENTHECONSTRUCTORANDTHE
CREATE METHOD THEBEANISINA3CHROEDINGERSBEAN
STATE
9OUMIGHTHAVEBEANINITIALIZATIONCODE LIKEGETTINGA
*$"##ONNECTION ORLOOKINGUPAREFERENCETOANOTHER
BEAN THATWILLFAILIFYOURUNITTOOEARLYINTHEBEANSLIFE
7RITINGGOODBEANCODEMEANSYOUMUSTKNOWTHEPOINT
ATWHICHANOBJECTBECOMESACARD CARRYINGBEANANDWHAT
THATMEANSTOYOUASTHEDEVELOPER

*WeÕre not explaining the whole Schroedinger reference here, except to


say that it involves cats (animal-lovers be warned) and subatomic physics.
For more info, look for Head First Quantum Physics in the future. WeÕre
serious. Serious for us, anyway.
 &KDSWHU
VHVVLRQEHDQOLIHF\FOH

:KDWGRHV´EHDQQHVVµEX\\RX"
:KDWKDSSHQVZKHQD WRWKLV"
EHDQJRHVIURPWKLV

object card-carrying bean

 $6HVVLRQ&RQWH[WUHIHUHQFH
!BEANSCONTEXTSOMETIMESCALLED%*"#ONTEXT
REFERRINGTOTHESUPERINTERFACEOF3ESSION#ONTEXT
'RQ·WFRQIXVH
DEHDQFRQWH[W
ISTHEBEANSONLYLIFELINETOTHE#ONTAINER ANDIT
LETSTHEBEANDOTHINGSLIKEGETSECURITYINFORMATION
ZLWKD-1',
ABOUTTHECALLINGCLIENT FORCEATRANSACTIONTO
FRQWH[W ROLLBACK GETAREFERENCETOTHEBEANSOWNHOMEOR
%*"OBJECT ANDMORE
DVDOOVR
-XVWZKHQ\RXWKRXJKWLWZ
\RXUKRUURUWKDWWKH
FOHDU\RX¿QGWR
FRQ WH[W´LVRYHUORDGH G
ZRUG³
 $VSHFLDO-1',&RQWH[W
LRQ&RQWH[W
$EHDQ¶VFRQWH[WOLNH6HVV
JH'ULYHQ
RU(QWLW\&RQWH[WRU0HVVD %VERYBEANGETSITSVERYOWN*.$)CONTEXT WHERE
VSHFLDOUHIHU
&RQWH[W LVWKHEHDQ¶V ITCANlNDTHINGSINCLUDINGRESOURCEMANAGER
[WHQGV(-%& RQW H[W IRU
HQFH ZKLFKH CONNECTIONFACTORIESOBJECTSTHATGIVEYOU
LQH U
JHWWLQJLQIRIURPWKH&RQWD CONNECTIONSTORESOURCESLIKEADATABASE OTHER
ZLWKD-1', BEANS ANDDEPLOY TIMECONSTANTVALUESTHATYOUCAN
7KLVKDV127+,1*WRGR USETOCUSTOMIZEYOURBEANSVARIABLES9OULLLEARNA
PHPEHULV
FRQWH[W$-1',FRQWH[WUH
QD -1 ',YLUWXDO LOTMOREABOUTTHATIN#HAPTER WHEREWELOOKAT
DSDUWLFXODU³QRGH´R
UHH $Q ,QLWLDO&R QWH [WLVWKH THEENTERPRISEBEANENVIRONMENTTHATSWHATTHESPEC
GLUHFWRU\W
V\ RXUHQWU\
-1',FRQWH[WWKDWVHUYHVD CALLSTHEBEANSSPECIAL*.$)CONTEXT 
HV WUXF WXUH ,QRWKHU
SRLQWLQWRWKHWUH
HS ODF HIURP ZK LFK \R XVWDUW
ZRUGVWK
QDYLJDWLQJWKURXJKWKHWU HH

UG³FRQWH[W´  $FFHVVWREHDQVDQGUHVRXUFHV
:KHQHYHU\RXVHHWKHZR
FR QWH[WRIWKH
ORRNFORVHO\DWWKHXP *USTBECAUSEYOUGOTACONNECTIONTOADATABASE
UHRXWWRZ KLFKFRQWH[W
TXHVWLRQWR¿JX DOESNTMEANYOUCANALWAYSUSEIT0ARTOFBEINGA
Q¶V(-%
WKHTXHVWLRQUHIHUV²WKHEHD BEANISTHEABILITYTOACCESSARESOURCELIKEADATABASE
WH[ W6KHH VK
&RQWH[WRU-1',FRQ ORCALLMETHODSONANOTHERENTERPRISEBEAN

\RXDUHKHUH 
VSHFLDOEHDQWKLQJV

6SHFLDO%HDQ7KLQJV

 $6HVVLRQ&RQWH[WUHIHUHQFH
7KLQJV\RXFDQGRZLWK\RXUFRQWH[W

ƒ JHWDUHIHUHQFHWR\RXUKRPH
ƒ JHWDUHIHUHQFHWR\RXU(-%REMHFW
(-%&RQWH[W
ƒ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW
ƒ IRUFHDWUDQVDFWLRQWRUROOEDFN &07
ƒ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\EHHQVHWWRUROOEDFN &07
ƒ JHWDWUDQVDFWLRQUHIHUHQFHDQGFDOOPHWKRGVRQLW %07

 $VSHFLDO-1',&RQWH[W
7KLQJV\RXFDQORRNXSZLWK\RXUVSHFLDO
-1',FRQWH[W
)RR
ƒ DUHIHUHQFHWRDQRWKHUEHDQ
ƒ DUHIHUHQFHWRDUHVRXUFHPDQDJHUFRQQHFWLRQIDFWRU\ OLNH
'DWD6RXUFH WKDW\RXFDQXVHWRJHWIRUH[DPSOHDGDWDEDVH
0\3ULYDWH3ODFH
FRQQHFWLRQ
%DU
ƒ GHSOR\WLPHFRQVWDQWYDOXHV NLQGRIOLNHSURSHUWLHV IRUWKHEHDQ
YDOXHVVHWE\WKHGHSOR\HUWKDWWKHEHDQFDQORRNXSDQGXVH
a beanÕs special DVYDULDEOHVDWUXQWLPH 
JNDI reference ƒ DUHIHUHQFHWRDQ´DGPLQLVWHUHGREMHFWµUHVRXUFH ZKLFKXVXDOO\
PHDQVD-06GHVWLQDWLRQ

 $FFHVVWR
ƒ DQRWKHUEHDQ
ƒ DUHVRXUFHPDQDJHU OLNHDGDWDEDVH
'%

 &KDSWHU
VHVVLRQEHDQOLIHF\FOH

<RXFDQ·WDOZD\VXVHDOORI
\RXUEHDQQHVV
*USTBECAUSEYOUVEBECOMEAFULL mEDGEDBEANDOESNT
NECESSARILYMEANYOUCANDOALLOFTHE"EAN4HINGSON
THEOPPOSITEPAGELOOKUPARESOURCE FORCEATRANSACTION
ROLLBACK ETC 
4HETHINGSYOUCANDOCANVARYDEPENDINGONWHATKIND
OFBEANYOUARE3ESSION %NTITY -ESSAGE$RIVEN YOUR
TRANSACTIONSTATUS ANDWHATKINDOFMETHODYOUREIN
&OREXAMPLE IFYOUREASTATEFULSESSIONBEAN YOUR
<RXPXVWNQRZ
:+(1\RXFDQ
CREATIONISADIRECTRESULTOFTHECLIENTCALLINGCREATE ON
YOURHOME)FYOUREASTATEFULBEAN ANDYOUREINYOUR
GRVSHFLÀF%HDQ
7KLQJVDQGZKHQ EJB#REATE METHOD THERECANBEONLYONEREASONACLIENT
\RXFDQ·W HASASKEDFORYOUTOBECREATED!NDTHATMEANSYOUCANlND
OUTWHOTHECLIENTIS BYASKINGYOUR%*"#ONTEXTLIKE
VFHQDULR
%HSUHSDUHGIRUFRGHRUD 3ESSION#ONTEXT FORCLIENTSECURITYINFORMATION
DP HWK RG DQG DVNV
WKDWVKRZV\RX "UTIFYOUREASTATELESSBEAN YOURCREATIONISNTTIEDTOANY
HU\ RXFDQ GR DS DUWLFXO DU%HDQ
ZKHWK
RG JLYHQ WKH PARTICULARCLIENTSREQUESTYOULLLEARNALLABOUTTHISINA
7KLQJIURPWKDWPHWK
FLUFXPVWDQFH V FEWMOREPAGES )NFACT IFTHE#ONTAINERWANTSTO ITCAN
VKRZQ
)RUH[DPSOH\RXPLJKWEH CREATEABUNCHOFSTATELESSBEANSFORTHEPOOLBEFORETHERE
H[W P HWKRGRID
WKHVHW6HVVLRQ&RQW AREANYCLIENTS!NDTHATMEANSASTATELESSBEANCANNOTGET
HG LI\ RX¶ UHD OORZHGWR
EHDQDQGDVN SECURITYINFORMATIONABOUTTHECLIENTDURINGEJB#REATE 
DWD EDVH 
DFFHVVDUHVRXUFH OLNHDG "ECAUSETHERESNOCLIENT4HERESONLYTHE#ONTAINER
X¶UH QR W< RX
IURPWKDWPHWKRG <R INVOKINGACONTAINERCALLBACKTHATSNOTPARTOFACLIENT
HDQ LQJ IXOWUDQ VDF WLRQ
DUHQ¶WLQD³P CALL ANDWEDONTCONSIDERTHE#ONTAINERTOBEACLIENT
FRQWH[W´DWWKDWSRLQW 4HE#ONTAINERISTHEBOSS NOTTHECLIENT
!NDTHEREARESOME"EAN4HINGSTHATCANBEDONEONLY
WHILETHEBEANISINWHATTHE#ONTAINERCONSIDERShA
MEANINGFULTRANSACTIONCONTEXTv9OUCANT FOREXAMPLE
ACCESSADATABASEFROMAMETHODTHATMIGHTNOTHAVEA
TRANSACTION
3OME"EAN4HINGSAREMUTUALLYEXCLUSIVE)FYOUREUSING
CONTAINER MANAGEDTRANSACTIONS#-4 #HAPTER
YOUMUSTNOTASKYOUR%*"#ONTEXTTOGIVEYOUYOUROWN
TRANSACTIONOBJECT/NTHEOTHERHAND IFYOUREUSINGBEAN
MANAGEDTRANSACTIONS"-4 YOUCANASKFORATRANSACTION
OBJECT BUTTHENYOUMUSTNOTASKYOURCONTEXTTOROLLBACK
YOURTRANSACTION9OULLHAVETOROLLBACKTHETRANSACTION
YOURSELF USINGTHETRANSACTIONOBJECTYOUGOTFROMYOUR
CONTEXT

\RXDUHKHUH 
EHDQFUHDWLRQ

%HDQFUHDWLRQRYHUYLHZ
VWDWHIXOVHVVLRQEHDQ

 &OLHQWFDOOVFUHDWHRQWKHKRPH

FOLHQW

+RPH
VWXE REMHFW
FUHDWH
FUHDWH

 &RQWDLQHUPDNHVWKH(-%REMHFWDQG
6HVVLRQ&RQWH[W

(-%
REMHFW

6HVVLRQ
&RQWH[W

 &RQWDLQHUFRQVWUXFWVWKH
EHDQLQVWDQFH

EHDQ

 &KDSWHU
VHVVLRQEHDQOLIHF\FOH

 &RQWDLQHUOLQNVWKHEHDQWRLWV
FRQWH[WDQG(-%REMHFW FDOOLQJ
VHW6HVVLRQ&RQWH[W DQGHME&UHDWH

EHDQ


H [W
DW WH
UH RQ

E& Q&
HM VVLR
H
W6
VH
4HELINKINGHAPPENSWHENTHECONTAINERCALLSSET3ESSION#ONTEXT AND
EJB#REATE ONTHEBEAN/NCEEJB#REATE RETURNS THEBEANISREADYFOR
@ACTIVEDUTYINOTHERWORDS READYFORBUSINESSMETHODCALLSFROMTHECLIENT 

 &RQWDLQHUVHQGVWKHFOLHQWDVWXE
WRWKH(-%REMHFW

VWXE

\RXDUHKHUH 
EHDQFUHDWLRQ

2EMHFW,QWHUDFWLRQ'LDJUDP 2,' IRUEHDQFUHDWLRQ


VWDWHIXOVHVVLRQEHDQ

FOLHQW
+RPH (-% 6HVVLRQ
REMHFW REMHFW &RQWH[W
EHDQ

FUHDWH

QHZ

QHZ

QHZ EHDQ·VFRQVWUXFWRUUXQV

VHW6HVVLRQ&RQWH[W

HME&UHDWH

ETO
OUDO NTHAV SS
9 A
-,TOP
KNOW5 
M
THEEXA UTO
UIREYO
M D O E SNTREQ ITTLE5-,IS
4HEEX
A GHAL
5 - , ALTHOU EOFOURBEST
K N OW  3 O M O T H ING
H E % * " SPEC 5 - , )T SN
INT N OW VER
DONTK Y(OWE
FRIENDS AMEDOF2EALL EMAINING
SH NR
TOBEA ONEOFTHETE TK NOW5-,
O U A RE T D O N O
IF Y OINFA C LIC
LE W H T O R ISKPUB HT
PEOP W A N T IG
UDONT RIDICULE YOUM 5-,
ANDYO N D IR S T
TIONA EAD&
HUMILIA ONSIDEROUR(
T T O C   
WAN SBOOK

A T T E R N
0

 &KDSWHU
VHVVLRQEHDQOLIHF\FOH

:ULWLQJWKHWKUHHFUHDWLRQUHODWHGWKLQJV
VWDWHIXOVHVVLRQEHDQ

 FRQVWUXFWRU
'RQ·WSXWDQ\WKLQJLQWKHFRQVWUXFWRU7KHUH·VQRWKLQJ\RXZRXOGGRLQ
WKHFRQVWUXFWRUWKDW\RXFDQ·WGRLQHME&UHDWH VRXQOHVV\RXU,'(SXWV
RQHLQIRU\RX\RX·UHEHWWHURIIOHDYLQJWKHFRQVWUXFWRURXWRI\RXUFRGH
SXEOLFFODVV$GYLFH%HDQLPSOHPHQWV6HVVLRQ%HDQ^
ok

t h e c o n st r uctor should loa
SXEOLF$GYLFH%HDQ ^ This is whaty. Better yet, donÕt put give you
QRFRGHKHUH like!! Empt in and let the compiler
`
constructor constructor.
the default

`

 VHW6HVVLRQ&RQWH[W 6HVVLRQ&RQWH[WVF
6DYH\RXUFRQWH[W<RXJHWRQO\RQHFKDQFHWRJUDEWKLVUHIHUHQFHWR
\RXU6HVVLRQ&RQWH[WVR\RXEHWWHUDVVLJQLWWRDQLQVWDQFHYDULDEOH

SULYDWH6HVVLRQ&RQWH[WFRQWH[W
SXEOLFYRLGVHW6HVVLRQ&RQWH[W 6HVVLRQ&RQWH[WFW[ ^
FRQWH[W FW[
` save the SessionContext by assigning it to an instance
variable. You will NEVER get another chan
a reference to your context, so you betterce to have
do it here!
Anything else you would put in this method prob
belongs in ejbCreate(). ably

 HME&UHDWH
3XWDOO\RXULQLWLDOL]DWLRQFRGHKHUH,ILW·VDVWDWHIXOEHDQDQGWKHFUHDWH 
PHWKRGKDVDUJXPHQWVWKH&RQWDLQHUZLOOSDVVWKRVHDUJXPHQWVLQWR\RXU
PDWFKLQJHME&UHDWH PHWKRG<RXKDYHIXOOEHDQVWDWXVQRZVR\RXFDQ
GRDQ\WKLQJ\RXQHHGWRIURPWKLVPHWKRGLQFOXGLQJWKLQJV\RXFDQ·WGRLQ
VHW6HVVLRQ&RQWH[W  OLNHJHWDUHIHUHQFHWR\RXURZQ(-%REMHFW 
SULYDWH6WULQJQDPH YouÕre a full member of the
bean society now, so this is
SXEOLFYRLGHME&UHDWH 6WULQJFOLHQW1DPH ^
QDPH FOLHQW1DPH
where youÕll usually put ALL
RWKHUFRGH your initialization code.
`

\RXDUHKHUH 
EHDQFUHDWLRQ

*MIV\PQVO[aW]KIVLWL]ZQVOKZMI\QWV"
VWDWHIXOVHVVLRQEHDQ

WLPHOLQH

FRQVWUXFWRU VHW6HVVLRQ&RQWH[W HME&UHDWH


QRWKLQJ 8VH\RXU6HVVLRQ&RQWH[WWR 8VH\RXU6HVVLRQ&RQWH[WWR

‰ JHWDUHIHUHQFHWR\RXUKRPH ‰ JHWDUHIHUHQFHWR\RXUKRPH
ItÕs too early to DO
anything ! YouÕre an object, ‰ JHWDUHIHUHQFHWR\RXU(-%REMHFW ‰ JHWDUHIHUHQFHWR\RXU(-%REMHFW
but not yet a bean. ‰ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW ‰ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW
‰ IRUFHDWUDQVDFWLRQWRUROOEDFN &07 ‰ IRUFHDWUDQVDFWLRQWRUROOEDFN &07
EHDQV EHDQV
‰ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\ ‰ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\
EHHQVHWWRUROOEDFN &07EHDQV EHHQVHWWRUROOEDFN &07EHDQV
‰ JHWDWUDQVDFWLRQUHIHUHQFHDQGFDOO ‰ JHWDWUDQVDFWLRQUHIHUHQFHDQGFDOO
PHWKRGVRQLW %07EHDQV PHWKRGVRQLW %07EHDQV

$FFHVV $FFHVV
‰ \RXUVSHFLDO-1',HQYLURQPHQW ‰ \RXUVSHFLDO-1',HQYLURQPHQW
‰ DQRWKHUEHDQ·VPHWKRGV ‰ DQRWKHUEHDQ·VPHWKRGV
‰ DUHVRXUFHPDQDJHU OLNHDGDWDEDVH ‰ DUHVRXUFHPDQDJHU OLNHDGDWDEDVH

1RWHWKHZRUG³DFFHVV´PHDQV³GRWKLQJVZLWK´VRZKHQWKHVSHFXVHV
WKHSKUDVH³UHVRXUFHPDQDJHUDFFHVV´LWPHDQVXVLQJWKHUHVRXUFHWR
GRZKDWHYHUWKDWUHVRXUFHLVIRU6RLQVHW6HVVLRQ&RQWH[W IRUH[DPSOH
\RXFDQXVH-1',WRORRNXSDUHVRXUFHPDQDJHUFRQQHFWLRQIDFWRU\OLNH
MDYD[VTO'DWD6RXUFHDQG\RXFDQDVNWKH'DWD6RXUFHIRUDFRQQHFWLRQ
P\'DWD6RXUFHJHW&RQQHFWLRQ EXW\RXFDQ¶WPDNHD-'%&FDOORQWKH
FRQQHFWLRQUHIHUHQFH<RXFDQXVH\RXUFRQQHFWLRQLQHME&UHDWH 

 &KDSWHU
VHVVLRQEHDQOLIHF\FOH

8PJRRGWR
NQRZDOOWKDWEXW
WKLVPDWWHUVWRPH+2:"
:KDWGRHVWKLVPHDQ
WR0(DQGKRZGRHVLW
DIIHFWP\FRGH"
6KHGRHVQ·WJHWLWIRURQHWKLQJ,GRQ·WSXW
$1<7+,1*LQP\FRQVWUXFWRU2QHWLPH,WULHGWR
GRD-1',ORRNXSLQDFRQVWUXFWRUWRJHWDGDWDEDVH
UHVRXUFHIDFWRU\,WFRPSLOHGDQGGLGQ·WWKURZDQ
H[FHSWLRQGXULQJWKHORRNXSEXWDWUXQWLPHZKHQ,WULHG
WRJHWDFRQQHFWLRQLWEOHZXS7KHEHDQKDGQ·WJRWWHQLWV
VSHFLDOEHDQ-1',FDSDELOLWLHV\HWVRWKHUHVRXUFHIDFWRU\
ZDVQ·WUHDOO\WKHUH7KHUHLV127+,1*\RXZRXOGGRLQ
DFRQVWUXFWRUWKDW\RXFDQ·WGRLQHME&UHDWH LQVWHDG
0\EHVWDGYLFHLVWRWKLQNRIHME&UHDWH DVWKH
FRQVWUXFWRUIRUVHVVLRQEHDQV HQWLW\EHDQVDUH
DQRWKHUVWRU\ 

DQDVSLULQJ%HDQ3URYLGHU

WKHPRUHH[SHULHQFHG
%HDQ3URYLGHU

\RXDUHKHUH 
EHDQXVH

GRHVQRWH[LVW
*MIV=[M"
_PI\PIXXMV[).<-:KZMI\QWV

7KHRQO\UHDVRQ,FDOOHG
PHWKRGUHDG\
FUHDWH RQWKHKRPHLVVR,FRXOG
JHWDUHIHUHQFHWRDEHDQ·VFRPSRQHQW
he
ady state, tness
LQWHUIDFHDQGGRZKDW,5($//<ZDQW
m e t h o d re
In the her running a busi FDOODEXVLQHVVPHWKRG)DUDV,·P
bean is eit waiting for the
FRQFHUQHGWKDW·VWKH21/<UHDVRQ

method or all one...


WKHEHDQ·VDOLYH7RVHUYLFH
0(VR,FDQVKRS
client to c

$WODVW,·PIXOÀOOLQJ
P\GHVWLQ\0\SXUSRVH
0\UDLVRQG·rWUH 

)NTHEMETHODREADYSTATE THEBEANCANRUNBUSINESS
METHODS!NDGIVENTHATBUSINESSMETHODSARETHEBEANS
HIGHESTPURPOSE THEBEANCANBRINGALLOFITSBEANNESSTO
BEAR)NOTHERWORDS THEBEANCANDOMOREBEANTHINGS
FROMWITHINABUSINESSMETHODTHANATANYOTHERPOINTIN
ITSBRIEF BUTMEANINGFUL LIFE

:HFKDOOHQJH\RXWR¿QGDQRWKHUFRPSXWHUERRNWKDWXVHV
UDLVRQG¶rWUHDVDSSURSULDWHO\DVZHGR$QGZLWKWKDWOLWWOH
XSVLGHGRZQYWKLQJRYHUWKHrDQGHYHU\WKLQJ

 &KDSWHU
VHVVLRQEHDQOLIHF\FOH

*MIV\PQVO[aW]KIVLW_Q\PQVJ][QVM[[UM\PWL["

8VH\RXU6HVVLRQ&RQWH[WWR

‰ JHWDUHIHUHQFHWR\RXUKRPH
‰ JHWDUHIHUHQFHWR\RXU(-%REMHFW
‰ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW
‰ IRUFHDWUDQVDFWLRQWRUROOEDFN &07
EHDQV
‰ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\
EHHQVHWWRUROOEDFN &07EHDQV
‰ JHWDWUDQVDFWLRQUHIHUHQFHDQGFDOO
PHWKRGVRQLW %07EHDQV

$FFHVV
‰ \RXUVSHFLDO-1',HQYLURQPHQW
‰ DQRWKHUEHDQ·VPHWKRGV
‰ DUHVRXUFHPDQDJHU OLNHDGDWDEDVH

\RXDUHKHUH 
EHDQSDVVLYDWLRQ

HME3DVVLYDWH

PHWKRGUHDG\ SDVVLYDWHG
HME$FWLYDWH

8I[[Q^I\QWV"I[\I\MN]TJMIV¼[KPIVKM
I\[KITIJQTQ\a
$UH\RXVXUHWKLV
FDQ·WZDLWXQWLOODWHU",
ZDVULJKWLQWKHPLGGOHRI
VKRSSLQJRKZHOO,JXHVV
P\VKRSSLQJFDUWEHDQZLOO
VWLOOEHWKHUHZKHQ 7KDWFOLHQWGRHVQ·WVHHPWREH
ZH·UHGRQH GRLQJDQ\WKLQJ,W·VWRRHDUO\WRNLOO
WKHEHDQFRPSOHWHO\VKHVWLOOPLJKWFRPH
 EDFN%XW,GRQ·WZDQWWKHEHDQZDVWLQJ
5$0,·OOVHULDOL]HWKHEHDQIRUQRZDQG
LIWKHFOLHQWFRPHVEDFN,·OOMXVW
GHVHULDOL]HLW

 /RRNV
OLNH,·PEHLQJ
SDVVLYDWHGVR,EHWWHU
===
PDNHVXUH,QXOORXWP\ ===
QRQ6HULDOL]DEOHLQVWDQFH
YDULDEOHV




b e a n s a r e tied directly
StateFUL , remember, so until ut
to a client iner decides to timeoas 7HENTHE#ONTAINERDECIDESASTATEFULBEANISWASTING
the Conta(because the client w n RESOURCES ITLLCALLTHEBEANSEJB0ASSIVATE METHODAND
the bean ay too long), the bea THENSAVETHEBEANINTOTEMPORARYSTORAGE
inactive w sed for anything (or
canÕt be u e. 7HYDOYOUCAREABOUTPASSIVATIONDETAILS
anyone) els nÕt have thlis "ECAUSETHE#ONTAINERUSESASPECIALSETOFRULESNEARLY
S b e a n s d o
StateLES hey go back to a poo a IDENTICALTO3ERIALIZATION TOPASSIVATEYOURBEAN ANDITS
problem, tach method call, since YOURJOBTOMAKESUREYOURINSTANCEVARIABLESAREINASTATE
between e tied to a client. THATWORKSFORPASSIVATION!NDITSJUSTATINYBITMORESUBTLE
bean isnÕt THANSIMPLYMAKINGNON 3ERIALIZABLEVALUESTRANSIENT

 &KDSWHU
VHVVLRQEHDQOLIHF\FOH

/LIHF\FOHRYHUYLHZEHDQSDVVLYDWLRQDFWLYDWLRQ

 &OLHQWGRHVQ·WFDOODQ\PHWKRGV
IRUDZKLOHVRFRQWDLQHUFDOOV
HME3DVVLYDWH RQWKHEHDQ

EHDQ
(-%

REMHFW WH
FOLHQW DVVLYD
VWXE 3
HME

 &RQWDLQHUFDOOVHME3DVVLYDWH RQ
WKHEHDQWKHQVDYHVWKHEHDQWR
===
WHPSRUDU\VWRUDJH HLWKHUWKURXJK ===
VHULDOL]DWLRQRUVRPHWKLQJOLNHLW 

EHDQ

(-%
REMHFW EHDQLVDVOHHS
FOLHQW SDVVLYDWHGDQG
VWXE WHPSRUDULO\VDYHG

 &OLHQWFDOOVDEXVLQHVVPHWKRGVR
FRQWDLQHUDFWLYDWHVWKHEHDQ WKURXJK
VRPHWKLQJOLNHGHVHULDOL]DWLRQ FDOOV
HME$FWLYDWH WKHQLQYRNHVWKHEXVLQHVV
PHWKRG JHW$GYLFH RQWKHEHDQ H
W$GYLF
JH 

JHW$GYLFH (-%
EHDQ
JHW$GYLFH  WH
FOLHQW 
REMHFW
$FWLYD
VWXE HME 

\RXDUHKHUH 
EHDQSDVVLYDWLRQ

WKHUH DUH QR
'XPE 4XHVWLRQV
Q: (OWDOESTHE#ONTAINER Q: 7HATIFTHECLIENTCRASHES
KNOWWHENTOPASSIVATEABEAN #ANTHESERVERTELL)STHEREANY
KINDOFDISTRIBUTEDGARBAGECOL
A: 4HE#ONTAINERLOOKSFORINAC
LECTIONORLEASINGLIKETHEREISWITH
2-)/RISTHESERVERREALLYJUST
TIVITY)FTHECLIENTHASNTBEENDOING BASINGEVERYTHINGONINACTIVITY
ANYTHINGFORSOMEPERIODOFTIME
THE#ONTAINERCANCHOOSETOPASSIV
ATETHEBEAN)FITNEEDSTO A: !CCORDINGTOTHESPEC THERE
ISNOGUARANTEEOFDISTRIBUTEDGAR
Q: 'EECANYOUBEANYMORE BAGECOLLECTION WHICHMEANSYOU
SHOULDASSUMETHATITISNTHAPPEN
NON COMMITTAL(OWLONGIS
hSOMEPERIODOFTIMEvANDWHAT ING0ARTOFTHEREASONISBECAUSEAN
%*"CLIENTCOULDATLEASTINTHEORY
DETERMINESWHETHERTHE#ONTAINER
BEA#/2"!CLIENTRATHERTHANA*AVA
@NEEDSTOPASSIVATETHEBEAN
2-)CLIENT3OTHEWHOLECONCEPTOF
2-)SDISTRIBUTEDGARBAGECOLLECTION
A: 4HEREISNOTHINGINTHESPEC
WOULDNTAPPLY
!NDJUSTAQUICKOFF PATHHERE
THATSAYSYOUREALLOWEDTOTUNE
THEPARAMETERSFORTHE#ONTAINERS DISTRIBUTEDGARBAGECOLLECTIONDGC 7KHUH¶VQRWKLQJRQWKH
PASSIVATIONDECISIONS"UTMANY ORDISTRIBUTEDLEASINGAREWAYSIN H[DPDERXWYHQGRU
CONTAINERSDOGIVEYOUAWAYTO WHICHASERVERCANFIGUREOUTIF VSHFL¿FSDVVLYDWLRQ
SETAVARIETYOFVALUES4HEDECISION ACLIENTHASWITHDGC NULLEDOUT VHWWLQJVRUEHKDYLRU
MIGHTBEBASEDONAVAILABILITYOFRE THEIRREFERENCETOTHESTUB ORWITH
SOURCES LIKE hPASSIVATESTATEFULSES LEASING IFTHECLIENTHASSIMPLYGONE 7KHRQO\WKLQJRQWKHH[DPDERXW
SIONBEANSONLYWHENAVAILABLE2!- AWAY EITHERBYSHUTTINGDOWNTHE SDVVLYDWLRQLVZKDW\RX¶UHUHVSRQVLEOH
HITSTHISLEVELvOR hPASSIVATEBEANS APP CRASHING ORDISCONNECTINGFROM IRUDVD%HDQ3URYLGHU²JHWWLQJ
ONLYWHENTHENUMBEROFACTIVE THENETWORK \RXULQVWDQFHYDULDEOHYDOXHVLQD
STATEFULSESSIONBEANSREACHESv SDVVLYDWDEOHVWDWH ZH¶OOWDONDERXW
4HEBOTTOMLINEISTHATYOUHAVETO WKDWQH[W 1RWKLQJDERXWSDVVLYDWLRQ
!NDYOUMIGHTBEABLETOSETTHE ASSUMETHATTHE%*"SERVERDOESNT JRHVLQWRWKHGHSOR\PHQWGHVFULSWRU
INACTIVITYVALUEFORTHEAMOUNTOF SUPPORTTHIS SOYOURESTUCKWITH VR\RXGRQ¶WQHHGWRNQRZKRZ
ELAPSEDTIMEATWHICHTHE#ONTAINER INACTIVITYANDPERHAPSSOMEKINDOF SDVVLYDWLRQSDUDPHWHUVDUHVHWIRU
SHOULDPASSIVATE ,25,EAST2ECENTLY5SED ALGO DQ\SDUWLFXODUVHUYHU
RITHMSFORSELECTINGWHOSHOULD
BEPASSIVATEDIFRESOURCESBECOME
SCARCEANDTHE#ONTAINERNEEDSTO
BRINGDOWNSOMEBEANS

 &KDSWHU
VHVVLRQEHDQOLIHF\FOH

AW]ZRWJNWZXI[[Q^I\QWV"
UISMaW]Z[\I\MXI[[Q^I\IJTM

:KHQ,ZULWHP\EHDQFODVV,
KDYHWRPDNHVXUHWKDWE\WKH
WLPHHME3DVVLYDWH FRPSOHWHVP\
LQVWDQFHYDULDEOHYDOXHVDUH$//UHDG\
IRUSDVVLYDWLRQ7KDWPHDQVWKHYDOXHV
KDYHWREH6HULDOL]DEOH RUSULPLWLYH QXOO
RUUHIHUHQFHVWRRQHRIWKHVSHFLDO
WKLQJVWKH&RQWDLQHUKDVWRWDNH :KHQHME3DVVLYDWH FRPSOHWHVHYHU\QRQWUDQVLHQWLQVWDQFH
FDUHRIQRPDWWHUZKDW YDULDEOH0867EHDUHIHUHQFHWRRQHRIWKHIROORZLQJ

ƒ D6HULDOL]DEOHREMHFW
ƒ DQXOOYDOXH
ƒ DEHDQ·VUHPRWHFRPSRQHQWRUKRPHLQWHUIDFHHYHQLIWKHVWXE
FODVVLVQRW6HULDOL]DEOH LQRWKHUZRUGV\RXGRQ·WKDYHWRZRUU\
DERXWLW
ƒ DEHDQ·VORFDOFRPSRQHQWRUKRPHLQWHUIDFHHYHQLILW·VQRW
6HULDOL]DEOH DJDLQ\RXGRQ·WKDYHWRZRUU\
ƒ D6HVVLRQ&RQWH[WREMHFWHYHQLILW·VQRW6HULDOL]DEOH
ƒ WKHEHDQ·VVSHFLDO-1',FRQWH[WRUDQ\RILWVVXEFRQWH[WV
ƒ WKH8VHU7UDQVDFWLRQLQWHUIDFH VRPHWKLQJ\RXFDQJHWIURP\RXU
6HVVLRQ&RQWH[W³ZH·OOVHHWKDWLQWKHWUDQVDFWLRQVFKDSWHU
ƒ DUHVRXUFHPDQDJHUFRQQHFWLRQIDFWRU\ OLNHDQLQVWDQFHRI
MDYD[VTO'DWD6RXUFH

<RXKDYHWR
NQRZWKHVH
IRUWKHH[DP
WKDW
<RXPLJKWVHHDTXHVWLRQ
VKRZV\RXDFODVVD QG DQ
DVNV
HME3DVVLYDWH PHWKRGDQG
WZRXOGZ RUN RUQRW 
\RXLIL
KDYH
,IWKHPHWKRGLVHPSW\\RX
LQV WDQFH YDU LDEOHVWR
WRORRNDWWKH
LIWKH\¶UHDOO2. DVWKH \DUH
VHH

\RXDUHKHUH 
DFWLYDWLRQSDVVLYDWLRQ

,PSOHPHQWLQJHME$FWLYDWH DQGHME3DVVLYDWH 

HME3DVVLYDWH
0DNHVXUH\RXULQVWDQFHYDULDEOHVDUHUHDG\IRUSDVVLYDWLRQ0RVW
RIWKHWLPH\RXSUREDEO\ZRQ·WKDYHDQ\FRGHLQHME3DVVLYDWH VLPSO\
EHFDXVHDOORI\RXULQVWDQFHYDULDEOHVPHHWWKHFULWHULDGHILQHGRQWKH
SUHYLRXVSDJH HJUHIHUHQFHWRD6HVVLRQ&RQWH[WRUDEHDQ·VFRPSRQHQW
LQWHUIDFHRUD6HULDOL]DEOHREMHFWHWF 

SXEOLFYRLGHME3DVVLYDWH ^
FRQQHFWLRQ QXOO ection is not
` a JDBC con, nso if you have one, you
Serializable to null in ejbPassivate()
must set it

HME$FWLYDWH
5HDFTXLUH\RXUQRQ6HULDOL]DEOHUHVRXUFHVRUGRZKDWHYHULWWDNHV
WRUHVWRUH\RXUVWDWHIRUXVH,I\RX·UHUXQQLQJLQHME$FWLYDWH WKHUH
FDQEHRQO\RQHUHDVRQWKHFOLHQWFDOOHGDEXVLQHVVPHWKRG6RLQ\RXU
HME$FWLYDWH PHWKRG\RXPXVWPDNHVXUH\RXJHWUHDG\IRUWKHEXVLQHVV
PHWKRGFDOOWKDW·VDERXWWRKDSSHQ&KDQFHVDUHWKLVPHWKRGZLOOEH
HPSW\IRUWKHVDPHUHDVRQDVHME3DVVLYDWH %XWLI\RXGLGQXOORXWQRQ
6HULDOL]DEOHUHIHUHQFHVWKHQHME$FWLYDWH LVWKHSODFHWRJHWWKHPEDFN

SXEOLFYRLGHME$FWLYDWH ^
WU\^
FRQQHFWLRQ P\'DWD6UFJHW&RQQHFWLRQ 
`FDWFK ([FHSWLRQH[ ^`
`
now we have to get the JDBC connecti back
that the DataSource did not have to beonrest again. Notice
ored
itÕs one of the things on the ContainerÕs Òapp , because
(Because itÕs a resource manager connection roved listÓ.
Container is required to passivate it.) factory, and the

 &KDSWHU
VHVVLRQEHDQOLIHF\FOH

WKHUH DUH QR 6KDUSHQ \RXU SHQFLO


'XPE 4XHVWLRQV
Q: #ANTYOUJUSTMARKYOURNON 3ERIALIZABLEVARIABLES
TRANSIENT)SNTTHATWHATTRANSIENTISFOR <RX·UHUHVSRQVLEOHIRUPDNLQJVXUHWKDWZKHQ
HME3DVVLYDWH FRPSOHWHV\RXULQVWDQFH
A: 9OUCOULD YES BECAUSETHE#ONTAINERISREQUIREDTO
YDULDEOHVDUHLQRQHRIWKHVWDWHVZHOLVWHGD
FRXSOHRISDJHVDJR'RQ·WORRNQRZ6HHLI
FOLLOWTHERULESFOR3ERIALIZATIONWHENITPASSIVATESABEAN
\RXFDQZRUNRXWZKLFKRIWKHVHZLOOEHVDIHO\
EVENIFTHE#ONTAINERCHOOSESTOUSESOMETHINGOTHERTHAN
SERIALIZATIONTOGETTHEJOBDONE 
SDVVLYDWHG

"UTTHERESALITTLETEENYCOMMENTINTHESPECWHICH
SAYSTHATTHERESANEXCEPTIONTOTHERULETHATPASSIVATION ‰ UHIHUHQFHWRDMDYDQHW6RFNHWREMHFW
BEHAVEJUSTLIKESERIALIZATION4HEEXCEPTIONISTHATWHILE
SERIALIZATIONISREQUIREDTOBRINGBACKTRANSIENTFIELDSWITH ‰ UHIHUHQFHWRDMDYD[VTO'DWD6RXUFH
DEFAULTVALUES PASSIVATIONDOESNTGUARANTEETHAT
7HATDOESTHISMEAN4HINKABOUTIT)TMEANSYOUCANT ‰ UHIHUHQFHWRDEHDQ·V5HPRWHFRPSRQHQW
RELYONTRANSIENTTOGIVEYOUBACKYOURDEFAULTS SOAFTER LQWHUIDFH
ACTIVATION YOUCOULDENDUPWITH WELL ANYTHINGINA
VARIABLETHATSMARKEDTRANSIENT ‰ UHIHUHQFHWRDEHDQ·V-1',FRQWH[W
3O YOUAREFREETOUSETRANSIENT ANDITCANMAKEPASSIVATION
MOREEFFICIENT BUTTHEIMPLICATIONISˆRESETYOURTRANSIENT ‰ UHIHUHQFHWRDMDYDVTO&RQQHFWLRQ
VARIABLESYOURSELF INEJB!CTIVATE 
‰ UHIHUHQFHWRDMDYD[HME6HVVLRQ&RQWH[W
Q: 7HATIF)HAVEANON 3ERIALIZABLEVALUETHAT)REALLY
REMHFW
NEEDTOMAINTAINDURINGPASSIVATION)F)CANTSAVEIT HOW ‰ DWUDQVLHQWYDULDEOHZLWKDQXOOYDOXH
WILL)KNOWWHATTOSETITBACKTOINEJB!CTIVATE 
‰ DQRQWUDQVLHQW6HULDOL]DEOHYDULDEOHZLWK
A: 4HISISACLASSICSERIALIZATIONISSUE NOTSPECIFICTO
DQXOOYDOXH
PASSIVATION4HEUSUALTRICKISTOINTERROGATETHENON
3ERIALIZABLEOBJECTTOGETALLTHEIMPORTANTSTATEOUTOF ‰ DWUDQVLHQWYDULDEOHZLWKDQRQQXOOYDOXH
IT ANDSTICKTHATSTATEINTOINSTANCEVARIABLESTHATARE
3ERIALIZABLE4HENDURINGEJB!CTIVATE USETHEVALUESYOU ‰ DQRQWUDQVLHQWQRQ6HULDOL]DEOHYDULDEOH
WEREABLETOSAVETORECONSTRUCTTHENON 3ERIALIZABLEOBJECT ZLWKDQXOOYDOXH
SOTHATITSIDENTICALTOTHEONEYOUHADBEFOREPASSIVATION
&OREXAMPLE IMAGINEYOUHAVEA$OGBEANWITHA#OLLAR ‰ DQRQWUDQVLHQWQRQ6HULDOL]DEOHYDULDEOH
VARIABLE ANDTHE#OLLARISNT3ERIALIZABLE)NEJB0ASSIVATE ZLWKDQRQQXOOYDOXH
CALLGETTERSONTHE#OLLARTORETRIEVETHEVALUESTHATMATTER
LIKEGET#OLOR GET3IZE ETC 3AVETHOSEVALUESININSTANCE
VARIABLESINTHEBEAN THENINEJB!CTIVATE INSTANTIATEANEW
#OLLARANDUSETHE#OLLARATTRIBUTESYOUSAVEDASARGUMENTS :HZHUHJRLQJIRUDSHUVRQDOEHVW 3% LQWKH
TOSETTERSONTHENEW#OLLAROBJECT QXPEHURIWLPHVLQZKLFKZHFRXOGXVHWKH
ZRUG¶QRQ·LQDVLQJOHVWDWHPHQW

\RXDUHKHUH 
SDVVLYDWLRQDQGWUDQVDFWLRQV

,ZRXOGPDUU\WKLVPDQLIRQO\
KHZDVQRWVXFKDQLGLRWDERXW
VWDWHIXOVHVVLRQEHDQVFDODELOLW\
+HOHWVKLVVWDWHIXOEHDQVVWD\LQRSHQ
WUDQVDFWLRQV(YHQ%REP\ORVHUH[
ER\IULHQGNQRZVWKDWVHVVLRQEHDQV
LQDWUDQVDFWLRQFDQQHYHUEH
SDVVLYDWHG

:$51,1*
$VWDWHIXOVHVVLRQ
EHDQZLOO1(9(5EH
SDVVLYDWHGZKLOH
WKHEHDQLVVWLOOLQD
WUDQVDFWLRQ

,KDYHEHHQ
VLWWLQJKHUHOLNH
IRUHYHUZDLWLQJIRUWKLV
VWXSLGWUDQVDFWLRQWR
ÀQLVK

7KHVSHFOHWV\RXEHJLQDWUDQVDFWLRQLQRQHPHWKRGRIDVWDWHIXO
VHVVLRQEHDQEXWHQGWKHPHWKRGZLWKRXWHQGLQJWKHWUDQVDFWLRQ
7KLVLVDOPRVWDOZD\VDUHDOO\VWXSLGWKLQJWRGR)RUVWDUWHUV\RX
FRXOGQHYHUJXDUDQWHHWKDWMXVWEHFDXVHDFOLHQWFDOOVWKHPHWKRG
WKDWEHJLQVWKHWUDQVDFWLRQWKHFOLHQWZLOODWVRPHSRLQWFDOOWKH
PHWKRGWKDWHQGVWKHWUDQVDFWLRQ LQHLWKHUDFRPPLWRUUROOEDFN 
%XWWKHPDLQUHDVRQLVWKDWWKHORQJHU\RXUWUDQVDFWLRQVWKHEHWWHU
\RXUFKDQFHVRIEULQJLQJ\RXUVHUYHUWRLWVNQHHV DQGWKDWKROGV
UHJDUGOHVVRIWKHEHDQW\SH )RUVWDWHIXOVHVVLRQEHDQVOHDYLQJD
WUDQVDFWLRQRSHQPHDQVWKHEHDQZLOOQRWEHSDVVLYDWHGQRPDWWHU
KRZORQJLW·VEHHQVLQFHWKHFOLHQWGLGDQ\WKLQJZLWKLW:H·OOORRNDW
WKLVPRUHLQWKHWUDQVDFWLRQVFKDSWHUEXWIRUQRZXQGHUVWDQGWKDW
VWDWHIXOEHDQVLQDWUDQVDFWLRQZRQ·WEHSDVVLYDWHG

 &KDSWHU
VHVVLRQEHDQOLIHF\FOH

*MIV\PQVO[aW]KIVLWQVMRJ)K\Q^I\MIVLMRJ8I[[Q^I\M

HME3DVVLYDWH HME$FWLYDWH

8VH\RXU6HVVLRQ&RQWH[WWR 8VH\RXU6HVVLRQ&RQWH[WWR

‰ JHWDUHIHUHQFHWR\RXUKRPH ‰ JHWDUHIHUHQFHWR\RXUKRPH
‰ JHWDUHIHUHQFHWR\RXU(-%REMHFW ‰ JHWDUHIHUHQFHWR\RXU(-%REMHFW
‰ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW ‰ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW
‰ IRUFHDWUDQVDFWLRQWRUROOEDFN &07 ‰ IRUFHDWUDQVDFWLRQWRUROOEDFN &07
EHDQV EHDQV
‰ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\ ‰ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\
EHHQVHWWRUROOEDFN &07EHDQV EHHQVHWWRUROOEDFN &07EHDQV
‰ JHWDWUDQVDFWLRQUHIHUHQFHDQGFDOO ‰ JHWDWUDQVDFWLRQUHIHUHQFHDQGFDOO
PHWKRGVRQLW %07EHDQV PHWKRGVRQLW %07EHDQV

$FFHVV $FFHVV
‰ \RXUVSHFLDO-1',HQYLURQPHQW ‰ \RXUVSHFLDO-1',HQYLURQPHQW
‰ DQRWKHUEHDQ·VPHWKRGV ‰ DQRWKHUEHDQ·VPHWKRGV
‰ DUHVRXUFHPDQDJHU OLNHDGDWDEDVH ‰ DUHVRXUFHPDQDJHU OLNHDGDWDEDVH

\RXDUHKHUH 
EHDQUHPRYDO

*MIV:MUW^IT"
_PMVJMIV[LQM

EHDQWKURZVV\VWHPH[FHSWLRQ
GRHVQRWH[LVW XQFKHFNHGXQFDXJKW
$VDVWDWHIXOEHDQ
,·PDSHUVRQDOVODYHWR
WKHFOLHQWDQGZKHQVKH·VGRQH
ZLWKPH,·PWRVVHGRXWOLNH
HME5HPRYH
VRPDQ\$2/GLVNV6RPHWLPHV
RUWLPHRXW
WKH\GRQ·WHYHQOHWPHVD\ WLPHRXW
JRRGE\H
PHWKRGUHDG\ SDVVLYDWHG

$VHVVLRQEHDQVWRSVH[LVWLQJIRU
RQHRIWKUHHUHDVRQV

WKHFOLHQWFDOOVUHPRYH
WKHEHDQWLPHVRXW
WKHEHDQWKURZVDV\VWHPH[FHSWLRQ

%XWWKHUH·VDQRWKHUTXHVWLRQWRDVNZKHQWKHEHDQWLPHV
RXWZDVLWDFWLYHRUSDVVLYH",IWKHEHDQLVDFWLYHWKH
&RQWDLQHUGHDOVZLWKLWLQWKHVDPHZD\LWGHDOVZLWKFOLHQW
UHPRYH FDOOV³WKHEHDQJHWVDQHME5HPRYH FDOODQGLV
WKHQNLOOHG%XWLIWKHEHDQZDVSDVVLYDWHGZKHQLWWLPHVRXW
WKH&RQWDLQHUVHQGVLWVWUDLJKWWRWKHGRHVQRWH[LVWVWDWH
ZLWKRXWFDOOLQJHME5HPRYH 

 &KDSWHU
VHVVLRQEHDQOLIHF\FOH

/LIHF\FOHRYHUYLHZUHPRYLQJDVWDWHIXOEHDQ
&OLHQWFDOOVUHPRYH RQDQDFWLYH LHQRQSDVVLYDWHG EHDQ

 &OLHQWFDOOVUHPRYHRQWKH
FRPSRQHQWLQWHUIDFH RUFDOOV
WKHUHPRYH PHWKRGLQWKHKRPH
LQWHUIDFHWKDWWDNHVD+DQGOH 

EHDQ
UHPRYH (-%
UHPRYH REMHFW
FOLHQW
VWXE

 &RQWDLQHUFDOOVHME5HPRYH 
RQWKHEHDQ

EHDQ
(-%

REMHFW YH
FOLHQW
VWXE E5HPR
HM

 &RQWDLQHU´NLOOVµWKHEHDQDQG(-%
REMHFW DVVXPHWKH\·UHQRZHOLJLEOH
IRUJDUEDJHFROOHFWLRQ 7KHFOLHQW
ZLOOJHWDQH[FHSWLRQLIVKHWULHVWR
XVHWKHVWXEDJDLQ

FOLHQW

PLJKWVWLOOEHKHU
HEXW
ZLOOQRORQJHUZRU
N

\RXDUHKHUH 
EHDQUHPRYDO

/LIHF\FOHRYHUYLHZUHPRYLQJDVWDWHIXOEHDQ
%HDQWLPHVRXWZKLOHDFWLYH

 &OLHQWGRHVQ·WPDNHDQ\FDOOVWRWKH
EHDQ·VFRPSRQHQWLQWHUIDFHIRUD
ORQJWLPH ZKDWHYHUWKH&RQWDLQHU
FRQVLGHUVD´ORQJµWLPH 

EHDQ
(-%
REMHFW
FOLHQW
VWXE

1RDFWLYLW\

 &RQWDLQHUGHFLGHVWRNLOOWKH
EHDQDQGFDOOVHME5HPRYH 
RQWKHEHDQ

EHDQ
(-%

FOLHQW
REMHFW
HPRYH
VWXE 5
HME

 &RQWDLQHU´NLOOVµWKHEHDQDQG(-%
REMHFW DVVXPHWKH\·UHQRZHOLJLEOH
IRUJDUEDJHFROOHFWLRQ 7KHFOLHQW
ZLOOJHWDQH[FHSWLRQLIVKHWULHVWR
XVHWKHVWXEDJDLQ

FOLHQW

PLJKWVWLOOEHKHU
HEXW
ZLOOQRORQJHUZRU
N

 &KDSWHU
VHVVLRQEHDQOLIHF\FOH

/LIHF\FOHRYHUYLHZUHPRYLQJDVWDWHIXOEHDQ
%HDQWLPHVRXWZKLOHSDVVLYDWHG

 7KHFOLHQWGRHVQ·WFDOODQ\PHWKRGV
RQWKHEHDQ·VFRPSRQHQWLQWHUIDFH
IRUDORQJWLPH$)7(5WKHEHDQKDV ===
===
DOUHDG\EHHQSDVVLYDWHG

EHDQ

(-%
REMHFW
FOLHQW
VWXE
1RDFWLYLW\

 &RQWDLQHUGHFLGHVWRNLOOWKHEHDQ
EXWGRHV127FDOOHME5HPRYH 
===
===

EHDQ
(-%
RJF
REMHFW
FOLHQW GW
VWXE
VHQ
HYHU
WK HEHDQQ 
<,.( 6  YH FDOO
WVDQ HME5HPR
JH

 &RQWDLQHU´NLOOVµWKHEHDQDQG(-%
REMHFW DVVXPHWKH\·UHQRZHOLJLEOH
IRUJDUEDJHFROOHFWLRQ 7KHFOLHQW
ZLOOJHWDQH[FHSWLRQLIVKHWULHVWR
XVHWKHVWXEDJDLQ

FOLHQW

PLJKWVWLOOEHKHU
HEXW
ZLOOQRORQJHUZRU
N

\RXDUHKHUH 
EHDQUHPRYDO

/LIHF\FOHRYHUYLHZUHPRYLQJDVWDWHIXOEHDQ
%HDQWKURZVDV\VWHPH[FHSWLRQ

 7KHEHDQWKURZVDV\VWHP
XQFKHFNHG H[FHSWLRQZKLOH ([FHSWLRQ
H[HFXWLQJDPHWKRG

(-% EHDQ
REMHFW
FOLHQW
VWXE

 &RQWDLQHUGHFLGHVWRNLOOWKHEHDQ
EXWGRHV127FDOOHME5HPRYH 

(-% EHDQ
RJF
REMHFW
FOLHQW GW
VWXE
VHQ

 &RQWDLQHU´NLOOVµWKHEHDQDQG(-%
REMHFW DVVXPHWKH\·UHQRZHOLJLEOH
IRUJDUEDJHFROOHFWLRQ 7KHFOLHQW
ZLOOJHWDQH[FHSWLRQLIVKHWULHVWR
XVHWKHVWXEDJDLQ

FOLHQW

PLJKWVWLOOEHKHU
HEXW
ZLOOQRORQJHUZRU
N

 &KDSWHU
VHVVLRQEHDQOLIHF\FOH

+WUXTIQV\[IJW]\JMIVZMUW^IT

:K\ZRXOG\RX
JHWULGRIP\EHDQ
ZLWKRXWZDLWLQJIRUPH
WRFDOOUHPRYH "7KDW
LVVRUXGH +RZDP,VXSSRVHGWR
NQRZ\RX·UHFRPLQJEDFN",I,
GRQ·WXVHWLPHRXWVEHIRUHORQJ,·OOEH
)8//RIUXVW\ROGDEDQGRQHGVKRSSLQJ
FDUWV6RRQHURUODWHU,KDYHWR
DVVXPHWKDW\RX·UHQHYHUFRPLQJ
EDFN6RUU\EXW,UHDOO\
KDYHQRFKRLFH

,GRQ·WVHHZK\ \RX )LUVWRIDOO\RXKRQHVWO\H[SHFWPHWREULQJ


FDQ·WFDOOHME5HPRYH  DEHDQ287RISDVVLYDWLRQMXVWWRNLOOLW"7DON
DERXWDZDVWHRIRYHUKHDG6KHHVK\RXVKRXOG
RQDEHDQZKHQ\RX·UHJRLQJWR
NQRZEHWWHULI\RXFDUHDERXWSHUIRUPDQFH$QG
NLOOLWUHJDUGOHVVRIWKHUHDVRQ
LW·VQRWWKDWELJRIDGHDOMXVWSXW\RXUFOHDQXSFRGHLQ
:KDWJRRGLVHME5HPRYH IRU
ERWKHME5HPRYH $1'HME3DVVLYDWH DQG\RX·UHVDIH
SXWWLQJLQFOHDQXSFRGHLILW $QGZLWKH[FHSWLRQVWKLQNDERXWLWGR\RXUHDOO\ZDQW
PLJKWQRWEHFDOOHG" WRUXQ\RXUFOHDQXSFRGHRQDEHDQZKRVHVWDWHFRXOG
EHVHULRXVO\FRUUXSWDWWKLVSRLQW",IDEHDQWKURZV
DV\VWHPH[FHSWLRQ,·PMXVWJRQQDORJLWDQG
SXWLWRXWRILWVPLVHU\

\RXDUHKHUH 
LPSOHPHQWLQJHME5HPRYH

,PSOHPHQWLQJHME5HPRYH

HME5HPRYH
5HOHDVHDQ\UHVRXUFHVRUGRZKDWHYHUFOHDQXS\RXQHHGWRGREH
IRUHWKHEHDQGLHVIRUHYHU0XFKRIWKHWLPH\RXUHME5HPRYH PHWKRG
ZLOOEHHPSW\EHFDXVHLI\RXUEHDQGRHVXVHUHVRXUFHVLWPRVWOLNHO\ZLOO
DFTXLUHDQGUHOHDVHWKHUHVRXUFHVLQHDFKEXVLQHVVPHWKRG%XWLI\RXU
GHVLJQGRHVFDOOIRUNHHSLQJUHVRXUFHVRSHQWKURXJKRXWWKHEHDQ·VOLIH
WKHQ\RXQHHGWRIUHHWKHPXSKHUH

SXEOLFYRLGHME5HPRYH ^
ces
WU\^
to g r a ce ful ly close resour
P\5HVRXUFHFORVH  if you wantill open, do it here !
`FDWFK ([FHSWLRQH[ ^` that are st
`
DQDOWHUQDWLYH
&DOODFOHDQ8S PHWKRGIURPERWKHME3DVVLYDWH DQGHME5HPRYH 
*LYHQWKDW\RXUEHDQFRXOGEHUHPRYHGZLWKRXWDQHME5HPRYH FDOOLILW
WLPHVRXWZKLOHSDVVLYDWHG\RXVKRXOGKDYHERWK\RXUHME3DVVLYDWH DQG
HME5HPRYH PHWKRGVSHUIRUPWKHVDPHFOHDQXS6LQFHVFDUFHV\VWHP
UHVRXUFHVDUHVHOGRP6HULDOL]DEOHDQ\ZD\\RX·UHSUREDEO\DOUHDG\WDNLQJ
FDUHRIWKHPLQHME3DVVLYDWH 

SXEOLFYRLGHME5HPRYH ^
WKLVFOHDQ8S 
` now both ejbRemov )
do the same thing, e(so
and ejbPassivate() will
SXEOLFYRLGHME3DVVLYDWH ^ ev
while passivated, you do en if you time out
WKLVFOHDQ8S  nÕt have to worry.
`

SULYDWHYRLGFOHDQ8S ^
WU\^
P\5HVRXUFHFORVH 
`FDWFK ([FHSWLRQH[ ^`
`

 &KDSWHU
VHVVLRQEHDQOLIHF\FOH

0LVVHGHME5HPRYH FDOOV

:DLWDPLQXWHWKHUH·V
VWLOOVRPHWKLQJZURQJKHUH
:KDWKDSSHQVLIWKHEHDQWKURZV :HOOXP\HV<HV\RXFRXOGVWLOO
DQH[FHSWLRQ"7KHQ,VWLOOZRQ·W EHLQWURXEOHLQWKDWFDVH%XWWKLVLVUHDOO\<285
UHVSRQVLELOLW\WRGHDOZLWK/HW·VVD\\RXWHPSRUDULO\
JHWP\FOHDQXSFRGHWRUXQ
VDYHVRPHRQH·VVKRSSLQJLQIRWRDGDWDEDVHVRWKDWLI
:RQ·W,VWLOOJHWLQWRWURXEOH"
WKHVHUYHUFUDVKHVZKLOHWKHSHUVRQ·VVKRSSLQJ\RXKDYHD
PHDQVRIVWLOOUHFRYHULQJWKHLUFDUW XQWLOWKHEHDQWLPHVRXW ,Q
HME5HPRYH \RX·GGHOHWHWKHURZLQWKHGDWDEDVHIRUWKLVFOLHQW
%XWVLQFH\RXPLJKWQRWJHWWKDWHME5HPRYH FDOOVRRQHURU
ODWHU\RX·UHJRQQDQHHGVRPHZD\WRJRWKURXJKDQGGRSHULRGLF
FOHDQXSVRQWKDWGDWD7KHUH·VQRWKLQJLQWKHVSHFWKDWFDQ
KHOS\RXKHUH,W·VXSWR<28WRGHDOZLWKWKHSRWHQWLDO
FRQVHTXHQFHVRIPLVVHGHME5HPRYH FDOOV

<RXPXVWEHDEOHWR
UHFRJQL]HVFHQDULRVL
Q
:DWFKLW ZKLFKHME5HPRYH ZLOO
EHPLVVHG 
QRZWKDWWKHUHDUH
7KHH[DPH[SHFWV\RXWRN
ZKLFKDEHDQZLOO
WKUHHFLUFXPVWDQFHVXQGHU
DOO
127JHWDQHME5HPRYH F

6HUYHUFUDVKHV
VLYDWHG
%HDQWLPHVRXWZKLOHSDV
VWH PH[FH SWLRQ
%HDQWKURZVDV\
XUFOHDQXSFRGH
,IDQ\RIWKHVHKDSSHQ\R
OORZ WKH VXJJHVWLRQVRQ
ZLOOQRWUXQ,I\RXIR
FOHDQXSFRGHLQ
WKHSUHYLRXVSDJHDQGSXW
ME5 HPRYH WKHQ
ERWKHME3DVVLYDWH DQGH
.IR USUREO HP  WLPHRXW
\RX¶UHSUREDEO\2
OOVWLOOKDYHWRGHDO
ZKLOHSDVVLYDWHG EXW\RX¶
DQ V\VWHPH[FHSWLRQ
ZLWKDVHUYHUFUDVKRUEH
REYLRXVTXHVWLRQ
$QGGRQ¶WH[SHFWDVLPSOH
QH ME5HPRYH LI
OLNH³:LOODEHDQPLVVD
WLRQLVWKUR ZQ "´<RXPLJKW
DV\VWHPH[FHS
VFHQDULRIRU
KDYHWRFRQVLGHUDGHVLJQ
XWLIWK HUHFRXOGEHD
H[DPSOHDQG¿JXUHR
RQ\RX UNQ RZ OHGJHRIPLVVHG
SUREOHPEDVHG
HME5HPRYH PHWKRGFDOOV

\RXDUHKHUH 
HME5HPRYH EHDQWKLQJV

*MIV\PQVO[aW]KIVLWQVMRJ:MUW^M

8VH\RXU6HVVLRQ&RQWH[WWR

‰ JHWDUHIHUHQFHWR\RXUKRPH 7KHEHDQWKLQJV\RXFDQ
‰ JHWDUHIHUHQFHWR\RXU(-%REMHFW GRLQHME5HPRYH DUH
‰ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW H[DFWO\WKHVDPHDVWKH
‰ IRUFHDWUDQVDFWLRQWRUROOEDFN &07 EHDQWKLQJV\RXFDQGRLQ
EHDQV
 ‡HME&UHDWH
‰ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\
EHHQVHWWRUROOEDFN &07EHDQV  ‡HME3DVVLYDWH
‰ JHWDWUDQVDFWLRQUHIHUHQFHDQGFDOO
PHWKRGVRQLW %07EHDQV
 ‡HME$FWLYDWH

$FFHVV
‰ \RXUVSHFLDO-1',HQYLURQPHQW
‰ DQRWKHUEHDQ·VPHWKRGV
‰ DUHVRXUFHPDQDJHU OLNHDGDWDEDVH

 &KDSWHU
VHVVLRQEHDQOLIHF\FOH

1UXTMUMV\QVO\PM)L^QKM*MIVI[I[\I\M.=4JMIV

3OFAR THE!DVICE"EANWEVEWRITTENHASNT <PQVO[aW]KIVILLQN\PMJMIVQ[[\I\M.=4


NEEDEDTOBESTATEFUL)TDOESNTKEEPORUSE
ANYCLIENT SPECIlCSTATE SOITDOESNTNEEDA
CREATE METHODWITHARGUMENTS"UTWHATIF  <RXFDQKDYHPRUHWKDQRQHFUHDWHPHWKRG
WEDIDWANTTOMAKEITASTATEFULBEAN7HATIF
THEBUSINESSLOGICNEEDEDTO SAY KEEPARECORD
OFTHECONVERSATIONITSHAVINGSOTHATITNEVER  7KHFUHDWHPHWKRGFDQKDYHDUJXPHQWV
GIVESOUTTHESAMEADVICEMORETHANONCEINA
SESSION%VENIFTHECHOICEOFANADVICESTRINGIS
PURELYRANDOM IFYOUWANTTOENSURETHEADVICE  7KHEHDQFDQEHSDVVLYDWHGVR\RX
ISNTREPEATEDDURINGASESSION YOULLHAVETO FDQZULWHFRGHLQHME3DVVLYDWH DQG
KEEPTRACKOFITINANINSTANCEVARIABLE HME$FWLYDWH 

!NDYOUMIGHTHAVEOTHERCHANGES TOO LIKE


MAKINGTHECREATEMETHODSTAKEARGUMENTSTHAT
WKHUH DUH QR
CONTAINTHETYPEOFADVICETHECLIENTISLOOKING
FOR ORSOMEOTHERKINDOFPREFERENCE)NTHAT
'XPE 4XHVWLRQV
CASE EACHTIMETHECLIENTMADEAMETHODCALL
YOUDWANTTOCHECKTHESTATUSOFTHATCLIENT Q: 7HATHAPPENSIFYOUPUTCODEINEJB0ASSIVATE OR
SUPPLIEDCREATIONINITIALIZATIONPREFERENCE EJB!CTIVATE ANDTHEBEANISSTATE,%337ILLITCOMPILE
ANDTAILORYOURADVICEBASEDONTHEVALUESET 7ILLITDEPLOY
DURINGTHEBEANSEJB#REATE ,ATERINTHE
BOOK WELLLOOKATAMOREELABORATEVERSIONOF
THIS!DVICE"EAN BUTFORNOW WELLMAKEJUSTA
A: 9OUCANCERTAINLYPUTCODEINEJB!CTIVATE OR
EJB0ASSIVATE REGARDLESSOFWHETHERTHEBEANISSTATELESS
SUBTLECHANGETOMAKETHEBEANSTATEFUL ORSTATEFUL EVENTHOUGHITWILLNEVERBECALLEDIFTHEBEAN
ISSTATELESS
4HINKABOUTIT,OOKATTHE3ESSION"EANINTERFACE.OTICE
THATTHEREISNTASEPARATE3TATEFUL3ESSION"EANINTERFACE
YiX`e AND3TATELESS3ESSION"EANINTERFACE4HERESJUST3ESSION
"EAN ANDBOTHSTATELESSANDSTATEFULBEANSIMPLEMENTIT
gfn\i 3OTHERESNOTHINGINYOURCLASSTHATSPECIFICALLYSAYSYOUR
BEANISSTATELESS)TSONLYATDEPLOY TIME WHENYOUTELL
<RXNQRZWKDWWKHEHDQFODVVLVJRLQJWR THEDEPLOYMENTDESCRIPTORTHATTHEBEANISSTATELESSOR
FKDQJHEXWZKDWDERXWWKHFOLHQWDQGWKH STATEFUL THATITACTUALLYMATTERS
WZRLQWHUIDFHV"'RRQHRUPRUHRIWKRVH )NFACT YOUCOULDWRITEABEANTHATHASONLYANO ARGCRE
KDYHWRFKDQJH"5HDOO\WKLQNWKURXJKWKH ATE ANDKEEPSNOCLIENTSTATE ANDYOUCANDEPLOYITWITH
LPSOLFDWLRQVEHIRUH\RXWXUQWKHSDJH EITHERSETTINGˆSTATELESSORSTATEFULˆANDITWILLWORK AS
LONGASYOUVETAKENCAREOFPASSIVATIONANDACTIVATION

\RXDUHKHUH 
VWDWHIXOVHVVLRQEHDQFRGH

)L^QKM;\I\MN]T*MIVKWLM

SDFNDJHKHDG¿UVW
LPSRUWMDYD[HME 

SXEOLFFODVV$GYLFH6WDWHIXO%HDQLPSOHPHQWV6HVVLRQ%HDQ^

SULYDWH6HVVLRQ&RQWH[WFRQWH[W ent SessionBean
We still implem
SULYDWH6WULQJXVHU1DPH

This time, we can keep client-speciÞc


state (in this case, the argument the
client sends to the create method)

SXEOLFYRLGHME$FWLYDWH ^ of the four SessionBean ta
`
thing weÕre doing is savingcon
th e
iner callbacks, the only
con
this version of the class weÕre text, even though in
the context because we want not using it. WeÕre saving
SXEOLFYRLGHME3DVVLYDWH ^
`
your context, because in most YOU to get used to saving
SXEOLFYRLGHME5HPRYH ^ gonna want to use it later. (L real-world beans youÕre
` examples of using the context)ater in the book, youÕll see
SXEOLFYRLGVHW6HVVLRQ&RQWH[W 6HVVLRQ&RQWH[WFW[ ^
FRQWH[W FW[
`
se
L Y a st at eF UL bean, becau
This can be OnÕNs must NOT have anything

SXEOLFYRLGHME&UHDWH 6WULQJQDPH ^
XVHU1DPH QDPH stateless bea -arg create() method.
` except the no

SXEOLF6WULQJJHW$GYLFH ^
UHWXUQXVHU1DPH³P\DGYLFHLV³$GYLVRUJHW$GYLFH 
`
static helper
In the busi assume this is claass, Advisor,
speciÞc stantess method, weÕre usi
`
method on a Õt see here. WeÕll
parameter. e, that we saved fr ng the client- that you done that one.
stateless be This must be a stat om the create let you writ
ans arenÕt t ef
ied to a sinul bean, because
gle client.

 &KDSWHU
VHVVLRQEHDQOLIHF\FOH

)L^QKM;\I\MN]T*MIV+41-6<KWLM
4HESTATEFULVERSIONOFTHECLIENTADDSTWOTHINGSNOTINTHESTATELESSVERSION
7EREPASSINGANARGUMENTTOTHECREATE METHOD
!STATEFULBEANCANANDOFTENDOES HAVEARGUMENTSTOCREATEMETHODS SOTHAT
THECLIENTCANPASSINCLIENT SPECIlCSTATEFORTHEBEANTOSAVEANDUSEINLATER
hCONVERSATIONSvWITHTHECLIENTIELATERMETHODCALLSFROMTHATCLIENT 

7ERECALLINGREMOVE ONTHECOMPONENTINTERFACE
)TSPOLITEFORTHECLIENTTOTELLTHE#ONTAINERTHATSHESDONEWITHASTATEFULSESSION
BEAN!NDNOWYOUKNOWWHY7ITHOUTTHEREMOVE CALL THE#ONTAINERWILLHOLDON
TOTHEBEAN WASTEFULLY UNTILTHEBEANTIMESOUT3OINTHISCASEhPOLITEvREALLYMEANS
hIMPROVESSCALABILITYv

LPSRUWMDYD[QDPLQJ 
LPSRUWMDYD[UPL 
LPSRUWKHDG¿UVW 
<RXPXVWEHDEOHWR
UHFRJQL]HZKHWKHU
LPSRUWMDYD[HME  WKHFOLHQWLVIRUD
VWDWHIXOEHDQ
SXEOLFFODVV$GYLFH6WDWHIXO&OLHQW^ WFOLHQWFRGH
<RXPXVWEHDEOHWRORRND
KHW KHU WKHFOLHQW¶V
OLNHWKLVDQGNQRZZ
SXEOLFVWDWLFYRLGPDLQ 6WULQJ>@DUJV ^ WHIX O,IWKH FOLH QWF DOOVD
EHDQLVVWD
QHZ$GYLFH6WDWHIXO&OLHQW JR  ZD \WRNQRZ
QRDUJFUHDWH WKHUH¶VQR
` WHOH VV EX WDW OHD VW\RX
ZKHWKHULW,6VWD
*+ 7E H, IWK HF UHD WHK DV
NQRZLW0,
SXEOLFYRLGJR ^ DQ FUH DWH 
DUJVRUDQDPHRWKHUWK 
WU\^ XQW  \R XN QRZ WKH
OLNHFUHDWH$FFR
&RQWH[WLF QHZ,QLWLDO&RQWH[W  XVWEH VWD WHIX O
EHDQP
2EMHFWR LFORRNXS ³6WDWHIXO$GYLVRU´ 

$GYLFH6WDWHIXO+RPHKRPH  $GYLFH6WDWHIXO+RPH 3RUWDEOH5HPRWH2EMHFWQDUURZ R
$GYLFH6WDWHIXO+RPHFODVV 

$GYLFH6WDWHIXODGYLVRU KRPHFUHDWH ³FORYHU´  because bean,
T h is m ust be a statefwulith arguments!
eate
weÕre calling cr
6\VWHPRXWSULQWOQ DGYLVRUJHW$GYLFH 

DGYLVRUUHPRYH  weÕre calling remove(), to tell the tain


`FDWFK ([FHSWLRQH[ ^ done with the bean (so the ContainCon er weÕre
er can kill it).
H[SULQW6WDFN7UDFH 
`
` this is a poor way to handle exceptions! You would probably write
` a real-world client to catch the different kinds of exceptions
that matter... NamingException, CreateException, etc.
\RXDUHKHUH 
VHVVLRQEHDQV

6KDUSHQ \RXU SHQFLO


'RWKHLQWHUIDFHVKDYHWRFKDQJHZKHQLWJRHVIURP
VWDWHOHVVWRVWDWHIXO"

/RRNDWWKHWZRLQWHUIDFHVEHORZIRUWKHVWDWHOHVVYHUVLRQ
RIWKH$GYLFHEHDQ,IQHHGHGPDNHDQ\DGMXVWPHQWVWR
WKHFRGHLQHLWKHURUERWKRIWKHLQWHUIDFHVIRUZKDW LIDQ\
WKLQJ QHHGVWRFKDQJHWRPDNHWKLVZRUNZLWKWKHUHYLVHG
VWDWHIXOYHUVLRQRIWKHEHDQ

SDFNDJHKHDG¿UVW

LPSRUWMDYD[HME 
LPSRUWMDYDUPL5HPRWH([FHSWLRQ

SXEOLFLQWHUIDFH$GYLFH+RPHH[WHQGV(-%+RPH^
SXEOLF$GYLFHFUHDWH WKURZV&UHDWH([FHSWLRQ5HPRWH([FHSWLRQ
`

SDFNDJHKHDG¿UVW

LPSRUWMDYD[HME 
LPSRUWMDYDUPL5HPRWH([FHSWLRQ

SXEOLFLQWHUIDFH$GYLFHH[WHQGV(-%2EMHFW^
SXEOLF6WULQJJHW$GYLFH WKURZV5HPRWH([FHSWLRQ

 &KDSWHU
VHVVLRQEHDQOLIHF\FOH

:MDD=LHGAFLK
ƒ &RQWDLQHUFDOOEDFNVLQGLFDWHNH\PLOHVWRQHVLQDEHDQ·V
,MXTWaQVOI[\I\MN]TJMIV OLIH

4HEONLYDIFFERENCEBETWEENDEPLOYINGTHESTATEFUL
ƒ $VD%HDQ3URYLGHU\RX·UHUHVSRQVLEOHIRULPSOHPHQW
LQJWKHFRQWDLQHUFDOOEDFNVLQ\RXUEHDQFODVV
!DVICEBEANANDTHESTATELESSVERSIONBESIDESTHE
lLENAMESAND*.$)NAME ISINTHEDEPLOYMENT ƒ &RQWDLQHUFDOOEDFNVFRPHIURPWZRSODFHVWKH
DESCRIPTORSETTINGTHATDElNESWHETHERTHEBEAN 6HVVLRQ%HDQLQWHUIDFHDQGWKHKRPHLQWHUIDFH7KH
ISSTATELESSORSTATEFUL5SINGTHE2)DEPLOYTOOL FRPSLOHUIRUFHV\RXWRLPSOHPHQWWKH6HVVLRQ%HDQ
REMEMBER YOUSETTHISUSINGTHEDEPLOYTOOLS.EW LQWHUIDFHEXWWKHFDOOEDFNVUHODWHGWRWKHKRPHDUH\RXU
%NTERPRISE"EAN7IZARDˆTHETHINGTHATWALKSYOU UHVSRQVLELOLW\DQGWKHFRPSLOHUZRQ·WNQRZVLQFH\RXU
THROUGHTHESETTINGSTHATITTHENUSESTOOUTPUTTHE EHDQFODVVGRHVQ·WLPSOHPHQW\RXUKRPHLQWHUIDFH
8-,DEPLOYMENTDESCRIPTOR
ƒ $VWDWHIXOVHVVLRQEHDQFDQEHLQRQHRIWKUHHVWDWHV
GRHVQRWH[LVW \HVWKDW·VDVWDWH PHWKRGUHDG\DQG
SDVVLYDWHG
ƒ :KHQDEHDQWUDQVLWLRQVIURPGRHVQRWH[LVWWRPHWKRG
UHDG\LWVFRQVWUXFWRULVFDOOHGIROORZHGE\VHW6HVVLRQ
&RQWH[W DQGILQDOO\WKHEHDQ·VHME&UHDWH 
ƒ $EHDQLQVWDQFHKDVVSHFLILF%HDQ7KLQJVWKDWLWFDQ
GREXWQRQHDUHDYDLODEOHGXULQJWKHEHDQ·VFRQVWUXF
WRUEHFDXVHDWWKDWSRLQWLWLVDQREMHFWEXWQRW\HWDIXOO
EHDQ,WGRHVQ·W\HWKDYHLWVEHDQQHVV
ƒ 6RPHRIWKH%HDQ7KLQJVDEHDQFDQGRLQFOXGHJHWD
UHIHUHQFHWRLWVKRPHRU(-%REMHFWOHDUQRUDIIHFWWKH
VWDWXVRIWKHWUDQVDFWLRQJHWVHFXULW\LQIRUPDWLRQDERXW
WKHFOLHQWDQGDFFHVVDUHVRXUFHVXFKDVDGDWDEDVH
ƒ :KHQDVWDWHIXOEHDQLVSDVVLYDWHGLW·VSXWLQWRVHFRQG
DU\VWRUDJHSRVVLEO\WKURXJKVHULDOL]DWLRQ<RXPXVW
EHVXUHE\WKHHQGRI\RXUHME3DVVLYDWH PHWKRGWKDW
YouÕll have to change this to State
ful !! \RXULQVWDQFHYDULDEOHVDUHUHDG\IRUSDVVLYDWLRQ
ƒ 7KH&RQWDLQHUFDOOVHME5HPRYH RQDEHDQZKHQWKH
FOLHQWFDOOVUHPRYH IRUDVWDWHIXOEHDQRUZKHQWKH
&RQWDLQHUZDQWVWRUHGXFHWKHVL]HRIWKHSRROIRU
VWDWHOHVVEHDQV,IDSDVVLYDWHGEHDQWLPHVRXWWKH
&RQWDLQHUZLOONLOOWKHEHDQZLWKRXWLQYRNLQJHME5H
PRYH
ƒ $EHDQFDQDOVRPLVVDQHME5HPRYH FDOOLIWKHUH·VD
FRQWDLQHUFUDVKRUWKHEHDQWKURZVDUXQWLPHH[FHSWLRQ

\RXDUHKHUH 
VWDWHIXOYVVWDWHOHVV

+WUXIZML\W[\I\MN]TJMIV[[\I\MTM[[JMIV[
PI^MI[QUXTMTQNM
3TATELESSBEANSHAVEAMUCHSIMPLEREXISTENCE4HEYREBORNCREATED
THEYRETHROWNINTOAPOOLWITHOTHERSOFTHEIRKIND THEYRUNBUSINESS
METHODSFORANYCLIENTWHOASKS ANDTHEYMIGHTEVENTUALLYDIE4HEYARENT
PASSIVATED THEYDONTKEEPCLIENT SPECIlCSTATE ANDTHEIRCREATIONAND
DESTRUCTIONREMOVAL ARENTTIEDTOTHEWHIMSOFTHECLIENT#OMPARETHE
DIFFERENCEBETWEENTHELIFECYCLEOFASTATEFULVSSTATELESSBEAN

7KHEHDQOLIHF\FOH VSHFLDOPRPHQWVLQDEHDQ·VOLIH

6WDWHIXOVHVVLRQEHDQV

ƒ %HDQFUHDWLRQ ZKHQWKHFOLHQWZDQWVDEHDQ
ƒ %HDQXVH ZKHQWKHFOLHQWFDOOVDEXVLQHVVPHWKRG
ƒ %HDQSDVVLYDWLRQ WKHEHDQLVSXWWRVOHHSWRFRQVHUYH
UHVRXUFHV

ƒ %HDQDFWLYDWLRQ WKHEHDQZDNHVXSWRVHUYLFHDEXVLQHVV
PHWKRGIURPWKHFOLHQW

ƒ %HDQUHPRYDO ZKHQWKHFOLHQWLVILQLVKHGZLWKWKHEHDQRU
WKHEHDQWLPHVRXW

6WDWHOHVVVHVVLRQEHDQV

ƒ %HDQFUHDWLRQ ZKHQWKHFRQWDLQHUZDQWVWRPDNHDEHDQ
ƒ %HDQXVH ZKHQWKHFOLHQWFDOOVDEXVLQHVVPHWKRG
ƒ %HDQUHPRYDO ZKHQWKHFRQWDLQHUGHFLGHVWKHUHDUH
WRRPDQ\EHDQVLQWKHSRRORUWKHEHDQWKURZVDV\VWHP
H[FHSWLRQ

 &KDSWHU
VHVVLRQEHDQOLIHF\FOH

&RPSDULQJWKHOLIHF\FOHVRIVWDWHIXO
DQGVWDWHOHVVVHVVLRQEHDQV

6WDWHIXO
EHDQWKURZVV\VWHPH[FHSWLRQ
GRHVQRWH[LVW XQFKHFNHGXQFDXJKW

FRQVWUXFWRU
VHW6HVVLRQ&RQWH[W
HME5HPRYH ===
HME&UHDWH
RUWLPHRXW ===
WLPHRXW

HME3DVVLYDWH

PHWKRGUHDG\ SDVVLYDWHG
PHWKRGFDOOV HME$FWLYDWH

6WDWHOHVV

EHDQWKURZVV\VWHPH[FHSWLRQ
GRHVQRWH[LVW XQFKHFNHGXQFDXJKW

FRQVWUXFWRU
VHW6HVVLRQ&RQWH[W
HME5HPRYH
HME&UHDWH

PHWKRGUHDG\
PHWKRGFDOOV

\RXDUHKHUH 
VWDWHOHVVEHDQV

&OLHQWFDOOVFUHDWHRQDVWDWHOHVVVHVVLRQEHDQKRPH

 &OLHQWFDOOVFUHDWHRQWKHKRPH

FOLHQW

+RPH
VWXE REMHFW
FUHDWH
FUHDWH

 &RQWDLQHUPDNHVWKH(-%REMHFW

(-%
REMHFW

 &RQWDLQHUVHQGVWKHFOLHQWDVWXE
WRWKH(-%REMHFW

See whatÕs
missing?
No bean !! N
o context !
VWXE

 &KDSWHU
VHVVLRQEHDQOLIHF\FOH

6HVVLRQEHDQFUHDWLRQLVQRW
UHODWHGWRWKHFOLHQW

 &RQWDLQHUFRQVWUXFWVWKH
6HVVLRQ&RQWH[WREMHFWDQG
WKHEHDQLQVWDQFHWKHQFDOOV
VHW6HVVLRQ&RQWH[W RQWKHEHDQ

EHDQ


&RQWH[W

[W
WH
RQ
Q&
VLR
HV
W6
VH
 &RQWDLQHUSXWVWKHEHDQ ZKLFKLV
QRZOLQNHGWRLWVRZQFRQWH[W LQ
WKHSRROIRUWKDWEHDQW\SH

&RQWH[W
EHDQ

%HDQ3RRO

\RXDUHKHUH 
EXVLQHVVPHWKRGV

%XVLQHVVPHWKRGFDOO

 &OLHQWLQYRNHVDEXVLQHVVPHWKRG
RQKHUSUHYLRXVO\DFTXLUHG(-%
REMHFWVWXE JR
(-%
REMHFW


JR
VWXE
FOLHQW

%HDQ3RRO

 &RQWDLQHUSXOOVDEHDQRXWRIWKH
SRRODQGOLQNVLWZLWKWKHFOLHQW·V
(-%REMHFW
(-%
REMHFW

&RQWH[W
EHDQ
%HDQ3RRO

 &RQWDLQHULQYRNHVEXVLQHVVPHWKRG
RQWKHEHDQ  WKHEHDQUHWXUQV
IURPWKHPHWKRG  WKHQ&RQWDLQHU
VHQGVEHDQEDFNWRWKHSRRO   

JR

 
EHDQ
%HDQ3RRO

 &KDSWHU
VHVVLRQEHDQOLIHF\FOH

2EMHFW,QWHUDFWLRQ'LDJUDP 2,' IRUEHDQFUHDWLRQ


VWDWHOHVVVHVVLRQEHDQ

:KHQWKHFOLHQWFDOOVFUHDWH

FOLHQW
+RPH (-% 6HVVLRQ
REMHFW REMHFW &RQWH[W
EHDQ

FUHDWH

QHZ

DQGDWDFRPSOHWHO\GLIIHUHQWXQUHODWHGWLPH

QHZ

QHZ EHDQFRQVWUXFWRUUXQV

VHW6HVVLRQ&RQWH[W

HME&UHDWH

7KHFOLHQWFDQFDOO
FUHDWHDOOGD\ORQJEXW
,ZLOO127WLHDEHDQWRWKH
FOLHQW·V(-%REMHFWXQWLOWKH
FOLHQWJHWVVHULRXVDQGFDOOVD
EXVLQHVVPHWKRG

\RXDUHKHUH 
VHVVLRQEHDQWKLQJV

*MIV\PQVO[aW]KIVLWNZWU[\I\MTM[[JMIVUM\PWL[
FRQVWUXFWRU VHW6HVVLRQ&RQWH[W EXVLQHVVPHWKRG
8VH\RXU6HVVLRQ&RQWH[WWR 8VH\RXU6HVVLRQ&RQWH[WWR
ƒ QRWKLQJ
‰ JHWDUHIHUHQFHWR\RXUKRPH ‰ JHWDUHIHUHQFHWR\RXUKRPH
‰ JHWDUHIHUHQFHWR\RXU(-%REMHFW ‰ JHWDUHIHUHQFHWR\RXU(-%REMHFW
‰ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW ‰ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW
‰ IRUFHDWUDQVDFWLRQWRUROOEDFN &07 ‰ IRUFHDWUDQVDFWLRQWRUROOEDFN &07
EHDQV EHDQV
‰ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\ ‰ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\
EHHQVHWWRUROOEDFN &07EHDQV EHHQVHWWRUROOEDFN &07EHDQV
‰ JHWDWUDQVDFWLRQUHIHUHQFHDQGFDOO ‰ JHWDWUDQVDFWLRQUHIHUHQFHDQGFDOO
PHWKRGVRQLW %07EHDQV PHWKRGVRQLW %07EHDQV

$FFHVV $FFHVV
‰ \RXUVSHFLDO-1',HQYLURQPHQW ‰ \RXUVSHFLDO-1',HQYLURQPHQW
‰ DQRWKHUEHDQ·VPHWKRGV ‰ DQRWKHUEHDQ·VPHWKRGV
‰ DUHVRXUFHPDQDJHU OLNHDGDWDEDVH ‰ DUHVRXUFHPDQDJHU OLNHDGDWDEDVH

HME&UHDWH HME5HPRYH
8VH\RXU6HVVLRQ&RQWH[WWR

‰ JHWDUHIHUHQFHWR\RXUKRPH
‰ JHWDUHIHUHQFHWR\RXU(-%REMHFW
‰ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW
‰ IRUFHDWUDQVDFWLRQWRUROOEDFN &07
EHDQV Unlike stateFUL beans, a sta teLESS
bean canÕt get caller security info in
‰ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\ no client
EHHQVHWWRUROOEDFN &07EHDQV ejbCreate(), because thereessIS bea nÕs
‰ JHWDWUDQVDFWLRQUHIHUHQFHDQGFDOO associated with the statel Container
creation. Remember, itÕs thebean, and
that decides to create the
PHWKRGVRQLW %07EHDQV
its not tied to any client.
$FFHVV
‰ \RXUVSHFLDO-1',HQYLURQPHQW
‰ DQRWKHUEHDQ·VPHWKRGV
‰ DUHVRXUFHPDQDJHU OLNHDGDWDEDVH
 &KDSWHU
VHVVLRQEHDQOLIHF\FOH

+RZFRPH
HME3DVVLYDWH DQG
HME$FWLYDWH DUHQ·WFDOOHG
ZKHQWKHEHDQJRHVLQDQG 7KHUH·VQRQHHG%HDQVVWD\
RXWRIWKHSRRO" DZDNHZKHQWKH\·UHLQWKHEHDQ
SRRO)RUSHUIRUPDQFH,NHHS
WKHEHDQVDVZKROHOLYLQJREMHFWVRQWKH
KHDSQRWVHULDOL]HGREMHFWVWKDW,·G
 MXVWKDYHWRUHDFWLYDWHHDFKWLPHD
FOLHQWFDOOVDPHWKRGDQG,QHHG
DEHDQWRVHUYLFHLW

:HOOWKHQKRZGR
\RXJHWVFDODELOLW\LI
DOOWKHEHDQVLQWKHSRRO
DUHWDNLQJXSVSDFHRQ
WKHKHDS"
5HPHPEHUZLWKVWDWHOHVV
 EHDQV,GRQ·WQHHGRQHSHU
FOLHQW,QHHGRQO\RQHSHUFOLHQWLQWKH
PLGGOHRIDEXVLQHVVPHWKRGFDOO,QRWKHUZRUGV
,QHHGMXVWHQRXJKVWDWHOHVVEHDQVWRVHUYLFHWKH
PHWKRGVDFWXDOO\H[HFXWLQJDQGQRWRQHSHUHYHU\
FOLHQWZKRKDSSHQVWRKDYHDUHIHUHQFHWRDQ(-%
REMHFW&OLHQWVVSHQGIDUPRUHWLPHEHWZHHQ
PHWKRGFDOOVWKDQDFWXDOO\LQPHWKRGFDOOV

\RXDUHKHUH 
ZULWLQJVHVVLRQEHDQV

?ZQ\QVOI;M[[QWV*MIV"
aW]ZRWJI[*MIV8ZW^QLMZ
,KDYHDV\VWHPZKHQ,
VLWGRZQWRZULWHD6HVVLRQ
EHDQ,DOZD\VKDYHWRSXW
LQWKUHHNLQGVRIWKLQJVKRPH
VWXIIEXVLQHVVPHWKRGVDQGWKH <RXSXW7+5((NLQGVRIPHWKRGV
6HVVLRQ%HDQPHWKRGV LQWKHEHDQFODVV

LQWHUIDFH!!  +20(WKLQJVHME&UHDWH PHWKRGV


$GYLFH+RPH
FUHDWH :ULWHDQHME&UHDWH PHWKRGLQWKHEHDQWRPDWFKHDFK
FUHDWH PHWKRGLQWKHKRPHLQWHUIDFH

LQWHUIDFH!!
$GYLFH  &20321(17WKLQJVEXVLQHVVPHWKRGV
JHW$GYLFH :ULWHDEXVLQHVVPHWKRGLQWKHEHDQWRPDWFKHDFK
PHWKRGLQ\RXUEHDQ¶VFRPSRQHQWLQWHUIDFH

LQWHUIDFH!!
6HVVLRQ%HDQ  6(66,21%($1WKLQJVFRQWDLQHUFDOOEDFNV
VHW6HVVLRQ&RQWH[W IURPWKH6HVVLRQ%HDQLQWHUIDFH
HME3DVVLYDWH ,PSOHPHQWHDFKRIWKHIRXUPHWKRGVIURPWKH
HME$FWLYDWH 6HVVLRQ%HDQLQWHUIDFHZKLFK\RXUEHDQPXVWLPSOHPHQW
HME5HPRYH LQWKHRI¿FLDO-DYDZD\ LHXVLQJWKHLPSOHPHQWV
6HVVLRQ%HDQGHFODUDWLRQHLWKHULQ\RXUEHDQFODVVRURQH
RILWVVXSHUFODVVHV

6KDUSHQ \RXU SHQFLO


&RPSLOHUFKHFNHG"
‰ 0HWKRGVWRPDWFKWKH+RPHLQWHUIDFH
2IWKHWKUHHW\SHVRIPHWKRGV\RX
SXWLQ\RXUEHDQFKHFNRIIWKHRQHV ‰ 0HWKRGVWRPDWFKWKH&RPSRQHQWLQWHUIDFH
WKHFRPSLOHUFDUHVDERXW ‰ 0HWKRGVIURPWKH6HVVLRQ%HDQLQWHUIDFH

 &KDSWHU
VHVVLRQEHDQOLIHF\FOH

*LYHQWKHIROORZLQJLQWHUIDFHVZULWHWKHEHDQFODVVFRGH \RXFDQOHDYH
6KDUSHQ \RXU SHQFLO WKHPHWKRGHPSW\ DWWKHERWWRPRIWKHSDJH3D\VSHFLDODWWHQWLRQWR
WKH+RPHFUHDWHPHWKRGZKDWGRHVLWWDNHWRµPDWFK¶WKLVLQWKHEHDQ"
:LOOLWKDYHWKHVDPHUHWXUQW\SH"+LQWVDUHDWWKHERWWRPRIWKHSDJH

LPSRUWMDYD[HME 
LPSRUWMDYDUPL5HPRWH([FHSWLRQ

SXEOLFLQWHUIDFH.HQQHO+RPHH[WHQGV(-%+RPH^
SXEOLF.HQQHOFUHDWH 6WULQJFXVW,' WKURZV&UHDWH([FHSWLRQ5HPRWH([FHSWLRQ
`

LPSRUWMDYD[HME 
LPSRUWMDYDUPL5HPRWH([FHSWLRQ

SXEOLFLQWHUIDFH.HQQHOH[WHQGV(-%2EMHFW^
SXEOLF.HQQHO/HDVHSODFH3HW 3HWS WKURZV5HPRWH([FHSWLRQ
SXEOLFYRLGUHQHZ/HDVH ./HDVHOHDVH WKURZV5HPRWH([FHSWLRQ([SLUHG([FHSWLRQ
SXEOLF3HWJHW3HW ./HDVHOHDVH WKURZV5HPRWH([FHSWLRQ'HDG3HW([FHSWLRQ
`

:ULWHWKHEHDQFODVVKHUH

WLRQFODVVWKDWDUHGHFODUHGRQWKHPHWKRGVLQWKHLQWHUIDFH"
UXOHWKDWVD\VWKHLPSOHPHQWHURIDQLQWHUIDFHPXVWGHFODUHWKHVDPHH[FHSWLRQVLQWKHLPSOHPHQWD
IDFH7KH&RQWDLQHUGRHVQ¶WQHHGDQ\WKLQJEDFNIURPWKHEHDQGXULQJFUHDWLRQ'RHV-DYDKDYHD
+LQWV7KHKRPHPHWKRGLQWKHEHDQKDVDVOLJKWO\GLIIHUHQWQDPHWKDQWKHRQHLQWKHKRPHLQWHU
\RXDUHKHUH 
KRPHLQWHUIDFH

5XOHVIRUWKH+20(PHWKRGVKRPHLQWHUIDFH

 /RFDOKRPHLQWHUIDFHVPXVWUHWXUQWKHORFDOFRPSRQHQWLQWHUIDFHDQG
5HPRWHKRPHLQWHUIDFHVPXVWUHWXUQWKH5HPRWHFRPSRQHQWLQWHUIDFH
SXEOLFLQWHUIDFH$GYLFH/RFDO+RPHH[WHQGV(-%/RFDO+RPH^
SXEOLF$GYLFH/RFDOFUHDWH WKURZV&UHDWH([FHSWLRQ
The return type of a
` home create method
SXEOLFLQWHUIDFH$GYLFH+RPHH[WHQGV(-%+RPH^
SXEOLF$GYLFHFUHDWH WKURZV&UHDWH([FHSWLRQ
must ALWAYS
5HPRWH([FHSWLRQ
`
be the component
(YHU\FUHDWHPHWKRGLQWKHKRPHLQWHUIDFHPXVWGHFODUHD
interface type.

&UHDWH([FHSWLRQUHJDUGOHVVRIZKHWKHUWKHLQWHUIDFHLVORFDORU5HPRWH
<RXFDQDOVRGHFODUH\RXURZQDSSOLFDWLRQ FKHFNHG H[FHSWLRQV
LQWHUIDFH!!
SXEOLF$GYLFHFUHDWH WKURZV&UHDWH([FHSWLRQ .HQQHO+RPH
1R$GYLFH([FHSWLRQ
.HQQHOFUHDWH 6WULQJLG
 /RFDOKRPHLQWHUIDFHVPXVWH[WHQG(-%/RFDO+RPHDQGPXVW127
GHFODUH5HPRWH([FHSWLRQV
SXEOLFLQWHUIDFH$GYLFH/RFDO+RPHH[WHQGV(-%/RFDO+RPH^
SXEOLF$GYLFH/RFDOFUHDWH WKURZV&UHDWH([FHSWLRQ
`
This must be the component
5HPRWHKRPHLQWHUIDFHVPXVWH[WHQG(-%+RPHDQGPXVWGHFODUH interface type. Remote

5HPRWH([FHSWLRQVRQHYHU\PHWKRG homes must return Re-
SXEOLFLQWHUIDFH$GYLFH+RPHH[WHQGV(-%+RPH^
mote component interface
SXEOLF$GYLFHFUHDWH WKURZV&UHDWH([FHSWLRQ references, local homes must
5HPRWH([FHSWLRQ return local component
` interface references.
 6WDWHOHVVEHDQVFDQKDYHRQO\RQHFUHDWH PHWKRGDQGLWPXVW127
KDYHDUJXPHQWV
SXEOLF$GYLFHFUHDWH WKURZV&UHDWH([FHSWLRQ

 6WDWHIXOEHDQVPXVWKDYHRQHRUPRUHFUHDWH PHWKRGVDQGDUH127
UHTXLUHGWRKDYHDQRDUJFUHDWH 7KHFUHDWH PHWKRGVPXVWVWDUW
ZLWKWKHVWULQJ³FUHDWH´DQGFDQEHRYHUORDGHG
)RRFUHDWH%LJ)RR
)RRFUHDWH

 $UJXPHQWVDQGUHWXUQW\SHVIRU5HPRWHKRPHLQWHUIDFHPHWKRGVPXVW
EHOHJDO50,,,23W\SHV 6HULDOL]DEOHSULPLWLYH5HPRWHRUFROOHF
WLRQVRUDUUD\VRIDQ\RIWKRVH 

 &KDSWHU
VHVVLRQEHDQOLIHF\FOH

5XOHVIRUWKH+20(PHWKRGVEHDQFODVV

 (YHU\FUHDWHPHWKRGLQWKHKRPHPXVWKDYHDPDWFKLQJHME&UHDWH
PHWKRGLQWKHEHDQFODVV7KHHME&UHDWHPHWKRGVLQWKHEHDQPXVW
KDYHDYRLGUHWXUQW\SH Every create in the
SXEOLFYRLGHME&UHDWH ^`
home must have a
 7KHHME&UHDWHPHWKRGVPXVWEHSXEOLFDQGPXVW127EHPDUNHG matching ejbCreate
¿QDORUVWDWLF
in the bean class
 <RXGR127KDYHWRGHFODUHWKHH[FHSWLRQVGHFODUHGLQWKHKRPHLQWHU
IDFHXQOHVV\RXPLJKWDFWXDOO\WKURZWKRVHH[FHSWLRQVIURP\RXURZQ
(void return type).
PHWKRGVDOWKRXJKLWLVRIWHQJRRGSUDFWLFHWRGHFODUH&UHDWH([FHSWLRQ
<RX0867QRWGHFODUH5HPRWH([FHSWLRQLQ\RXUEHDQFODVV(9(5

SXEOLFYRLGHME&UHDWH ^`QRGHFODUHGH[FHSWLRQV .HQQHO%HDQ


EHFDXVHZHGRQ¶WDFWXDOO\WKURZDQ\
YRLGHME&UHDWH 6WULQJLG

 <RXPXVW127GHFODUHDQ\DSSOLFDWLRQH[FHSWLRQV LHFKHFNHG
H[FHSWLRQV WKDWZHUHQRWGHFODUHGLQWKHKRPHLQWHUIDFHIRUWKDW
PDWFKLQJFUHDWHPHWKRG
The bean home methods
SXEOLFYRLGHME&UHDWH WKURZV)LUH([FHSWLRQ^` must match the home
QRWOHJDOXQOHVV)LUH([FHSWLRQLVGHFODUHGRQWKH interface methods, except
KRPHLQWHUIDFHFUHDWHPHWKRG you preÞx the bean class
methods with ÔejbÕ, and
 6WDWHOHVVEHDQVPXVWKDYHRQO\RQHHME&UHDWH DQGLWPXVWKDYHQR capitalize the ÔÔcÕ in create
DUJXPHQWV to ÔejbCreateÕ
SXEOLFYRLGHME&UHDWH ^`PXVWORRNOLNHWKLV

 6WDWHIXOEHDQVPXVWKDYHRQHRUPRUHHME&UHDWHPHWKRGV PDWFK
LQJWKHPHWKRGVRIWKHKRPHLQWHUIDFH DQGPXVWVWDUWZLWKWKHVWULQJ
³HME&UHDWH´

+20(
SXEOLF)RRFUHDWH%LJ)RR WKURZV&UHDWH([FHSWLRQ

%($1
SXEOLFYRLGHME&UHDWH%LJ)RR ^`

\RXDUHKHUH 
FRPSRQHQWLQWHUIDFH

5XOHVIRUWKH%86,1(66PHWKRGVFRPSRQHQWLQWHUIDFH

 %XVLQHVVPHWKRGQDPHVPXVWQRWEHJLQZLWKWKHVWULQJ³HME´

 $UJXPHQWVDQGUHWXUQW\SHVIRU5HPRWHFRPSRQHQWLQWHUIDFHPHWKRGV
PXVWEHOHJDO50,,,23W\SHV7KDWPHDQV6HULDOL]DEOHSULPLWLYH Remote component
5HPRWHRUDQDUUD\RUFROOHFWLRQRIDQ\RIWKRVH DVORQJDVWKHFROOHFWLRQ
LPSOHPHQWDWLRQFODVVLVLWVHOI6HULDOL]DEOH  interface methods
SXEOLF6WULQJJHW$GYLFH WKURZV5HPRWH([FHSWLRQ
6WULQJLV6HULDOL]DEOHVRWKLVPHWKRGFRXOGEH
must have RMI-IIOP
LQD5HPRWHFRPSRQHQWLQWHUIDFH types as arguments
SXEOLF6RFNHWJHW7KH6RFNHW 
and return types.
6RFNHWLV1276HULDOL]DEOHVRWKLVPHWKRGPXVW
127EHLQD5HPRWHLQWHUIDFH ORFDOZRXOGEH2.
6WULQJGR6RPHWKLQJ LQWL

 /RFDOFRPSRQHQWLQWHUIDFHVPXVWH[WHQG(-%/RFDO2EMHFWDQGPXVW127
GHFODUH5HPRWH([FHSWLRQV This method would be legal
SXEOLFLQWHUIDFH$GYLFH/RFDOH[WHQGV(-%/RFDO2EMHFW^ in either a Remote or local
SXEOLF6WULQJJHW$GYLFH  interface, because the argu-
` ment and return type are
legal RMI-IIOP types.
 5HPRWHFRPSRQHQWLQWHUIDFHVPXVWH[WHQG(-%2EMHFWDQGPXVW
GHFODUH5HPRWH([FHSWLRQVRQHYHU\PHWKRG
SXEOLFLQWHUIDFH$GYLFHH[WHQGV(-%2EMHFW^
SXEOLF6WULQJJHW$GYLFH WKURZV5HPRWH([FHSWLRQ
`

 <RXPXVWQRWH[SRVHWKHORFDOKRPHRUFRPSRQHQWLQWHUIDFHRIDEHDQ
WKURXJKD5HPRWHFRPSRQHQWLQWHUIDFHPHWKRG,QRWKHUZRUGV\RX
FDQ¶WKDYHDORFDOLQWHUIDFHDVWKHUHWXUQW\SHRUDUJXPHQWW\SHLQD
5HPRWHFRPSRQHQWLQWHUIDFHPHWKRG

 &KDSWHU
VHVVLRQEHDQOLIHF\FOH

5XOHVIRUWKH%86,1(66PHWKRGVEHDQFODVV

 %XVLQHVVPHWKRGVPXVWEHGHFODUHGDVSXEOLFDQGPXVW127EH
GHFODUHGDV¿QDORUVWDWLF
SXEOLFYRLGGR%LJ7KLQJV ^`
Business methods must
 0HWKRGQDPHVPXVWQRWEHJLQZLWKWKHVWULQJ³HME´ not throw application
<RXPXVW127SDVV³WKLV´DVDQDUJXPHQWRUUHWXUQYDOXH5HPHPEHU
(checked) exceptions

\RXGRQ¶WZDQWWRJLYHRXWDUHIHUHQFHWRWKHEHDQ(YHU\ERG\PXVWJR
WKURXJKWKH(-%REMHFW ODWHUZH¶OOVHHKRZWRGRWKDW 
that arenÕt declared
SXEOLFYRLGGR6WXII WKLV QRWOHJDO
in the component
IURPZLWKLQDEHDQPHWKRG
interface.
 $UJXPHQWVDQGUHWXUQW\SHVIRU5HPRWHFRPSRQHQWLQWHUIDFHPHWKRGV
PXVWEHOHJDO50,,,23W\SHV7KDWPHDQV6HULDOL]DEOHSULPLWLYH
5HPRWHRUDQDUUD\RUFROOHFWLRQRIDQ\RIWKRVH DVORQJDVWKHFROOHFWLRQ
LPSOHPHQWDWLRQFODVVLVLWVHOI6HULDOL]DEOH 

SXEOLF6WULQJJHW$GYLFH ^`
6WULQJLV6HULDOL]DEOHVRWKLVPHWKRGFRXOGEH
LQD5HPRWHFRPSRQHQWLQWHUIDFH
6HVVLRQ%HDQ
H[WHQGV
(QWHU SULVH%HDQ
%87
SXEOLF6RFNHWJHW7KH6RFNHW ^` 7KHUH¶VQRWKLQJLQWKHUH
6RFNHWLV1276HULDOL]DEOHVRWKLVPHWKRGPXVW HUS ULVH%HD QLV6H ULDOL]D EOH
(QW
EH DQ LV
127EHLQD5HPRWHLQWHUIDFH ORFDOZRXOGEH2. 6RWKDWPHDQV\RXU
ZLWKRXW
DXWRPDWLFDOO\6HULDOL]DEOH
 <RXGR127KDYHWRGHFODUHWKHH[FHSWLRQVGHFODUHGLQWKHFRPSRQHQW \RXUKDYLQJVDLGVR
HUH\RX
LQWHUIDFHXQOHVV\RXPLJKWDFWXDOO\WKURZWKRVHH[FHSWLRQVIURP\RXU ,I\RXKDYHDVFHQDULRZK
RJQ L]H LID EH DQ LV
RZQPHWKRGV<RX0867QRWGHFODUH5HPRWH([FHSWLRQLQ\RXUEHDQ QHHGWRUHF
LDOL]DEOH,7,6 HY HQ WKR XJK
FODVV(9(5 6HU
VVVD\
\RXGRQ¶WVHHWKHEHDQFOD
SXEOLF6WULQJJHW$GYLFH ^`QRGHFODUHGH[FHSWLRQV ³LPSOHPH QWV6H ULDO L]D EOH ´
EHFDXVHZHGRQ¶WDFWXDOO\WKURZDQ\

 <RXPXVW127GHFODUHDQ\DSSOLFDWLRQH[FHSWLRQV LHFKHFNHG
H[FHSWLRQV WKDWZHUHQRWGHFODUHGLQWKHFRPSRQHQWLQWHUIDFHIRUWKDW
PDWFKLQJEXVLQHVVPHWKRG
SXEOLFYRLGJHW$GYLFH WKURZV$GYLFH([FHSWLRQ^`
QRWOHJDOXQOHVV$GYLFH([FHSWLRQLVGHFODUHGRQWKH
FRPSRQHQWLQWHUIDFHYHUVLRQRIWKHPHWKRG

\RXDUHKHUH 
UXOHVIRUWKHEHDQFODVV

2WKHUUXOHVIRU\RXUEHDQFODVV

 7KHFODVVPXVWLPSOHPHQWMDYD[HME6HVVLRQ%HDQHLWKHUGLUHFWO\
RULQGLUHFWO\
SXEOLFFODVV$GYLFH%HDQLPSOHPHQWV6HVVLRQ%HDQ

 7KHFODVVPXVWEHSXEOLFDQGFDQQRWEH¿QDORUDEVWUDFW

 7KHFODVVPXVWKDYHDSXEOLFQRDUJFRQVWUXFWRU 7KDW¶VZKDWWKH
&RQWDLQHUKDVWRXVH :HUHFRPPHQGMXVWOHWWLQJWKHFRPSLOHULQVHUW
WKHGHIDXOWFRQVWUXFWRUVLQFH\RXGR127ZDQWWRSXWFRGHLQWKH
FRQVWUXFWRU
SXEOLF$GYLFH ^`YDOLGEHDQFRQVWUXFWRU

 <RXPXVW127KDYHD¿QDOL]H PHWKRGLQ\RXUFODVV

 7KHFODVVLVQRWUHTXLUHGWR EXWLVDOORZHGWR LPSOHPHQWWKHEHDQ¶V


FRPSRQHQWLQWHUIDFH :HWDONHGHDUOLHUUHPHPEHUDERXWZK\\RX
SUREDEO\GRQ¶WZDQWWR³RI¿FLDOO\´LPSOHPHQW\RXUFRPSRQHQWLQWHUIDFH

<RXUFODVV0867LPSOHPHQWWKHPDWFKLQJKRPHDQGFRPSRQHQWLQWHUIDFH
<RXUEHDQFODVV
FDQKDYHRWKHU

PHWKRGV LHDQHME&UHDWHIRUHYHU\FUHDWHLQWKHKRPHDQGDPDWFKLQJ PHWKRGV
HWKH
EXVLQHVVPHWKRGIRUHYHU\PHWKRGLQWKHFRPSRQHQWLQWHUIDFH  <RXUEHDQFODVVKDVWRKDY
PH WKR GV VWX IIIURP
WKUHHW\SHVRI
PH  HME& UHD WHV WR PD WFK
 ,IWKHEHDQLVVWDWHIXOLWFDQRSWLRQDOO\LPSOHPHQWWKH WKHKR
WKR GV IURP
6HVVLRQ6\QFKURQL]DWLRQLQWHUIDFH 7KLVLQWHUIDFHJLYHVWKHEHDQ FUHDWHV EXVLQHVVPH
QWLQWH UIDF HD QG WKH
WKUHHPRUHFDOOEDFNVUHODWHGWRWUDQVDFWLRQVZKLFKZH¶OOORRNDWLQWKH WKHFRPSRQH
LRQ %HD QP HWK RGV %X W
WUDQVDFWLRQVFKDSWHU IRXU6 HVV
KD YLQ J\ RXU
QRWKLQJVWRSV\RXIURP
RVH G³K HOS HU¶´ PH WKR GV
RZQQRQH[S
7Q HHG 
 <RXUEHDQFODVVFDQKDYHDVXSHUFODVV,QRWKHUZRUGV\RXFDQXVH DQGWKRVHPHWKRGVGR12
QRUPDO-DYDLQKHULWDQFHZLWK\RXUEHDQFODVV <RXMXVWGRQ¶WJHWDQ\ WREHSXEOLF
VSHFLDOEHDQVSHFL¿FLQKHULWDQFHUHPHPEHU

 &KDSWHU
VHVVLRQEHDQOLIHF\FOH

7KHGLIIHUHQFHEHWZHHQFUHDWHDQGHME&UHDWH

the client needs to get


KRPH
back the component
interface
LQWHUIDFH
SXEOLF.HQQHOFUHDWH WKURZV&UHDWH([FHSWLRQ5HPRWH([FHSWLRQ3HW([FHSWLRQ

donÕt forget the ce declares an


name differences! just because the interanfa YOU must. If
EHDQ exception doesnÕt medonÕt declare it.
FODVV you donÕt throw it,
SXEOLFYRLGHME&UHDWH WKURZV3HW([FHSWLRQ^`

but the container doesnÕt need


anything from the bean
7KH&RQWDLQHU
PLJKWQRWQHHG
DQ\WKLQJIURPWKHEHDQEXW
,·PQRWVXUH, WKHKRPHGDPQZHOOEHWWHU
XQGHUVWDQGZK\WKH JLYH0(WKHFRPSRQHQW
UHWXUQW\SHVDUHGLIIHUHQW LQWHUIDFH7KDW·VWKHRQO\
UHDVRQ,·PKHUH
EHWZHHQWKHEHDQDQG
WKHLQWHUIDFH

:KHQ,FDOOWKH
EHDQ·VHME&UHDWHPHWKRG,
GRQ·W1(('DQ\WKLQJIURPWKH
EHDQWKDQN\RXYHU\PXFKVRXVH
YRLGIRUWKHUHWXUQW\SH 7KLVZLOODOO
FKDQJHZLWKHQWLWLHVWKRXJKVR
EHSUHSDUHG

\RXDUHKHUH 
VHVVLRQEHDQZDWFKLWV

<RXFDQKDYH
DUHWXUQLQDQ
HME&UHDWH 
DWH 
<RX.12:WKDWDQHME&UH
WKRGP XVW KD YH DYRLG UHWXUQ
PH
DVLF
W\SHEXWGRQ¶WIRUJHW\RXUE
MX VWE HFD XVH \R XVHHD
-DYDUXOHV
3D\DWWHQWLRQWR
WKH
UHWXUQVWDWHPHQWUHWXUQ
QRWPHDQ\RX¶UH UHWX UQLQ
G
JD
RHV
YD OXH


´HMEµDVLQHME5H OHG E\ FR QVL GHU LQJ
PRYH 'RQ¶WEH IRR
YVMXVWUHPRYH WXDO
DQG DQ\WKLQJRWKHUWKDQWKHDF
HME&UHDWHYVF W\S HR IWKH
UHDWH GHFODUHGUHWXUQ
7UXHRUIDOVHWKH&
RQWDLQHUFDOOVDEH
DQ¶V HME&UHDWH PHWKRG
UHPRYH PHWKRGL
IWKHVWDWHIXOEHDQW
RXWZKLOHDFWLYH LPHV

)$/6(7KHEHDQ
GRHVQ¶W+$9(D
UHPRYH PHWKRG
RQO\DQHME5HPRY
PHWKRG H 
:DWFKIRUWKLQJVOLNH
³7KH%HDQ3URYLG
UHVSRQVLEOHIRUSX HULV
WWLQJWKHFUHDWH P
LQWKHEHDQ´1RWWU HWKRG
XHEHFDXVHWKHUH,
QRFUHDWH PHWKRG 6
LQWKHEHDQRQO\
HME&UHDWH  DQ
2QO\21(FOLHQWFDQD
DVHVVLR QE HD QD WD WLP
FFHVV
H
%HVXUHWREXUQLW DUG OHV VR IZ KH WKH UWKHEHDQ
LQWR\RXUKHDGWKD UHJ
W O
DQ\WKLQJVWDUWLQJZ
LWKWKHOHWWHUVµHME¶LV LVVWDWHOHVVRUVWDWHIX
WKHEHDQ2IFRXUVH LQ QRQH
LWZRXOGEHHDV\LI 5EHDFFHVVHGE\PRUHWKD
ZHUHWKH21/<UX
OHOLNHLIHYHU\WKLQJ
WKDW 6HVVLRQEHDQVPXVW1(9( DF OLHQ WDQ GD QRW KHU
LQ XVH E\
WKHEHDQVWDUWVZL LQ FOLHQW,IDEHDQLVFXUUHQWO\ WJHWV
WK³HME´DQGQRWKLQJ WKHEHDQWKDWVHFRQGFOLHQ
LQWHUIDFHVVWDUWVZL
WKµ³HME´EXWRIFR
LQWKH FOLHQWLQYRNHVDPHWKRGRQ QWL QWK HV SHF WKD W
HLVDFRPPH
WKDW¶VQRWWUXH XUVH DQH[FHSWLRQ%87WKHU HQW VWD WH/ (6 6E HDQVDV
WRL PS OHP
%XVLQHVVPHWKRGVD VD\VWKH&RQWDLQHULVIUHH KHQUXQV
UHLGHQWLFDOO\QDPHG HDQZKLFKWKH&RQWDLQHUW
ERWKWKHFRPSRQHQ
WLQWHUIDFHDQGWKHE
LQ DVLQJOHLQVWDQFHRIWKHE
WLPH
FODVVDQGWKH\GR HDQ WKHFOLHQWVWKURXJKRQHDWD U
HLWKHUWKHLQWHUIDFH
Q¶WHYHUVWDUWZLWK³H
ME´LQ Q¶WVXS SRVHG WRN QRZ RUFDUHKRZWKH&RQWDLQH
RUWKHEHDQFODVV <RXDUH RXW LVWKD W\R X
KDYHWRFDUHDE
GRHVLWWKHRQO\WKLQJ\RX W\R XUE HDQ IUR P
WRSURWHF
<RXDOVRQHHGWRNH GR127KDYHWRZULWHFRGH RX
LQYRNHV:+$7)R
HSWUDFNRI:+2
FXU UHQ WDFFHV V :K LFK \RXNQRZDQ\ZD\VLQFH\
UH[DPSOHZKR FRQ GF RGH LQ\RXU
86(WKUHDGUHODWH
LQYRNHVWKHFUHDWH
PHWKRG"7KHFO NQRZWKDW\RXFDQ¶WHYHQ HWF 
DLWQRWLI\
RUWKH&RQWDLQHU" F LHQW
OLHQW :KRLQYRNH EHDQOLNHV\QFKURQL]HGZ
HME&UHDWH  WKH& V
RQWDLQHU :KRLQYR
VHW6HVVLRQ&RQWH[ NHV
W " &RQWDLQHU :
LQYRNHVUHPRYH " KR
 FOLHQW 

 &KDSWHU
VHVVLRQEHDQOLIHF\FOH

6KDUSHQ \RXU SHQFLO :KRGRHV:KDW"


)URPWKHOLVWRIZRUGVEHORZDUUDQJHWKHPLQWKHDSSURSULDWHOLVWVDFFRUGLQJWR
ZKHWKHULW¶VDUHVSRQVLELOLW\RIWKH%HDQ3URYLGHUWKH&RQWDLQHURUWKH&OLHQW

KZMI\QVO\PM0WUMWJRMK\KTI[[ QUXTMUMV\QVO\PM;M[[QWV+WV\M`\KTI[[
QV^WSQVO[M\;M[[QWV+WV\M`\
QV^WSQVOMRJ+ZMI\M QV^WSQVOMRJ:MUW^M
QUXTMUMV\QVO\PM-2*7JRMK\KTI[[ KZMI\QVO\PMPWUMQV\MZNIKM
QV^WSQVOKZMI\M
QUXTMUMV\QVO\PM0IVLTMKTI[[
QUXTMUMV\QVO;M[[QWV*MIV
QV^WSQVOIJ][QVM[[UM\PWL
WV\PMKWUXWVMV\QV\MZNIKM QUXTMUMV\QVO\PMKZMI\MUM\PWL

QUXTMUMV\QVO\PMMRJ+ZMI\MUM\PWL QUXTMUMV\QVO\PMMRJ)K\Q^I\MUM\PWL

QV^WSQVOMJR8I[[Q^I\M

%HDQ3URYLGHU &OLHQW &RQWDLQHU

\RXDUHKHUH 
VHVVLRQFRQWH[W

;M[[QWV+WV\M`\
AW]VMMLQ\UWZM\PIVQ\VMML[aW]
!TTHEBEGINNINGOFABEANSLIFE ANDONLYONCEINTHEBEANSLIFE THE
#ONTAINERCALLSTHEBEANSSET3ESSION#ONTEXT CONTAINERCALLBACKMETHOD
4HATCONTEXTASUBCLASSOF%*"#ONTEXT ISTHEBEANSLIFELINETOTHE#ONTAINER
ANDITSTHEONLYTHINGTHEBEANCANCALLMETHODSONTOGETREFERENCESTOHIS
OWNHOMEAND%*"OBJECT TOGETSECURITYINFORMATIONABOUTTHECLIENT ORTO
DOTRANSACTION RELATEDTHINGS7EWONTLOOKATTHESECURITYANDTRANSACTION
INFONOWTHEYREBOTHCOVEREDINSEPARATECHAPTERS

<RXDUH62IULFNLQ·OXFN\WRKDYHPH,·P 8POHW·VJHWWKLVVWUDLJKW³
DVFORVHDV\RX·OOHYHUJHWWRWKH&RQWDLQHU \RX·UHKHUHWRVHUYH0(6R\RXEHWWHU
EDE\VR\RXEHWWHUWDNHJRRGFDUHRIPH$QG JHWXVHGWRKHDULQJ´2K&RQWH[W%R\JHW
\RXRQO\JHWRQHVKRWDWLWLI\RXGRQ·WVDYHPHZKHQ PHDWUDQVDFWLRQµ´2K&RQWH[W%R\JHWPH
WKH&RQWDLQHUFDOOVVHW6HVVLRQ&RQWH[W \RX·UH WKHFOLHQW·VVHFXULW\LQIRµ$QG,DOPRVW
VFUHZHG$QGGRQ·WGRDQ\WKLQJVWXSLGOLNHQXOORXW IRUJRW,WDNHRQHVXJDUDQGQRFUHDP
P\UHIHUHQFH6RRQHURUODWHU\RX·UHJRQQD
LQP\FRIIHH
QHHGPHIRUVRPHWKLQJ

%HDQ

6HVVLRQ&RQWH[W

0HPRUL]HWKH
6HVVLRQ&RQWH[W
LQWHUIDFH
WDOLVWRI
<RXPXVWEHDEOHWRORRND
GNQRZ ZK LFK EH ORQJWRWKH
PHWKRGVDQ
$Q GUH PHPEHU
6HVVLRQ&RQWH[WLQWHUIDFH
LRQ VUH ODWH GWR OLIH F\FOH
DORWRIWKHTXHVW
NQRZ LQJWKH PH WKR GV IURPZKLFK
DUHDERXW
GVRQ\RXU
\RXFDQFDOOFHUWDLQPHWKR
SOH \R XK DYHWRNQRZ
FRQWH[W)RUH[DP
ODWHGLQIRIURP
WKDW\RXFDQ¶WJHWFOLHQWUH
UHD WH PHWKRG
\RXUFRQWH[WLQWKHHME&
EHD Q% HFD XVH WKHUH¶VQR
RIDVWDWHOHVV
WHOHVVEHDQ¶V
FOLHQWDVVRFLDWHGZLWKDVWD
&$ 1J HWFOLHQWLQIR
HME&UHDWH %XW\RX
H[W IUR PD VWD WHIXOEHDQ¶V
IURP\RXUFRQW
WLQLWLDWHGLW
HME&UHDWH EHFDXVHDFOLHQ

 &KDSWHU
VHVVLRQEHDQOLIHF\FOH

7KLQJV\RXFDQGRZLWK\RXU6HVVLRQ&RQWH[W
PHWKRGVFDWHJRULHV

LQWHUIDFH!!
(-%&RQWH[W
ƒ JHWDUHIHUHQFHWR\RXUKRPH
JHW(-%+RPH JHW&DOOHU3ULQFLSDO
KRPHUHI JHW(-%/RFDO+RPH LV&DOOHU,Q5ROH 6WULQJV 

JHW(-%+RPH
JHW(-%/RFDO+RPH

ƒ JHWDUHIHUHQFHWR\RXU(-%REMHFW JHW5ROOEDFN2QO\
JHW(-%2EMHFW JHW8VHU7UDQVDFWLRQ
(-%REMHFWUHI VHW5ROOEDFN2QO\
JHW(-%/RFDO2EMHFW

LQWHUIDFH!!
ƒ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW 6HVVLRQ&RQWH[W
JHW(-%/RFDO2EMHFW
FOLHQWVHFXULW\ JHW&DOOHU3ULQFLSDO
LV&DOOHU,Q5ROH 6WULQJV JHW(-%2EMHFW

ƒ IRUFHDWUDQVDFWLRQWRUROOEDFN &07RQO\
VHW5ROOEDFN2QO\ ERROHDQE
WUDQVDFWLRQV <RXGRQ¶WQHHG
WRNQRZWKHWKUHH
ƒ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\EHHQ GHSUHFDWHGPHWKRGV
VHWWRUROOEDFN &07RQO\ %HVLGHVWKHRQHVVKRZQRQWKLVSDJH
JHW5ROOEDFN2QO\ WKH(-%&RQWH[WLQWHUIDFHKDVWKUHH
RWKHUPHWKRGVDOORIZKLFKKDYH
EHHQGHSUHFDWHG<RX¶UHQRWWHVWHG
ƒ JHWDWUDQVDFWLRQUHIHUHQFHDQGVWDUW\RXU RQGHSUHFDWHGPHWKRGVVRLI\RXVHH
RZQWUDQVDFWLRQ %07RQO\ WKHPLQWKH$3,GRQ¶WSDQLF7KHRQO\
JHW8VHU7UDQVDFWLRQ UHDVRQ\RXQHHGWRNQRZDERXWWKHP
LVLQFDVH\RX¶UHZRUNLQJZLWKROGHU
(-%FRGH7KHPHWKRGVDUH
LV&DOOHU,Q5ROH ,GHQWLW\LG
JHW&DOOHU,GHQWLW\
JHW(QYLURQPHQW

\RXDUHKHUH 
7LNLEHDQ/RXQJH

6WDWHOHVVEHDQ,GRQ·WVHHKRZ\RXFDQVWDQG 6WDWHIXOEHDQ:KLFKLVDOVRZK\\RX·UHQRWXVHGIRU
LWEHLQJDVWDWHIXOEHDQ<RXUZKROHOLIHLVWLHGWR DQ\WKLQJELJRUVHULRXV
VHUYLFLQJRQHFOLHQW
6WDWHOHVVEHDQ1RZZDLWMXVWDPLQXWHKHUH³WKDWLV
6WDWHIXOEHDQ,·PQRWVXUH,OLNHWKHZD\\RXSKUDVH 62QRWWUXH,QIDFWLI\RXZDQWWRWDONSHUIRUPDQFH
WKDW´VHUYLFLQJRQHFOLHQWµ0DNHVLWVRXQGOLNH,·PD EXGG\,·PZD\PRUHVFDODEOHWKDQ\RX$QGEHIRUH
SHUVRQDOVODYHRUVRPHWKLQJ \RXVWDUWDUJXLQJGRQ·WHYHQJLYHPHWKDWQRQVHQVH
DERXWSDVVLYDWLRQ,·YHKHDUGDOOWKHDUJXPHQWV%XW
6WDWHOHVVEHDQ$QGWKDWZRXOGEHZURQJEHFDXVH SDVVLYDWLRQZLOO1(9(5PDNH\RXDVVFDODEOHDVPH

6WDWHIXOEHDQ,W·VDSHUVRQDOLQWLPDWHUHODWLRQVKLS$ 6WDWHIXOEHDQ2.PD\EH,·PQRWTXLWH$6VFDODEOH
UHODWLRQVKLSWKDW\RXFRXOGQ·WSRVVLEO\FRPSUHKHQG EXWWKHUHDUHPRUHLPSRUWDQWWKLQJVLQOLIHWRFRQVLGHU

6WDWHOHVVEHDQ:KDWLV7+$7VXSSRVHGWRPHDQ" 6WDWHOHVVEHDQ)RUH[DPSOH"

6WDWHIXOEHDQ%HFDXVH\RXUUHODWLRQVKLSVDUHVR 6WDWHIXOEHDQ:HOO,·PHDV\WRXVH(DV\DQGTXLFN
WUDQVLHQW<RXGRQ·WUHDOO\FDUH:+2\RXVHUYLFH$Q\ WREXLOG0D\EHWKDW·VPRUHLPSRUWDQWWRWKHGHYHORSHU
FOLHQWLQDVWRUPDVWKH\VD\ $QGLQVRPHFDVHV,·PVWLOOJRQQDSHUIRUPEHWWHUZKHQ
\RXUHDOO\GRQHHGFOLHQWFRQYHUVDWLRQDOVWDWH7KH
6WDWHOHVVEHDQ7KHUH·VQRWKLQJZURQJZLWKWKDW,·P RSWLRQVFDQUHDOO\VXFNVRPHWLPHVKDYLQJWRVWRUH
DSHRSOHSHUVRQ,OLNHEHLQJLQWKHSRROZLWKWKHRWKHU WKHVWDWHLQDGDWDEDVHZLWKHDFKFDOO DQGWKHQJRDQG
EHDQVWKHQFRQVWDQWO\PHHWLQJQHZFOLHQWV,W·VQHYHU ORRNLWDOOXSDJDLQZLWKWKHYHU\1(;7FDOO ",NQRZ
ERULQJDQG,EDUHO\HYHUVHHWKHVDPHFOLHQWWZLFH VRPHWLPHV\RXKDYHWRGRWKDWEXWVWLOO2UVXUH\RX
DQG³ FRXOGMXVWNHHSVHQGLQJWKHFRQYHUVDWLRQDOVWDWHEDFNWR
WKHFOLHQWVRWKDWWKH\FDQWXUQDURXQGDQGVHQGLWEDFN
6WDWHIXOEHDQ0\SRLQWH[DFWO\<RX·UHQRWHYHQ WR<28ZLWKHDFKFDOODQG³
3+<6,&$//<DEOHWRVXVWDLQDPHDQLQJIXORQJRLQJ
UHODWLRQVKLS 6WDWHOHVVEHDQ:KDW·VZURQJZLWKWKDW"

6WDWHOHVVEHDQ([FXVHPH" 6WDWHIXOEHDQ+HUH·VDQHZZRUGIRU\RXU
YRFDEXODU\´EDQGZLGWKµ3URQRXQFHLWZLWKPH
6WDWHIXOEHDQ,W·VWKDWVKRUWWHUPPHPRU\ORVV ´EDDDQGZLLLLGWKµ'R\RXUHDOO\ZDQWDOOWKDWJRLQJEDFN
WKLQJ<RXFDQ·WKROGDQ\FOLHQWLQIRUPDWLRQEHWZHHQ DQGIRUWK"
PHWKRGFDOOVZKLFKLVZK\LWGRHVQ·WPDWWHU:+,&+
FOLHQWFDOOV<RX·GQHYHUEHDEOHWRUHPHPEHUHYHQLI\RX 6WDWHOHVVEHDQ2N\HDKJRWLW%XWWHOOPHKRZ
JRWWKHVDPHFOLHQWFDOOLQJWHQRI\RXUPHWKRGVLQDURZ LVWKLVZRUVHIRUSHUIRUPDQFHWKDQWKHKLWIURP
SDVVLYDWLRQDFWLYDWLRQ"$QGZKLOHZH·UHDWLW³ZDLWGLG
6WDWHOHVVEHDQ<HDKEXWWKDW·VQRWDSUREOHP \RXKHDUWKDW",WKLQN,KHDU\RXUFOLHQWFDOOLQJ$QG
5HPHPEHU,·PXVHGIRUVHUYLFHVWKDWGRQ·W1(('PH LWVRXQGOLNHQRZDLW\HV,·PDIUDLGLWVRXQGVOLNH
WRUHPHPEHUDQ\WKLQJIURPFOLHQWVEHWZHHQPHWKRG KH·VFDOOLQJUHPRYH ,W·VEHHQQLFHWDONLQJWR\RX,·OO
FDOOV EHWKLQNLQJDERXW\RXZKLOH,·PRXWDWWKHSRRO)ORDWLQJ
RQDLUPDWWUHVV*HWWLQJDWDQ'ULQNLQJPDUJDULWDVZLWK
VKDYHGLFH:RZ,/29(EHLQJPH

 &KDSWHU
VHVVLRQEHDQOLIHF\FOH
3XWDFKHFNQH[WWRWKHPHWKRGVWKDW\RXFDQFDOORQ\RXU6HVVLRQ&RQWH[WLILW·VDOORZHGIURPWKH
PHWKRGVLQWKHOHIWFROXPQ)RUH[DPSOHLQHME&UHDWH \RXFDQJHWDUHIHUHQFHWR\RXUKRPHIRUERWK
WhatÕs allowed? VWDWHOHVVDQGVWDWHIXOVHVVLRQEHDQVVR\RXFDQSXWDFKHFNLQWKHWRSER[LQERWKFROXPQV$OORIWKH
DQVZHUVDUHLQWKLVFKDSWHUEXWWU\WRPDNH\RXUEHVWJXHVVEHIRUHJRLQJEDFNIRUWKHDQVZHUV<RX
PLJKWZDQWWRPDNHDQRWKHURQHRIWKHVH\RXUVHOIWRLQFOXGH-1',UHVRXUFHDQGEHDQDFFHVV

%HDQPHWKRGV 6WDWHIXO 6WDWHOHVV


8VH\RXU6HVVLRQ&RQWH[WWR 8VH\RXU6HVVLRQ&RQWH[WWR

‰ JHWDUHIHUHQFHWR\RXUKRPH ‰ JHWDUHIHUHQFHWR\RXUKRPH
HME&UHDWH
‰ JHWDUHIHUHQFHWR\RXU(-%REMHFW ‰ JHWDUHIHUHQFHWR\RXU(-%REMHFW
HME5HPRYH
‰ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW ‰ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW
‰ IRUFHDWUDQVDFWLRQWRUROOEDFN &07 ‰ IRUFHDWUDQVDFWLRQWRUROOEDFN &07
EHDQV EHDQV
‰ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\ ‰ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\
EHHQVHWWRUROOEDFN &07EHDQV EHHQVHWWRUROOEDFN &07EHDQV
‰ JHWDWUDQVDFWLRQUHIHUHQFHDQGFDOO ‰ JHWDWUDQVDFWLRQUHIHUHQFHDQGFDOO
PHWKRGVRQLW %07EHDQV PHWKRGVRQLW %07EHDQV

8VH\RXU6HVVLRQ&RQWH[WWR

HME3DVVLYDWH ‰ JHWDUHIHUHQFHWR\RXUKRPH
HME$FWLYDWH ‰ JHWDUHIHUHQFHWR\RXU(-%REMHFW 'RHVQRWDSSO\
VWDWHOHVVEHDQVDUH
‰ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW QHYHUSDVVLYDWHG
‰ IRUFHDWUDQVDFWLRQWRUROOEDFN &07
EHDQV
‰ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\
EHHQVHWWRUROOEDFN &07EHDQV
‰ JHWDWUDQVDFWLRQUHIHUHQFHDQGFDOO
PHWKRGVRQLW %07EHDQV
8VH\RXU6HVVLRQ&RQWH[WWR 8VH\RXU6HVVLRQ&RQWH[WWR

‰ JHWDUHIHUHQFHWR\RXUKRPH ‰ JHWDUHIHUHQFHWR\RXUKRPH
EXVLQHVV
PHWKRGV
‰ JHWDUHIHUHQFHWR\RXU(-%REMHFW ‰ JHWDUHIHUHQFHWR\RXU(-%REMHFW
‰ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW ‰ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW
‰ IRUFHDWUDQVDFWLRQWRUROOEDFN &07 ‰ IRUFHDWUDQVDFWLRQWRUROOEDFN &07
EHDQV EHDQV
‰ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\ ‰ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\
EHHQVHWWRUROOEDFN &07EHDQV EHHQVHWWRUROOEDFN &07EHDQV
‰ JHWDWUDQVDFWLRQUHIHUHQFHDQGFDOO ‰ JHWDWUDQVDFWLRQUHIHUHQFHDQGFDOO
PHWKRGVRQLW %07EHDQV PHWKRGVRQLW %07EHDQV

\RXDUHKHUH 
FRIIHHFUDPPRFNH[DP

0RFN([DP
7HICHSTATEMENTSABOUTSESSIONBEANSARETRUE#HOOSEALLTHATAPPLY
1
R! !STATEFULSESSIONBEANISTYPICALLYUSEDTOREPRESENTAROWINADATABASE
R" 4HECLIENTMUSTCALLTHEEJB!CTIVATEMETHODBEFORECALLINGANYBUSINESS
METHODS
R# !STATEFULSESSIONBEANSlELDSCANCONTAINCLIENTCONVERSATIONALSTATE
R$ 4HEYARETYPICALLYUSEDASASYNCHRONOUSMESSAGECONSUMERS

7HICHLISTS CORRECTLYSEQUENCESOMEOFTHESTEPSINASESSIONBEANSLIFECYCLE
2 #HOOSEALLTHATAPPLY
R! HME&UHDWH QHZ,QVWDQFH VHW6HVVLRQ&RQWH[W
R" QHZ,QVWDQFH VHW6HVVLRQ&RQWH[W HME&UHDWH
R# HME&UHDWH VHW6HVVLRQ&RQWH[W QHZ,QVWDQFH
R$ QHZ,QVWDQFH HME&UHDWH VHW6HVVLRQ&RQWH[W 
R% VHW6HVVLRQ&RQWH[W QHZ,QVWDQFH HME&UHDWH

7HICHTYPESOFSESSIONBEANINSTANCElELDSCANBESUCCESSFULLYPASSIVATEDAND
3 REACTIVATED#HOOSEALLTHATAPPLY
R! !REFERENCETOTHEREMOTEHOMEINTERFACE
R" !REFERENCETOTHE5SER4RANSACTIONINTERFACE
R# !REFERENCETOADATABASECURSOR
R$ !REFERENCETOTHE3ESSION#ONTEXTOBJECT
R% !REFERENCETOASOCKET

 &KDSWHU
VHVVLRQEHDQOLIHF\FOH

7HICHAREVALIDREMOTECOMPONENTINTERFACESFORASESSIONBEAN#HOOSEALL
4 THATAPPLY
R! SXEOLFLQWHUIDFH0\%HDQH[WHQGVMDYD[HME(-%2EMHFW^
  YRLGP\0HWKRG 
`
R"SXEOLFLQWHUIDFH0\%HDQH[WHQGVMDYD[HME(-%2EMHFW
WKURZV5HPRWH([FHSWLRQ^
 YRLGP\0HWKRG 
`
R# SXEOLFLQWHUIDFH0\%HDQH[WHQGV
MDYD[HME(-%+RPH2EMHFW^
YRLGP\0HWKRG WKURZV5HPRWH([FHSWLRQ
`
R$SXEOLFLQWHUIDFH0\%HDQH[WHQGVMDYD[HME(-%2EMHFW^
  YRLGP\0HWKRG WKURZV5HPRWH([FHSWLRQ
`

)FACLIENTMAKESACALLTOASESSIONOBJECTTHATHASBEENREMOVEDBYTHE
5 CONTAINER WHICHEXCEPTIONSCANBETHROWN#HOOSEALLTHATAPPLY
R! MDYDUPL5HPRWH([FHSWLRQ
R" MDYD[HME5HPRYH([FHSWLRQ
R# MDYDUPL1R6XFK2EMHFW([FHSWLRQ
R$ MDYD[HME1R6XFK(QWLW\([FHSWLRQ
R%MDYD[HME2EMHFW1RW)RXQG([FHSWLRQ

'IVEN
6 0\%HDQFUHDWH 6WULQJQDPH WKURZV&UHDWH([FHSWLRQ

5HPRWH([FHSWLRQ
7HICHSESSIONBEANINTERFACECANCONTAINTHISMETHOD
R! /NLYSTATEFULSESSIONBEANS
R" /NLYSTATELESSSESSIONBEANS
R# "OTHSTATEFULANDSTATELESSSESSIONBEANS
R$ .EITHERSTATEFULNORSTATELESSSESSIONBEANS

\RXDUHKHUH 
FRIIHHFUDPPRFNH[DP

7HATISTRUEABOUTASESSIONBEANSLIFECYCLE#HOOSEALLTHATAPPLY
7
R! )FABUSINESSMETHODTHROWSASYSTEMEXCEPTIONTHEBEANWILLBE
PASSIVATED
R" !PASSIVATEDBEANMUSTBEACTIVATEDBEFOREITCANBEREMOVED
R# !STATELESSSESSIONBEANSREMOVALMUSTBEINITIATEDBYTHECLIENTNOTTHE
CONTAINER
R$ 3TATELESSSESSIONBEANSCANNOTIMPLEMENTTHE3ESSION3YNCHRONIZATION
INTERFACE

7HICHAREREQUIREDOFTHEBEANPROVIDERTOENSURETHATASESSIONBEANIS
8 SUCCESSFULLYPASSIVATED#HOOSEALLTHATAPPLY
R! 4HEPROVIDERMUSTCALLHME3DVVLYDWH 
R" 4HEPROVIDERMUSTALWAYSADDBUSINESSLOGICTOTHEHME3DVVLYDWH 
METHOD IFTHEBEANISSTATEFUL
R# 4HEPROVIDERMUSTCLOSEANYDATABASECONNECTIONSBEFORE
HME3DVVLYDWH COMPLETES
R$ 4HEPROVIDERMUSTASSUMETHATANYSTATESTOREDININSTANCElELDSMARKED
TRANSIENTWILLBELOST
R% 4HEPROVIDERMUSTASSUMETHATANYREFERENCETOTHE3ESSION#ONTEXT
OBJECTWILLBENOTSURVIVEPASSIVATIONIFTHE3ESSION#ONTEXTOBJECTISNOT
SERIALIZABLE

'IVENASTATELESSSESSIONBEANWITHCONTAINER MANAGEDTRANSACTION
9 DEMARCATION FROMWHICHMETHODS CANYOUACCESSANOTHERBEAN#HOOSE
ALLTHATAPPLY
R! HME&UHDWH
R" HME5HPRYH 
R# ABUSINESSMETHOD
R$ VHW6HVVLRQ&RQWH[W

 &KDSWHU
VHVVLRQEHDQOLIHF\FOH

.OTE4HEREALEXAMHASSEVERALTYPESOF@DRAGANDDROPQUESTIONS THAT
10 WEREGOINGTODOALAMEJOBOFSIMULATINGWITHTHISQUESTION
-ATCHTHEMETHODSONTHELEFTWITHTHEINTERFACESINWHICHTHOSEMETHODS
CANBEFOUND ONTHERIGHT!MATCHISCORRECTIFTHEMETHODISEITHERDECLARED
IN ORINHERITEDBY THEINTERFACE.OTE4HEREMAYBESOMEMANY TO ONEAND
ONE TO MANYRELATIONSHIPSINYOURANSWER

!AFTER#OMPLETION 3ESSION3YNCHRONIZATION
"GET5SER4RANSACTION 3ESSION#ONTEXT
#AFTER"EGIN 3ESSION"EAN
$IS#ALLER)N2OLE 5SER4RANSACTION
%GET2OLL"ACK/NLY
&SET3ESSION#ONTEXT
'SET2OLLBACK/NLY

11 7HATISTRUEABOUTASESSIONBEANSLIFECYCLE#HOOSEALLTHATAPPLY
R! 4HECONTAINERWILLALWAYSCREATEANEWSESSIONBEANINSTANCEWHEN
THECLIENTINVOKESTHEFUHDWH METHODONTHEHOMEINTERFACEOFA
STATELESSBEAN
R" 4HECONTAINERWILLALWAYSCALLHME5HPRYH WHENTHECLIENTINVOKES
THEUHPRYH METHODONASTATELESSBEANSHOMEINTERFACE
R# !SESSIONBEANCANNOTBEPASSIVATEDWHILEITISINATRANSACTION
R$ 4HEVHW6HVVLRQ&RQWH[W METHODISNOTINVOKEDDURINGASTATELESS
BEANSLIFECYCLE

7HICHOFTHEFOLLOWINGMETHODSARECONTAINERCALLBACKMETHODS#HOOSEALL
12 THATAPPLY
R! HME3DVVLYDWH
R" VHW5ROOEDFN2QO\
R# VHW6HVVLRQ&RQWH[W
R$ JHW5ROOEDFN2QO\
R%JHW8VHU7UDQVDFWLRQ

\RXDUHKHUH 
FRIIHHFUDPPRFNH[DP

)NWHATCASES WILLTHECONTAINERFAILTOCALLEJB2EMOVE ONASESSIONBEAN


13 #HOOSEALLTHATAPPLY
R! )FTHECONTAINERCRASHES
R" )FANAPPLICATIONEXCEPTIONISTHROWNFROMABUSINESSMETHOD
R# )FATIMEOUTOCCURSWHILETHEBEANISINTHEMETHODREADYSTATE
R$ )FANAPPLICATIONEXCEPTIONISTHROWNFROMWITHINATRANSACTION

7HICHMETHODS ALLOWBOTHSTATEFULANDSTATELESSSESSIONBEANSWITHBEAN
14 MANAGEDTRANSACTIONDEMARCATIONTOACCESS5SER4RANSACTIONMETHODS
#HOOSEALLTHATAPPLY
R! HME&UHDWH
R" HME5HPRYH
R# ABUSINESSMETHOD
R$ VHW6HVVLRQ&RQWH[W

&ORWHICHTYPEOFBEANCANTHECONTAINERPASSIVATEANINSTANCETHATISINA
15 TRANSACTION
R! ONLYSTATEFULSESSIONBEANS
R" ONLYSTATELESSSESSIONBEANS
R# BOTHSTATEFULANDSTATELESSSESSIONBEANS
R$ NEITHERSTATEFULNORSTATELESSSESSIONBEANS

&ORSESSIONBEANS WHICHARETHERESPONSIBILITYOFTHE#ONTAINER#HOOSEALL
16 THATAPPLY
R! )NVOKINGTHELOCALINTERFACEFUHDWH METHOD
R" )NVOKINGTHEJHW6HVVLRQ&RQWH[W METHOD
R# )NVOKINGTHEHME&UHDWH METHOD
R$ %NSURINGTHATTHEHME5HPRYH METHODISALWAYSINVOKED

 &KDSWHU
VHVVLRQEHDQOLIHF\FOH

&ORTHISDRAGANDDROPTYPEQUESTION YOUCANUSEEACHELEMENTONLYONCE
17 7HICHINTERFACESHOULDBEMATCHEDWITHWHICHFACT SOTHATALLFOURMATCHES
ARECORRECT
REMOTECOMPONENTA(ASAJHW+RPH+DQGOH METHOD
REMOTEHOMEBEXTENDSµMDYD[HME(-%2EMHFW¶
LOCALCOMPONENTCMETHODSMUST./4THROW
      µMDYDUPL5HPRWH([FHSWLRQ¶
LOCALHOMEDCANBEUSEDTORETRIEVEAN%*",OCAL/BJECT

7HICHCANBECALLEDBYTHECONTAINERDURINGTHELIFECYCLEOFASESSIONBEAN
18 #HOOSEALLTHATAPPLY
R! FUHDWH
R" BEANCONSTRUCTOR
R# VHW5ROOEDFN2QO\
R$ JHW8VHU7UDQVDFWLRQ
R%HME5HPRYH
7HICHSTATEMENTSABOUTASESSIONBEANCLASSARETRUE#HOOSEALLTHATAPPLY
19
R! 4HEYCANBEMARKED@lNAL
R" 4HEYDONOTNEEDANO ARGUMENTCONSTRUCTOR
R# 4HEIRCOMPONENTINTERFACEMETHODSCANBE@PRIVATE
R$ 4HEIRBUSINESSMETHODNAMESMUSTSTARTWITHhEJBv
R%4HEIR@EJB#REATEMETHODSMUSTNOTBEDECLAREDAS@lNAL

&ORWHICHTYPEOFBEANCANTHE3ESSION3YNCHRONIZATIONINTERFACEBE
20 IMPLEMENTED
R!ONLYSTATEFULSESSIONBEANS
R"ONLYSTATELESSSESSIONBEANS
R# BOTHSTATEFULANDSTATELESSSESSIONBEANS
R$ NEITHERSTATEFULNORSTATELESSSESSIONBEANS

\RXDUHKHUH 
FRIIHHFUDPPRFNH[DP

7HICHSTATEMENTSARETRUEFORSTATELESSSESSIONBEANINSTANCES#HOOSEALL
21 THATAPPLY
R!!NYINSTANCECANBEUSEDFORANYCLIENT
R"#ONVERSATIONALSTATEMUSTBERETAINEDACROSSMETHODS
R##ONVERSATIONALSTATEMUSTBERETAINEDACROSSTRANSACTIONS
R$ 4HEYCANBEPASSIVATED
R%4HEYDONOTSUPPORTTRANSACTIONS

 &KDSWHU
VHVVLRQEHDQOLIHF\FOH

0RFN([DP$QVZHUV
(spec: 71)
7HICHSTATEMENTSABOUTSESSIONBEANSARETRUE#HOOSEALLTHATAPPLY
1 what entity
R! !STATEFULSESSIONBEANISTYPICALLYUSEDTOREPRESENTAROWINADATABASE -thatsÕsdo
bean
R" 4HECLIENTMUSTCALLTHEEJB!CTIVATEMETHODBEFORECALLINGANYBUSINESS - only the container calls
METHODS ejbActivate()
R# !STATEFULSESSIONBEANSlELDSCANCONTAINCLIENTCONVERSATIONALSTATE
R$ 4HEYARETYPICALLYUSEDASASYNCHRONOUSMESSAGECONSUMERS

7HICHLISTS CORRECTLYSEQUENCESOMEOFTHESTEPSINASESSIONBEANSLIFECYCLE (spec: 77)


2 #HOOSEALLTHATAPPLY
R! HME&UHDWH QHZ,QVWDQFH VHW6HVVLRQ&RQWH[W
R" QHZ,QVWDQFH VHW6HVVLRQ&RQWH[W HME&UHDWH
R# HME&UHDWH VHW6HVVLRQ&RQWH[W QHZ,QVWDQFH
R$ QHZ,QVWDQFH HME&UHDWH VHW6HVVLRQ&RQWH[W 
R% VHW6HVVLRQ&RQWH[W QHZ,QVWDQFH HME&UHDWH

3 7HICHTYPESOFSESSIONBEANINSTANCElELDSCANBESUCCESSFULLYPASSIVATEDAND (spec: 71)


REACTIVATED#HOOSEALLTHATAPPLY
R! !REFERENCETOTHEREMOTEHOMEINTERFACE
R" !REFERENCETOTHE5SER4RANSACTIONINTERFACE ization
be r, pa ss ivat io n could be serial
R# !REFERENCETOADATABASECURSOR - remem
R$ !REFERENCETOTHE3ESSION#ONTEXTOBJECT
R% !REFERENCETOASOCKET - remember, passivation cou
ld be serialization

\RXDUHKHUH 
PRFNH[DPDQVZHUV

(spec: 97)
7HICHAREVALIDREMOTECOMPONENTINTERFACESFORASESSIONBEAN#HOOSEALL
4 THATAPPLY
R! SXEOLFLQWHUIDFH0\%HDQH[WHQGVMDYD[HME(-%2EMHFW^
  YRLGP\0HWKRG  - needs RemoteException
`
R"SXEOLFLQWHUIDFH0\%HDQH[WHQGVMDYD[HME(-%2EMHFW
WKURZV5HPRWH([FHSWLRQ^
- illegal Java !

YRLGP\0HWKRG 
`
R# SXEOLFLQWHUIDFH0\%HDQH[WHQGV - nope, gotta be EJBObj
ect
MDYD[HME(-%+RPH2EMHFW^
YRLGP\0HWKRG WKURZV5HPRWH([FHSWLRQ
`
R$SXEOLFLQWHUIDFH0\%HDQH[WHQGVMDYD[HME(-%2EMHFW^
  YRLGP\0HWKRG WKURZV5HPRWH([FHSWLRQ
`

)FACLIENTMAKESACALLTOASESSIONOBJECTTHATHASBEENREMOVEDBYTHE (spec: 79)


5 CONTAINER WHICHEXCEPTIONSCANBETHROWN#HOOSEALLTHATAPPLY
R! MDYDUPL5HPRWH([FHSWLRQ )
R" MDYD[HME5HPRYH([FHSWLRQ - this happen
s only on remove(
R# MDYDUPL1R6XFK2EMHFW([FHSWLRQ
R$ MDYD[HME1R6XFK(QWLW\([FHSWLRQ - clients donÕt
see this
R%MDYD[HME2EMHFW1RW)RXQG([FHSWLRQ- this is for entity Þn
ders

'IVEN (spec: 98)


6 0\%HDQFUHDWH 6WULQJQDPH WKURZV&UHDWH([FHSWLRQ
5HPRWH([FHSWLRQ
7HICHSESSIONBEANINTERFACECANCONTAINTHISMETHOD
must have
R! /NLYSTATEFULSESSIONBEANS
Stateless bearangusment create
R" /NLYSTATELESSSESSIONBEANS only a no-
R# "OTHSTATEFULANDSTATELESSSESSIONBEANS
R$ .EITHERSTATEFULNORSTATELESSSESSIONBEANS

 &KDSWHU
VHVVLRQEHDQOLIHF\FOH

(spec: 79, 88)


7HATISTRUEABOUTASESSIONBEANSLIFECYCLE#HOOSEALLTHATAPPLY
7 killed
R! )FABUSINESSMETHODTHROWSASYSTEMEXCEPTIONTHEBEANWILLBE - no, the bean is
PASSIVATED
R" !PASSIVATEDBEANMUSTBEACTIVATEDBEFOREITCANBEREMOVED - nope
R# !STATELESSSESSIONBEANSREMOVALMUSTBEINITIATEDBYTHECLIENTNOTTHE
CONTAINER
R$ 3TATELESSSESSIONBEANSCANNOTIMPLEMENTTHE3ESSION3YNCHRONIZATION
INTERFACE

(spec: 71-72)
7HICHAREREQUIREDOFTHEBEANPROVIDERTOENSURETHATASESSIONBEANIS
8 SUCCESSFULLYPASSIVATED#HOOSEALLTHATAPPLY
R! 4HEPROVIDERMUSTCALLHME3DVVLYDWH 
R" 4HEPROVIDERMUSTALWAYSADDBUSINESSLOGICTOTHEHME3DVVLYDWH 
METHOD IFTHEBEANISSTATEFUL
R# 4HEPROVIDERMUSTNOTCLOSEANYDATABASECONNECTIONSBEFORE
HME3DVVLYDWH COMPLETES
R$ 4HEPROVIDERMUSTASSUMETHATANYSTATESTOREDININSTANCElELDSMARKED
TRANSIENTWILLBELOST
R% 4HEPROVIDERMUSTASSUMETHATANYREFERENCETOTHE3ESSION#ONTEXT
OBJECTWILLBENOTSURVIVEPASSIVATIONIFTHE3ESSION#ONTEXTOBJECTISNOT
SERIALIZABLE , no matter what!
Container MUST passivate your context
'IVENASTATELESSSESSIONBEANWITHCONTAINER MANAGEDTRANSACTION (spec: 90)
9 DEMARCATION FROMWHICHMETHODS CANYOUACCESSANOTHERBEAN#HOOSE
ALLTHATAPPLY
R! HME&UHDWH
R" HME5HPRYH 
R# ABUSINESSMETHOD - also true for stateless BMT beans
R$ VHW6HVVLRQ&RQWH[W

\RXDUHKHUH 
PRFNH[DPDQVZHUV

.OTE4HEREALEXAMHASSEVERALTYPESOF@DRAGANDDROPQUESTIONS THAT (API docs)


10 WEREGOINGTODOALAMEJOBOFSIMULATINGWITHTHISQUESTION
-ATCHTHEMETHODSONTHELEFTWITHTHEINTERFACESINWHICHTHOSEMETHODS
CANBEFOUND ONTHERIGHT!MATCHISCORRECTIFTHEMETHODISEITHERDECLARED
IN ORINHERITEDBY THEINTERFACE.OTE4HEREMAYBESOMEMANY TO ONEAND
ONE TO MANYRELATIONSHIPSINYOURANSWER

!AFTER#OMPLETION 1 3ESSION3YNCHRONIZATION
"GET5SER4RANSACTION 2 3ESSION#ONTEXT
#AFTER"EGIN 1 3ESSION"EAN
$IS#ALLER)N2OLE 2 5SER4RANSACTION
%GET2OLL"ACK/NLY 2
&SET3ESSION#ONTEXT 3
'SET2OLLBACK/NLY 2,4
7HATISTRUEABOUTASESSIONBEANSLIFECYCLE#HOOSEALLTHATAPPLY (spec: 70)
11
R! 4HECONTAINERWILLALWAYSCREATEANEWSESSIONBEANINSTANCEWHEN
THECLIENTINVOKESTHEFUHDWH METHODONTHEHOMEINTERFACEOFA
STATELESSBEAN - Container makes stateless beans whenever it wants
R" 4HECONTAINERWILLALWAYSCALLHME5HPRYH WHENTHECLIENTINVOKES - Container remove
s
THEUHPRYH METHODONASTATELESSBEANSHOMEINTERFACE stateless bean ONLYa
R# !SESSIONBEANCANNOTBEPASSIVATEDWHILEITISINATRANSACTION when it wants to shrink
the pool
R$ 4HEVHW6HVVLRQ&RQWH[W METHODISNOTINVOKEDDURINGASTATELESS
BEANSLIFECYCLE

12 7HICHOFTHEFOLLOWINGMETHODSARECONTAINERCALLBACKMETHODS#HOOSEALL (spec: 73)


THATAPPLY
R! HME3DVVLYDWH
R" VHW5ROOEDFN2QO\
R# VHW6HVVLRQ&RQWH[W
R$ JHW5ROOEDFN2QO\
R%JHW8VHU7UDQVDFWLRQ

 &KDSWHU
VHVVLRQEHDQOLIHF\FOH

)NWHATCASES WILLTHECONTAINERFAILTOCALLEJB2EMOVE ONASESSIONBEAN (spec: 82)


13 #HOOSEALLTHATAPPLY
R! )FTHECONTAINERCRASHES
R" )FANAPPLICATIONEXCEPTIONISTHROWNFROMABUSINESSMETHOD
R# )FATIMEOUTOCCURSWHILETHEBEANISINTHEMETHODREADYSTATE
R$ )FANAPPLICATIONEXCEPTIONISTHROWNFROMWITHINATRANSACTION

7HICHMETHODS ALLOWBOTHSTATEFULANDSTATELESSSESSIONBEANSWITHBEAN (spec: 80, 90)


14 MANAGEDTRANSACTIONDEMARCATIONTOACCESS5SER4RANSACTIONMETHODS
#HOOSEALLTHATAPPLY
R! HME&UHDWH r stateful only
- fo
R" HME5HPRYH
R# ABUSINESSMETHOD
R$ VHW6HVVLRQ&RQWH[W

15 &ORWHICHTYPEOFBEANCANTHECONTAINERPASSIVATEANINSTANCETHATISINA (spec: 70)


TRANSACTION
R! ONLYSTATEFULSESSIONBEANS
R" ONLYSTATELESSSESSIONBEANS
R# BOTHSTATEFULANDSTATELESSSESSIONBEANS
R$ NEITHERSTATEFULNORSTATELESSSESSIONBEANS

&ORSESSIONBEANS WHICHARETHERESPONSIBILITYOFTHE#ONTAINER#HOOSEALL
16 THATAPPLY
it
R! )NVOKINGTHELOCALINTERFACEFUHDWH METHOD- client calls
R" )NVOKINGTHEJHW6HVVLRQ&RQWH[W METHOD - Container calls setSessionContext
R# )NVOKINGTHEHME&UHDWH METHOD
R$ %NSURINGTHATTHEHME5HPRYH METHODISALWAYSINVOKED - might b
passivatede bmeisa sed if
bean throws a n times out, or
exception runtime

\RXDUHKHUH 
PRFNH[DPDQVZHUV

&ORTHISDRAGANDDROPTYPEQUESTION YOUCANUSEEACHELEMENTONLYONCE
17 7HICHINTERFACESHOULDBEMATCHEDWITHWHICHFACT SOTHATALLFOURMATCHES
ARECORRECT
b
REMOTECOMPONENTA(ASAJHW+RPH+DQGOH METHOD
a
REMOTEHOMEBEXTENDSµMDYD[HME(-%2EMHFW¶
c
LOCALCOMPONENTCMETHODSMUST./4THROW
      µMDYDUPL5HPRWH([FHSWLRQ¶
LOCALHOMEDCANBEUSEDTORETRIEVEAN%*",OCAL/BJECT
d

7HICHCANBECALLEDBYTHECONTAINERDURINGTHELIFECYCLEOFASESSIONBEAN (spec: 90, 97)


18 #HOOSEALLTHATAPPLY
R! FUHDWH - client calls
R" BEANCONSTRUCTOR
R# VHW5ROOEDFN2QO\
- bean calls these
R$ JHW8VHU7UDQVDFWLRQ
R%HME5HPRYH

19 7HICHSTATEMENTSABOUTASESSIONBEANCLASSARETRUE#HOOSEALLTHATAPPLY (spec: 95)


R! 4HEYCANBEMARKED@lNAL
R" 4HEYDONOTNEEDANO ARGUMENTCONSTRUCTOR
R# 4HEIRCOMPONENTINTERFACEMETHODSCANBE@PRIVATE
R$ 4HEIRBUSINESSMETHODNAMESMUSTSTARTWITHhEJBv
R%4HEIR@EJB#REATEMETHODSMUSTNOTBEDECLAREDAS@lNAL

20 &ORWHICHTYPEOFBEANCANTHE3ESSION3YNCHRONIZATIONINTERFACEBE (spec: 75)


IMPLEMENTED
R!ONLYSTATEFULSESSIONBEANS
R"ONLYSTATELESSSESSIONBEANS
R# BOTHSTATEFULANDSTATELESSSESSIONBEANS
R$ NEITHERSTATEFULNORSTATELESSSESSIONBEANS

 &KDSWHU
VHVVLRQEHDQOLIHF\FOH

7HICHSTATEMENTSARETRUEFORSTATELESSSESSIONBEANINSTANCES#HOOSEALL
21 THATAPPLY
(spec: 88)
R!!NYINSTANCECANBEUSEDFORANYCLIENT
R"#ONVERSATIONALSTATEMUSTBERETAINEDACROSSMETHODS
R##ONVERSATIONALSTATEMUSTBERETAINEDACROSSTRANSACTIONS
R$ 4HEYCANBEPASSIVATED
R%4HEYDONOTSUPPORTTRANSACTIONS

\RXDUHKHUH 
entity bean intro
5 4
4 (QWLWLHVDUH3HUVLVWHQW
DQGWKHQ,VDLG´<RXZDQWDSLHFH
RIPH"*RDKHDGWDNH\RXUEHVWVKRWEXGG\µ
+HGLGQ·WNQRZKHZDVPHVVLQJZLWKDQHQWLW\EHDQ6R
KHWKUHZDQH[FHSWLRQWKHQKHFUDVKHGWKHVHUYHU
EXW,·PVWLOOKHUH,ZRQ·WJRGRZQWKDWHDV\QR
VLUHH$VORQJDV,·PLQWKHGDWDEDVH,·OOMXVW
NHHSFRPLQJEDFNVRGR\RXUZRUVW

(QWLW\EHDQVSHUVLVW(QWLW\EHDQVH[LVW(QWLW\EHDQVDUH7KH\DUHREMHFW
UHSUHVHQWDWLRQVRIVRPHWKLQJLQDQXQGHUO\LQJSHUVLVWHQWVWRUH 7KLQNGDWDEDVH
EHFDXVHPRVWHQWLW\EHDQVUHSUHVHQWVRPHWKLQJIURPDUHODWLRQDOGDWDEDVH ,I\RX
KDYHD&XVWRPHUHQWLW\EHDQWKHQRQHEHDQPLJKWUHSUHVHQWWKHHQWLW\7\OHU'XUGHQ
,'ZKLOHDQRWKHULVWKHHQWLW\'RQQ\'DUNR,'7ZREHDQVUHSUHVHQWLQJWZR
UHDOHQWLWLHV$QHQWLW\EHDQLVVLPSO\DUHDOL]DWLRQRIVRPHWKLQJWKDWDOUHDG\H[LVWVLQD
SHUVLVWHQWVWRUH6RPHWKLQJWKDWDOUHDG\LV$QGWKHVHVXFNHUVDUHKDUGWRNLOO$VORQJDV
WKHGDWDLVLQWKHGDWDEDVHLWFDQNHHSFRPLQJEDFNLQWKHIRUPRIDQHQWLW\EHDQ

WKLVLVDQHZFKDSWHU 
H[DPREMHFWLYHV

(QWLW\%HDQV
2IILFLDO :KDWLWUHDOO\PHDQV
 ,GHQWLI\FRUUHFWDQGLQFRUUHFWVWDWHPHQWVRU <RXKDYHWRNQRZWKHUXOHVIRUDQHQWLW\EHDQKRPH
H[DPSOHVDERXWWKHFOLHQWYLHZRIDQHQWLW\ LQWHUIDFHDQGHVSHFLDOO\KRZWKH\¶UHGLIIHUHQWIURPD
EHDQ¶VORFDODQG5HPRWHKRPHLQWHUIDFH VHVVLRQEHDQ<RXPXVWNQRZWKDW\RX¶UHQRWUHTXLUHG
LQFOXGLQJWKHFRGHXVHGWRORFDWHDQHQWLW\ WRKDYHDFUHDWH PHWKRGEXWWKDW\RXPXVWKDYH
EHDQ¶VKRPHLQWHUIDFHDQGWKHKRPH DWOHDVWRQH¿QGHUPHWKRG¿QG%\3ULPDU\.H\ <RX
LQWHUIDFHPHWKRGVSURYLGHGWRWKHFOLHQW KDYHWRNQRZWKDWWKHUHWXUQW\SHRIVLQJOHHQWLW\
¿QGHUVDQGFUHDWHPHWKRGVPXVWDOZD\VEHWKH
FRPSRQHQWLQWHUIDFHW\SHEXWWKDWPXOWLHQWLW\¿QGHUV
PXVWUHWXUQD&ROOHFWLRQ<RXPXVWNQRZWKDWVLQJOH
HQWLW\¿QGHUVWKURZDQ2EMHFW1RW)RXQG([FHSWLRQLI
WKHUH¶VQRPDWFKLQWKHGDWDEDVHEXWWKDWPXOWLHQWLW\
¿QGHUVDOZD\VUHWXUQD&ROOHFWLRQHYHQLILWVHPSW\
<RXDOVRKDYHWRNQRZWKDWKRPHEXVLQHVVPHWKRGV
DUHQ¶WUHTXLUHGWRUHWXUQWKHFRPSRQHQWLQWHUIDFH²
WKH\FDQUHWXUQDQ\WKLQJWKDWFDQEHOHJDOO\SDVVHG
<RXPXVWDOVRNQRZWKDWLIDQHQWLW\LVGHOHWHGIURPWKH
GDWDEDVHLWFDQQRORQJHUEHUHSUHVHQWHGDVDQHQWLW\
EHDQEXWWKDWLIDQHQWLW\EHDQLQVWDQFHGLHV WKURXJK
DQH[FHSWLRQRUHYHQDVHUYHUFUDVK WKHHQWLW\LWVHOI
SHUVLVWV$VORQJDVWKHHQWLW\LVLQWKHGDWDEDVHLWFDQ
EHUHSUHVHQWHGE\DQHQWLW\EHDQ

 ,GHQWLI\FRUUHFWDQGLQFRUUHFWVWDWHPHQWV 7KHUXOHVIRUKRZ\RXGH¿QHWKLQJVLQDQHQWLW\


 RUH[DPSOHVDERXWWKHFOLHQWYLHZRIDQ FRPSRQHQWLQWHUIDFHDUHLGHQWLFDOWRWKHUXOHVIRUD
HQWLW\EHDQ¶VORFDOFRPSRQHQWLQWHUIDFH VHVVLRQEHDQFRPSRQHQWLQWHUIDFH%XWLQREMHFWLYH
(-%/RFDO2EMHFW DQG5HPRWHFRPSRQHQW ZH¶OOORRNDWKRZWKHPHWKRGVEHKDYHGLIIHUHQWO\
LQWHUIDFH (-%2EMHFW
 ,GHQWLI\WKHXVHV\QWD[DQGEHKDYLRURIWKH 7KHEHKDYLRURIUHPRYH LVSURIRXQGO\GLIIHUHQWIRU
IROORZLQJHQWLW\EHDQKRPHPHWKRGW\SHV DQHQWLW\EHDQDQG\RXPXVWXQGHUVWDQGWKDWFDOOLQJ
IRU&03¿QGHUPHWKRGVFUHDWHPHWKRGV UHPRYH UHDOO\PHDQV³GHOHWHWKLVHQWLW\IURPWKH
UHPRYHPHWKRGVDQGKRPHEXVLQHVV XQGHUO\LQJSHUVLVWHQWVWRUH´<RXPXVWNQRZWKDW
PHWKRGV FDOOLQJFUHDWH RQDQHQWLW\EHDQPHDQV³LQVHUWD
QHZURZLQWKHGDWDEDVH´ 2.WHFKQLFDOO\LWPHDQV
³FUHDWHDQHZHQWLW\LQWKHXQGHUO\LQJSHUVLVWHQWVWRUH´ 
<RXPXVWNQRZWKDWLIDQHQWLW\LVGHOHWHGIURPWKH
XQGHUO\LQJSHUVLVWHQWVWRUHWKHHQWLW\EHDQµGLHV¶HYHQ
WKRXJKWKHEHDQLQVWDQFHJRHVEDFNWRWKHSRRO
 &KDSWHU
HQWLW\EHDQLQWUR

?PI\¼[IVMV\Q\aJMIV'
/DVW'DUNR
)LUVW'RQQ\
&86720(57$%/( ,'
/DVW )LUVW ,'
&XV Q
'DUNR 'RQQ\  WRPHU%HD

-RQHV ,QGLH 


/DVW-RQHV
/LQ 7DP 
)LUVW,QGLH
,'

&XV Q
e. WRPHU%HD
s re pr es en t da ta in a persistent stor
Entity bean means that entity (a bean ob- /DVW/LQ
That almost always ti on al da ta base ro ws lthough it )LUVW7DP
to re la ce
jects map
lo t m or e co m pl ex than just one instan
can be a ,'
maps to one row...)
&XV Q
WRPHU%HD

!NENTITYBEANISANOBJECT ORIENTEDWAYOFLOOKINGATINAPERSISTENTSTORE4HESPEC
SAYShPERSISTENTSTOREv ANDDOESNTSPECIFYWHATTHATPERSISTENTSTOREMUSTBE)TCOULD
BEANYTHINGTHATSATISlESTHEREQUIREMENTSOF@PERSISTENCEINCLUDINGARELATIONAL
DATABASE ANOBJECTDATABASE OREVENSOMETHINGASLAMEANDINEFlCIENTASSTORING
SERIALIZEDOBJECTSTOlLES"UTINMOSTREAL WORLDSCENARIOS WERETALKINGARELATIONAL
DATABASE!NDTHATMEANSANINDIVIDUALROWINATABLEMAPSTOAUNIQUEENTITYBEAN
4HEOBJECT TO RELATIONAL/2 MAPPINGCOULDBEALOTMORECOMPLEXTHANASIMPLEONE
ROWEQUALSONEBEANSCENARIO BUTWELLGETINTOTHATINTHENEXTCHAPTER
%NTITYBEANSAREDATAOBJECTS4HEYARETHINGS.OUNS!SOPPOSEDTOSESSIONBEANS
WHICHAREPROCESSES6ERBS%NTITYBEANSMIGHTREPRESENTTHINGSLIKEPEOPLE PRODUCTS
ORDERS BOOKINGS INVENTORY ANIMALSTHINGS%NTITYBEANSWOULDNOTREPRESENT
THINGSLIKECREDITCARDVERIlCATION ADVISORSERVICE ORDERSUBMISSION MEMBERSHIP
REGISTRATIONPROCESSES
/FCOURSE INVIRTUALLYALLWELL DESIGNED%*"APPLICATIONS ENTITYBEANSWILLBECOMBINED
WITHSESSIONBEANS WHERETHECLIENTINTERACTSWITHTHEPROCESSSESSIONBEAN ANDTHE
SESSIONBEANUSESENTITYBEANSWHENITNEEDSDATAASPARTOFTHEPROCESS

\RXDUHKHUH 
HQWLW\EHDQV

-V\Q\QM[^[-V\Q\a*MIV[
!NENTITYISTHEREALTHINGTHATTHEENTITYBEANREPRESENTS
)TDOESNTWORKINREVERSE4HEENTITYDOESNOTREPRESENT
THEENTITYBEAN4HATMIGHTSEEMLIKEASUBTLEPOINT BUT
ITSNOT4HEDIFFERENCEISINKNOWINGWHICHONEISREAL
ANDWHICHONEISSIMPLYAVIEWOFTHEREALTHING
)NOTHERWORDS IFYOUDELETETHEREALENTITYTHETHING
INTHEDATABASE THEENTITYBEANDISINTEGRATES0OOF"UT +L,·OOEHSOD\LQJ\RX
IFTHEENTITYBEANDIES ASANINSTANCEONTHEHEAP IT IRUWKLVWUDQVDFWLRQVR,·G
DOESNTKILLTHEREALENTITYINTHEDATABASE"YTHEWAY OLNHWRNQRZDOLWWOHPRUH
DERXW\RX
WERENOWGOINGTOSAY@DATABASEINSTEADOF@UNDERLYING
PERSISTENTSTORE BUTYOUAND)BOTHKNOWTHATTHESETWO
ARENOTNECESSARILYSYNONYMOUS ANDTHATTHE@UNDERLYING 'DUNR 'RQQ\ 
PERSISTENTSTORENEEDNOTBEˆBUTUSUALLYISˆADATABASE
4HERE WEVESAIDIT entity
3OYOUWONTHAVETHERIGHTPERSPECTIVEIFYOUTHINKOF entity b
THEENTITYBEANASSOMEDATAOBJECTTHATHAPPENSTOBE ean
BACKEDUPTOPERSISTENTSTORAGE)NNEARLYALLAPPLICATIONS
THEVASTMAJORITYOFENTITIESUSEDINTHEAPPARENOT
REALIZEDASENTITYBEANSATANYGIVENTIME)NSTEAD MOST
ENTITYBEANSBECOMEAREPRESENTATIONOFANUNDERLYING
ENTITYONLYWHENTHATPARTICULARENTITYISNEEDEDINTHE
APPLICATIONLOGIC
&OREXAMPLE IMAGINEYOURDATABASEHAS 
CUSTOMERS"UTATANYGIVENTIME CLIENTSTHROUGH
BUSINESSPROCESSESINSESSIONBEANS AREUSINGONLY
OFTHOSECUSTOMERS)NTHATCASE YOUPROBABLYHAVEONLY
ENTITYBEANSACTIVELYREPRESENTINGCUSTOMERENTITIES
4HERESTOFTHE CUSTOMERENTITIESAREJUSTSITTING
THEREINTHEDATABASE WAITINGFORACLIENTPROCESSTO
NEEDTHEM
4HINKOFENTITYBEANSASACTORS)NTHESCENARIOWEJUST
DESCRIBED YOUHAVEACTORS EACHPLAYINGADIFFERENT
ROLEOFSOMEONEINTHEDATABASE"UTTHEOTHER 
ENTITIESINTHEDATABASEˆTHEOTHERCUSTOMERSˆDONOT
HAVEANYONEPLAYINGTHEM
"UTASSOONASACLIENTCOMESALONGANDTRIESTOGETONE
OFTHOSEOTHER  SAY TOCHANGETHATCUSTOMERS
ADDRESS ORCHECKITSCREDITLIMIT ANACTORENTITYBEAN
WILLBECHOSENTOPLAYTHEROLEOFTHATSELECTEDCUSTOMER

 &KDSWHU
HQWLW\EHDQLQWUR

WKHUH DUH QR
'XPE 4XHVWLRQV
Q: *USTSO)VEGOTTHISSTRAIGHT
(QWLW\EHDQVDUHDQ22ZD\RI
YOURENTIREDATABASEDOESNTGET
LOADEDINASENTITYBEANS RIGHT)
MEAN THATWOULDBEINSANE ORRNLQJDWGDWDLQDSHUVLVWHQWVWRUH

A: 9OURERIGHT ATLEASTABOUTTHE $QHQWLW\LVDUHDOXQLTXHO\


FIRSTPART.O YOURENTIREDATABASE
IS./4LOADEDINASENTITYBEANS LGHQWLILDEOHWKLQJWKDWH[LVWV
4HINKOFENTITYBEANSASJUST IN TIME
REPRESENTATIONSOFONLYTHEENTITIESIN VRPHZKHUHRXWVLGHRI(-%DQG
THEDATABASETHATAREACTIVELYNEEDED
BYCLIENTBUSINESSPROCESSES WKHHQWLW\EHDQ·VMRELVVLPSO\WR
"UTDOESTHATMEANITWOULDBEINSANE
TOLOADTHEMALLIN.OTNECESSARILY %(&20(DQ22YLHZRIWKDWUHDO
7HILEITWOULDCERTAINLYUPYOUR
RESOURCEREQUIREMENTS ESPECIALLYIF SHUVLVWHQWHQWLW\
THEDATAINTHEUNDERLYINGDATABASE
CONTINUESTOGROW JUSTTHINKOFHOW
&!34ITWOULDBE 7KHHQWLW\EHDQFDQQRWH[LVW
!LTHOUGHTHEREISNOTHINGINTHE
SPECTHATREQUIRESTHIS AVENDORCAN ZLWKRXWWKHUHDOHQWLW\EXWWKHUHDO
CHOOSETOLETYOUCONFIGURETHEAPP
INSUCHAWAYTHATITDOESPRE LOAD HQWLW\FDQH[LVWZLWKRXWWKHEHDQ
ALLTHEENTITIESINTHEDATABASEINTO
BEANS4HATGIVESYOU ESSENTIALLY A
LIGHTENING FASTIN MEMORYDATABASE $QHQWLW\EHDQLV127WKHUHDO
THATSTILLSYNCHRONIZESITSELFWITHTHE
REALUNDERLYINGSTOREYOULLSEEHOWIN HQWLW\LW·VMXVWDUHSUHVHQWDWLRQRU
AMOMENT 
!NDTOTAKEITASTEPFURTHER IFYOUR ´UHDOL]DWLRQµRIWKHHQWLW\
SERVERGIVESYOUAWAYTOTELLITTHAT
YOURENTITYBEANSAREYOURONLYACCESS
TOTHEDATABASE THENTHESERVERCAN
EVENELIMINATETHESYNCHRONIZATION
ANDJUSTKEEPTHEDATABASEINMEMORY
SAVINGONLYWHATITNEEDSASABACKUP
INCASEOFACRASH

\RXDUHKHUH 
HQWLW\EHDQV

WKHUH DUH QR
'XPE 4XHVWLRQV
Q: 7HYDOYOUEVEN.%%$ENTITYBEANS7HY
NOTJUSTGOSTRAIGHTTOTHEDATABASEFROMASESSION
BEAN

A: 9OUCANGOFROMASESSIONBEANDIRECTLYTOTHE
DATABASE(ECK YOUCANALWAYSGOFROMTHECLIENTTO
THEDATABASE BUTTHENWEREBACKTOTHEOLDNON
SCALABLECLIENT SERVERTWO TIERARCHITECTURE ANDWE
ALLKNOWWHYTHATISUSUALLYABADIDEADOESNTSCALE
BUSINESSLOGICISINTHECLIENT HARDTOMAINTAIN ETC
QRZ
)FYOUUSEENTITYBEANSINSTEADOFDIRECTCALLSTO
RQ¶WQHHGWRN
<RXG H[DP
THEDATABASE YOUGETTOTAKEADVANTAGEOFALLTHE
%&IRUWKH
#ONTAINERSSERVICES INCLUDINGTHEABILITYTOWRAP 64/RU-'
SEVERALDATABASETRIPSINONETRANSACTION"UTASYOULL WRNQRZ
UW < R X'2QHHG /
SEE ONEOFTHEBIGGESTBENEFITSOFUSINGENTITYBEANS
:HOOIRUWK
HPRVW S D LPLODUWR64
ISTHATTHE#ONTAINERAUTOMATICALLYSYNCHRONIZES KLVLQ V R PHZD\VV ERX W
(-%4/Z
KLF KLQJD
NQRZDQ\W U
BETWEENTHEDATABASEANDTHEENTITYBEAN
X W\RX GRQ¶WQHHGWR [D PGRHVQ¶WFRYH
E K LOH WK HH 
$QGZ EHDQ
"UTTHESINGLEMOSTCOMPELLINGREASONFORENTITY 64/LWVHOI QRZWKDWD
BEANSISTHATTHEYTAKEYOUFROMTHERELATIONALWORLD & \R X' 2QHHGWRN UFHIURPZKLFK
-'% WD6RX
YD[VTO'D LRQ<RX¶OO
TOTHEOBJECTWORLD)NOTHERWORDS YOUGETTOSTAY ORRNXSDMD MD YD VTO&RQQHFW H
WKHEHDQF
DQJH WD RNXSVLQWK
WITHOBJECTSALLTHEWAYDOWN INYOURAPP RATHER
D ER X W' D WD6RXUFHOR

THANMAPPINGBACKANDFORTHINYOURCODE!NDIF OHDUQPRUH QPHQW
(-%HQYLUR
YOUREUSING#-0 WHICHYOUALMOSTCERTAINLYWILLBE FKDSWHURQ
FORREASONSTHATWILLBECOMEOBVIOUSALITTLELATER
YOUWONTHAVEASHREDOF31,INYOURBEANCODE)N
FACT WITH#-0ENTITYBEANS YOUGETTOPRETENDTHAT
YOURENTIREDATABASEEXISTSSOLELYASOBJECTSONTHE
HEAP
3URE MAYBEYOURECOMFORTABLEWITH*$"# BUTWHAT
ABOUTTHERESTOFTHETEAM!NDLETSFACEITˆTHINK
INGIN//MAKESALOTMORESENSETHANHAVINGTO
SHIFTBETWEEN//ANDENTITYCODE

 &KDSWHU
HQWLW\EHDQLQWUR

-V\Q\aJMIV[NZWU\PMKTQMV\¼[XWQV\WN^QM_

:LWKWKHFXVWRPHUEHDQ ,ZDQWWR
LQSXWQHZFXVWRPHUVUHPRYHFXVWRPHUV
DQGXSGDWHFXVWRPHULQIRUPDWLRQ,DOVR
ZDQWWRGRTXHULHVWRVHOHFWFXVWRPHUV
EDVHGRQVRPHFULWHULD$QG,·PVRUU\EXW
,MXVW5()86(WRWKLQNLQ64/<RXNQRZ
ZKDWWKH\VD\RQFH\RX·YHWULHGDQ
REMHFW\RX·OOQHYHUJREDFN

7KHFOLHQWZDQWVWRGRGDWDEDVH
VWXIIEXWLQD-DYD22ZD\

ƒ 0DNHDQHZHQWLW\ DQ64/,16(57
ƒ 'HOHWHDQHQWLW\ DQ64/'(/(7(
ƒ 8SGDWHHQWLW\VWDWH DQ64/83'$7(
ƒ 6HDUFKTXHU\RQHQWLWLHV DQ64/6(/(&7
4HECLIENTINTERFACEFORANENTITYBEANISA
LITTLEDIFFERENTFROMTHATOFASESSIONBEAN&OR
EXAMPLE WHENASESSIONBEANCLIENTWANTSTO
GETABEAN SOTHATITCANCALLTHEBEANSBUSINESS
METHODS THECLIENTCALLSCREATE ANDTHE
#ONTAINERALLOCATESANEW%*"OBJECT
"UTWHATIFACLIENTWANTSTOUSEANEXISTINGENTITY
BEAN&OREXAMPLE WHATIFTHECLIENTDOESNT
WANTJUSTSOMERANDOMENTITY BUTWANTSTHE%*"
OBJECTOFASPECIlCENTITY SAY "ART3IMPSON
)NTHATCASE ACREATE WONTWORK4HECLIENT
DOESNTWANTANEWENTITY BUTWANTSAREFERENCETO
ANEXISTINGENTITY3OASYOULLSEEINAMINUTE THE
CLIENTINTERFACEFORANENTITYBEANADDSANDMUST
HAVE ONEORMORElNDERMETHODS
4HENEXTTWOPAGESAREHIGH LEVELPICTURESOF
HOWENTITYBEANSARECREATEDINSERT ANDFOUND
SELECT 4HESCENARIOSINTHESEPICTURESWILLBE
lLLEDINWITHALOTMOREDETAILASWEGOTHROUGH
THISCHAPTER BUTFORNOWYOUCANRELAX

\RXDUHKHUH 
HQWLW\EHDQV

(QWLW\EHDQRYHUYLHZ
6FHQDULRFOLHQWZDQWVDUHIHUHQFHWRDQH[LVWLQJHQWLW\

FRQWH[W

EHDQ

FOLHQW
EHDQ

OWR FRQWH[W
ÀQ +RPH KHSRR
G% REMHFW DEH DQLQW H[LVWV
DVN 
ULP 
\3
WKDW
DU  YHULI\
%HDQ3RRO
\.
´µ
VWXE
H\
´ ULPDU\.H\
\3

ÀQG% '%

 $IWHUGRLQJD-1',ORRNXSRQWKHHQWLW\EHDQKRPHDQGJHWWLQJDKRPHLQWHUIDFHUHIHUHQFH
WKHFOLHQWFDOOVILQG%\3ULPDU\.H\ ´µ RQWKHKRPHVWXE
 7KHILQG%\3ULPDU\.H\ ´µ PHWKRGLQYRFDWLRQLVSDVVHGWRWKHKRPHREMHFW
 7KH&RQWDLQHUDVNVDEHDQLQWKHSRROWRYHULI\WKDWH[LVWVLQWKHGDWDEDVH

 (-%
REMHFW

VWXE


UHWX EHDQ
UQ(-
%RE 
MHFW FRQWH[W
VWXE +RPH LVWVµ
REMHFW VH[
´<H
%HDQ3RRO 

'%

 7KHEHDQFKHFNVIRUDQHQWLW\LQWKHGDWDEDVHZLWKSULPDU\NH\
 7KHEHDQWHOOVWKHKRPHWKDWLVLQWKHGDWDEDVH
 7KH&RQWDLQHUPDNHVRUILQGVDQ(-%REMHFWIRU WKHUHPLJKWDOUHDG\EHRQH
 7KH&RQWDLQHUUHWXUQVWKHVWXEIRU

 &KDSWHU
HQWLW\EHDQLQWUR

(QWLW\EHDQRYHUYLHZ
6FHQDULRFOLHQWZDQWVWRFUHDWHDQHZHQWLW\

FRQWH[W

EHDQ
EHDQ
FOLHQW FRQWH[W

+RPH
 SRR
O
FU QIURP
HD  REMHFW EHD
WH JHW
´%  %HDQ3RRO
LOO\
%REµ
VWXE
% %LOO\
RE WH ´
µ FUHD
'%

 $IWHUGRLQJD-1',ORRNXSRQWKHHQWLW\EHDQKRPHDQGJHWWLQJDKRPHLQWHUIDFHUHIHUHQFH
WKHFOLHQWFDOOVFUHDWH ´%LOO\%REµ RQWKHKRPHVWXE
 7KHFUHDWH ´%LOO\%REµ PHWKRGLQYRFDWLRQLVSDVVHGWRWKHKRPHREMHFW
 7KH&RQWDLQHUSXOOVDEHDQIURPWKHSRROIRUWKLVEHDQW\SH FRXOGEHDQ\UDQGRPEHDQLQWKH
SRRO 1RWLFHWKDWWKHEHDQDOUHDG\KDVLWVRZQFRQWH[WWKDWVWLFNVZLWKWKHEHDQ


(-%
REMHFW

VWXE EHDQ
FRQWH[W
 

+RPH
REMHFW ,QV
HU
ZL WDQ  %HDQ3RRO
WK H
DQ ZURZ
HZ
SU LQWK
LPD
U\ HGDW '%
NH\ DED
 VH

 7KH&RQWDLQHU RUWKHEHDQ LQVHUWVDQHZURZLQWKHGDWDEDVHDQGWKHEHDQ
JHQHUDWHVDQHZSULPDU\NH\
 7KHEHDQLVOLQNHGWRDQ(-%REMHFWDQGERWKWKHFRQWH[WDQG(-%REMHFWJHWWKHQHZSULPDU\NH\
 7KH&RQWDLQHUUHWXUQVDVWXEIRUWKHQHZO\FUHDWHGHQWLW\ %LOO\%RE ,IWKHFOLHQW·VRQO\
JRDOZDVWRLQVHUWWKHQHZURZWKHFOLHQWPLJKWQRWHYHQFDUHDERXWWKHUHWXUQHGVWXE

\RXDUHKHUH 
&XVWRPHUHQWLW\EHDQ

)^MZa[QUXTM+][\WUMZMV\Q\aJMIV
n
e n t t h e EntityBeeassionBean)
SDFNDJHDQGLPSRUWVKHUH
implem instead of S
SXEOLFFODVV&XVWRPHU%HDQLPSOHPHQWV(QWLW\%HDQ^ interface (
es the Þelds that ca map to
SULYDWH6WULQJODVW1DPH
Th e en tit y beanÕs state includba ta ble , in th is se--
SULYDWH6WULQJ¿UVW1DPH
lum ns in th e Cu sto me r da ta se
co ID (primary key)
Þrst name, last name, and
SULYDWH6WULQJSULPDU\.H\
youÕre
SULYDWH(QWLW\&RQWH[WFRQWH[W Your context is ins even MORE imposiortn anbetanwhen
a ses
 an entity bean tead of
SXEOLF6WULQJHME&UHDWH 6WULQJODVW6WULQJ¿UVW ^
entÕs
ructor? We take thene tclith
ODVW1DPH ODVW
th is loo k a lot lik e a co nst res e
¿UVW1DPH ¿UVW DoesnÕt to ins ta nce variables that rep
args an d ass ign th em e data ba se ta ble ).
SULPDU\.H\ WKLVJHW3. 
entityÕs persistent sta te (i.e. columns in th-- donÕt worry about
'%,16(57
ret ur ns th e pr im ar y ke y
UHWXUQSULPDU\.H\ The ejbCr eat e()
` it right now.
SXEOLF6WULQJJHW/DVW1DPH ^
UHWXUQODVW1DPH
Plain old Java getters
persistent Þelds. The maand
` setters for the
SXEOLFYRLGVHW/DVW1DPH 6WULQJQDPH ^ gic ,
minute, is that the result of astheyouÕll see in a
ODVW1DPH QDPH
` ultimately lead to a database updse setters will
SXEOLF6WULQJJHW)LUVW1DPH ^
ate !
UHWXUQODVW1DPH
`
SXEOLFYRLGVHW)LUVW1DPH 6WULQJQDPH ^
¿UVW1DPH QDPH
`

Three container callbacks from EntityBVER ean, that were


VERY
also in SessionBean. Except... they have thisYchapter.
SXEOLFYRLGHME$FWLYDWH ^`
SXEOLFYRLGHME3DVVLYDWH ^`
SXEOLFYRLGHME5HPRYH ^'(/(7(` different meanings, as youÕll see later in
SXEOLFYRLGVHW(QWLW\&RQWH[W (QWLW\&RQWH[WFW[ ^
ntext, except for an
FRQWH[W FW[ this is just like setSessionhCoentity beans, the context is
` EntityContext. But wit than it is for session beans.

usu ally WAY more important
SXEOLFYRLGXQVHW(QWLW\&RQWH[W ^`
SXEOLFYRLGHME/RDG ^6(/(&7` these are three NEW container cal
lbacks from the EntityB
SXEOLFYRLGHME6WRUH ^83'$7(` interface (not found in Session Bean). TheyÕre IMPORTANT!ean
SULYDWH6WULQJJHW3. ^
UHWXUQ³´ LQW  0DWKUDQGRP    WorldÕs worst primary key algorithm.Normally weÕd
use client-
` supplied info or perhaps the databaseÕs auto- generated key.
(ignore these last two
SXEOLF6WULQJHME)LQG3ULPDU\.H\ 6WULQJSN ^6(/(&7UHWXUQSN` methods for now)
SXEOLF&ROOHFWLRQHME)LQG%\&LW\ 6WULQJFLW\ ^6(/(&7UHWXUQFROOHFWLRQRINH\V`
`

 &KDSWHU
HQWLW\EHDQLQWUR

)VMV\Q\aJMIV¼[KTQMV\^QM_
/UR#USTOMERBEANISNTlNISHED SODONTGETTOOATTACHEDTOIT!NDINFACT THECODE
ISANEXAMPLEOFBEAN MANAGEDPERSISTENCE"-0 WHICHWEREALLYWONTBEUSINGINTHIS
BOOK7ELLTALKALITTLEABOUT"-0 ANDALOTABOUTITSMUCHMOREPOPULARCOUNTERPARTˆ
CONTAINER MANAGEDPERSISTENCE#-0 INTHISCHAPTERANDTHENEXT&ORNOWTHOUGH WELL
FOCUSONTHECLIENTVIEWOFANENTITYBEAN ANDTHISSIMPLEBEANISJUSTTOGETYOUSTARTED
LOOKINGATENTITYBEANCODE
'IVENTHATA#USTOMERBEANREPRESENTSA#USTOMERENTITYIEAREALCUSTOMER INTHE
UNDERLYINGDATABASE WHATBEHAVIORSSHOULDTHEENTITYBEANHAVE)NOTHERWORDS WHAT
KINDSOFTHINGSMIGHTTHECLIENTWANTTODOWITHEITHERASINGLE#USTOMERORMULTIPLE
#USTOMERS
4HINGSYOUDDOWITHADATABASERECORD4HETHINGSWEMENTIONEDEARLIERINCLUDING
MAKEANEW#USTOMER DELETEA#USTOMER UPDATEA#USTOMERSlELDSCOLUMNS AND
QUERYSEARCHONTHE#USTOMERDATABASE

7KLQNDERXWWKHIROORZLQJRSHUDWLRQVDQGILJXUHRXWZKLFKRI
YiX`e WKHWZRFOLHQWLQWHUIDFHV FRPSRQHQWRUKRPH LVEHWWHUVXLWHG
IRUHDFKRSHUDWLRQ.HHSLQPLQGWKDWWKHUXOHVIRUHQWLW\EHDQ
gfn\i LQWHUIDFHVPLJKWEHGLIIHUHQWIURPVHVVLRQEHDQLQWHUIDFHV,I
\RXWKLQNERWKLQWHUIDFHVDUHDSSURSULDWHFKHFNWKHPERWK
:H·YHGRQHWKHILUVWRQHIRU\RX

MDYD[HME 
LPSRUWMDYD
UPL5HPRWH([
MDYD[HME 
LPSRUWMDYD
UPL5HPRWH([
0DNHDQHZFXVWRPHU
FHSWLRQ FHSWLRQ

KRPH FRPSRQHQW

MDYD[HME 
LPSRUWMDYD
UPL5HPRWH([
MDYD[HME 
LPSRUWMDYD
UPL5HPRWH([
&KDQJHDQH[LVWLQJFXVWRPHU¶VSKRQHQXPEHU
FHSWLRQ FHSWLRQ

KRPH FRPSRQHQW

LPSRUWMDYD
UPL5HPRWH([
LPSRUWMDYD
UPL5HPRWH([
)LQGDOOWKHFXVWRPHUVLQ3OHDVDQWYLOOH
FHSWLRQ FHSWLRQ

KRPH FRPSRQHQW

MDYD[HME 
LPSRUWMDYD
UPL5HPRWH([
MDYD[HME 
LPSRUWMDYD
UPL5HPRWH([
'HOHWHDOOFXVWRPHUVSUHYLRXVO\GHFODUHGµLQDFWLYH¶
FHSWLRQ FHSWLRQ

KRPH FRPSRQHQW

LPSRUWMDYD
UPL5HPRWH([
LPSRUWMDYD
UPL5HPRWH([
'HOHWHDVSHFL¿FFXVWRPHU
FHSWLRQ FHSWLRQ

KRPH FRPSRQHQW

MDYD[HME 
LPSRUWMDYD
UPL5HPRWH([
MDYD[HME 
LPSRUWMDYD
UPL5HPRWH([
*HWWKHVWUHHWDGGUHVVRIDVSHFL¿FFXVWRPHU
FHSWLRQ FHSWLRQ

KRPH FRPSRQHQW

\RXDUHKHUH 
HQWLW\5HPRWHFRPSRQHQWLQWHUIDFH

-V\Q\aJMIV:MUW\MKWUXWVMV\QV\MZNIKM
!NENTITYBEANSCOMPONENTINTERFACEISJUSTLIKEASESSIONBEANSˆITHASBUSINESS
METHODS ANDITEXTENDSJAVAXEJB%*"/BJECT4HATMEANSACLIENTCANSEETHEMETHODS
YOUVEDECLAREDINYOURCOMPONENTINTERFACE ASWELLASTHEMETHODSFROM%*"/BJECT
GET(ANDLE REMOVE ETC 
"UTWHATKINDSOFBUSINESSMETHODSGOINTHECOMPONENTINTERFACE
4HEMETHODSRELATEDTOASINGLEENTITY
7HENTHECLIENTHASAREFERENCETOANENTITYBEANWHICHMEANSAREFERENCETOTHE
BEANS%*"OBJECT OFCOURSE THECLIENTHASAREFERENCETOASINGLE SPECIlCENTITY
&RED&LINTSTONE -ARGE3IMPSON 2OY2ODGERS 
3OWHATMIGHTACLIENTWANTTODOWITHAREFERENCETO SAY -ARGE3IMPSON$ELETE
HER CHANGEHERLASTNAME GETHERHANDLE ORGETHERHOMESOTHATTHECLIENTCANGET
REFERENCESTOOTHERCUSTOMERS+EEPINMINDTHATOURSIMPLE#USTOMERBEANISNTVERY
USEFULYET WITHMETHODSTOGETORSETONLYTHE#USTOMERNAME,ATER WELLBUILDITOUT

:KDW<28ZULWH :KDWWKH&/,(17VHHV

LQWHUIDFH!! LQWHUIDFH!!
&XVWRPHU &XVWRPHU
JHW/DVW1DPH JHW/DVW1DPH
VHW/DVW1DPH 6WULQJV VHW/DVW1DPH 6WULQJV
JHW)LUVW1DPH JHW)LUVW1DPH
VHW)LUVW1DPH 6WULQJV VHW)LUVW1DPH 6WULQJV

JHW3ULPDU\.H\
JHW(-%+RPH
JHW+DQGOH
LQWHUIDFH!!
5HPRWH UHPRYH
LV,GHQWLFDO

n
Remember the actual
h e sa m e m et h ods that sessroiom
hierarchy for Remote LQWHUIDFH!!
These are t see, because they come f
component interfaces- (-%2EMHFW
bean clients .EJBObject interface!
the component interface the javax.ejb the
extends EJBObject, and b er , t h e cl ie nt can access r Customer
Remem you
EJBObject extends you declare in
Remote methods thatLUS the Þve methods from
interface, P BObject.
LQWHUIDFH!!
&XVWRPHU
javax.ejb.EJ

 &KDSWHU
HQWLW\EHDQLQWUR

-V\Q\aJMIV:MUW\MKWUXWVMV\QV\MZNIKM

SDFNDJHKHDG¿UVW

LPSRUWMDYD[HME 
LPSRUWMDYDUPL5HPRWH([FHSWLRQ

SXEOLFLQWHUIDFH&XVWRPHUH[WHQGV(-%2EMHFW^

SXEOLF6WULQJJHW/DVW1DPH WKURZV5HPRWH([FHSWLRQ
SXEOLFYRLGVHW/DVW1DPH 6WULQJODVW1DPH WKURZV5HPRWH([FHSWLRQ

SXEOLF6WULQJJHW)LUVW1DPH WKURZV5HPRWH([FHSWLRQ
SXEOLFYRLGVHW)LUVW1DPH 6WULQJ¿UVW1DPH WKURZV5HPRWH([FHSWLRQ

\RXDUHKHUH 
HQWLW\5HPRWHFRPSRQHQWLQWHUIDFH

5XOHVIRUWKH5HPRWHFRPSRQHQWLQWHUIDFH

 ,PSRUWMDYD[HME DQGMDYDUPL5HPRWH([FHSWLRQ

 ([WHQGMDYD[HME(-%2EMHFW

 'HFODUHRQHRUPRUHEXVLQHVVPHWKRGVWKDWWKURZD5HPRWH([FHSWLRQ

4 $UJXPHQWVDQGUHWXUQW\SHVPXVWEH50,,,23FRPSDWLEOH 6HULDOL]DEOH
SULPLWLYH5HPRWHRUDUUD\VRUFROOHFWLRQVRIDQ\RIWKRVH

4 <RXFDQKDYHRYHUORDGHGPHWKRGV
4 (DFKPHWKRGPXVWGHFODUHD5HPRWH([FHSWLRQ
4 <RXFDQGHFODUH\RXURZQDSSOLFDWLRQH[FHSWLRQVEXWWKH\PXVW
127EHUXQWLPHH[FHSWLRQV LQRWKHUZRUGVWKH\PXVWEHFRPSLOHU
FKHFNHGH[FHSWLRQV²VXEFODVVHVRI([FHSWLRQEXWQRWVXEFODVVHVRI
5XQWLPH([FHSWLRQ

4 0HWKRGVFDQKDYHDUELWUDU\QDPHVDVORQJDVWKH\GRQ¶WEHJLQZLWK³HME´

 &KDSWHU
HQWLW\EHDQLQWUR

-V\Q\aJMIV:MUW\MPWUMQV\MZNIKM
0W_Q\¼[LQNNMZMV\NZWUI[M[[QWVJMIVPWUMQV\MZNIKM"

 <RX¶UHPRUHOLNHO\WR¿QGDQH[LVWLQJHQWLW\WKDQFUHDWHDQHZRQH
!SACLIENT YOULLPROBABLYSPENDALOTMORETIMEUSINGREFERENCESTOEXISTING
CUSTOMERS THANYOULLSPENDCREATINGNEWCUSTOMERS7HETHERYOUREUPDATING
ASPECIlCCUSTOMERORDOINGABATCHOPERATIONONMANYCUSTOMERS YOULLNEED
HOMEINTERFACECODETHATLETSYOUSELECTCUSTOMERS MORETHANYOULLNEEDCREATION
METHODS)NFACT THECREATE METHODISOPTIONALFORENTITYBEANS"ECAUSEYOU
MIGHTHAVEAPOLICYTHATSAYSNEWENTRIESINTHEDATABASEMUSTBEDONEDIRECTLY
THROUGHADATABASEADMINTOOL FOREXAMPLE "UTYOUREREQUIREDTOPUTATLEAST
ONElNDERMETHODFORANENTITYBEANHOMEˆYOUCANHAVEASMANYlNDERSASYOU
LIKE BUTYOUMUSTHAVElND"Y0RIMARY+EY3TRINGPRIMARY+EY INEVERYENTITYHOME
7HICHMEANSITMIGHTBETHEONLYMETHODDECLAREDINTHEHOMEINTERFACE

 <RXPLJKWZDQWWRGRTXHULHVWKDWLQYROYHPRUHWKDQRQHHQWLW\
3INCESESSIONBEANSREPRESENTPROCESS ITDOESNTMAKESENSETO SAY GETMULTIPLE
INSTANCESOFTHESAMEPROCESS"UTWITHENTITYBEANS YOUMIGHTWANTTODOTHE
SAMETHINGSYOUDDOONADATABASETABLE LIKElNDALLTHECUSTOMERSWHOLIVEIN
(ELSINKIANDENJOYSURlNG

:KDW<28ZULWH :KDWWKH&/,(17VHHV

LQWHUIDFH!! LQWHUIDFH!!
&XVWRPHU+RPH &XVWRPHU+RPH
FUHDWH 6WULQJODVW6WULQJILUVW FUHDWH 6WULQJODVW6WULQJILUVW
ILQG%\3ULPDU\.H\ 6WULQJNH\ ILQG%\3ULPDU\.H\ 6WULQJNH\
ILQG%\&LW\ 6WULQJFLW\ ILQG%\&LW\ 6WULQJFLW\

JHW(-%0HWD'DWD
JHW+RPH+DQGOH
the
client can see
UHPRYH +DQGOHK
An entity beaetnhods a session bean UHPRYH 2EMHFWNH\
same four m e, because both session
client can se ean home interfaces
and entity b javax.ejb.EJBHome.
must extend get to use BOTH
Entity beans ) methods, while
home remove( can use only the one
session beans Handle.
that takes a
\RXDUHKHUH 
HQWLW\KRPHLQWHUIDFH

?PI\LWM[\PMKTQMV\ZMITTa_IV\
NZWUIVMV\Q\aJMIVPWUM '
LQWHUIDFH!!
give
ByPrimaryKeyhe
&XVWRPHU+RPH
eat e a nd Þnd
cr ference to t &XVWRPHUFUHDWH 6WULQJODVW6WULQJILUVW
back a single treerface. &XVWRPHUILQG%\3ULPDU\.H\ 6WULQJNH\
component in
-row Þnder
But a multipllleection of references &ROOHFWLRQILQG%\&LW\ 6WULQJFLW\
returns a co

7ITHSESSIONBEANS THATWASEASYˆAREFERENCETOTHE
COMPONENTINTERFACE!NDTHATSEXACTLYWHATTHECREATE
METHODSHAVETOGIVEBACK 7KHFUHDWHDQGILQGHU
7ITHENTITYBEANS ITSTHESAMEFORCREATE METHODSˆTHEY
MUSTGIVEBACKAREFERENCETOTHECOMPONENTINTERFACE INTHIS
PHWKRGVLQDQHQWLW\EHDQ
CASETHECOMPONENTINTERFACEFORTHEENTITYJUSTCREATED KRPHDOZD\VJLYHEDFN
"UTWHATIFYOUWANTTOlNDANEXISTINGENTITYBEAN WKHEHDQ·VFRPSRQHQW
INSTEADOFMAKINGANEWONE4HATSWHATTHEMANDATORY
lND"Y0RIMARY+EY METHODISFOR ANDIT TOO MUSTGIVEBACK LQWHUIDFH
AREFERENCETOTHECOMPONENTINTERFACEFORTHEBEANMATCHING
THATKEY )RUFUHDWH DQG
"UTWHATIFTHEREISNTAMATCHINGENTITY)FTHERESNOENTITY ILQG%\3ULPDU\.H\ WKH
WITHTHATKEYINTHEDATABASE THECLIENTGETSAJAVAXEJB/BJECT
.OT&OUND%XCEPTION3OTHERETURNTYPEOFlND"Y0RIMARY+EY FOLHQWJHWVDUHIHUHQFHWR
ISALWAYSTHESAMEASITISFORCREATE THECOMPONENTINTERFACE
FORTHATBEANTYPE!NDOFCOURSE THERULESFORSESSIONBEAN RQH(-%REMHFW
CLIENTINTERFACESAPPLIESHEREASWELLˆA2EMOTEHOMEINTERFACE
MUSTGIVEBACKTHE2EMOTECOMPONENTINTERFACE ANDTHELOCAL )RUPXOWLSOHHQWLW\
HOMEINTERFACEMUSTGIVEBACKTHELOCALCOMPONENTINTERFACE
ILQGHUVWKHFOLHQWPLJKW
4HISSTILLLEAVESUSWITHAMETHODTHATCANNOTRETURNTHE
COMPONENTINTERFACEAMULTIPLE ENTITYlNDER LIKEOUR JHWDZKROH3,/(RI
lND"Y#ITY METHOD7ELL THECLIENTSGOALDOESNTCHANGE
WITHMULTIPLE ENTITYlNDERSTHECLIENTSTILLWANTSAREFERENCE
UHIHUHQFHVWR(-%REMHFWV³
TOTHECOMPONENTINTERFACE ONLYTHISTIMEITMIGHTBEAWHOLE RQHIRUHDFKEHDQWKDW
COLLECTIONOFTHEM/NEFOREVERYCUSTOMERENTITYINTHECITY
NAMEDINTHEMETHODSARGUMENT PDWFKHVWKHTXHU\
.OTEACLIENTWILLNOTGETANEXCEPTIONIFAMULTI ENTITYlNDER
CANTlNDANYMATCHES)NSTEAD THECLIENTWILLSTILLGETA
#OLLECTION BUTITWILLSIMPLYBEEMPTY!#OLLECTIONWITHNO
ELEMENTS/NLYSINGLE ENTITYlNDERSTHROWEXCEPTIONSWHEN
NOTHINGMATCHESTHElNDCRITERIA

 &KDSWHU
HQWLW\EHDQLQWUR

-V\Q\aJMIV:MUW\MPWUMQV\MZNIKM

SDFNDJHKHDG¿UVW

LPSRUWMDYD[HME 
LPSRUWMDYDUPL5HPRWH([FHSWLRQ
LPSRUWMDYDXWLO&ROOHFWLRQ

SXEOLFLQWHUIDFH&XVWRPHU+RPHH[WHQGV(-%+RPH^

SXEOLF&XVWRPHUFUHDWH 6WULQJODVW6WULQJ¿UVW WKURZV&UHDWH([FHSWLRQ5HPRWH([FHSWLRQ

SXEOLF&XVWRPHU¿QG%\3ULPDU\.H\ 6WULQJNH\ WKURZV)LQGHU([FHSWLRQ5HPRWH([FHSWLRQ

SXEOLF&ROOHFWLRQ¿QG%\&LW\ 6WULQJFLW\ WKURZV)LQGHU([FHSWLRQ5HPRWH([FHSWLRQ


`

\RXDUHKHUH 
HQWLW\¿QGHUV

?PMVNQVLMZ[PI^MILIZS[QLM

,MXVWWKRXJKWRIDSUHWW\VFDU\
VFHQDULRLI,ZDQWP\FOLHQWWRGLVSOD\D
OLVWRIDOOP\FXVWRPHUVLW·VMXVWRQHFDOO
WRÀQG$OO EXW7+(1ZKDW"$UH\RXWHOOLQJPH
,ZRXOGJHWEDFND]LOOLRQUHPRWHVWXEV"$QG
WKHQ,·GKDYHWRPDNHUHPRWHPHWKRGFDOOVRQ
HDFKRQH"7KDWZRXOGWDNH)25(9(5QRWWR
PHQWLRQDOOWKHEDQGZLGWK7KDWGRHVQ·W
VRXQGJRRGDWDOO

:LWKD5HPRWHLQWHUIDFH
ILQGHUDQGFUHDWHPHWKRGV
JLYHEDFN5HPRWHVWXEV
7KDWPHDQV\RXKDYHWR
PDNHUHPRWHPHWKRGFDOOV
RQHDFKRQHWRJHWWKHGDWD
\RXZDQW

 &KDSWHU
HQWLW\EHDQLQWUR

:RXOGQ·WLWEHGUHDP\LIWKHUH
ZHUHDZD\WRKDYHPHWKRGVLQWKH
KRPHWKDWFRXOGJLYHEDFNVRPHWKLQJRWKHU
WKDQ(-%REMHFWUHIHUHQFHV",IDOO,ZDQWLV
WKHGDWDDERXWWKHFXVWRPHUVOLNHMXVWDEXQFK
RI6WULQJVWRGLVSOD\ZRXOGQ·WLWEHJUHDWLI
,FRXOGKDYHDPHWKRGLQWKHKRPHWKDW
FRXOGJLYHEDFNMXVWWKHGDWD"%XWLW·V
SUREDEO\DIDQWDV\

WKHUH DUH QR
'XPE 4XHVWLRQV
Q: 7AIT)THOUGHTITWASBADDESIGN
TOMAKEALLTHOSEMETHODCALLSFROM
THECLIENT!.97!97OULDNTTHECLIENT
USUALLYGOTHROUGHASESSIONBEAN!ND
THESESSIONBEANWOULDTHENTALKTOTHE
ENTITYBEAN

A: +INDOF9OURETHINKINGOFTHE3ES
SION&ACADE*%%DESIGNPATTERN"UTEVEN
IFYOUDOPUTASESSIONBEANINFRONTOFAN
ENTITYBEAN THESESSIONBEANISSTILLACLIENT
)TMIGHTBEALOTMOREEFFICIENT BECAUSE
THESESSIONBEANMIGHTNOTHAVEASFARTO
GOONTHENETWORKANDMIGHTEVENBEON
THESAMESERVERASTHEENTITY "UTIFYOURE
KEEPINGLOCATION INDEPENDENCE THEN
YOURSESSIONBEANISSTILLUSINGTHEENTITY
BEANS2EMOTEINTERFACES SOTHERESSTILLA
LOTOFOVERHEAD

Q: #OULDNTYOUJUSTHAVEABUSINESS
METHODINTHECOMPONENTINTERFACETHAT
RETURNSDATA,IKE RETURNACOLLECTIONOF
3TRINGS

A: 9OUREGETTINGWARMER9ES THATS
THEWAYYOUMIGHTHAVEDONEITIN%*"
"UTTHATSKLUDGEY BECAUSEYOUHAVETO
FIRSTGETAREFERENCETOSOMECUSTOMER JUST
SOYOUCANASKTHATCUSTOMERTOGIVEYOU
BACKTHEDATAFORALLCUSTOMERS

\RXDUHKHUH 
HQWLW\KRPHEXVLQHVVPHWKRGV

0WUMJ][QVM[[UM\PWL[\W\PMZM[K]M
4HATSRIGHTBUSINESSMETHODSARENTJUSTFORTHE
COMPONENTINTERFACE WHENYOURETALKINGABOUTENTITY
BEANS!SOF%*" ANENTITYBEANHOMECANHAVE
METHODSTHATˆDRUMROLLˆDONTHAVETORETURNCOMPONENT
INTERFACES(OMEBUSINESSMETHODSCANRETURNANYTHING +RPHEXVLQHVVPHWKRGV
WITHTHEONERESTRICTION OFCOURSE THAT2EMOTEHOME
METHODSRETURNVALUESTHATARE2-) ))/0COMPLIANT  FDQUHWXUQVRPHWKLQJ
(OMEBUSINESSMETHODSAREGREATFORBATCHOPERATIONS
ORFORQUERYMETHODSWHERETHECLIENTDOESNTNEEDˆOR
RWKHUWKDQ(-%REMHFW
WANTˆ%*"OBJECTREFERENCES BUTSIMPLYWANTSTHE UHIHUHQFHV7KH\·UH
ENTITYSDATAINOTHERWORDS THEDATAFORONEORMORE
OFTHEENTITYSPERSISTENTlELDS &OREXAMPLE WEMIGHT SHUIHFWIRUTXHULHVZKHUH
PUTAHOMEBUSINESSMETHODINTHE#USTOMERBEAN
LIKE GET!LL#USTOMER)NFO THATRETURNSACOLLECTIONOF WKHFOLHQWMXVWZDQWVWKH
3TRINGS WITHWHATEVERPIECESOFDATAYOUVEDECIDEDMAKE
UPTHECUSTOMERSINFO"ETTERYET YOUCANSENDBACKA
HQWLW\GDWDQRWUHIHUHQFHV
COLLECTIONOF#USTOMER)NFOOBJECTS WHERE#USTOMER)NFO WRWKHHQWLWLHVWKHPVHOYHV
ISACLASSTHATSIMPLYHOLDSTHEDATAANDGETTERS FORTHE
#USTOMERSPERSISTENTSTATE4HATWAY THECLIENTCANMAKE 7KH\·UHDOVRJUHDWIRU
LOCALCALLSTOGETTHEDATAITNEEDSOUTOFTHE#USTOMER)NFO
OBJECTS WITHOUTHAVINGTHOSECALLSBEREMOTECALLSONTHE EDWFKRSHUDWLRQVRU
COMPONENTINTERFACE
!#USTOMER)NFOCLASSISANEXAMPLEOFA6ALUE/BJECTCLASS
DQ\WKLQJHOVH\RXPLJKW
WHICHIS INANUTSHELL JUSTACLASSWITHGETTERSANDPOSSIBLY ZDQWWRGRZLWKPRUH
SETTERS DEPENDINGONTHEDESIGN REPRESENTINGTHEENTITYS
PERSISTENTlELDS !NDIT TOO HASADARKSIDEˆTHEDATA WKDQRQHVSHFLILFHQWLW\
STARTSTOBECOMESTALETHEMOMENTAFTERTHE6ALUE/BJECTIS
CREATED ZKHQ\RXGRQ·WZDQWWR
7ECOULDTELLYOUNOW BUTTHENWEDBEROBBINGYOUOF UHWXUQUHIHUHQFHVWRWKH
SUCHAVALUABLEOPPORTUNITYTOAPPLYALITTLENEURALEFFORT
3OFORNOW WHYDONTYOUTHINKOFWHYSENDINGBACK FRPSRQHQWLQWHUIDFH
#USTOMER)NFOOBJECTS THATTHECLIENTCOULDTHENINTERROGATE
IECALLMETHODSON ATITSLEISURE COULDHAVEADOWNSIDE
7ELLUSE6ALUE/BJECTSALOT BUTYOUHAVETOBEAWAREOF
THETRADEOFFSWHENCHOOSINGBETWEENUSINGAHOMElNDER
METHODTHATRETURNS%*"OBJECTREFERENCESESPECIALLYWHEN
THEREFERENCESARE2EMOTE VSAHOMEBUSINESSMETHODTHAT
RETURNS6ALUE/BJECTS

 &KDSWHU
HQWLW\EHDQLQWUR

5XOHVIRUWKH5HPRWHKRPHLQWHUIDFH

 ,PSRUWMDYD[HME DQGMDYDUPL5HPRWH([FHSWLRQ

 ([WHQGMDYD[HME(-%+RPH

 'HFODUH RSWLRQDOO\ RQHRUPRUHFUHDWH PHWKRGVZKLFK0867


UHWXUQWKH5HPRWHFRPSRQHQWLQWHUIDFHDQGGHFODUHERWKD
5HPRWH([FHSWLRQDQGD&UHDWH([FHSWLRQ(DFKFUHDWH PHWKRGPXVW
EHJLQZLWKWKHSUH¿[³FUHDWH´

 'HFODUHWKH¿QG%\3ULPDU\.H\ PHWKRGZKLFK0867
UHWXUQWKH5HPRWHFRPSRQHQWLQWHUIDFHDQGGHFODUHERWKD
5HPRWH([FHSWLRQDQGD)LQGHU([FHSWLRQ

 'HFODUH RSWLRQDOO\ RQHRUPRUHRWKHU¿QGHUPHWKRGVZKLFK


0867UHWXUQHLWKHUWKH5HPRWHFRPSRQHQWLQWHUIDFH IRU
VLQJOHHQWLW\¿QGHUV RUMDYDXWLO&ROOHFWLRQ IRUPXOWLSOHHQWLW\
¿QGHUV $OO¿QGHUVPXVWGHFODUHERWKD5HPRWH([FHSWLRQDQGD
)LQGHU([FHSWLRQ

 'HFODUHRQHRUPRUHKRPHEXVLQHVVPHWKRGV

4 $UJXPHQWVDQGUHWXUQW\SHVPXVWEH50,,,23FRPSDWLEOH 6HULDOL]DEOH
SULPLWLYH5HPRWHRUDUUD\VRUFROOHFWLRQVRIDQ\RIWKRVH

4 <RXFDQKDYHRYHUORDGHGPHWKRGV
4 (DFKPHWKRGPXVWGHFODUHD5HPRWH([FHSWLRQ
4 <RXFDQGHFODUH\RXURZQDSSOLFDWLRQH[FHSWLRQVEXWWKH\PXVW
127EHUXQWLPHH[FHSWLRQV LQRWKHUZRUGVWKH\PXVWEHFRPSLOHU
FKHFNHGH[FHSWLRQV²VXEFODVVHVRI([FHSWLRQEXWQRWVXEFODVVHVRI
5XQWLPH([FHSWLRQ

4 0HWKRGVFDQKDYHDUELWUDU\QDPHVDVORQJDVWKH\GRQ¶WEHJLQZLWK
³FUHDWH´³¿QG´RU³UHPRYH´

\RXDUHKHUH 
HQWLW\EHDQV

6KDUSHQ \RXU SHQFLO

)RUWKHIRXUGDWDEDVHRSHUDWLRQV 64/FRPPDQGV DFOLHQWPLJKW


ZDQWWRGRZLWKDQHQWLW\EHDQOLVWWKHPHWKRGVLQWKHEHDQ¶V
LQWHUIDFH V WKDWDUHUHODWHGWRWKRVHGDWDEDVHRSHUDWLRQV1R\RX
GRQ¶WKDYHWRNQRZ64/EXW\RXGH¿QLWHO\KDYHWRXQGHUVWDQGWKH
LPSOLFDWLRQVRIWKHIRXUGDWDEDVHRSHUDWLRQVDQG\RXPXVWNQRZ
KRZWKH\FRUUHVSRQGWRPHWKRGVLQWKHEHDQFODVV

)URPWKHOLVWRIWKHPHWKRGVLQWKHLQWHUIDFHV¿OOLQWKHPHWKRGRU
PHWKRGVWKDWFRUUHVSRQGZLWKWKHGDWDEDVHRSHUDWLRQ

,16(57

'(/(7(

83'$7(

6(/(&7

LQWHUIDFH!!
LQWHUIDFH!!
&XVWRPHU+RPH
&XVWRPHU
FUHDWH 6WULQJODVW6WULQJILUVW JHW/DVW1DPH
ILQG%\3ULPDU\.H\ 6WULQJNH\ VHW/DVW1DPH 6WULQJV
ILQG%\&LW\ 6WULQJFLW\
JHW)LUVW1DPH
JHW(-%0HWD'DWD VHW)LUVW1DPH 6WULQJV
JHW+RPH+DQGOH
UHPRYH +DQGOHK JHW3ULPDU\.H\
UHPRYH 2EMHFWNH\ JHW(-%+RPH
JHW+DQGOH
UHPRYH
LV,GHQWLFDO

 &KDSWHU
HQWLW\EHDQLQWUR

;M[[QWVJMIVKZMI\M^[MV\Q\aJMIVKZMI\M

 6WDWHIXOVHVVLRQEHDQFUHDWH

ƒ &OLHQWFDOOVLWWRJHWDQ(-%REMHFWUHIHUHQFHWRDQHZMXVWIRUPH
VWDWHIXOVHVVLRQEHDQ

ƒ ,WFDQ DQGIUHTXHQWO\GRHV KDYHDUJXPHQWVWKDWWKHEHDQXVHVWRGR


FOLHQWVSHFLILFLQLWLDOL]DWLRQ EHIRUHUXQQLQJDQ\EXVLQHVVPHWKRGV 

ƒ 7KH&RQWDLQHUPDNHVDQHZVHVVLRQEHDQZKHQWKHFOLHQWFDOOVFUHDWH

 6WDWHOHVVVHVVLRQEHDQFUHDWH

ƒ &OLHQWFDOOVLWWRJHWDQ(-%REMHFWUHIHUHQFHWRDEHDQ
ƒ ,WKDVQRDUJXPHQWVDQGWKHEHDQGRHVQRWGRDQ\FOLHQWVSHFLILF
LQLWLDOL]DWLRQ VLQFHDWWKHWLPHWKHEHDQ·VHME&UHDWH LV
FDOOHGWKHEHDQKDVQRDVVRFLDWLRQZLWKDFOLHQW

ƒ 7KH&RQWDLQHUGRHVQRWPDNHDQHZVHVVLRQEHDQZKHQ
WKHFOLHQWFDOOVFUHDWH DQGGRHVQRWSXOORQHRXWRIWKH
SRROXQWLOWKHFOLHQWLQYRNHVDEXVLQHVVPHWKRG

 
RED
 (QWLW\EHDQFUHDWH 2OSESARE ATE
DFORAD
ANDGOO E
WISMAD
ƒ &OLHQWFDOOVLWWRLQVHUWDQHZURZLQWKHGDWDEDVH  ANEWRO ATE
HNEWCRE
$OWKRXJKWKHHQGUHVXOWIRUWKHFOLHQWLVVWLOODQ(-%REMHFW WITHEAC
UHIHUHQFH LQWKLVFDVHWRWKHQHZO\FUHDWHGHQWLW\  T
*"OBJEC
M E M B E R N E W R O W NEW% " O B JECT
2E C REATE N N EW%*
ƒ ,WZLOOYLUWXDOO\DOZD\VKDYHDUJXPHQWV DOWKRXJKWKH\ ENTITYB E A N S  NEW B E A
REATE OBJECT
DUHQ·WPDQGDWRU\EXWLW·VNLQGDKDUGWRLPDJLQHDFUH BEANSC NEW%*"
STATEFUL N S  C RE A TE  
DWH ZLWKRXWWKHPOLNH´+H\GDWDEDVHFUHDWHDQHZ BEA
STATELESS
FXVWRPHUQR,GRQ·WKDYHDQ\QDPHRU,'RUDQ\WKLQJ
MXVWPDNHVRPHVWXIIXSµ 

ƒ 7KH&RQWDLQHUGRHVQRWPDNHDQHZHQWLW\EHDQEXWLWGRHVSXOORQH
RXWRIWKHSRROWRUXQWKHHME&UHDWH PHWKRG5HPHPEHUWKHHME&UH
DWH PHWKRGKDVWRWDNHWKHFUHDWH DUJXPHQWVDQGVRPHKRZFUHDWH
DQHZHQWLW\LQWKHXQGHUO\LQJSHUVLVWHQWVWRUH RUDWOHDVWVXSSRUWWKH
&RQWDLQHULQFUHDWLQJDQHZHQWLW\ 

\RXDUHKHUH 
VHVVLRQYVHQWLW\

;M[[QWVJMIVZMUW^M^[MV\Q\aJMIVZMUW^M

 6WDWHIXOVHVVLRQEHDQUHPRYH

ƒ &OLHQWFDOOVLWWRWHOOWKH&RQWDLQHUWKDWKH·VGRQHZLWKWKHEHDQ
ƒ &RQWDLQHUFDOOVWKHEHDQ·VHME5HPRYH  XQOHVVWKHEHDQLVDOUHDG\SDVVLYDWHG DQG
NLOOVWKHEHDQ WKLQNIRRGIRUWKHJDUEDJHFROOHFWRU

ƒ &OLHQWZLOOJHWDQH[FHSWLRQLIKHWULHVWRXVHWKH(-%REMHFWUHIHUHQFHDIWHUUHPRYLQJ
WKHEHDQ

 6WDWHOHVVVHVVLRQEHDQUHPRYH

ƒ &OLHQWFDOOVLWWRWHOOWKH&RQWDLQHUWKDWKH·VGRQHZLWKWKHEHDQ
ƒ &RQWDLQHUJHWVWKHFDOODQGVD\V´/LNH,FDUH"'R\RXKRQHVWO\WKLQN\RX·UHWKDW
LPSRUWDQW"7KLVEHDQLVDOUHDG\EDFNLQWKHSRROEDE\µ7KH&RQWDLQHUGRHVQRWFDOO
DEHDQ·VHME5HPRYH 7KLQNDERXWLW³ZKLFKEHDQ·VHME5HPRYH ZRXOGLWFDOO"

ƒ &OLHQWZLOOJHWDQH[FHSWLRQLIKHWULHVWRXVHWKH(-%REMHFWUHIHUHQFHDIWHUUHPRYLQJ
WKHEHDQ

 (QWLW\EHDQUHPRYH

ƒ &OLHQWFDOOVLWWRWHOOWKH&RQWDLQHUWRGHOHWHWKHHQWLW\ZLWKWKLVSULPDU\NH\
ƒ &RQWDLQHUFDOOVWKHEHDQ·VHME5HPRYH PHWKRGDQG³LIWKHEHDQVXSSRUWVFOLHQW
WULJJHUHGUHPRYDO³WKHHQWLW\LVGHOHWHGIURPWKHXQGHUO\LQJSHUVLVWHQWVWRUH,QRWKHU
ZRUGVWKHURZLQWKHGDWDEDVHLVKLVWRU\*RQH3RRI

ƒ &OLHQWZLOOJHWDQH[FHSWLRQLIKHWULHVWRXVHWKH(-%REMHFWUHIHUHQFHDIWHUUHPRYLQJ
WKHEHDQ

ƒ ,QIDFW12FOLHQWZLOOEHDEOHWRXVHDQ(-%REMHFWUHIHUHQFHWRWKDWHQWLW\

 &KDSWHU
HQWLW\EHDQLQWUR

,KDWHWRGRWKLVUHDOO\EXW,
KDYHQRFKRLFH0867EH
UHPRYHGIURPWKHGDWDEDVH
UHPRYH RQDVHVVLRQEHDQ
6RLI\RX·YHJRWDQ\ODVWZRUGV\RX
EHWWHUGRLWLQ\RXUHME5HPRYH  PHDQVWKHFOLHQWLVGRQHZLWK
WKHEHDQ
UHPRYH RQDQHQWLW\EHDQ
PHDQV(9(5<21(LVGRQHZLWK
WKHEHDQ

1R3OHDVH1R
,·OOJLYH\RXZKDWHYHU
\RXZDQWMXVWGRQ·W
FDOOUHPRYH 

\RXDUHKHUH 
HQWLW\UHPRYDO

&XW 

/RRNVOLNHVRPHERG\
GLGQ·WUHDGWKHVFULSW<RX
NQRZWKDW·VQRWKRZLWZRUNVLW·V
QRWWKHEHDQLQVWDQFHWKDW·VNLOOHG
EXWWKHHQWLW\LQGDWDEDVH<RX
MXVWJREDFNWRWKHEHDQSRRO
ZKHQWKHFOLHQWFDOOV
UHPRYH %XW,QHYHUJHWWRGRDGHDWK
VFHQH,NQRZLW·VRQO\WKHGDWDEDVH
HQWLW\WKDWJHWVGHOHWHGEXW,MXVW
ZDQWHGVRPHWKLQJDELWPRUHGUDPDWLF
IRUDFKDQJH,NQRZ,·OOGLHLI,WKURZDQ
XQFKHFNHGH[FHSWLRQEXWWKDWFRXOGWDNH
IRUHYHUDQG,ZDVKRSLQJWRJHWD
SDUWLQ´/RUGRIWKH%HDQVµDQG

 &KDSWHU
HQWLW\EHDQLQWUR

-V\Q\aJMIVQV[\IVKMLMI\P
3OWEALLKNOWTHATANENTITYBEANISAREPRESENTATIONOF
SOMEREALENTITYINANUNDERLYINGPERSISTENTSTOREUSUALLYAS
AROWINADATABASE BLAH BLAH BLAH "UTTHERESSTILLSOME
CONFUSIONABOUTWHATDISTINGUISHESANENTITYFROMANENTITY $FOLHQWFDQNLOODQHQWLW\
BEANFROMANENTITYBEANINSTANCE
E\FDOOLQJUHPRYH RQD
%NTITY
4HEREALTHINGINTHEUNDERLYINGPERSISTENTSTORE4HEROWIN
EHDQRUGHOHWLQJWKHGDWD
THEDATABASEALTHOUGHITCANBEMORECOMPLEX !NENTITY IURPWKHGDWDEDVHGLUHFWO\
DIESWHENITSROWISDELETEDFROMTHEUNDERLYINGSTORE EITHER
THROUGHADIRECTDATABASEDELETELIKE SOMEONEUSINGA
DATABASEADMINTOOL ORBECAUSESOMEONECALLSREMOVE ON
%XWRQO\WKH&RQWDLQHURUD
THEBEANSHOMEORCOMPONENTINTERFACE VHUYHUFUDVKFDQNLOODEHDQ
%NTITYBEAN LQVWDQFH
4HECOMPONENTTHATREPRESENTSTHEUNDERLYINGREALENTITY
"UTTHISONESTRICKYISITTHECLASS)SITTHEINTERFACE)SIT ,IZHVD\´HQWLW\EHDQ
THEINSTANCEOFTHEBEANCLASS$URINGDEVELOPMENTAND
DEPLOYMENT THEENTITYBEANISTHEWHOLECOMPONENTTHE ZDVNLOOHGµWKHXQGHUO\LQJ
TWOINTERFACES $$ ANDBEANCLASS "UTATRUNTIME ITCAN
GETALITTLEFUZZY3OMETIMESWEUSEhENTITYBEANvTODESCRIBE HQWLW\LVJRQHDQGWKH(-%
THEPOSSIBILITYOFREPRESENTINGAPARTICULARENTITYASABEAN
)NOTHERWORDS IFTHERESANENTITYFOR"O2ODGERSINTHE
REMHFWIRULVJRQHEXW
DATABASE THENWECANSAYTHATTHEREISA"O2ODGERSENTITY WKHEHDQLQVWDQFHWKDWKDG
BEAN EVENIFTHERESNOBEANINSTANCECURRENTLYREPRESENTING
THATENTITY)FANENTITYEXISTSFORAPARTICULARBEANTYPELIKE EHHQSOD\LQJVXUYLYHV
#USTOMER&RED&OO THEENTITYBEANFORTHATENTITYISSAIDTO
EXIST!NENTITYBEANISSAIDTODIEWHENITSUNDERLYINGENTITY
ISDELETED ASIN h4HERESNO&RED&OOENTITYBEANv"UTTHAT :HOOLW·VEHHQJUHDW
DOESNTMEANTHEINSTANCEONTHEHEAPDIES SOD\LQJ\RXUHDOO\EXWQRZ
LW·VWLPHIRU\RXWRJRWRDEHWWHU
%NTITYBEANINSTANCE SODFH,·OOWKLQNDERXW\RXZKLOH,·P
ÁRDWLQJRQRQHRIWKRVHOLWWOH
4HEINSTANCEOFTHEBEANCLASSONTHEHEAP"EANDEATHIS LQÁDWDEOHPDWWUHVV
INTIMATELYTIEDTOTHEDATABASE BUTBEANINSTANCEDEATHAS WKLQJV
IN hYOUREHEADINFORGARBAGECOLLECTION PALv ISTIEDTOTHE
WHIMSOFTHE#ONTAINER ORASERVERCRASH
'DUNR 'RQQ\ 
9ES ITREALLYISTHATCONFUSING9OUHAVETOKNOWTHECONTEXTTO
KNOWHOWTHEWORD@BEANISBEINGUSED)FITMEANSTHEBEAN
REPRESENTING THE ENTITY THENTHATBEANWILLDIEWHENTHEENTITY
bean in entity DIES when a
DIES ANDTHE%*"OBJECTFORTHATENTITYGOESAWAY"UTˆAND
LIVES stance client calls remove()
HERESWHEREITGETSWEIRDˆTHEENTITYBEANINSTANCEDOESNT
if the e even
DIEITJUSTGOESBACKTOTHEPOOL4HINKOFTHEPHRASEhENTITY
it plays ntity
BEANvASMORECONCEPTUALTHANPHYSICAL)NMOSTCASES WE
removed is
WONTHAVETODISTINGUISHBETWEENTHEBEANANDITSINSTANCE .
ORTHEDISTINCTIONWILLBESOOBVIOUSTHATITSNOTANISSUE
\RXDUHKHUH 
HQWLW\UHPRYDO

&OLHQWFDOOVUHPRYH

FRQWH[W
UHPRYH 
(-%
 REMHFW
 EHDQ
RYH VWXE 
UHP

FOLHQW EHDQ

H  FRQWH[W
PRY

5H
HME

%HDQ3RRO

'%

 &OLHQWFDOOVUHPRYH RQWKH(-%REMHFWVWXEIRUHQWLW\
 7KHUHPRYH PHWKRGLQYRFDWLRQLVSDVVHGWRWKH(-%REMHFW
 7KH&RQWDLQHUFDOOVHME5HPRYH RQWKHEHDQ

FRQWH[W

(-%
REMHFW
EHDQ


EHDQ
FRQWH[W


%HDQ3RRO

GHO
SULP HWHUR
DU\ Z '%
NH\ IRU
 

 7KH&RQWDLQHURUEHDQGHOHWHVWKHHQWLW\LQWKHGDWDEDVH
 7KHEHDQORVHVLWVLGHQWLW\ LQRWKHUZRUGVLWLVQRORQJHUUHSUHVHQWLQJHQWLW\ DQGPRYHV
EDFNWRWKHSRRO0HDQZKLOHWKH(-%REMHFWIRULVGHOHWHGVRWKHFOLHQW·VVWXEZLOOWKURZDQ
H[FHSWLRQLIWKHFOLHQWXVHVLWWRLQYRNHDPHWKRG

 &KDSWHU
HQWLW\EHDQLQWUR

-V\Q\aJMIVKTQMV\^QM_
:MDD=LHGAFLK

ƒ $QHQWLW\LVDUHDOWKLQJWKDWH[LVWVRXWVLGHRI(-%LQD ƒ ,QDQHQWLW\KRPHDFUHDWH PHWKRGLVQRWUHTXLUHG


SHUVLVWHQWVWRUHDQGDQHQWLW\EHDQLVDQ22UHSUH VLQFHFUHDWH PHWKRGLQHQWLW\EHDQVDUHIRULQVHUWLQJ
VHQWDWLRQRUUHDOL]DWLRQRIDQHQWLW\ QHZHQWLWLHVLQWRWKHGDWDEDVHDQG\RX·UHQRWUHTXLUHG
ƒ &OLHQWVXVHHQWLW\EHDQVWRGRGDWDEDVHRSHUDWLRQVLQ WRDOORZ\RXUFOLHQWVWRGRWKDW
DQ22ZD\2SHUDWLRQVLQFOXGHFUHDWLQJQHZHQWL ƒ (QWLW\EHDQKRPHLQWHUIDFHVFDQKDYHVLQJOHURZRU
WLHV GDWDEDVHLQVHUWV GHOHWLQJHQWLWLHV GDWDEDVH PXOWLURZILQGHUPHWKRGV%RWKFUHDWHDQGILQGHUPHWK
GHOHWHV XSGDWLQJHQWLW\VWDWH GDWDEDVHXSGDWHV DQG RGVUHWXUQWKHFRPSRQHQWLQWHUIDFHRIDEHDQDOWKRXJK
VHDUFKLQJIRURQHQWLWLHV GDWDEDVHVHOHFWV  PXOWLHQWLW\ILQGHUVUHWXUQD&ROOHFWLRQRIFRPSRQHQW
ƒ $QHQWLW\EHDQ5HPRWHFRPSRQHQWLQWHUIDFHH[WHQGV LQWHUIDFHUHIHUHQFHV
(-%2EMHFW7KHUH·VQRWDVHSDUDWHLQWHUIDFHIRUVHV ƒ (YHU\HQWLW\EHDQKRPHLVUHTXLUHGWRKDYHDWOHDVW
VLRQEHDQVDQGHQWLW\EHDQV7KDWPHDQVWKDWWKH RQHPHWKRG³WKHILQG%\3ULPDU\.H\ PHWKRGWKDW
FOLHQWZLOOVHHDOORIWKHPHWKRGVLQ\RXUFRPSRQHQW VHDUFKHVIRUDSDUWLFXODUHQWLW\DQGUHWXUQVLWVFRP
SRQHQWLQWHUIDFH LHDUHIHUHQFHWRWKDWHQWLW\·V(-%
LQWHUIDFHSOXVWKHILYHDGGLWLRQDOPHWKRGVIURP(-
REMHFW RUWKURZVDQH[FHSWLRQ
%2EMHFW
ƒ 0XOWLSOHHQWLW\ILQGHUVGRQRWWKURZDQH[FHSWLRQLIQR
ƒ (QWLW\EHDQFRPSRQHQWLQWHUIDFHVXVXDOO\FRQWDLQ PDWFKLQJHQWLWLHVDUHIRXQG7KH\VLPSO\UHWXUQDQ
JHWWHUVDQGVHWWHUVIRUILHOGYDOXHVWKDWFRUUHVSRQGWR HPSW\FROOHFWLRQ
FROXPQVLQDGDWDEDVHWDEOHVXFKDVJHW/DVW1DPH 
ƒ (QWLW\KRPHLQWHUIDFHFDQDOVRKDYHKRPHEXVLQHVV
JHW+RPH3KRQH VHW)LUVW1DPH HWF PHWKRGVIRURSHUDWLRQVWKDWDSSO\WRPRUHWKDQRQH
ƒ (QWLW\EHDQFRPSRQHQWLQWHUIDFHPHWKRGVDUHXVXDOO\ HQWLW\DVRSSRVHGWRRQHVSHFLILFHQWLW\%DWFKXSGDWHV
PHDQWWREHUXQE\DVSHFLILFXQLTXHO\LGHQWLILDEOH ZRXOGEHDJRRGXVHIRUDKRPHEXVLQHVVPHWKRG
HQWLW\)RUH[DPSOHFDOOLQJJHW/DVW1DPH RQWKH ƒ 7KHUHDOEHQHILWRIKRPHEXVLQHVVPHWKRGVLV
HQWLW\ZLWKSULPDU\NH\UHWXUQVWKHODVWQDPHRI WKDW³XQOLNHFUHDWHDQGILQGHUPHWKRGV³KRPHEXVL
WKHHQWLW\LQWKHGDWDEDVHZLWKWKHSULPDU\NH\ QHVVPHWKRGVFDQUHWXUQVRPHWKLQJRWKHUWKDQDQ(-%
'DQ'RRI REMHFWUHIHUHQFH,IWKHFOLHQWZDQWVRQO\GDWDVD\D
ƒ 7KHUXOHVIRUKRZ\RXZULWHDQHQWLW\EHDQ5HPRWH &ROOHFWLRQRI6WULQJVUHSUHVHQWLQJWKHQDPHDQGSKRQH
FRPSRQHQWLQWHUIDFHDUHWKHVDPHDVWKHUXOHVIRU QXPEHURIHDFKFXVWRPHUDKRPHEXVLQHVVPHWKRG
VHVVLRQEHDQVLQFOXGLQJH[WHQG(-%2EMHFWGHFODUH FDQGRWKDWZKLOHDILQGHUFDQQRW
5HPRWH([FHSWLRQVRQDOOPHWKRGVXVHRQO\50,,,23 ƒ $QHQWLW\EHDQFUHDWH LVYHU\GLIIHUHQWIURPDVHVVLRQ
W\SHVIRUDUJXPHQWVDQGUHWXUQYDOXHVGRQ·WEHJLQ EHDQFUHDWH EHFDXVHDQHQWLW\EHDQFUHDWH LQVHUWV
PHWKRGQDPHVZLWKWKHSUHIL[´HMEµHWF DQHZHQWLW\LQWRWKHXQGHUO\LQJSHUVLVWHQWVWRUH LH
ƒ $QHQWLW\EHDQKRPHLQWHUIDFHLVVXEVWDQWLDOO\GLIIHUHQW QHZURZLQWKHGDWDEDVH 
IURPWKDWRIDVHVVLRQEHDQEHFDXVHHQWLW\EHDQVDUH ƒ $QHQWLW\EHDQUHPRYH LVGUDPDWLFDOO\GLIIHUHQWIURPD
W\SLFDOO\IRXQGUDWKHUWKDQFUHDWHG,QRWKHUZRUGVWKH VHVVLRQEHDQUHPRYH :KHQDFOLHQWFDOOVUHPRYH 
FOLHQWLVPRUHOLNHO\WRWU\WRDFFHVVDQH[LVWLQJHQWLW\ RQDQHQWLW\EHDQLW·VWRGHOHWHWKHHQWLW\IURPWKHGDWD
DVRSSRVHGWRPDNLQJDQHZHQWLW\ ZKLFKPHDQVD EDVH7KDWPHDQVHYHU\ERG\LVGRQHZLWKWKHEHDQ
QHZURZLQWKHGDWDEDVH

\RXDUHKHUH 
FRIIHHFUDPPRFNH[DP

0RFN([DP
7HATISTRUECONCERNINGLOCATINGANENTITYBEANSHOMEINTERFACE
1
R! 4HEQDUURZ METHODSHOULDBEUSEDFORALOCALHOMEINTERFACE
R" 4HEQDUURZ METHODSHOULDBEUSEDFORAREMOTEHOMEINTERFACE
R# 4HEQDUURZ METHODSHOULDBEUSEDFORBOTHLOCALANDREMOTE
HOMEINTERFACES
R$ 4HEQDUURZ METHODSHOULDBEUSEDFORNEITHERLOCALNORREMOTE
HOMEINTERFACES

7HICHCAPABILITIESAREFOUNDINANENTITYBEANSREMOTECOMPONENTINTERFACE
2 #HOOSEALLTHATAPPLY
R! CREATINGNEWENTITYOBJECTS
R" lNDINGEXISTINGENTITYOBJECTS
R# REMOVINGEXISTINGENTITYOBJECTS
R$ EXECUTINGAHOMEBUSINESSMETHOD
R% RETRIEVINGTHE%*"-ETA$ATAINTERFACE

7HICHAREWAYSINWHICHACLIENTCANGETAREFERENCETOANEXISTINGENTITY
3 OBJECTSLOCALCOMPONENTINTERFACE#HOOSEALLTHATAPPLY
R! #ALLHME&UHDWH
R" #ALLJHW6HVVLRQ&RQWH[W
R# /BTAINTHEREFERENCEFROMTHEHANDLE
R$ 2ECEIVETHEREFERENCEASAPARAMETERINAMETHODCALL
R% 5SEAlNDERMETHODDElNEDINTHELOCALHOMEINTERFACE

 &KDSWHU
HQWLW\EHDQLQWUR

(OWMANYCREATEMETHODSCANBEDElNEDINANENTITYBEANSLOCALHOME
4 INTERFACE
R! 
R" /NLY
R# TO
R$ TOMANY
R% TOMANY

7HICHAREWAYSINWHICHACLIENTCANGETAREFERENCETOANEXISTINGENTITY
5 OBJECTSREMOTECOMPONENTINTERFACE#HOOSEALLTHATAPPLY
R! #ALLHME&UHDWH 
R" /BTAINTHEREFERENCEFROMTHEHANDLE
R# #ALLAMETHODONTHEENTITYOBJECTSPRIMARYKEY
R$ 2ECEIVETHEREFERENCEASAPARAMETERINAMETHODCALL
R% 5SEAlNDERMETHODDElNEDINTHEREMOTEHOMEINTERFACE

7HICHAPPROACHES CANBEUSEDONAPRIMARYKEYCLASSTODETERMINEIFTWO
6 KEYSREFERTOTHESAMEENTITY#HOOSEALLTHATAPPLY
R! 5SINGTHEOPERATOR
R" 5SINGTHEHTXDOV METHOD
R# 5SINGTHELV,GHQWLFDO METHOD
R$ NONEOFTHEABOVE

7HICHAPPROACHES CANDETERMINEWHETHERTWOENTITY%*"OBJECTREFERENCES
7 REFERTOTHESAMEENTITYOBJECT#HOOSEALLTHATAPPLY
R! 5SINGTHEOPERATOR
R" 5SINGTHEHTXDOV METHOD
R# 5SINGTHELV,GHQWLFDO METHOD
R$ NONEOFTHEABOVE

\RXDUHKHUH 
FRIIHHFUDPPRFNH[DP

7HATSTRUEABOUTTHECLIENTSVIEWOFANENTITYBEANSREMOTECOMPONENT
8 INTERFACE#HOOSEALLTHATAPPLY
R! -ULTIPLECLIENTSCANACCESSTHESAMEENTITYOBJECTCONCURRENTLY
R" .EWENTITYBEANSCANBECREATEDUSINGAMETHODINTHISINTERFACE
R# %NTITYBEANSMAYNOTSURVIVEACRASHOFTHECONTAINER
R$ "USINESSMETHODSCANNOTRETURNAREFERENCETOTHEENTITYOBJECT
(OWMANYlNDERMETHODSCANBEDECLAREDWITHINANENTITYBEANSLOCALHOME
9 INTERFACE
R! 
R" /NLY
R# TO
R$ TOMANY
R% TOMANY
7HICHISALEGALDECLARATIONFORALOCALHOMEINTERFACESCREATE METHOD
10 #HOOSEALLTHATAPPLY
R! SXEOLF&XVWFUHDWH LQW[ 
R" SXEOLFYRLGFUHDWH LQW[ WKURZV&UHDWH([FHSWLRQ
R# SXEOLF&XVWFUHDWH LQW[ WKURZV&UHDWH([FHSWLRQ
R$ SXEOLF&XVWFUHDWH LQW[ WKURZV&UHDWH([FHSWLRQ
5HPRWH([FHSWLRQ

7HICHISALEGALNAMEFORANENTITYBEANHOMEBUSINESSMETHOD#HOOSEALL
11` THATAPPLY
R! CREATE
R" CREATE#UST
R# REMOVE!LL
R$ lND#UST
R%SELECT#UST

 &KDSWHU
HQWLW\EHDQLQWUR

0RFN([DP$QVZHUV
7HATISTRUECONCERNINGLOCATINGANENTITYBEANSHOMEINTERFACE (spec: 110)
1
R! 4HEQDUURZ METHODSHOULDBEUSEDFORALOCALHOMEINTERFACE
R" 4HEQDUURZ METHODSHOULDBEUSEDFORAREMOTEHOMEINTERFACE
R# 4HEQDUURZ METHODSHOULDBEUSEDFORBOTHLOCALANDREMOTE
HOMEINTERFACES
R$ 4HEQDUURZ METHODSHOULDBEUSEDFORNEITHERLOCALNORREMOTE
HOMEINTERFACES

7HICHCAPABILITIESAREFOUNDINANENTITYBEANSREMOTECOMPONENTINTERFACE
2 #HOOSEALLTHATAPPLY
R! CREATINGNEWENTITYOBJECTS
- home methods
R" lNDINGEXISTINGENTITYOBJECTS
R# REMOVINGEXISTINGENTITYOBJECTS
R$ EXECUTINGAHOMEBUSINESSMETHOD
- home methods
R% RETRIEVINGTHE%*"-ETA$ATAINTERFACE

7HICHAREWAYSINWHICHACLIENTCANGETAREFERENCETOANEXISTINGENTITY (spec: 119)


3 OBJECTSLOCALCOMPONENTINTERFACE#HOOSEALLTHATAPPLY
R! #ALLHME&UHDWH - we said existing : )
R" #ALLJHW6HVVLRQ&RQWH[W ces
r Remote interfa
R# /BTAINTHEREFERENCEFROMTHEHANDLE - handles are fo
R$ 2ECEIVETHEREFERENCEASAPARAMETERINAMETHODCALL
R% 5SEAlNDERMETHODDElNEDINTHELOCALHOMEINTERFACE

\RXDUHKHUH 
PRFNH[DPDQVZHUV

4 (OWMANYCREATEMETHODSCANBEDElNEDINANENTITYBEANSLOCALHOME (spec: 115)


INTERFACE
R! 
to allow
R" /NLY - You donÕtcrhaeavete new entities
clients to
R# TO
R$ TOMANY
R% TOMANY

7HICHAREWAYSINWHICHACLIENTCANGETAREFERENCETOANEXISTINGENTITY (spec: 119)


5 OBJECTSREMOTECOMPONENTINTERFACE#HOOSEALLTHATAPPLY
R! #ALLHME&UHDWH  - we said EXISTING
R" /BTAINTHEREFERENCEFROMTHEHANDLE
R# #ALLAMETHODONTHEENTITYOBJECTSPRIMARYKEY
R$ 2ECEIVETHEREFERENCEASAPARAMETERINAMETHODCALL
R% 5SEAlNDERMETHODDElNEDINTHEREMOTEHOMEINTERFACE

6 7HICHAPPROACHES CANBEUSEDONAPRIMARYKEYCLASSTODETERMINEIFTWO (spec: 120-121)


KEYSREFERTOTHESAMEENTITY#HOOSEALLTHATAPPLY
R! 5SINGTHEOPERATOR
heyÕre
equals() testm,etentity.
o ke ys pa ss t he
- if tw
R" 5SINGTHEHTXDOV METHOD the same key ! Which m
eans the sa
R# 5SINGTHELV,GHQWLFDO METHOD - isIdentical() is
for paring
R$ NONEOFTHEABOVE component interfacecom references

7HICHAPPROACHES CANDETERMINEWHETHERTWOENTITY%*"OBJECTREFERENCES (spec: 120-121)


7 REFERTOTHESAMEENTITYOBJECT#HOOSEALLTHATAPPLY
R! 5SINGTHEOPERATOR is for compa ring
- equals() pr ar y ke ys
R" 5SINGTHEHTXDOV METHOD entityÕs im
R# 5SINGTHELV,GHQWLFDO METHOD
R$ NONEOFTHEABOVE

 &KDSWHU
HQWLW\EHDQLQWUR

7HATSTRUEABOUTTHECLIENTSVIEWOFANENTITYBEANSREMOTECOMPONENT (spec: 108)


8 INTERFACE#HOOSEALLTHATAPPLY
R! -ULTIPLECLIENTSCANACCESSTHESAMEENTITYOBJECTCONCURRENTLY
R" .EWENTITYBEANSCANBECREATEDUSINGAMETHODINTHISINTERFACE
R# %NTITYBEANSMAYNOTSURVIVEACRASHOFTHECONTAINER
R$ "USINESSMETHODSCANNOTRETURNAREFERENCETOTHEENTITYOBJECT
(OWMANYlNDERMETHODSCANBEDECLAREDWITHINANENTITYBEANSLOCALHOME (spec: 116)
9 INTERFACE
R! 
R" /NLY
R# TO
R$ TOMANY ired
R% TOMANY - ÞndByPrim
aryKey() is requ

7HICHISALEGALDECLARATIONFORALOCALHOMEINTERFACESCREATE METHOD (spec: 115)


10 #HOOSEALLTHATAPPLY
xception
R! SXEOLF&XVWFUHDWH LQW[  - needs CreateE canÕt return void,
R" SXEOLFYRLGFUHDWH LQW[ WKURZV&UHDWH([FHSWLRQ - must return component
interface
R# SXEOLF&XVWFUHDWH LQW[ WKURZV&UHDWH([FHSWLRQ
R$ SXEOLF&XVWFUHDWH LQW[ WKURZV&UHDWH([FHSWLRQ
5HPRWH([FHSWLRQ
- local interface canÕt throw RemoteException
7HICHISALEGALNAMEFORANENTITYBEANHOMEBUSINESSMETHOD#HOOSEALL (spec: 114)
11 THATAPPLY
R! CREATE ÒÞndÓ &
R" CREATE#UST ÒcreateÓ
ÒremoveÓ ed preÞxes
R# REMOVE!LL are reserv
R$ lND#UST
R%SELECT#UST

\RXDUHKHUH 
bean/entity synchronization
4 5
4 %HLQJDQ(QWLW\%HDQ

$V DQHQWLW\EHDQ,OHDGWKH
JODPRURXVOLIHRIDQDFWUHVV,VSHQGPRVW
RIP\WLPHLQWKHSRROEXWHYHQZKHQ,GR
ZRUN,·PQHYHUERUHG,DOZD\VJHWWRSOD\
GLIIHUHQWUROHV\HVWHUGD\,ZDV-HDQQH
5RVHWRGD\,·P0DULO\Q0DORQHDQG
WRQLJKW,·OOEHSOD\LQJWKHSDUWRI
'RXJ$GDPV

(QWLW\EHDQVDUHDFWRUV$VORQJDVWKH\¶UHDOLYHWKH\¶UHHLWKHULQWKHSRRORU
WKH\¶UHEHLQJVRPHERG\6RPHERG\IURPWKHXQGHUO\LQJSHUVLVWHQWVWRUH,QRWKHUZRUGV
DQHQWLW\IURPWKHGDWDEDVH:KHQDEHDQLVSOD\LQJDSDUWWKHEHDQDQGWKHXQGHUO\LQJ
HQWLW\KDYHWRVWD\LQV\QF,PDJLQHWKHKRUURULIWKHEHDQLVSUHWHQGLQJWREHVD\$XGUH\
/HRQHDQGVRPHRQHORZHUV$XGUH\¶VFUHGLWOLPLWLQWKHGDWDEDVHEXWIRUJHWVWRWHOO
WKHEHDQ7KHEHDQDFWLQJDV$XGUH\LVKDSSLO\DXWKRUL]LQJSXUFKDVHVIRUPRUHWKDQ
$XGUH\¶VFXUUHQWOLPLW2UZKDWLIDFOLHQWXVHVWKHEHDQWRPRGLI\$XGUH\¶VDGGUHVVEXW
WKHEHDQKDQJVRQWRWKHQHZLQIRZLWKRXWWHOOLQJWKHGDWDEDVH\LNHV

WKLVLVDQHZFKDSWHU 
H[DPREMHFWLYHV

(QWLW\%HDQ/LIHF\FOH
2IILFLDO :KDWLWUHDOO\PHDQV
 ,GHQWLI\FRUUHFWDQGLQFRUUHFWVWDWHPHQWV 7KLVREMHFWLYHFDQKLW\RXRQDOPRVWDQ\WKLQJUHODWHG
RUH[DPSOHVDERXWWKH%HDQ3URYLGHU¶V WRHQWLW\EHDQVVR\RXSUHWW\PXFKKDYHWRNQRZLW
YLHZDQGSURJUDPPLQJFRQWUDFWIRU&03 DOOLQFOXGLQJWKHGHWDLOVRID&03HQWLW\EHDQOLIHF\FOH
LQFOXGLQJWKHUHTXLUHPHQWVIRUD&03 WKHFRQWDLQHUFDOOEDFNPHWKRGVRIMDYD[HME(QWLW\%HDQ
HQWLW\EHDQ ZKDW\RXPXVWZULWHLQDEHDQFODVVDQGZKDWDEHDQ
FDQJHWIURPLWV(-%&RQWH[W

 ,GHQWLI\WKHLQWHUIDFH V DQGPHWKRGV <RXKDYHWRNQRZWKDWSDVVLYDWLRQLQHQWLW\EHDQV


D&03HQWLW\EHDQPXVWDQGPXVWQRW LVGLIIHUHQWIURPVHVVLRQEHDQSDVVLYDWLRQEHFDXVH
LPSOHPHQW HQWLW\EHDQVJREDFNWRDSRRODIWHUHME3DVVLYDWH 
EXWVWD\DVKHDOOLYLQJREMHFWV<RXPXVWNQRZWKDW
 ,GHQWLI\FRUUHFWDQGLQFRUUHFWVWDWHPHQWV HQWLW\EHDQFUHDWLRQLVDOVRFRPSOHWHO\GLIIHUHQWIRU
RUH[DPSOHVDERXWWKHOLIHF\FOHRID&03 HQWLW\EHDQVDQGWKDWDFUHDWH FDOORQDQHQWLW\
HQWLW\EHDQ EHDQPHDQV³LQVHUWDQHZHQWLW\LQWRWKHXQGHUO\LQJ
SHUVLVWHQWVWRUH´<RXKDYHWRNQRZWKDWUHPRYH RQ
DQHQWLW\EHDQLVPRUHGUDVWLFIRUHQWLW\EHDQVWKDQ
VHVVLRQEHDQV²DQHQWLW\EHDQUHPRYHGHOHWHVWKH
 )URPDOLVWLGHQWLI\WKHSXUSRVHEHKDYLRU HQWLW\IURPWKHGDWDEDVH
DQGUHVSRQVLELOLWLHVRIWKH%HDQ3URYLGHU
IRUD&03HQWLW\EHDQLQFOXGLQJEXWQRW
<RXPXVWEHDEOHWRORRNDWDQHQWLW\EHDQPHWKRGDQG
OLPLWHGWRVHW(QWLW\&RQWH[W 
NQRZWKHFLUFXPVWDQFHVXQGHUZKLFKWKDWPHWKRGLV
XQVHW(QWLW\&RQWH[W HME&UHDWH HME
FDOOHGDQGZKDW\RXVKRXOGGRLQWKDWPHWKRG)RUH[
3RVW&UHDWH HME$FWLYDWH HME3DVVLYDWH 
DPSOH\RXQHHGWRNQRZWKDWLQDEHDQ¶VHME&UHDWH 
HME5HPRYH HME/RDG HME6WRUH HME
PHWKRGWKHEHDQFDQQRWJHWDUHIHUHQFHWRLWV(-%
)LQG HME+RPH DQGHME6HOHFW 
REMHFWEXWWKDWLWFDQJHWWKDWUHIHUHQFHLQHME3RVW&UH
DWH 
<RXQHHGWRNQRZZKLFKPHWKRGV\RX¶UHUHTXLUHGWR
 )URPDOLVWLGHQWLI\WKHSXUSRVHEHKDYLRU
DQGUHVSRQVLELOLWLHVRIWKH&RQWDLQHUIRUD ZULWHLQWR\RXUEHDQDQGZKLFKDUHOHIWWRWKH&RQ
&03HQWLW\EHDQLQFOXGLQJEXWQRWOLPLWHG WDLQHU)RUH[DPSOH\RXQHHGWRNQRZWKDWWKH%HDQ
WRVHW(QWLW\&RQWH[W XQVHW(QWLW\&RQWH[W  3URYLGHUPXVWZULWHDEVWUDFWJHWWHUVDQGVHWWHUVIRU
HME&UHDWH HME3RVW&UHDWH HME$FWLYDWH  SHUVLVWHQW¿HOGVEXWPXVWGH¿QH¿QGHUPHWKRGVRQO\
HME3DVVLYDWH HME5HPRYH HME/RDG  LQWKHKRPHLQWHUIDFHQRWWKHEHDQFODVV
HME6WRUH HME)LQG HME+RPH DQGHME
6HOHFW 

 &KDSWHU
HQWLW\EHDQV\QFKURQL]DWLRQ

(QWLW\%HDQ/LIHF\FOH
2IILFLDO :KDWLWUHDOO\PHDQV
 )URPDOLVWRIEHKDYLRUVPDWFKWKHPZLWK <RXKDYHWRNQRZWKHPHWKRGVRI(QWLW\&RQWH[WDVZHOO
WKHDSSURSULDWH(QWLW\&RQWH[WPHWKRG DVWKHFLUFXPVWDQFHVXQGHUZKLFK\RXFDQFDOOWKRVH
UHVSRQVLEOHIRUWKDWEHKDYLRU PHWKRGV)RUH[DPSOH\RXVKRXOGNQRZWKDWLI\RX¶UH
UXQQLQJLQWKHVHW(QWLW\&RQWH[W PHWKRG\RXFDQXVH
\RXUVSHFLDO-1',QDPHVSDFHWRORRNXSDUHIHUHQFHWR
 ,GHQWLI\FRUUHFWDQGLQFRUUHFWVWDWHPHQWV D'DWD6RXUFHEXWWKDW\RX¶UHQRWDOORZHGWRDFFHVVWKH
DERXWDQHQWLW\EHDQ¶VSULPDU\NH\DQG XQGHUO\LQJGDWDEDVHIURPWKDWPHWKRG WKHUH¶VQRPHDQ
REMHFWLGHQWLW\ LQJIXOWUDQVDFWLRQVRWKH&RQWDLQHUZRQ¶WOHW\RXGRLW

<RXVKRXOGNQRZWKDW\RXFDQ¶WFDOOJHW8VHU7UDQVDFWLRQ 
RQ\RXUFRQWH[WEHFDXVHHQWLW\EHDQVPXVWXVHFRQ
WDLQHUPDQDJHGWUDQVDFWLRQVDQGJHW8VHU7UDQVDFWLRQLV
IRUEHDQPDQDJHGWUDQVDFWLRQVRQO\

<RXKDYHWRNQRZWKDWDQHQWLW\EHDQPXVWKDYHD
XQLTXHLGHQWLW\ QRWZREHDQVFDQKDYHWKHVDPH
SULPDU\NH\ DQGWKDWD&03EHDQ¶VSULPDU\NH\PXVW
EHHLWKHURQHRIWKHEHDQ¶VSHUVLVWHQW¿HOGVRUDFXVWRP
SULPDU\NH\FODVVZKRVH¿HOGVDUHDOOIURPFRQWDLQHU
PDQDJHG¿HOGVGH¿QHGLQWKHEHDQ<RXPXVWNQRZWKDW
WKHSULPDU\NH\FODVVW\SHPXVWEH6HULDOL]DEOHDQGWKDW
LWPXVWKDYHDYDOLGRYHUULGHRIHTXDOV DQGKDVKFRGH 

\RXDUHKHUH 
HQWLW\EHDQV\QFKURQL]DWLRQ

<PMZMITXW_MZWNMV\Q\aJMIV[Q[
[aVKPZWVQbI\QWV 7KH&RQWDLQHUDOZD\VNQRZVZKHQWKH
EHDQDQGWKHGDWDEDVH WKHXQGHUO\LQJ
HQWLW\ PXVWEHV\QFKURQL]HGVRWKDW
4HEBEANANDTHEUNDERLYINGROWINTHEDATABASEMUST QHLWKHURQHKDVµVWDOH¶GDWD
STAYINSYNC2EMEMBER THEBEANISNOTTHEENTITYˆTHE
BEANISAREPRESENTATIONOFTHEREALENTITY4HEBEANIS
AN//WAYOFWORKINGWITHTHEDATA BUTTHEENTITYIN 2. ,KDYH
THEDATABASEISTHEONLYTRUEENTITY)FTHEENTITYINTHE WKHEHDQIRU&KULV
DATABASEDIESIEISDELETED THEBEANFORTHATSPECIlC 0DUWLQDQGQRZ,ZDQWWR
ENTITYDIESTOOALTHOUGHTHEBEANINSTANCESTILLLIVES AS FKDQJHKLVDGGUHVVWR
YOUSAWINTHELASTCHAPTER  &ORFN6WUHHW6R,·OO
FDOOVHW$GGUHVV RQ
4HE#ONTAINERSJOBISMAKESURETHATTHEENTITYANDTHEBEAN WKHEHDQ
STAYINSYNC SOTHATNOBODYSLOOKINGATASTALEBEANORA
STALEROWINTHEDATABASE+EEPINMINDTHATTHEENTITY
BEANMAYNOTBETHEONLYWAYTOGETINTOTHEDATABASE &RRO,·YH
)NFACT INMOSTCASESTHE"EAN0ROVIDERYOU WILLHAVE XSGDWHGP\EHDQ
VWDWHZLWKWKHQHZ
NOWAYTOKNOWFORCERTAIN DURINGDEVELOPMENT IFYOUR DGGUHVV
BEANISTHEONLYWAYANYONEWILLEVERBEABLETOGETTOTHE
ENTITYDATA
&OREXAMPLE YOUR#USTOMERDATABASEMIGHTBEUSED
BYABUNCHOFAPPSINYOURCOMPANY INCLUDINGSOME
THATWORKDIRECTLYWITHTHEDATABASEANDSOMETHATGO
THROUGHTHE#USTOMERBEANINAN%*"APPLICATION
)FACLIENTHASAREFERENCETOABEAN THECLIENTMIGHT EHDQFXUUHQWO\
CHANGETHEBEANSSTATEBY SAY CALLINGASETTERMETHOD SOD\LQJ
)FTHATSETTERMETHODCORRESPONDSTOONEOFTHEBEANS
PERSISTENTlELDSINOTHERWORDS ACOLUMNINTHE
TABLELIKEADDRESS THEBEANANDTHEDATABASEWILLBE +(//2([FXVHPH
TEMPORARILYOUTOFSYNC4HEDATABASEWONTHAVETHE ,·PJODG\RX·UHDOOKDYLQJD
CURRENTADDRESSUNTILTHEBEANUPDATESTHEDATABASE QLFHFKDWDERXWLWEXWGRQ·W\RX
WKLQNWKHGDWDEDVHPLJKWOLNH
.OWTHINKWHATADISASTERITWOULDBEIFTHEBEANCACHES WRNQRZDERXWWKDWDGGUHVV
THENEWDATAFORTHEENTITY WITHOUTTELLINGTHEDATABASE FKDQJH""
)FSOMEONECOMESALONGWITHANOTHERAPPLICATIONAND
ASKSFORTHAT#USTOMERSADDRESSFROMTHEDATABASE 4HAT
7OULD"E"AD
""
!NDTHEOPPOSITESCENARIOISBADASWELLIFSOMEONE
UPDATESTHEDATABASE THEBEANNEEDSTOKNOW/THERWISE
THEBEANISOUTTHEREINTHE%*"APP REPRESENTINGTHE
ENTITYINTHEDATABASE BUTTHEBEANISNTATRUEREmECTION
OFTHEENTITYSSTATE)NOTHERWORDS THEBEANISSTALE '%
7HICHMEANS PERHAPS USELESS

 &KDSWHU
HQWLW\EHDQV\QFKURQL]DWLRQ

2KQR
7KHHQWLW\EHDQDQGWKHHQWLW\LW
UHSUHVHQWVKDYHGLIIHUHQWGDWD

)LUVW&KULV
/DVW0DUWLQ
.H\
Someone changed the
$GGUHVV&ORFNVW
but not the databa bean state,
3KRQH se !

)LUVW /DVW .H\ $GGUHVV 3KRQH


&KULV 0DUWLQ  )RRVW 
)UDQ +HDO\  %DUUG 
%HOD )OHFN  3LFNODQH 

7KH&RQWDLQHU·VPRVWLPSRUWDQWHQWLW\EHDQMRELVWRPDNH
VXUHWKDWWKLVVFHQDULR³ZKHUHWKHEHDQDQGWKHGDWDEDVH
DUHRXWRIV\QF³GRHVQ·WFDXVHDQ\GDPDJH

7KH&RQWDLQHUKDVWRPDNHVXUHWKDW

ƒ :KLOHVRPHERG\LVZRUNLQJZLWKWKHEHDQ DQGSRWHQWLDOO\FKDQJLQJ
LWVVWDWH QRERG\FDQZRUNZLWKWKHUHDOHQWLW\LQWKHGDWDEDVH

ƒ 2QFHDQHQWLW\EHDQ·VVWDWHKDVEHHQXSGDWHGWKHGDWDEDVHKDVWR
EHXSGDWHGEHIRUHDQ\RQHHOVHFDQDFFHVVWKDWUHFRUGLQWKHGDWD
EDVH

ƒ %HIRUHWKHEHDQFDQUXQDQ\EXVLQHVVPHWKRGVRQDSDUWLFXODUHQWLW\·V
EHKDOIWKHEHDQKDVWREHUHIUHVKHGZLWKWKHHQWLW\·VVWDWH,QRWKHU
ZRUGVEHIRUHWKHHQWLW\EHDQIRU-RH%ORJJVFDQUXQDJHW&UHG
LW/LPLW PHWKRGWKH&RQWDLQHUKDVWRORDGWKHHQWLW\EHDQXSZLWKWKH
PRVWFXUUHQWGDWDIRU-RH%ORJJV2WKHUZLVHWKHEHDQPLJKWUHWXUQ
WKHZURQJFUHGLWOLPLW³WKHOLPLWWKDWZDVLQSODFHWKHODVWWLPHWKH
EHDQZDVORDGHGXSZLWK-RH·VGDWDIURPWKHGDWDEDVH

\RXDUHKHUH 
HQWLW\EHDQV\QFKURQL]DWLRQ

8KRK1RZ\RX·YHJRWPHHYHQ025(
ZRUULHG'RHVQ·WWKLVPHDQWKHQWKDWWKH
EHDQFDQJHWVWDOHLQEHWZHHQ(9(5<EXVLQHVV
PHWKRGFDOO"$UH\RXWHOOLQJPH\RXKDYHWRPDNHD
WULSWRWKHGDWDEDVHWRUHIUHVKWKHEHDQ·VGDWDZLWK
WKHDFWXDOGDWDEDVHGDWDMXVWLQFDVHLWFKDQJHG
HYHU\WLPHWKHFOLHQWFDOOVDPHWKRGRQWKHEHDQ"
,I7+$7·VWUXH\RXPLJKWDVZHOOMXVWJR
VWUDLJKWWRWKHGDWDEDVH
1R7KDW·VQRWZKDW,·P
VD\LQJEXW,FDQVHHKRZLWPLJKW
ORRNOLNHWKDW7KHPLVVLQJSLHFHKHUH
LVWKHWUDQVDFWLRQ$VORQJDVWKHEHDQ·V
PHWKRGVDUHEHLQJFDOOHGDVSDUWRID
VLQJOHWUDQVDFWLRQWKHEHDQGRHVQ·W
KDYHWRV\QFKURQL]HLWVVWDWHZLWK
GDWDLQWKHGDWDEDVH

6HHZKHQWKHFOLHQWFDOOVDEXVLQHVV
PHWKRGDQGWKDWPHWKRGVWDUWVD
WUDQVDFWLRQ,WHOOWKHGDWDEDVHWRORFNWKH
HQWLW\ )RUQRZ\RXFDQWKLQNRILWDVORFNLQJ
WKHURZDOWKRXJKLWPLJKWDFWXDOO\EHVRPHWKLQJD
OLWWOHGLIIHUHQW :LWKWKHUHDOHQWLW\ORFNHGWKH
EHDQFDQ·WEHFRPHVWDOHEHFDXVHQRERG\FDQJHW
LQWRWKHHQWLW\WKURXJKWKHGDWDEDVH,ZRQ·WWHOO
WKHGDWDEDVHWRUHOHDVHWKHORFNXQWLOWKH
WUDQVDFWLRQLVRYHUVRWKHEHDQLVVDIH

 &KDSWHU
HQWLW\EHDQV\QFKURQL]DWLRQ

+RZWKHHQWLW\EHDQDQGWKHXQGHUO\LQJ
HQWLW\VWD\V\QFKURQL]HG


&OLHQWFDOOVD
EXVLQHVVPHWKRG &RQWDLQHULQWHUFHSWVWKH

FDOODQGVWDUWVDWUDQVDFWLRQ
%()25(JHWWLQJWKHEHDQ


&RQWDLQHUWHOOVWKHGDWDEDVHWRORFNWKH
URZ WRDQ\RQHHOVHEXWWKH&RQWDLQHU 

/DVW )LUVW 3.H\  &RQWDLQHUORDGVWKHEHDQ


3RO\ 0RUSKLVP  ZLWKWKHHQWLW\VWDWHIURPWKH
'% GDWDEDVH1RZQRERG\FDQ
'HZH\ &KHDWHP  H[FHSWWKHEHDQFDQFKDQJH
WKHHQWLW\GDWD

'%

 %HDQUXQVPXOWLSOHEXVLQHVV
PHWKRGVLQWKHVDPHWUDQVDFWLRQ
NQRZLQJWKDWWKHXQGHUO\LQJ
HQWLW\GDWDLQWKHGDWDEDVHFDQ¶W
, EHFKDQJHG EHFDXVHWKHURZIRU
WKLVHQWLW\LVORFNHG  &RQWDLQHUHQGVWKHWUDQVDFWLRQ
 EXW¿UVWLWXSGDWHVWKH
GDWDEDVHZLWKZKDWHYHUQHZ
VWDWHWKHEHDQPLJKWKDYH
EHHQFDFKLQJRQEHKDOIRIWKDW
 HQWLW\ OLNHLIVRPHRQHFDOOHG
VHW$GGUHVV RQWKHEHDQ 
&RQWDLQHUWHOOVWKHGDWDEDVHWRUHOHDVH
WKHORFNRQWKHHQWLW\URZ
'%
/DVW )LUVW 3.H\
3RO\ 0RUSKLVP 
'%
'HZH\ &KHDWHP 

\RXDUHKHUH 
HQWLW\EHDQV\QFKURQL]DWLRQ

<PMWVTaY]M[\QWVQ[?07LWM[\PM_WZS
_PMVQ\¼[\QUM\W[aVKPZWVQbM
4HE#ONTAINERALWAYSKNOWSWHENTHEBEANANDTHEDATABASE
ENTITYMUSTBESYNCHRONIZED)TKNOWSBASEDONTRANSACTIONS
)FACLIENTCALLSAMETHODONABEAN ANDTHATMETHODSTARTSA &RQWDLQHU0DQDJHG
NEWTRANSACTIONFORTHEBEAN THE#ONTAINERKNOWSTHATTHE
UNDERLYINGENTITYINTHEDATABASEMAYHAVECHANGEDSINCETHE 3HUVLVWHQFH &03 PHDQVWKH
LASTTIMETHISBEANWASLOADEDUPWITHTHISENTITYSDATA3OTHE
#ONTAINERFORCESTHEBEANTOREFRESHITSSTATEBYLOADINGINTHE &RQWDLQHUWDNHVFDUHRIDOO
ENTITYSDATA
WKHGDWDEDVHDFFHVVFRGHIRU
!NDOFCOURSETHEREVERSEISTRUE)FTHEBEANCOMPLETESA
METHOD ANDTHISMETHODWASTHEENDOFTHETRANSACTION THE V\QFKURQL]DWLRQLQFOXGLQJ
#ONTAINERWILLTELLTHEDATABASETORELEASETHELOCKONTHIS
ENTITYINTHEDATABASE"UTDURINGTHETIMEWHENTHEROW DGGLQJDQGGHOHWLQJHQWLWLHV
WASLOCKED THEBEANMIGHTHAVEBEENHAPPILYCACHINGDATA UHFRUGVURZVLQWKH
THATREPRESENTSTHENEWLY CHANGEDSTATEOFTHEENTITYLIKEA
NEWADDRESSORPHONENUMBER )NOTHERWORDS THECLIENT GDWDEDVH 
MIGHTHAVEBEENCALLINGSETTERMETHODSONTHEBEAN WITHTHE
INTENTIONOFCAUSINGANUPDATEINTHEREALDATABASE4HECLIENT
WANTSTOUPDATEARECORD3O THE#ONTAINERKNOWSITMUST
FORCETHEBEANTOUPDATETHEDATAINTHEDATABASEWITHTHE %HDQ0DQDJHG3HUVLVWHQFH
BEANSSTATE BEFORETHE#ONTAINERTELLSTHEDATABASETORELEASE %03 PHDQV<28ZULWHWKH
THELOCKONTHATENTITY
/+ SOTHEWHENISNOTTHEISSUE!NDTHATSIMPORTANT BECAUSE GDWDEDVHDFFHVVFRGH WKH
OTHERWISEYOU THE"EAN0ROVIDER WOULDHAVETOWORKOUTTHE
BUSINESSLOGICTOKNOWEXACTLYWHENTHEREWASADANGERTHAT
-'%&VWDWHPHQWV IRUZKHQ
THEBEANANDENTITYAREOUTOFSYNC!NDYOUCANJUSTIMAGINE WKH&RQWDLQHUWHOOV\RXLWV
HOWQUICKLYYOUCOULDCORRUPTTHESTATEOFYOURDATABASE
4HEREALISSUEISWHODOESTHEDATABASEACCESS!NDTHEREARE
WLPHWRJRWRWKHGDWDEDVH
ONLYTWOCHOICESITSEITHERYOUORTHE#ONTAINER
)FYOUWRITETHEDATABASEACCESSCODE YOUWRITE*$"#
STATEMENTSINTHECALLBACKMETHODSTHE#ONTAINERCALLSWHEN ,Q(-%\RXVKRXOG
ITSTIMETOKICKYOUANDSAY h(EY TIMETOGOTOTHEDATABASEv XVH&03,WVDYHV\RXD
/NTHEOTHERHAND IFTHE#ONTAINERWRITESTHEDATABASECODE
YOUSAVEYOURSELFALOTOFCODINGTIMEANDEFFORT ANDYOULL ORWRIZRUNDQGYLUWXDOO\
ALMOSTALWAYSGETBETTERPERFORMANCE
DOZD\VJLYHV\RXEHWWHU
SHUIRUPDQFH

 &KDSWHU
HQWLW\EHDQV\QFKURQL]DWLRQ

+WV\IQVMZUIVIOML^[JMIVUIVIOMLXMZ[Q[\MVKM

&RQWDLQHUPDQDJHGSHUVLVWHQFH &03

ƒ :LPS\LQ(-%JUHDWO\HQKDQFHGLQ(-%
&03
ƒ 7KH%HDQ3URYLGHUGHVLJQVWKHHQWLW\EHDQFODVVFKRRVLQJZKLFKRI
WKHEHDQ·VILHOGVDUHSDUWRIWKHEHDQ·VSHUVLVWHQWVWDWH3HUVLVWHQW
ILHOGVPDSWRFROXPQVLQRQHRUPRUHGDWDEDVHWDEOHV

ƒ 7KH&RQWDLQHUNHHSVWUDFNRIFKDQJHVWRWKHEHDQ·VVWDWHDQG
XSGDWHVWKHUHDOHQWLW\DVQHHGHG)RUH[DPSOHLIDFOLHQWFDOOV '%
VHW/DVW1DPH RQWKHEHDQWKH&RQWDLQHUNQRZVWKDWWKHUHDOHQWLW\
LQWKHGDWDEDVHKDVWREHXSGDWHGVRWKDWLIDQ\RQHHOVHDFFHVVHV
WKHGDWDEDVHIRUWKDWHQWLW\ LQFOXGLQJQRQ(-%FOLHQWVXVLQJVRPH 7KH&RQWDLQHUJRHVWRWKHGDWDEDVH
RWKHUPHDQVWRJHWWRWKHGDWDEDVH WKH\·OOVHHWKHFXUUHQWVWDWH ZKHQLWQHHGVWRLQVHUWDQHZHQWLW\
RIWKHHQWLW\7KH&RQWDLQHUPDNHVWKHGHFLVLRQVRQKRZWRNHHS GHOHWHDQGHQWLW\XSGDWHWKHGDWDEDVH
WKHEHDQDQGWKHUHDOHQWLW\V\QFKURQL]HGEDVHGRQWKHVWDWHRI ZLWKQHZHQWLW\VWDWH LHRQHRUPRUH
WUDQVDFWLRQV 0RUHRQWKDWODWHU  FROXPQVLQWKHHQWLW\URZKDYHFKDQJHG
WKURXJKWKHEHDQ 
ƒ 7KH%HDQ3URYLGHUZULWHV(-%4/WRWHOOWKH&RQWDLQHUKRZWRGR
VHOHFWV(-%4/LVOLNHDVXEVHWRI64/EXWZLWKVRPH22IHDWXUHV
(-%4/KHOSVEULGJHWKH22ZRUOGRI\RXUEHDQWRWKHUHODWLRQDOZRUOG
RI\RXUUHDOHQWLW\

ƒ 8VLQJLQIRUPDWLRQLQWKHGHSOR\PHQWGHVFULSWRUWKH&RQWDLQHUZULWHV
WKHDFWXDOLPSOHPHQWDWLRQRIWKH&03EHDQLQFOXGLQJLPSOHPHQWLQJ %03
WKHILQGHUDQGVHOHFWPHWKRGVDQGDOORIWKHGDWDEDVHDFFHVVFRGH
,QRWKHUZRUGVLI\RX·UHD%HDQ3URYLGHUZULWLQJD&03EHDQ\RXGR
QRWORRNXSDUHVRXUFHFRQQHFWLRQIDFWRU\IRUWKH'DWD6RXUFHJHW
DQ64/&RQQHFWLRQRUZULWHDQ\-'%&FRGH1RWRQO\LVWKHGDWD
DFFHVVFRGHWDNHQFDUHRIE\WKH&RQWDLQHUEXW\RXFDQWUXVWWKDWWKH
&RQWDLQHUNQRZVH[DFWO\ZKHQWRJRWRWKHGDWDEDVH

'%
%HDQPDQDJHGSHUVLVWHQFH %03
ƒ %HDQ3URYLGHUZULWHVWKHGDWDEDVHDFFHVVFRGHLQFOXGLQJORRNLQJXS
D'DWD6RXUFHJHWWLQJD&RQQHFWLRQDQGVHQGLQJ-'%&VWDWHPHQWV 7KH&RQWDLQHULQYRNHVDFRQWDLQHUFDOO
WRWKHGDWDEDVH,W·VVWLOOEHWWHUWKDQLI\RXGLGQ·WXVHHQWLW\EHDQVDW EDFNRQWKHEHDQZKHQWKHEHDQQHHGV
DOOEHFDXVHWKH&RQWDLQHUZLOODWOHDVWWHOOD%03EHDQZKHQWRJR WRGRVRPHWKLQJZLWKWKHGDWDEDVHDQG
WRWKHGDWDEDVHVRZLWK%03\RXGRQ·WKDYHWRSXWLQORJLFWRNHHS WKHEHDQFRGHGRHVWKHDFWXDO-'%&
WKHEHDQDQGWKHGDWDEDVHLQV\QF:KHQWKH&RQWDLQHUWHOOV\RXWR ZRUN
XSGDWHWKHGDWDEDVH\RXMXVWGRLW

\RXDUHKHUH 
HQWLW\EHDQV\QFKURQL]DWLRQ

WKHUH DUH QR
'XPE 4XHVWLRQV
Q: $OESNTTHE#ONTAINERSTILLHAVE Q: )TSEEMSLIKEPERFORMANCEWOULD
TOGIVEYOUTHEDATABASE#ONNECTION BEBETTERˆNOTWORSEˆWITH"-0
)SNTTHATTHEWHOLEPOINTOFLOOKINGUP $OESNT"-0GIVEYOUMORECONTROL
A$ATA3OURCEUSINGRESOURCEFACTORY
REFERENCES)FTHATSTRUE THENHOWCAN
YOUDOBEAN MANAGEDPERSISTENCE A: 9OUHAVEMOREFLEXIBILITYWITH
/RIS"-0AWAYTOBYPASSALLTHAT IN "-0 BUTNOTNECESSARILYMORECONTROL
WHICHCASEYOUDBEBYPASSINGTHE !NDACCORDINGTONEARLYALLBENCHMARKS
#ONTAINERSERVICESFORCONNECTIONPOOL AGAINSTTHEMAJOR*%%SERVERS NOT
INGAND BETTERPERFORMANCE4HATMIGHTSOUND
COUNTERINTUITIVE BUTREMEMBERTHATTHE

A: 2ELAX2EALLY7ITH"-0YOU
#ONTAINERCANDOTHINGSTHATYOUCANT
DOFROMWITHINBEANCODE4HINGSLIKE
GANGINGMULTIPLECALLSTOTHEDATABASE
STILLGETYOURDATABASECONNECTION
FROMTHE#ONTAINER BYLOOKINGUP AS USINGNATIVECODETOGETINANOUTOF
YOUSAID ARESOURCEFACTORYREFERENCE THEDATABASEFASTERTHANYOUCOULD LAZY
JAVAXSQL$ATA3OURCE'EE YOUMUST LOADING DIRTYDETECTIONNEITHEROFWHICH
HAVEBEENREADINGAHEADTOTHECHAPTER AREGUARANTEEDBYTHESPEC OFCOURSE
ONTHE%*"ENVIRONMENT "ECAUSEYOURE ANDDOZENSOFOTHERTRICKS
RIGHT YOUNEEDTOGETACONNECTION 7EKNOWITGOESAGAINSTTHE
FROMACONNECTIONPOOLMANAGEDBYTHE CONVENTIONALWISDOMTHATSAYSIFYOU
#ONTAINER"UTONCEYOUGETTHECONNEC WANTITDONERIGHT DOITYOURSELF BUT
TION FORA"-0BEAN YOUREONYOUROWN KEEPINMINDTHATTHESERVERVENDORSARE
FORSENDINGITSTATEMENTSTODO).3%24 COMPETINGFORYOURBUSINESS4HEYKNOW
$%,%4% 50$!4% 3%,%#4OPERATIONS PERFORMANCEMATTERSTOYOU4HE
!NDWHILEWEREHERE REMEMBERTHATDA SPECADDEDˆANDCHANGEDˆALOTOFTHE
TABASEACCESSISNOTJUSTFORENTITYBEANS #-0SPECIFICATIONFORTHESOLEPURPOSE
!.9BEANCANGOTOTHEDATABASEASPART OFGIVINGTHEVENDORSMOREROOMFOR
OFITSBUSINESSLOGIC3ESSIONBEANSAND OPTIMIZING#-0
MESSAGE DRIVENBEANSMIGHTFINDPLENTY
OFREASONSTOLOOKSOMETHINGUPORSTORE
SOMETHINGINADATABASE4HEDIFFERENCE
BETWEENENTITYBEANSANDTHEOTHERTWO
BEANTYPESISTHATENTITYBEANSEXISTONLY
BECAUSETHERESSOMETHINGINADATA
BASE3OMETHINGTHEBEANREPRESENTS
3OENTITYBEANSARE BYDEFINITION TIEDTO
SOMETHINGINAPERSISTENTSTORE
-ESSAGE DRIVENANDSESSIONBEANSDO
NOTREPRESENTSOMETHINGINADATABASE
ALTHOUGHTHEYMAYNEEDTOUSESOME
THINGINADATABASEASPARTOFTHEIRBUSI
NESSLOGIC

 &KDSWHU
HQWLW\EHDQV\QFKURQL]DWLRQ

)JZQMNPQ[\WZaWV\PM
M^WT]\QWVWN+58
"EGINNINGWITHVERSIONOFTHE%*"SPEC YOUCOULDUSEBOTHCONTAINER
MANAGEDPERSISTENCE#-0 ANDBEAN MANAGEDPERSISTENCE"-0 !T
THEHIGHESTLEVEL THEDIFFERENCEBETWEEN#-0AND"-0ISABOUTWHO
WRITESTHEDATABASEACCESSCODE
7ITH%*" YOUCANSTILLUSEBOTH BUTTHERESNOWVERYLITTLEREASON
TOEVERUSE"-04HEORIGINAL%*"SPECIlCATIONFOR#-0ENTITY
BEANSWAS UM WEAK#LUNKY)NEFlCIENT,IMITED.OT4HAT'OOD!ND 7KHH[DP
ALTHOUGHMANYVENDORSWEREABLETOOVERCOMEMANYOFTHEPROBLEMS GRHVQ·WFRYHU
WITH#-0 THESOLUTIONSWEREOUTSIDETHESPECIlCATION SOYOURCHOICE WKHKLVWRU\JRVVLSRUVFDQGDOV
ASBEANDEVELOPERWASTOUSESTANDARD#-0BUTKEEPYOURPORTABILITY RIWKH(-%VSHFLILFDWLRQ
ORSTEPOUTSIDETHESPECREDUCINGYOURPORTABILITY BUTGETBETTER $OWKRXJKLWZRXOGKDYHPDGH
PERFORMANCEANDFEATURES WKHERRNPXFKVSLFLHULILWGLG
$KZHOOZH¶OOMXVWKDYHWRPDNH
7HENTHE%*"SPECWASCREATED THETEAMSPENTAGREATDEALOFTIME GRZLWKWKHWHFKQLFDOFRQWHQW
ANDEFFORTTALKINGTOBOTHEND USERCUSTOMERSBEANDEVELOPERS AND
6WLOOZHWKLQNWKHZD\D
CONTAINERVENDORS ALLOFWHOMWEREVERYHAPPYTODESCRIBETHEPROBLEMS
VSHF DQ\VSHF HYROYHVLV
WITH#-0)NGRAPHICDETAIL COMPLETEWITHSUGGESTIONSFOR3UNON h)LL
LQWHUHVWLQJ6XQZRUNVKDUG
TELLYOUWHATYOUCAN$/WITHYOUR#-0BEANSPECv WRZDONWKH¿QHOLQHEHWZHHQ
4HE%*"SPECTEAMLISTENED!NDDESIGNED!NDLISTENED!NDDESIGNED KDYLQJDPHDQLQJIXOVSHF
!NDINTHEEND THEYCAMEUPWITHSOMETHINGAWFUL!SOLUTIONTHATWAS ZLWKVWURQJJXDUDQWHHVIRU
WKHSURJUDPPHUDQGRQH
ANEQUAL OPPORTUNITYPISSER OFFER6ENDORSHATEDIT$EVELOPERSHATEDIT
WKDW¶VYDJXHHQRXJKRQ
0EOPLELIKEUSWHOHADTOEXPLAINTHENEWTECHNOLOGYTOCUSTOMERSREALLY LPSOHPHQWDWLRQGHWDLOVWR
HATEDIT3OWITHTHEDEADLINEUPONTHEM THETEAMSCRAPPEDMUCHOF OHWWKHYHQGRUVFRPSHWH
WHATTHEYDDONEWITH#-0ANDCAMEUPWITHAMUCHCLEANERSOLUTION RQWKHSHUIRUPDQFHRIWKHLU
7ITHTHENEW%*"SPEC #-0ISLIGHTYEARSAHEADOFWHEREITWASIN%*" LPSOHPHQWDWLRQV
ORINTHElRST TERRIBLEVERSIONOFTHEPRE RELEASE%*"SPEC !ND 5HJDUGOHVVWKHUH¶VQRWKLQJRQ
NOW MOSTDEVELOPERSUSINGENTITYBEANSWILLUSE#-0)NFACT THEEXAM WKHH[DPDERXWWKHGLIIHUHQW
DOESNTCOVER"-0ATALL SINCEITSTHEREMOREFORLEGACYSUPPORTORVERY YHUVLRQVRIWKHVSHF$VORQJDV
SPECIALCASESMORETHANANYTHINGELSE \RXNQRZZKDW¶VLQWKHVSHF
\RX¶UHVDIH+RZHYHULQWKH
"ECAUSEOFTHEHEAVYSHIFTTO#-0FORREASONSWELLEXPLORE WE UHDOZRUOG\RX¶UHOLNHO\WRFRPH
WONTCOVER"-0INTHISBOOK3OFROMTHISPOINTFORWARD WEREGOING DFURVV(-%DSSOLFDWLRQV
TOASSUMETHATWERETALKINGABOUT#-04HEDIFFERENCESBETWEEN VREHSUHSDUHGWROHDUQWKH
THELIFECYCLE ANDTHEDEVELOPERSRESPONSIBILITY FOR#-0VS"-0ARE GLIIHUHQFHV(VSHFLDOO\LI\RX¶UH
DRAMATIC SODONTFORGETTHATEVERYTHINGWETALKABOUTNOWWILLBEFROM WKHOXFN\RQHLQFKDUJHRI
PLJUDWLQJWKHDSSWRD
THEPERSPECTIVEOFA#-0BEAN EVENIFWEDONTEXPLICITLYSAYTHATWERE
FRPSOLDQWVHUYHU
REFERRINGTO#-0

\RXDUHKHUH 
HQWLW\EHDQV

+RZDEHDQDFWRUEHFRPHVDEHDQHQWLW\
6FHQDULRFOLHQWZDQWVWRJHWWKHDGGUHVVRID
VSHFL¿F&03&XVWRPHUHQWLW\SULPDU\NH\

:KHUHWKH #LV
QXPEHU"7KHFOLHQWLVFDOOLQJ
DQG,GRQ·WVHHDQ\ERG\
SOD\LQJQXPEHU

JHW$GGUHVV FRQWH[W

 (-%

VV REMHFW
GGUH VWXE  EHDQ
$
JHW 

FOLHQW
EHDQ
FRQWH[W

%HDQ3RRO

'%

 &OLHQWFDOOVJHW$GGUHVV RQWKHVWXEIRUHQWLW\EHDQ7KHFOLHQWJRWWKHVWXEIURPD
SUHYLRXVFDOORQWKHKRPHVWXE \RX·OOVHHH[DFWO\KRZWKHFOLHQWJRWWKHVWXELQWKHILUVW
SODFHLQDPLQXWH 

 7KHFDOOLVSDVVHGWRWKH(-%REMHFW

 7KH(-%REMHFWJHWVWKHFDOODQGSDQLFVEHFDXVHWKHUH,6QRHQWLW\EHDQIRU
7KH(-%REMHFWLVWKHDJHQWERG\JXDUGIRUEXWKHLVQ·WDWWDFKHGWRDVSHFLILF
EHDQWKDW·VSOD\LQJ

 &KDSWHU
HQWLW\EHDQV\QFKURQL]DWLRQ

+RZDEHDQDFWRUEHFRPHVDEHDQHQWLW\
7KH&03EHDQFRPHVRXWRIWKHSRRODQGSUHSDUHVWRSOD\

,·OOMXVWZDLW
ZKLOHKHOHDUQVKRZ
WREH

,NQRZ,·PJRLQJ
WREHSOD\LQJ
EXWXPZKDW·VP\
FRQWH[W
PRWLYDWLRQ"
(-%
REMHFW
 EHDQ

HME$FWLYDWH

%HDQ3RRO

G
/RD '%
HME 
 
FW
VH H
O

 7KH&RQWDLQHU¶DFWLYDWHV·DEHDQE\SXOOLQJLWRXWRIWKHSRRODQGFDOOLQJHME$FWLYDWH 
 7KH&RQWDLQHUGRHVDVHOHFWRQSULPDU\NH\LQWKHGDWDEDVHWRJHWWKHUHDO
HQWLW\GDWDWRSXWLQWRWKHEHDQ WKHGDWDWKDWZLOOEHFRPHWKHEHDQ·VVWDWH 

 7KH&RQWDLQHUORDGVWKHEHDQZLWKWKHHQWLW\GDWDIURPWKHGDWDEDVHDQGWKHQFDOOV
HME/RDG WRWHOOWKHEHDQ´+H\EHDQ\RX·YHMXVWEHHQORDGHGµ

\RXDUHKHUH 
HQWLW\SDVVLYDWLRQDFWLYDWLRQ

2.WLPHRXW
'RHVWKDWSLFWXUHVD\WKDWHME3DVVLYDWH 
LVWKHEHDQ·VFRQWDLQHUFDOOEDFNIRUJRLQJEDFNWR
WKHSRRO",VQ·WWKDWWKHRSSRVLWHRIKRZVHVVLRQ
EHDQVZRUN":LWKVHVVLRQEHDQVHME$FWLYDWH 
KDVQRWKLQJWRGRZLWKWKHSRROVRZKDW·VWKH
GHDO"$UHWKH\MXVWWU\LQJWRPDNHLWDV
FRQIXVLQJDVSRVVLEOH"""

3DVVLYDWLRQDQG$FWLYDWLRQKDYHD
727$//<GLIIHUHQWPHDQLQJIRUHQWLW\
EHDQV
6WDWHOHVVVHVVLRQEHDQVJREDFNWRWKHSRRO
ZLWKRXWSDVVLYDWLRQ LQRWKHUZRUGVZLWKRXWJHWWLQJ
DQHME3DVVLYDWH FDOO 
6WDWHIXOVHVVLRQEHDQVDUHSDVVLYDWHGZKHQ
WKH&RQWDLQHUSXWVWKHPWRVOHHS SRVVLEO\
VHULDOL]DWLRQ WRFRQVHUYHUHVRXUFHVEHWZHHQFOLHQW
PHWKRGLQYRFDWLRQV
(QWLW\EHDQVDUHQ¶WSDVVLYDWHGLQWKHZD\WKDW
VWDWHIXOVHVVLRQEHDQVDUHEXWHQWLW\EHDQV'2
JHWDQHME3DVVLYDWH FDOOZKHQWKH\¶UHDERXWWRJR
EDFNWRWKHSRRO DQGDQHME$FWLYDWH ZKHQWKH\
FRPHRXWRIWKHSRRO 
7KHPRVWLPSRUWDQWSRLQWLVWKDWXQOLNHVHVVLRQ
EHDQVSDVVLYDWHGHQWLW\EHDQVDUHVWLOOOLYH
REMHFWVRQWKHKHDS
7KHUH¶VQRVXFKWKLQJDVDEHDQVOHHSLQJLQD
SRRO6WDWHOHVVEHDQVHQWLW\EHDQVDQGPHVVDJH
GULYHQEHDQVDOOXVHSRROV$QGWKRVHSRROVDUHIRU
OLYLQJ5$0XVLQJRQWKHKHDSREMHFWV
2QO\VWDWHIXOEHDQVDUHSXWWRVOHHS FDOOHG
FRQIXVLQJO\SDVVLYDWLRQ EXWWKLVKDVQRWKLQJWR
GRZLWKDSRRO
6R\HVWKH\¶YHRYHUORDGHGWKHZRUG³SDVVLYDWLRQ´
MXVWWRPDNHWKLQJVUHDOO\FRQIXVLQJIRU\RXDQGWR
KHOSGULYHWKHQHHGIRUPRUH(-%ERRNV )RUZKLFK
ZHWKDQNWKHPHYHU\VLQJOHGD\

 &KDSWHU
HQWLW\EHDQV\QFKURQL]DWLRQ

HME3DVVLYDWH WKHGLIIHUHQFH
EHWZHHQVHVVLRQDQGHQWLW\EHDQV

(QWLW\EHDQ 6WDWHIXOVHVVLRQEHDQ 6WDWHOHVVVHVVLRQEHDQ


alive on
the hea
p
===
===
doesnÕt apply... st
beans are never paatsseless
ap... ivated
he he
al i ve on tized
(QWLW\%HDQ
NOT bly serial
3RRO
possi

4&DOOHGZKHQWKHEHDQKDV 4&DOOHGZKHQWKH&RQWDLQHU 4'RHVQ·WDSSO\6WDWHOHVVEHDQV


ILQLVKHGDEXVLQHVVPHWKRG RWKHU GHFLGHVWRFRQVHUYHUHVRXUFHV KDYHDSRROEXWDFWLYDWLRQDQG
WKDQUHPRYH DQGLVDERXW EHWZHHQEXVLQHVVPHWKRG SDVVLYDWLRQGRQ·WSOD\DQ\SDUW
WRJREDFNWRWKHSRRO,QWKH LQYRFDWLRQVIURPWKHFOLHQW LQLW5HPHPEHUVWDWHOHVV
SDVVLYDWHGVWDWHWKHEHDQKDVQR VHVVLRQEHDQVZLOO1(9(5JHWDQ
LGHQWLW\³LW·VQRWUHSUHVHQWLQJDQ\ 48VHLWWRUHOHDVHUHVRXUFHVDQG HME$FWLYDWH RUHME3DVVLYDWH FDOO
HQWLW\IURPWKHGDWDEDVH WRSUHSDUHWKHEHDQ·VVWDWHIRU
ZKDWPLJKWEHVHULDOL]DWLRQ QXOO
48VHLWWRUHOHDVHUHVRXUFHVWKDW RXWQRQ6HULDOL]DEOHUHIHUHQFHV
\RXGRQ·WZDQWWRZDVWHZKLOH HWF 
WKHEHDQLVVLWWLQJLQWKHSRRO
QRWUXQQLQJDEXVLQHVVPHWKRG 47KHEHDQLV´SXWWRVOHHSµDQGLV
7\SLFDOO\WKHPHWKRGLVHPSW\ QRORQJHUWDNLQJXSVSDFHRQWKH
KHDS
47KHEHDQLV127SDVVLYDWHG
LQWKHVHVVLRQEHDQVHQVH,Q 47KH&RQWDLQHUFDOOVWKHEHDQ·V
RWKHUZRUGVWKHEHDQLVQRW HME$FWLYDWH PHWKRGZKHQD
VHULDOL]HGRUVDYHGVRWKHUHLV FOLHQWFDOOVDEXVLQHVVPHWKRG
12UHTXLUHPHQWWKDW\RXQXOORXW RQWKH(-%REMHFW7KHEHDQ
UHIHUHQFHVWRQRQ6HULDOL]DEOH UXQVHME$FWLYDWH EHIRUHLW
REMHFWV UXQVWKHEXVLQHVVPHWKRGWKDW
WULJJHUHGWKHDFWLYDWLRQ
47KH&RQWDLQHUFDOOVWKHEHDQ·V
HME$FWLYDWH PHWKRGZKHQD
EHDQLVQHHGHGWRVHUYLFHD
EXVLQHVVPHWKRGIURPDFOLHQW
7KHEHDQUXQVHME$FWLYDWH 
EHIRUHLWUXQVWKHEXVLQHVV
PHWKRGWKDWWULJJHUHGWKH
DFWLYDWLRQ 7KLVPHWKRGLVXVXDOO\
HPSW\DVZHOO 
\RXDUHKHUH 
HQWLW\EHDQFDOOEDFNV

<PM-V\Q\a*MIVQV\MZNIKMILL[\PZMMVM_K WV\IQVMZ
KITTJIKS[QVKT]LQVO\ _WR][\NWZ[aVKPZWVQbI\QWV

LQWHUIDFH!! LQWHUIDFH!!
6HVVLRQ%HDQ (QWLW\%HDQ

VHW6HVVLRQ&RQWH[W 6HVVLRQ&RQWH[WVF VHW (QWLW\&RQWH[W (QWLW\&RQWH[WHF


HME3DVVLYDWH HME3DVVLYDWH
EntityCont
HME$FWLYDWH HME$FWLYDWH of SessionCoext instead
HME5HPRYH
ntext
HME5HPRYH
XQVHW(QWLW\&RQWH[W
New ! HME/RDG
HME6WRUH

4HE%NTITY"EANINTERFACEADDSTHREENEWMETHODSANDTHECONTEXTSETTER
CHANGESTOGIVETHEBEANAN%NTITY#ONTEXTINSTEADOFA3ESSION#ONTEXT 
"UTANDTHISISANEXTREMELYLARGEhBUTvEVENTHEMETHODSWHICHARETHE
SAMEINBOTHINTERFACESDONTBEHAVETHESAME
/FTHEFOURMETHODSIN3ESSION"EAN ONLYTHECONTEXTSETTERBEHAVESTHE
SAMEASITSCOUNTERPARTIN%NTITY"EAN4HEOTHERTHREE EJB0ASSIVATE
EJB!CTIVATE ANDEJB2EMOVE HAVEDRASTICALLYDIFFERENTMEANINGS
9OULLSEE
&ORNOW JUSTBEREADYTOLETGOOFYOURATTACHMENTSTOTHEMEANINGOF
ACTIVATION PASSIVATION ANDREMOVAL7HATTHOSEMEANTOANENTITYBEANIS
NOTHINGLIKEWHATTHEYMEANTOASESSIONBEAN

 &KDSWHU
HQWLW\EHDQV\QFKURQL]DWLRQ

-^MV\PMUM\PWL[\PI\IZM\PM[IUM
LWV¼\JMPI^M\PM[IUM

6HVVLRQ%HDQLQWHUIDFH (QWLW\%HDQLQWHUIDFH

VHW6HVVLRQ&RQWH[W 6HVVLRQ&RQWH[WVF VHW(QWLW\&RQWH[W (QWLW\&RQWH[WHF


 &RQWDLQHUJLYHVWKHEHDQDUHIHUHQFHWRLWVFRQWH[W  &RQWDLQHUJLYHVWKHEHDQDUHIHUHQFHWRLWVFRQWH[W

HME3DVVLYDWH HME3DVVLYDWH
 &DOOHGRQDVWDWHIXOVHVVLRQEHDQZKHQWKHEHDQ  &DOOHGZKHQWKHEHDQLVDERXWWRUHWXUQWRWKH
 LVDERXWWREHVHULDOL]HG RUVRPHWKLQJOLNHLW   SRROIROORZLQJDWUDQVDFWLRQ

HME$FWLYDWH HME$FWLYDWH
 &DOOHGRQDVWDWHIXOVHVVLRQEHDQZKHQWKHEHDQ  &DOOHGZKHQWKHEHDQLVWDNHQRXWRIWKHSRROWR
 LVUHDFWLYDWHGIROORZLQJSDVVLYDWLRQ PLJKWEH  VHUYLFHDFOLHQW·VEXVLQHVVPHWKRGFDOO
 GHVHULDOL]DWLRQ 
HME5HPRYH
HME5HPRYH  &DOOHGZKHQWKHFOLHQWFDOOVUHPRYH DQGZDQWV
 &DOOHGRQDVWDWHIXOEHDQZKHQWKHFOLHQWFDOOV  WRGHOHWHWKLVHQWLW\IURPWKHGDWDEDVH
 UHPRYH &DOOHGRQDVWDWHOHVVEHDQZKHQWKH
 &RQWDLQHUZDQWVWRUHGXFHWKHVL]HRIWKHSRRO
nBean and
XQVHW(QWLW\&RQWH[W
o t h S e s s io
t h o d s t h at are in bter method behaves  &DOOHGZKHQWKH&RQWDLQHUZDQWVWRUHGXFHWKH
ur me t set ivate,  VL]HRIWKHSRRO
Of the feoan, only the contexbean, activate, passsession bean
EntityB way ! In an entity different from a HME/RDG
the same ve are completely
and remo  &DOOHGZKHQWKHEHDQKDVEHHQUHIUHVKHGZLWK
 GDWDIURPWKHXQGHUO\LQJSHUVLVWHQWVWRUH

E6WRUH
(QWLW\&RQWH[WDGGV
JHW3ULPDU\.H\
&DOOHGZKHQWKH&RQWDLQHULVDERXWWRXSGDWHWKH
GDWDEDVHWRUHIOHFWWKHVWDWHRIWKHEHDQ
RQWH[W
(QWLW\&RQWH[WH[WHQG(-%&
%RWK6HVVLRQ&RQWH[WDQG VVLR Q& RQW H[W 
HPHWKRGWKDW6H
(QWLW\&RQWH[WKDVRQO\RQ LVWULFN\EHF DXV HWK HUH¶V
.H\ 7KLV
GRHVQ¶WKDYH²JHW3ULPDU\ RFD O2E MHFW
KH(-%2EMHFWDQG(-%/
DJHW3ULPDU\.H\ LQERWKW QDQGHQW LW\EHD Q
%27+VHVVLR
LQWHUIDFHVWKDW¶VH[SRVHGWR Q
XJK DVHVV LRQ EH DQFOLHQWZLOOJHWDQH[FHSWLR
FOLHQWV DOWKR U\. H\ LV
H[WYHUVLRQRIJHW3ULPD
IRUFDOOLQJLW %XWWKHFRQW
QV
H[SRVHGRQO\WRHQWLW\EHD

\RXDUHKHUH 
HQWLW\EHDQFDOOEDFNV

*]\_IQ\\PMZM¼[UWZM -V\Q\aJMIV[PI^MVM_
PWUMKWV\IQVMZKITTJIKS[\WW
 
<RXUKRPHLQWHUIDFH (QWLW\%HDQLQWHUIDFH
MDYD[HME(QWLW\%HDQ
LQWHUIDFH!!
&XVWRPHU%HDQ
&XVWRPHU+RPH
FUHDWH 6WULQJODVW6WULQJILUVW6WULQJDGGU HME&UHDWH 6WULQJODVW6WULQJILUVW6WULQJDGGU
ILQG%\3ULPDU\.H\ 6WULQJNH\ HME3RVW&UHDWH 6WULQJODVW6WULQJILUVW6WULQJDGGU
ILQG%\&LW\ 6WULQJFLW\ HME)LQG%\3ULPDU\.H\ 6WULQJNH\
LQWHUIDFH!!
XSGDWH$OO 6WULQJFPG HME)LQG%\&LW\ 6WULQJFLW\ (QWLW\%HDQ
HME+RPH8SGDWH$OO 6WULQJFPG
VHW(QWLW\&RQWH[W (QWLW\&RQWH[WHF
ery create() in
You must match evt one but TWO HME$FWLYDWH

the home with noate(), like with VHW(QWLW\&RQWH[W (QWLW\&RQWH[WHF HME3DVVLYDWH


methods: ejbCre d a new thingÑ  HME$FWLYDWH HME5HPRYH
session beans, an HME3DVVLYDWH XQVHW(QWLW\&RQWH[W
ejbPostCreate(). HME5HPRYH HME/RDG
ery home
You must match evwith an XQVHW(QWLW\&RQWH[W HME6WRUH
d
business metho ame>. HME/RDG
ejbHome<methodN HME6WRUH
ARE part you must always implement th
The Þnder methos,dsbut we wonÕt EXVLQHVVPHWKRGVIURPWKH
SEVEN container callback me ese
of the bean clasthem in our bean FRPSRQHQWLQWHUIDFH
in your bean class. EntityBeanthods
actually deÞne get there in a adds three new methods at
(long story, weÕll SessionBean interface didth
few minutes). nÕt have.
&ORANYENTITYBEANUSINGCONTAINER MANAGEDPERSISTENCE#-0 YOUWILLALWAYS
HAVEATLEASTSEVENCONTAINERCALLBACKSˆALLFROMTHE%NTITY"EANINTERFACE
IMPLEMENTATION9OUDONTHAVETOHAVEACREATE METHODINYOURHOME
BUTIFYOUDOHAVECREATE METHODS YOUMUSTMATCHEACHCREATE WITHNOT
ONEBUTTWOMETHODSEJB#REATE ANDEJB0OST#REATE )FYOUHAVEHOME
BUSINESSMETHODS YOUMUSTWRITEAMATCHINGEJB(OMEMETHOD.AME
METHODINTHEBEANCLASS
)FYOUUSEBEAN MANAGEDPERSISTENCE"-0 WHEREYOUWRITEYOUROWN
DATABASEACCESSCODE YOUALSOMUSTMATCHEACHlNDERMETHODWITHAN
EJB&INDWHATEVERMETHOD2EMEMBER THEONLYMETHODREQUIREDINA
HOMEINTERFACEISlND"Y0RIMARY+EY "UTINA#-0BEAN YOUWONTPUT
ANYlNDERSINYOURBEANCLASSEVENTHOUGHTHEYREINYOURHOMEINTERFACE

 &KDSWHU
HQWLW\EHDQV\QFKURQL]DWLRQ

?ZQ\QVOI+58MV\Q\aJMIV"
UISMQ\IJ[\ZIK\

<(6,ORYH&037KH&RQWDLQHU 2KVXUH\RXJHWWRJRKDYHIXQZKLOH , 
LPSOHPHQWVP\ÀQGHUVP\JHWWHUV GRDOOWKHUHDOZRUN+RZFRPHZLWKHDFKUHY
P\VHWWHUVP\VHOHFWPHWKRGVDQGLWZULWHV RIWKH(-%VSHF , HQGXSGRLQJPRUHZRUN
DOOWKHGDWDEDVHDFFHVVFRGHIRUWKHFUHDWH DQG\RXHQGXSGRLQJOHVV"7KDWEORZV:LOO\RX
UHPRYHORDGDQGVWRUHPHWKRGVMXVWWKLQN DWOHDVWWDNHVRPHSLFWXUHVRIWKHÁDVKPREQH[W
KRZPDQ\ÁDVKPREV,FDQDWWHQGQRZ ZHHNDW%DUQHVDQG1REOH"$WH[DFWO\30HYHU\RQH
WKDW,GRQ·WKDYHWRZULWHDOOWKLVEHDQ VKRZVXS$WHYHU\RQHUXQVLQDQGVWDUWVEUHDWKLQJ
FRGH KDUGDQGFURXFKLQJEHKLQGERRNVKHOYHVOLNHWKH\·UH
EHLQJFKDVHGE\EDGJX\V$WWKH\DOOUXQWRWKH
FRPSXWHUVHFWLRQJUDEWKHQHDUHVW+HDG)LUVWERRN
DQGVKRXW´,JRWLWµWKHQWKH\GLVSHUVH%\
HYHU\RQHLVJRQH

-AKEYOUR#-0ENTITYBEANCLASSABSTRACT
9OUSTILLHAVETOIMPLEMENTTHECONTAINERCALLBACKSFROMJAVAXEJB%NTITY"EAN
ANDIFYOUSTILLHAVETOWRITEALLYOURBUSINESSMETHODSINCLUDINGTHOSEFROM
THEHOME ANDIFYOUHAVEANYCREATEMETHODS YOUHAVETOMATCHTHOSEINTHE
BEANCLASSASWELL"UTTHATSTILLLEAVESAPILEOFWORKFORTHE#ONTAINERTODO
INCLUDINGTHEACCESSORMETHODSFORYOURPERSISTENTlELDS&OREXAMPLE IFYOUR
#USTOMERTABLEHASACOLUMNFORADDRESS ANDYOUMAPTHATTOAlELDINYOUR
BEANCLASSSOTHATCLIENTSCAN FORINSTANCE CALLGET!DDRESS YOUDONTWRITE
THEGETTERSANDSETTERSFORTHATlELD)NFACT YOUDONTEVENDECLARETHElELD7ITH
#-0 YOUCREATEAVIRTUALlELD BYDElNINGGETTERSANDSETTERS)NOTHERWORDS
THEPERSISTENTlELDFORADDRESSEXISTSINYOURBEANSIMPLYBECAUSETHERESANABSTRACT
GETTERANDSETTERFORIT7ELLTHATSNOTENTIRELYTRUE4HEREALSOHASTOBEANENTRY
INTHEDEPLOYMENTDESCRIPTOR BUTWELLLOOKATTHATINTHENEXTCHAPTER 

\RXDUHKHUH 
HQWLW\EHDQFODVV

AW]X]\\PZMMSQVL[WN\PQVO[QVaW]ZJMIVKTI[["

 7KLQJVIURPWKHKRPHLQWHUIDFH

ƒ )RUHDFKFUHDWH PHWKRGLQWKHKRPH\RXPXVWKDYH LQWHUIDFH!!


DPDWFKLQJHME&UHDWH DQGHME3RVW&UHDWH PHWKRG &XVWRPHU+RPH
LQWKHEHDQFODVV
FUHDWH 6WULQJODVW6WULQJILUVW6WULQJDGGUHVV

ƒ )RUHDFKEXVLQHVVPHWKRGLQWKHKRPH\RXPXVW ILQG%\3ULPDU\.H\ 6WULQJNH\


KDYHDPDWFKLQJHME+RPHPHWKRG!LQWKHEHDQ ILQG%\&LW\ 6WULQJFLW\
FODVV XSGDWH$OO 6WULQJFPG

ƒ )RU&03EHDQV\RXZLOO127ZULWHPDWFKLQJILQGHU
PHWKRGV7KH&RQWDLQHUZLOOZULWHWKHPIRU\RXEDVHG
RQLQIR\RXSXWLQWKHGHSOR\PHQWGHVFULSWRU :H·OOJR
RYHUDOOWKDWLQWKHQH[WFKDSWHU

 7KLQJVIURPWKHFRPSRQHQWLQWHUIDFH
LQWHUIDFH!!
ƒ )RUHDFKPHWKRGLQWKHFRPSRQHQWLQWHUIDFH\RX &XVWRPHU
PXVWKDYHDPDWFKLQJFRQFUHWHLPSOHPHQWDWLRQLQWKH JHW)LUVW1DPH
EHDQFODVV
VHW)LUVW1DPH 6WULQJQDPH
JHW/DVW1DPH
VHW/DVW1DPH 6WULQJQDPH
JHW$GGUHVV
VHW$GGUHVV 6WULQJDGGU

 7KLQJVIURPWKH(QWLW\%HDQLQWHUIDFH LQWHUIDFH!!
(QWLW\%HDQ
ƒ <RXPXVWLPSOHPHQWWKH(QWLW\%HDQLQWHUIDFHHLWKHU
GLUHFWO\RULQGLUHFWO\6RXQOHVV\RXKDYHDVXSHUFODVV VHW(QWLW\&RQWH[W (QWLW\&RQWH[WHF
WKDWLPSOHPHQWHGWKHPHWKRGV\RX·UHUHVSRQVLEOHIRU HME$FWLYDWH
ZULWLQJFRQFUHWHLPSOHPHQWDWLRQVLQ\RXUEHDQFODVV HME3DVVLYDWH
HME5HPRYH
XQVHW(QWLW\&RQWH[W
HME/RDG
HME6WRUH

 &KDSWHU
HQWLW\EHDQV\QFKURQL]DWLRQ

84=;WS\PI\¼[NW]Z\PQVO[

 9LUWXDOSHUVLVWHQW¿HOGV
ƒ )RUHDFKSHUVLVWHQWILHOGSURYLGHDQDEVWUDFWJHWWHUDQGVHWWHU

:KDWLVD¶YLUWXDO
SHUVLVWHQWÀHOG·",I\RX
PHDQDQLQVWDQFHYDULDEOH
WKHQZK\DUH\RXFDOOLQJ
LW¶YLUWXDO·"

¶9LUWXDOSHUVLVWHQWÀHOGV·DUHIRUWKH
YDOXHVWKDWPDSWRFROXPQVLQWKH
GDWDEDVH7KH\UHSUHVHQWWKHHQWLW\·V
SHUVLVWHQWVWDWH,Q\RXUEHDQFODVV
FRGHWKH\H[LVWRQO\DVDEVWUDFW
JHWWHUVDQGVHWWHUV

This bean has FOUR


persistent Þelds, fo )LUVW-RKQ
Last, PK (primary ker First, /DVW0D\HU
and Address y), 3.
$GGUHVV'HUODQG6W

)LUVW /DVW 3. $GGUHVV


-RKQ 0D\HU  'HUODQG6W
)UDQ +HDO\  %DU6W
%HOD )OHFN  3LFN/DQH

\RXDUHKHUH 
YLUWXDO¿HOGV

>QZ\]ITNQMTL[IZM67<QV[\IVKM^IZQIJTM[
SXEOLFDEVWUDFWFODVV&XVWRPHU%HDQ&03LPSOHPHQWV(QWLW\%HDQ^
note: the only inst
SULYDWH(QWLW\&RQWH[WFRQWH[W ance variable is for
the EntityContext!
SXEOLF6WULQJHME&UHDWH 6WULQJODVW6WULQJ¿UVW6WULQJDGGU ^
WKLVVHW/DVW ODVW 
WKLVVHW)LUVW ¿UVW 
WKLVVHW3. PDNH3. 
WKLVVHW$GGUHVV DGGU 
UHWXUQQXOO
` .
ual persistent Þelds
These are the virt than abstract
ore
TheyÕre nothing m that map to the
SXEOLFDEVWUDFW6WULQJJHW/DVW 
SXEOLFDEVWUDFWYRLGVHW/DVW 6WULQJODVW  er s
getters and sett
SXEOLFDEVWUDFW6WULQJJHW)LUVW  base, representing
SXEOLFDEVWUDFWYRLGVHW)LUVW 6WULQJ¿UVW  columns in the data t state. The
en
SXEOLFDEVWUDFW6WULQJJHW&XVW$GGUHVV  the entityÕs persist with the entity !
ved
SXEOLFDEVWUDFWYRLGVHW&XVW$GGUHVV 6WULQJDGGU  things that get sa
SXEOLFDEVWUDFW6WULQJJHW3. 
SXEOLFDEVWUDFWYRLGVHW3. 6WULQJSN 

SXEOLF6WULQJJHW/DVW1DPH ^
UHWXUQWKLVJHW/DVW 
These are methods fr
` om
SXEOLFYRLGVHW/DVW1DPH 6WULQJQDPH ^ interface, that are ex the component
posed to the client.
WKLVVHW/DVW QDPH 
We know what youÕre
` thinking... why do you
a SECOND set of ge ha
SXEOLF6WULQJJHW)LUVW1DPH ^ tters and setters, wh ve
UHWXUQWKLVJHW)LUVW  you can just expose th en
e abstract ones in your
` component interface?
SXEOLFYRLGVHW)LUVW1DPH 6WULQJQDPH ^
WKLVVHW)LUVW QDPH  Well, you COULD expo
se
` good idea. Think abou them, but itÕs not a
SXEOLF6WULQJJHW$GGUHVV ^
t it....
UHWXUQWKLVJHW&XVW$GGUHVV  hereÕs a hint: imagine
that
` versions had more code the non-abstract
than what you see here
SXEOLFYRLGVHW$GGUHVV 6WULQJDGGU ^
bigger hint: imagine th .
WKLVVHW&XVW$GGUHVV DGGU  at
` methods had VALIDAT the non-abstract
ION code...
PRUHPHWKRGVIURP(QWLW\%HDQ ridiculously big hint: th
ink about encapsulation
DQGWKHKRPHLQWHUIDFH .
`

 &KDSWHU
HQWLW\EHDQV\QFKURQL]DWLRQ
6KDUSHQ \RXU SHQFLO
8VLQJWKHLQWHUIDFHVEHORZZULWHDOHJDOEHDQFODVV<RXGRQ·WKDYH
WRZULWHWKHDFWXDOEXVLQHVVORJLFEXWDWOHDVWOLVWDOOWKHPHWKRGV
WKDW\RXKDYHWRZULWHLQWKHFODVVZLWKWKHLUFRUUHFWGHFODUDWLRQV

LQWHUIDFH!! LQWHUIDFH!! LQWHUIDFH!!


3URGXFW+RPH 3URGXFW (QWLW\%HDQ
FUHDWH 6WULQJGHVFULSWLRQ6WULQJFDWGRXEOHSULFH6WULQJ,' JHW&DWHJRU\ VHW(QWLW\&RQWH[W (QWLW\&RQWH[WHF
ILQG%\3ULPDU\.H\ 6WULQJNH\ JHW,' HME$FWLYDWH
ILQG%\&DWHJRU\ 6WULQJFDWHJRU\ JHW'HVFULSWLRQ HME3DVVLYDWH
JHW/RZ6WRFN,WHPV VHW'HVFULSWLRQ HME5HPRYH
JHW3ULFH XQVHW(QWLW\&RQWH[W
VHW3ULFH HME/RDG
:ULWHWKHFODVVKHUHLQWKHVSDFHEHORZGRQ·W HME6WRUH
ZRUU\DERXWLPSRUWVWDWHPHQWV

\RXDUHKHUH 
&XVWRPHU%HDQ&03FRGH

+WUXTM\MKWLMNWZ\PM+][\WUMZ*MIV+58KTI[[
QRWHLW·VQRWDQQRWDWHGEHFDXVHWKDW·V<285MRELQWKH6KDUSHQH[HUFLVHRQWKHQH[WSDJH

SDFNDJHKHDG¿UVW

LPSRUWMDYD[HME 

SXEOLFDEVWUDFWFODVV&XVWRPHU%HDQ&03LPSOHPHQWV(QWLW\%HDQ^

SULYDWH(QWLW\&RQWH[WFRQWH[W

SXEOLF6WULQJHME&UHDWH 6WULQJODVW6WULQJ¿UVW6WULQJDGGU ^
WKLVVHW/DVW ODVW 
WKLVVHW)LUVW ¿UVW 
WKLVVHW3. PDNH3. 
WKLVVHW$GGUHVV DGGU 
UHWXUQQXOO
`

SXEOLF6WULQJJHW/DVW1DPH ^
UHWXUQWKLVJHW/DVW 
`

SXEOLFYRLGVHW/DVW1DPH 6WULQJQDPH ^
WKLVVHW/DVW QDPH 
`

SXEOLF6WULQJJHW)LUVW1DPH ^
UHWXUQWKLVJHW)LUVW 
`

SXEOLFYRLGVHW)LUVW1DPH 6WULQJQDPH ^
WKLVVHW)LUVW QDPH 
`

SXEOLF6WULQJJHW$GGUHVV ^
UHWXUQWKLVJHW&XVW$GGUHVV 
`

SXEOLFYRLGVHW$GGUHVV 6WULQJDGGU ^
WKLVVHW&XVW$GGUHVV DGGU 
`

SXEOLFYRLGVHW(QWLW\&RQWH[W (QWLW\&RQWH[WFW[ ^
FRQWH[W FW[
`

 &KDSWHU
HQWLW\EHDQV\QFKURQL]DWLRQ

SXEOLFDEVWUDFW6WULQJJHW/DVW 
SXEOLFDEVWUDFWYRLGVHW/DVW 6WULQJODVW 
SXEOLFDEVWUDFW6WULQJJHW)LUVW 
SXEOLFDEVWUDFWYRLGVHW)LUVW 6WULQJ¿UVW 
SXEOLFDEVWUDFW6WULQJJHW&XVW$GGUHVV 
SXEOLFDEVWUDFWYRLGVHW&XVW$GGUHVV 6WULQJDGGU 
SXEOLFDEVWUDFW6WULQJJHW3. 
SXEOLFDEVWUDFWYRLGVHW3. 6WULQJSN 

SXEOLFYRLGXQVHW(QWLW\&RQWH[W ^`
imary
ldÕs stupidesthpr
SXEOLFYRLGHME/RDG ^`
SXEOLFYRLGHME6WRUH ^` h is is t h e w or at always
SXEOLFYRLGHME$FWLYDWH ^` remember: t r. (Well, we suppose one t etty lame,
SXEOLFYRLGHME3DVVLYDWH ^` key generatoe same number would be prprimary keys
SXEOLFYRLGHME5HPRYH ^` returned th ldnÕt work anyway, since JVM will
but that wouique or... guess what... the But as we
SULYDWH6WULQJPDNH3. ^ MUST be unce DuplicateKeyException. ther use a
LQWUDQG  LQW  0DWKUDQGRP    give you a ni in the Real World, youÕd ei, or a REAL
UHWXUQ³´UDQG
were saying, d arg as the primary key sort, or
`
client-suppliegeneration engine of some abase auto-
primary key ainer to give you the dat s that.)
`

ask the Cont y (if your vendor support


generated ke

6KDUSHQ \RXU SHQFLO

 0DUNHDFKPHWKRGLQWKH&XVWRPHU%HDQ&03FODVVZLWKRQHRIWKHIROORZLQJIRXU
V\PEROV
H C EB VF
EDVHGRQWKHUHDVRQIRUWKDWPHWKRG·VH[LVWHQFHLQWKHFODVV)RUH[DPSOHWKH
HME&UHDWH PHWKRGLVUHTXLUHGEHFDXVHWKHUH·VDPDWFKLQJFUHDWH LQWKHKRPH
VRPDUNDQHQH[WWRWKHHME&UHDWH PHWKRG

 3XWDFKHFNPDUNQH[WWRWKRVHPHWKRGVWKDWWKHFRPSLOHUFDUHVDERXW,QRWKHU
ZRUGVLI\RXOHIWDPHWKRGRXWDQGWKHFRPSLOHUZRXOGFRPSODLQZLWKDQHUURUWKHQ
PDUNWKDWPHWKRGZLWKD

 $QQRWDWHWKHFRGH\RXUVHOIZLWKDQ\RWKHUGHWDLOV\RXFDQWKLQNRI)RUWKLVH[HUFLVH
EXWQRWWKHSUHYLRXVWZR GRDVPXFKDV\RXFDQRQ\RXURZQWKHQWXUQEDFNWR
HDUOLHUSDJHVLQWKLVFKDSWHUDQGVHHLI\RXFDQDGGRUFKDQJHDQ\WKLQJ

\RXDUHKHUH 
HQWLW\EHDQOLIHF\FOH

(QWLW\EHDQLQVWDQFHOLIHF\FOH

LQVWDQFHWKURZVV\VWHPH[FHSWLRQ
GRHVQRWH[LVW
XQFKHFNHGXQFDXJKW

FRQVWUXFWRU
XQVHW(QWLW\&RQWH[W
VHW(QWLW\&RQWH[W

SRROHG HME)LQGPHWKRG!
HME+RPHPHWKRG!
KRPHEXVLQHVVPHWKRGV HME6HOHFWPHWKRG!  FRYHUHG
LQWKHQH[WFKDSWHU

HME$FWLYDWH

HME3DVVLYDWH
HME&UHDWHPHWKRG! HME5HPRYH
HME3RVW&UHDWHPHWKRG!

HME6WRUH PHWKRGUHDG\ HME/RDG

EXVLQHVVPHWKRG HME6HOHFWPHWKRG!
FRPSRQHQWLQWHUIDFH FDOOHGIURPDEXVLQHVVPHWKRG

/HW·VVHHKHUHE\P\
FDOFXODWLRQVLWVKRXOGWDNHPH
DSSUR[LPDWHO\\HDUVWRPHPRUL]H
WKLVOLIHF\FOHGLDJUDPVRWKDWZRXOG
PHDQ,FDQVFKHGXOHWKHH[DPIRU
VRPHWLPHLQWKH\HDU

when you see th e whole


It lo oks ba d on ly d of
elax...by the en
thing at once. asRsuming youÕve regained
this chapter, youÕll have it 90% down, and
consciousness, chapter 7, youÕll have it all.
by the end of

 &KDSWHU
HQWLW\EHDQV\QFKURQL]DWLRQ

(QWLW\EHDQLQVWDQFHWUDQVLWLRQV

orize this all LQVWDQFHWKURZVV\VWHPH[FHSWLRQ


DonÕt try to eÕmllemspend most of GRHVQRWH[LVW XQFKHFNHGXQFDXJKW

right now ! W is chapter looking


the rest of th FRQVWUXFWRU
at this stuff. VHW(QWLW\&RQWH[W
XQVHW(QWLW\&RQWH[W

0RYLQJIURPGRHVQRWH[LVW SRROHG HME)LQGPHWKRG!


HME+RPHPHWKRG! HME6HOHFWPHWKRG! 
WRSRROHG KRPHEXVLQHVVPHWKRGV

HME$FWLYDWH

HME3DVVLYDWH
FRQVWUXFWRU
HME&UHDWHPHWKRG! HME5HPRYH
VHW(QWLW\&RQWH[W  HME3RVW&UHDWHPHWKRG!

QRWHQRFUHDWH 

HME6WRUH PHWKRGUHDG\ HME/RDG

EXVLQHVVPHWKRG HME6HOHFWPHWKRG!
FRPSRQHQWLQWHUIDFH FDOOHGIURPDEXVLQHVVPHWKRG

0RYLQJIURPSRROHGWR
LQVWDQFHWKURZVV\VWHPH[FHSWLRQ
PHWKRGUHDG\
GRHVQRWH[LVW XQFKHFNHGXQFDXJKW

HME&UHDWH HME3RVW&UHDWH
FRQVWUXFWRU
XQVHW(QWLW\&RQWH[W
25 VHW(QWLW\&RQWH[W

HME$FWLYDWH
SRROHG HME)LQGPHWKRG!
7KH&RQWDLQHUGRHV127FDOO HME+RPHPHWKRG! HME6HOHFWPHWKRG! 
HME$FWLYDWH LILWFDOOVHME&UHDWH KRPHEXVLQHVVPHWKRGV
HME$FWLYDWH

HME3DVVLYDWH

HME&UHDWHPHWKRG! HME5HPRYH
0RYLQJIURPPHWKRGUHDG\ HME3RVW&UHDWHPHWKRG!

WRSRROHG

HME3DVVLYDWH PHWKRGUHDG\
HME6WRUH HME/RDG
25
HME5HPRYH
EXVLQHVVPHWKRG HME6HOHFWPHWKRG!
1HYHUERWK$EHDQGRLQJDQ FRPSRQHQWLQWHUIDFH FDOOHGIURPDEXVLQHVVPHWKRG
HME5HPRYH ZLOO127EHSDVVLYDWHG
EHIRUHJRLQJEDFNWRWKHSRRO

\RXDUHKHUH 
HQWLW\VWDWHWUDQVLWLRQV

(QWLW\EHDQLQVWDQFHWUDQVLWLRQV

LQVWDQFHWKURZVV\VWHPH[FHSWLRQ
GRHVQRWH[LVW XQFKHFNHGXQFDXJKW

FRQVWUXFWRU
XQVHW(QWLW\&RQWH[W
VHW(QWLW\&RQWH[W

0RYLQJWRGRHVQRWH[LVW
SRROHG HME)LQGPHWKRG!
HME+RPHPHWKRG! HME6HOHFWPHWKRG! 
XQVHW(QWLW\&RQWH[W KRPHEXVLQHVVPHWKRGV

HME$FWLYDWH

HME3DVVLYDWH
25
HME&UHDWHPHWKRG! HME5HPRYH
LQVWDQFHWKURZVDV\VWHPH[FHSWLRQ HME3RVW&UHDWHPHWKRG!

HME6WRUH PHWKRGUHDG\ HME/RDG

EXVLQHVVPHWKRG HME6HOHFWPHWKRG!
FRPSRQHQWLQWHUIDFH FDOOHGIURPDEXVLQHVVPHWKRG

WKHUH DUH QR
'XPE 4XHVWLRQV
Q: (OWCOMETHEREISALABELFOR PLACESISBECAUSEITDEPENDSONWHICHINTERFACETHE
EJB3ELECTMETHODWHATEVER4(!4IS INBOTHTHE CLIENTUSESTOCALLTHEMETHODTHATINTURNCALLSASELECT
POOLEDSTATEANDTHEMETHOD READYSTATE(OWCAN METHOD3O IFACLIENTCALLSAHOMEBUSINESSMETHOD
YOURUNTHOSEMETHODSINBOTH ANDTHEHOMEMETHODCALLSANEJB3ELECTMETHOD
THEBEANSTAYSINTHEPOOLTORUNTHEMETHOD"UT
A: 7ELLGETTOEJB3ELECTMETHODSABITLATER BUT
IFTHESELECTMETHODISCALLEDFROMAMETHODINTHE
BEANSCOMPONENTINTERFACE THATMEANSTHEMETHOD
FORNOW THINKOFTHEMASPRIVATEMETHODSINTHEBEAN ISRUNNINGONASPECIFICENTITY SAY &RANK&OOF SO
INOTHERWORDS CALLEDNOTBYTHECLIENT BUTONLY THEBEANISINTHEMETHOD READYSTATE
BYTHEBEANSOWNMETHODS THATDOSELECTSONTHE
DATABASE4HEYREUSEDONLYFOR#-0BEANS ANDCAN
BEAHUGECONVENIENCE SINCETHEYREIMPLEMENTEDFOR
YOUBYTHE#ONTAINER4HEREASONTHEYREINBOTH

 &KDSWHU
HQWLW\EHDQV\QFKURQL]DWLRQ

WKHUH DUH QR
'XPE 4XHVWLRQV
Q: )TLOOKSLIKETHEREARE47/WAYSTOMOVE
TOTHEMETHOD READYSTATEEITHERTHECLIENT
CALLSACREATE METHODORTHE#ONTAINERCALLS 6KDUSHQ \RXU SHQFLO
EJB!CTIVATE 3ODOESTHISMEANTHATYOUCANT
COUNTONEJB!CTIVATE BEINGCALLEDEACHTIMEYOU
LEAVETHEPOOL
)RUWKHH[DP\RXKDYHWRNQRZH[DFWO\
ZKLFKFRQWDLQHUFDOOEDFNPHWKRGVDUHLQWKH
A: 4HATSRIGHT!BEANCANMOVETOTHEMETHOD (QWLW\%HDQLQWHUIDFHVR\RXQHHGWRPHPRUL]H
WKHVH7KHWULFN\SDUWLVWKDWVRPHRIWKHP
READYSTATEBY/.,9THOSETWOPATHSCREATIONOR
ACTIVATION BUTNEVERBOTHATTHESAMETIME3O IFYOU KDYHWKHVDPHQDPHVEXWFRPSOHWHO\GLIIHUHQW
HAVEADESIGNTHATACQUIRESRESOURCESINEJB!CTIVATE EHKDYLRUWKDQWKHLUVHVVLRQEHDQFRXQWHUSDUWVLQ
SOTHATTHEYLLALWAYSBEAVAILABLEWHILETHEBEANIS WKH6HVVLRQ%HDQLQWHUIDFH'2127/22.21
SERVICINGABUSINESSMETHOD YOUBETTERGRABTHEM 7+(23326,7(3$*(
INEJB#REATE OREJB0OST#REATE ˆYOULLSEETHE
DIFFERENCEINAFEWMINUTES  7KHFOLHQWFDOOVWKLVPHWKRGWRWHOOWKH
)NTHEREALWORLD ITSMUCHLESSCOMMONIN%*" &RQWDLQHUWKDWKH WKHFOLHQW LVGRQHXVLQJWKH
TOUSEEJB!CTIVATE FORMUCHOFANYTHING7ELLTALK EHDQ·V(-%REMHFWUHIHUHQFH
MOREABOUTTHISBOTHINTHISCHAPTERANDTHELAST
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
CHAPTERPATTERNSANDPERFORMANCE BUTTHESHORT
VERSIONISTHISITSUSUALLYMOREEFFICIENTTOACQUIRE
ANDRELEASESCARCERESOURCESJUSTWITHINTHEBUSINESS
METHODSTHATNEEDTHEM4HATWAY YOURENOT 7KLVPHWKRGLVFDOOHGZKHQWKHEHDQJRHV
HANGINGONTOTHEMPREVENTINGOTHERBEANSFROM EDFNWRWKHSRRODIWHUDQHQWLW\LVGHOHWHGIURP
HAVINGACCESS WHILEYOURBEANISACTIVEIENOTIN WKHGDWDEDVH
THEPOOL BUTNOTACTIVELYRUNNINGAMETHOD9ES THAT
MEANSYOUHAVESOMEADDITIONALOVERHEADINEACH BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BUSINESSMETHOD ASOPPOSEDTOGRABBINGTHETHING
ONCEINEJB!CTIVATE BUTINMANYCASESTHEOVERHEAD
OFGRABBINGTHERESOURCEISMINORCOMPAREDTOTHE 7KLVPHWKRGLVFDOOHGLPPHGLDWHO\DIWHUWKH
SCALABILITYCOSTOFHOLDINGRESOURCESWERETHINKING EHDQ·VFRQVWUXFWRUUXQV
DATABASECONNECTIONSFROMTHEPOOL OPENLONGER
THANYOUNEEDTOACCESSTHOSERESOURCES BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
"OTTOMLINE9OULLPROBABLYFINDYOURSELFLEAVING
EJB!CTIVATE EMPTY INSOYOUWONTHAVETOWORRY
ABOUTMISSINGITWHENYOUCOMEOUTOFTHEPOOLVIA 7KLVPHWKRGLVFDOOHGRQWKHEHDQZKHQWKH
ANEJB#REATE CALL EHDQLVLQWKHSRRODQGWKHFOLHQWLQYRNHVD
EXVLQHVVPHWKRGRQWKHFRPSRQHQWLQWHUIDFH
:H·UHORRNLQJIRUWKHILUVWPHWKRGFDOOHGLQWKDW
VFHQDULR
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB

\RXDUHKHUH 
HQWLW\OLIHF\FOHDFWLYLW\

6KDUSHQ \RXU SHQFLO


)LOOLQWKHPLVVLQJPHWKRGV'RQ·WZRUU\LI\RXGRQ·WJHWWKH
QDPHH[DFWO\ULJKWMXVWWU\WRZRUNRXWZKDWKDSSHQVDW
WKHWUDQVLWLRQVLQWKHHQWLW\EHDQVWDWHGLDJUDP

LQVWDQFHWKURZVV\VWHPH[FHSWLRQ
GRHVQRWH[LVW XQFKHFNHGXQFDXJKW

FRQVWUXFWRU

SRROHG
HME+RPHPHWKRG! HME6HOHFWPHWKRG!  FRYHUHGLQWKHQH[WFKDSWHU
KRPHEXVLQHVVPHWKRGV
HME$FWLYDWH

HME3DVVLYDWH

HME&UHDWHPHWKRG!

HME6WRUH PHWKRGUHDG\

HME6HOHFWPHWKRG!
FRPSRQHQWLQWHUIDFH FDOOHGIURPDEXVLQHVVPHWKRG

<RXKDYHWRNQRZHYH
U\GHWDLORIWKLVOLIHF\
FOH

VDLG
IH7KHWULFNLHVWSDUWVDVZH
DP H[ SHF WV\ RX WRN QRZ HYHU\GHWDLORIDEHDQ¶VOL VEXWH QWLUHO\ GLIIHUHQW
7KHH[ WKHVDPHQDPH
OLHUDUHZ KHUHWK HP HWK RGVLQDQHQWLW\EHDQKDYH LWK
HDU SHFLDOFDUHZ
HVVLRQEHDQ7DNHH[WUDV
PHDQLQJVIURPWKRVHLQDV HZ HQWLW\LQWKH GDWDEDVH
YVPDNHDQ
FUHDWH PDNHDQHZEHDQ WLW\LQWKHGDWDEDVH
RX¶UHGRQHYVGHOHWHDQHQ
UHPRYH WHOOWKH&RQWDLQHU\ N ZKROH WRWKHSRRO
L]H WKH VWDWHIX OEHDQYVVHQGWKHEH EDFDQ
HWKRG
SDVVLYDWH  VHULDO HSRROWRUXQDEXVLQHVVP
GHV HULD OL]H WKH VWDWHIX OEHDQYVEULQJLWRXWRIWK RURXW RIWKH SRRO
DFWLYD WH LRQEHDQJRH VLQ
DOOHGZKHQDVWDWHOHVVVHVV
UHPHPEHU12PHWKRGLVF

 &KDSWHU
HQWLW\EHDQV\QFKURQL]DWLRQ

;WPW_,1,\PMKTQMV\OM\IZMNMZMVKM\W\PM
-2*WJRMK\NWZ  '

7HENACLIENTWANTSTOCALLABUSINESSMETHODONASPECIlCENTITYINOTHER
WORDS ANENTITYWITHAUNIQUEPRIMARYKEY LIKE,EE,OO THECLIENTlRST
NEEDSAREFERENCETOTHATENTITYS%*"OBJECT
&ORANENTITYBEAN REMEMBER THEREARETHREEWAYSTHATCANHAPPEN

 &OLHQWFDOOVD¿QGHURQWKHKRPH
FXVWRPHU+RPH¿QG%\3ULPDU\.H\ ³´ 

 &OLHQWFDOOVFUHDWHRQWKHKRPH WRLQVHUWIRUWKH¿UVWWLPH
FXVWRPHU+RPHFUHDWH ³/RR´³/HH´³´³%DU&LUFOH´ 

 &OLHQWFDOOVDKRPHEXVLQHVVPHWKRGWKDWUHWXUQVD
UHIHUHQFHWRWKHEHDQ¶VFRPSRQHQWLQWHUIDFH
FXVWRPHU+RPHJHW&XVWRPHU%\6WUHHW ³%DU&LUFOH´ 

7ELLTALKABOUTEACHSTAGEOFTHEBEANSLIFECYCLEFORlNDERS CREATES AND


HOMEBUSINESSMETHODS"UTlRSTˆEACHOFTHESEASSUMESTHATTHEBEAN
INSTANCEALREADYEXISTSINTHEPOOL"UTHOWDOESTHEBEANGETTHEREINTHE
lRSTPLACE

Before the client can use a bean for


GRHVQRWH[LVW
ANYTHING -- creation, Þnders, business
methods, etc., the Container has to make
FRQVWUXFWRU a new bean instance for the pool. Bean
VHW(QWLW\&RQWH[W
CONSTRUCTION isnÕt tied to entity bean
CREATION.
SRROHG
Construction means a new bean instance.
But creation, for an entity bean, means a
new entity is inserted into the database.

\RXDUHKHUH 
&03EHDQFRQVWUXFWLRQ

&03(QWLW\EHDQFRQVWUXFWLRQ
6FHQDULR&RQWDLQHUZDQWVWRPDNHDQHZEHDQLQVWDQFHIRUWKHSRRO

FRQWH[W
FRQWH[W
 &RQWDLQHUPDNHVDQHZ(QWLW\&RQWH[W 
QHZ EHDQ
 &RQWDLQHUPDNHVDQHZLQVWDQFHRIWKH  EHDQ
EHDQFODVV EHDQ·VFRQVWUXFWRUUXQV QHZ REMHFW

%HDQ3RRO

FRQWH[W
 &RQWDLQHUFDOOVVHW(QWLW\&RQWH[W RQWKH
EHDQ7KLVLVWKH21/<WLPHLQDEHDQ  W
LQVWDQFH·VOLIHWKDWLWZLOOJHWWKLVFDOO W\&RQWH[  EHDQ
VHW(QWL EHDQ

 &RQWDLQHUSXWVWKHEHDQ ZKLFKQRZKDVD FRQWH[W

FRQWH[W LQWKHSRRO EHDQ

1RWLFHFUHDWH ZDVQHYHUFDOOHG$FUHDWH  FRQWH[W

PHWKRGLVRQO\IRULQVHUWLQJDQHZHQWLW\LQWR
WKHGDWDEDVHDQGKDVQRWKLQJWRGRZLWKWKH %HDQ3RRO
EHDQLQVWDQFH·VFUHDWLRQ %HDQ3RRO

 &KDSWHU
HQWLW\EHDQV\QFKURQL]DWLRQ

*MIV\PQVO[aW]KIVLWL]ZQVOMV\Q\aK WV[\Z]K\QWV"

WLPHOLQH

FRQVWUXFWRU VHW(QWLW\&RQWH[W
8VH\RXU(QWLW\&RQWH[WWR 8VH\RXU(QWLW\&RQWH[WWR

‰ JHWDUHIHUHQFHWR\RXUKRPH ‰ JHWDUHIHUHQFHWR\RXUKRPH
‰ JHWDUHIHUHQFHWR\RXU(-%REMHFW ‰ JHWDUHIHUHQFHWR\RXU(-%REMHFW
‰ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW ‰ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW
‰ IRUFHDWUDQVDFWLRQWRUROOEDFN &07
G ‰ IRUFHDWUDQVDFWLRQWRUROOEDFN &07
THIN
EHDQV o ANY EHDQV
You canÕt d
‰ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\ ‰ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\
EHHQVHWWRUROOEDFN &07EHDQV EHHQVHWWRUROOEDFN &07EHDQV
‰ JHWDWUDQVDFWLRQUHIHUHQFHDQGFDOO ‰ JHWDWUDQVDFWLRQUHIHUHQFHDQGFDOO
PHWKRGVRQLW %07EHDQV PHWKRGVRQLW %07EHDQV

$FFHVV $FFHVV
‰ \RXUVSHFLDO-1',HQYLURQPHQW ‰ \RXUVSHFLDO-1',HQYLURQPHQW
‰ DQRWKHUEHDQ·VPHWKRGV ‰ DQRWKHUEHDQ·VPHWKRGV
‰ DUHVRXUFHPDQDJHU OLNHDGDWDEDVH ‰ DUHVRXUFHPDQDJHU OLNHDGDWDEDVH

:KDWWRSXWLQWKHFRQVWUXFWRU

:HNQRZLW·VSDLQIXOO\REYLRXVE\QRZ127+,1*
8QOHVV\RX·UHIRUFHGWRGRQ·WHYHQSXWDFRQVWUXFWRULQ\RXUFRGHDWDOODQGMXVWXVH
WKHFRPSLOHUJHQHUDWHGGHIDXOWFRQVWUXFWRU
:KDWHYHU\RXGREH685(\RXKDYHDSXEOLFQRDUJFRQVWUXFWRULQ\RXUFODVV
SXEOLF&XVWRPHU ^`

:KDWWRSXWLQWKHVHW(QWLW\&RQWH[W PHWKRG

$VVLJQWKHFRQWH[WWRDQLQVWDQFHYDULDEOH5HPHPEHU\RXJHWRQO\21(FKDQFH
WRVDYHLW<RXPLJKWQRWDOZD\VQHHGWRXVHDVHVVLRQFRQWH[WEXW\RX·OOSUREDEO\
QHHGDQHQWLW\FRQWH[W%HVLGHV\RXUFRQWH[WLVJRQQDVWD\DOLYHZKHWKHU\RXNHHS
DUHIHUHQFHWRLWRUQRWVRWKHRQO\PHPRU\\RXVDYHLI\RXGRQ·WNHHSLWLVIRUWKH
UHIHUHQFHYDULDEOHQRWWKHREMHFWLWVHOI

SXEOLFYRLGVHW(QWLW\&RQWH[W (QWLW\&RQWH[WFW[ ^
FRQWH[W FW[
`

\RXDUHKHUH 
&03EHDQFUHDWLRQ

&03(QWLW\EHDQFUHDWLRQ
6FHQDULRFOLHQWZDQWVWRFUHDWHDQHZHQWLW\LQWKHGDWDEDVH UHPHPEHUWKH
&RQWDLQHUPDGHWKHEHDQLQVWDQFHDQGWKHFRQWH[WHDUOLHUDQGSXWWKHPLQWKHSRRO

FRQWH[W

 EHDQ
%REµ
WH ´%LOO\
HME&UHD EHDQ
FOLHQW FRQWH[W

 RRO
+RPH RPS
FU REMHFW HDQIU
HD
WH  JHW
E
´%  %HDQ3RRO
LOO\ VWXE Eµ
% OO\%R
RE
µ UHDWH ´%L
F
'%

 &OLHQWFDOOVFUHDWH ´%LOO\%REµ RQWKHKRPHVWXE


 7KHFUHDWH ´%LOO\%REµ PHWKRGLQYRFDWLRQLVSDVVHGWRWKHKRPHREMHFW
 $EHDQLVSXOOHGRXWRIWKHSRROWRGRWKHFUHDWLRQ
 &RQWDLQHUFDOOVHME&UHDWH ´%LOO\%REµ RQWKHEHDQLQVWDQFH

(-%
REMHFW
VWXE $  EHDQ


REµ FRQWH[W
%
+RPH LOO\  
REMHFW ´%
WH
UH
D  %
W&
3RV
E
HM
,QVHUWDQHZ
URZLQWKHG
ZLWKDQHZSU DWDEDVH
LPDU\NH\ %HDQ3RRO


'%

 &RQWDLQHULQVHUWVDQHZHQWLW\ URZ LQWKHGDWDEDVHIRUSULPDU\NH\


 &RQWDLQHUJLYHVWKH(-%REMHFWDQG(QWLW\&RQWH[WWKHSULPDU\NH\YDOXH  
 &RQWDLQHUFDOOVHME3RVW&UHDWH ´%LOO\%REµ RQWKHEHDQWRJLYHWKHEHDQDFKDQFHWRILQLVKLQLWLDOL]LQJLWVHOI
 7KHKRPHUHWXUQVWKH(-%REMHFWVWXEWRWKHFOLHQW

 &KDSWHU
HQWLW\EHDQV\QFKURQL]DWLRQ

&UHDWLQJDQHZHQWLW\

&03HQWLW\EHDQ
note: this is not
creation, but entibe
ty
an instance
The Container inst creation.
the bean object ea antiated
FOLHQW
rlier
+RPH (-%
REMHFW REMHFW '%
EHDQ

wÕ on the bean instance,


see.. thereÕs no Ône happened the epool...
wh en th
FUHDWH because it already the bean in
Container Þrst put
HME&UHDWH

GDWDEDVHLQVHUW

QHZ

HME3RVW&UHDWH

EXVLQHVVPHWKRG
EXVLQHVVPHWKRG

7HOA4HISISQUITEDIFFERENTFROMSESSION "UTTHESECONDDIFFERENCEBETWEENENTITYAND
BEANCREATION SESSIONBEANEJB#REATE METHODSISTHEORDERIN
WHICHTHE%*"OBJECTISCREATED7HENANENTITY
4HE#ONTAINERCALLSEJB#REATE ONASESSIONBEAN BEANRUNSEJB#REATE THERESNO%*"OBJECT
INSTANCEONLYONCE ATTHEBEGINNINGOFTHEBEANS 9IKES4HATMEANSTHEBEANHASNOWAYTOGETA
LIFE4HATSONEBIGDIFFERENCEBETWEENSESSIONAND REFERENCETOITSBODYGUARD)NOTHERWORDS AN
ENTITYBEANSˆENTITYBEANSCANRUNEJB#REATE ENTITYBEANCANNOTUSETHEEJB#REATE METHODTO
OVERANDOVER LIKEABUSINESSMETHOD)NFACT SAY GETAREFERENCETOITSOWN%*"OBJECTANDPASS
THATSTHEBESTWAYTOTHINKOFITASJUSTANOTHER THATREFERENCETOSOMEONEELSE2EMEMBER ABEAN
HOMEBUSINESSMETHOD ASTHOUGHITWERENAMED CANTPASSAREFERENCETOITSELF EVER7HENABEAN
EJB)NSERT WHICH INOURHUMBLEOPINION IT WANTSTOPASSAREFERENCETOITSELF ITMUSTPASSA
SHOULDHAVEBEENNAMED BUTONCEAGAIN THEY REFERENCETOITSOWN%*"OBJECT"UTITCANTDOTHAT
FORGOTTOASKUS  INEJB#REATE BECAUSEITSTOOEARLY

\RXDUHKHUH 
&03EHDQFUHDWLRQ

&03(QWLW\EHDQFUHDWLRQ

 +H\EHDQUXQ  2.LQP\HME&UHDWH 
\RXUHME&UHDWH 
PHWKRG,·OOXVHWKRVHDUJV
PHWKRGDQGKHUHDUH IURPWKHFOLHQWWRVHWP\RZQ
WKHFOLHQWDUJV SHUVLVWHQWVWDWH ODVWQDPHÀUVW
QDPHSULPDU\NH\HWF

 *UHDW1RZ,FDQ
ORRNDW\RXUSHUVLVWHQWÀHOG
VWDWHDQGXVHWKHGDWDWR  1RZWKDW,KDYHD
SULPDU\NH\,FDQPDNH
FUHDWHWKHQHZFXVWRPHULQ
WKH(-%REMHFW DQGWHOO
WKHGDWDEDVH
WKH(QWLW\&RQWH[W

LQVHUW
'%

(-%
%HIRUH $IWHU REMHFW
/DVW )LUVW 3.H\ /DVW )LUVW 3.H\ 

)UDQNLH )RRI  )UDQNLH )RRI 


%U\DQ %RRI  %U\DQ %RRI 
%LOO\ %RE 

7KDQNV1RZWKDW
 ,·PLQHME3RVW&UHDWH ,NQRZ
 2.EHDQLI\RXQHHG WKDWP\(-%REMHFWLVUHDG\DQG
WRÀQLVKXS\RXUFUHDWLRQ ,FDQJHWDUHIHUHQFHWRLWIURPP\
,·PGRQHLQVHUWLQJWKHURZDQG FRQWH[W,QHHGWRSDVVDUHIHUHQFHWR
PDNLQJWKH(-%REMHFWVRUXQ\RXU P\VHOI ZKLFKPHDQVDUHIHUHQFHWR
HME3RVW&UHDWH DQGKHUH·VWKH P\ERG\JXDUG RXWWRDQRWKHUEHDQ
RULJLQDOFUHDWHDUJVMXVWLQ VR,5($//<QHHGHGDVHFRQG
FDVH\RXIRUJRW FKDQFHWRÀQLVKP\FUHDWLRQ

 &KDSWHU
HQWLW\EHDQV\QFKURQL]DWLRQ

,PSOHPHQW\RXUHME&UHDWH PHWKRGV

:KDWWRSXWLQHME&UHDWH

3XW\RXUHQWLW\LQLWLDOL]DWLRQFRGHKHUH7KLVPHDQVVHWWLQJYDOXHVIRU\RXUSHUVLVWHQW
ILHOGVWKHILHOGVWKDWPDSWRFROXPQVLQWKHGDWDEDVHURZWKDW·VDERXWWREHLQVHUWHG
1RWLFHZHDUHQ·WVD\LQJ´SXW\RXUREMHFWLQLWLDOL]DWLRQFRGHKHUHµ:LWKVHVVLRQEHDQVZHWROG
\RXWRWUHDWWKHHME&UHDWH NLQGRIOLNHDFRQVWUXFWRUIRUWKHEHDQ%XWZLWKHQWLW\EHDQVLW·VGLIIHU
HQWEHFDXVHWKHLQVWDQFHZDVLQLWLDOL]HGDORQJWLPHDJR ZKHQLWVVHW(QWLW\&RQWH[W PHWKRGZDV
FDOOHG 
6RHME&UHDWH LVDERXWLQLWLDOL]LQJWKHEHDQDVWKLVQHZHQWLW\WKHEHDQZLOOQRZUHSUHVHQW)RU
D&03EHDQWKLVPHDQVWKHFOLHQWKDVKDQGHG\RXDUJXPHQWVUHSUHVHQWLQJWKHGDWDWRLQVHUW
LQWRWKHGDWDEDVH7KH&RQWDLQHUZLOOORRNDWWKHVWDWHRI\RXUSHUVLVWHQWILHOGVRQFHHME&UHDWH 
UHWXUQVDQGXVHWKRVHILHOGVWRPDNHWKHQHZURZLQWKHGDWDEDVH
,I\RXGRQRWKLQJHOVHLQHME&UHDWH \RXPXVWPDNHDSULPDU\NH\IRUWKLVHQWLW\7KDW·V\RXU
PRVWLPSRUWDQWMRE<RXPLJKWPDNHWKHNH\EDVHGRQDUJXPHQWVWRWKHFUHDWHPHWKRG<RX
PLJKWPDNHWKHNH\EDVHGRQDNH\JHQHUDWLQJDOJRULWKP<RXPLJKWKDYHDNH\VHUYHUWKDW\RX
JRWRIRUWKHQH[WNH\:KDWHYHULWLV\RXPXVWFRPHXSZLWKWKHNH\DQGDVVLJQLWWR\RXUSULPDU\
NH\ILHOG:KHQHME&UHDWH WKH&RQWDLQHUORRNVDWWKHVWDWHRI\RXUSHUVLVWHQWILHOGVDQGXVHV
WKDWGDWDWRPDNHWKHQHZURZ
:DUQLQJ5HPHPEHUWKH&RQWDLQHUFDOOV\RXUHME&UHDWH EHIRUHLWFDQPDNHWKH(-%REMHFWVR
\RXFDQ·WXVHHME&UHDWH WRJHWDUHIHUHQFHWR\RXUVHOI LHDUHIHUHQFHWR\RXUERG\JXDUG(-%
REMHFW <RX·OOKDYHWRZDLWXQWLOHME3RVW&UHDWH EHIRUH\RXFDQDVN\RXUFRQWH[WIRUDUHIHUHQFH
WR\RXURZQFRPSRQHQWLQWHUIDFH<RXDOVRFDQ·WXVHHME&UHDWH WRDFFHVV\RXURZQSHUVLVWHQW
UHODWLRQVKLSV\RXKDYHWRZDLWXQWLOHME3RVW&UHDWH  EXWZH·OOFRYHUDOOWKDWLQWKHQH[WFKDSWHU 

y key!
m ust be th e ty pe of your primar
us in g is a
This e prim ary key weÕre type (and
In th is ca se , th
ust be the return
String, so that ism in the DD)
weÕll declare th

SXEOLF6WULQJHME&UHDWH 6WULQJODVW6WULQJ¿UVW ^
DVVLJQDUJVWRSHUVLVWHQW¿HOGV
WKLVVHW/DVW1DPH ODVW  Once ejbCreate() completes,
WKLVVHW)LUVW1DPH ¿UVW  Container will use th e val
set to make the new row.ues you
VHWDSULPDU\NH\
WKLVVHW3ULPDU\.H\ WKLVPDNH.H\ 
UHWXUQQXOO
` ret urn null?? WhatÕs up with TH
AT?

\RXDUHKHUH 
HQWLW\SULPDU\NH\

7JRMK\QLMV\Q\a"\PMXZQUIZaSMa
%VERYENTITY-534HAVEAUNIQUEIDENTITY4HE#ONTAINERWILLNEVERLETYOU
GETAWAYWITHHAVINGTWOORMOREENTITIESWITHTHESAMEPRIMARYKEY!NDAS
OF%*" COMINGUPWITHTHATPRIMARYKEYISSTILLYOURJOB4HE#ONTAINER
WONTDOITATLEASTNOTACCORDINGTOTHESPECIlCATION 

,I,·PMXVW
VXSSRVHGWRUHWXUQQXOO ,·PQRWJRQQDGRLW<28
ZK\GR,KDYHWRFRPH KDYHWRFRPHXSZLWKWKH
XSZLWKWKHNH\" SULPDU\NH\,GRQ·WNQRZZKDW
\RXUEXVLQHVVORJLFLVDQG,·P $QGGRQ·WH[SHFWPHWR
QRWJRQQDEHDSULPDU\NH\ GRLWHLWKHULI\RX·UHXVLQJ
JHQHUDWRUIRU\RX &03<RXKDYHWRFRPHXSZLWK
WKHSULPDU\NH\%()25(WKH
&RQWDLQHUWULHVWRLQVHUWWKHQHZ
URZ

'%

7ITH#-0 YOURESTILLRESPONSIBLEFORTHEPRIMARYKEY4HATDOESNTMEANYOU
WONTUSEAPRIMARYKEYSERVICEOFSOMEKIND-AYBEYOUHAVEASERVICETHAT
AUTOMATICALLYALLOCATESABIGBLOCKOFPRIMARYKEYSFROMTHEDATABASE AND
THENHANDSTHEMOUTASNEEDED/RYOUMIGHTHAVESOMETYPEOFUNIQUE
IDENTIlERALGORITHMTHATMAKESUNIQUEKEYSFORYOU/RMAYBEYOUREUSING
THECUSTOMERSSOCIALSECURITYNUMBERORACCOUNTNUMBERORTHATSUPTO
YOUTODECIDE
!NDTHEWAYYOUTELLTHE#ONTAINERWHATVALUETHEABOUT TO BE CREATEDENTITY
SHOULDHAVEISTHROUGHTHEVALUEOFONEORMOREOFYOURPERSISTENTlELDS
)FYOUHAVEJUSTONElELDASYOURPRIMARYKEY ANDITMAPSDIRECTLYTOA
COLUMNINTHEDATABASE YOURESET"UTIFYOUNEEDMORETHANONEVALUETO
UNIQUELYIDENTIFYANENTITYLIKE MAYBEITTAKESACOMBINATIONOFNAMEAND
DATE YOUCANUSEACOMPOUNDKEYTHATUSESTWOORMOREOFYOURCONTAINER
MANAGEDPERSISTENTlELDS

 &KDSWHU
HQWLW\EHDQV\QFKURQL]DWLRQ

5XOHVIRUHME&UHDWH
ƒ <RXPXVWLPSOHPHQWWKHHME&UHDWHPHWKRG!WRPDWFKHDFK
FUHDWHPHWKRG!LQWKHKRPHLQWHUIDFH
ƒ 7KHPHWKRGQDPHPXVWEHJLQZLWKWKHSUHIL[´HME&UHDWHµ
%\WKHHQGRIHME&UHDWH 
ƒ 7KHPHWKRGPXVWEHGHFODUHGSXEOLFDQGPXVWQRWEHGHFODUHGVWDWLF
RUILQDO \RX0867KDYHDYDOLG
ƒ 7KHGHFODUHGUHWXUQW\SHPXVWEHWKHHQWLW\EHDQ·VSULPDU\NH\W\SH SULPDU\NH\DVVLJQHGWRWKH
HYHQWKRXJK\RXZLOOUHWXUQQXOOIURPWKHPHWKRG &03ILHOGWKDW\RX·YHWKH
ƒ 7KHPHWKRGDUJXPHQWVPXVWEHWKHVDPHDVWKHDUJXPHQWVRIWKH WROGWKH&RQWDLQHULV\RXU
PDWFKLQJFUHDWHPHWKRG!
SULPDU\NH\ILHOG
ƒ <RXPD\GHFODUHDWKURZVFODXVHZLWK&UHDWH([FHSWLRQRUDQ\
DUELWUDU\DSSOLFDWLRQ FKHFNHG H[FHSWLRQWKDW\RXOLNHDVORQJDVLW
ZDVDOVRGHFODUHGLQWKHKRPHLQWHUIDFHEXW\RXPXVW127GHFODUHD
,I\RXXVHDFRPSRXQGNH\
5HPRWH([FHSWLRQ WKHQ$//WKHILHOGVWKDW
PDNHXSWKDWNH\PXVWKDYH
5XOHVIRU3ULPDU\.H\V YDOLGYDOXHV
ƒ $SULPDU\NH\FODVVPXVWEH6HULDOL]DEOHDQGSXEOLF
,IDWWKHHQGRIHME&UHDWH 
ƒ <RXFDQXVHDVLQJOHSHUVLVWHQWILHOGIURP\RXUEHDQFODVVDV\RXU
SULPDU\NH\E\LGHQWLI\LQJERWKWKHILHOGQDPHDQGWKHFODVVW\SHLQ \RXUSULPDU\NH\LVQXOO
WKH'' WKH&RQWDLQHUZRQ·WGRWKH
ƒ ,I\RXQHHGWZRRUPRUHSHUVLVWHQWILHOGVWRXQLTXHO\LGHQWLI\\RXU FUHDWH
HQWLW\PDNHDFXVWRPFRPSRXQGSULPDU\NH\FODVV
ƒ $FRPSRXQGNH\FODVVPXVWEHPDGHXSRIILHOGVWKDWDUHGHILQHGDV
SHUVLVWHQWILHOGVLQWKHEHDQFODVV7KHILHOGVLQWKHEHDQFODVVPXVW
KDYHSXEOLFDFFHVVRUPHWKRGV

Q: (OWCOME)CANTHAVETHEDATABASECOMEUPWITHTHEPRIMARY
KEY4HATSHOWWEUSUALLYDOIT!REYOUTELLINGMETHE#ONTAINERCANT
DOTHAT

A: 9ES THATSWHATWERETELLINGYOU4HECONTRACTYOUHAVEWITHTHE
#ONTAINERSAYSTHATBYTHETIMEEJB#REATE ISDONE YOUVEDONEWHATEVER
YOUHADTODOTOMAKEAVALIDPRIMARYKEY9OUMIGHTHAVEASERVERTHAT
LETSYOUSAY h,ETTHEDATABASECOMEUPWITHTHEKEYWHENYOUDOTHE
INSERTv BUTTHERESNOGUARANTEEINTHESPEC ANDYOUCANTASSUMETHAT
ALL%*"VENDORSSUPPORTTHIS-AYBESOMEDAYINTHEFUTURE THEREWILLBE
ADEPLOYMENT INDEPENDENTWAYTOSAY h5SEAUTO GENERATEDKEYvINTHEDE
PLOYMENTDESCRIPTOR"UTTODAYISNOTTHATDAY!ND%*"ISNOTTHATSPEC

\RXDUHKHUH 
HQWLW\EHDQFUHDWLRQ

,PSOHPHQW\RXUHME3RVW&UHDWH PHWKRGV

:KDWWRSXWLQHME3RVW&UHDWH
)LQLVK\RXULQLWLDOL]DWLRQFRGHKHUH1RZ\RXFDQVHHZK\HQWLW\EHDQVQHHG
DQHME3RVW&UHDWH ³EHFDXVHHME&UHDWH LVWRRHDUO\IRUVRPHWKLQJV7KH
WZRPRVWLPSRUWDQWUHDVRQVIRUHME3RVW&UHDWH DUHWKDW\RXFDQXVHLWWRJHW
DUHIHUHQFHWR\RXURZQ(-%REMHFWDQG\RXPXVWXVHLWIRUDFFHVVLQJ\RXU
FRQWDLQHUPDQDJHGUHODWLRQVKLSV &05  :H·OOORRNDW&05LQWKHQH[WFKDSWHU
7KLQNRIHME3RVW&UHDWH DVWKHRWKHUKDOIRI\RXUHME&UHDWH ZLWKVRPH5HDOO\
,PSRUWDQW7KLQJVKDSSHQLQJLQWKHPLGGOH,W·V\RXUVHFRQG DQGODVW FKDQFHWR
ILQLVK\RXULQLWLDOL]DWLRQLI\RXQHHGWRGRWKLQJVDVSDUWRIFUHDWLQJWKHQHZHQWLW\
WKDWGHSHQGRQKDYLQJDFFHVVWR\RXU(-%REMHFW RUVRPHWKLQJHOVHWKDWFDQ
KDSSHQRQO\LQHME3RVW&UHDWH DQGQRWLQHME&UHDWH 
:H·OOUHYLVLWHME3RVW&UHDWH LQWKHQH[WFKDSWHUZKHQZHORRNDW&05

5XOHVIRUHME3RVW&UHDWH
ƒ <RXPXVWLPSOHPHQWWKHHME3RVW&UHDWHPHWKRG!WRPDWFKHDFKFUHDWHPHWKRG!
LQWKHKRPHLQWHUIDFH
ƒ 7KHPHWKRGQDPHPXVWEHJLQZLWKWKHSUHIL[´HME3RVW&UHDWHµ
ƒ 7KHPHWKRGPXVWEHGHFODUHGSXEOLFDQGPXVWQRWEHGHFODUHGVWDWLFRUILQDO
ƒ 7KHGHFODUHGUHWXUQW\SHPXVWEHYRLG
ƒ 7KHPHWKRGDUJXPHQWVPXVWEHWKHVDPHDVWKHPDWFKLQJHME&UHDWHPHWKRG!
ƒ <RXPD\GHFODUHDWKURZVFODXVHZLWK&UHDWH([FHSWLRQRUDQ\DUELWUDU\DSSOLFD
WLRQ FKHFNHG H[FHSWLRQWKDW\RXOLNHDVORQJDVLWZDVDOVRGHFODUHGLQWKHKRPH
LQWHUIDFHEXW\RXPXVW127GHFODUHD5HPRWH([FHSWLRQ

 &KDSWHU
HQWLW\EHDQV\QFKURQL]DWLRQ

$OOWKUHHKDYHWKHVDPHDUJV
EXWGLIIHUHQWUHWXUQW\SHV

+RPHLQWHUIDFH
FUHDWHPHWKRG!

SXEOLF&XVWRPHUFUHDWH 6WULQJODVW6WULQJ¿UVW WKURZV


      &UHDWH([FHSWLRQ5HPRWH([FHSWLRQ 

differences
%HDQFODVV notice the name
HME&UHDWHPHWKRG!

SXEOLF6WULQJHME&UHDWH 6WULQJODVW6WULQJ¿UVW ^`

another differe
%HDQFODVV nce
HME3RVW&UHDWHPHWKRG!
SXEOLFYRLGHME3RVW&UHDWH 6WULQJODVW6WULQJ¿UVW ^`

the same
clas s d oe sn Õt have to declarend you
the bean it throws them.
(A
bean.
exceptions, unlessa RemoteException from theion.
NEVER throw iner throws a RemoteExcept
Only the Conta

YiX`e
gfn\i
7KLQNDERXWWKHWKUHHPHWKRGVDERYHDQGKRZWKH\¶UHUHODWHGWRRQHDQRWKHU7KLQNDERXW
ZKDWWKH\¶UHHDFKUHVSRQVLEOHIRU1RZDQVZHUWKHVHWZRTXHVWLRQV

:K\DUHWKHUHWXUQW\SHVGHFODUHGOLNHWKLV",QRWKHUZRUGVH[SODLQZK\HDFKRIWKHWKUHH
GLIIHUHQWUHWXUQW\SHVLVZKDWLWLV

:K\GRERWKHME&UHDWHPHWKRG!DQGHME3RVW&UHDWHPHWKRG!KDYHWKHVDPHDUJXPHQWV"

\RXDUHKHUH 
HQWLW\EHDQFUHDWLRQ

,·PKDYLQJDKDUG
WLPHFRPLQJXSZLWKD
UHDVRQZK\DEHDQZRXOG
QHHGDUHIHUHQFHWRLWV
RZQ(-%REMHFW

,PDJLQH\RXLQSXWDQHZ&XVWRPHU
LQWKHGDWDEDVH0D\EH\RXU
EXVLQHVVORJLFVD\V´:KHQ\RX
PDNHDQHZ&XVWRPHUWHOOWKHPDUNHWLQJ
GHSDUWPHQWE\SDVVLQJDUHIHUHQFHWRWKH
QHZ&XVWRPHUHQWLW\EHDQRXWWRWKH
&XVWRPHU5HJLVWUDWLRQEHDQ´

,VWLOOGRQ·WVHHZK\
,QHHGWKH(-%REMHFW
FDQ·W,MXVWSDVV´WKLVµDV
WKHDUJXPHQWWRWKHRWKHU 7KLQNDERXWLWFROOHJHER\
)LUVWRIILW·VDJDLQVW%HDQ/DZ7KH
EHDQ"
(-%VSHFIRUELGVSDVVLQJ¶WKLV·DV
DQDUJXPHQWIURPEHDQFRGH12%2'<
LVVXSSRVHGWRJHWDGLUHFWUHIHUHQFHWR
WKHEHDQH[FHSWWKHFRQWDLQHU*HH]LI
VRPHERG\','JHWDUHIHUHQFHWRWKH
EHDQWKH\FRXOGMXVWFDOOPHWKRGVRQ
LWDQGVNLSDOOP\VHUYLFHV

 &KDSWHU
HQWLW\EHDQV\QFKURQL]DWLRQ

2K,JHWLWLI,ZDQW ,I\RXZDQWWKHEHDQ\RX
WRSDVVDUHIHUHQFHWRWKH JRWWDJRWKURXJKPH$QG\RX
EHDQ,SDVVDUHIHUHQFHWRWKH GR127ZDQWWRPHVVZLWKPH,·YH
EHDQ·VERG\JXDUGLQVWHDG/LNH ZDWFKHGWKH0DWUL[OLNHWLPHV
SDVVLQJWKH(-%REMHFW·V DQG,·YHEHHQWDNLQJ3LODWHVIRU
EXVLQHVVFDUGLQVWHDGRIWKH OLNH\HDUV
EHDQ·V5LJKW"

,W·VOLNHWKLVLI,·PDEHDQ,
VD\WRDPHWKRGRIVRPHRQH
HOVH´+HUH·VDFDUG\RXFDQXVH
WRUHDFKPH%XWGRQ·WFDOOPHFDOO
P\ERG\JXDUGDQGKHUH·VKLV
FRQWDFWLQIRUPDWLRQµ

EHDQ
,QVWHDGRI
GR6WXII WKLV 
(-%
REMHFW

8VH
GR6WXII P\&RQWH[WJHW(-%2EMHFW 

\RXDUHKHUH 
HQWLW\EHDQFUHDWLRQ

*MIV\PQVO[aW]KIVLWL]ZQVOM V\Q\aKZMI\QWV"

WLPHOLQH

HME&UHDWH HME3RVW&UHDWH

8VH\RXU(QWLW\&RQWH[WWR 8VH\RXU(QWLW\&RQWH[WWR

‰ JHWDUHIHUHQFHWR\RXUKRPH ‰ JHWDUHIHUHQFHWR\RXUKRPH
‰ JHWDUHIHUHQFHWR\RXU(-%REMHFW ‰ JHWDUHIHUHQFHWR\RXU(-%REMHFW
‰ JHW\RXUSULPDU\NH\ ‰ JHW\RXUSULPDU\NH\
‰ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW ‰ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW
‰ IRUFHDWUDQVDFWLRQWRUROOEDFN &07 ‰ IRUFHDWUDQVDFWLRQWRUROOEDFN &07
EHDQV EHDQV
‰ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\ ‰ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\
EHHQVHWWRUROOEDFN &07EHDQV EHHQVHWWRUROOEDFN &07EHDQV
‰ JHWDWUDQVDFWLRQUHIHUHQFHDQGFDOO ‰ JHWDWUDQVDFWLRQUHIHUHQFHDQGFDOO
PHWKRGVRQLW %07EHDQVRQO\VR PHWKRGVRQLW %07EHDQVRQO\VR
HQWLWLHVFDQ·WXVHWKLV HQWLWLHVFDQ·WXVHWKLV
$FFHVV $FFHVV
‰ \RXUVSHFLDO-1',HQYLURQPHQW ‰ \RXUVSHFLDO-1',HQYLURQPHQW
‰ DQRWKHUEHDQ·VPHWKRGV ‰ DQRWKHUEHDQ·VPHWKRGV
‰ DUHVRXUFHPDQDJHU OLNHDGDWDEDVH ‰ DUHVRXUFHPDQDJHU OLNHDGDWDEDVH

itÕs too early


object or primto get a reference Create(),
ar to your e time yo uÕre in ejbPoristmary key
still waiting for key, because the contaiEJB
y By t h
knows your p
Once you retur you to Þnish your ejbCre ner is the containere (or found) the EJB
will look in yourn from ejbCreate(), the coate(). and has madthis key.
youÕve made as bean and see what state ntainer object for
did based on t a result of the initializatiochanges
he client-supplie n
can the containe
r Þ d args. Only Tyou
key is (by lookin gu re out what yo HEN
g in yo ur prim ur prim ar y
it needs that to
make an EJBaroby key Þeld!), and
ject.

 &KDSWHU
HQWLW\EHDQV\QFKURQL]DWLRQ

&03(QWLW\ILQGHU
6FHQDULRFOLHQWZDQWVWRJHWDUHIHUHQFHWRDQH[LVWLQJHQWLW\EHDQ

FRQWH[W

EHDQ

FOLHQW
 EHDQ

.H\ ´µ
+RPH \3ULPDU\ FRQWH[W
ÀQ REMHFW HME)LQG%
G%
ULP 
\3
DU  %HDQ3RRO
\. VWXE ´µ
H\
´ ULPDU\.H\
\3

ÀQG% '%

 &OLHQWFDOOVILQG%\3ULPDU\.H\ ´µ RQWKHKRPHUHIHUHQFH


 7KHILQGHUPHWKRGLVSDVVHGWRWKHKRPHREMHFW
 $EHDQLVVHOHFWHGIURPWKHSRROWRUXQWKHHME)LQG%\3ULPDU\.H\ ´µ PHWKRG
 7KHEHDQGRHVDVHOHFWRQWKHGDWDEDVHWRYHULI\WKDWDQHQWLW\ZLWKSULPDU\NH\H[LVWV

FRQWH[W


(-%
REMHFW EHDQ

VWXE


  EHDQ
UHWXU µ
QVWXE +RPH UHWXUQ´ FRQWH[W
REMHFW

%HDQ3RRO

'%

 7KHEHDQUHWXUQVWKHSULPDU\NH\  WRWKHKRPHZKLFKPHDQVWKHHQWLW\H[LVWVLQWKHGDWDEDVH


 7KH&RQWDLQHUPDNHV RUILQGV DQ(-%REMHFWIRU
 7KH&RQWDLQHUUHWXUQVWKH(-%REMHFWVWXEIRU
1RWHLIWKHEHDQKDGQRWIRXQGDPDWFKLQJHQWLW\IRUSULPDU\NH\WKHFOLHQWZRXOGJHWDQ
2EMHFW1RW)RXQG([FHSWLRQ VXEFODVVRI)LQGHU([FHSWLRQ
\RXDUHKHUH 
HQWLW\EHDQ¿QGHUV

)LQGLQJDQH[LVWLQJHQWLW\

&03HQWLW\EHDQ

FOLHQW
+RPH (-%
REMHFW REMHFW '%
EHDQ

The bean neverr lea ves the


ods!
ÀQGPHWKRG! DUJV pool for Þnde thme

HME)LQGPHWKRG! DUJV

GDWDEDVHVHDUFK

QHZ

EXVLQHVVPHWKRG
EXVLQHVVPHWKRG

 &KDSWHU
HQWLW\EHDQV\QFKURQL]DWLRQ

&03(QWLW\EHDQILQGHUV

 +H\EHDQ  8PDUHQ·W\RXIRUJHWWLQJWKDW,·PD
UXQWKLVHME)LQG
&03EHDQ",GRQ·WKDYHWKHVHPHWKRGV
PHWKRGDQGKHUHLV LQP\EHDQFODVV$OWKRXJKFRPHWRWKLQN
WKHFOLHQWDUJ´µ RILW,·PDFRQFUHWHLPSOHPHQWDWLRQWKDW
WKH&RQWDLQHU³,PHDQ<28³PDGHIURP
P\DEVWUDFWFODVVVRPD\EH,'2KDYHWKH
PHWKRGVDIWHUDOOEXW,MXVWGLGQ·W
UHDOL]HLWDQG

5HOD[$QG\RX·UHULJKW,·P
 WKHRQHWKDWLPSOHPHQWHGWKH&03
ÀQGHUPHWKRGVVRZH·OOVKRZLWWKLVZD\
1RZWKDW,KDYH
HYHQWKRXJKLWLV\RXWKDWFRQFHSWXDOO\  YHULÀHGWKDWWKLVHQWLW\
GRHVWKHZRUN,JXHVVLQWKHHQG
H[LVWV,FDQPDNHWKH
LWGRHVQ·WPDWWHUDVORQJDVLW
(-%REMHFWLILWGRHVQ·W
KDSSHQV
DOUHDG\H[LVW

VHDUFKIRUSN
'%

/DVW )LUVW 3.H\ (-%


3RO\ 0RUSKLVP  REMHFW

'HZH\ &KHDWHP 

7KDQNV,UHDOO\
 QHHGWRFKDQJH
3RO\·VODVWQDPHWR
 2.FOLHQWKHUH·V (VWKHU 
\RXU(-%REMHFW
UHIHUHQFHIRU ,JXHVV,MXVW
<RXFDQXVHLWWRFDOO JHWWRVWD\LQWKH
EXVLQHVVPHWKRGVRQ3RO\ SRRODQGIRUJHW
0RUSKLVP WKHZKROHWKLQJ

\RXDUHKHUH 
HQWLW\EHDQ¿QGHUV

<28GRQ·WLPSOHPHQWWKH)LQGHUPHWKRGV

'RQ·WSXWDQ\WKLQJLQ
LQWHUIDFH!!
&XVWRPHU+RPH \RXUEHDQFODVVDERXWWKH
FUHDWH 6WULQJODVW6WULQJILUVW
<RXLPSOHPHQW ILQGHUV7KH&RQWDLQHU
FUHDWHDQGKRPHEXVLQHVVPHWKRGV XSGDWH$OO 6WULQJFPG
LPSOHPHQWV\RXUILQGHU
&RQWDLQHULPSOHPHQWV
ILQG%\3ULPDU\.H\ 6WULQJNH\
PHWKRGVXVLQJWKHKRPH
ILQG%\&LW\ 6WULQJFLW\
ILQGHUPHWKRGV
LQWHUIDFHDQG\RXU
GHSOR\PHQWGHVFULSWRUWR
ILJXUHRXWZKDWWRGR
<RXUEHDQFODVVPXVW
*USTDONTWRITE@EM&ORA#-0BEAN DONTPUT
ANYTHINGINYOURCLASSABOUTTHElNDERMETHODS QRWHYHQ0(17,21WKH
9OUWILLIMPLEMENTYOURCREATEANDHOME
BUSINESSMETHODS BUTASFARASYOUROWNBEAN
ILQGHUPHWKRGV
CLASSˆTHEONETHATYOUWRITEˆGOES THEREARENO
lNDERMETHODS
&XVWRPHU%HDQ
9OUDODECLARETHEMINTHEHOMEINTERFACE
OFCOURSE INCLUDINGTHEMANDATORY HME&UHDWH 6WULQJODVW6WULQJILUVW
lND"Y0RIMARY+EY BUTYOUDONTWRITEANY HME3RVW&UHDWH 6WULQJODVW6WULQJILUVW
OTHER*AVACODERELATEDTOYOURlNDERS HME+RPH8SGDWH$OO 6WULQJFPG
4HE#ONTAINERLOOKSINYOURHOMEINTERFACEAND HME)LQG%\3ULPDU\.H\ 6WULQJNH\
YOURDEPLOYMENTDESCRIPTORTOlGUREOUTWHATTO HME)LQG%\&LW\ 6WULQJFLW\
DOWITHTHElNDERMETHODS ANDTHE#ONTAINER
WRITESALLTHECODEFORTHEM9OULLNEVERSEEIT
VHW(QWLW\&RQWH[W (QWLW\&RQWH[WHF
HME$FWLYDWH
HME3DVVLYDWH
HME5HPRYH
XQVHW(QWLW\&RQWH[W
HME/RDG
HME6WRUH
EXVLQHVVPHWKRGVIURPWKH
FRPSRQHQWLQWHUIDFH

 &KDSWHU
HQWLW\EHDQV\QFKURQL]DWLRQ

+PPPP,QRWLFHGWKDWWKHEHDQ
GLGQ·WFRPHRXWRIWKHSRRO%XWZKDW·V
5($//<ZHLUGLVWKDWQRZWKHUH·VDQ(-%REMHFW
IRUEXWWKHUH·VQRHQWLW\EHDQSOD\LQJWKH
SDUWRI7KHEHDQQHYHUJRWORDGHGXSZLWK
WKHHQWLW\GDWDIURPWKHGDWDEDVHVRZKDW
KDSSHQVLIWKHFOLHQWFDOOVDEXVLQHVVPHWKRG
OLNHJHW$GGUHVV """
:K\VKRXOG,ZDVWHDEHDQ·V
WLPHE\ORDGLQJLWXSZLWKWKH
GDWDZKHQWKHFOLHQWPLJKWQRW
HYHUFDOODEXVLQHVVPHWKRGRQ
WKDW(-%REMHFWUHIHUHQFH"

<RXMXVWDOZD\VKDYHWR
,KHDUZKDW\RX·UHVD\LQJEXW NQRZWKHWUXWK2.\RX
FRPHRQDUHQ·WWKHFKDQFHV JRWPHRQWKLVRQH<HVLW,6OLNHO\
SUHWW\JRRGWKDWWKHFOLHQW,6 WKHFOLHQWZLOOFDOODEXVLQHVVPHWKRGRQWKH
JRQQDFDOODEXVLQHVVPHWKRG HQWLW\VRLWPLJKWVHHPPRUHHIÀFLHQWWRKDYH
RQWKHEHDQ"7KH\ZHQWWRWKH WKHEHDQUHDG\%XWHYHQLI,','ORDGWKH
WURXEOHRIÀQGLQJLW GDWDLQWRWKHEHDQGXULQJWKHÀQGHUPHWKRG
,·GVWLOOKDYHWRUHORDGLWDQ\ZD\:K\"
%HFDXVHE\WKHWLPHWKHFOLHQWJHWV
DURXQGWRFDOOLQJWKHEXVLQHVVPHWKRG
WKHEHDQ·VVWDWHPLJKWEHVWDOH

\RXDUHKHUH 
HQWLW\EHDQ¿QGHUV

,·PQRWIROORZLQJ
ZKDWGR\RXPHDQE\
VWDOH"+RZFDQWKHEHDQEHFRPH
VWDOHLIQRERG\HOVHFDQJHW
WRWKHEHDQ·VGDWD"+RZ
FRXOGDQ\ERG\FKDQJHWKH
7KLQNDERXWLW7KHHQWLW\3RO\0RUSKLVP
HQWLW\"
OLYHVLQWKHGDWDEDVH DURZLQDWDEOH 6XUH
ZHFDQKDQGRXWUHIHUHQFHVWRWKH(-%REMHFW
IRUWKLVHQWLW\%87WKHHQWLW\%($1LVQ·WWKH
RQO\ZD\WRJHWWRWKHGDWDEDVH6RZKLOHWKHFOLHQWLV
ZDLWLQJWRFDOODPHWKRGIRUDOOZHNQRZVRPHRQHHOVH
FRXOGKDYHXSGDWHG3RO\·VUHFRUGLQWKHGDWDEDVH
,IWKDWZHUHWRKDSSHQWKHQZKHQWKHFOLHQWFDOOV
DPHWKRGRQWKH3RO\HQWLW\EHDQWKHEHDQ
UHWXUQVROGZURQJLQIRUPDWLRQ

2NQRZ,JHWLWLIWKHEHDQZHUH
WREHORDGHGXSZLWKGDWDGXULQJWKH
ÀQGHUPHWKRGWKHQE\WKHWLPHWKH
FOLHQWFDOOVDEXVLQHVVPHWKRGRQLWWKH <HV,·PJRQQDKDYHWRORDG
XQGHUO\LQJHQWLW\GDWDLQWKHGDWDEDVH WKHGDWDLQDJDLQDVVRRQDVWKH
PLJKWKDYHFKDQJHG FOLHQWFDOOVDEXVLQHVVPHWKRGMXVWWR
PDNHVXUHWKDWWKHEHDQLVUHIUHVKHG
ZLWKWKHPRVWFXUUHQWGDWDVRWKHUH·V
QRSRLQWLQORDGLQJLWLQGXULQJWKH
ÀQGHU,WZRXOGMXVWEHDZDVWH
RIUHVRXUFHV

 &KDSWHU
HQWLW\EHDQV\QFKURQL]DWLRQ

&03+RPH%XVLQHVV0HWKRGV
6FHQDULRFOLHQWZDQWVWRFDOODEXVLQHVVPHWKRGLQWKHKRPH

FRQWH[W

EHDQ

FOLHQW
 EHDQ
+RPH WH$OO
HME8SGD
FRQWH[W
REMHFW
XS 
GD 
WH VWXE
%HDQ3RRO
$O
O H$OO
XSGDW
'%

 &OLHQWFDOOVXSGDWH$OO RQKRPHUHIHUHQFH
 7KHXSGDWH$OO PHWKRGLVSDVVHGWRWKHKRPHREMHFW
 $EHDQLVVHOHFWHGIURPWKHSRROWRUXQWKHHME8SGDWH$OO PHWKRG

FRQWH[W

EHDQ

FOLHQW 
 EHDQ
DWD 
UHWXUQ +RPH UHWXUQG FRQWH[W
GDWD
REMHFW

%HDQ3RRO

'%

 :LWKRXWOHDYLQJWKHSRROWKHEHDQUXQVWKHKRPHPHWKRGSUREDEO\FDOOLQJRQD&RQWDLQHU
LPSOHPHQWHGVHOHFWPHWKRG!WRDFFHVVWKHGDWDEDVH

 7KHEHDQUHWXUQVIURPWKHPHWKRG SRVVLEO\UHWXUQLQJGDWD 
 7KH&RQWDLQHUSDVVHVWKHUHWXUQYDOXHEDFNWRWKHFOLHQW

\RXDUHKHUH 
KRPHEXVLQHVVPHWKRGV

&OLHQWLQYRNHVD+RPH%XVLQHVV0HWKRG
&03HQWLW\EHDQ

FOLHQW
+RPH
REMHFW '%
EHDQ

The bean nevereslea ves the pool


bu sin s me thods
KRPHEXVLQHVVPHWKRG for home

KRPHEXVLQHVVPHWKRG
GDWDEDVHDFFHVVYLDD
&RQWDLQHULPSOHPHQWHG
No EJB obje
ct is involved VHOHFWPHWKRG
!

:KDWWRSXWLQDKRPHEXVLQHVVPHWKRG
$V\RXZULWH\RXUFRGHUHPHPEHUWKDWDQHQWLW\EHDQVWD\VLQWKHSRROZKHQLWUXQVD
KRPHEXVLQHVVPHWKRG3XWFRGHLQ\RXUKRPHEXVLQHVVPHWKRGVWKDWDSSO\WRWKHXQGHUO\LQJ
GDWDEDVH³IRUDJURXSRIHQWLWLHVUDWKHUWKDQRQHVSHFLILFHQWLW\³DQGWKDWGRQ·WUHWXUQWKHEHDQ·V
FRPSRQHQWLQWHUIDFH WKHZD\ILQGHUVDQGFUHDWHPHWKRGVPXVW 
SXEOLF&ROOHFWLRQHME+RPH'LVSOD\$OO ^
GRDVHOHFWRQWKHGDWDEDVHXVLQJDFRQWDLQHULPSOHPHQWHG
VHOHFWPHWKRG QH[WFKDSWHU WKHQUHWXUQDQ$UUD\/LVWRI6WULQJV
`

5XOHVIRUKRPHEXVLQHVVPHWKRGV
ƒ <RXPXVWKDYHDQHME+RPHPHWKRG!PHWKRGIRUHYHU\KRPHPHWKRG!LQWKHKRPHLQWHUIDFH
ƒ 7KHQDPHPXVWEHJLQZLWKWKHSUHIL[´HME+RPHµIROORZHGE\WKHQDPHRIWKHKRPHPHWKRG!EXW
ZLWKWKHILUVWOHWWHURIWKHPHWKRGFDSLWDOL]HG)RUH[DPSOHXSGDWH$OO LQWKHKRPHLQWHUIDFHZLOOEH
HME+RPH8SGDWH$OO LQWKHEHDQFODVV
ƒ 7KHPHWKRGPXVWEHGHFODUHGSXEOLFDQG127VWDWLF
ƒ ,IWKHKRPHLQWHUIDFHLV5HPRWHWKHDUJXPHQWVDQGUHWXUQYDOXHVPXVWEHOHJDOW\SHVIRU50,,,23
ƒ <RXPD\GHFODUHDWKURZVFODXVHZLWK\RXURZQDSSOLFDWLRQ FKHFNHG H[FHSWLRQVDVORQJDVWKH
H[FHSWLRQVZHUHDOVRGHFODUHGLQWKHKRPHLQWHUIDFH
ƒ (YHQLI\RXUOLIHGHSHQGVRQLW\RXPXVW127GHFODUHD5HPRWH([FHSWLRQ

 &KDSWHU
HQWLW\EHDQV\QFKURQL]DWLRQ

*MIV\PQVO[aW]KIVLWQVPWUMJ][QVM[[UM\PWL[

8VH\RXU(QWLW\&RQWH[WWR

‰ JHWDUHIHUHQFHWR\RXUKRPH e the
canÕt do becaus
‰ JHWDUHIHUHQFHWR\RXU(-%REMHFW two things youING an entity! The
‰ JHW\RXUSULPDU\NH\ bean isnÕt BE pool acting on behalf
bean is in the entities of this type,
‰ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW of ALL the e particular entity. So
‰ IRUFHDWUDQVDFWLRQWRUROOEDFN &07 but not any onno EJB object and of
EHDQV the bean has imary key.
‰ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\ course, no pr
EHHQVHWWRUROOEDFN &07EHDQV
‰ JHWDWUDQVDFWLRQUHIHUHQFHDQGFDOO
PHWKRGVRQLW %07EHDQVRQO\VR
HQWLWLHVFDQ·WXVHWKLV

$FFHVV
‰ \RXUVSHFLDO-1',HQYLURQPHQW
‰ DQRWKHUEHDQ·VPHWKRGV
‰ DUHVRXUFHPDQDJHU OLNHDGDWDEDVH

\RXDUHKHUH 
HQWLW\EXVLQHVVPHWKRGV

6WDUWLQJDEXVLQHVVPHWKRG LQDWUDQVDFWLRQ
6FHQDULRFOLHQWZDQWVWRJHWWKHDGGUHVVRIDVSHFL¿F&03&XVWRPHUHQWLW\

JHW$GGUHVV FRQWH[W

 (-%
REMHFW
HVV
W$GGU VWXE  EHDQ
JH 
 +(/3 
FOLHQW
EHDQ
FRQWH[W
HME$FWLYDWH


'%
 &OLHQWFDOOVJHW$GGUHVV RQWKHVWXEIRUHQWLW\EHDQ
 7KHFDOOLVSDVVHGWRWKH(-%REMHFW
 7KH(-%REMHFWJHWVWKHFDOODQGSDQLFVEHFDXVHWKHUH,6QRHQWLW\EHDQIRU
 7KH&RQWDLQHUVHHVWKDWWKLVPHWKRGQHHGVDWUDQVDFWLRQVRWKH&RQWDLQHUVWDUWVRQH
WKHQSXOOVDEHDQIURPWKHSRRODQGFDOOVHME$FWLYDWH RQWKHEHDQ

EHDQ
FRQWH[W
HME/RDG
 
6(/(&7
 '%
7HOOGDWDEDVH
WRORFNURZ
 7KH&RQWDLQHUWHOOVWKHGDWDEDVHWRORFNHQWLW\LQWKHGDWDEDVH7KH
&RQWDLQHUWKHQGRHVD6(/(&7RQWKHHQWLW\·VGDWD
 7KH&RQWDLQHUSRSXODWHVWKHHQWLW\EHDQ·VSHUVLVWHQWILHOGVZLWKWKHUHDOHQWLW\GDWD
 7KH&RQWDLQHUFDOOVHME/RDG RQWKHEHDQWRWHOOWKHEHDQ´<RX·YHMXVWEHHQORDGHGµ

 &KDSWHU
HQWLW\EHDQV\QFKURQL]DWLRQ

&RPSOHWLQJDEXVLQHVVPHWKRG DQGDWUDQVDFWLRQ
6FHQDULREHDQFRPSOHWHVDEXVLQHVVPHWKRGWKDWHQGVDWUDQVDFWLRQ

UHWXUQ FRQWH[W
(-%
 REMHFW
 
XUQ
VWXE JHW$GGUHVV EHDQ
UHW 

 UHWXUQ
FOLHQW
EHDQ
FRQWH[W

'%
 7KHJHW$GGUHVV PHWKRGLVSDVVHGWRWKHEHDQ ILQDOO\
 7KHEHDQUHWXUQVIURPWKHPHWKRG
7KH(-%REMHFWVHQGVWKHUHWXUQEDFNWRWKHFOLHQW

EHDQ
FRQWH[W

HME6WRUH

  83'$7(
'%
7UDQVDFWLRQ(QGV
 7KH&RQWDLQHUFDOOVHME6WRUH WRWHOOWKHEHDQ´,·PDERXWWRWDNH\RXUSHUVLVWHQW XQORFNURZ
ILHOGVWDWHDQGXSGDWHWKHGDWDEDVHVREHVXUH\RXUVWDWHLVUHDG\µ
 7KHUHDOHQWLW\LVXSGDWHGLQWKHGDWDEDVH
 7KH&RQWDLQHUFRPPLWVWKHWUDQVDFWLRQDQGWHOOVWKHGDWDEDVHWRXQORFNWKHHQWLW\

\RXDUHKHUH 
EHLQJDQHQWLW\EHDQ

%HLQJ-RKQ(QWLW\%HDQ

,WDOOVWDUWVZKHQWKH
FOLHQWFDOOVDEXVLQHVV 6RWKH
PHWKRGRQDQ(-%REMHFW &RQWDLQHUSKRQHV
IRU-RKQ0DOFRP7KH(-% EDFNWRWKHSRRO
REMHFWIUHDNVRXWEHFDXVH DQGVD\V´:HQHHG
WKHUH·VDFDOOEXWQRHQWLW\ DEHDQRXWKHUH
EHDQWRUXQWKHPHWKRG WRVHUYLFHDFOLHQW
PHWKRGµ

 

,PLJKWQRWEH %XWDIWHUWKDW,VWLOOQHHG
FRPSOHWHO\UHDG\ZKHQ,FRPH WRDVN´:KRDP,VXSSRVHG
RXWRIWKHSRROVRWKH&RQWDLQHU WREH"µDQGWKDW·VZKHQ,JHWWKH
FDOOVP\HME$FWLYDWH PHWKRG,W·V ´%HLQJ-RKQ0DOFRPµVFULSWZLWKDOORIP\
DFWXDOO\DSUHWW\XVHOHVVPHWKRGVR FKDUDFWHU·VLPSRUWDQWGDWD7KH&RQWDLQHU
,DOPRVWQHYHUGRDQ\WKLQJWKHUH%XW, FDOOVP\HME/RDG PHWKRGWRWHOOPHWKDW
VXSSRVH,PLJKWUHDFTXLUHD6RFNHWRU
 ,KDYHHYHU\WKLQJ,QHHGWRSOD\WKH
VRPHWKLQJ,GRQ·WZDQWWRKDQJRQWR UROHRI-RKQ0DOFRP$IWHUWKDW,·P
ZKLOH¶EHWZHHQSURMHFWV·%XWLW·VKDUG
LQFKDUDFWHUDQGUHDG\IRUDFWLRQ
IRUPHWRLPDJLQHDQ\WKLQJ,ZRXOGGR
LQHME$FWLYDWH WKDW,ZRXOGQ·W
UDWKHUGRLQVRPHRWKHU
PHWKRG 

 &KDSWHU
HQWLW\EHDQV\QFKURQL]DWLRQ

6KRZWLPH7KHFOLHQW·VEXVLQHVV
PHWKRGFDOOLVÀQDOO\SDVVHGWRPH
+H\ZLOOVRPHERG\WHOOP\SV\FKR $IWHUP\VWXQQLQJSHUIRUPDQFHDV
ERG\JXDUGWRUHOD[LW·VQRWHDV\ -RKQ0DOFRPWKH&RQWDLQHU ZKR
EHLQJEULOOLDQW\RXNQRZ  WDNHVWKLVMREZD\WRRVHULRXVO\ 
FDOOVP\HME6WRUH PHWKRGWRVHHLI,·YH
FKDQJHGDQ\RI-RKQ·VLQWHUQDOVWDWHYDOXHV
:HOORI&2856(,KDYHWKLVFKDUDFWHU
 WKURXJKPXFKWUDJHG\VXIIHULQJDQG
EXVLQHVVORJLFKDVJURZQDVDQHQWLW\
2I&2856(KH·VDGLIIHUHQWSHUVRQ

6R,VD\´'RQ·WJHW\RXU
NQLFNHUVLQDWZLVWKHUH·VWKH 7KHQLW·VRYHUDQG
GDWDµ WKH\DOODFWOLNHLW·VOLWHUDOO\ ,·PEDFNWRWKHSRRO
WKHHQGRIWKHZRUOGRYHUKHUHLIWKH %XWÀUVWWKH&RQWDLQHUFDOOV
GDWDEDVHGRHVQ·WNQRZHYHU\OLWWOH P\HME3DVVLYDWH PHWKRGWRWHOOPH
WKLQJWKDWKDSSHQVWRP\ WKDW,·PGRQHEHLQJ-RKQ0DOFRP
FKDUDFWHU  DQGWKDWLW·VVDIHWRUHOHDVHDQ\
UHVRXUFHV,ZDVNHHSLQJRQKLV
EHKDOI,DOPRVWQHYHUXVHWKLV
PHWKRGEHFDXVHLW·VQRWDQ
HIÀFLHQWZD\WRPDQDJH
 WKLQJV

\RXDUHKHUH 
DFWLYDWLRQSDVVLYDWLRQ

$FWLYDWLRQSDVVLYDWLRQRID&03HQWLW\EHDQ

FOLHQW &RQWDLQHU

(-%
REMHFW '%
EHDQ

EXVLQHVVPHWKRG

HME$FWLYDWH

6(/(&7HQWLW\GDWD

SRSXODWHEHDQVWDWH

HME/RDG

EXVLQHVVPHWKRG

HME6WRUH

83'$7(HQWLW\GDWD

HME3DVVLYDWH

4HE#ONTAINERALWAYSCALLSEJB,OAD AFTEREJB!CTIVATE 
4HE#ONTAINERALWAYSCALLSEJB3TORE BEFOREEJB0ASSIVATE 
4HE#ONTAINERCANCALLEJB3TORE ANDEJB3TORE ATOTHERTIMES

 &KDSWHU
HQWLW\EHDQV\QFKURQL]DWLRQ

6KDUSHQ \RXU SHQFLO


,I\RX¶UHWDNLQJWKHH[DPWUXVWXVKHUH\RX5($//<QHHGWRVWRSULJKWQRZ
DQGGRWKLVH[HUFLVHEHIRUHWXUQLQJWKHSDJH7KLQNDERXWHYHU\WKLQJ\RX¶YH
OHDUQHGLQWKLVFKDSWHUDERXWWKHOLIHF\FOHRIDQHQWLW\EHDQHVSHFLDOO\KRZ
DQGZKHQLWFRPHVRXWRIWKHSRROWREHFRPHDQHQWLW\
7DNH\RXUEHVWJXHVVDERXWZKLFKDVSHFWVRIEHDQQHVVDUHDYDLODEOHGXULQJ
HDFKRIWKHIRXUFRQWDLQHUFDOOEDFNVIRUHME$FWLYDWH HME3DVVLYDWH 

8VH\RXU(QWLW\&RQWH[WWR

HME$FWLYDWH HME3DVVLYDWH HME/RDG HME6WRUH

T T T T JHWDUHIHUHQFHWR\RXUKRPH

T T T T JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW

T T T T IRUFHWKHWUDQVDFWLRQWRUROOEDFN

T T T T ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\EHHQVHWWRUROOEDFN

T T T T JHWDUHIHUHQFHWR\RXU(-%REMHFW

T T T T JHW\RXUSULPDU\NH\

$FFHVV

HME$FWLYDWH HME3DVVLYDWH HME/RDG HME6WRUH

T T T T PHWKRGVRIDQRWKHUEHDQ

T T T T \RXUVSHFLDO-1',FRQWH[W

T T T T DUHVRXUFHPDQDJHU OLNHDGDWDEDVH

\RXDUHKHUH 
DFWLYDWLRQSDVVLYDWLRQ

*MIV\PQVO[aW]KIVLWL]ZQVOIK\Q^I\QWVIVLTWILQVO

WLPHOLQH

HME$FWLYDWH HME/RDG

8VH\RXU(QWLW\&RQWH[WWR 8VH\RXU(QWLW\&RQWH[WWR

‰ JHWDUHIHUHQFHWR\RXUKRPH ‰ JHWDUHIHUHQFHWR\RXUKRPH
‰ JHWDUHIHUHQFHWR\RXU(-%REMHFW ‰ JHWDUHIHUHQFHWR\RXU(-%REMHFW
‰ JHW\RXUSULPDU\NH\ ‰ JHW\RXUSULPDU\NH\
‰ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW ‰ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW
‰ IRUFHDWUDQVDFWLRQWRUROOEDFN &07 ‰ IRUFHDWUDQVDFWLRQWRUROOEDFN &07
EHDQV EHDQV
‰ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\ ‰ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\
EHHQVHWWRUROOEDFN &07EHDQV EHHQVHWWRUROOEDFN &07EHDQV
‰ JHWDWUDQVDFWLRQUHIHUHQFHDQGFDOO ‰ JHWDWUDQVDFWLRQUHIHUHQFHDQGFDOO
PHWKRGVRQLW %07EHDQVRQO\VR PHWKRGVRQLW %07EHDQVRQO\VR
HQWLWLHVFDQ·WXVHWKLV HQWLWLHVFDQ·WXVHWKLV
$FFHVV $FFHVV
‰ \RXUVSHFLDO-1',HQYLURQPHQW ‰ \RXUVSHFLDO-1',HQYLURQPHQW
‰ DQRWKHUEHDQ·VPHWKRGV ‰ DQRWKHUEHDQ·VPHWKRGV
‰ DUHVRXUFHPDQDJHU OLNHDGDWDEDVH ‰ DUHVRXUFHPDQDJHU OLNHDGDWDEDVH

that
C on t ai ne r prefers (no, makebean Now we can d
T he if you access a
INSISTS) thatmanager, you must be in entity bean CAo Neverything that an
or a resource transaction contextÕ, so we can do in a bu do... the same things
a Ômeaningful is too early. But once you think of this as siness method. You can
ejbActivate() d(), youÕre IN a transaction business method. the beginning of the
get to ejbLoatold the Container NOT
(unless youÕve nsaction... which is for very
to use a tra ly).
special cases on

 &KDSWHU
HQWLW\EHDQV\QFKURQL]DWLRQ

*MIV\PQVO[aW]KIVLWL]ZQVOXI[[Q^I\QWVIVL[\WZQVO

WLPHOLQH

HME3DVVLYDWH HME6WRUH
8VH\RXU(QWLW\&RQWH[WWR 8VH\RXU(QWLW\&RQWH[WWR

‰ JHWDUHIHUHQFHWR\RXUKRPH ‰ JHWDUHIHUHQFHWR\RXUKRPH
‰ JHWDUHIHUHQFHWR\RXU(-%REMHFW ‰ JHWDUHIHUHQFHWR\RXU(-%REMHFW
‰ JHW\RXUSULPDU\NH\ ‰ JHW\RXUSULPDU\NH\
‰ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW ‰ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW
‰ IRUFHDWUDQVDFWLRQWRUROOEDFN &07 ‰ IRUFHDWUDQVDFWLRQWRUROOEDFN &07
EHDQV EHDQV
‰ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\ ‰ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\
EHHQVHWWRUROOEDFN &07EHDQV EHHQVHWWRUROOEDFN &07EHDQV
‰ JHWDWUDQVDFWLRQUHIHUHQFHDQGFDOO ‰ JHWDWUDQVDFWLRQUHIHUHQFHDQGFDOO
PHWKRGVRQLW %07EHDQVRQO\VR PHWKRGVRQLW %07EHDQVRQO\VR
HQWLWLHVFDQ·WXVHWKLV HQWLWLHVFDQ·WXVHWKLV
$FFHVV $FFHVV
‰ \RXUVSHFLDO-1',HQYLURQPHQW ‰ \RXUVSHFLDO-1',HQYLURQPHQW
‰ DQRWKHUEHDQ·VPHWKRGV ‰ DQRWKHUEHDQ·VPHWKRGV
‰ DUHVRXUFHPDQDJHU OLNHDGDWDEDVH ‰ DUHVRXUFHPDQDJHU OLNHDGDWDEDVH

By the time the Container starts to


passivate you, youÕre no longer associated FYI -- this page is EXAC Y
with a client or a transaction same as the previous one onTL
act
the
ivat
and loading. (except for the not ion
ainer
w it h ej bA ct ivate(), the Conttion made). The rules for whatÕs allo es we
Just as it was you in a Ômeaningful transac a activation are the same for pas wed during
no longer has her words, you canÕt be in t a and the rules for loading are idesivation,
contextÕ (in ot this point), so you canÕt ge . The the rules for storing. ntical to
transaction ata bean or a resource managerhis
reference to itÕs too dangerous to do t Õ. (see
Container says ningful transaction context
without a Ômeaions chapter)
the transact

\RXDUHKHUH 
FRPPLWRSWLRQV

&RPPLWRSWLRQVZKDW5($//<KDSSHQV
WRDEHDQDIWHUDWUDQVDFWLRQFRPPLWV"
(the previous pictures are just ONE way it could
work, but there are two other ways)

 &RPPLWRSWLRQ$ $
7KHEHDQVWD\VUHDG\DWWDFKHGWRWKH(-%REMHFWORDGHG %HDQVWD\VFRQQHFWHGDQGLQV\QF
ZLWKGDWDEXW127LQDWUDQVDFWLRQ7KH&RQWDLQHUNHHSVWKH :KHQWKHQH[WEXVLQHVVPHWKRGFDOO
HQWLW\ORFNHGVRWKDWQRERG\FDQFKDQJHWKHEHDQ·VVWDWH FRPHVLQWRWKHEHDQLWMXVWUXQV1R
:KHQDFOLHQWFDOOVDEXVLQHVVPHWKRGRQWKLVHQWLW\EHDQ·V HME$FWLYDWH QRHME/RDG 
(-%
(-%REMHFWWKH&RQWDLQHUGRHV127GRDQHME$FWLYDWH RU REMHFW
HME/RDG DQGDVVXPHVWKHEHDQ·VGDWDLVVWLOOLQV\QFZLWK 'DUNR 'RQQ\ 
WKHXQGHUO\LQJSHUVLVWHQWVWRUH

ys locked
EHDQ entity sta

 &RPPLWRSWLRQ% %
7KHEHDQVWD\VDWWDFKHGWRWKH(-%REMHFWORDGHGZLWK %HDQVWD\VFRQQHFWHGEXWQRWLQV\QF
GDWDEXWWKHEHDQ·VVWDWHLVPDUNHGDV¶LQYDOLG·,QRWKHU :KHQWKHQH[WEXVLQHVVPHWKRGFDOO
ZRUGVWKH&RQWDLQHUNQRZVWKDWWKHEHDQPLJKWEHFRPH FRPHVLQWRWKHEHDQHME/RDG LV
VWDOHEHWZHHQQRZDQGWKHQH[WWLPHDFOLHQWLQYRNHV FDOOHG %XWQRHME$FWLYDWH
(-%
DPHWKRGRQWKLVEHDQVRWKH&RQWDLQHUZLOOGRDQ REMHFW
HME/RDG ZKHQDQHZEXVLQHVVPHWKRGFRPHVLQIRUWKLV 'DUNR 'RQQ\ 
HQWLW\ %XWQRHME$FWLYDWH 

bean
EHDQ
lock is released, butthe pool
doesnÕt go back to

 &RPPLWRSWLRQ& &
7KHEHDQLVSDVVLYDWHGDQGSXWEDFNLQWRWKHSRRO7KH %HDQLVGLVFRQQHFWHGIURPWKH(-%
QH[WWLPHDFOLHQWFDOOVDEXVLQHVVPHWKRGRQWKLVHQWLW\ REMHFWDQGJRHVEDFNWRWKHSRRO:LWK
HYHU\WKLQJZH·YHVHHQLQWKLVFKDSWHUKDSSHQV³DEHDQ (-%
WKHQH[WEXVLQHVVPHWKRGFDOOWRWKLV
FRPHVRXWRIWKHSRROLVDFWLYDWHGWKHORDGHGDQG REMHFW EHDQWKH&RQWDLQHUSXOOVDEHDQRXWRI
ILQDOO\WKHEXVLQHVVPHWKRGLWSDVVHGWRWKHEHDQ WKHSRROWKHQFDOOVHME$FWLYDWH DQG
HME/RDG
'DUNR 'RQQ\ 
322/

goes
EHDQ lock is released, bean
back to the pool
 &KDSWHU
HQWLW\EHDQV\QFKURQL]DWLRQ

there are no
Dumb Questions
Q: (OWDOESTHESECOMMIT
CREATEDTHATTHENSTAYSSTUCKTO
THE%*"OBJECT!RENTPOOLSMORE
SUPPOSEDTOASSUMETHATTHISIS
INDEEDHOWITWORKSWHENACLIENT
OPTIONSAFFECTME$O)NEEDTO EFlCIENTBECAUSEYOUNEEDONLY WANTSANENTITYBEAN EITHERTHROUGH
KNOWWHICHONEMY#ONTAINERIS ENOUGHBEANSTOSERVICETHEACTUAL ACREATEORFIND THE#ONTAINERMAKES
CHOOSING$O)GETACHOICE IN PROGRESSMETHODS AN%*"OBJECTFORTHATENTITYhHERES
THE%*"OBJECTFOR HERESTHE
%*"OBJECTFORv ETC !NDASA
A: !CCORDINGTOTHESPECIFICATION
YOURVENDORISFREETOUSEANYOFTHE
A: .OCONTAINERWORTH
CONFIGURINGWOULDLEAVEYOUSTUCK
"EAN0ROVIDERASOPPOSEDTO SAY A
CONTAINERSERVERPROVIDER YOUARETO
THREEOPTIONS9OURCONTAINERMIGHTLET WITHACONSTANTLY ENDLESSLYGROWING PROGRAMASIFTHATSREALLYTHEWAYIT
YOUCHOOSEORTUNE THEOPTION BUT ACCUMULATIONOFOBJECTS%VENA WORKS
DONTALWAYSCOUNTONIT"UTDOYOU CONTAINERTHATDOESUSEOPTION! "UTINTERNALLY THE#ONTAINERMIGHT
NEEDTOKNOWWHICHISBEINGUSED CANUSESOMETHINGLIKEA,25,EAST BEDOINGSOMETHINGQUITEDIFFERENT
2ECENTLY5SED ALGORITHMTOSAYTO FROMTHECONCEPTUALARCHITECTURAL
9OUCANSEEWHERETHETRADE OFFSARE
ITSELF h(MMMNOBODYHASCALLEDA VIEW)MAGINETHAT9/5WEREA
OFCOURSEˆIFYOUKEEPTHEENTITY
METHODONENTITYFORALONGTIME CONTAINERDEVELOPERˆHOWWOULDYOU
LOCKEDINTHEDATABASE NOOTHER
SO)LLPASSIVATETHATBEANANDPUTHIM IMPLEMENTTHINGS
APPLICATIONSCANUSETHATENTITYS
BACKINTHEPOOLANDUNLOCKTHEROW v
DATA4HATSFINEIFTHE%*"ISTHEONLY /NEIDEAMIGHTBETOPUTTHEBURDEN
"UT WITHATLEASTTHEOPTIONOFUSING
APPLICATIONTHATNEEDSTHATDATABASE ONTHECLIENTS BYKEEPINGALLTHE
OPTION! ACONTAINERCANSAYTOITSELF
!NDTHATOPTIONCOMMITOPTION INFORMATIONINTHESTUBS&OREXAMPLE
h4HISENTITYISREALLYPOPULAR
! GIVESYOUTHEBESTPERFORMANCE WHENTHECLIENTGETSASTUBTOAN
)TSABIGPAINTOKEEPGOINGTOTHE
WHENABUSINESSMETHODCALLCOMES %*"OBJECT YOUCANMAKESURETHAT
DATABASEANDDOINGTHEWHOLELOAD
INFORTHEENTITY BECAUSETHERES THESTUBKNOWSTHEUNIQUE)$FOR
STOREACTIVATEPASSIVATECYCLEEACH
NOEJB!CTIVATE THEBEANNEVER THEENTITYIETHEPRIMARYKEY "UT
TIME SO)LLJUSTKEEPHIMLOADEDAND
WENTBACKTOTHEPOOL ANDMORE THE%*"OBJECTSMIGHTBEGENERIC
READY EVENBETWEENTRANSACTIONSv
SIGNIFICANTLYˆTHERESNOTRIPTOTHE INSUCHAWAYTHATWHENTHECLIENT
DATABASEORANEJB,OAD 
Q: /HMAN )JUSTTHOUGHTOF
CALLSAMETHODONASTUB THATSTUBIS
CONNECTEDNOTTOAN%*"OBJECTJUST
FORTHATENTITY BUTRATHERAONE %*"
Q: "UTCOULDNTOPTION!REALLY
SOMETHING2%!,,9BADWITHTHIS
ARCHITECTUREEVENIFYOUDO./4
KEEPACCUMULATINGENTITYBEANS
OBJECT FITS ALLTHATKNOWSHOWTOMAKE
SURETHEMETHODENDSUPATTHERIGHT
KILLME IF)WANTTOKEEPTHEENTITIES
WHATABOUTTHE%*"OBJECTS$ONT ENTITY4HATWAY WHENACLIENTISNT
UNLOCKEDINTHEDATABASEWHEN
THEYJUSTKEEPGROWINGANDGROWING USINGAN%*"OBJECT THAT%*"OBJECT
THEYRENOTBEINGUSEDBYTHEBEAN
SOTHATEACHTIMEACLIENTDOESAlND ISNTSITTINGAROUNDWASTINGSPACE
ANDGETSBACKASTUB AN%*"OBJECT 4HATSJUSTONEIDEA
A: &ORTHISREASON MOSTVENDORS ISCREATEDFORTHATENTITY ANDITJUST
WONTUSEOPTION!ASADEFAULT
THEYALLOWITONLYIFTHEDEPLOYEROR
STAYSAROUNDUNTILTHEENTITYITSELF
ISREMOVED!TANYGIVENTIME )WILL
Q: 4HATMIGHTBElNEFORSTUBS
BUTWHATIFTHECLIENTISLOCAL4HEN
ADMINCHOOSESITASSUMINGITSEVEN HAVEALLTHE%*"OBJECTSONTHEHEAP
THEYHAVEAREALREFERENCETOTHE
SUPPORTEDATALL  THATREPRESENTEVERYENTITYANYONE
%*"OBJECT SOTHAT%*"OBJECTWOULD
HASEVERACCESSEDUPTOTHATPOINT
(!6%TOBEENTITY SPECIlC
Q: )SEEANOTHER POSSIBLYEVEN
7/23%PROBLEMWITHOPTION!
DOESNTTHISMEANACONTINUALLY
A: !HNOWWECOMETOTHE
DIFFERENCEBETWEENTHEhCONCEPTUALv
A: 9ES THATSTRUE"UTWITH
LOCALCLIENTS NORMAL*AVAGARBAGE
GROWINGHEAPFULLOFOBJECTS,IKE VIEWOFTHEARCHITECTURE ANDTHE
COLLECTIONWORKS7HENTHEREARENO
EACHTIMESOMEONEUSESAPARTICULAR hACTUALvIMPLEMENTATION
CLIENTSWITHREFERENCESTOAPARTICULAR
ENTITY ANENTITYBEANINSTANCEIS
!CCORDINGTOTHESPEC YOURE %*"OBJECT THEINSTANCEWILLDIE

\RXDUHKHUH 
FRPPLWRSWLRQV

there are no
Dumb Questions
Q: 7HICHOFTHETHREECOMMIT
STILLDANGEROUS BECAUSEENTITIESARE
PERSISTENT3OTHEVENDORSTILLMUST
YOUREDOINGMORELOADSSTORESTHAN
YOUNEEDTO SOTHEKEYISTOHAVEYOUR
OPTIONSDOYOUTHINKISMOSTUSED IMPLEMENTSOMETHINGTHATSAVESTHE TRANSACTIONSBEASLONGASYOUNEED
STATEOFTHEENTITIESTOTHEDATABASE ANDNOLONGER
IFTHEYCHANGE3OTHEREWILLSTILLBE
A: 7ELLWECANTREALLYANSWER STORING IFNOTLOADING
THAT BUTIFWEWEREINABETTINGMOOD
OURMONEYWOULDBEONOPTION"!
4HEREARESTILLOTHERPOTENTIALPROB
LEMSWITHOPTION! THOUGH&OR
Q: /NEMORETHINGDOESNT
@SMARTOPTION" THATKNOWSWHENIT EXAMPLE YOUMIGHTHAVEASERVER THISMEANTHATEJB0ASSIVATEAND
MAKESSENSETOHANGONTOABEAN THATSUPPORTSCLUSTERING ANDTHE EJB!CTIVATEMIGHTNOTEVERBECALLED
ANDWHENITDOESNT"UTAVOIDINGTHE SERVERWILLHAVETOBECERTAINTHATALL ONABEAN IFTHECONTAINERUSES
EJB!CTIVATE WHICHISUSUALLYUSELESS INSTANCESOFTHATENTITYBEANINSYNC OPTION!OR"!NDDOESNTTHISMEAN
ANYWAY ISA'OOD4HING NOTJUSTWITHTHEDATABASE BUTWITH THAT)SHOULDNTRELYONEJB!CTIVATE
ONEANOTHER"UTTHATSANOTHERISSUE OREJB0ASSIVATEINMYDESIGN

Q: "UTISNTTHEHITTOTHE
9OULLLEARNMOREINTHEPATTERNSAND
PERFORMANCECHAPTER
A: 9%34HATS%8!#4,9WHATIT
DATABASEˆTHELOADˆAMUCHBIGGER
HITTHANJUSTONEMOREMETHODCALL MEANS)TSUSUALLYALOUSYSTRATEGY"UT
ONTHESTACK
Q: 3OISTHEREALPOINTOFALLTHIS
YOUCANIMAGINEHOWITMIGHTSOUND
LIKEAGOODIDEA
THEFACTTHATASLONGASYOUREINA
A: &IRSTOFALL ACTIVATIONIS
PROBABLYALITTLEMORETHANJUST
TRANSACTION YOUWONTHAVEALLTHESE
LOADSTOREACTIVATEPASSIVATECALLS
ONEMOREMETHODCALLONTHESTACK
8PUHPHPEHUKRZ,
BECAUSETHERESOVERHEADJUSTIN
MAINTAININGTHEORGANIZATIONOFTHE
POOLITSELF"UTYES YOURERIGHTABOUT
A: 9ES ABIGPARTOFTHEPOINT
ANYWAY
WROG\RXLWZRXOGEHPRUH
HIÀFLHQWWRJHWUHVRXUFHV
LQHME$FWLYDWHDQGUHOHDVHWKHP
THEDATABASEHITBEINGABIGGERDEAL LQHME3DVVLYDWH"&DQZHMXVW
"UTTHERESALLSORTSOFWAYSTHE SUHWHQGWKDW,QHYHUVDLG
#ONTAINERCANOPTIMIZE ANDWHATS
THEALTERNATIVE4HEONLYALTERNATIVE
OPTION! KEEPSTHEDATABASELOCKED
Q: 4HENSHOULDNTYOURGOALBE
WKDW"

TOHAVETHELONGESTTRANSACTIONS
WHICHISTYPICALLYNOTWHATYOUWANT

Q: "UTWHATIFMY%*"APP)3THE
A: 9OUARENTBEINGSERIOUS RIGHT
*USTFORFUN WELLPRETENDYOUARE AND
ONLYTHINGTHATUSESTHATDATABASE
SAY ././././4HINKABOUTYOUR
CONCURRENCY!GOODRULEOFTHUMB
A: )THINKWEMENTIONEDTHIS
EARLIERIFYOUKNOWABSOLUTELY
WITHAZILLIONEXCEPTIONS OFCOURSESO
ALLRULE OF THUMBDISCLAIMERSAPPLY IS
THATTRANSACTIONSSHOULDBENOLONGER
POSITIVELYNOQUESTIONTHATYOUR%*" THANABSOLUTELYNECESSARY4HELONGER
APPISTHEONLYTHINGTOUCHINGTHAT YOURBEANISINATRANSACTION THEMORE
DATABASE THENYES IFYOURVENDOR LIKELYITISTHATOTHERSAREWAITINGIN
SUPPORTSIT YOULLHAVEBETTER LINETOGETTOTHATENTITY/FCOURSE
PERFORMANCEWITHOPTION!/FCOURSE
CACHINGTHINGSINMEMORYIS ITSALSOPOSSIBLETOHAVETRANSACTIONS
WHICHARETOOSHORT WHICHMEANS

 &KDSWHU
HQWLW\EHDQV\QFKURQL]DWLRQ

([HUFLVH &03HQWLW\EHDQ&UHDWLRQ

)LOOLQWKHILYHPLVVLQJDUURZODEHOVIRUWKHREMHFWLQWHUDFWLRQ
GLDJUDP5HPHPEHUWKH\DUHQ·WQHFHVVDULO\PHWKRGFDOOV7KLV
LVH[DFWO\WKHVDPHGLDJUDPWKDW\RXVDZHDUOLHULQWKHFKDSWHU
([FHSW\RXUVZLOOORRNQLFHUEHFDXVH\RX·OOSUREDEO\PDNHLWDOO
IDQF\ZLWKH[RWLFV\PEROVDQGPD\EHFRORUFRGHGPDUNHUVDQG

FOLHQW
+RPH (-%
REMHFW REMHFW '%
EHDQ

FUHDWH

\RXDUHKHUH 
HQWLW\EHDQH[HUFLVH

(QWLW\%HDQ%XVLQHVV0HWKRG
([HUFLVH ZLWKDFWLYDWLRQ SDVVLYDWLRQ

7KLVWLPH\RX·UHJRQQDGUDZWKHDUURZV\RXUVHOI$VVXPHWKDWWKHEHDQLVLQWKHSRRODWWKH
WLPHWKHFOLHQWFDOOVDEXVLQHVVPHWKRG ZKLFKDOVRPHDQVWKHEHDQLVQRWLQDWUDQVDFWLRQ 
'UDZDUURZVDQGODEHOWKHPZLWKWKHDFWLRQVWKDWRFFXUWKURXJKWKHFRPSOHWLRQRIWKH
EXVLQHVVPHWKRG6KRZZKDWKDSSHQVZKHQWKHEHDQUHWXUQVWRWKHSRRO

:KHQZHGLGLWWKHUHZHUHHLJKWPRUHDUURZVEXW\RXPLJKWKDYHPRUHRUOHVVGHSHQGLQJ
RQKRZ\RXZDQWWRGRLW'R127IOLSEDFNWKURXJKWKHPRVWUHFHQWSDJHV<RXFDQGRWKLV

FOLHQW &RQWDLQHU

(-%
REMHFW '%
EHDQ

EXVLQHVVPHWKRG

 &KDSWHU
HQWLW\EHDQV\QFKURQL]DWLRQ

)LOOLQWKH3URGXFW%HDQ80/LVKER[ZLWKWKHPHWKRGVWKDW<28PXVWZULWH
LQ\RXUEHDQFODVVJLYHQWKHFRPSRQHQWDQGKRPHLQWHUIDFHV'RQ·WIRUJHW
WKHFRQWDLQHUFDOOEDFNVIURP(QWLW\%HDQDOWKRXJKZH·YHVKRZQ\RXRQO\
([HUFLVH WKUHHRIWKHVHYHQ7KHUHVW\RX·OOKDYHWRUHPHPEHUDQGILOOLQ

LQWHUIDFH!!
3URGXFW 3URGXFW%HDQ
JHW3URGXFW'HVFULSWLRQ
JHW4XDQWLW\
JHW3ULFH

LQWHUIDFH!!
(QWLW\%HDQ

HME$FWLYDWH

HME5HPRYH
XQVHW(QWLW\&RQWH[W

LQWHUIDFH!!
3URGXFW+RPH
FUHDWH 6WULQJ,'6WULQJSULFH6WULQJGHVFULSWLRQ
ILQG%\3ULPDU\.H\ 6WULQJNH\
JHW/RZ,QYHQWRU\ LQWOLPLW

\RXDUHKHUH 
FRIIHHFUDPPRFNH[DP

0RFN([DP
7HATSTRUEFORABEANPROVIDERWHENCREATINGANENTITYBEANUSINGCONTAINER
1 MANAGEDPERSISTENCE#HOOSEALLTHATAPPLY
R! #ONTAINER MANAGEDPERSISTENTlELDSMUSTBEDElNEDINTHEENTITYBEAN
CLASS
R" #ONTAINER MANAGEDRELATIONSHIPlELDSMUSTBEDElNEDINTHEENTITY
BEANCLASS
R# 7HENIMPLEMENTINGAONE TO MANYRELATIONSHIP THEJAVAUTIL,IST
INTERFACEMUSTNOTBEUSED
R$ !CCESSORMETHODSFORCONTAINER MANAGEDRELATIONSHIPlELDSMUSTBE
EXPOSEDINTHEBEANSREMOTECOMPONENTINTERFACE

7HICHOFTHEFOLLOWINGISALEGALACCESSORMETHODFORAPERSISTENTlELDINAN
2 ENTITYBEANWITHCONTAINER MANAGEDPERSISTENCE#HOOSEALLTHATAPPLY
R! SXEOLFJHW&XVWRPHU1XP 
R" SXEOLFYRLGJHW&XVWRPHU1XP 
R# DEVWUDFWYRLGJHW&XVWRPHU1XP 
R$ SXEOLFDEVWUDFWLQWJHW&XVWRPHU1XP 
7HICHOFTHEFOLLOWINGARELEGALACCESSORMETHODS INANENTITYBEANWITH
3 CONTAINER MANAGEDPERSISTENCE#HOOSEALLTHATAPPLY
R! SXEOLFDEVWUDFWLQW*HW&XVWRPHU1XP 
R" SXEOLFDEVWUDFWLQWJHWFXVWRPHU1XP 
R# SXEOLFDEVWUDFWLQWJHW&XVWRPHU1XP 
R$ SXEOLFDEVWUDFWLQWJHW&XVWRPHU1XP ^`

 &KDSWHU
HQWLW\EHDQV\QFKURQL]DWLRQ

7HICHAREREQUIREMENTSFORA#-0ENTITYBEANCLASS#HOOSEALLTHATAPPLY
4
R! 4HECLASSMUSTDElNEA¿QDOL]H METHOD
R" 4HESOURCElLEMUSTDElNEATLEASTONECONSTRUCTOR
R# 4HECLASSMUSTBEDECLAREDPUBLICANDABSTRACT
R$ 4HECLASSMUSTIMPLEMENT DIRECTLYORINDIRECTLY THE
MDYD[HME(QWHUSULVH%HDQINTERFACE
R% !LLGETTERANDSETTERMETHODSFORTHEBEANSABSTRACTPERSISTENCE
SCHEMAMUSTBEABSTRACT

7HICHARELEGALDECLARATIONSFORA#-0BEANSEJB#REATEMETHODS#HOOSE
5 ALLTHATAPPLY
R! SXEOLFYRLGHME&UHDWH%LJ&XVWRPHU WKURZV
MDYD[HME&UHDWH([FHSWLRQ
R" SXEOLF6WULQJHME&UHDWH$FFRXQW WKURZV
MDYD[HME&UHDWH([FHSWLRQ
R# VWDWLF6WULQJHME&UHDWH WKURZV
MDYD[HME&UHDWH([FHSWLRQ
R$ SXEOLFLQWHME&UHDWH WKURZV
MDYD[HME&UHDWH([FHSWLRQ
R% SXEOLF¿QDO6WULQJHME&UHDWH WKURZV
MDYD[HME&UHDWH([FHSWLRQ

7HICHARELEGALDECLARATIONSFORAMETHODINA#-0BEAN#HOOSEALLTHAT
6 APPLY
R! SXEOLF$FFRXQWHME6HOHFW$FFW ORQJ[ WKURZV
MDYD[HME)LQGHU([FHSWLRQ
R" SXEOLFDEVWUDFW$FFWHME6HOHFW$FFW ORQJ[ WKURZV
MDYD[HME)LQGHU([FHSWLRQ
R# SXEOLF$FFRXQWHME3RVW&UHDWH $FFWNH\ WKURZV
MDYD[HME&UHDWH([FHSWLRQ
R$ SXEOLFYRLGHME3RVW&UHDWH $FFWNH\ WKURZV
MDYD[HME&UHDWH([FHSWLRQ
R% SXEOLFVWDWLFYRLGHME3RVW&UHDWH $FFWNH\ WKURZV
MDYD[HME&UHDWH([FHSWLRQ

\RXDUHKHUH 
FRIIHHFUDPPRFNH[DP

7HICHMETHODS FROMTHE%NTITY#ONTEXTINTERFACECANBEINVOKEDFROM
7 WITHINTHESET%NTITY#ONTEXTMETHOD#HOOSEALLTHATAPPLY
R! JHW(-%2EMHFW
R" JHW(-%/RFDO+RPH
R# JHW&DOOHU,GHQWLW\
R$ JHW&DOOHU3ULQFLSDO
R% VHW5ROOEDFN2QO\
7HICHCANBECALLEDONA#-0BEANTOTRANSITIONITFROMTHEREADYSTATETOTHE
8 POOLEDSTATE#HOOSEALLTHATAPPLY
R! HME6WRUH
R" HME&UHDWH
R# HME6HOHFW
R$ HME5HPRYH
R% HME3DVVLYDWH

7HICHMETHODS FROMTHE%NTITY#ONTEXTINTERFACECANBEINVOKEDFROM
9 WITHINTHEEJB#REATEMETHOD#HOOSEALLTHATAPPLY
R! JHW(-%+RPH
R" JHW(-%2EMHFW
R# JHW&DOOHU3ULQFLSDO
R$ JHW8VHU7UDQVDFWLRQ
R% VHW5ROOEDFN2QO\

7HATISTRUEFORA#-0BEANINTHEREADYSTATE
10
R! )TSHME/RDG CANBECALLEDDIRECTLYAFTEREJB3TORE
R" )TSHME6WRUH CANBECALLEDDIRECTLYAFTERABUSINESSMETHOD
R# /NEOFITSBUSINESSMETHODSCANBECALLEDDIRECTLYAFTEREJB3TORE
R$ .ONEOFTHEABOVE

 &KDSWHU
HQWLW\EHDQV\QFKURQL]DWLRQ

7HICHMETHODS FROMTHE%NTITY#ONTEXTINTERFACEMUST./4BEINVOKED
11 FROMWITHINTHEEJB,OADMETHOD#HOOSEALLTHATAPPLY
R! JHW(-%+RPH
R" JHW(-%2EMHFW
R# JHW&DOOHU3ULQFLSDO
R$ JHW8VHU7UDQVDFWLRQ
R% VHW5ROOEDFN2QO\

7HICHMETHOD CALLEDONA#-0BEAN IS!,7!93ASSOCIATEDWITHASTATE


12 CHANGEINTHEBEAN#HOOSEALLTHATAPPLY
R! HME/RDG
R" HME)LQG
R# HME5HPRYH
R$ HME$FWLYDWH
R% XQVHW(QWLW\&RQWH[W

7HATSTRUEABOUTAN#-0ENTITYBEANSPRIMARYKEY#HOOSEALLTHATAPPLY
13
R! 4HEBEANSPRIMARYKEYCLASSMUSTPROVIDEASUITABLEIMPLEMENTATIONOF
THEHASH#ODEANDEQUALSMETHODS
R" 7HENSPECIFYINGTHEPRIMARYKEYINTHEDEPLOYMENTDESCRIPTOR ONLY
THElELDNAMEMUSTBEDECLARED
R# !LLlELDSINTHEPRIMARYKEYCLASSMUSTBEDECLAREDPUBLIC
R$ !LLlELDSUSEDINTHEPRIMARYKEYMUSTBECONTAINER MANAGEDlELDS

(OWMANYEJB#REATEMETHODSCANA#-0ENTITYBEANHAVE
14
R! 
R" 
R# OR
R$ TOMANY
R% TOMANY

\RXDUHKHUH 
FRIIHHFUDPPRFNH[DP

7HICHMETHODS AREALWAYSINVOKEDINDIRECTRESPONSETOACLIENTOPERATION
15 #HOOSEALLTHATAPPLY
R! HME/RDG
R" HME&UHDWH
R# HME5HPRYH
R$HME$FWLYDWH
R% HME3DVVLYDWH
R&VHW(QWLW\&RQWH[W

7HICHADDITIONALMETHODS MIGHTTHECONTAINERCALLWHENINVOKING
16 EJB2EMOVE#HOOSEALLTHATAPPLY
R! HME)LQG
R" HME/RDG
R# HME6WRUH
R$ HME$FWLYDWH
R% HME3DVVLYDWH

!TWHATPOINTS MUSTTHECONTAINERESTABLISHA#-0BEANSPRIMARYKEY
17 #HOOSEALLTHATAPPLY
R!BEFORECALLINGQHZ,QVWDQFH
R"BEFORECALLINGVHW(QWLW\&RQWH[W
R# BEFORECALLINGHME&UHDWH
R$ BEFORECALLINGHME3RVW&UHDWH

7HICHMETHODS RUNINTHETRANSACTIONCONTEXTOFTHEMETHODTHATCAUSES
18 THEIRINVOCATION#HOOSEALLTHATAPPLY
R! HME/RDG
R" HME5HPRYH
R# HME6HOHFW
R$ HME$FWLYDWH
R% HME3DVVLYDWH
R&VHW(QWLW\&RQWH[W

 &KDSWHU
HQWLW\EHDQV\QFKURQL]DWLRQ

0RFN([DP$QVZHUV
7HATSTRUEFORABEANPROVIDERWHENCREATINGANENTITYBEANUSINGCONTAINER
1 MANAGEDPERSISTENCE#HOOSEALLTHATAPPLY
R! #ONTAINER MANAGEDPERSISTENTlELDSMUSTBEDElNEDINTHEENTITYBEAN
CLASS
R" #ONTAINER MANAGEDRELATIONSHIPlELDSMUSTBEDElNEDINTHEENTITY
BEANCLASS
Collection
R# 7HENIMPLEMENTINGAONE TO MANYRELATIONSHIP THEJAVAUTIL,IST - OnlySet can be used
INTERFACEMUSTNOTBEUSED
or
R$ !CCESSORMETHODSFORCONTAINER MANAGEDRELATIONSHIPlELDSMUSTBE
EXPOSEDINTHEBEANSREMOTECOMPONENTINTERFACE

7HICHOFTHEFOLLOWINGISALEGALACCESSORMETHODFORAPERSISTENTlELDINAN
2 ENTITYBEANWITHCONTAINER MANAGEDPERSISTENCE#HOOSEALLTHATAPPLY
R! SXEOLFJHW&XVWRPHU1XP 
It m ust be Òp ub lic abstracttÓ -
- value of wha
R" SXEOLFYRLGJHW&XVWRPHU1XP  and return eltdheis... it IS after
ever the ÞTER.
R# DEVWUDFWYRLGJHW&XVWRPHU1XP  all, a GET
R$ SXEOLFDEVWUDFWLQWJHW&XVWRPHU1XP 
7HICHOFTHEFOLLOWINGARELEGALACCESSORMETHODS INANENTITYBEANWITH
3 CONTAINER MANAGEDPERSISTENCE#HOOSEALLTHATAPPLY
R! SXEOLFDEVWUDFWLQW*HW&XVWRPHU1XP 
- you have to follow the
R" SXEOLFDEVWUDFWLQWJHWFXVWRPHU1XP  Java naming convention
R# SXEOLFDEVWUDFWLQWJHW&XVWRPHU1XP 
R$ SXEOLFDEVWUDFWLQWJHW&XVWRPHU1XP ^`
- not legal Ja
va

\RXDUHKHUH 
PRFNH[DPDQVZHUV

7HICHAREREQUIREMENTSFORA#-0ENTITYBEANCLASS#HOOSEALLTHATAPPLY (spec: 190)


4
R! 4HECLASSMUSTDElNEA¿QDOL]H METHOD
R" 4HESOURCElLEMUSTDElNEATLEASTONECONSTRUCTOR - No, you want the default constructor
R# 4HECLASSMUSTBEDECLAREDPUBLICANDABSTRACT
R$ 4HECLASSMUSTIMPLEMENT DIRECTLYORINDIRECTLY THE - EntityBean extends EnterpriseBean
MDYD[HME(QWHUSULVH%HDQINTERFACE
R% !LLGETTERANDSETTERMETHODSFORTHEBEANSABSTRACTPERSISTENCE
SCHEMAMUSTBEABSTRACT
(spec: 192)
7HICHARELEGALDECLARATIONSFORA#-0BEANSEJB#REATEMETHODS#HOOSE
5 ALLTHATAPPLY
R! SXEOLFYRLGHME&UHDWH%LJ&XVWRPHU WKURZV
MDYD[HME&UHDWH([FHSWLRQ
R" SXEOLF6WULQJHME&UHDWH$FFRXQW WKURZV - it canÕt be:
- static
MDYD[HME&UHDWH([FHSWLRQ - void
R# VWDWLF6WULQJHME&UHDWH WKURZV - Þnal
MDYD[HME&UHDWH([FHSWLRQ must return tprheimary
type of the
R$ SXEOLFLQWHME&UHDWH WKURZV key
MDYD[HME&UHDWH([FHSWLRQ
R% SXEOLF¿QDO6WULQJHME&UHDWH 
MDYD[HME&UHDWH([FHSWLRQ

7HICHARELEGALDECLARATIONSFORAMETHODINA#-0BEAN#HOOSEALLTHAT
(spec: 192-193)
6 APPLY
R! SXEOLF$FFRXQWHME6HOHFW$FFW ORQJ[ WKURZV
MDYD[HME)LQGHU([FHSWLRQ - must be:
R" SXEOLFDEVWUDFW$FFWHME6HOHFW$FFW ORQJ[ WKURZV abstract
MDYD[HME)LQGHU([FHSWLRQ
void
- nÕt be
ca
R# SXEOLF$FFRXQWHME3RVW&UHDWH $FFWNH\ WKURZV static
MDYD[HME&UHDWH([FHSWLRQ
R$ SXEOLFYRLGHME3RVW&UHDWH $FFWNH\ WKURZV
MDYD[HME&UHDWH([FHSWLRQ
R% SXEOLFVWDWLFYRLGHME3RVW&UHDWH $FFWNH\ WKURZV
MDYD[HME&UHDWH([FHSWLRQ

 &KDSWHU
HQWLW\EHDQV\QFKURQL]DWLRQ

7HICHMETHODS FROMTHE%NTITY#ONTEXTINTERFACECANBEINVOKEDFROM
7 WITHINTHESET%NTITY#ONTEXTMETHOD#HOOSEALLTHATAPPLY (spec: 179)
R! JHW(-%2EMHFW
R" JHW(-%/RFDO+RPH last
R# JHW&DOOHU,GHQWLW\ - just too heearly for thecaseller tx.
t a
three. T reÕs no st means a
R$ JHW&DOOHU3ULQFLSDO setEntityContext jupo
be an is going in the ol
R% VHW5ROOEDFN2QO\
7HICHCANBECALLEDONA#-0BEANTOTRANSITIONITFROMTHEREADYSTATETOTHE (spec: 168-169)
8 POOLEDSTATE#HOOSEALLTHATAPPLY
R! HME6WRUH - store can be called anytime and is not
called to transition the bean
R" HME&UHDWH
R# HME6HOHFW
R$ HME5HPRYH - with ejbRemove(), the bean wonÕt get an
R% HME3DVVLYDWH 
ejbPassivate()

7HICHMETHODS FROMTHE%NTITY#ONTEXTINTERFACECANBEINVOKEDFROM
(spec: 179)
9 WITHINTHEEJB#REATEMETHOD#HOOSEALLTHATAPPLY
R! JHW(-%+RPH
R" JHW(-%2EMHFW
R# JHW&DOOHU3ULQFLSDO R
beans can NEVE
R$ JHW8VHU7UDQVDFWLRQ - Entittyhis, because entity
invoke MT
R% VHW5ROOEDFN2QO\ beans must use C
(spec: 169)
7HATISTRUEFORA#-0BEANINTHEREADYSTATE
10
R! )TSHME/RDG CANBECALLEDDIRECTLYAFTEREJB3TORE
- The poinet anis:d
R" )TSHME6WRUH CANBECALLEDDIRECTLYAFTERABUSINESSMETHOD load, stor hods
R# /NEOFITSBUSINESSMETHODSCANBECALLEDDIRECTLYAFTEREJB3TORE business metd by the
can be callein any
R$ .ONEOFTHEABOVE Container
order

\RXDUHKHUH 
PRFNH[DPDQVZHUV

7HICHMETHODS FROMTHE%NTITY#ONTEXTINTERFACEMUST./4BEINVOKED (spec: 180)


11 FROMWITHINTHEEJB,OADMETHOD#HOOSEALLTHATAPPLY
R! JHW(-%+RPH
R" JHW(-%2EMHFW
R# JHW&DOOHU3ULQFLSDO
R$ JHW8VHU7UDQVDFWLRQ - for BMT only
R% VHW5ROOEDFN2QO\

7HICHMETHOD CALLEDONA#-0BEAN IS!,7!93ASSOCIATEDWITHASTATE (spec: 168-169)


12 CHANGEINTHEBEAN#HOOSEALLTHATAPPLY
R! HME/RDG - not always!
R" HME)LQG
R# HME5HPRYH - bean goes ba
ck to the pool
R$ HME$FWLYDWH - bean comes out of the pool
R% XQVHW(QWLW\&RQWH[W - bean goes from the pool to dea
th
)
7HATSTRUEABOUTAN#-0ENTITYBEANSPRIMARYKEY#HOOSEALLTHATAPPLY
(spec: 203, 275
13
R! 4HEBEANSPRIMARYKEYCLASSMUSTPROVIDEASUITABLEIMPLEMENTATIONOF
THEHASH#ODEANDEQUALSMETHODS
R" 7HENSPECIFYINGTHEPRIMARYKEYINTHEDEPLOYMENTDESCRIPTOR ONLY
THElELDNAMEMUSTBEDECLARED - no, you need the type
R# !LLlELDSINTHEPRIMARYKEYCLASSMUSTBEDECLAREDPUBLIC
R$ !LLlELDSUSEDINTHEPRIMARYKEYMUSTBECONTAINER MANAGEDlELDS

(OWMANYEJB#REATEMETHODSCANA#-0ENTITYBEANHAVE (spec: 171)


14
R! 
let
R"  You donÕt hatvee betoans
R# OR clients crea
R$ TOMANY
R% TOMANY

 &KDSWHU
HQWLW\EHDQV\QFKURQL]DWLRQ

7HICHMETHODS AREALWAYSINVOKEDINDIRECTRESPONSETOACLIENTOPERATION (spec: 171-172)


15 #HOOSEALLTHATAPPLY
R! HME/RDG ate, and
Load, Passivon t
setEntityC d tbyex the
R" HME&UHDWH lle
can be ca when it
R# HME5HPRYH Container
wants to
R$HME$FWLYDWH
R% HME3DVVLYDWH
R&VHW(QWLW\&RQWH[W

7HICHADDITIONALMETHODS MIGHTTHECONTAINERCALLWHENINVOKING (spec: 176)


16 EJB2EMOVE#HOOSEALLTHATAPPLY
R! HME)LQG a bean has to be ready
R" HME/RDG and loaded before it
can do a remove - it
R# HME6WRUH may have cascading
R$ HME$FWLYDWH deletes to take care of
R% HME3DVVLYDWH

!TWHATPOINTS MUSTTHECONTAINERESTABLISHA#-0BEANSPRIMARYKEY (spec: 175)


17 #HOOSEALLTHATAPPLY
R!BEFORECALLINGQHZ,QVWDQFH
R"BEFORECALLINGVHW(QWLW\&RQWH[W
es the values yo u set in
r us
R# BEFORECALLINGHME&UHDWH the C on t
e
ai ne
so t hat in ej bPos ate the
t C re
R$ BEFORECALLINGHME3RVW&UHDWH ejbCreatready to use its key
bean is
18 7HICHMETHODS RUNINTHETRANSACTIONCONTEXTOFTHEMETHODTHATCAUSES (spec: 174-178)
THEIRINVOCATION#HOOSEALLTHATAPPLY
R! HME/RDG
R" HME5HPRYH
R# HME6HOHFW
R$ HME$FWLYDWH
R% HME3DVVLYDWH
R&VHW(QWLW\&RQWH[W

\RXDUHKHUH 
entity relationships
5 4
4 :KHQ%HDQV5HODWH
+DYH\RXKHDUG
DERXW2QHWR0DQ\
UHODWLRQVKLSV",WKRXJKW 2KUHDOO\"7RREDG\RXGRQ·W
PD\EHZHFRXOGWU\ KDYHD&RQWDLQHUWRPDQDJH\RXU
WKDW UHIHUHQWLDOLQWHJULW\%HFDXVH
,ZRXOGMXVWORYHWRFDVFDGH
GHOHWH\RXULJKWQRZ

(QWLW\EHDQVQHHGUHODWLRQVKLSV$Q2UGHUQHHGVD&XVWRPHU$/LQH,WHP
QHHGVDQ2UGHU$Q2UGHUQHHGV/LQH,WHPV$0RYLHQHHGVD'LUHFWRU$'LUHFWRUQHHGV
0RYLHV$0RYLHQHHGV$FWRUV$Q$FWRUQHHGVWDOHQW(QWLW\EHDQVFDQKDYHFRQWDLQHU
PDQDJHGUHODWLRQVKLSV &05 DQGWKH&RQWDLQHUWDNHVFDUHRIYLUWXDOO\HYHU\WKLQJ0DNH
DQHZ0RYLHDQGJLYHLWD'LUHFWRU"7KDW'LUHFWRUDXWRPDWLFDOO\KDVRQHPRUH0RYLHLQKLV
0RYLHFROOHFWLRQ0DNHDQHZ/LQH,WHPWKDW¶VUHODWHGWRDQ2UGHU",I\RXDVNWKH&XVWRPHU
WRVKRZ\RXKLV2UGHUVKLV2UGHUVZLOOVKRZWKHQHZ/LQH,WHP%HVWRIDOO\RXFDQXVH
(-%4/WRZULWHSRUWDEOH WKLQNYHQGRUGDWDEVHLQGHSHQGHQW TXHULHV

WKLVLVDQHZFKDSWHU 
H[DPREMHFWLYHV

(QWLW\5HODWLRQVKLSV&03DQG&05

2IILFLDO :KDWLWUHDOO\PHDQV
 ,GHQWLI\FRUUHFWDQGLQFRUUHFW <RXKDYHWRNQRZWKDWWKHFRQWDLQHUPDQDJHV
VWDWHPHQWVRUH[DPSOHVDERXW UHODWLRQVKLSVEHWZHHQWZRHQWLW\EHDQVWKURXJK
SHUVLVWHQWUHODWLRQVKLSVUHPRYH FRQWDLQHUPDQDJHGSHUVLVWHQW &05 ¿HOGVDQGWKDW
SURWRFROVDQGDERXWWKHDEVWUDFW &05¿HOGVPXVWEHGHVFULEHGLQWKHGHSOR\PHQW
VFKHPDW\SHRID&03HQWLW\EHDQ GHVFULSWRUXVLQJWKHUHODWLRQVKLSV!VHFWLRQ
<RXKDYHWRXQGHUVWDQGWKHLPSOLFDWLRQVRIPXOWLSOLFLW\
 ,GHQWLI\FRUUHFWDQGLQFRUUHFW LQDUHODWLRQVKLSDQGWKDWWKH&RQWDLQHUFDUHVZKHWKHU
VWDWHPHQWVRUH[DPSOHVDERXW WKHUHODWLRQVKLSLVRQHWRRQHRQHWRPDQ\RUPDQ\
UXOHVDQGVHPDQWLFVIRUUHODWLRQVKLS WRPDQ\<RXPXVWNQRZWKDWWKH&RQWDLQHUPDLQWDLQV
DVVLJQPHQWXSGDWLQJLQD&03EHDQ WKHUHIHUHQWLDOLQWHJULW\RIWKHGDWDEDVHE\XVLQJWKH
PXOWLSOLFLW\ZKHQGRLQJDVVLJQPHQWV)RUH[DPSOHLI
 0DWFKWKHQDPHZLWKDGHVFULSWLRQRI WKHUHFDQEHRQO\RQH&XVWRPHUSHU2UGHULI\RXDVVLJQ
SXUSRVHRUIXQFWLRQDOLW\IRUHDFKRI DQ2UGHUWRD&XVWRPHUWKDW2UGHUFDQQRWH[LVWLQDQ\
WKHIROORZLQJHMEQDPH!DEVWUDFW RWKHU&XVWRPHU¶V2UGHUFROOHFWLRQ$QGLI\RXUHDVVLJQ
VFKHPDQDPH!HMEUHODWLRQVKLSUROH! WKDW2UGHUWRDGLIIHUHQW&XVWRPHUWKH2UGHULVPRYHG
FPU¿HOG!FPU¿HOGW\SH!DQG IURPRQH&XVWRPHU¶VFROOHFWLRQWRWKHRWKHU%XWLI\RX
UHODWLRQVKLSUROHVRXUFH! DVVLJQD&XVWRPHUZLWKWKUHHH[LVWLQJ2UGHUVWRDQRWKHU
2UGHUWKHUHIHUHQFHWRWKH&XVWRPHULVFRSLHGQRW
 ,GHQWLI\FRUUHFWO\LPSOHPHQWHG PRYHGVRWKDWWKHUHIHUHQFHWRD&XVWRPHUWKDWWKH
GHSOR\PHQWGHVFULSWRUHOHPHQWVIRU RWKHUWKUHHH[LVWLQJ2UGHUVKDYHLVQRWDIIHFWHG
D&03EHDQ LQFOXGLQJFRQWDLQHU
<RXKDYHWRNQRZWKDW(-%4/TXHULHVDUHGH¿QHGLQ
PDQDJHGUHODWLRQVKLSV 
WKHGHSOR\PHQWGHVFULSWRUDQGDUHIRU)LQGHUDQG6HOHFW
PHWKRGVRQO\<RXKDYHWRNQRZWKHEDVLFV\QWD[RI(-%
 ,GHQWLI\FRUUHFWDQGLQFRUUHFWV\QWD[ 4/DQGWKDW)520DQG6(/(&7DUHPDQGDWRU\EXW
IRUDQ(-%4/TXHU\LQFOXGLQJWKH
:+(5(LVRSWLRQDO
6(/(&7)520DQG:+(5(FODXVH
<RXKDYHWRNQRZWKDWLI\RXXVHSDWKQDYLJDWLRQWRVD\
 ,GHQWLI\FRUUHFWDQGLQFRUUHFW JHWWKHWLWOHRID0RYLH\RXFDQVD\PWLWOH DVVXPLQJ³P´
VWDWHPHQWVRUH[DPSOHVDERXWWKH LVGHFODUHGDVWKHDEVWUDFWVFKHPDW\SHRI0RYLHDQG
SXUSRVHDQGXVHRI(-%4/ ³WLWOH´LVD&03¿HOGRIWKH0RYLH%HDQ %XWWKDW\RXFDQ¶W
VD\GPRYLHVWLWOHZKHUH³G´LVD'LUHFWRUDQG³PRYLHV´LV
 ,GHQWLI\FRUUHFWDQGLQFRUUHFW D&05¿HOGWKDWLVD&ROOHFWLRQRIPRYLHV)RUWKDW\RX
FRQGLWLRQDOH[SUHVVLRQVEHWZHHQ PXVWXVHWKH,1RSHUDWRUZLWKLQD)520FODXVH<RX¶OO
H[SUHVVLRQVOLNHH[SUHVVLRQVDQG VHHLW¶VDOOLQKHUH$QGPXFKVLPSOHUWKDQLWVRXQGV
FRPSDULVRQH[SUHVVLRQV

 &KDSWHU
HQWLW\EHDQUHODWLRQVKLSV

*MIVQNaQVOaW]ZUW^QMLI\IJI[M
)MAGINEYOUHAVEAMOVIEAPPLICATIONITISNTMAKINGTHE ,ZDQWWRVHHDOOWKH
FOLKSATIMDBCOMNERVOUS BUTITWORKSFORYOU  PRYLHVZLWKGLUHFWRUVZKR
9OUCANUSEITTOLOOKUPAMOVIE DUHQRPRUHWKDQGHJUHHV
DZD\IURP.HYLQ%DFRQDQGWKH
/NCEYOUHAVEAMOVIE YOUCANUSEITTOLAUNCHTHEMOVIE JHQUHLV´URPDQWLFKRUURUµ
TRAILER
9OUCANDOALLKINDSOFSEARCHESTO SAY lNDALLSCI lMOVIES
ORlNDALLACTIONMOVIESBYASPECIlCDIRECTOR
7ECANMAKEBEANSFOR-OVIE 4RAILER AND$IRECTOR"UT
HOWDOTHEYMAPTOTHEDATABASE!NDHOWDOTHEYRELATE $IWHU
TOONEANOTHER
a foreign key
Director tab into the
le
0RYLH7DEOH
0RYLH,' 7LWOH *HQUH 'LUHFWRU,' <HDU

 &URXFKLQJ3L[HOV+LGGHQ0RXVH $FWLRQ  

 7KH)LIWK$UUD\(OHPHQW $FWLRQ  

 7KH5HWXUQRIWKH%HDQ4XHHQ )DQWDV\  

 /RUGRIWKH/RRSV 6FL¿  

'LUHFWRU7DEOH 7UDLOHU7DEOH

'LUHFWRU,' 2VFDU:LQQHU 'HJUHHV 1DPH 7UDLOHU,' )LOH1DPH

 758(  -LP<LQJVW  &URXFKLQJ3L[HOV+LGGHQ0RXVH7UDLOHU

 )$/6(  -HVVLFD6DQW  7KH)LIWK$UUD\(OHPHQW7UDLOHU

 )$/6(  6N\OHU6DIIRUG  7KH5HWXUQRIWKH%HDQ4XHHQ7UDLOHU

 )$/6(  -RKQ'DZVRQ  /RUGRIWKH/RRSV7UDLOHU

Director doesnÕt have a The trailerÕs prim


always matches th ary key
reference to his movies. e MovieID

\RXDUHKHUH 
HQWLW\EHDQUHODWLRQVKLSV

*]\_MLWV¼\_IV\\W\PQVSQV<)*4-;
?M_IV\\W\PQVSQV+4);;-;
7EKNOWWECANMAPTABLESTOBEANCLASSES NOPROBLEM
!LLTHECOLUMNSBECOMEPERSISTENTlELDSINTHEBEANCLASS
REPRESENTEDBYABSTRACTGETTERSANDSETTERS ANDWERE
But this doe
GOODTOGO%XCEPTIFTHISWEREACLASSANDNOTATABLE WE
Look what thsne Õt look very client-friendly
WOULDNTHAVEDESIGNEDITTHATWAY7EDPROBABLYMAKE
reference to al client would have to do... .
THEMOVIECLASSALOTMOREFRIENDLYANDUSEFUL FOREXAMPLE
a reference to l three tables! If the clie get a
SOTHATACLIENTCOULDWORKWITHJUSTTHEMOVIEBEAN RATHER
directorID fro a movie, they have to getnt has
THANHAVINGTOGETREFERENCESTOALLTHREEBEANS
get a referencem the movie, then use that the
to a Director. to

0RYLH,' 7LWOH *HQUH 'LUHFWRU,' <HDU

 &URXFKLQJ3L[HOV+LGGHQ0RXVH $FWLRQ  

 7KH)LIWK$UUD\(OHPHQW $FWLRQ  


0RYLH
 7KH5HWXUQRIWKH%HDQ4XHHQ )DQWDV\  

 /RUGRIWKH/RRSV 6FL¿   JHW0RYLH,'


JHW7LWOH 'LUHFWRU
7UDLOHU,' )LOH1DPH
7UDLOHU JHW*HQUH
'LUHFWRU,' 2VFDU:LQQHU 'HJUHHV 1DPH  &URXFKLQJ3L[HOV+LGGHQ0RXVH7UDLOHU
JHW'LUHFWRU,' JHW'LUHFWRU,'
 758(  -LP<LQJVW  7KH)LIWK$UUD\(OHPHQW7UDLOHU
JHW7UDLOHU,' JHW<HDU JHW2VFDU:LQQHU
 )$/6(  -HVVLFD6DQW  7KH5HWXUQRIWKH%HDQ4XHHQ7UDLOHU
JHW)LOH1DPH JHW'HJUHHV
 )$/6(  6N\OHU6DIIRUG  /RUGRIWKH/RRSV7UDLOHU
JHW1DPH
 )$/6(  -RKQ'DZVRQ

a straight mapping from


tables to classes

 &KDSWHU
HQWLW\EHDQUHODWLRQVKLSV

:RXOGQ·WLWEHGUHDP\LIWKHUH
ZHUHDZD\WRXVHFRQWDLQHUPDQDJHG
SHUVLVWHQFHEXWKDYHFODVVHVWKDWGLGQ·W
KDYHWRORRNH[DFWO\OLNHWKHWDEOHV"6RWKDW
DFOLHQWFRXOGJHWDPRYLHDQGDVNWKHPRYLH
IRUDUHDO'LUHFWRUUHIHUHQFHQRWMXVWWKH
GLUHFWRU·VIRUHLJQNH\\HDKWKDWZRXOG
EHJUHDWEXWLW·VSUREDEO\MXVWD
IDQWDV\

\RXDUHKHUH 
HQWLW\EHDQUHODWLRQVKLSV

?MVMMLZMTI\QWV[PQX[JM\ _MMV\PM5W^QMJMIV
IVL\PM, QZMK\WZJMIV
7EWANTTHE-OVIEBEANTOHAVEAREFERENCETOITSMATCHING$IRECTORBEANAND
WEWANTTODOALLSORTSOFSEARCHESAGAINSTTHE-OVIEBEANANDHAVETHEQUERIES
USETHE$IRECTORBEANSDATAASWELL
)NOTHERWORDS WEWANTTOMAKEITEASYONTHECLIENTANDONTHEDEVELOPER TO
THINKINAMORENATURALWAY RATHERTHANINTHEDATABASE EFlCIENTWAYTHATWAS
USEDTODESIGNTHESCHEMAOFTHEDATABASE7HOWANTSTHAT2EMEMBER THISIS
THE//WORLDANDRELATIONALDATABASES WHILECRUCIALTOYOURBUSINESS ARESO
7EWANTTOUSEDATABASES WEJUSTDONTWANTTOTHINKLIKEDATABASES)F
YOUREONEOFTHELUCKYONESWHOGETSTOUSEAN//DATABASE ANDASSUMING
THATDATABASESTILLSOMEHOWMANAGESTOPERFORMWELLENOUGHFORYOURNEEDS
THENYOUCANJUSTSMILESMUGLYDURINGTHISlRSTSECTION

LQVWHDGRIWKLV ZHZDQWWKLV
We want
0RYLH
we donÕt want
0RYLH reference at
to keep just Director en o a
JHW0RYLH,' JHW0RYLH,'
BEAN tity
JHW7LWOH the DirectorÕs JHW7LWOH
JHW*HQUH foreign key JHW*HQUH
JHW'LUHFWRU,' JHW'LUHFWRU 'LUHFWRU
JHW<HDU JHW<HDU
JHW'LUHFWRU,'
JHW2VFDU:LQQHU
JHW'HJUHHV
JHW1DPH
0RYLH+RPH JHW0RYLHV

FUHDWH
r have
WeÕll let the Direcovtoie beans.
ILQG%\3ULPDU\.H\
ILQG%\*HQUH
OLVW$OO0RYLHV a Collection of M
OLVW0RYLHV%\'LUHFWRU$QG*HQUH
ILQG0RYLHV%\.HYLQ'HJUHHV

7ERENOTGOINGTOUSETHE4RAILERTABLEANDBEANAFTERTHISALTHOUGHYOULL
SEEITINCODE TOKEEPTHEEXAMPLECLEANER!DDINGTHE4RAILERBEANWOULDNT
ADDANYNEWCOMPLEXITYTOTHEAPPLICATION THOUGH)FYOUCANSET UPONE
BEAN TO BEANRELATIONSHIP YOUCANSETUPOTHERS

 &KDSWHU
HQWLW\EHDQUHODWLRQVKLSV

?Pa[PW]TL\PM,QZMK\WZJMIJMIV'
?PaKIV¼\Q\R][\JMLI\I'
7HYNOTHAVETHE-OVIEBEANSIMPLYGOTOTHEDATABASE
USINGTHE$IRECTORSFOREIGNKEYSTOREDASAPERSISTENT
lELDINTHE-OVIEBEAN ANDGETTHE$IRECTORSDATA"UT
IFYOUMAKETHEDIRECTORABEANASWELL YOUGETTOTHINK ,IERWKWKH'LUHFWRUDQG
/.,9INOBJECTSEXCEPTDURINGDEPLOYMENT WHENYOU
DOHAVETOMAPFROMYOURBEANSTOYOURTABLES !NDYOU WKH0RYLHDUHHQWLW\EHDQV
GETALLTHEBENElTSOFCONTAINER MANAGEDPERSISTENCEAND
SYNCHRONIZATION)MAGINEIFSOMEONECALLSASETTERMETHOD \RXQHYHUKDYHWRZRUU\
TOCHANGETHEDIRECTORSOSCARWINNINGSTATUS)FYOURE DERXWV\QFKURQL]LQJDQ\
MANAGINGTHIS YOUDHAVETOGETA*$"#CONNECTIONAND
SYNCHRONIZETHEDATABASEYOURSELF!NDOFCOURSE YOUDHAVE RIWKH0RYLH·VUHODWHG
TOKNOWWHENISTHERIGHTTIME ETC"UTIFITSDIRECTORISALSOA
BEAN YOUCALLASET7INNER METHOD ANDYOUREDONE GDWDLIVRPHERG\XVHV
/H ANDTHERESANOTHERCOOLTHING9OUMIGHTDECIDE FOR WKH0RYLHEHDQWRFKDQJH
EXAMPLE TOBANISHASPECIlCDIRECTORFROMYOURDATABASE
BECAUSEYOUTHINKHISMOVIESSUCKINANUNRECOVERABLEWAY VRPHWKLQJDERXWWKH'LUHFWRU
.OPROBLEMDELETINGTHATDIRECTOR OBVIOUSLY"UTTHENWHAT HYHU\WKLQJ·VWDNHQFDUHRIE\
HAPPENSTOTHEMOVIES(OWCANYOUHAVEMOVIESINTHE
DATABASETHATDONTHAVEADIRECTOR7HATISTHEDATABASEIS WKH&RQWDLQHU
ALREADYSETUPINSUCHAWAYTHATYOUARENTALLOWEDTOHAVEA
NULLVALUEFORTHEDIRECTORCOLUMN)NOTHERWORDS WHATIFA <RXFDQHYHQVHWWKLQJVXS
MOVIECANNOTEXISTINTHEDATABASEWITHOUTADIRECTOR
9OUCANHANDLETHISBRAINLESSLY BYSETTINGUPTHE-OVIE
IRUDFDVFDGHGHOHWHVRLI
TO $IRECTORBEANRELATIONSHIPINSUCHAWAYTHATWHENYOU \RXUHPRYHD'LUHFWRUDOO
DELETEADIRECTORFROMTHEDATABASE ALLOFHISMOVIESARE
AUTOMATICALLYDELETED9OUDOTHISWITHONESIMPLETAGINTHE WKH'LUHFWRU·VPRYLHVZLOOEH
DEPLOYMENTDESCRIPTORAND0//&3OMEBODYCALLSREMOVE
ONADIRECTORBEAN ANDREMOVE WILLAUTOMATICALLYBECALLED
UHPRYHGDXWRPDWLFDOO\
ONALLOFTHEMOVIEENTITYBEANSTHATHAVEAREFERENCETOTHIS
DIRECTORASTHEVALUEOFTHEIRDIRECTORPERSISTENTlELD 

\RXDUHKHUH 
UHODWLRQVKLSPXOWLSOLFLW\

:MTI\QWV[PQX[IVLU]T\QXTQKQ\a

$ 7VM\W7VM

(DFK0RYLH
PI[ 2QH7UDLOHU

2QH0RYLH
PI[ (DFK7UDLOHU

% 7VM\W5IVa

PI[ 0DQ\0RYLHV
2QH'LUHFWRU

2QH'LUHFWRU
PI[ (DFK0RYLH

 5IVa\W5IVa

PI[UILM
$Q$FWRU 0DQ\0RYLHV

0DQ\$FWRUV
PI[ $0RYLH

 &KDSWHU
HQWLW\EHDQUHODWLRQVKLSV

5]T\QXTQKQ\aQV*MIV+TI[[M[
(ERESHOWITWORKSWITHOURBEANCODE4HISMULTIPLICITYNOTATION
ISTHEONLY5-, LIKETHINGYOUHAVETOKNOWONTHEEXAM

7UDLOHU 0RYLH $FWRU


(DFK0RYLH (DFK7UDLOHU (DFK$FWRU (DFK0RYLH
JHW7UDLOHU,' KDVH[DFWO\ KDVH[DFWO\ JHW0RYLH,' KDV]HURRU KDVKDVRQHRU JHW$FWRU,'
RQH7UDLOHU RQH0RYLH PRUH0RYLHV PRUH$FWRUV
JHW)LOH1DPH JHW7LWOH JHW1DPH
JHW0RYLH   JHW*HQUH   JHW$JHQW
JHW'LUHFWRU JHW7DOHQW
JHW7UDLOHU JHW0RYLHV

(DFK'LUHFWRU 
KDV]HURRU
PRUH0RYLHV

'LUHFWRU

 JHW'LUHFWRU,'
JHW2VFDU:LQQHU
(DFK0RYLH JHW'HJUHHV
KDVH[DFWO\ JHW1DPH
RQH'LUHFWRU JHW0RYLHV

4OREADTHIS YOUHAVETOFOLLOWTHEARROWTOITSDESTINATION)N
THE0ERSONTO0ETSRELATIONSHIP 0ERSONHASAMULTIPLICITYOF/.%
BUT0ETSHASAMULTIPLICITYOF-!.9WHICHCOULDBEZERO 4O
lNDOUTHOWMANY0ETSA0ERSONCANHAVE YOUHAVETOFOLLOW
THEARROWOUTOF0ERSONANDINTO0ETS4HENUMBERCLOSESTTOTHE
CLASSISTHEMULTIPLICITYOFTHATCLASSTOOTHERS)NOTHERWORDS HOW
MANYOFTHATTYPEDOESTHEOTHERTYPEHAVE

this number says this numberany


how many PERSON says how m each
PETS does ave
3HUVRQ objects does each 3HWV
PET have PERSO N h
JHW3HWV JHW3HUVRQ

 

\RXDUHKHUH 
UHODWLRQVKLSPXOWLSOLFLW\

5]T\QXTQKQ\aINNMK\[ZM\]ZV\aXM
!-OVIEHASONE$IRECTOR7HENYOUCALLGET$IRECTOR YOU
GETBACKONE$IRECTOR3OTHERETURNTYPEOFGET$IRECTOR IS
A$IRECTOR 
"UTA$IRECTORHASMANYMOVIES SOWHENYOUCALL
GET-OVIES YOUGETBACKA#OLLECTIONOF-OVIES

0XOWLSOLFLW\ 0XOWLSOLFLW\
Movie has a multiplicity of
PDQ\ RQH ÒmanyÓ in its relationship with
Director. That does NOT
0RYLH 'LUHFWRU mean that Movie has ÒmanyÓ
Directors... it means that
'LUHFWRUJHW'LUHFWRU &ROOHFWLRQJHW0RYLHV Director has ÒmanyÓ Movies!
  So Director has a getMovies()
that returns a Collection of
Movies.
And Director has a multiplicity
of ÒoneÓ, which means that
)NTHE-OVIE TO $IRECTORRELATIONSHIP THEMULTIPLICITYOF Movie will return just one
-OVIEISMANYANDTHEMULTIPLICITYOF$IRECTORISONE Director.
!MULTIPLICITYOFONEMEANSTHEOBJECTYOURERELATEDTO
HOLDSJUSTONEOFYOU
$IRECTORHASAMULTIPLICITYOFONE SOTHE-OVIEOBJECTRELATED
TO$IRECTORRETURNSJUSTASINGLE$IRECTORBEAN/+ TECHNICALLY
THECOMPONENTINTERFACEOF$IRECTOR BUTYOUKNOWWHATWE
MEANBYNOW 
!MULTIPLICITYOFMANYMEANSTHEOBJECTYOURERELATEDTO
HOLDSA#OLLECTIONOFYOU
-OVIEHASAMULTIPLICITYOFMANY SOTHE$IRECTOROBJECT
RELATEDTO-OVIERETURNSA#OLLECTIONOF-OVIEBEANS

 &KDSWHU
HQWLW\EHDQUHODWLRQVKLSV

,MNQVQVO^QZ\]ITNQMTL[NWZXMZ[Q[\MV\
LI\INQMTL[IVLZMTI\QWV[PQXNQMTL[
)NTHEPREVIOUSCHAPTERWELOOKEDATDElNINGCONTAINER MANAGED
lELDSˆYOUPUTINAPAIROFABSTRACTGETTERSANDSETTERS7ESAIDA
CONTAINER MANAGEDlELDEXISTSSIMPLYBECAUSEYOUHAVEAGETTERANDSETTERFOR
IT)TWORKSTHESAMEWAYWITHCONTAINER MANAGEDRELATIONSHIP#-2
lELDS9OUDElNEAPAIROFABSTRACTGETTERSANDSETTERS BUTRATHERTHAN
SETTINGANDRETURNINGAVALUETHATMAPSTOACOLUMNINATABLE YOUSET
ANDRETURNAREFERENCETOANOTHERENTITYBEAN ORA#OLLECTIONTHATWILL 7KHRQO\GLIIHUHQFH
HOLDREFERENCESTOTHEENTITYBEAN4HERESTRICTIONSFOR#-2lELDSARE
THATTHEYCANREFERONLYTOTHELOCALCOMPONENTINTERFACEOFTHEENTITY
EHWZHHQD&03ILHOGDQG
BEAN ANDTHATIFTHEMETHODRETURNSA#OLLECTION THEDECLAREDTYPE D&05ILHOGLVWKH7<3(
CANBEONLY#OLLECTIONOR3ETNOT-AP ,IST ETC
4HETERMINOLOGYISALITTLECONFUSINGBECAUSEBOTH#-0AND#-2 $&05ILHOGLVDOZD\V
lELDSARECONTAINER MANAGEDPERSISTENTlELDS4HEYMIGHTHAVE
CALLEDIT#-0#$CONTAINER MANAGEDPERSISTENTCOLUMNDATA lELDS DQRWKHUHQWLW\EHDQ·V
AND#-02CONTAINER MANAGEDPERSISTENTRELATIONSHIP lELDS/F
COURSE PERSISTENCEISNTRESTRICTEDTOJUSTRELATIONALDATABASE SOWERE ORFDOLQWHUIDFHW\SHRUD
USINGTHETERMhCOLUMNvALITTLELOOSELY"UTIN%*" ALLCONTAINER &ROOHFWLRQRIWKHP
MANAGEDPERSISTENTlELDSWERE#-0lELDS BECAUSETHEREWASNO
CONCEPTOFPERSISTENTRELATIONSHIPSIN%*"#-0
,ILW·VD&ROOHFWLRQ
AW]VMMLIXIQZWNIJ[\ZIK\OM\\MZ[IVL[M\\MZ[NWZ LWPXVWEHHLWKHU
MIKP+58NQMTLKWT]UV^IT]M[IVLMIKP+5:NQMTL <
MDYDXWLO&ROOHFWLRQRU
ZMTI\QWV[PQX_Q\PIVW\PMZMV\Q\a
MDYDXWLO6HW
 &03ÀHOG
SXEOLFDEVWUDFW6WULQJJHW7LWOH  make sure the
SXEOLFDEVWUDFWYRLGVHW7LWOH 6WULQJJ  and return typeargument
match

 &05 UHODWLRQVKLS ÀHOG


SXEOLFDEVWUDFW'LUHFWRUJHW'LUHFWRU 
SXEOLFDEVWUDFWYRLGVHW'LUHFWRU 'LUHFWRUG  Director must be the local
component interface for the
Director bean.
pe of a CMR
The argument and return ty ther Entity
Òvirtual ÞeldÓ is always anollec n.
beanÕs local type, or a Co tio
\RXDUHKHUH 
WKHDEVWUDFWSHUVLVWHQFHVFKHPD

,MNQVQVOaW]Z¹IJ[\ZIK\XMZ[Q[\MVKM
[KPMUIº^QZ\]ITNQMTL[IZMV¼\MVW]OP
4ODElNEPERSISTENTlELDSANDRELATIONSHIPS YOUNEEDTO
CREATEANABSTRACTPERSISTENCESCHEMA$ElNINGTHEVIRTUAL $QDEVWUDFWSHUVLVWHQWVFKHPD
lELDSISNTENOUGH9OURABSTRACTPERSISTENCESCHEMAISA
COMBINATIONOFYOURVIRTUALlELDSINYOURBEANCLASS PLUS
LVDFRPELQDWLRQRIVRPHVWXII
SOMETHINGSYOUWRITEINTHEDEPLOYMENTDESCRIPTOR \RXSXWLQWKHGHSOR\PHQW
4HEWAYYOUDESCRIBE#-0lELDSINTHE$$ISSIMPLEAND
STRAIGHTFORWARD7ITH#-2 YOULLHAVETODOALITTLEMORE
GHVFULSWRUSOXV\RXUDEVWUDFW
TOSETTHINGSUP INCLUDINGDESCRIBINGTHEMULTIPLICITYFOR JHWWHUVDQGVHWWHUV
EACHOFTHETWOPARTICIPANTSINARELATIONSHIP
"UTWELLGETTO#-2lELDSINJUSTAMINUTE&ORNOW WELL 7RJHWKHUWKH\WHOOWKH
STARTWITHJUST#-0lELDS
&RQWDLQHUKRZWRPDQDJH\RXU
EHDQ·VSHUVLVWHQFHLQFOXGLQJ
<PM+WV\IQVMZVMML[\PM[M<?7\PQVO[\W
SVW_aW]PI^MI+58NQMTL¹\Q\TMº ERWKSHUVLVWHQW),(/'6
FDOOHG&03ILHOGV DQG
SHUVLVWHQW5(/$7,216+,36
 ,QWKH''
FDOOHG&05ILHOGV 
HQWLW\!
HMEQDPH!0RYLH%HDQHMEQDPH!
ORFDOKRPH!KHDG¿UVW0RYLH+RPHORFDOKRPH!
ORFDO!KHDG¿UVW0RYLHORFDO!
HMEFODVV!KHDG¿UVW0RYLH%HDQHMEFODVV!
DEVWUDFWVFKHPDQDPH!0RYLH6FKHPDDEVWUDFWVFKHPDQDPH!
FPS¿HOG!
¿HOGQDPH!WLWOH¿HOGQDPH!
FPS¿HOG!

HQWLW\!


 ,QWKHEHDQFODVV
SXEOLFDEVWUDFW6WULQJJHW7LWOH 
SXEOLFDEVWUDFWYRLGVHW7LWOH 6WULQJJ 

 &KDSWHU
HQWLW\EHDQUHODWLRQVKLSV

8MZ[Q[\MV\+58NQMTL[QV\PM,,
HQWLW\!
GLVSOD\QDPH!0RYLH%HDQGLVSOD\QDPH!
ner that IT
HMEQDPH!0RYLH%HDQHMEQDPH! tell the Contaiur persistence
ORFDOKRPH!KHDG¿UVW0RYLH+RPHORFDOKRPH! is managing yo ÒBeanÓ)
ORFDO!KHDG¿UVW0RYLHORFDO! (as opposed to
HMEFODVV!KHDG¿UVW0RYLH%HDQHMEFODVV!
SHUVLVWHQFHW\SH!&RQWDLQHUSHUVLVWHQFHW\SH!

SULPNH\FODVV!MDYDODQJ6WULQJSULPNH\FODVV! fully-qualiÞed class
UHHQWUDQW!)DOVHUHHQWUDQW!
na me for the Þeld
FPSYHUVLRQ![FPSYHUVLRQ!
th at represents the
primary key
DEVWUDFWVFKHPDQDPH!0RYLH6FKHPDDEVWUDFWVFKHPDQDPH!
FPS¿HOG!
hat
¿HOGQDPH!JHQUH¿HOGQDPH!
y o u r s c hema so yt type it
FPS¿HOG! Name w which entit ust be
FPS¿HOG! you kno nts. This name m
represe the DD!!
unique in
¿HOGQDPH!PRYLH,'¿HOGQDPH!
FPS¿HOG!
FPS¿HOG!
¿HOGQDPH!\HDU¿HOGQDPH! ner
told the Contitaiwhich
FPS¿HOG!
Now that youÕve el l
manage, t One...
FPS¿HOG! WHICH Þeldsdto is the Special
¿HOGQDPH!WLWOH¿HOGQDPH! of those Þel s y Þeld.
FPS¿HOG! the primary ke
SULPNH\¿HOG!PRYLH,'SULPNH\¿HOG!

HQWLW\!

WKHUH DUH QR
7KHQDPLQJ
'XPE 4XHVWLRQV
FRQYHQWLRQLV
5(48,5(' Q: (OWDOESTHE#ONTAINERKNOWTHETYPE
EVWUDFW OFTHEPERSISTENTlELD)SEEADElNITIONFORTHE
<RXPXVWKDYHDSDLURID
KDW KD YHWKH PRIMARYKEYTYPEPRIM KEY CLASS BUT)DONT
JHWWHUVDQGVHWWHUVW
UDI WHUWKH ³JH W´DQG SEEANYTHINGFORTHEOTHER#-0lELDS
¿UVWFKDUDFWH
DSLWDOL]HG EX WLQ WKH &0 3
³VHW´F
¿HOGGH¿QLWLRQLQWKH
ZLWKDORZ HUF DVH OHW
''
WHU
\R
OHD
XV
YLQ
WDUW
JR II
V
A: 4HE#ONTAINERFIGURESITOUTBASEDONTHE
UZ RUG RETURNTYPEANDARGUMENTOFTHEABSTRACTGETTERS
WKH³JHW´DQG³VHW´,QRWKH
3¿HOG LQ WKH  ANDSETTERSINTHEBEANCLASS!NDTHEYHADBETTER
\RXGH¿QHWKH&0
WDQFH MATCH)FYOUHAVEAGET,IMIT.UM THATRETURNS
''DVLILWZHUHDUHDOLQV
LDEOHIROORZ LQJ WKH ROG SUH(-% ANINT YOUBETTERHAVEASET,IMIT.UMINTI THAT
YDU
JF RQY HQW LRQ TAKESANINT
-DYD%HDQVQDPLQ

\RXDUHKHUH 
HQWLW\EHDQUHODWLRQVKLSV

=[QVOZMTI\QWV[PQX[QVaW]ZKWLM
)NYOURBEANCODE YOUUSEYOURVIRTUALRELATIONSHIPlELDSJUST
ASYOUWOULDANYOTHERGETTERANDSETTER4HEONLYDIFFERENCE
BETWEENUSINGAREALlELDIEANINSTANCEVARIABLEDECLAREDIN
YOURCLASS ANDAVIRTUALlELDISTHATYOUCANACCESSYOURVIRTUAL <RXFDQXVH\RXUYLUWXDO
lELDSONLYBYCALLINGTHEABSTRACTGETTERSANDSETTERSWHICHTHE
#ONTAINERIMPLEMENTSATDEPLOY TIME  UHODWLRQVKLSILHOGVMXVW
4HEONLYNEWRESTRICTIONISTHATARELATIONSHIPlELDCANBE
ONLYALOCALCOMPONENTINTERFACETYPE9OUCANTHAVEA#-2
DV\RXZRXOGDQ\RWKHU
RELATIONSHIPlELDTHATUSESABEANS2EMOTEINTERFACE YLUWXDOILHOGE\FDOOLQJ
9LUWXDOÀHOGLQWKHEHDQFODVV WKHDEVWUDFWJHWWHUVWKDW
<28GHILQHGEXWZKLFK
SXEOLFDEVWUDFW'LUHFWRUJHW'LUHFWRU 
SXEOLFDEVWUDFWYRLGVHW'LUHFWRU 'LUHFWRUG  WKH&RQWDLQHULPSOHPHQWV

type of a 7KHW\SHRIDUHODWLRQVKLS
The argument and return ays another
CMR Òvirtual ÞeldÓ is alwMUST be a ILHOG0867EHWKHORFDO
Entity bean type, and itÕt have a virtual
local interface!! You can te interface. FRPSRQHQWLQWHUIDFHRI
Þeld to the entityÕs Remo
WKHHQWLW\
([SRVHGEXVLQHVVPHWKRGLQWKHEHDQFODVV
 $&05ILHOGZLOO
SXEOLF'LUHFWRUJHW0RYLH'LUHFWRU ^
$/:$<6EHDORFDO
UHWXUQJHW'LUHFWRU 
` FRPSRQHQWLQWHUIDFHW\SH
tor to a
Now we can return the Direc act getter.
client, by calling the ab str

SXEOLF6WULQJJHW0RYLH'LUHFWRU1DPH ^
UHWXUQJHW'LUHFWRU JHW'LUHFWRU1DPH 
`
We can also do the wo
client, if we donÕt wantrk on behalf of the
Director reference to thto expose the real
thatÕs how weÕre going to e client. In fact,
Director is a local interfado it, because the
is going to have Remote ce, but the Movie
clients.

 &KDSWHU
HQWLW\EHDQUHODWLRQVKLSV

,MNQVQVOZMTI\QWV[PQX[QVaW]ZIJ[\ZIK\
XMZ[Q[\MVKM[KPMUIQV\PM,,
#-0lELDDElNITIONSARESOEASY9OUDECLAREACMP lELDANDGIVE
ITANAMETHATMATCHESONEOFYOURGETTERSETTERPAIRSFOLLOWINGTHE
NAMINGRULEOFDROPPINGTHEhGETvANDhSETvANDBEGINNINGTHE#-0
lELDNAMEWITHALOWER CASELETTER 
"UT#-2ISMOREINVOLVED9OUCANTBEINARELATIONSHIPWITHONLY
YOURSELF SOARELATIONSHIPALWAYSINCLUDESTWOBEANS

ionship has
 'HÀQHDQHMEUHODWLRQEHWZHHQWZREHDQV Every relawto beans.
exactly t
$ 'HÀQHDQHMEUHODWLRQVKLSUROHIRURQHEHDQ
Multiplicity of this bean (i.e . how many of
R par ticipant have)
 PXOWLSOLFLW\IRUWKLVEHDQ this type will the OTHE
g about?
Which bean are we really talkin
 VRXUFHIRUWKLVEHDQ
in the bean class
 FPUÀHOGIRUWKLVEHDQ Must match the Òvirtual ÞeldÓ
 FDVFDGHGHOHWHIRUWKLVEHDQ
Only if THIS bean wa s
when its partner is dent to be deleted
leted.
$ 'HÀQHDQHMEUHODWLRQVKLSUROHIRUWKHVHFRQGEHDQ

 PXOWLSOLFLW\IRUWKLVEHDQ
for the
 VRXUFHIRUWKLVEHDQ Same stuffrticipant in
second paionship
 FPUÀHOGIRUWKLVEHDQ the relat
 FDVFDGHGHOHWHIRUWKLVEHDQ

\RXDUHKHUH 
UHODWLRQVKLSVLQWKHGHSOR\PHQWGHVFULSWRU

5HODWLRQVKLSGHÀQLWLRQIRUWKH 0RYLH 'LUHFWRU


'LUHFWRUWR0RYLHUHODWLRQVKLS 'LUHFWRUJHW'LUHFWRU &ROOHFWLRQJHW0RYLHV

 

 'HÀQHDQHMEUHODWLRQEHWZHHQWZREHDQV
Each <ejb-relation> descr
They REALLY should ha ibes one pair of beans... one relationship.
HMEUHODWLRQ!

ve named this <ejb-relation
ship>
$ 'HÀQHDQHMEUHODWLRQVKLSUROHIRURQHEHDQ
HMEUHODWLRQVKLSUROH!


HMEUHODWLRQVKLSUROHQDPH!'LUHFWRU%HDQHMEUHODWLRQVKLSUROHQDPH!
This is a made-up name! ItÕ
choose to call the ROLE. s simply what you
it ÒDirectorRoleÓ or anyt We could have called
 PXOWLSOLFLW\IRUWKLVEHDQ participant weÕre talking hing that tells us which
about.
PXOWLSOLFLW\!2QHPXOWLSOLFLW\!

Remember, this does NOT say how man
participant the Director bean will hav y of the other
e...
many of THIS bean the OTHER partne it says how
Movie will have only ONE Director. r will have.
 VRXUFHIRUWKLVEHDQ
UHODWLRQVKLSUROHVRXUFH!
HMEQDPH!'LUHFWRU%HDQHMEQDPH!
We can use any role-name we want, but
UHODWLRQVKLSUROHVRXUFH! sooner or later the Container must know
EXACTLY which bean weÕre talking about.
Put the beanÕs <ejb-name> which is just a
label telling the Container where to Þnd
this beanÕs real deÞnition in the <enterprise-
beans> section of the DD. This MUST
match an <ejb-name> in the DD.
 FPUÀHOGIRUWKLVEHDQ
FPU¿HOG!


FPU¿HOGQDPH!PRYLHVFPU¿HOGQDPH!
This must match a Òvirtual ÞeldÓ in the
 bean class for getMovies() / setMovies
()

FPU¿HOGW\SH!MDYDXWLO&ROOHFWLRQFPU¿HOGW\SH!
FPU¿HOG!
Use <cmr-Þeld-type> ONLY if
partner has a MANY relationshipthe to
other
this
 FDVFDGHGHOHWHIRUWKLVEHDQ bean, which means you will hold more tha
one, so you need a Collection. You can n
QRWVSHFL¿HGIRUWKLVEHDQ
say java.util.Set (your only two choicesalso
HMEUHODWLRQVKLSUROH!

)

 &KDSWHU
HQWLW\EHDQUHODWLRQVKLSV

$ 'HÀQHDQHMEUHODWLRQVKLSUROHIRUWKHVHFRQGEHDQ
HMEUHODWLRQVKLSUROH!
HMEUHODWLRQVKLSUROHQDPH!0RYLH%HDQHMEUHODWLRQVKLSUROHQDPH!

Remember, this is just a name for


your own (or the App Assembler or a
toolÕs) use. It means nothing in your
 PXOWLSOLFLW\IRUWKLVEHDQ Java code.
PXOWLSOLFLW\!0DQ\PXOWLSOLFLW\!
This means Director will have MANY of
type (Movie). Se we expect that Direct this
have a CMR Þeld with a Collection typ or will
than a single Movie e rather
 VRXUFHIRUWKLVEHDQ
UHODWLRQVKLSUROHVRXUFH!
HMEQDPH!0RYLH%HDQHMEQDPH! This MUST match the <ejb-name> for
UHODWLRQVKLSUROHVRXUFH! where you deÞned the Movie entity
bean in the <enterprise-beans> section
of the DD.
 FPUÀHOGIRUWKLVEHDQ
FPU¿HOG!
nÕt have a
FPU¿HOGQDPH!GLUHFWRUFPU¿HOGQDPH!
Look... no type! Webedocause it isnÕt a
FPU¿HOG!
<cmr-Þeld-type> , the only reason
Collection. In facteld-type> tag is
thereÕs a <cmr-Þ type is a Col-
for when the Þeld ve to distinguish
lection, and you ha llection. <cmr-
 FDVFDGHGHOHWHIRUWKLVEHDQ between Set or Co
Þeld-type>
FDVFDGHGHOHWH!
Put this in if you want THIS
bean to be deleted whenever its
HMEUHODWLRQVKLSUROH! partner is deleted.
HMEUHODWLRQ!

\RXDUHKHUH 
HQWLW\EHDQUHODWLRQVKLSV

6KDUSHQ \RXU SHQFLO


(ERESTHERELATIONSHIP$$FOR$IRECTOR TO 0RYLH 'LUHFWRU
-OVIE BUTWEVELEFTAFEWTHINGSOUT3EEIF 'LUHFWRUJHW'LUHFWRU &ROOHFWLRQJHW0RYLHV
YOUCANlLLTHEMINCORRECTLYWITHOUTLOOKING
 
ONTHEPREVIOUSPAGES

, QZMK\WZ\W5W^QMZMTI\QWV[PQX
UHODWLRQVKLSV!
HMEUHODWLRQ!
HMEUHODWLRQVKLSUROH!
HMEUHODWLRQVKLSUROHQDPH!HMEUHODWLRQVKLSUROHQDPH!
PXOWLSOLFLW\!PXOWLSOLFLW\!
UHODWLRQVKLSUROHVRXUFH!
HMEQDPH!'LUHFWRU%HDQHMEQDPH!
UHODWLRQVKLSUROHVRXUFH!
FPU¿HOG!
FPU¿HOGQDPH!FPU¿HOGQDPH!

FPU¿HOG!
HMEUHODWLRQVKLSUROH!
HMEUHODWLRQVKLSUROH!
HMEUHODWLRQVKLSUROHQDPH!0RYLH%HDQHMEUHODWLRQVKLSUROHQDPH!
PXOWLSOLFLW\!PXOWLSOLFLW\!
FDVFDGHGHOHWH!
UHODWLRQVKLSUROHVRXUFH!
HMEQDPH!HMEQDPH!
UHODWLRQVKLSUROHVRXUFH!



HMEUHODWLRQVKLSUROH!
HMEUHODWLRQ!
UHODWLRQVKLSV!

 &KDSWHU
HQWLW\EHDQUHODWLRQVKLSV

'RHVWKLVPHDQWKDWZKHQ
DEHDQLVLQDUHODWLRQVKLSLW
0867KDYHDÀHOGIRUWKHRWKHU
EHDQ":KDWLI,ZDQW0RYLHWRKDYH
D7UDLOHUEXW,GRQ·WZDQWDQ\ERG\
WRXVH7UDLOHUWRJHWWRD0RYLH" 0RYLH 7UDLOHU
7UDLOHUJHW7UDLOHU QRUHIHUHQFHWR0RYLH

:MTI\QWV[PQX[KIVJMWVM_Ia
] VQLQZMK\QWVIT
9OUCANHAVEARELATIONSHIPBETWEENTWO
BEANS BUTHAVEA#-2lELDINONLYONEOF
THETWOBEANS&OREXAMPLE IFYOUSETUPA
RELATIONSHIPBETWEENA-OVIEANDITS4RAILER
AONE TO ONERELATIONSHIP ANDYOUDONT
WANTCLIENTSTOUSEA4RAILERTOGETTOA-OVIE
JUSTLEAVETHE#-2lELDFOR-OVIEOUTOFTHE
4RAILERBEAN3IMPLEASTHAT
)NTHATCASE THE4RAILER"EANWONTKNOW
ANYTHINGABOUTTHE-OVIE"EAN EVENTHOUGH
THEYREBOTHPARTNERSINARELATIONSHIP

HMEUHODWLRQVKLSUROH!
HMEUHODWLRQVKLSUROHQDPH!7UDLOHU%HDQHMEUHODWLRQVKLSUROHQDPH!
PXOWLSOLFLW\!2QHPXOWLSOLFLW\!
FDVFDGHGHOHWH!
UHODWLRQVKLSUROHVRXUFH!
HMEQDPH!7UDLOHU%HDQHMEQDPH!
UHODWLRQVKLSUROHVRXUFH!
FPU¿HOG!
FPU¿HOGQDPH!FPU¿HOGQDPH! Leave the cmr-Þeld out of a
FPU¿HOG! relationship role if you donÕt want
HMEUHODWLRQVKLSUROH! this bean to hav e a reference to its
partner bean.

\RXDUHKHUH 
GLUHFWLRQDOLW\LQUHODWLRQVKLSV

<PMLIZS[QLMWNI]VQLQZMK\QWVITWVM_IaZMTI\QWV[PQX

+H\ZH·UH
LQDUHODWLRQVKLS <HV
WRJHWKHU ZHDUH
1RZH·UHQRW
1RZH·UHQRW

7UDLOHU
0RYLH 7UDLOHU 0RYLH

'RQ·W\RXWKLQN,·G
$UH NQRZLI,ZHUHLQD
$UH UHODWLRQVKLS",GRQ·W
1RW HYHQOLNH\RX

7UDLOHU
0RYLH 7UDLOHU
0RYLH

<RX·UHLQWKH''ZLWK 7KDW·VQRWHYHQWKH
PHEDE\$QG,KDYHDYLUWXDO %(67SDUW\RX·UHVHW
ÀHOGIRU\RXHYHQWKRXJK\RX WRFDVFDGHGHOHWHVRWKDW
GRQ·WKDYHRQHIRUPH ZKHQ,GLH\RXGLH6R\RX
EHWWHUWDNHJRRGFDUH
2KJUHDW,·PLQD RIPH
UHODWLRQVKLSDJDLQVW
P\ZLOOZLWKQR
NQRZOHGJH

0RYLH
7UDLOHU 0RYLH 7UDLOHU
 &KDSWHU
HQWLW\EHDQUHODWLRQVKLSV

+I[KILMLMTM\MKIVXZWXIOI\M

'LUHFWRU 0RYLH 7UDLOHU

,QZMK\WZ\W5W^QM 5W^QM\W<ZIQTMZ
ZMTI\QWV[PQX ZMTI\QWV[PQX
'LUHFWRU FDQ·WFDVFDGHGHOHWH 0RYLH FRXOGFDVFDGHGHOHWHEXWGRHVQ·W
ZDQWWR
0RYLHFDVFDGHGHOHWH!
7UDLOHUFDVFDGHGHOHWH!
<RXFDQ·WVHWFDVFDGHGHOHWHIRUWKH'LUHFWRU
EHDQLQWKH'LUHFWRUWR0RYLHUHODWLRQVKLS %HFDXVHWKLVLVDRQHWRRQHUHODWLRQVKLSERWK
EHFDXVH0RYLHKDVDPXOWLSOLFLW\RI0DQ\7KLQN SDUWQHUVFRXOGVHWDFDVFDGHGHOHWH%XWZH
DERXWLWLIVRPHRQHGHOHWHVD0RYLHVKRXOG ZDQWLWWRJRLQRQO\RQHGLUHFWLRQZKHUH
WKDW'LUHFWRUEHGHOHWHG"2IFRXUVHQRW7KH GHOHWLQJWKH0RYLHGHOHWHVWKH7UDLOHUEXW
'LUHFWRUFRXOGVWLOOEHWKH'LUHFWRURIRWKHU QRWWKHUHYHUVH-XVWEHFDXVHWKH7UDLOHU
PRYLHVWKDWVWLOOH[LVW LVGHOHWHGGRHVQRWPHDQZHZDQWWKH0RYLH
GHOHWHGEXWWKDW·VGHWHUPLQHGE\RXUEXVLQHVV
%XWWKH'LUHFWRUKDVDPXOWLSOLFLW\RI2QH ORJLFDQGQRW(-%UXOHV
ZLWKWKH0RYLHVRWKH0RYLHEHDQFDQVD\´,
FDQKDYHRQO\RQH'LUHFWRUVRLIKHJRHV,JRµ

D'LUHFWRUUHPRYH

'LUHFWRU 7UDLOHU
0RYLH

D0RYLHUHPRYH

'LUHFWRU 0RYLH
7UDLOHU

D7UDLOHUUHPRYH

'LUHFWRU 0RYLH 7UDLOHU

\RXDUHKHUH 
UHODWLRQVKLSVLQWKHGHSOR\PHQWGHVFULSWRU

<PMIJ[\ZIK\[KPMUIQ[QV\PM$MV\Q\a&MTMUMV\IVL\PM
$MRJZMTI\QWV&Q[QV\PM$ZMTI\QWV[PQX[&MTMUMV\
HMEMDU!
GLVSOD\QDPH!0RYLH-DUGLVSOD\QDPH!
HQWHUSULVHEHDQV!
HQWLW\!
GLVSOD\QDPH!0RYLH%HDQGLVSOD\QDPH!
HMEQDPH!0RYLH%HDQHMEQDPH!
ORFDOKRPH!KHDG¿UVW0RYLH+RPHORFDOKRPH!
ORFDO!KHDG¿UVW0RYLHORFDO!
HMEFODVV!KHDG¿UVW0RYLH%HDQHMEFODVV!
SHUVLVWHQFHW\SH!&RQWDLQHUSHUVLVWHQFHW\SH!
SULPNH\FODVV!MDYDODQJ6WULQJSULPNH\FODVV!
UHHQWUDQW!)DOVHUHHQWUDQW!
FPSYHUVLRQ![FPSYHUVLRQ!
DEVWUDFWVFKHPDQDPH!0RYLH6FKHPDDEVWUDFWVFKHPDQDPH!
FPS¿HOG!
¿HOGQDPH!JHQUH¿HOGQDPH! The abstract schema for persiste
FPS¿HOG! Þelds is deÞned HERE in the <ennt
FPS¿HOG! element under <enterprise-beans>,tity >
whe
¿HOGQDPH!PRYLH,'¿HOGQDPH! all beans are described. re
FPS¿HOG!
FPS¿HOG!
missing!! There
¿HOGQDPH!\HDU¿HOGQDPH! WHOA! Notice whatfoÕs r Director. You
FPS¿HOG! is NO <cmp-Þeld>eld> elements inside
FPS¿HOG! donÕt list <cmr-Þion. TheyÕre deÞned
¿HOGQDPH!WLWOH¿HOGQDPH!
the <entity> sect tionships> section
ONLY in the <rela
FPS¿HOG!
SULPNH\¿HOG!PRYLH,'SULPNH\¿HOG!
VHFXULW\LGHQWLW\! (next page)
XVHFDOOHULGHQWLW\!XVHFDOOHULGHQWLW\!
VHFXULW\LGHQWLW\!
HQWLW\!

HQWLW\!
GLVSOD\QDPH!'LUHFWRU%HDQGLVSOD\QDPH!
HMEQDPH!'LUHFWRU%HDQHMEQDPH!
ORFDOKRPH!KHDG¿UVW'LUHFWRU+RPHORFDOKRPH!
ORFDO!KHDG¿UVW'LUHFWRUORFDO!
HMEFODVV!KHDG¿UVW'LUHFWRU%HDQHMEFODVV!
SHUVLVWHQFHW\SH!&RQWDLQHUSHUVLVWHQFHW\SH!
SULPNH\FODVV!MDYDODQJ6WULQJSULPNH\FODVV!
UHHQWUDQW!)DOVHUHHQWUDQW!
FPSYHUVLRQ![FPSYHUVLRQ!
DEVWUDFWVFKHPDQDPH!'LUHFWRU6FKHPDDEVWUDFWVFKHPDQDPH!
FPS¿HOG!
¿HOGQDPH!QDPH¿HOGQDPH!
FPS¿HOG!

 &KDSWHU
HQWLW\EHDQUHODWLRQVKLSV

FPS¿HOG!
¿HOGQDPH!ZLQQHU¿HOGQDPH!
FPS¿HOG!
FPS¿HOG!
¿HOGQDPH!GLUHFWRU,'¿HOGQDPH!
FPS¿HOG!
FPS¿HOG!
¿HOGQDPH!GHJUHHV¿HOGQDPH!
FPS¿HOG!
SULPNH\¿HOG!GLUHFWRU,'SULPNH\¿HOG!
VHFXULW\LGHQWLW\!
XVHFDOOHULGHQWLW\!XVHFDOOHULGHQWLW\!
VHFXULW\LGHQWLW\!
HQWLW\! ise-beans> section
HQWHUSULVHEHDQV! AFTER the <enterhaprve been described), we
(and all the beans ships> section that uses
UHODWLRQVKLSV! have the <relationnts to refer BACK to the
HMEUHODWLRQ! <ejb-name> eleme > section
<enterprise-beans
HMEUHODWLRQVKLSUROH!
HMEUHODWLRQVKLSUROHQDPH!'LUHFWRU%HDQHMEUHODWLRQVKLSUROHQDPH!
PXOWLSOLFLW\!2QHPXOWLSOLFLW\!
UHODWLRQVKLSUROHVRXUFH! This name MUST match someth
HMEQDPH!'LUHFWRU%HDQHMEQDPH!
DD, described in an <entity> eleing in this
UHODWLRQVKLSUROHVRXUFH!
<enterprise-beans> section ment in the
FPU¿HOG!
FPU¿HOGQDPH!PRYLHVFPU¿HOGQDPH!
FPU¿HOGW\SH!MDYDXWLO&ROOHFWLRQFPU¿HOGW\SH!
FPU¿HOG! <cmr-Þeld-type> is only when
HMEUHODWLRQVKLSUROH! necessari your partner (not
ly YOU) has a mu licity of Ma
be ONLY Collection or Setltip(NO ny. This can
 T List, Map, etc.)
HMEUHODWLRQVKLSUROH!
HMEUHODWLRQVKLSUROHQDPH!0RYLH%HDQHMEUHODWLRQVKLSUROHQDPH!
PXOWLSOLFLW\!0DQ\PXOWLSOLFLW\!
FDVFDGHGHOHWH!
UHODWLRQVKLSUROHVRXUFH! MovieBean says, ÒYou can delete
HMEQDPH!0RYLH%HDQHMEQDPH! when you delete my Director me
UHODWLRQVKLSUROHVRXUFH!
Ó
FPU¿HOG!
FPU¿HOGQDPH!GLUHFWRUFPU¿HOGQDPH!
FPU¿HOG!
HMEUHODWLRQVKLSUROH! ause the Director has a
No <cmr-Þeld-type> bec tionship, so we return
HMEUHODWLRQ! multiplicity of One in this rela n of Directors.
UHODWLRQVKLSV! only one Director, not a Collectio
\RXDUHKHUH 
WKH0RYLH%HDQFRGH

5W^QM*MIVKWLM_Q\PI+5:NQMTL
SDFNDJHKHDG¿UVW

LPSRUWMDYD[HME 
LPSRUWMDYD[QDPLQJ 
LPSRUWMDYDXWLO 

SXEOLFDEVWUDFWFODVV0RYLH%HDQLPSOHPHQWV(QWLW\%HDQ^

SULYDWH(QWLW\&RQWH[WFRQWH[W

SXEOLF6WULQJHME&UHDWH 6WULQJPRYLH,'6WULQJWLWOHLQW\HDU6WULQJJHQUH
6WULQJGLUHFWRU,' WKURZV&UHDWH([FHSWLRQ^

r
VHW0RYLH,' PRYLH,' 
we se t ou r pe rs ist en t Þelds, by calling ourence
VHW7LWOH WLWOH  Here e must NOT try toTha refe
VHW<HDU \HDU  abstract setters. WRE L ATIONS HI PS . t has to
our ow n pe rs ist en t at happens
en inserted, and th
VHW*HQUH JHQUH 
UHWXUQQXOO wa it un ti l W E ha ve be
e() completes.
`
only AFTER ejbCreat

SXEOLFYRLGHME3RVW&UHDWH 6WULQJPRYLH,'6WULQJWLWOHLQW\HDU6WULQJJHQUH
6WULQJGLUHFWRU,' WKURZV&UHDWH([FHSWLRQ^
WU\^
,QLWLDO&RQWH[WFW[ QHZ,QLWLDO&RQWH[W 
'LUHFWRU+RPHGLU+RPH  'LUHFWRU+RPH FW[ORRNXS ³MDYDFRPSHQYHME'LUHFWRU+RPH´ 

'LUHFWRUGLU GLU+RPH¿QG%\3ULPDU\.H\ GLUHFWRU,' 
VHW'LUHFWRU GLU 
`FDWFK ([FHSWLRQH[ 
^KDQGOHH[FHSWLRQ`
Now itÕs safe to assign our persistent relationship
` Þeld for Director. We lookup the Director (using
the directorID parameter from create) and call our
abstract setter to assign this Director.

SXEOLF6WULQJHME+RPH/LVW0RYLHV%\'LUHFWRU$QG*HQUH 6WULQJGLU,'6WULQJJHQUH ^
6WULQJOLVW QXOO
WU\^
&ROOHFWLRQF HME6HOHFW*HW0RYLHV%\'LUHFWRU$QG*HQUH GLU,'JHQUH 
,WHUDWRULW FLWHUDWRU 
t to
ZKLOH LWKDV1H[W ^
e ss m e t h o d for the clien the
OLVW LWQH[W  A home businf all the movies that Þtthat
` get a list ouse an ejbSelect method cts.
`FDWFK ([FHSWLRQH[ ^H[SULQW6WDFN7UDFH `
query. We ollection of String objehe
UHWXUQOLVW
returns a Cselect method, we let tcode!
` ng a base
By usi write all the data
Container

 &KDSWHU
HQWLW\EHDQUHODWLRQVKLSV
SXEOLF6WULQJHME+RPH/LVW$OO0RYLHV ^
6WULQJOLVW QXOO
WU\^
&ROOHFWLRQF HME6HOHFW*HW$OO0RYLHV  nother home business method
A to Þnd
,WHUDWRULWD FLWHUDWRU 
th at uses a select methodturns a
re
all movies. This selecaltMovie objects,
ZKLOH LWDKDV1H[W ^
0RYLHPRYLH  0RYLH LWDQH[W  ac tu
OLVW ³³PRYLHJHW0RYLH7LWOH  Collection of it and pull out
` so we walk through we can return a
 the titles, so thatclient.
`FDWFK ([FHSWLRQH[ ^KDQGOHH[FHSWLRQ` big String to the
UHWXUQOLVW
`

SXEOLF6WULQJJHW0RYLH7LWOH ^
UHWXUQJHW7LWOH 
Two exposed business methods from
`
the component interface...

SXEOLF6WULQJJHW0RYLH'LUHFWRU1DPH ^
UHWXUQJHW'LUHFWRU JHW'LUHFWRU1DPH 
`

SXEOLFDEVWUDFW6WULQJJHW0RYLH,' 
SXEOLFDEVWUDFWYRLGVHW0RYLH,' 6WULQJL 
 We have FIVE virtual Þelds:
SXEOLFDEVWUDFW6WULQJJHW7LWOH 
SXEOLFDEVWUDFWYRLGVHW7LWOH 6WULQJW 

four CMP Þelds and
SXEOLFDEVWUDFWLQWJHW<HDU 
SXEOLFDEVWUDFWYRLGVHW<HDU LQW\  one CMR Þeld for Director.

SXEOLFDEVWUDFW6WULQJJHW*HQUH 
SXEOLFDEVWUDFWYRLGVHW*HQUH 6WULQJJ 

SXEOLFDEVWUDFW'LUHFWRUJHW'LUHFWRU 
SXEOLFDEVWUDFWYRLGVHW'LUHFWRU 'LUHFWRUG 

SXEOLFDEVWUDFW&ROOHFWLRQHME6HOHFW*HW$OO0RYLHV WKURZV)LQGHU([FHSWLRQ

SXEOLFDEVWUDFW&ROOHFWLRQHME6HOHFW*HW0RYLHV%\'LUHFWRU$QG*HQUH 6WULQJGLU6WULQJ
JHQUH WKURZV)LQGHU([FHSWLRQ
The two select methods are declared as
 abstract methods. The Collection doesnÕt say
SXEOLFYRLGXQVHW(QWLW\&RQWH[W ^` WHAT the methods will return... but weÕll tell
SXEOLFYRLGHME/RDG ^`
SXEOLFYRLGHME6WRUH ^`
the Container that one will return a Collection
SXEOLFYRLGHME$FWLYDWH ^` of Movies and one a Collection of Strings.
SXEOLFYRLGHME3DVVLYDWH ^`
SXEOLFYRLGHME5HPRYH ^`
The rest are
SXEOLFYRLGVHW(QWLW\&RQWH[W (QWLW\&RQWH[WFW[ ^
regular old callback
FRQWH[W FW[ metho ds.
`
`

\RXDUHKHUH 
WKH0RYLH+RPH5HPRWHLQWHUIDFH

<PM5W^QM*MIV¼[PWUMQV\MZNIKM

LPSRUWMDYD[HME 
LPSRUWMDYDXWLO 
LPSRUWMDYDUPL 

SXEOLFLQWHUIDFH0RYLH+RPH5HPRWHH[WHQGV(-%+RPH^

SXEOLF0RYLH5HPRWHFUHDWH 6WULQJPRYLH,'6WULQJWLWOHLQW\HDU6WULQJJHQUH
6WULQJGLUHFWRU,' WKURZV&UHDWH([FHSWLRQ5HPRWH([FHSWLRQ

SXEOLF0RYLH5HPRWH¿QG%\3ULPDU\.H\ 6WULQJNH\ WKURZV)LQGHU([FHSWLRQ


5HPRWH([FHSWLRQ

SXEOLF&ROOHFWLRQ¿QG%\*HQUH 6WULQJJHQUH WKURZV)LQGHU([FHSWLRQ5HPRWH([FHSWLRQ

SXEOLF6WULQJOLVW$OO0RYLHV WKURZV)LQGHU([FHSWLRQ5HPRWH([FHSWLRQ

SXEOLF6WULQJOLVW0RYLHV%\'LUHFWRU$QG*HQUH 6WULQJGLUHFWRU,'6WULQJJHQUH
WKURZV)LQGHU([FHSWLRQ5HPRWH([FHSWLRQ

SXEOLF&ROOHFWLRQ¿QG0RYLHV%\.HYLQ'HJUHHV LQWGHJUHHV WKURZV)LQGHU([FHSWLRQ


5HPRWH([FHSWLRQ
`

Whoa! There are three


Þn
werenÕt in the bean cla der methods that
ss...
implements your Þnder remember, the Container ss m e t h o d s all start with
me ne
ANYTHING about Þnde thods--you donÕt put The home busi omeÓ when theyÕre in the
rs jb H
You put them ONLY in in your bean class code. the preÞx Òe e home, they donÕt have
h
the home. bean class. In t
(well, thatÕs not complet
ely true...somewhere yo that preÞx.
have to tell the Contai u
ner HOW to implement
Þnders, which brings us the
to the next page...)

 &KDSWHU
HQWLW\EHDQUHODWLRQVKLSV

+RZWKHKHFN
$QG ZKDW
GRHVWKH&RQWDLQHU DERXWWKH)LQGHU
NQRZKRZWRLPSOHPHQW PHWKRGV",FDQXQGHUVWDQG
WKHVHOHFWPHWKRGV" KRZLWFDQGRÀQG%\3ULPDU\.H\
EHFDXVHLWDOUHDG\NQRZVWKH
NH\EXWZKDWDERXWWKH
RWKHUV"

$QGZKLOH,·P
DWLW+2:'2(6,7.12:
:+$7<285),(/'60$372
,17+('$7$%$6("+RZGR\RX
OLQN\RXUDEVWUDFWVFKHPDWRUHDO
GDWDEDVHWDEOHVDQGFROXPQV"

\RXDUHKHUH 
GDWDEDVHWRHQWLW\PDSSLQJ

5IXXQVONZWUIJ[\ZIK\[KPMUI\WIZMITLI\IJI[M
3OONERORLATER YOUHAVETOTELLTHE#ONTAINERHOWANDWHERETOMANAGEYOUR
PERSISTENTDATA4HISHAPPENSOUTSIDETHEDEPLOYMENTDESCRIPTOR INAVENDOR
SPECIlCWAY4HATMEANS OFCOURSE THATYOURENOTTESTEDONITINTHEEXAM%VERY
VENDORHASTHEIROWNMECHANISM BUTYOULLUSUALLYGETSOMESORTOFA'5)WHERE
IFYOURELUCKY YOUCANTELLTHE#ONTAINERTOCONNECTTOASPECIlCDATABASE AND
THENYOULLDRAGANDDROPORDRAWCONNECTIONSFROM#-0lELDSTOCOLUMNSIN
ONEORMORETABLES
"ECAUSETHISMAPPINGHAPPENSOUTSIDEOF%*" INTHESERVER THERESNOTMUCH
WECANSAYABOUTIT4HEPARTWEREMOSTINTERESTEDINISMAPPINGFROMABSTRACT
QUERIESTO2%!,QUERIES ANDTHATHAPPENSINAVERYCOOLWAY USINGAVENDOR
INDEPENDENTQUERYLANGUAGEJUSTFORYOURENTITYBEANQUERIES %*" 1,7ELLLOOK
ATTHATONTHENEXTPAGE

DEVWUDFWVFKHPDQDPH!0RYLH6FKHPDDEVWUDFWVFKHPDQDPH!

FPS¿HOG! Notice that weÕre not


ma
¿HOGQDPH!JHQUH¿HOGQDPH! column (the one that ke pping the Director ID
ep
FPS¿HOG!
the Director table) be s the foreign key into
caus
FPS¿HOG! persistent CMP Þeld fo e we donÕt HAVE a
r
¿HOGQDPH!PRYLH,'¿HOGQDPH! that, when we can have the Director ID. Why do
th
entity bean, instead? T e real Director, as an
FPS¿HOG!
ha
FPS¿HOG! comes in, but we donÕt tÕs where our CMR Þeld
¿HOGQDPH!\HDU¿HOGQDPH! map that to a database
Relationships happen by .
FPS¿HOG! matching up two BEANS
the <relationships> part in
FPS¿HOG! of the DD.
¿HOGQDPH!WLWOH¿HOGQDPH!
FPS¿HOG!
SULPNH\¿HOG!PRYLH,'SULPNH\¿HOG!

0RYLH,' 7LWOH *HQUH 'LUHFWRU,' <HDU

 &URXFKLQJ3L[HOV+LGGHQ0RXVH $FWLRQ  

 7KH)LIWK$UUD\(OHPHQW $FWLRQ  

 7KH5HWXUQRIWKH%HDQ4XHHQ )DQWDV\  

 /RUGRIWKH/RRSV 6FL¿  

 &KDSWHU
HQWLW\EHDQUHODWLRQVKLSV

?ZQ\QVOaW]ZXWZ\IJTMY]MZQM[NWZ[MTMK\IVLNQVLMZUM\PWL[

5HPHPEHU,·PD
SURJUDPPHUVRWKHOHVV, %*" 1,ISAPORTABLEQUERYLANGUAGETHATLETSYOU
NQRZWKHKDSSLHU,DP:LWK WRITE31, LIKESTATEMENTSWRITEINTOTHEDEPLOYMENT
(-%4/,GRQ·WKDYHWRNQRZ DESCRIPTOR9OUPUTTHEMINTHE8-,ANDWITHOUT
DQ\WKLQJDERXWWKHUHDOGDWDEDVH HAVINGTOKNOWANYTHINGABOUTTHEREALDATABASE
ZKHUHP\EHDQZLOOHQGXS
UXQQLQJ !SA"EAN0ROVIDER YOUCANHAPPILYWRITEALLTHE
QUERIESYOUWANT TRUSTINGTHATTHE$EPLOYERWILL INTHE
END MAPYOUR#-0lELDSTOREALTABLESANDDATA!LL
WECAREABOUTHEREISWRITINGOURQUERIESTOMATCHTHE
METHODSWEVECHOSENTOEXPOSETOTHECLIENTINTHE
HOMEANDCOMPONENTINTERFACES
3ELECTMETHODSAREHERESIMPLYTOMAKEYOURLIFE
EASIER BYLETTINGTHE#ONTAINERBUILDTHEREALDATABASE
ACCESSCODEFROMYOURQUERIES
3OTHEPROCESSISUSUALLYSOMETHINGLIKE
7RITEAHOMEBUSINESSMETHOD
)MPLEMENTTHEHOMEBUSINESSMETHODTOCALL
THEEJB3ELECTMETHODTHATDOESTHEREALDATAACCESS
$ECLARETHEABSTRACTSELECTMETHODINYOURBEAN
CLASS
7RITETHE%*" 1,FORTHESELECTQUERY

\RXDUHKHUH 
(-%4/TXHULHV

-2*94NWZ\PM5W^QM*MIV
,ETSLOOKATTHE%*" 1,FORALLTHEQUERIESTHE-OVIE"EANNEEDS$ONTWORRYIFYOURE
NOTUNDERSTANDINGALLOFITAFTERWEWALKTHROUGHTHEEXAMPLES WELLEXPLORETHE
DIFFERENTPIECESINDETAIL ANDWORKOUTTHESYNTAX)FYOUKNOW31, MOSTOFTHISWILLBE
FAMILIARALTHOUGHTHEREAREFEWDIFFERENCESYOULLSEE )FYOUDONTKNOW31, THATS
/+7ELLGETYOUSTARTEDWRITINGQUERIES ANDYOUCANUSETHESPECTOLEARNMOREABOUT
THE%*" 1,LANGUAGE4HEEXAMEXPECTSYOUTOKNOWJUSTTHEBASICSOF%*" 1,

eturns a
The method r ovie objects
M
,QWKHEHDQFODVV
Collection of
SXEOLFDEVWUDFW&ROOHFWLRQHME6HOHFW*HW$OO0RYLHV WKURZV)LQGHU([FHSWLRQ

,QWKHWKHGHSOR\PHQWGHVFULSWRU
6(/(&72%-(&7 P )5200RYLH6FKHPDP

ÔmÕ
d e c la rin g a va riable... ÒLet vie
e o
This says ÒReturn what
ever This is just lik bstract schema from the M , ÒLet
representing.Ó In this ex ÔmÕ is a k e
am represent the an REALLY think of it li type.
to represent MovieSch ple, ÔmÕ is said c
bean. But you e Movie component interface means,
ema which really th Y
means the Movie entity
be ÔmÕ represent Movie beans. So it REALL
Þrst part says, ÒGive me an type. So this d s,
In other wor nt a Movie bean.
Movie beansÓ. se
ÒLet ÔmÕ repre

:KDWLWUHDOO\VD\V
³*LYHPHDOOWKH0RYLHEHDQV´

 &KDSWHU
HQWLW\EHDQUHODWLRQVKLSV

=[QVOIVWX\QWVIT?0-:-KTI][M
4HISEXAMPLECONSTRAINSTHEOBJECTSRETURNEDFROMTHESEARCH BYADDINGA7(%2%
CLAUSETHATSAYSWHATEXTRACRITERIATHEOBJECTSHAVETOMEETBEFORETHEYQUALIFYFOR
hTHINGSTHATCANBERETURNEDFROMTHEQUERYv4HE7(%2%CLAUSEISYOURWAYOF
SAYING h$ONTJUSTGIVEME!.9OLD-OVIE)WANT/.,9THEMOVIESTHATv

eturns a
The method fr Movie objects
,QWKHEHDQFODVV Collection o
SXEOLFDEVWUDFW&ROOHFWLRQHME6HOHFW*HW$OO0RYLHV WKURZV)LQGHU([FHSWLRQ

the
en re Ó m ust b e CMP Þeld in can
Òg hich means yo u
Movie bean, w re() / setGenre()
Þnd a getGen the bean class
,QWKHWKHGHSOR\PHQWGHVFULSWRU method pair in
6(/(&72%-(&7 P )5200RYLH6FKHPDP:+(5(PJHQUH " this means the
Þrst parameter
to the method
This says we want the n t t h e
type of whatever ÔmÕ tubean Let ÔmÕ reprteysepe vie s r e t u rned to only
Movie b e a n e M o
out to be... rns restrict th C M P Þeld ÒgenreÓ
e r e t h e
those wh st p arameter of t rst
he
e s t h e Þ r he Þ
match he Ò1Ó means t he dot
c t m e t h o d T
sele st
a r a m e t e r . T h e Òm.genreÓ use ÒpathÓ
p a
rator to make
navigation ope an object-oriented
in
:KDWLWUHDOO\VD\V that navigates the left hand operand
Ñ
way. ItÕs simple he right hand is a
³*LYHPHDOOWKH0RYLHEHDQVWKDWDUHLQWKH
is a type, and t hat type. ItÕs almost
ft
member Þeld o g regular Java syntax to
JHQUHPDWFKLQJWKH¿UVWSDUDPHWHUWRWKH
HME6HOHFW*HW$OO0RYLHVPHWKRG´ n
exactly like usi enreÓ, where genre is an
e .g
say, ÒmyMovi (in this case, a virtual
le
instance variab
.)
persistent Þeld

\RXDUHKHUH 
SDWKQDYLJDWLRQ

6I^QOI\QVO\WIVW\PMZZMTI\MLJMIV
4HISEXAMPLEISFORAlNDERMETHOD SOYOUWONTlNDITINTHEBEANCLASS
REMEMBER YOUDECLAREABSTRACTMETHODSFORONLYTHESELECTMETHODS NOTTHE
lNDERS4HE#ONTAINERUSESYOURHOMEINTERFACETOlGUREOUTWHATTHElNDERSARE
ANDTHENITSUPTOYOUTOWRITETHE%*" 1,FORTHElNDERS 
9OUCANUSETHEDOTOPERATORTONAVIGATENOTJUSTTOA#-0lELDINTHEBEAN BUTTO
ANOTHERlELDWITHINABEANREFERENCEDINA#-2lELD)NOTHERWORDS )F-OVIEHASA
REFERENCETOA$IRECTORANDTHEYREINARELATIONSHIP YOUCANUSETHE-OVIETOGET
TOTHE$IRECTORTOASKFORA#-0VALUEFROMTHE$IRECTOR

,QWKHKRPHLQWHUIDFH
SXEOLF&ROOHFWLRQ¿QG0RYLHV%\.HYLQ'HJUHHV LQWGHJUHHV WKURZV)LQGHU([FHSWLRQ
5HPRWH([FHSWLRQ

ns Òthe
m.director mea ectorÕ in ÒdegreesÓ is
CMR Þeld ÔdirnÓ persistent Þa
the Movie bea the Directo eld in
,QWKHWKHGHSOR\PHQWGHVFULSWRU r bean.
6(/(&72%-(&7 P )5200RYLH6FKHPDP:+(5(PGLUHFWRUGHJUHHV "

This says that we want o you know?


objects returned wh ... and what dthat ÔmÕ restrict the Movies returned to only those
is whatever ÔmÕ turnsosoue type It turns out ovie bean where the MovieÕs Director has a CMP
be representing... t to means the M ÒdegreesÓ Þeld with a value that matches
the Þrst parameter of the Þnder.

:KDWLWUHDOO\VD\V
³*LYHPHDOOWKH0RYLHEHDQVWKDWKDYHD'LUHFWRU
ZKRVHGHJUHHVPDWFKZKDWWKHFOLHQWVHQWLQWR
WKH¿QGHUPHWKRG´
25
³,ZDQWWRJHW0RYLHVEDFNEXWRQO\WKRVH0RYLHV
GLUHFWHGE\VRPHRQHZKRLVDVSHFL¿FQXPEHU
RIGHJUHHVDZD\IURP.HYLQ%DFRQ´ 6L[GHJUHHVIURP.HYLQ%DFRQLVDSRSXODUJDPH
ZKHUH\RXWU\WRWDNHD+ROO\ZRRGW\SHDQGVHH
KRZPDQ\FRQQHFWLRQVLWWDNHVWRJHWWKDWSHUVRQ
OLQNHGWR.HYLQ%DFRQµ

 &KDSWHU
HQWLW\EHDQUHODWLRQVKLSV

;MTMK\QVOI^IT]MZI\PMZ\PIV\PM_PWTMJMIV
4HISEXAMPLEISFORAHOMEBUSINESSMETHODTHATTAKESTWOPARAMETERS
ANDRETURNSNOT-OVIES BUT3TRINGS

,QWKHKRPH
LQWHUIDFH t ur ns a si ng le String, with all
This method re s that match the query.
the Movie title
SXEOLF6WULQJHME+RPH/LVW0RYLHV%\'LUHFWRU$QG*HQUH 6WULQJGLU,'6WULQJJHQUH

,QWKHWKHGHSOR\PHQWGHVFULSWRU

this is different! WeÕre returning just


Movie titles, not Movie objects
the ÒgenreÓ
m.genre means the Movie bean
6(/(&7PWLWOH)5200RYLH6FKHPDP CMP Þeld in

:+(5(PGLUHFWRUGLUHFWRU,' "$1'PJHQUH "

This restricts the matc


Movies with a Director hes to only those AND whose Movie genre value equals the
equal to the Þrst para who has an ID second parameter to the method
method meter to the

:KDWLWUHDOO\VD\V
³*LYHPHEDFN0RYLHWLWOHV 6WULQJV WKDWKDYH
WKHGLUHFWRUDQGJHQUH,VSHFL¿HGLQWKHPHWKRG
DUJXPHQWV´

\RXDUHKHUH 
(-%4/6(/(&7

-2*94;-4-+<
.OWTHATYOUVESEENSOMEQUERIES WELLLOOKATSOMEOFTHEDETAILSANDRULES

4XHU\'RPDLQV
4HEDOMAINOFAQUERYISASINGLEDEPLOYMENTDESCRIPTOR3OTHATMEANSASINGLEEJB
JARlLE(OWEVERMANYBEANSYOUCANSQUISHINTHEEJB JAR THATSHOWMANYBEANSYOU
CANSEARCHACROSS

6(/(&7
4HE3%,%#4CLAUSESAYSWHATKINDOFTHINGTHISQUERYWILLRETURN
)TCANBEONLYONEOFTHESETWO

 DQDEVWUDFWVFKHPDW\SHIRUDQHQWLW\EHDQ

DEVWUDFWVFKHPDQDPH!0RYLH6FKHPDDEVWUDFWVFKHPDQDPH!


6(/(&72%-(&7 P )5200RYLH6FKHPDP fo r m al E J B terms (and in a


In abstract schem
the spec) the ECT variable
25 type as a SELNGE variable,
is called a RA ges over the
because it ran bean type.
 DFPSÀHOG!VLQJOHYDOXHW\SHIRUDQHQWLW\EHDQ entire entity
FPS¿HOG!
¿HOGQDPH!WLWOH¿HOGQDPH! When you use a <cmp-Þeld>
FPS¿HOG! instead of a range variable, we
6(/(&7PWLWOH)5200RYLH6FKHPDP
call this a single-valued path
expression.

NOTE: weÕre deviating from


<RXFDQ·WXVHGRWQRWD
UHWXUQD&0 5ÀHOG
WLRQWR standard spec naming conventions in
our abstract schema name, because
UH2. we want it to be OBVIOUS that
$VD6(/(&7W\SHWKHVHD
PWLWOHRUPJHQUH
weÕre using the schema name and not,
say, the bean name. In the spec, the
%XWWKLVLV1272. abstract schema name is the same
PGLUHFWRU as the component interface name.
WQRWD&05¿HOGZLWK
<RXFDQXVHD&03¿HOGEX
/(&7W\SH
WKHGRWQRWDWLRQDVWKH6(

 &KDSWHU
HQWLW\EHDQUHODWLRQVKLSV

-2*94;-4-+<¸_PMV\W][M7JRMK\
7HATSWITHTHE/"*%#4M THING
)TSASTRUCTURETHE*%%DESIGNERSPUTINTOBECONSISTENTWITHA
VERSIONOF31,
)TSANNOYING
"UTYOUHAVETODOITWHENEVERYOURETURNABEANTYPEINSTEADOFA
#-0lELDTYPE!NDYOUMUST./4DOITWHENEVERYOURETURNA
#-0lELDTYPE

,I\RXUHWXUQWKHEHDQ·VDEVWUDFW
VFKHPDW\SHXVH2%-(&7  
DEVWUDFWVFKHPDQDPH!0RYLH6FKHPDDEVWUDFWVFKHPDQDPH!
6(/(&72%-(&7 P

,I\RXUHWXUQDFPSILHOG!
GRQ·WXVH2%-(&7 
FPS¿HOG!
¿HOGQDPH!WLWOH¿HOGQDPH!
FPS¿HOG!

6(/(&7PWLWOH
in g t h e d o t , to navigate a
If youÕre us Õt use the OBJECT ( )
path, you don

6KDUSHQ \RXU SHQFLO


&LUFOHWKH(-%4/VWDWHPHQWLILWKDVDOHJDO6(/(&7FODXVH

6(/(&72%-(&7 P )5200RYLH6FKHPDP

6(/(&7PWLWOH)5200RYLH6FKHPDP

6(/(&7P)5200RYLH6FKHPDP

6(/(&72%-(&7 PWLWOH )5200RYLH6FKHPDP

\RXDUHKHUH 
(-%4/6(/(&7

?PI\LWM[Q\5-)6\WZM\]ZVIV
I J[\ZIK\[KPMUI\aXM'

7KHDEVWUDFWVFKHPDLVMXVWDVWXSLG
ODEHOLQ;0/VRREYLRXVO\7+$7LVQRW
ZKDW\RX·UHUHWXUQLQJ<RX·UHUHWXUQLQJWKH
EHDQW\SH%XWWKDWFDQ·WEHULJKWHLWKHU\RX·UH
REYLRXVO\UHWXUQLQJWKHFRPSRQHQWLQWHUIDFHW\SH
EXW7+$7FDQ·WEHULJKWEHFDXVHKRZZRXOGLW
NQRZLILW·VVXSSRVHGWRJLYH\RXWKHORFDO 7KH0RYLH6FKHPDDEVWUDFWVFKHPDQDPH
RU5HPRWHW\SH UHSUHVHQWVWKHEHDQW\SH

$VLIE\PDJLFWKH&RQWDLQHUNQRZVZKLFK
LQWHUIDFHYLHZWRUHWXUQORFDORU5HPRWH
GHSHQGLQJRQZKHWKHUWKHLQYRFDWLRQRIWKH
TXHU\FDPHIURPDKRPHRU5HPRWHLQWHUIDFH

0RYLH/RFDO 0RYLH5HPRWH

You never have JHW0RYLH,' JHW0RYLH,'


to worry aboutype JHW7LWOH JHW7LWOH
whether the t ote JHW*HQUH JHW*HQUH
is local or Rem JHW'LUHFWRU JHW'LUHFWRU
JHW7UDLOHU JHW7UDLOHU

:KHQ\RXVHHWKLV
0RYLH6FKHPDP

7KLQNWKLV
P WKHFRPSRQHQWLQWHUIDFH

DQGZH¶OOOHWWKH&RQWDLQHUVRUWRXWWKH
5HPRWHYVORFDOLVVXH

 &KDSWHU
HQWLW\EHDQUHODWLRQVKLSV

;-4-+<IVL.:75IZMUIVLI\WZa

9OUGOTTAHAVE3%,%#4AND&2/-NOMATTERWHAT BUTTHE7(%2%
CLAUSEISOPTIONAL7ITH3%,%#4 YOUCANALSOUSETHEKEYWORD$)34).#4
TOSAYTHATYOUDONTWANTANYDUPLICATESRETURNEDINYOUR#OLLECTION

use it declare it

6(/(&7',67,1&72%-(&7 P )5200RYLH6FKHPDP

ns in the FROM, we declare


DISTINCT mea identiÞcation variable Òm the
Ó
Òno duplicates thatÕs used in the SELE Ó
CT.

4HE&2/-CLAUSEDECLARESTHEIDENTIlCATIONVARIABLELIKETHEhMvINOUR
EXAMPLEQUERY 4HISALSODElNESTHEDOMAINOFTHEQUERYBYSAYINGTOTHE
#ONTAINER h(ERESWHERE)WANTYOUTOBELOOKINGv4HEORDERINWHICHTHE
&2/-AND3%,%#4MIGHTFEELALITTLESTRANGEIFYOURENOTUSEDTO31,"UT
THINKOFITLIKESOMEONESAYING h)WANTYOUTOGOGETMYTHINGS ANDTHETHINGS
)MTALKINGABOUTARE&2/-MYTOPDRAWERv
)FYOUNEEDTODECLAREMOREIDENTIlCATIONVARIABLESTOUSELATERINTHEQUERY
YOUCANSEPARATETHEMWITHACOMMA

6(/(&72%-(&7 P  We declared two differe


)5200RYLH6FKHPDP'LUHFWRU6FKHPDG and deÞned the domain nt identiÞers,
of the query
to those two abstract sch
emas.
9OUCANALSOUSETHE!3KEYWORD)TSOPTIONAL BUTYOUMIGHTSEEITONTHEEXAM
ORINSOMEONEELSESCODE ORYOURCOMPANYSTYLEGUIDEMIGHTINSISTONUSINGIT
7ERETOOLAZYTOKEEPTYPINGIT

6(/(&72%-(&7 P )5200RYLH6FKHPD$6P

\RXDUHKHUH 
(-%4/LGHQWL¿HUV

1LMV\QNQMZ[

7HENYOUMAKEANIDENTIlER YOUHAVETOFOLLOWTHE*AVA
PROGRAMMINGLANGUAGEGUIDELINESFORWHATYOUCANNAMETHINGS
9OUCANTUSETHEOTHER*AVAIDENTIlERS

,GHQWLÀHUV

0XVWEHYDOLG-DYDLGHQWLILHUV

0XVW127EHVDPHDVDQDEVWUDFWVFKHPDQDPH!
RUHMEQDPH!DQ\ZKHUHLQWKH''

0XVW127EHRQHRIWKH(-%4/UHVHUYHGZRUGV
?
:DWFKRXWIRU
TXHVWLRQVZLWK
QDPHFRQÁLFWV
(-%4/UHVHUYHGZRUGV DPH!PXVW
5HPHPEHUWKDWDQHMEQ
FK EHDQLQ WKHHMEMDU
EHXQLTXHIRUHD
6(/(&7 25 HFRPSOHWH
ZKLFKPHDQVXQLTXHIRURQ
UWK HDEVWUDFW
''7KHVDPHLVWUXHIR
)520 %(7:((1 H! LWPXVWEH XQ LTXHLQ
VFKHPDQDP
WKH''
:+(5( /,.(
XFDQ¶WXVHDQ
<RXDOUHDG\NQRZWKDW\R
RXUTXHU\WKDW
',67,1&7 ,1 LGHQWL¿FDWLRQYDULDEOHLQ\
DP H!RU DEVWUDFW
PDWFKHVDQHMEQ
2%-(&7 $6 DP H!LQWKH '' EXWNHHSLQ
VFKHPDQ
VHVHQVLWLYH
PLQGWKDW(-%4/LVQRWFD
18// 81.12:1
LV
6R\RXPXVW127GRWK

758( (037< 6(/(&72%-(&7 PRYLH
)5200RYLHPRYLH
)$/6( 0(0%(5
In EJB-QL, ÒMovieÓ is the
127 2) same as ÒmovieÓ, and you
canÕt have conßicting names.
$1' ,6

QRWXVHGLQWKHFXUUHQWYHUVLRQLW¶VIXWXUHXVHLVXQNQRZQ

 &KDSWHU
HQWLW\EHDQUHODWLRQVKLSV

<PM?0-:-KTI][M

!7(%2%CLAUSEISOPTIONAL ANDLETSYOUPUTEXTRACONDITIONSONWHATS
RETURNED2EMEMBERTHATWITHOUTONE WEGOTEVERYTHINGOFTHETYPEUSED
INTHE3%,%#4

127XVLQJ:+(5(
6(/(&72%-(&7 P )5200RYLH6FKHPDP

([LVWLQJ(QWLWLHV (QWLWLHVUHWXUQHG
IURPWKHTXHU\

0RYLH 0RYLH 0RYLH 0RYLH


0RYLH 0RYLH

0RYLH
0RYLH 0RYLH
0RYLH
0RYLH 0RYLH 0RYLH 0RYLH

0RYLH 0RYLH 0RYLH 0RYLH

ng
Enclose a siSntgrile quotes
literal in
8VLQJ:+(5(
6(/(&72%-(&7 P )5200RYLH6FKHPDP:+(5(PJHQUH µ+RUURU¶

([LVWLQJ(QWLWLHV (QWLWLHVUHWXUQHG
IURPWKHTXHU\
movies
n g W H E RE , w e get only the their
Usi in
value ÒHorrorÓ
0RYLH 0RYLH
0RYLH 0RYLH
0RYLH that have the reÓ. (In other words,
CMP Þeld Ògenhose getGenre() method
0RYLH
0RYLH 0RYLH those movies wÒHorrorÓ.)
0RYLH 0RYLH
would return
0RYLH 0RYLH

\RXDUHKHUH 
WKH:+(5(FODXVH

<PM?0-:-KTI][M

<RXFDQXVHOLWHUDOV
:+(5(PGLUHFWRUGHJUHHV!
:+(5(PJHQUH µ+RUURU¶

<RXFDQXVHLQSXWSDUDPHWHUV
:+(5(PGLUHFWRUGHJUHHV!"

$QGWKHSDUDPHWHUVGRQ·WKDYHWREHLQRUGHU
WKDW·VZK\WKH\KDYHQXPEHUV
:+(5(PJHQUH "$1'PGLUHFWRUGHJUHHV"

SXEOLF6WULQJHME+RPH/LVW0RYLHV%\'LUHFWRU$QG*HQUH 6WULQJGLU,'6WULQJJHQUH

<RXFDQGRFRPSDULVRQV
:+(5(PGLUHFWRUGHJUHHV

%XW\RXEHWWHUFRPSDUHDSSOHVWRDSSOHV
:+(5(PGLUHFWRU 6W
or
o u ca n Õt co m pare a Direct
Y eric type!
bean to a num

 &KDSWHU
HQWLW\EHDQUHODWLRQVKLSV

<PMXZWJTMU_Q\P][QVO+ WTTMK\QWV\aXM[

)MAGINEYOUWANTTOUSETHE$IRECTOR3CHEMATORETURNALLTHE
$IRECTORSTHATHAVEMADEHORRORMOVIES3OUNDSPRETTYSIMPLE
$IRECTORHASA#-2lELDFORMOVIES ANDEACHMOVIEHASA#-0
lELDFORGENRE3OWECOMEUPWITHSOMETHINGLIKETHIS

Þrst glance,
6(/(&72%-(&7 G  Looks good on UT! This is
)520'LUHFWRU6FKHPDG but WATCH O
:+(5(GPRYLHVJHQUH µ+RUURU¶ NOT LEGAL.

7HYCANTYOUDOTHIS 'RJ
,ETSBACKUPANDIMAGINETHISIS*AVACODE(OWDOYOUNORMALLY
USETHEDOTOPERATORIN*AVA9OUMIGHTDOSOMETHINGLIKE
YRLGEDUN
2ZQHUR QHZ2ZQHU 
e can go
RJHW'RJ EDUN  This is Þne.he.. Owwner, get its 2ZQHU
through t call bark() on the
method of Ow
ner method of Dog Dog, and og. 'RJD'RJ
OwnerÕs d
'RJJHW'RJ

4HE/WNERHASAGET$OG METHOD ANDTHE$OGHASABARK 


.OPROBLEM
"UTWHATIFWECHANGEDTHE/WNERTOALLOWONE/WNERTOHAVE
MULTIPLE$OGOBJECTS4HENWHATHAPPENS
2ZQHU
2ZQHUR QHZ2ZQHU 
RJHW'RJV EDUN  &ROOHFWLRQGRJV
&ROOHFWLRQJHW'RJV
method of really
Owner S !! N o w w ho are weA Dog?
YIKE this method on?
calling llection...
Or a Co

\RXDUHKHUH 
XVLQJFROOHFWLRQVLQDSDWK

+WTTMK\QWV[LWV¼\JIZS
GXK

9OUCANTUSETHEDOTNAVIGATIONWHENSOMETHINGYOUREUSING
INTHEPATHISA#OLLECTION&OREXAMPLEYOUCANTDOTHIS

2ZQHUR QHZ2ZQHU  2ZQHU


RJHW'RJV EDUN 
&ROOHFWLRQGRJV
&ROOHFWLRQJHW'RJV
you
re t ur n s a C ollection. Aecntdion!
This () on a Coll
canÕt call bark

)TSTHE$OGOBJECTS).THECOLLECTIONTHATCANBARK 3O IN


*AVA YOUDHAVETOlRSTACCESSTHEINDIVIDUAL$OGELEMENTSINTHE
COLLECTION ANDONEATATIMEASKEACH$OGTOBARK 4HE$OGCODE
ABOVEISALMOSTEXACTLYLIKETHIS7(%2%CLAUSEWEHADBEFORE

:+(5(GPRYLHVJHQUH µ+RUURU¶ 6 W
7KLQNDERXWLWZKDWZRXOG\RX
EHWU\LQJWRVD\KHUH"7KDWWKH
ZKROHFROOHFWLRQKDVDJHQUH"1R
DFROOHFWLRQGRHVQ·WKDYHDJHW*HQUH 
!NDSINCEhMOVIESvANDhGENREvAREVIRTUALlELDS
,W·VWKHPRYLHVLQWKHFROOHFWLRQWKDW
WITHACCESSORS YOUCANTHINKOFITJUSTLIKETHIS
6W KDYHDJHW*HQUH 6RWKLVV\QWD[
GJHW0RYLHV JHW*HQUH  µ+RUURU¶ GRHVQ·WPDNHVHQVH

'LUHFWRU
0RYLH
JHW'LUHFWRU,'
JHW0RYLH,'
JHW2VFDU:LQQHU
JHW7LWOH
JHW'HJUHHV
JHW*HQUH
JHW1DPH
JHW'LUHFWRU
JHW0RYLHV
JHW7UDLOHU

 &KDSWHU
HQWLW\EHDQUHODWLRQVKLSV

<PM16WXMZI\WZTM\[aW][Ia
¹.WZIVQVLQ^QL]ITMTMUMV\16\PM+WTTMK\QWVº
4HE).OPERATORFORTHE&2/-CLAUSELETSYOUREFERTOA
#OLLECTION BUTNAMEANIDENTIlERASREPRESENTING/.%
MEMBEROFTHE#OLLECTION

6(/(&7',67,1&72%-(&7 G 
)520'LUHFWRU6FKHPDG,1 GPRYLHV P
:+(5(PJHQUH µ+RUURU¶ an individual
Let ÒmÓ represenllet ct n. So, ÒmÓ
Movie IN the Co ent iothe Collection
Now ÒmÓ represents an individual does NOT repres the Movie
Movie IN the movies Collection type, but ratherthe Collection is
(a CMR Þeld of Director) type (the type
holding.)
This query looks throug
and looks through each h all of the Directors,
Director, and looks for of the Movies of each
that matches ÔHorrorÕ. a Movie with a genre
set (no duplicates becausThe query returns a
e we said ÒDISTINCTÓ
7KH,1RSHUDWRULV
RYHUORDGHGLQ(-%4
/
of Directors
20FODXVHLVGLIIHU
7KH,1RSHUDWRULQWKH)5
FRP SDULVRQRSHUDWRUXVHGLQD
HQWIURPWKH,1
:+(5(FODXVH
XFDQVD\
,QWKH:+(5(FODXVH\R
DV\¶ 
GJHQUH,1 µ+RUURU¶µ)DQW
VK RUWFXWIRUVD\LQJ
DQGLWLVMXVWD
HQU H µ+ RUURU¶ 25 GJ HQUH µ)DQWDV\¶
GJ
KWKH,1RSHUDWRU
%XWLWKDVQRWKLQJWRGRZLW
HVLJQDWHLQGLYLGXDO
XVHGLQD)520FODXVHWRG
ROOH FWLRQ6RMXVWUHPHPEHU
PHPEHUV,1D&
RNDWWKHLQGLYLGXDO
)520FODXVH,1VD\V³/R
GUDWKHUWKDQXVLQJ
REMHFWVLQWKH&ROOHFWLRQDQ
VHWKHW\SHRIWKH
WKH&ROOHFWLRQDVWKHW\SHX
LWHPV,1WKH&ROOHFWLRQ ´

³6HHLIWKH¿HOG
:+(5(FODXVH,1VD\V
WKH OLWHUDOVLQWKLVVHW´
YDOXHPDWFKHVRQHRI

\RXDUHKHUH 
(-%4/%(7:((1

<PM*-<?--6M`XZM[[QWV

,ETSSAYYOUWANTTOlNDMOVIESINTHEDATABASEMADEINTHE
SANDS BUTYOUWANTTOEXCLUDEANYMOVIESMADEIN
OR REALLYBADMOVIEYEARS
9OUCOULDSAY

6(/(&7',67,1&72%-(&7 P 
)5200RYLH6FKHPDP
:+(5( P\HDU!$1'P\HDU 25
  P\HDU!$1'P\HDU

/R YOUCOULDDOITTHECOOLERWAY

6(/(&7',67,1&72%-(&7 P 
)5200RYLH6FKHPDP
:+(5( P\HDU%(7:((1$1' $1'
  P\HDU127%(7:((1$1'
,I,·P%(7:((1
DURFNDQGDKDUGSODFH
clusive
am pl e no ti ce th at BETWEEN is IN ERWKWKHURFNDQGWKHKDUG
In this ex 79 WILL be includ
ed), SODFHDUH,1&/8'(',
ars 19 60 an d 19 EHW\RXNQRZWKHIHHOLQJ
(i.e. the ye ive
d th at N O T B E TWEEN is EXclus
an

 &KDSWHU
HQWLW\EHDQUHODWLRQVKLSV

<PMW\PMZ¹16º
7EVEUSED).WITHA&2/-CLAUSETOHELPNAVIGATETHROUGH
COLLECTIONS BUT).HASANOTHERPERSONALITY YOUMIGHTSAY).
HASBEENOVERLOADEDFORUSEINTHE7(%2%CLAUSE,ETSSAY
THATYOUWANTTOSELECTMOVIESFROMASUBSETOFALLTHEMOVIE
GENRESINYOURDATABASE

6(/(&7',67,1&72%-(&7 P 
)5200RYLH6FKHPDP
:+(5(PJHQUH,1 µKRUURU¶µP\VWHU\¶

e
wo ul d re tu rn on ly th ose movies whose genrlets
This query of IN
ÒmysteryÓ. This ßavored list.
is eit he r Òh or ro rÓ or at
g akin to an enumer
you created somethin

!NDTHERESALWAYS./4).FORTHOSETIMESWHEN ´ µLV127WKH
VDPHDV´!µ
YOUNEEDSOMEACTION
D
:KHQFRPSDULQJYDOXHVLQ
6(/(&7',67,1&72%-(&7 P  !´P HDQ V³QRW
:+(5(FODXVH³
)5200RYLH6FKHPDP XVH 7+ $7 LQV WHD GRI
HTXDOV´<RX
:+(5(PJHQUH127,1 µURPDQFH¶µFRPHG\¶ XWFRP LQJ IURP- DYD WK DW³ ´
³ ´%
XVHHLW
FDQORRNVRULJKWZKHQ\R
RQ¶WEHWHP SWHG
This query would return only RQDTXHV WLRQ '
those movies whose genre is
NOT ÒromanceÓ or ÒcomedyÓ

6WULQJO
LWH
DUHLQ6 UDOV
,1*/(
TXRWHV
:KLOHZH 
¶UHRQWKH
VLVWHQFLH WRSLFRI
VEHWZHH LQFRQ
DQG(-% Q-DYDV
4/GRQ \QWD[
D6WULQJL ¶WEHWULFN
QG HGE\
:521* RXEOHTXRWHV7K 
LQ(-%4 LVLV
:+(5( /
PIRR,1 
,WPXVWE  ³E
H µEDU¶µE DU´³ED]´
D]¶

\RXDUHKHUH 
,6(037<

<PM1;-58<AKWUXIZQ[WVM`XZM[[QWV
4HISBABYWILLLETYOUKNOWWHETHERTHECOLLECTIONINQUESTION
ISEMPTY
-XVWVKRZ
PHWKHORVHUVZKR
KDYHQ·WPDGHDQ\
6(/(&7',67,1&72%-(&7 G  PRYLHV
)520'LUHFWRU6FKHPDG
:+(5(GPRYLHV,6(037<

who
y re t ur ns on ly those directors
This quer made any movies.
have not

<PM1;67<-58<AKWUXIZQ[WVM`XZM[[QWV
)3./4%-049LETSYOUSAY h$ONTGIVEMEANYTHINGWHERETHIS
lELDISEMPTYv

6(/(&7',67,1&72%-(&7 G 
)520'LUHFWRU6FKHPDG
:+(5(GPRYLHV,6127(037<

ns only those
This querywrehoturhave at least one movie
directors ovies collection.
in their m

 &KDSWHU
HQWLW\EHDQUHODWLRQVKLSV

<PM413-M`XZM[[QWV
,IKEEXPRESSIONSAREUSEDTOCOMPARESINGLEVALUEPATH
EXPRESSIONSWITHA3TRINGLITERAL4HEPOWEROF,)+%ISTHATTHE
3TRINGLITERALCANHAVEWILDCARDELEMENTS GIVINGYOUASIMPLE
PATTERNMATCHER4HEhvWILDCARDMATCHESAGAINSTTOMANY
CHARACTERSTHEh?vMATCHESAGAINSTASINGLECHARACTERONLY

6(/(&7',67,1&72%-(&7 G 
)520'LUHFWRU6FKHPDG
:+(5(GSKRQH/,.(µ¶
is a wildcard
The Ò%Ó symmanboyl characters
for 0 to
This query
who have phwonoueldnureturn only those directors
digits Ô719Õ. (Hey,mbers beginning with the
Strings, they have phone numbers can to be
those dashes...)

6(/(&7',67,1&72%-(&7 P 
)5200RYLH6FKHPDP
:+(5(P¿OPFRGH/,.(µBPP¶

This query
The Ò_Ó sylembo l is a wildcard
Þlm codes arseearinchth
es for movies whose acter
e 7Xmm family. for a sing char

<PM67<413-M`XZM[[QWV
6(/(&7',67,1&72%-(&7 P 
)5200RYLH6FKHPDP
:+(5(P¿OPFRGH127/,.(µPP¶

e
guess what this on
You can probrnabs lyall movies whose Þlm codes
does... retu in ÒmmÓ.
DONÕT end

\RXDUHKHUH 
HQWLW\EHDQUHODWLRQVKLSV

:MDD=LHGAFLK
ƒ (QWLW\EHDQVFDQKDYHSHUVLVWHQWUHODWLRQVKLSVZLWKRWKHU WKLVEHDQZLOOWKHRWKHUSDUWQHUKDYH DQGDQRSWLRQDO
HQWLW\EHDQV FDVFDGHGHOHWH! ZKLFKVD\V´'HOHWHPHLIP\SDUWQHU
LVGHOHWHGµ
ƒ $FRQWDLQHUPDQDJHGUHODWLRQVKLS &05 ILHOGLVGHILQHG ƒ 5HODWLRQVKLSVFDQEHRQHZD\ XQLGLUHFWLRQDO RU
LQWKHEHDQFODVVMXVWDVD&03ILHOGLV³ZLWKDSDLURI
WZRZD\ ELGLUHFWLRQDO $XQLGLUHFWLRQDOUHODWLRQVKLSLV
DEVWUDFWJHWWHUVDQGVHWWHUVWKDWUHWXUQHLWKHUWKHORFDO
GHVFULEHGLQWKH''LQWKHVDPHZD\DVDELGLUHFWLRQDO
FRPSRQHQWLQWHUIDFHRIWKHEHDQRUD&ROOHFWLRQ
UHODWLRQVKLSH[FHSWWKDWRQO\RQHRIWKHWZRSDUWQHUV
ƒ ,IWKHYLUWXDOILHOGLVD&ROOHFWLRQLWPXVWEHGHFODUHGDV KDVD&05ILHOG7KLVPHDQVEHDQ$KDVDUHIHUHQFHWR
HLWKHUMDYDXWLO&ROOHFWLRQRUMDYDXWLO6HW1RRWKHU&ROOHF EHDQ% WKH\·UHLQDUHODWLRQVKLS EXWEHDQ%GRHVQRW
WLRQW\SHLVDOORZHGDVWKHGHFODUHGUHWXUQW\SHRID&05 KDYHDUHIHUHQFHEDFNWR$'LUHFWLRQDOLW\GRHVQRWDIIHFW
ILHOG PXOWLSOLFLW\RUFDVFDGHGHOHWHLWMXVWPHDQVWKDWRQO\RQH
RIWKHWZRSDUWQHUVKDVDUHIHUHQFHWRWKHRWKHU7RWKH
ƒ 5HODWLRQVKLSVKDYHPXOWLSOLFLWLHV³WKH\FDQEHRQHWR &RQWDLQHUWKH\·UHVWLOOLQDUHODWLRQVKLS
RQHRQHWRPDQ\RUPDQ\WRPDQ\ 0DQ\WRRQHZRUNV
LQWKHVDPHZD\WKDWRQHWRPDQ\ZRUNVLWMXVWGHSHQGV ƒ &DVFDGHGHOHWHVWHOOWKH&RQWDLQHUWRGHOHWHWKHEHDQ
RQZKRVHSRLQWRIYLHZ\RX·UHXVLQJ ZLWKWKHFDVFDGHGHOHWH!WDJZKHQWKHEHDQ·VSDUWQHU
LVGHOHWHG7KLVZRUNVRQO\LIWKHEHDQKDVDPXOWLSOLF
ƒ )RUH[DPSOHD0RYLHEHDQKDVDPDQ\WRRQHUHODWLRQ LW\RIRQH <RXZRXOGQ·WZDQWWRGHOHWHD'LUHFWRUMXVW
VKLSZLWKD'LUHFWRUEHDQ(DFK0RYLHKDVRQO\RQH EHFDXVHRQHRIWKLV0RYLHVZDVGHOHWHGEXW\RXPLJKW
'LUHFWRUEXWD'LUHFWRUFDQKDYHPDQ\0RYLHV ZDQWWRGHOHWHD0RYLHLILWVVROH'LUHFWRUZDVGHOHWHG
ƒ 0XOWLSOLFLW\DIIHFWVWKHUHWXUQW\SHRIWKHYLUWXDOILHOG ƒ $EHDQFDQQRWDFFHVVLWV&05ILHOGVLQHME&UHDWH LW
0RYLHKDVRQO\RQH'LUHFWRUVRWKH&05ILHOGLQWKH PXVWZDLWXQWLOHME3RVW&UHDWH EHIRUHVD\DVVLJQLQJ
EHDQLVJHW'LUHFWRU WKDWUHWXUQVDUHIHUHQFHWRD WKH&05YLUWXDOILHOGDQDFWXDOYDOXH,QRWKHUZRUGV\RX
'LUHFWRU·VORFDOFRPSRQHQWLQWHUIDFH%XWD'LUHFWRUKDV FDQ·WXVH\RXUDEVWUDFWJHWWHUVDQGVHWWHUVIRU\RXU&05
PDQ\PRYLHVVRD'LUHFWRU·VYLUWXDOILHOGLVJHW0RYLHV  ILHOGVXQWLODIWHUHME&UHDWH FRPSOHWHV
ZKLFKUHWXUQVD&ROOHFWLRQ
ƒ (-%4/LVDSRUWDEOHTXHU\ODQJXDJH\RXFDQXVHWR
ƒ $&03EHDQPXVWGHILQHDQ´DEVWUDFWSHUVLVWHQFHVFKH VSHFLI\\RXUTXHULHVIRUERWKILQGHUDQGVHOHFWPHWKRGV
PDLQWKH''WKDWOLVWVHDFKRIWKHEHDQ·V&03ILHOGV
DQGDOVRLGHQWLILHVZKLFKRIWKHILHOGVLVWKHSULPDU\NH\ ƒ ,QDQ(-%4/TXHU\WKH6(/(&7DQG)520FODXVHV
XQOHVVLW·VDFRPSRXQGSULPDU\NH\ 7KH''PXVW DUHUHTXLUHGWKH:+(5(FODXVHLVRSWLRQDO
DOZD\VGHILQHWKHW\SHRIWKHSULPDU\NH\HYHQLIWKH
ƒ $6(/(&7FDQUHWXUQHLWKHUDQDEVWUDFWVFKHPDW\SH!
SULPDU\NH\LVQRWDILHOGRIWKHEHDQ 5HPHPEHULIWKH
ZKLFKUHDOO\PHDQVWKHEHDQ·VORFDOFRPSRQHQWLQWHU
SULPDU\NH\LVQRWDILHOGRIWKHEHDQLWPXVWEHDSUL
IDFHW\SH RUDVLQJOHYDOXHILHOG
PDU\NH\FODVVFRPSRVHGRI&03ILHOGVIURPWKHEHDQ
ƒ 5HODWLRQVKLS &05 ILHOGVDUHQRWGHILQHGLQWKHHQWHU ƒ ,I\RXXVHWKHGRWQRWDWLRQIRUQDYLJDWLQJDSDWK IRUH[
SULVHEHDQ!SRUWLRQRIWKH'' ZKHUH\RXGHILQH\RXU DPSOHPJHQUH \RXFDQ·WXVHD&ROOHFWLRQW\SHDVSDUW
&03ILHOGV EXWDUHLQVWHDGGHILQHGLQWKHUHODWLRQ RIWKHSDWK7RXVHD&ROOHFWLRQW\SHDVSDUWRID)520
VKLSV!VHFWLRQRIWKH'' FODXVH\RXPXVWHQFORVHLWXVLQJWKH,1 GPRYLHV 
ƒ (DFKUHODWLRQVKLSPXVWKDYHWZRSDUWQHUVZLWKHDFK RSHUDWRU
SDUWQHUGHVFULEHGLQDQHMEUHODWLRQVKLSUROH!HOHPHQW
WKDWLQFOXGHVWKH&05ILHOGQDPHWKHVRXUFH HME
QDPH! IRUWKHSDUWQHUWKHPXOWLSOLFLW\ LHKRZPDQ\RI

 &KDSWHU
HQWLW\EHDQUHODWLRQVKLSV

: MTI\QWV[PQXI[[QOVUMV\[
,GLUHFWHGWKDW 1RWKDWPRYLH
!-OVIECANHAVEONLYONE$IRECTOR)FYOUSETA PRYLH7KDWPRYLH VKRXOGEH0,1(,I
LV0,1(,WEHORQJVLQ D0RYLHFDQKDYHRQO\
-OVIES$IRECTORlELDTO$IRECTOR THE-OVIE RQH'LUHFWRUWKHQ
0<&ROOHFWLRQ
WILLBEIN$IRECTORSCOLLECTIONOF-OVIES BUT ,·PLW
INNOOTHER$IRECTORSCOLLECTION)FYOULATER
REASSIGNTHE-OVIES$IRECTORlELDSOTHATTHE
-OVIEHASADIFFERENT$IRECTORˆ$IRECTORˆTHE
PREVIOUS$IRECTOR$IRECTOR WILLNOLONGER
HAVETHAT-OVIEINITS#OLLECTION
4HISALLHAPPENSAUTOMATICALLY4OMAINTAINTHE
INTEGRITYOFTHEDATABASE THE#ONTAINERMANAGES
BOTHSIDESOFTHERELATIONSHIPATALLTIMES 'LUHFWRU 'LUHFWRU

%HIRUH

0RYLH% 0RYLH'
0RYLH$
0RYLH& 7KHUHLVRQO\RQH0RYLH
LQ'LUHFWRU·V&ROOHFWLRQ
7KUHH0RYLHVLQ'LUHFWRU
'LUHFWRU ,W·VWKHRQO\0RYLHWKDW
·V0RYLH&ROOHFWLRQ,I\RX
ZLOOUHWXUQ'LUHFWRULI 'LUHFWRU
FDOOJHW'LUHFWRU RQDQ\RI
\RXFDOOJHW'LUHFWRU RQ
WKHVH0RYLHVWKH\ZLOOUHWXUQ
WKH0RYLH
'LUHFWRU

PRYLH$VHW'LUHFWRU PRYLH'JHW'LUHFWRU 
ie AÕs
this says, ÒsetbeMwovhatever the
Director to r Movie D.Ó
$IWHU Director is fo

0RYLH% 0RYLH$
0RYLH'

0RYLH&
:KHQZHUHDVVLJQHGWKH
0RYLH$FDQKDYHRQO\RQH'LUHFWRUVRZKHQ 'LUHFWRURI0RYLH$WKDW0RYLH
'LUHFWRU ZHUHDVVLJQHGWKH'LUHFWRUIRU0RYLH$WR DXWRPDWLFDOO\PRYHGLQWR'LUHFWRU
EH'LUHFWRU0RYLH$ZDVDXWRPDWLFDOO\ ·V&ROOHFWLRQRI0RYLHV 'LUHFWRU
5(029('IURP'LUHFWRU·V&ROOHFWLRQRI
0RYLHV5HPHPEHUWKH&RQWDLQHUPDQDJHV
ERWKVLGHVRIWKHUHODWLRQVKLS

\RXDUHKHUH 
DVVLJQPHQWVLQUHODWLRQVKLSV

1N\PMU]T\QXTQKQ\aWN\PMZMTI\QWV[PQXNQMTLQ[76-Q\¼[I57>-
1N\PMU]T\QXTQKQ\aQ[5)6AQ\¼[I+78A
HMEUHODWLRQVKLSUROHQDPH!0RYLH%HDQHMEUHODWLRQVKLSUROHQDPH!
PXOWLSOLFLW\!0DQ\PXOWLSOLFLW\!


HMEUHODWLRQVKLSUROHQDPH!'LUHFWRU%HDQHMEUHODWLRQVKLSUROHQDPH!
PXOWLSOLFLW\!2QHPXOWLSOLFLW\!

7HENWEASSIGNED$IRECTORTO-OVIE! THE-OVIEMOVEDFROM$IRECTORS#OLLECTIONTO
$IRECTORS#OLLECTION4HE$IRECTOR#-2lELDHASAMULTIPLICITYOF/NEINITSRELATIONSHIP
WITH-OVIE SOA-OVIECANTEXISTINTHE#OLLECTIONOFTWODIFFERENT$IRECTORS BECAUSEA
-OVIECANHAVEONLY/NE$IRECTOR
"UTJUSTBECAUSEWEMOVETHE-OVIE DOESNTMEANTHE$IRECTORALSOMOVES4HE
MULTIPLICITYOF-OVIEIS-ANY SOWHENYOUASSIGNANOTHER-OVIES$IRECTORTOADIFFERENT
-OVIE THAT$IRECTORREFERENCEISCOPIED ANDBOTH-OVIESWILLNOWHAVEAREFERENCE

7KH029,(UHIHUHQFHZDV029('IURPRQH'LUHFWRUWRDQRWKHU

PRYLH$VHW'LUHFWRU PRYLH'JHW'LUHFWRU 

0RYLH$
0RYLH'

0RYLH&
'LUHFWRU
'LUHFWRU
%HFDXVHWKH'LUHFWRUWR0RYLHUHODWLRQVKLSLV2QHWR0DQ\D
0RYLHFDQ1(9(5H[LVWLQPRUHWKDQRQH'LUHFWRU·V&ROOHFWLRQ,I
\RXFKDQJHD0RYLH·V'LUHFWRUWKH0RYLHLVQRWFRSLHG,WLVPRYHG
WRWKHQHZ'LUHFWRU·V&ROOHFWLRQ

7KH',5(&725UHIHUHQFHZDV&23,('IURPRQH0RYLHWRDQRWKHU

0RYLH$

Movie DÕs
0RYLH'
0RYLH' reference wasoved.
'LUHFWRU
'LUHFWRU copied, not m

 &KDSWHU
HQWLW\EHDQUHODWLRQVKLSV

0XOWLSOLFLW\DQG$VVLJQPHQWV
([HUFLVH

*LYHQWKLVUHODWLRQVKLS

HMEUHODWLRQVKLSUROHQDPH!0RYLH%HDQHMEUHODWLRQVKLSUROHQDPH!
PXOWLSOLFLW\!2QHPXOWLSOLFLW\!

HMEUHODWLRQVKLSUROHQDPH!7UDLOHU%HDQHMEUHODWLRQVKLSUROHQDPH!
PXOWLSOLFLW\!2QHPXOWLSOLFLW\!

$QGWKLVFXUUHQWVFHQDULR

7UDLOHU%

7UDLOHU$
0RYLH 0RYLH

'UDZZKDWWKHSLFWXUHZLOOORRNOLNHDIWHU\RXUXQ
PRYLHVHW7UDLOHU PRYLHJHW7UDLOHU 

Draw your
picture here...

$QVZHUWKHVHTXHVWLRQV
:KDWLVWKHUHVXOWRIPRYLHJHW7UDLOHU
:KDWLVWKHUHVXOWRIPRYLHJHW7UDLOHU
:KDWLVWKHUHVXOWRIWUDLOHU$JHW0RYLH
:KDWLVWKHUHVXOWRIWUDLOHU%JHW0RYLH

\RXDUHKHUH 
H[HUFLVHVROXWLRQ

0XOWLSOLFLW\DQG$VVLJQPHQWV
6ROXWLRQ
*LYHQWKLVELGLUHFWLRQDOUHODWLRQVKLS

HMEUHODWLRQVKLSUROHQDPH!0RYLH%HDQHMEUHODWLRQVKLSUROHQDPH!
PXOWLSOLFLW\!2QHPXOWLSOLFLW\!

HMEUHODWLRQVKLSUROHQDPH!7UDLOHU%HDQHMEUHODWLRQVKLSUROHQDPH!
PXOWLSOLFLW\!2QHPXOWLSOLFLW\!

$QGWKLVFXUUHQWVFHQDULR

7UDLOHU%

7UDLOHU$
0RYLH 0RYLH

'UDZZKDWWKHSLFWXUHZLOOORRNOLNHDIWHU\RXUXQ
PRYLHVHW7UDLOHU PRYLHJHW7UDLOHU 

null
7UDLOHU%

7UDLOHU$
null
0RYLH
0RYLH

$QVZHUWKHVHTXHVWLRQV
returns trailerB
PRYLHJHW7UDLOHU
returns null! Movie has a multiplicity of One, so a Trailer can have
only ONE Movie. A Trailer canÕt be with both Movie 1 and Movie 2
PRYLHJHW7UDLOHU
also returns null... Trailer has a multiplicity of One, so there can
be only one Trailer per Movie. Whe n Trai lerB went to Movie 1,
WUDLOHU$JHW0RYLH
TrailerA was kicked out, disco nnec ted from the relationship.

WUDLOHU%JHW0RYLH
returns Movie1, not that it has been assigned to Movie1, the Container
updates the Þeld returned from the TrailerÕs getMovie().
 &KDSWHU
HQWLW\EHDQUHODWLRQVKLSV

0RFN([DP
7HATSTRUEFORANENTITYBEANPROVIDERUSINGCONTAINER MANAGEDPERSISTENCE
1 TOCREATEPERSISTENTRELATIONSHIPS#HOOSEALLTHATAPPLY
R! !LOCALINTERFACEISREQUIREDFORSUCHABEANTOHAVEABIDIRECTIONAL
RELATIONSHIPWITHANOTHERENTITYBEAN
R" 3UCHABEANCANHAVERELATIONSHIPSWITHONLYSESSIONBEANS
R# 2ELATIONSHIPSCANBEONLYONE TO ONEORONE TO MANY
R$ !GETTERMETHODRETURNTYPECANBEJAVAUTIL,IST

7HATSTRUEFORANENTITYBEANPROVIDERUSINGCONTAINER MANAGEDPERSISTENCE
2 TOCREATEPERSISTENTRELATIONSHIPS#HOOSEALLTHATAPPLY
R! !REMOTEINTERFACEISREQUIREDFORSUCHABEANTOHAVEABIDIRECTIONAL
RELATIONSHIPWITHANOTHERENTITYBEAN
R" 3UCHABEANCANHAVERELATIONSHIPSWITHONLYMESSAGE DRIVENBEANS
R# !GETMETHODRETURNTYPECANUSEJAVAUTIL-AP
R$ 2ELATIONSHIPSCANBEONE TO ONE ONE TO MANY ORMANY TO MANY

7HENAREMOTECLIENTINVOKESAMETHODONANENTITYBEANUSINGCONTAINER
3 MANAGEDPERSISTENCE ANDTHATBEANHASALREADYBEENREMOVED WHAT
EXCEPTIONWILLBETHROWN
R! MDYD[HME$FFHVV/RFDO([FHSWLRQ
R" MDYD[HME2EMHFW1RW)RXQG([FHSWLRQ
R# MDYDUPL1R6XFK2EMHFW([FHSWLRQ
R$ MDYDUPL6WXE1RW)RXQG([FHSWLRQ
R% MDYD[HME1R6XFK(QWLW\([FHSWLRQ

\RXDUHKHUH 
FRIIHHFUDPPRFNH[DP

'IVENTHECONTAINER MANAGEDUNIDIRECTIONALRELATIONSHIP
4
&OO  "AR 

!NDTHEOBJECTRELATIONS

F  B
F B

7HATWILLBETRUEAFTERTHEFOLLOWINGCODERUNS #HOOSEALLTHATAPPLY

I
VHW%DU IJHW%DU 

R! IJHW%DU  QXOO


R" EJHW)RR  QXOO
R# EJHW%DU  QXOO
R% NONEOFTHEABOVE

)FANENTITYBEAN!HASBEENREMOVEDFROMARELATIONSHIPWITHBEAN" IN
5 WHICHCASES WILLBEAN!SACCESSORMETHODFORBEAN"RETURNANON NULL
VALUE#HOOSEALLTHATAPPLY
R! ONE TO ONE
R" MANY TO ONE
R# MANY TO MANY
R$ ALLOFTHEABOVE
R% NONEOFTHEABOVE

7HICHDEPLOYMENTDESCRIPTORELEMENTSVALUES MUSTBEATYPEOFCOLLECTION
6 #HOOSEALLTHATAPPLY
R! HMEQDPH!
R" FPU¿HOG!
R# FPU¿HOGW\SH!
R$ HMEUHODWLRQ!

 &KDSWHU
HQWLW\EHDQUHODWLRQVKLSV

7HICHDEPLOYMENTDESCRIPTORELEMENTS MUSTHAVEEXACTLYTWODECLARATIONS
7 OFANOTHERDEPLOYMENTDESCRIPTORELEMENT#HOOSEALLTHATAPPLY
R! HMEQDPH!
R" FPU¿HOG!
R# FPU¿HOGW\SH!
R$ HMEUHODWLRQ!
R% HMEUHODWLRQVKLSUROH!

7HICHSETS OFELEMENTSAREMANDATORYWITHINANEJB RELATIONSHIP ROLE


8 ELEMENT#HOOSEALLTHATAPPLY
R! FPU¿HOG!PXOWLSOLFLW\!
R" FPU¿HOG!UHODWLRQVKLSUROHVRXUFH!
R# PXOWLSOLFLW\!UHODWLRQVKLSUROHQDPH!
R$ PXOWLSOLFLW\!UHODWLRQVKLSUROHVRXUFH!
R% UHODWLRQVKLSUROHQDPH!UHODWLRQVKLSUROHVRXUFH!

7HICHAREVALIDVALUESFORACMR lELD TYPEELEMENT#HOOSEALLTHATAPPLY


9
R! 3TRING
R" )NTEGER
R# MDYDXWLO6HW
R$ MDYDXWLO/LVW
R% MDYDXWLO&ROOHFWLRQ
7HICHSETS OFELEMENTSAREMANDATORYWITHINANEJB RELATIONELEMENT
10
R! HMEUHODWLRQQDPH!HMEUHODWLRQVKLSUROH!
R" HMEUHODWLRQVKLSUROH!HMEUHODWLRQVKLSUROH!
R# GHVFULSWLRQ!HMEUHODWLRQQDPH!
HMEUHODWLRQVKLSUROH!
R$ HMEUHODWLRQQDPH!HMEUHODWLRQVKLSUROH!
HMEUHODWLRQVKLSUROH!

\RXDUHKHUH 
FRIIHHFUDPPRFNH[DP

'IVEN#-0BEANS#USTOMER"EAN /RDER"EAN AND,INE)TEMS"EANWITHTHE


11 FOLLOWINGRELATIONSHIPS
USTOMER"EAN  /RDER"EANN
#
/RDER"EAN  ,INE)TEMS"EANN

ANDTHEFOLLOWING%*"1,QUERY

%,%#4$)34).#4/"*%#4C
3
&2/-#USTOMERC ).C/RDER O ).OLINE)TEMS LI
7(%2%OLSURGXFWBW\SH µUHIULJHUDWRU¶

7HICHOFTHEFOLLOWINGPROPERLYDESCRIBESTHERESULTOFTHEQUERY#HOOSEALL
THATAPPLY
R! 4HEQUERYISINVALID
R" !LLORDERSTHATINCLUDEALINEITEMTHATREFERSTOAREFRIGERATOR
R# !LLLINEITEMSTHATREFERTOAREFRIGERATOR
R$ !LLCUSTOMERSTHATHAVEORDERS THATREFERTOAREFRIGERATOR

'IVEN#-0BEANS#USTOMER"EAN /RDER"EAN AND,INE)TEMS"EANWITHTHE


12 FOLLOWINGRELATIONSHIPS
#USTOMER"EAN  /RDER"EANN
/RDER"EAN  ,INE)TEMS"EANN

7HICHWILLRETURNALLORDERSTHATHAVELINEITEMS#HOOSEALLTHATAPPLY
R! 3%,%#4$)34).#4O
&2/-/RDERO ).OLINE)TEMS LI
R" 3%,%#4$)34).#4/"*%#4O
&2/-/RDERO ).OLINE)TEMS LI
R# 3%,%#4/"*%#4O
&2/-/RDERO
7(%2%OLINE)TEMS
R$ 3%,%#4/"*%#4O
&2/-/RDERO

 &KDSWHU
HQWLW\EHDQUHODWLRQVKLSV

7HATSTRUEABOUT%*"1,PATHEXPRESSIONS#HOOSEALLTHATAPPLY
13
R! )NAPATHEXPRESSIONTHE  ISCONSIDEREDTHENAVIGATIONOPERATOR
R" 0ATHEXPRESSIONSCANTERMINATEWITHEITHERFPU¿HOGORFPS¿HOG
R# !PATHEXPRESSIONTHATENDSINAFPU¿HOGCANNOTBEFURTHER
COMPOSED
R$ !PATHEXPRESSIONCANENDWITHASINGLEVALUEORACOLLECTIONVALUE

7HATSTRUEABOUT%*"1,QUERIES#HOOSEALLTHATAPPLY
14
R! /FTHETHREECLAUSETYPES 3%,%#4 &2/- AND7(%2% ONLYTHE
3%,%#4CLAUSEISREQUIRED
R" 4HE3%,%#4CLAUSEDESIGNATESQUERYDOMAIN
R# 4HE7(%2%CLAUSEDETERMINESTHETYPESOFOBJECTSTOBESELECTED
R$ !N%*"1,QUERYMAYHAVEPARAMETERS

7HATSTRUEABOUT%*"1,7(%2%CLAUSES#HOOSEALLTHATAPPLY
15
R! )DENTIlCATIONVARIABLESUSEDINA7(%2%CLAUSECANBEDElNEDONLYIN
THE&2/-CLAUSE
R" )DENTIlCATIONVARIABLESCANREPRESENTASINGLEVALUEORACOLLECTION
R# 4HENUMBEROFINPUTPARAMETERSMUSTEQUALTHENUMBEROF
PARAMETERSFORTHElNDERORSELECTORMETHOD
R$ )NPUTCLAUSESCANONLYBEUSEDIN7(%2%CLAUSES

'IVENTHE%*"1,EXPRESSION
16
S
GLVFRXQW%(7:((1$1'

7HICHEXPRESSIONISEQUIVALENT
R! SGLVFRXQW!$1'SGLVFRXQW
R" SGLVFRXQW! $1'SGLVFRXQW
R# SGLVFRXQW!DQGSGLVFRXQW 
R$ SGLVFRXQW! DQGSGLVFRXQW 

\RXDUHKHUH 
FRIIHHFUDPPRFNH[DP

7HATSTRUEABOUT%*"1, ).EXPRESSIONS#HOOSEALLTHATAPPLY
17
R! 4HEVLQJOHBYDOXHGBSDWKBH[SUHVVLRQMUSTHAVEA3TRINGVALUE
R" 4HE./4LOGICALOPERATORCANBEUSEDINAN).EXPRESSION
R# 4HESTRINGLITERALLISTCANBEEMPTY
R$ 4HEFOLLOWINGEXPRESSIONISLEGALRFRXQWU\).h5+v h53v

18 'IVENTHE%*"1,EXPRESSION

PRODUCTCODE,)+%@&?S

7HICHVALUES WOULDRESULTINATRUECOMPARISON#HOOSEALLTHATAPPLY
R! &S
R" &S
R# &8S
R$ &S
R%&ITS

 &KDSWHU
HQWLW\EHDQUHODWLRQVKLSV

0RFN([DP$QVZHUV
7HATSTRUEFORANENTITYBEANPROVIDERUSINGCONTAINER MANAGEDPERSISTENCE
1 TOCREATEPERSISTENTRELATIONSHIPS#HOOSEALLTHATAPPLY
R! !LOCALINTERFACEISREQUIREDFORSUCHABEANTOHAVEABIDIRECTIONAL
RELATIONSHIPWITHANOTHERENTITYBEAN
R" 3UCHABEANCANHAVERELATIONSHIPSWITHONLYSESSIONBEANS
R# 2ELATIONSHIPSCANBEONLYONE TO ONEORONE TO MANY
R$ !GETTERMETHODRETURNTYPECANBEJAVAUTIL,IST - must be Collect
ion or Set

7HATSTRUEFORANENTITYBEANPROVIDERUSINGCONTAINER MANAGEDPERSISTENCE
2 TOCREATEPERSISTENTRELATIONSHIPS#HOOSEALLTHATAPPLY
R! !REMOTEINTERFACEISREQUIREDFORSUCHABEANTOHAVEABIDIRECTIONAL- must be local
RELATIONSHIPWITHANOTHERENTITYBEAN
R" 3UCHABEANCANHAVERELATIONSHIPSWITHONLYMESSAGE DRIVENBEANS
R# !GETMETHODRETURNTYPECANUSEJAVAUTIL-AP - only Collection or Set
R$ 2ELATIONSHIPSCANBEONE TO ONE ONE TO MANY ORMANY TO MANY

3 7HENAREMOTECLIENTINVOKESAMETHODONANENTITYBEANUSINGCONTAINER (spec: 132)


MANAGEDPERSISTENCE ANDTHATBEANHASALREADYBEENREMOVED WHAT
EXCEPTIONWILLBETHROWN
R! MDYD[HME$FFHVV/RFDO([FHSWLRQ
R" MDYD[HME2EMHFW1RW)RXQG([FHSWLRQ
R# MDYDUPL1R6XFK2EMHFW([FHSWLRQ
R$ MDYDUPL6WXE1RW)RXQG([FHSWLRQ
R% MDYD[HME1R6XFK(QWLW\([FHSWLRQ

\RXDUHKHUH 
PRFNH[DPDQVZHUV

'IVENTHECONTAINER MANAGEDUNIDIRECTIONALRELATIONSHIP
4
(spec: 138)
&OO  "AR 

!NDTHEOBJECTRELATIONS

F  B
F B

7HATWILLBETRUEAFTERTHEFOLLOWINGCODERUNS #HOOSEALLTHATAPPLY

I
VHW%DU IJHW%DU  The setBar() method ÒbreaksÓ
both of the existing object
relationships and creates a single
R! IJHW%DU  QXOO new one.
R" EJHW)RR  QXOO
R# EJHW)RR  QXOO
R$ NONEOFTHEABOVE

5 )FANENTITYBEAN!HASBEENREMOVEDFROMARELATIONSHIPWITHBEAN" IN (spec: 132)


WHICHCASES WILLBEAN!SACCESSORMETHODFORBEAN"RETURNANON NULL
VALUE#HOOSEALLTHATAPPLY
R! ONE TO ONE
R" MANY TO ONE
R# MANY TO MANY
R$ ALLOFTHEABOVE
R% NONEOFTHEABOVE
)
(spec: 463-464
7HICHDEPLOYMENTDESCRIPTORELEMENTSVALUES MUSTBEATYPEOFCOLLECTION
6 #HOOSEALLTHATAPPLY
R! HMEQDPH!
R" FPU¿HOG!
R# FPU¿HOGW\SH! - Collection or Set.
R$ HMEUHODWLRQ!

 &KDSWHU
HQWLW\EHDQUHODWLRQVKLSV

)
7 7HICHDEPLOYMENTDESCRIPTORELEMENTS MUSTHAVEEXACTLYTWODECLARATIONS (spec: 467-468
OFANOTHERDEPLOYMENTDESCRIPTORELEMENT#HOOSEALLTHATAPPLY
R! HMEQDPH!
R" FPU¿HOG!
R# FPU¿HOGW\SH! ve two
its gotta ha sub elements
R$ HMEUHODWLRQ! <ejb-relationship-role>
R% HMEUHODWLRQVKLSUROH!

7HICHSETS OFELEMENTSAREMANDATORYWITHINANEJB RELATIONSHIP ROLE (spec: 468)


8 ELEMENT#HOOSEALLTHATAPPLY
R! FPU¿HOG!PXOWLSOLFLW\!
R" FPU¿HOG!UHODWLRQVKLSUROHVRXUFH!
R# PXOWLSOLFLW\!UHODWLRQVKLSUROHQDPH! tionship, and
whoÕs in the yrerelalated
R$ PXOWLSOLFLW\!UHODWLRQVKLSUROHVRXUFH! how are the
R% UHODWLRQVKLSUROHQDPH!UHODWLRQVKLSUROHVRXUFH!

7HICHAREVALIDVALUESFORACMR lELD TYPEELEMENT#HOOSEALLTHATAPPLY (spec: 464)


9
R! 3TRING
terface
R" )NTEGER Either a loCcaoll leinction or
R# MDYDXWLO6HW type, or a local inter-
Set of the
R$ MDYDXWLO/LVW face type
R% MDYDXWLO&ROOHFWLRQ
)
7HICHSETS OFELEMENTSAREMANDATORYWITHINANEJB RELATIONELEMENT
(spec: 467-468
10
R! HMEUHODWLRQQDPH!HMEUHODWLRQVKLSUROH!
R" HMEUHODWLRQVKLSUROH!HMEUHODWLRQVKLSUROH! gotta have two
partners
R# GHVFULSWLRQ!HMEUHODWLRQQDPH!
HMEUHODWLRQVKLSUROH!
R$ HMEUHODWLRQQDPH!HMEUHODWLRQVKLSUROH!
HMEUHODWLRQVKLSUROH!

\RXDUHKHUH 
PRFNH[DPDQVZHUV

'IVEN#-0BEANS#USTOMER"EAN /RDER"EAN AND,INE)TEMS"EANWITHTHE (spec: 233)


11 FOLLOWINGRELATIONSHIPS
USTOMER"EAN  /RDER"EANN
#
/RDER"EAN  ,INE)TEMS"EANN

ANDTHEFOLLOWING%*"1,QUERY

%,%#4$)34).#4/"*%#4C
3
&2/-#USTOMERC ).C/RDER O ).OLINE)TEMS LI
7(%2%OLSURGXFWBW\SH µUHIULJHUDWRU¶

7HICHOFTHEFOLLOWINGPROPERLYDESCRIBESTHERESULTOFTHEQUERY#HOOSEALL
THATAPPLY ause
The SELECt Tthecl query
R! 4HEQUERYISINVALID ha
speciÞes t n Customer
R" !LLORDERSTHATINCLUDEALINEITEMTHATREFERSTOAREFRIGERATOR must retur
objects.
R# !LLLINEITEMSTHATREFERTOAREFRIGERATOR
R$ !LLCUSTOMERSTHATHAVEORDERS THATREFERTOAREFRIGERATOR

12 'IVEN#-0BEANS#USTOMER"EAN /RDER"EAN AND,INE)TEMS"EANWITHTHE (spec: 236)


FOLLOWINGRELATIONSHIPS
#USTOMER"EAN  /RDER"EANN
/RDER"EAN  ,INE)TEMS"EANN

7HICHWILLRETURNALLORDERSTHATHAVELINEITEMS#HOOSEALLTHATAPPLY
R! 3%,%#4$)34).#4O
&2/-/RDERO ).OLINE)TEMS LI
R" 3%,%#4$)34).#4/"*%#4O
&2/-/RDERO ).OLINE)TEMS LI
R# 3%,%#4/"*%#4O
&2/-/RDERO
7(%2%OLINE)TEMS
R$ 3%,%#4/"*%#4O
&2/-/RDERO

 &KDSWHU
HQWLW\EHDQUHODWLRQVKLSV

7HATSTRUEABOUT%*"1,PATHEXPRESSIONS#HOOSEALLTHATAPPLY (spec: 225-226)


13
R! )NAPATHEXPRESSIONTHE  ISCONSIDEREDTHENAVIGATIONOPERATOR
R" 0ATHEXPRESSIONSCANTERMINATEWITHEITHERFPU¿HOGORFPS¿HOG
R# !PATHEXPRESSIONTHATENDSINAFPU¿HOGCANNOTBEFURTHER
COMPOSED
R$ !PATHEXPRESSIONCANENDWITHASINGLEVALUEORACOLLECTIONVALUE

7HATSTRUEABOUT%*"1,QUERIES#HOOSEALLTHATAPPLY (spec: 218-219)


14
R! /FTHETHREECLAUSETYPES 3%,%#4 &2/- AND7(%2% ONLYTHE
3%,%#4CLAUSEISREQUIRED
R" 4HE3%,%#4CLAUSEDESIGNATESQUERYDOMAIN
R# 4HE7(%2%CLAUSEDETERMINESTHETYPESOFOBJECTSTOBESELECTED
R$ !N%*"1,QUERYMAYHAVEPARAMETERS
)
7HATSTRUEABOUT%*"1,7(%2%CLAUSES#HOOSEALLTHATAPPLY (spec: 227-228
15
R! )DENTIlCATIONVARIABLESUSEDINA7(%2%CLAUSECANBEDElNEDONLYIN
THE&2/-CLAUSE
R" )DENTIlCATIONVARIABLESCANREPRESENTASINGLEVALUEORACOLLECTION
R# 4HENUMBEROFINPUTPARAMETERSMUSTEQUALTHENUMBEROF
PARAMETERSFORTHElNDERORSELECTORMETHOD
R$ )NPUTCLAUSESCANONLYBEUSEDIN7(%2%CLAUSES

'IVENTHE%*"1,EXPRESSION (spec: 229)


16
S
GLVFRXQW%(7:((1$1'

7HICHEXPRESSIONISEQUIVALENT
R! SGLVFRXQW!$1'SGLVFRXQW
R" SGLVFRXQW! $1'SGLVFRXQW
R# SGLVFRXQW!DQGSGLVFRXQW 
R$ SGLVFRXQW! DQGSGLVFRXQW 

\RXDUHKHUH 
PRFNH[DPDQVZHUV

)
17 7HATSTRUEABOUT%*"1, ).EXPRESSIONS#HOOSEALLTHATAPPLY (spec: 229-230
R! 4HEVLQJOHBYDOXHGBSDWKBH[SUHVVLRQMUSTHAVEA3TRINGVALUE
R" 4HE./4LOGICALOPERATORCANBEUSEDINAN).EXPRESSION
R# 4HESTRINGLITERALLISTCANBEEMPTY
t for
R$ 4HEFOLLOWINGEXPRESSIONISLEGALRFRXQWU\).h5+v h53v watche ouquotes!
doubl
(spec: 230)
18 'IVENTHE%*"1,EXPRESSION

PRODUCTCODE,)+%@&?S

7HICHVALUES WOULDRESULTINATRUECOMPARISON#HOOSEALLTHATAPPLY
R! &S
R" &S
The % charac ter is a
R# &8S r a sequence is
wildcard foter The _
R$ &S of charac fos.r a single
R%&ITS a wildcard
character

 &KDSWHU
message-driven beans
5
4
4 *HWWLQJWKH0HVVDJH
:RZ0HVVDJHGULYHQ
EHDQVDUHIDQWDVWLF,FDQVHQGD
PHVVDJHDQGWKHQJREDFNWRZKDW,
ZDVGRLQJEHIRUHZLWKRXWZDLWLQJ
IRUDUHSO\7KDWPHDQV,KDYHPRUH
WLPHWRUHDGWKLVQLIW\´+HDG
)LUVW6OLGH5XOHµERRN

,W·VIXQWRUHFHLYHPHVVDJHV1RWDVPXFKIXQDVVD\JHWWLQJWKDW(%D\
SDFNDJHZLWKWKHJHQXLQH6PXUIŒODPSEXWIXQDQGHI¿FLHQWQRQHWKHOHVV,PDJLQH
LI\RXVHQW\RXURUGHUWR(%D\DQG\RXFRXOGQ¶WOHDYH\RXUKRXVHXQWLOWKHSDFNDJH
ZDVGHOLYHUHG7KDW¶VZKDWLW¶VOLNHZLWK6HVVLRQDQG(QWLW\EHDQVEHFDXVHWKHUH¶VDOO
FDOOVWRDEHDQ¶VFOLHQWLQWHUIDFH KRPHFRPSRQHQWORFDO5HPRWHGRHVQ¶WPDWWHU DUH
V\QFKURQRXV%XWZLWKPHVVDJHGULYHQEHDQVWKHFOLHQWPDNHVDPHVVDJHDQGVHQGVLW
WRDPHVVDJLQJVHUYLFH7KHQWKHFOLHQWZDONVDZD\/DWHUWKHPHVVDJLQJVHUYLFHVHQGV
WKH&RQWDLQHUWKHPHVVDJHDQGWKH&RQWDLQHUJLYHLWWRDPHVVDJHGULYHQEHDQ

WKLVLVDQHZFKDSWHU 
H[DPREMHFWLYHV

0HVVDJH'ULYHQ%HDQV
2IILFLDO :KDWLWUHDOO\PHDQV
 ,GHQWLI\FRUUHFWDQGLQFRUUHFWVWDWHPHQWV <RXKDYHWRNQRZWKDWPHVVDJHGULYHQEHDQVGRQ¶W
RUH[DPSOHVDERXWWKHFOLHQWYLHZDQG KDYHFOLHQWV7KDWPHDQVQRKRPHLQWHUIDFHQR
OLIHF\FOHRIDPHVVDJHGULYHQEHDQ FRPSRQHQWLQWHUIDFHDQGQRLVVXHVRIORFDOYV
5HPRWH2IFRXUVHPHVVDJHGULYHQEHDQVGRKDYHD
FDOOHUEXWWKDW¶VWKH&RQWDLQHU$QGZHGRQ¶WFRQVLGHU
WKH&RQWDLQHUDFOLHQW7KH&RQWDLQHULVWKHERVVQRW
WKHFXVWRPHU
0HVVDJHGULYHQEHDQVKDYHDYHU\VLPSO\OLIHF\FOH²LI
\RXNQRZKRZVWDWHOHVVVHVVLRQEHDQVZRUN\RX
NQRZKRZPHVVDJHGULYHQEHDQVZRUN7KHRQO\
GLIIHUHQWLVWKDWLQVWHDGRIEULQJLQJDEHDQRXWRIWKH
SRROWRVHUYLFHDFOLHQWPHWKRGFDOOWKH&RQWDLQHU
EULQJVPHVVDJHGULYHQEHDQVRXWRIWKHSRROWR
VHUYLFHDQLQFRPLQJ-06PHVVDJH

 ,GHQWLI\WKHLQWHUIDFH V DQGPHWKRGVD <RXPXVWNQRZWKDWPHVVDJHGULYHQEHDQVLPSOHPHQW


PHVVDJHGULYHQEHDQPXVWLPSOHPHQW WZRLQWHUIDFHV²MDYD[HME0HVVDJH'ULYHQ%HDQWKH
LQWHUIDFHZLWKWKH&RQWDLQHUFDOOEDFNV QRWPDQ\ DQG
MDYD[MPV0HVVDJH/LVWHQHUWKHLQWHUIDFHZLWKDVLQJOH
RQ0HVVDJH 0HVVDJHP PHWKRG)RUDPHVVDJH
GULYHQEHDQRQ0HVVDJH LVWKHRQO\EXVLQHVV
PHWKRG

 ,GHQWLI\WKHXVHDQGEHKDYLRURIWKH <RXKDYHWRNQRZWKDWPHVVDJHGULYHQEHDQVFDQ¶W


0HVVDJH'ULYHQ&RQWH[WLQWHUIDFHPHWKRGV FDOOPRVWRIWKHPHWKRGVLQ0HVVDJH'ULYHQ&RQWH[W
HYHU7KLQNDERXWLW,IWKHUH¶VQRFOLHQWKRZFRXOG
\RXJHWFOLHQWVHFXULW\LQIR",IWKHUH¶VQRFOLHQWZKLFK
PHDQVQRFOLHQWYLHZKRZFRXOG\RXFDOOJHW(-%2E
MHFW RUJHW(-%+RPH "<RXGRQ¶WKDYHDKRPH<RX
GRQ¶WKDYHDQ(-%2EMHFW 

 )URPDOLVWLGHQWLI\WKHUHVSRQVLELOLW\RIWKH <RXDOVRKDYHWRUHFRJQL]HWKDWLIWKHUH¶VQRFOLHQW\RX


%HDQ3URYLGHUDQGWKHUHVSRQVLELOLW\RIWKH FDQ¶WGHFODUHDQ\FKHFNHGH[FHSWLRQV:KRZRXOG
&RQWDLQHUSURYLGHUIRUDPHVVDJHGULYHQ FDWFKWKHP"$OVRMXVWDVZLWKVWDWHOHVVVHVVLRQEHDQV
EHDQ LI\RXVWDUWDWUDQVDFWLRQLQDPHWKRG ZKLFKFDQRQO\
PHDQD%07EHDQLQRQ0HVVDJH \RXPXVW¿QLVKLW
EHIRUHWKHPHWKRGHQGV
 &KDSWHU
PHVVDJHGULYHQEHDQV

1UIOQVM\PQ[[KMVIZQW
9OUHAVETOASKSOMEONETODOAVERYIMPORTANTJOB

9OUHAVENOIDEAHOWLONGITSGOINGTOTAKETHEM

9OUHAVETOWAITRIGHTWHEREYOUAREUNTILTHEYlNISH

9OUCANTDOANYTHINGELSEWHILEYOUREWAITING

SOHDVHRKSOHDVHGRQ·W
WDNHDOOGD\RQWKLV,KDYH
62PDQ\RWKHUWKLQJV,·G
UDWKHUEHGRLQJWKDQZDLW
KHUHIRU\RXWRÀQLVK

+TQMV\

\RXDUHKHUH 
PHVVDJHGULYHQEHDQV

*HH]KRZ
KDUGFDQLWEH":KDW
LVWKHVHUYHUGRLQJ "

 &KDSWHU
PHVVDJHGULYHQEHDQV

+H\ZH·UHDWWKH
SRROGXGH,WKRXJKW, 7HOOKLPWRFKLOO:H·OO
WROG\RXQHYHUWRFDOOPH JHWWRLWDQGLW·VQRW
OLNHKH·VJRWDQ\WKLQJ
KHUH
EHWWHUWRGR

;MZ ^MZ

+TQMV\

JMNWZMUM[[IOMLZQ^MVJMIV[

<WWJIL\PM[MO]a[IZMV¼\
UM[[IOMLZQ^MVJMIV[
-ETHODCALLS LOCALORREMOTE ARESYNCHRONOUS
4HECALLERISSTUCKWAITINGUNTILTHESERVERRETURNS
-ESSAGE DRIVENBEANSADDEDIN%*" GIVE
YOUASYNCHRONOUSCOMMUNICATIONBETWEENTHE
CLIENTMESSAGESENDER ANDTHESERVERMESSAGE
RECEIVER 
)NMESSAGINGTERMS THESENDERISCALLEDTHE
MESSAGE0RODUCERANDTHERECEIVERISCALLEDTHE IN\MZUM[[IOMLZQ^MVJMIV[
MESSAGE#ONSUMER
7ITHMESSAGING THE0RODUCERSENDSAMESSAGEAND
THENGOESABOUTHISBUSINESS(EDOESNTHAVETO
WAITFORTHE#ONSUMERTOEVENGETTHEMESSAGE LET
ALONEPROCESSIT
7HENTHE#ONSUMERGETSAMESSAGE HEPROCESSES
IT)NTHEMEANTIME THECLIENTCANSTILLHAVEALIFE

\RXDUHKHUH 
PHVVDJHGULYHQEHDQV

0HVVDJHGULYHQEHDQRYHUYLHZ

 &OLHQW 3URGXFHU VHQGDPHVVDJHWR


WKHPHVVDJLQJVHUYLFH

PHVVDJLQJVHUYLFH

JH
HVVD EHDQ
EHDQ
P
EHDQ
FOLHQW 0HVVDJHGULYHQ
%HDQ3RRO

3URGXFHU

 0HVVDJHLVGHOLYHUHGWRWKH
&RQWDLQHU&OLHQWLVGRLQJRWKHU
FOLHQWWKLQJV
PHV
VDJ
PHVVDJLQJVHUYLFH H
WRVRP EHDQ
HRWK
VHUYHU HU EHDQ
EHDQ


FOLHQW 0HVVDJHGULYHQ
%HDQ3RRO

3URGXFHU

 &RQWDLQHUDFNQRZOHGJHVWKH
PHVVDJHWRWKHVHUYLFHDQG H
DQUHPRY
SXOOVDEHDQRXWRIWKHSRROWR LW\RXF
2.JRW KHTXHX H
SURFHVVWKHPHVVDJH LWIURPW
PHVVDJLQJVHUYLFH
EHDQ
EHDQ

FOLHQW 0HVVDJHGULYHQ
EHDQ %HDQ3RRO

3URGXFHU

 &KDSWHU
PHVVDJHGULYHQEHDQV

 &RQWDLQHULQYRNHVWKHEHDQV
RQ0HVVDJH PHWKRGZLWKWKH
PHVVDJHDVWKHDUJXPHQW

PHVVDJLQJVHUYLFH RQ0
HVV
DJH EHDQ
PV
J
EHDQ

0HVVDJHGULYHQ
FOLHQW %HDQ3RRO
EHDQ

3URGXFHU

 7KHEHDQ·VWUDQVDFWLRQFRPPLWV
DQGWKH&RQWDLQHUVHQGVWKHEHDQ
EDFNWRWKHSRRO

,IWKHEHDQ·VWUDQVDFWLRQLQ PHVVDJLQJVHUYLFH
RQ0HVVDJHKDGUROOHGEDFN
EHDQ
WKH&RQWDLQHUZRXOGKDYHWROGWKH
EHDQ
PHVVDJLQJVHUYLFHWRSXWWKH
PHVVDJHEDFNRQWKHTXHXH 0HVVDJHGULYHQ
%HDQ3RRO
EHDQ

%HDQ3RRO
,WV¼\\PMaTWWSITW\TQSM[\I\MTM[[[M[[QWVJMIV['
,IKESTATELESSSESSIONBEANS MESSAGE DRIVENBEANSHAVENO
UNIQUEIDENTITYTOCLIENTSACTUALLY THEYDONTHAVECLIENTS
SINCETHE#ONTAINERISNTREALLYCONSIDEREDACLIENTTOTHE
BEAN THEYREPOOLED ANDTHEYHAVENOINDIVIDUALSTATE
THATAFFECTSTHEIRBUSINESSLOGIC4HATMEANSONEMESSAGE
DRIVENBEANOFAPARTICULARTYPE ISTHESAMEASANYOTHER
BEANFROMTHESAMEHOME*USTLIKESTATELESSBEANS

\RXDUHKHUH 
PHVVDJHGULYHQEHDQV

0XOWLSOHEHDQVRIWKHVDPH
W\SHFDQSURFHVVPHVVDJHV
FRQFXUUHQWO\


PVJ
HVVDJH
RQ0 EHDQ
PHVVDJLQJVHUYLFH RQ0
HVV :HOFRPH%HDQ EHDQ
DJH
PV
J
RQ
0H
VVD
JH

EHDQ
P
VJ

:HOFRPH%HDQ

:HOFRPH%HDQ 0'% %HDQ3RRO

EHDQ

:HOFRPH%HDQ

%XWWKHFRQWDLQHUZLOOPDNHVXUH
WKDWHDFKEHDQLVWKUHDGVDIH

&DQ·W\RXVHH,·P 1RSUREOHP,·OO
%86<",·YHDOUHDG\JRWD PDNHVXUHQRRWKHU
PHVVDJHJRLQJ'RQ·WJHWPH WKUHDGVERWKHU\RXXQWLO
VWDUWHGRQDQRWKHURQH \RX·UHGRQHZLWKWKLVRQH

:HOFRPH%HDQ &RQWDLQHU

 &KDSWHU
PHVVDJHGULYHQEHDQV

7KHOLIHF\FOHRIPHVVDJHGULYHQEHDQV
ORRNVMXVWOLNHVWDWHOHVVVHVVLRQEHDQV

0HVVDJHGULYHQ
EHDQ
EHDQWKURZVV\VWHPH[FHSWLRQ
GRHVQRWH[LVW XQFKHFNHGXQFDXJKW

FRQVWUXFWRU
VHW0HVVDJH'ULYHQ&RQWH[W
HME5HPRYH
HME&UHDWH

n
passivatio
note: noivation
PHWKRGUHDG\ or act
RQ0HVVDJH

nly
this is the obetween message-driven beans
difference ssion have only ONE business
stateless send MDB methodÑ onMessage().
lifecycle a
lifecycle.

SXEOLFYRLGRQ0HVVDJH 0HVVDJHPVJ ^
RSHQWKHPHVVDJHDQGGRVRPHWKLQJZLWKLW

logic thing a mesth-er


`
The on ly bu si ne ss
ThatÕs it ! n do (o
needs to doÑor ca
sage-driven beancontainer callbacks for creating,
than the three tting its context)
removing, and se

\RXDUHKHUH 
PHVVDJHGULYHQEHDQV

5M[[IOMLZQ^MVJMIVKTI[[

SDFNDJHKHDG¿UVW
rt: !
a new impo.jms package s to implement
TWO interface
LPSRUWMDYD[HME 
LPSRUWMDYD[MPV  the javax
SXEOLFFODVV:HOFRPH%HDQLPSOHPHQWV0HVVDJH'ULYHQ%HDQ0HVVDJH/LVWHQHU^

javax.ejb.MessageDriv
er callbacks) javax.jm enBean (with the cont
s.M ain-
the onMessage() callb essageListener (with
ack method)
SULYDWH0HVVDJH'ULYHQ&RQWH[WFRQWH[W
extends EJBObjec
EntityContext t just like SessionContext and




SXEOLFYRLGHME&UHDWH ^`
you MUST have a single, no-arg ejbCreate()

SXEOLFYRLGHME5HPRYH ^`
works just like stateless session beans... called when
the Container wants to reduce the pool
SXEOLFYRLGVHW0HVVDJH'ULYHQ&RQWH[W 0HVVDJH'ULYHQ&RQWH[WFW[ ^
FRQWH[W FW[
` just do the same thing
do... save your context you always

FINALLY! A real business
SXEOLFYRLGRQ0HVVDJH 0HVVDJHPVJ ^ This is the only method method.
SURFHVVWKHPHVVDJH de Þn
MessageListener interface ed in the
WU\^ .
LI PVJLQVWDQFHRI7H[W0HVVDJH ^
e, but it might
7H[W0HVVDJHPHVVDJH  7H[W0HVVDJH PVJ TextMessage is-a Messdagof message like
have been another kin essage, ObjectMes-
6\VWHPRXWSULQWOQ PHVVDJHJHW7H[W  BytesMessage, MapM e. So we test it
` sage or StreamMessag the cast.
`FDWFK -06([FHSWLRQH[ ^
H[SULQW6WDFN7UDFH 
with instanceof before
` Yikes. A checked ex
`
fr om the getText() cemeption! ItÕs
` thod.

 &KDSWHU
PHVVDJHGULYHQEHDQV

?ZQ\QVOIUM[[IOMLZQ^MVJMIV"
aW]ZRWJI[*MIV8ZW^QLMZ

7KLVWLPHWKHUH·VQRFOLHQW
YLHZVR,GRQ·WKDYHWR <RXSXW7+5((NLQGVRIPHWKRGV
PDWFKDQ\WKLQJIURPWKHKRPH
RUFRPSRQHQWLQWHUIDFHV
LQWKHEHDQFODVV
7KH\GRQ·WH[LVW-XVWOLNHPH

 %HDQ/DZHME&UHDWH PHWKRG

:ULWHDVLQJOHQRDUJXPHQWHME&UHDWH PHWKRGLQWKH
EHDQ,WGRHVQ¶WPDWFKDQ\WKLQJRUFRPHIURPDQ\LQWHU
IDFH,W¶VWKHUHEHFDXVHLW0867EH

LQWHUIDFH!!
 0HVVDJH/LVWHQHULPSOHPHQWDWLRQ
0HVVDJH/LVWHQHU
RQ0HVVDJH
RQ0HVVDJH
7KLVLV\RXUEXVLQHVVPHWKRG<RXURQO\EXVLQHVV
PHWKRG

 0HVVDJH'ULYHQ%HDQLPSOHPHQWDWLRQ
LQWHUIDFH!! FRQWDLQHUFDOOEDFNV
0HVVDJH'ULYHQ%HDQ
HME5HPRYH
VHW0HVVDJH'ULYHQ&RQWH[W ,PSOHPHQWERWKRIWKHPHWKRGVIURPWKH
0HVVDJH'ULYHQ%HDQLQWHUIDFHZKLFK\RXUEHDQPXVW
LPSOHPHQWLQWKHRI¿FLDO-DYDZD\ LHXVLQJWKH
µLPSOHPHQWV0HVVDJH'ULYHQ%HDQ¶GHFODUDWLRQHLWKHULQ
\RXUEHDQFODVVRURQHRILWVVXSHUFODVVHV

6KDUSHQ \RXU SHQFLO


&RPSLOHUFKHFNHG"
‰ HME&UHDWH
2IWKHWKUHHW\SHVRIPHWKRGV\RX
SXWLQ\RXUEHDQFKHFNRIIWKHRQHV ‰ RQ0HVVDJH
WKHFRPSLOHUFDUHVDERXW ‰ HME5HPRYH DQGVHW0HVVDJH'ULYHQ&RQWH[W

\RXDUHKHUH 
PHVVDJHGULYHQEHDQV

5XOHVIRUWKHPHVVDJHGULYHQEHDQFODVV

 7KHFODVVPXVWLPSOHPHQWMDYD[HME0HVVDJH'ULYHQ%HDQDQG
MDYD[HME0HVVDJH/LVWHQHU
SXEOLFFODVV:HOFRPH%HDQLPSOHPHQWV0HVVDJH'ULYHQ%HDQ0HVVDJH/LVWHQHU^

 7KHFODVVPXVWEHSXEOLFPXVWQRWEH¿QDODQGPXVWQRWEHDEVWUDFW

 7KHFODVVPXVWKDYHDSXEOLFFRQVWUXFWRUWKDWWDNHVQRDUJXPHQWV -XVWOLNH
WKHRWKHUEHDQVVRWKH&RQWDLQHUFDQPDNHDQHZLQVWDQFH tructor.
th e co m pi le r pu t in the default conÕnst put any
t do
If you can, justhaleve one, be SURE itÕs no-arg, and
SXEOLF:HOFRPH%HDQ ^`

But if yo u do
r ejbCreate()
code in it. Wait fo

 7KHFODVVPXVWKDYHDQRDUJHME&UHDWH PHWKRG,WPXVWEHSXEOLFQRW
¿QDOQRWVWDWLFZLWKDYRLGUHWXUQW\SH

SXEOLFYRLGHME&UHDWH ^`

code in here. By
Put initializationethod is called, you
the time this mur context.
already have yo
0HVVDJHGULYHQ
EHDQVFDQ·W
GHFODUHFKHFNHG
H[FHSWLRQV

 7KHFODVVPXVWGH¿QHWKHRQ0HVVDJH PHWKRGIURPWKH <RX¶OOOHDUQPRUHDERXW


XWIRU
0HVVDJH/LVWHQHULQWHUIDFH,WPXVWEHSXEOLFQRW¿QDOQRWVWDWLF H[FHSWLRQVLQ&KDSWHUE
ZLWKDYRLGUHWXUQW\SHDQGLWWDNHVDVLQJOHDUJXPHQWRIW\SH WLW7K HUH ¶VQR
QRZMXVWWKLQNDERX
MDYD[MPV0HVVDJH RD UH\ RX H[SHFW LQJ
FOLHQW6RZK
UDS DWU\FDWF KD URX QGWKHVH
SXEOLFYRLGRQ0HVVDJH 0HVVDJHPVJ ^` WRZ
XJK
FDOOV"7KH&RQWDLQHUZLOOOD
RWK LV<RX 08 67
The REAL business method. You LI\RXWU\WRG
r logic goes here... FDWFK DQG KD QGO HD Q\ FKH FNHG
H[FHSWLRQVWKDW\RXJHW

 <RXPXVWKDYHWKHHME5HPRYH DQGVHW0HVVDJH'ULYHQ&RQWH[W 
PHWKRGVIURPWKH0HVVDJH'ULYHQ%HDQLQWHUIDFHH[DFWO\DVGHFODUHG
LQWKHLQWHUIDFH
SXEOLFYRLGHME5HPRYH ^`
SXEOLFYRLGVHW0HVVDJH'ULYHQ&RQWH[W 0HVVDJH'ULYHQ&RQWH[WFW[ ^
FRQWH[W FW[
`

 1RPHWKRGVLQWKHFODVVDUHDOORZHGWRWKURZDSSOLFDWLRQH[FHSWLRQV $QGWKH\
VKRXOGQ¶WEHGHFODULQJUXQWLPHH[FHSWLRQVHLWKHUDOWKRXJKLW¶VWHFKQLFDOO\OHJDO

 &KDSWHU
PHVVDJHGULYHQEHDQV

6W\QKM[WUM\PQVOUQ[[QVONZWU\PMKWLM'
?MVM^MZ[IQL_PI\SQVLWNUM[[IOM[_M¼ZMTQ[\MVQVONWZ
WZ_PMZM\PMaUQOP\JMKWUQVONZWU
9OUDONTPUTANYTHINGINYOURCODETHATINDICATESTHE*-3DESTINATION
9OUCANPROBABLYGUESSWHENTHATHAPPENSDEPLOY TIME
"UTASA"EAN0ROVIDER YOUTELLTHE$EPLOYERWHETHERYOURELOOKINGFOR
MESSAGESFROMATOPICORQUEUE!NDFORTHAT WELLUSEANEWTAGINTHE
DEPLOYMENTDESCRIPTOR JUSTFORMESSAGE DRIVENBEANS!TDEPLOY TIME THE
$EPLOYERWILLBINDYOURBEANTOASPECIlC4OPICOR1UEUECONlGUREDASA
RESOURCEINTHE%*"SERVER

PHVVDJHGULYHQGHVWLQDWLRQ!
GHVWLQDWLRQW\SH!MDYD[MPV7RSLFGHVWLQDWLRQW\SH!
PHVVDJHGULYHQGHVWLQDWLRQ!
You tell the Deployer if yo
messages from a Topic or uÕre expecting
a Queue

+WUXTM\M,,NWZIUM[[IOMLZQ^MVJMIV
HQWHUSULVHEHDQV!

PHVVDJHGULYHQ!
%HDQ3RRO Remote
HMEQDPH!:HOFRPH1HZ&XVWRPHUHMEQDPH!
w ! N o lo c al view, noin the
client vie donÕt put
KRPH!KHDG¿UVW&XVWRPHU+RPHKRPH! ThereÕs noview at all. So youent interface.
UHPRWH!KHDG¿UVW&XVWRPHUUHPRWH! view. No home and compon
tags for

HMEFODVV!KHDG¿UVW:HOFRPH%HDQHMEFODVV!

WUDQVDFWLRQW\SH!&RQWDLQHUWUDQVDFWLRQW\SH!

PHVVDJHGULYHQGHVWLQDWLRQ!
GHVWLQDWLRQW\SH!MDYD[MPV7RSLFGHVWLQDWLRQW\SH!

PHVVDJHGULYHQGHVWLQDWLRQ!

PHVVDJHGULYHQ! (WeÕll look at an optional tag in


a few pages)
HQWHUSULVHEHDQV!

\RXDUHKHUH 
WRSLFVDQGTXHXHV

<WXQK[IVL9]M]M[
-ESSAGINGCOMESINTWOmAVORSTOPICS
ANDQUEUES ALTHOUGHTOPICSCOMEINTWO
SUBmAVORSˆDURABLESUBSCRIPTIONSANDNON
DURABLESUBSCRIPTIONS (QWHUSULVHV\VWHPVWHQGWR
1UEUESARELIKE&)&/LISTSALTHOUGH&IRST XVHHLWKHUTXHXHVRUGXUDEOH
)N &IRST /UTORDERISNTGUARANTEED 4HE
PRODUCERSENDSAMESSAGETHATSINTENDED WRSLFVXEVFULSWLRQV$QRQ
FORJUSTASINGLECONSUMER/NCESOMEBODY
PROCESSESTHEMESSAGE THATSIT!NEXAMPLE
GXUDEOHWRSLFVXEVFULSWLRQ
MIGHTBEANEMPLOYEEREIMBURSEMENT PLJKWEHDSSURSULDWH
SYSTEM WHERETHEEMPLOYEESENDSHIS
REIMBURSEMENTREQUESTTOTHEMESSAGING VRPHWLPHVEXWLI,·PD
SERVICE ANDSOMEBODYINACCOUNTINGWILL
PROCESSTHEREQUEST)TDOESNTNEEDTOGOTO PHVVDJHFRQVXPHULW·VUHDOO\
ANYBODYELSEATTHATPOINT)FITTURNSOUTTHAT
THENEXTSTEPISTOSENDITFORMANAGEMENT
OLNHVD\LQJ´,GRQ·WFDUH
PROCESSING THEACCOUNTINGDEPARTMENT PXFKDERXWZKHWKHU,JHW
MIGHTSENDAMESSAGETOADIFFERENT
DESTINATIONˆTHE-ANAGER!PPROVALQUEUE WKHVHPHVVDJHVµ
4OPICSUSEAPUBLISHANDSUBSCRIBEMODEL
WHEREAPRODUCERSENDSAMESSAGE AND
ANYONEWHOSLISTENINGASACONSUMERWILL
GETACOPYOFTHEMESSAGE7ORKSJUSTLIKEA
MAILINGLIST)FANYONESUBSCRIBERDOESNTGET
THEMESSAGE THEPRODUCERDOESNTCARE
!TOPICSUBSCRIBERCANREQUESTADURABLE
SUBSCRIPTIONIFHEWANTSTOMAKESURETHAT
HESEESALLMESSAGES INCLUDINGTHEONES
THATACCUMULATEDWHILEHEWASOFmINE FOR
EXAMPLE4HATWILLALMOSTALWAYSBEYOUR
CHOICE BECAUSEYOULLWANTTOGETALLTHE
MESSAGES4HINKABOUTITANON DURABLE
TOPICSUBSCRIPTIONWOULDBELIKEYOUMUSTBE
HOMEATTHETIMEYOURMAGAZINEISDELIVERED
OSYOUSIMPLYWONTSEEIT

 &KDSWHU
PHVVDJHGULYHQEHDQV

4XHXHRQHWRRQH SRLQWWRSRLQW

,·PDQHQWLW\EHDQ
FXUUHQWO\SOD\LQJWKHEULOOLDQWO\
GDVKLQJ7KRPDV3DXODQG,KDYHD
SULYDWHPDWWHUWKDW,ZDQWVRPHRQH
GLVFUHHWWRWDNHFDUHRIULJKWDZD\
EXW,GRQ·WZDQWWRZDLW,KDYHDQ Only one message co-d nsumer (in
ge riven bean)
DXGLWLRQFRPLQJXS this case, a messa
gets the message.
:H·OOÀQGD 2.WKDQNVIRU
EHDQWRKDQGOH WKHPHVVDJH1RQHHG
WKDWIRU\RX WRJLYHLWWRDQ\RQH
HOVH

-06
0HVVDJLQJ
6HUYLFH

7RSLFRQHWRPDQ\ SXEOLVKVXEVFULEH
This time, ALL beHi ans
vents
1RZ,KDYHDSDUW\ subscribed to th pE
e
ssa ge.
topic will get th e me
LQYLWDWLRQ-XVWVHQGLWRXWWR
HYHU\RQHOLVWHQLQJRQ7KRPDV
3DXO·V´+LS(YHQWVµOLVW

2.ZH·OOVHQGLW
WRHYHU\RQHZKR·V
LQWHUHVWHG

-06
0HVVDJLQJ
6HUYLFH

\RXDUHKHUH 
PHVVDJHGULYHQEHDQV

there are no
Dumb Questions

Q: (OWDOES*-3lTINTOALL Q: 7HYDOESNTTHE Q: )FITSATOPIC DOESTHATMEAN


THIS!NDIF)HAVEAMESSAGE DRIVEN -ESSAGE$RIVEN"EANJUSTEXTEND ALLBEANSINAPARTICULARSUBSCRIBER
BEAN WHEREDO)GETTHEMESSAGING THE-ESSAGE,ISTENERINTERFACE POOLWILLGETTHEMESSAGE
SERVICE 4HATWAYYOUWOULDNTHAVETO

A:
IMPLEMENTBOTHINTERFACES
A: .O2EMEMBER ONEBEANCAN
*-3ISTHE*AVA-ESSAGING
3ERVICE!0)THATSREQUIREDBY%*" A: 3EEYOURPREVIOUSQUESTION
STANDINFORALLTHEOTHERBEANS4HE
#ONTAINERWILLDELIVERTHEMESSAGETO
4HATMEANSYOUR%*"CONTAINERMUST 4HE*%%TEAMDIDNTWANTTOLOCK JUST/.%BEANINTHEPOOL5NLESSNO
HAVESOMEKINDOFMESSAGINGSERVICE ALLMESSAGE DRIVENBEANSINTOBEING NEVERMIND
INCLUDED ALTHOUGHMANYVENDORS *-3LISTENERS/NEDAY THEREMIGHTBE
CANWORKWITHMULTIPLEMESSAGING MANYKINDSOFLISTENERINTERFACESFOR
SERVICESASLONGASTHOSESERVICES DIFFERENTMESSAGINGTYPES
SUPPORTTHE*-3!0) Q: 5NLESSWHAT4ELLME
4HE*-3!0)WORKSMUCHLIKE*$"#ˆ
YOUHAVEADRIVERTHATKNOWSHOW
TOTAKEYOURSTANDARD*-3!0)CALLS Q: !REMESSAGESGUARANTEEDTO A: /+ /+"UTTHISISNTONTHE
ANDTRANSLATETHEMINTOSOMETHING COMEINORDER7ILL)ALWAYSGETTHE EXAM SORELAX,ETSSAYYOURSERVERIS
THEUNDERLYINGMESSAGINGSYSTEM lRSTONElRST RUNNINGASACLUSTEREDCONFIGURATION
UNDERSTANDS WHEREYOUCOULDHAVEMULTIPLE

A: .O9OUBETTERNOTDEPENDON
INSTANCESOFYOURSERVERRUNNING)N
THATCASE THEREISNOGUARANTEEABOUT
ITOR"AD4HINGS-IGHT(APPEN&OR HOWTHE#ONTAINERWILLREPRESENTITSELF
Q: #AN)GETMESSAGESFROMNON EXAMPLE YOUMIGHTGETTHEh#ANCEL
THE/RDERvMESSAGEBEFOREYOUGET
TOTHEMESSAGINGSERVICE
*-3MESSAGINGSERVICES 4HEQUESTIONBECOMES DOESTHE
THEh0LACETHE/RDERvMESSAGE$ESIGN MESSAGINGSERVICESEETHEWHOLE
YOURSYSTEMANDCODEYOURBEANON
A: .OTRIGHTNOW IN%*" BUT THEASSUMPTIONTHATMESSAGEORDERIS
NOTSTRICTLYGUARANTEED
CLUSTERAS/.%VERSIONOFYOUR
APPLICATION NOMATTERHOWMANY
THEYTHEINFAMOUS*%%TEAM HOPE *6-SITSRUNNINGON ORDOESTHE
TOADDTHATCAPABILITYSOMEDAY MESSAGINGSERVICESEEEACHCLUSTER
WITHITSOWNDUPLICATEDPOOLFOREACH
BEANTYPE ASASEPARATELISTENER

 &KDSWHU
PHVVDJHGULYHQEHDQV

7VTa76-JMIVXMZXWWTOM\[
IKWXaWNI\WXQKUM[[IOM
)FYOUHAVE SAY THE7ELCOME"EANSUBSCRIBEDTO
THE.EW#USTOMERTOPIC WHENANEWMESSAGEIS
PUBLISHEDTOTHATTOPIC THE#ONTAINERWILLCHOOSE
ONLYONEBEANFROMTHE7ELCOME"EANPOOLTOGET
THEMESSAGE2EMEMBER THE#ONTAINERKEEPSA
SEPARATEPOOLOFBEANSFOREACHHOMEANDEVERY
DEPLOYEDBEANTYPEGETSITSOWNHOME 4HE
#ONTAINERDOESNTPUTALLMESSAGE DRIVENBEANS
INTOONEPOOL EVENIFTHEYRESUBSCRIBEDTOTHE
SAMETOPICS bscriber
Only one bean per sussa ge. NOT
"UTIFTHEREAREMULTIPLEBEANTYPESSUBSCRIBED
pool will get th e me
!
TOTHATTOPIC ONEBEANFROMEACHOFTHOSEPOOLS
every bean in the pool
WILLALSOGETTHEMESSAGE)NTHISPICTURE BOTH
THE7ELCOME"EANANDTHE.EW3ALES"EANARE
1HZ&XVWRPHU
SUBSCRIBERSTOTHE.EW#USTOMERTOPIC SOTHE 7RSLFVXEVFULEHU
#ONTAINERSELECTSONEBEANFROMEACHPOOLTOGET
THEMESSAGE

EHDQ
EHDQ
EHDQ :HOFRPH%HDQ
PVJ
3RRO
-06
0HVVDJLQJ
PVJ 6HUYLFH

1HZ&XVWRPHU PVJ
7RSLFPHVVDJH

1HZ&XVWRPHU
7RSLFVXEVFULEHU

EHDQ

EHDQ
EHDQ

1HZ6DOHV%HDQ
3RRO

\RXDUHKHUH 
-06TXHXH

?Q\PIY]M]MWVTaWVMJMIV
OM\[\PMUM[[IOM8MZQWL
)FYOUHAVEAQUEUEFORMESSAGESREQUESTINGTHAT
ANEWCUSTOMERBEPROCESSED ONLYONEBEAN
FROMTHEPOOLASSOCIATEDWITHTHATQUEUEWILLGET
THEMESSAGE4HATSIT
/H ANDDONTEVENTHINKABOUTASKINGWHAT
HAPPENSIFYOUHAVEMORETHANONEBEANTYPE
POOL ASSOCIATEDWITHTHATQUEUE
"UTIFYOUPERSIST WELLTELLYOUTHAT*-3DOESNT
DElNEWHATHAPPENSWHENTHEREISMORETHAN
ONECONSUMERFORAPARTICULARQUEUE4HAT
ol will
Only one bean in the Tpoevery
MEANSTHERESNOWAYTOKNOWHOWTHEMESSAGES
MIGHTBEDISTRIBUTEDAMONGTHEDIFFERENTQUEUE
CONSUMERS-AYBETHEMESSAGINGSERVICEWILLJUST get the message. NO
PICKONEATRANDOM"UTMAYBEITWONT-AYBE bean in the pool !
ITLLJUSTPICKTHElRSTONEINAPROPERTIESlLEAND
SENDEVERYTHINGTHERE3O JUSTDONTDOIT 3URFHVV&XVWRPHU
TXHXHOLVWHQHU

EHDQ
EHDQ
EHDQ &XVW3URFHVV%HDQ
PVJ
3RRO
-06
0HVVDJLQJ
PVJ 6HUYLFH

3URFHVV&XVWRPHU
TXHXHPHVVDJH

 &KDSWHU
PHVVDJHGULYHQEHDQV

5M[[IOM,ZQ^MV+WV\M`\ 6KDUSHQ \RXU SHQFLO


4HESERVERMAKESMESSAGE DRIVENBEANSVIRTUALLY
7KLQNDERXWZKLFKPHWKRGVDPHVVDJHGULYHQEHDQ
THESAMEWAYINWHICHITMAKESSTATELESSSESSION
FRXOGFDOORQLWVFRQWH[W
BEANS )URPWKHOLVWRIPHWKRGVLQ(-%&RQWH[WFURVV
#ALLTHEBEANSCONSTRUCTORMUSTBENO ARG  RXWWKRVHPHWKRGVWKDWGRQRWPDNHVHQVHIRUD
PHVVDJHGULYHQEHDQ DQGE\³GRQRWPDNHVHQVH´
#ALLTHEBEANSCONTEXTSETTER ZHPHDQ³ZLOOFDXVHDKRUULEOHUXQWLPHH[FHSWLRQ
#ALLTHEBEANSEJB#REATE METHOD ZLWKGHYDVWDWLQJDQGSRWHQWLDOO\FDUHHUHQGLQJ
FRQVHTXHQFHV´ 
)NFACT THElRSTTWOSTEPSARETHESAMEFORALL 2KDQGEHSUHSDUHGWRGHIHQG\RXUDQVZHUV
BEANTYPES4HECONTEXTSETTERALWAYSCOMES ,PDJLQHXVVLWWLQJULJKWEHKLQG\RXVFDULO\
IMMEDIATELYAFTERTHEBEANSCONSTRUCTOR ANDAT GHPDQGLQJMXVWL¿FDWLRQIRU\RXUFKRLFHV
SOMEPOINTBEFOREEJB#REATE !NDOFCOURSE
ANENTITYBEANMIGHTNEVERGETANEJB#REATE
CALL IFTHEREARENTANYCLIENTSTRYINGTOINSERTNEW LQWHUIDFH!!
ENTITIESINTOTHEDATABASE (-%&RQWH[W

3O WHATCANAMESSAGE DRIVENBEANDOWITHITS
JHW&DOOHU3ULQFLSDO
CONTEXT7ETHINKITSTIMEFORYOUTOlGURETHAT
OUT7ECANGUARANTEETHEREWILLBEQUESTIONS JHW(-%+RPH
ONTHEEXAMRELATEDTOWHATAMESSAGE DRIVEN LV&DOOHU,Q5ROH 6WULQJV 
BEANCANANDCANNOTDOWITHITSCONTEXT)NFACT JHW5ROOEDFN2QO\
YOULLlNDTHESEQUESTIONSSCATTEREDTHROUGHOUT JHW(-%/RFDO+RPH
THEOBJECTIVES NOTJUSTINTHEMESSAGE DRIVEN JHW8VHU7UDQVDFWLRQ
BEANOBJECTIVESn 1UESTIONSFROMTHE
VHW5ROOEDFN2QO\
TRANSACTIONS EXCEPTIONS ANDSECURITYOBJECTIVES
MIGHTINVOLVEAMESSAGE DRIVENBEANANDITS
CONTEXT
4HISISJUSTOURWAYOFSAYINGDOTHEDAMNEXERCISE
9OUDONTWANTTOHAVETOMEMORIZETHISSTUFF BUT LQWHUIDFH!!
IFYOUJUSTSPENDAFEWMOMENTSTHINKINGABOUT 0HVVDJH'ULYHQ&RQWH[W
IT YOULLlGUREITOUT WKLVLQWHUIDFHDGGVQR
4HEANSWERSAREONTHENEXTPAGE THOUGH SO QHZPHWKRGV
DONTTURNUNTILYOUREDONE

\RXDUHKHUH 
0HVVDJH'ULYHQ&RQWH[W

5M[[IOM,ZQ^MV+WV\M`\

LQWHUIDFH!!
,W·VVLPSOH0HVVDJHGULYHQ
al() and
(-%&RQWH[W
getCallerPrincip) give you EHDQVGRQ·WKDYHFOLHQWV7KDW
isCallerInRole(about the
JHW&DOOHU3ULQFLSDO security info u donÕt PHDQVWKH\GRQ·WKDYHDFOLHQW
JHW(-%+RPH client. But yo . 9,(:VRWKHUH·VQRKRPH
LV&DOOHU,Q5ROH 6WULQJ V HAVE a client
JHW5ROOEDFN2QO\
LQWHUIDFH
JHW(-%/RFDO+RPH
HW(
JHW8VHU7UDQVDFWLRQ
$QGVLQFHWKHUH·VQRFOLHQW
0\OLIHLVVDG,KDYH
VHW5ROOEDFN2QO\ QRKRPH,KDYHQRFDOOHUV
WKHUH·VQRFOLHQWVHFXULW\
H[FHSWWKHVWXSLG&RQWDLQHU
DQGWKDW·VOLNHVD\LQJWKHRQO\
LQIRUPDWLRQ
IULHQGV\RXKDYHDUH\RXU
SDUHQWV 2KZHOODWOHDVW 6R\RXFDQ·WFDOOWKHWZR
,JHWDSRRO
LQWHUIDFH!!
0HVVDJH'ULYHQ&RQWH[W
PHWKRGVIRUJHWWLQJWKHKRPH
WKLVLQWHUIDFHDGGVQR VLQFH\RX+$9(QRKRPH RU
QHZPHWKRGV WKHWZRPHWKRGVIRUJHWWLQJ
LQIRDERXWWKHFDOOHU·VVHFXULW\

WKHUH DUH QR
'XPE 4XHVWLRQV
Q: 9OUKEEPSAYINGTHATMESSAGE DRIVEN
BEANSDONTHAVECLIENTS"UT3/-%"/$9HAS
TOCALLTHEBEANSMETHODS RIGHT4HEYDONT
CALLTHEMSELVES

A: 4ECHNICALLY YES THEBEANSMETHODSARE


CALLED"UTWEDONTCONSIDERTHE#ONTAINERTO
BEACLIENT)TSTHEBOSS NOTTHECUSTOMER3O IN
THE*AVASENSE THE#ONTAINERISTHEBEANSCALLER
BUTNOTACLIENT!NDASFORGETTINGSECURITYINFO
IFTHEBEANDOESNTTRUSTITSOWN#ONTAINER YOU
HAVEWAAAAYBIGGERPROBLEMS7ERETALKINGONE
SERIOUSLYPARANOIDBEAN

 &KDSWHU
PHVVDJHGULYHQEHDQV

?PI\QN[WUM\PQVOOWM[_ZWVO'

(YHU\WKLQJZDVJRLQJVRZHOO

:H·OOÀQGD 2.WKDQNVIRU
EHDQWRKDQGOH WKHPHVVDJH1RQHHG
WKDWIRU\RX WRJLYHLWWRDQ\RQH
HOVH

-06
0HVVDJLQJ
6HUYLFH

:KHQVXGGHQO\
+RXVWRQZHKDYH
DSUREOHP/RRNVOLNHZH
EHWWHUSXWWKDWPHVVDJHEDFN
RQWKHTXHXHVRVRPHERG\HOVH
FDQGHDOZLWKLW3RRUEHDQ
PXVWKDYHKLWDUXQWLPH
H[FHSWLRQ

-06
0HVVDJLQJ
6HUYLFH

\RXDUHKHUH 
PHVVDJHDFNQRZOHGJHPHQW

5M[[IOMIKSVW_TMLOMUMV\
9OUDONTWANTMESSAGESGETTINGLOST)FYOUHAVEACRUCIALMESSAGE
ONTHEQUEUE ANDTHEONEBEANWHOGETSITCANTCOMMITˆOR
WORSE THROWSANEXCEPTIONANDDIESˆWHATHAPPENSTOYOURCRITICAL
MESSAGE
4HATSTHEPOINTOFACKNOWLEDGEMENT4HE#ONTAINERTELLSTHE
MESSAGINGSERVICENOTTHEORIGINALPRODUCER THATTHEMESSAGEWAS
DELIVEREDANDEVERYTHINGISlNE
"UTIFLATER WHILETHECONSUMERTHEMESSAGE DRIVENBEAN IS
PROCESSINGTHEMESSAGE A"AD4HINGHAPPENS THE#ONTAINERCAN
TELLTHEMESSAGINGSERVICETOPUTTHEMESSAGEBACKINTHEQUEUE
(OWDOESTHE#ONTAINERREALLYKNOWTHATSOMETHINGWENTWRONG
4WOWAYS ANDITSYOURCHOICEASA"EAN0ROVIDER

 7KHWUDQVDFWLRQVWDWXV
-ESSAGEACKNOWLEDGEMENTISTIEDTOWHETHERTHETRANSACTION
COMMITSORROLLSBACK)FTHETRANSACTIONROLLSBACK THEMESSAGE
GOESBACKONTHEQUEUE9OUGETTHISBEHAVIORFORBEANSTHATUSE
CONTAINER MANAGEDTRANSACTIONDEMARCATIONWELLCOVERTRANSACTIONS
INTHENEXTCHAPTER 

25

 7KHPHWKRGFRPSOHWLRQ
-ESSAGEACKNOWLEDGEMENTISTIEDTOWHETHERTHEMETHOD
COMPLETESSUCCESSFULLY)FTHEMETHODTHROWSARUNTIME
EXCEPTION THEMESSAGEGOESBACKONTHEQUEUE9OUGET
THISBEHAVIORFORBEANSTHATUSEBEAN MANAGEDTRANSACTION
DEMARCATION

 &KDSWHU
PHVVDJHGULYHQEHDQV

<PI\¼[ITT_MTTIVLOWWLJ]\TM\¼[OWJIKSIVL
[MMPW_W]ZMIZTQMZ[KMVIZQWMVLML

2.WKDQNVIRU 1RSUREOHP
+HUH·VD
WKHPHVVDJH1RQHHG ZH·OOMXVWSXOODQRWKHU
PHVVDJHIURP
WRJLYHLWWRDQ\RQH EHDQRXWRIWKH
WKHTXHXH
HOVH SRRO

-06
0HVVDJLQJ -06
6HUYLFH 0HVVDJLQJ
6HUYLFH

%HDQ$DOLYH %HDQ$GHDG

2KGHÀQLWHO\ :KDWLV
+HUH·VDPHVVDJH 7KHUH·VQRWKLQJ, LWZLWKWKHVHJX\V"
IURPWKHTXHXH,·PVXUH FDQ·WKDQGOH 2KZHOOOHW·VJRSXOO
\RX·OOGREHWWHUWKDQ DQRWKHURQHRXWRI
WKDW/$67JX\ WKHSRRO

-06
-06 0HVVDJLQJ
0HVVDJLQJ 6HUYLFH
6HUYLFH
%HDQ%DOLYH
%HDQ%GHDG

+HUH·VDPHVVDJH 7KRVHRWKHU 8PGR\RXWKLQN


IURPWKHTXHXH/HW·V EHDQVZHUHZHDN PD\EHWKHUH·VVRPHWKLQJ
KRSH<28FDQGRWKLV ZURQJZLWKWKH
RQH PHVVDJH"

-06
-06 0HVVDJLQJ
0HVVDJLQJ 6HUYLFH
6HUYLFH
%HDQ&DOLYH %HDQ&GHDG

\RXDUHKHUH 
PHVVDJHDFNQRZOHGJHPHQW

<PQVSIJW]\Q\
)FYOUWANTYOURMESSAGEACKNOWLEDGEMENTTIEDTOTHESTATUSOFTHETRANSACTION USE
CONTAINER MANAGEDTRANSACTIONS#-4 -OSTOFTHETIME THISWILLBEYOURCHOICE
"UTIFYOUWANTTODECOUPLEMESSAGE ACKNOWLEDGEMENTFROMTHESTATUSOFYOUR
TRANSACTION YOURONLYCHOICEISTOUSEBEAN MANAGEDTRANSACTIONDEMARCATION
"-4 7ITH"-4 THE#ONTAINERLOOKSONLYATWHETHERYOURMETHODCOMPLETES
-ETHODCOMPLETES&INE THEMESSAGEACKNOWLEDGEMENTSTANDS2UNTIME
EXCEPTION-ESSAGEGOESBACKINTHEQUEUE
"UTWHATIFYOUHAVEASCENARIOWHERETHEBEANCANNEVERCOMMIT BECAUSEOF
SOMETHINGINHERENTLYBADABOUTTHEMESSAGE7ITH#-4 THATMESSAGEWILLKEEP
COMINGANDCOMINGANDCOMINGANDBUTNOTFOREVER-OSTMESSAGINGSERVICESLET
YOUCONlGUREHOWMANYTIMESAPARTICULARMESSAGEISRESENTBEFORETHESERVICESAYS
h4HISMESSAGELOOKSLIKEPOISONLETSSENDITTOA3PECIAL0LACELIKEA"AD-ESSAGE
QUEUE WHEREITCANTHARMANYONEv9OUREALLYNEEDTOWATCHOUTFORTHIS BECAUSE
THERESNOTHINGINTHESPECTOHELP9OURERELIANTONYOURSERVERVENDOR
4HEREISANOTHERPOSSIBILITY THOUGH7ITH"-4 YOUCOULDWRITEYOURMETHODIN
SUCHAWAYTHATYOUROLLBACKTHEMETHOD BUTSTILLlNISHTHEMETHOD4HATWAY THE
#ONTAINERJUSTGOESWHISTLINGONITSMERRYWAYTHINKINGEVERYTHINGWASlNE)THASNO
IDEATHATTHINGSWENTBADLY)NTHISSCENARIO YOUDCATCHWHATEVEREXCEPTIONCOMES
UP ROLLBACKTHETRANSACTIONYOURSELFAGAIN YOULLLEARNHOWTODOTHATVERYSOON
ANDTHENENDTHEMETHODLOOKINGSUCCESSFULATLEASTTOTHE#ONTAINER 

6HWWLQJWKHDFNQRZOHGJHPHQWPRGH
)FYOU$/USE"-4 YOUHAVETWOCHOICESFORHOWTHE#ONTAINERSENDSAN
ACKNOWLEDGEMENTTOTHEMESSAGINGSERVICE4HECHOICESARE
DFNQRZOHGJHPRGH!$XWRDFNQRZOHGJHDFNQRZOHGJHPRGH!
/2
DFNQRZOHGJHPRGH!'XSVRNDFNQRZOHGJHDFNQRZOHGJHPRGH!
4HISDOESNTCHANGETHE#ONTAINERSBEHAVIOROFWHETHERITDECIDESTODOTHE
ACKNOWLEDGEMENTˆFORA"-4BEANITSALWAYSBASEDONWHETHERTHEMETHOD
COMPLETES4HEACKNOWLEDGEMODEISSIMPLYAWAYTOTWEAKHOWTHE#ONTAINER
SENDSTHEACKNOWLEDGEMENT
7ITH$UPS OK ACKNOWLEDGE YOURETELLINGTHE#ONTAINERTHATYOUDONTMINDIFITS
KINDOFSLOWWITHTHEACKNOWLEDGEMENTTOTHEMESSAGESERVICETHATYOUDONTMIND
IFYOUGETDUPLICATEMESSAGEShDUPS OKv 4HISLETSTHE#ONTAINERTAKEWHATEVER
TIMEITWANTSTODOTHEACKNOWLEDGEMENT ANDITMIGHTMAKETHESERVERMORE
EFlCIENT BUTATTHERISKOFDUPLICATEMESSAGESBECAUSETHEPOORMESSAGINGSERVICE
DIDNTGETANACKNOWLEDGEMENTQUICKLYENOUGH

 &KDSWHU
PHVVDJHGULYHQEHDQV

([HUFLVH

 )LOOLQWKHEODQNVZLWKWKHFRGHWKDWPXVWEHLQVHUWHGIRU
WKHEHDQWREHDOHJDOPHVVDJHGULYHQEHDQFODVV

SDFNDJHKHDG¿UVW

LPSRUWMDYD[HME 
LPSRUWMDYD[MPV 

SXEOLFFODVV)RR/LVWHQHU%HDQBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB^

SULYDWH0HVVDJH'ULYHQ&RQWH[WFRQWH[W




SXEOLFYRLGBBBBBBBBBBBBBBBBBBBBBBBBBBBB

SXEOLFYRLGBBBBBBBBBBBBBBBBBBBBBBBBBBBB

SXEOLFYRLGVHW0HVVDJH'ULYHQ&RQWH[W 0HVVDJH'ULYHQ&RQWH[WFW[ ^
FRQWH[W FW[
`

SXEOLFYRLGBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB

 /LVWWZRWKLQJVDVWDWHIXOVHVVLRQEHDQFDQFDOORQLWV
6HVVLRQ&RQWH[WWKDWDPHVVDJHGULYHQEHDQFDQQHYHU
FDOORQLWV0HVVDJH'ULYHQ&RQWH[W

BBBBBBBBBBBBBBBBBBBBBBBBBBBB

BBBBBBBBBBBBBBBBBBBBBBBBBBBB

\RXDUHKHUH 
PHVVDJHGULYHQEHDQV

6ROXWLRQ

 )LOOLQWKHEODQNVZLWKWKHFRGHWKDWPXVWEHLQVHUWHGIRU
WKHEHDQWREHDOHJDOPHVVDJHGULYHQEHDQFODVV

SDFNDJHKHDG¿UVW

LPSRUWMDYD[HME 
LPSRUWMDYD[MPV 

implements MessageDrivenBean, MessageListener


SXEOLFFODVV)RR/LVWHQHU%HDQBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB^

SULYDWH0HVVDJH'ULYHQ&RQWH[WFRQWH[W



ejbCreate() { }
SXEOLFYRLGBBBBBBBBBBBBBBBBBBBBBBBBBBBB

ejbRemove() { }
SXEOLFYRLGBBBBBBBBBBBBBBBBBBBBBBBBBBBB

SXEOLFYRLGVHW0HVVDJH'ULYHQ&RQWH[W 0HVVDJH'ULYHQ&RQWH[WFW[ ^
FRQWH[W FW[
`

onMessage(Message msg) { }
SXEOLFYRLGBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB

 /LVWWZRWKLQJVDVWDWHIXOVHVVLRQEHDQFDQFDOORQLWV
6HVVLRQ&RQWH[WWKDWDPHVVDJHGULYHQEHDQFDQQHYHU
FDOORQLWV0HVVDJH'ULYHQ&RQWH[W

call isCallerInRole() (thereÕs no client!)


BBBBBBBBBBBBBBBBBBBBBBBBBBBB

call getEJBHome() (thereÕs no client view, so thereÕs no home or component interface)


BBBBBBBBBBBBBBBBBBBBBBBBBBBB

 &KDSWHU
PHVVDJHGULYHQEHDQV

0RFN([DP
7HATSTRUEABOUTMESSAGE DRIVENBEANS#HOOSEALLTHATAPPLY
1
R! !MESSAGE DRIVENBEANHASAHOMEINTERFACEBUTNOCOMPONENT
INTERFACE
R" !CLIENTNEVERKNOWSAMESSAGE DRIVENBEANSIDENTITY
R# !CLIENTSEESAMESSAGE DRIVENBEANASA*AVA-AILMESSAGECONSUMER
R$ 4HELIFETIMEOFAMESSAGE DRIVENBEANISCONTROLLEDBYTHECONTAINER

7HICHINTERFACESMUSTBEIMPLEMENTEDINAMESSAGE DRIVENBEANCLASSORIN
2 ONEOFITSSUPERCLASSES#HOOSEALLTHATAPPLY
R! MDYD[MPV0HVVDJH
R" MDYD[MPV0HVVDJH/LVWHQHU
R# MDYD[MPV0HVVDJH&RQVXPHU
R$ MDYD[HME0HVVDJH'ULYHQ%HDQ
R% MDYD[HME0HVVDJH'ULYHQ&RQWH[W

7HICHLISTPROPERLYSEQUENCESTHEMETHODSCALLEDINTHELIFECYCLEOFAMESSAGE
3 DRIVENBEAN#HOOSEALLTHATAPPLY
R! HME&UHDWH QHZ,QVWDQFH VHW0HVVDJH'ULYHQ&RQWH[W 
RQ0HVVDJH
R" RQ0HVVDJH QHZ,QVWDQFH HME&UHDWH 
VHW0HVVDJH'ULYHQ&RQWH[W
R# QHZ,QVWDQFH VHW0HVVDJH'ULYHQ&RQWH[W HME&UHDWH 
RQ0HVVDJH
R$ QHZ,QVWDQFH HME&UHDWH VHW0HVVDJH'ULYHQ&RQWH[W 
RQ0HVVDJH
R% HME&UHDWH VHW0HVVDJH'ULYHQ&RQWH[W QHZ,QVWDQFH 
RQ0HVVDJH

\RXDUHKHUH 
FRIIHHFUDPPRFNH[DP

7HICHAREVALIDSIGNATURES FORMETHODSINAMESSAGE DRIVENBEAN#HOOSE


4 ALLTHATAPPLY
R! SXEOLFYRLGRQ0HVVDJH
R" SXEOLFYRLGHME&UHDWH
R# SXEOLFVWDWLFYRLGRQ0HVVDJH
R$ SXEOLFYRLGHME&UHDWH MDYD[MPV0HVVDJHP
R% SXEOLFYRLGRQ0HVVDJH MDYD[MPV0HVVDJHP
R&SXEOLFYRLGRQ0HVVDJH MDYD[MPV0HVVDJHP WKURZV
MDYDUPL5HPRWH([FHSWLRQ

7HENISAMESSAGE DRIVENBEANABLETOACCESSJAVACOMPENVVIA*.$)
5
R! HME&UHDWH
R" HME5HPRYH
R# VHW0HVVDJH'ULYHQ&RQWH[W
R$ .ONEOFTHEABOVE

7HICHMESSAGE DRIVENBEANMETHODSTAKEANARGUMENT#HOOSEALLTHAT
6 APPLY
R! HME&UHDWH
R"HME5HPRYH
R# RQ0HVVDJH
R$ VHW0HVVDJH'ULYHQ&RQWH[W

7HENISAMESSAGE DRIVENBEANABLETOACCESSOTHERENTERPRISEBEANS
7
R! HME&UHDWH
R" HME5HPRYH
R# RQ0HVVDJH
R$ VHW0HVVDJH'ULYHQ&RQWH[W
R% .ONEOFTHEABOVE

 &KDSWHU
PHVVDJHGULYHQEHDQV

7HATSTRUEABOUT#ONTAINERSUPPORTFORMESSAGE DRIVENBEANS#HOOSEALL
8 THATAPPLY
R! 4HE#ONTAINERMUSTSUPPORTTHEDEPLOYMENTOFAMESSAGE DRIVENBEAN
ASTHECONSUMEROFA*AVA-AILQUEUE
R" 4HE#ONTAINERIS./4REQUIREDTOSUPPORTTRANSACTIONSCOPINGFOR
MESSAGE DRIVENBEANS
R# 4HE#ONTAINERGUARANTEESlRST IN lRSTDELIVEREDMESSAGEPROCESSING
R$ 4HE#ONTAINERMUSTENSURETHATTHEBEANINSTANCESARENON REENTRANT
7HENISAMESSAGE DRIVENBEANWITH"-4DEMARCATIONABLETOACCESSRESOURCE
9 MANAGERS
R! HME&UHDWH
R" HME5HPRYH
R# RQ0HVVDJH
R$ VHW0HVVDJH'ULYHQ&RQWH[W
R% .ONEOFTHEABOVE

7HATSTRUEABOUTMESSAGEACKNOWLEDGMENTFORMESSAGE DRIVENBEANS
10 #HOOSEALLTHATAPPLY
R! -ESSAGEACKNOWLEDGEMENTMODESCANNOTBEDElNEDDECLARATIVELY
R" 4HE*-3!0)SHOULDBEUSEDFORMESSAGEACKNOWLEDGMENT
R# &OR"-4BEANS THE#ONTAINERUSESTHEACKNOWLEDGE MODEDEPLOYMENT
DESCRIPTORELEMENT
R$ &OR#-4BEANS THE#ONTAINERUSESTHEACKNOWLEDGE MODE
DEPLOYMENTDESCRIPTORELEMENT

7HATSTRUEABOUTTHEDEPLOYMENTDESCRIPTORFORMESSAGE DRIVENBEANS
11 #HOOSEALLTHATAPPLY
R! 4HEBEANPROVIDERMUSTGUARANTEETHATTHEBEANISASSOCIATEDWITHA
SPECIlCQUEUEORTOPIC
R" 4HEDEPLOYMENTDESCRIPTORCANINDICATEWHETHERABEANISINTENDEDFOR
ATOPICORAQUEUE
R# )TCANINDICATEWHETHERA1UEUETYPEBEANSHOULDSUPPORTDURABLE
SUBSCRIPTIONORNOT
R$ )TISAPPROPRIATETOASSOCIATEMULTIPLEBEANSWITHTHESAME*-3QUEUE

\RXDUHKHUH 
PRFNH[DPDQVZHUV

0RFN([DP$QVZHUV
(spec: 311-312)
7HATSTRUEABOUTMESSAGE DRIVENBEANS#HOOSEALLTHATAPPLY
1
R! !MESSAGE DRIVENBEANHASAHOMEINTERFACEBUTNOCOMPONENT
INTERFACE - MDBs have NO client view
R" !CLIENTNEVERKNOWSAMESSAGE DRIVENBEANSIDENTITY
R# !CLIENTSEESAMESSAGE DRIVENBEANASA*AVA-AILMESSAGECONSUMER
R$ 4HELIFETIMEOFAMESSAGE DRIVENBEANISCONTROLLEDBYTHECONTAINER

7HICHINTERFACESMUSTBEIMPLEMENTEDINAMESSAGE DRIVENBEANCLASSORIN (spec: 314-315)


2 ONEOFITSSUPERCLASSES#HOOSEALLTHATAPPLY
R! MDYD[MPV0HVVDJH
R" MDYD[MPV0HVVDJH/LVWHQHU - this is where the onMessage() method is deÞned
R# MDYD[MPV0HVVDJH&RQVXPHU
R$ MDYD[HME0HVVDJH'ULYHQ%HDQ
R% MDYD[HME0HVVDJH'ULYHQ&RQWH[W

7HICHLISTPROPERLYSEQUENCESTHEMETHODSCALLEDINTHELIFECYCLEOFAMESSAGE (spec: 319)


3 DRIVENBEAN#HOOSEALLTHATAPPLY
R! HME&UHDWH QHZ,QVWDQFH VHW0HVVDJH'ULYHQ&RQWH[W 
RQ0HVVDJH
R" RQ0HVVDJH QHZ,QVWDQFH HME&UHDWH 
VHW0HVVDJH'ULYHQ&RQWH[W
R# QHZ,QVWDQFH VHW0HVVDJH'ULYHQ&RQWH[W HME&UHDWH 
RQ0HVVDJH
R$ QHZ,QVWDQFH HME&UHDWH VHW0HVVDJH'ULYHQ&RQWH[W 
RQ0HVVDJH
R% HME&UHDWH VHW0HVVDJH'ULYHQ&RQWH[W QHZ,QVWDQFH 
RQ0HVVDJH

 &KDSWHU
PHVVDJHGULYHQEHDQV

7HICHAREVALIDSIGNATURES FORMETHODSINAMESSAGE DRIVENBEAN#HOOSE


4 ALLTHATAPPLY (spec: 324)
R! SXEOLFYRLGRQ0HVVDJH
R" SXEOLFYRLGHME&UHDWH
R# SXEOLFVWDWLFYRLGRQ0HVVDJH
R$ SXEOLFYRLGHME&UHDWH MDYD[MPV0HVVDJHP
R% SXEOLFYRLGRQ0HVVDJH MDYD[MPV0HVVDJHP
R&SXEOLFYRLGRQ0HVVDJH MDYD[MPV0HVVDJHP WKURZV
MDYDUPL5HPRWH([FHSWLRQ
- you must never declare a RemoteException
7HENISAMESSAGE DRIVENBEANABLETOACCESSJAVACOMPENVVIA*.$) (spec: 320)
5
R! HME&UHDWH
R" HME5HPRYH
R# VHW0HVVDJH'ULYHQ&RQWH[W
R$ .ONEOFTHEABOVE

7HICHMESSAGE DRIVENBEANMETHODSTAKEANARGUMENT#HOOSEALLTHAT (spec: 319, 324)


6 APPLY
R! HME&UHDWH
R"HME5HPRYH
R# RQ0HVVDJH - takes a mes
sage
R$ VHW0HVVDJH'ULYHQ&RQWH[W - takes a context

7 7HENISAMESSAGE DRIVENBEANABLETOACCESSOTHERENTERPRISEBEANS (spec: 320)


R! HME&UHDWH
ful
R" HME5HPRYH
on ly in a m et ho d with a Ômeaning
R# RQ0HVVDJH -transaction contextÕ
R$ VHW0HVVDJH'ULYHQ&RQWH[W
R% .ONEOFTHEABOVE

\RXDUHKHUH 
PRFNH[DPDQVZHUV

7HATSTRUEABOUT#ONTAINERSUPPORTFORMESSAGE DRIVENBEANS#HOOSEALL (spec: 325-326)


8 THATAPPLY
R! 4HE#ONTAINERMUSTSUPPORTTHEDEPLOYMENTOFAMESSAGE DRIVENBEAN
ASTHECONSUMEROFA*AVA-AILQUEUE
R" 4HE#ONTAINERIS./4REQUIREDTOSUPPORTTRANSACTIONSCOPINGFOR
MESSAGE DRIVENBEANS
R# 4HE#ONTAINERGUARANTEESlRST IN lRSTDELIVEREDMESSAGEPROCESSING
R$ 4HE#ONTAINERMUSTENSURETHATTHEBEANINSTANCESARENON REENTRANT
7HENISAMESSAGE DRIVENBEANWITH"-4DEMARCATIONABLETOACCESSRESOURCE (spec: 320)
9 MANAGERS
R! HME&UHDWH
R" HME5HPRYH
R# RQ0HVVDJH - when there is a Ômeaningful transaction contextÕ
R$ VHW0HVVDJH'ULYHQ&RQWH[W
R% .ONEOFTHEABOVE

7HATSTRUEABOUTMESSAGEACKNOWLEDGMENTFORMESSAGE DRIVENBEANS (spec: 317)


10 #HOOSEALLTHATAPPLY
R! -ESSAGEACKNOWLEDGEMENTMODESCANNOTBEDElNEDDECLARATIVELY
R" 4HE*-3!0)SHOULDBEUSEDFORMESSAGEACKNOWLEDGMENT
R#&OR"-4BEANS THE#ONTAINERUSESTHEACKNOWLEDGE MODEDEPLOYMENT
DESCRIPTORELEMENT - can be Auto-acknowledge or
Dups-ok-acknowledge
R$ &OR#-4BEANS THE#ONTAINERUSESTHEACKNOWLEDGE MODE
DEPLOYMENTDESCRIPTORELEMENT

7HATSTRUEABOUTTHEDEPLOYMENTDESCRIPTORFORMESSAGE DRIVENBEANS (spec: 317)


11 #HOOSEALLTHATAPPLY
R! 4HEBEANPROVIDERMUSTGUARANTEETHATTHEBEANISASSOCIATEDWITHA - thatÕs the
deployerÕs job
SPECIlCQUEUEORTOPIC
R" 4HEDEPLOYMENTDESCRIPTORCANINDICATEWHETHERABEANISINTENDEDFOR
ATOPICORAQUEUE
R# )TCANINDICATEWHETHERA1UEUETYPEBEANSHOULDSUPPORTDURABLE - durable subscriptions are
SUBSCRIPTIONORNOT just for topics!
R$ )TISAPPROPRIATETOASSOCIATEMULTIPLEBEANSWITHTHESAME*-3QUEUE

 &KDSWHU
EJB transactions
5
4
4 7KH$WRPLF$JH ,WZDVDORQJ
WUDQVDFWLRQEXWVKHÀQDOO\
FRPPLWWHG6KHKDGSOHQW\
RIWLPHWRUROOEDFNEXW,
MXVWNHSWFDWFKLQJDOOWKH
H[FHSWLRQVVRLWDOOZRUNHG
RXWLQWKHHQG

7UDQVDFWLRQVSURWHFW\RX:LWKWUDQVDFWLRQV\RXFDQWDNHDULVN<RXFDQWU\
VRPHWKLQJ%,*NQRZLQJWKDWLIDQ\WKLQJJRHVZURQJDORQJWKHZD\\RXFDQMXVWSUHWHQG
WKHZKROHWKLQJGLGQ¶WKDSSHQ(YHU\WKLQJJRHVEDFNWRWKHZD\LWZDVEHIRUH7KHLGHDLV
VLPSOH²\RXHLWKHUFRPPLWWRHYHU\WKLQJLQWKHWUDQVDFWLRQRU\RXUROOEDFNVRWKDWQRERG\
VHHVZKDW\RXZHUHWU\LQJ EXWIDLOHG WRGR7UDQVDFWLRQVLQ(-%DUHDWKLQJRIEHDXW\²
\RXFDQGHSOR\DEHDQZLWKFXVWRPL]HGWUDQVDFWLRQEHKDYLRUZLWKRXWWRXFKLQJWKHEHDQ¶V
VRXUFHFRGH%XW\RXFDQZULWHWUDQVDFWLRQFRGHLI\RXQHHGWRVRZH¶OOOHDUQWKDWWRR

WKLVLVDQHZFKDSWHU 
H[DPREMHFWLYHV

(QWHUSULVH-DYDEHDQV7UDQVDFWLRQV
2IILFLDO :KDWLWUHDOO\PHDQV
 ,GHQWLI\FRUUHFWDQGLQFRUUHFW <RXQHHGWRNQRZWKHUXOHVDQGLPSOLFDWLRQVRIEHDQ
VWDWHPHQWVRUH[DPSOHVDERXW PDQDJHG %07 YVFRQWDLQHUPDQDJHG &07 WUDQVDF
(-%WUDQVDFWLRQVLQFOXGLQJEHDQ WLRQGHPDUFDWLRQ)RUH[DPSOH\RXPXVWNQRZWKDWERWK
PDQDJHGWUDQVDFWLRQGHPDUFDWLRQ PHVVDJHGULYHQDQGVHVVLRQEHDQVFDQXVH&07RU
DQGFRQWDLQHUPDQDJHGWUDQVDFWLRQ %07EXWHQWLW\EHDQVFDQXVHRQO\&07$QGPHVVDJH
GHPDUFDWLRQ GULYHQEHDQVDQGVWDWHOHVVVHVVLRQEHDQVXVLQJ%07
PXVWHQGWKHWUDQVDFWLRQEHIRUHWKHHQGRIWKHPHWKRG
 ,GHQWLI\FRUUHFWDQGLQFRUUHFW EXWVWDWHIXOVHVVLRQEHDQVDUHDOORZHGWRNHHSDWUDQVDF
VWDWHPHQWVDERXWWKH$SSOLFDWLRQ WLRQRSHQDFURVVPXOWLSOHPHWKRGLQYRFDWLRQVIURPDFOL
$VVHPEOHU¶VUHVSRQVLELOLWLHVLQFOXGLQJ HQW<RXQHHGWRNQRZWKDWSURSDJDWLRQRIWUDQVDFWLRQVLQ
WKHXVHRIGHSOR\PHQWGHVFULSWRU %07LVDRQHZD\VWUHHWD%07WUDQVDFWLRQFDQSURSD
HOHPHQWVUHODWHGWRWUDQVDFWLRQVDQG JDWHRXWZLWKDEHDQ¶VPHWKRGFDOOV LHEHXVHGE\WKH
WKHLGHQWL¿FDWLRQRIWKHPHWKRGVRI FDOOHGPHWKRG EXWDQH[LVWLQJWUDQVDFWLRQFRQWH[WFDQ
DSDUWLFXODUEHDQW\SHIRUZKLFKD QHYHUEHSURSDJDWHGLQWRD%07EHDQ,QRWKHUZRUGVD
WUDQVDFWLRQDWWULEXWHPXVWEHVSHFL¿HG %07EHDQZLOOUXQRQO\LQWUDQVDFWLRQVWKHEHDQLWVHOIKDV
VWDUWHG
 *LYHQDOLVWRIWUDQVDFWLRQEHKDYLRUV
PDWFKWKHPZLWKWKHDSSURSULDWH <RXPXVWEHYHU\FOHDUDERXWWKHHIIHFWVRIWUDQVDFWLRQ
WUDQVDFWLRQDWWULEXWH DWWULEXWHVIRU&07)RUH[DPSOH\RXPXVWXQGHUVWDQG
WKDWPHVVDJHGULYHQEHDQVFDQXVHRQO\WZRRIWKHVL[
DWWULEXWHV 1RW6XSSRUWHGDQG5HTXLUHG EHFDXVHWKH
 *LYHQDOLVWRIUHVSRQVLELOLWLHVLGHQWLI\ RWKHUVGRQ¶WPDNHVHQVHIRUDPHVVDJHGULYHQEHDQ QR
WKRVHZKLFKDUHWKHFRQWDLQHU¶VZLWK FDOOLQJWUDQVDFWLRQFDQHYHUEHSURSDJDWHGLQWRDPHV
UHVSHFWWRWUDQVDFWLRQVLQFOXGLQJ VDJHGULYHQEHDQEHFDXVHLWLVRQO\WKHFRQWDLQHUWKDWLQ
WKHKDQGOLQJRIJHW5ROOEDFN2QO\ YRNHVWKHEHDQ¶VRQ0HVVDJH PHWKRG<RXDOVRKDYHWR
VHW5ROOEDFN2QO\JHW8VHU7UDQVDFWLRQ NQRZWKHPHWKRGVRIHDFKEHDQW\SH VHVVLRQHQWLW\RU
6HVVLRQ6\QFKURQL]DWLRQFDOOEDFNVIRU PHVVDJHGULYHQ IRUZKLFKWUDQVDFWLRQDWWULEXWHVPXVWEH
ERWKFRQWDLQHUDQGEHDQPDQDJHG VSHFL¿HG)RUH[DPSOHDQHQWLW\EHDQ¶VFUHDWH PHWKRG
WUDQVDFWLRQGHPDUFDWLRQ LVWUDQVDFWLRQDOEXWDVHVVLRQEHDQ¶VFUHDWH PHWKRG
UXQVLQ³DQXQVSHFL¿HGWUDQVDFWLRQFRQWH[W´<RXPXVWEH
1RWHZHFRYHUWKHSDUWRIWKDW DEOHWRVSHFLI\WUDQVDFWLRQDWWULEXWHVLQWKHGHSOR\PHQW
GHDOVZLWK6HVVLRQ6\QFKURQL]DWLRQLQ GHVFULSWRU
WKH6HVVLRQ%HDQFKDSWHU
)LQDOO\\RXQHHGWRNQRZZKDW\RXUEHDQFDQFRXQWRQ
IURPWKHFRQWDLQHUZKHQLWFRPHVWRWUDQVDFWLRQV)RU
H[DPSOH\RXPXVWNQRZWKDWLI\RXLQYRNHJHW5ROOEDFN
2QO\RQDEHDQ¶VFRQWH[WWKHFRQWDLQHUPXVWQRWFRPPLW
 &KDSWHU
(-%WUDQVDFWLRQV

$Q(-%WUDQVDFWLRQLVDQDWRPLFXQLWRIZRUN
, !TRANSACTIONMEANSYOUVEWRAPPEDSOMEWORKSTATEMENTS METHODCALLS
WHOLEMETHODS ACCESSTOADATABASE ETC INTOASINGLEUNITINSUCHAWAY
THATEITHEREVERYTHINGSUCCEEDS OREVERYTHINGREVERTSTOITSPREVIOUSSTATE
)NOTHERWORDS YOUEITHERCOMMITORROLLBACKTHEWHOLEATOMICUNIT
%ITHERITALLWORKS ORWEJUSTFORGETTHEWHOLETHINGEVERHAPPENED

6KRSSLQJFDUWFKHFNRXW
DTXLQWHVVHQWLDO(-%WUDQVDFWLRQH[DPSOH
)MAGINEYOUHAVEANONLINESHOPPINGCARTSYSTEM7HENITCOMESTIME
TOCHECKOUT WHATNEEDSTOHAPPEN!TTHEVERYLEAST

one unitÑ if
These must all happend,asALL of it
ƒ +DYHXVHUFRQILUPRUGHU
ƒ 9DOLGDWHDQGGHELWXVHU·VFUHGLWFDUG ANY of this goes ba gh none of this
ƒ 5HPRYHSXUFKDVHGLWHPVIURPLQYHQWRU\ should rollback as thou
ƒ &UHDWHDQGVXEPLWDVKLSSLQJRUGHU
ever happened...
9OUDONTWANTTODEBITTHEINVENTORYIFTHECREDITCARDISNTVALID!ND
YOUDONTWANTTOSUBMITASHIPPINGORDERIFTHEITEMSARENTYETINSTOCK
!NDYOUDONTWANTANYOFITTOHAPPENIFTHEUSERDOESNTCONlRMTHE
ORDER)FANYOFTHESETHINGSGOWRONG YOUWANTYOURTRANSACTIONTOEND
WITHAROLLBACK RATHERTHANACOMMIT4HINKOFTHEHORRORYOUDGO
THROUGHIFYOUCOULDNTDOATRANSACTIONROLLBACK)MAGINETHATYOUWENT
THROUGHTHElRSTTHREEOUTOFTHEFOURSTEPSONLYTOlNDTHEUSERDOESNT
CONlRMTHEORDER9OUWOULDHAVETOGOBACKANDADDMONEYTOTHE
USERSCREDITCARD CANCELTHEORDER ANDPUTTHEITEMSBACKININVENTORY

<RXGRQ¶WQHHGWRNQRZDERXW-76;$RUDQ\RWKHU
WUDQVDFWLRQ$3,VH[FHSWMDYD[WUDQVDFWLRQ8VHU7UDQVDFWLRQ

<RXZRQ¶WEHWHVWHGRQDQ\RIWKHORZHUOHYHOWUDQVDFWLRQ$3,GHWDLOV)RU
H[DPSOH\RXGRQ¶WQHHGWRNQRZDQ\WKLQJDERXW+2:WKHVHUYHUFRQWDLQHU
FRPPXQLFDWHVZLWKDWUDQVDFWLRQDOUHVRXUFHVXFKDVDGDWDEDVH$QGDOWKRXJK(-%
VXSSRUWVGLVWULEXWHGWUDQVDFWLRQV\RXZRQ¶WEHDVNHGDERXWKRZLWZRUNV:HNQRZLW¶V
GHSUHVVLQJWKDW\RXZRQ¶WJHWWRVKRZRII\RXUWZRSKDVHFRPPLWSURWRFROSURZHVV

\RXDUHKHUH 
WKH$&,'WHVW

<PM)+1,\M[\
1[aW]Z\ZIV[IK\QWV[INM'
&IVEOUTOFlVEEXPERTSPLUSPRETTYMUCHTHEENTIREREST
OFTHEINDUSTRY AGREEONFOURCHARACTERISTICSOFAGOOD
SAFETRANSACTION4HISISNOTJUSTAN%*"THING BYTHE
WAYˆTHE!#)$TESTGOESBACKLONGBEFORE*AVAWAS
AGLEAMIN'OSLINGSEYE 4OPUTYOURTRANSACTIONS
THROUGHTHE!#)$TEST MAKESURETHETRANSACTIONIS

$WRPLF
%ITHERITALLWORKS ORITALLFAILSANDROLLSBACK 
!TRANSACTIONISNTATOMICIFITSPOSSIBLEFORSOMEOFITTO
COMMITWHILEOTHERPARTSDONT

&RQVLVWHQW
7HETHERITWORKSCOMMITS ORFAILSROLLSBACK THE
DATASHOULDSTAYCONSISTENTWITHTHEBUSINESSLOGICREALITY
9OUDHAVEREALTROUBLEIF SAY YOUCOULDTAKEITEMSOUT
OFINVENTORYWITHOUTACTUALLYSUBMITTINGANORDER9OUD
ENDUPWITHITEMSTHATEXISTINTHEREALINVENTORYIEIN
AWAREHOUSESOMEWHERE BUTTHATDONTSHOWUPIN
ANYBODYSCOMPUTERRECORDS

,VRODWHG
,ETSSAYYOUHAVETWODIFFERENTTRANSACTIONSRUNNING
POTENTIALLYHITTINGTHESAMEDATABASE9OUDONTWANTTHE
EFFECTOFONETRANSACTIONTOCORRUPTTHESTATEOFANOTHER
TRANSACTION)NOTHERWORDS THETRANSACTIONSSHOULDBE
PROTECTEDISOLATED FROMONEANOTHER)SOLATIONISVERYSIMILAR
TOTHREADSYNCHRONIZATIONˆYOUDONTWANTONETRANSACTION
READINGSOMEDATAWITHTHEINTENTIONOFACTINGONIT IFTHAT
DATAISSMACKINTHEMIDDLEOFANOTHERTRANSACTIONTHATHASNT
lNISHEDCOMMITTINGITSOWNCHANGESTOTHEDATA

'XUDEOH
/NCEATRANSACTIONCOMMITS THECHANGESMADEBYTHAT
TRANSACTIONMUSTBECOMEPERMANENT%VENIFTHESERVERGOES
DOWN ITMUSTCOMEBACKUPANDlNISHWHATITSTARTEDTOCOMMIT

 &KDSWHU
(-%WUDQVDFWLRQV

,Q[\ZQJ]\ML\ZIV[IK\QWV["\ _WXPI[MKWUUQ\
-OST%*"CONTAINERSSUPPORTDISTRIBUTEDTRANSACTIONSTHROUGHATWO PHASE
COMMITPROTOCOL)FYOUREATRANSACTIONMANAGERLIKEA*%%SERVER YOU
MIGHTHAVEMULTIPLEPARTICIPANTS INCLUDINGADATABASE ANOTHERBEAN AND
ANOTHERSERVERONTHENETWORK/NCEYOUVETOLDEVERYONETOCOMMIT
THERESNOGOODWAYTOUNDOIT SOBEFOREYOUGIVETHESIGNALTOCOMMIT
YOUNEEDTOMAKESURETHATEVERYONECANDOWHATYOUREASKING!STHE
TRANSACTIONMANAGER YOURJOBISTOlNDOUTIFEVERYONEISREADYTOPERFORM
UPDATETHEDATABASE DEBITTHEACCOUNT ETC ANDTHEN DEPENDINGONTHE
RESULTS TELLTHEMALLTODOITCOMMIT ORTELLTHEMALLTOFORGETITROLLBACK 

3KDVH21( 3KDVH7:2

%HIRUH,WHOO ,WORRNVOLNH
HYHU\RQHWRFRPPLW HYHU\ERG\FDQGR
,KDYHWRPDNHVXUH LWVRQRZ,WHOOWKHP
WKDWHYHU\ERG\LV DOOWRFRPPLW
UHDG\WRGRLW

"
G\
U HD W
\RX R UL
UH J R RI
D
WR
J OHP
G U RE
J RR RS
Q
7UDQVDFWLRQ 7UDQVDFWLRQ
3DUWLFLSDQW 3DUWLFLSDQW

DUH\R JRIRU
XUHDG LW
\"
JRRG QRS
WRJ UREO
R HP

DUH JR
\R IRU
XU LW
HDG
JR \" 7UDQVDFWLRQ QR
RG SU 7UDQVDFWLRQ
WR 3DUWLFLSDQW RE 3DUWLFLSDQW
JR OHP

7UDQVDFWLRQ 7UDQVDFWLRQ
0DQDJHU 0DQDJHU

7UDQVDFWLRQ 7UDQVDFWLRQ
3DUWLFLSDQW 3DUWLFLSDQW

\RXDUHKHUH 
WUDQVDFWLRQSURSRJDWLRQ

0W_Q\_WZS[QV-2*
<ZIV[IK\QWV[KIVXZWXIOI\M\PZW]OPUM\PWLKITT[
7HENABEANISRUNNINGCODEINATRANSACTION ANDCALLSAMETHODONANOTHERBEAN
THREEDIFFERENTSCENARIOSAREPOSSIBLE
! 4HECALLEDMETHODRUNSINTHECALLERSTRANSACTION
" 4HECALLEDMETHODRUNSWITHOUTATRANSACTION
# 4HECALLEDMETHODRUNSWITHINITSOWNNEWTRANSACTION

$ 7KHWUDQVDFWLRQVWDUWHGLQWKH¿UVWPHWKRGSURSDJDWHVWRDOORWKHU
PHWKRGVLQWKHFDOOVWDFN$OOFDOOHGPHWKRGVUXQZLWKLQWKHVDPH
WUDQVDFWLRQ ,QWKLVERRNZH¶OODEEUHYLDWH³WUDQVDFWLRQ´WR³W[´
EDU
IRR

JR

  
%HDQ %HDQ %HDQ

%HDQ·VJR PHWKRGVWDUWV %HDQ·VIRR PHWKRGUXQVLQ %HDQ·VEDU PHWKRGUXQV


DWUDQVDFWLRQ W[$  WKHWUDQVDFWLRQIURP%HDQ LQWKHWUDQVDFWLRQ W[$ 
W[$ DQGFDOOVPHWKRGEDU  SURSDJDWHGIURP%HDQ
%HDQFDOOVPHWKRG RQ%HDQ7KHWUDQVDFWLRQ
IRR RQ%HDQDQGWKH W[$ LVSURSDJDWHGLQWRWKH ,IDV\VWHPH[FHSWLRQ OLNH
WUDQVDFWLRQLVSURSDJDWHG PHWKRGFDOORQ%HDQ (-%([FHSWLRQ KDSSHQVLQDQ\
LQWRWKHPHWKRGFDOORQ RIWKHPHWKRGVLQW[$WKH
%HDQ ZKROHWUDQVDFWLRQUROOVEDFN

EDU W[$
IRR W[$ IRR W[$

JR W[$ JR W[$ JR W[$

3O WHATDOESITMEANFORMULTIPLEMETHODSTORUNINTHESAMETRANSACTIONCONTEXT4HAT
DEPENDSONTHEBEANTYPEANDWHATTHEBEANSDOINTHEIRCODE&OREXAMPLE IMAGINE
"EAN!HASAMETHODWITH*$"#CODETHATDOESANUPDATETOADATABASEROW)FANYOTHER
METHODINTHESAMETRANSACTIONCAUSESAROLLBACK "EAN!SUPDATEWONTCOMMIT EVENIF
THEDATABASEWOULDHAVEBEENMORETHANHAPPYTODOIT

 &KDSWHU
(-%WUDQVDFWLRQV

;WUM\ZIV[IK\QWV[LWV¼\XZWXIOI\M
<PMKITTMZ¼[\ZIV[IK\QWVUQOP\JM[][XMVLML
)FATRANSACTIONALBEANMETHODCALLSANOTHERMETHOD THECALLED
METHODWHETHERITSINTHESAMEORADIFFERENTBEAN MIGHTNOTRUN
INTHESAMETRANSACTION4HECALLEDMETHOD INTHATCASE WILLRUN
WITHEITHERABRANDNEWTRANSACTION ORWITHNOTRANSACTIONATALL)N
AFEWMINUTES WELLLOOKATHOWTHECONTAINERDECIDESWHETHERTO
PROPAGATETHETRANSACTION RUNWITHOUTONE ORSTARTANEWONE

% 7KH¿UVWWUDQVDFWLRQLVVXVSHQGHGDQGWKHVHFRQGPHWKRG
UXQVZLWKRXWDWUDQVDFWLRQ

IRR

JR

 
%HDQ %HDQ ily
sa c t io n A is temporasrwithout
Tra n n
nd foo() ru
suspended taion.
IRR QRW[ a transac
JR W[$ JR W[$
VXVSHQGHG

& 7KH¿UVWWUDQVDFWLRQLVVXVSHQGHGDQGWKHVHFRQGPHWKRG
UXQVZLWKLQDQHZWUDQVDFWLRQ

IRR

JR

 
%HDQ %HDQ arily
a n sa c t io n A is tempourns in its
Tr nd foo() r
suspended aransaction (tx B).
IRR W[% own new t
JR W[$ JR W[$

\RXDUHKHUH 
XVLQJWUDQVDFWLRQV

0W_LW1UISMWZOM\I\ZIV[IK\QWV'
<_W_Ia["KWLMQ\WZLMKTIZMQ\
4HECONTAINERMANAGESYOURTRANSACTIONS BUTYOUHAVETOTELLITHOW9OU
CANEITHERPUTTRANSACTIONCODEINYOURBEANCLASS ORYOUCANPUTTRANSACTION
DECLARATIONSINTHE$$"YFAR THEMOSTCOMMONAPPROACHISTOUSETHE
$$ BECAUSEITSSIMPLER SUPPORTSBEANREUSE ANDISTHEONLYWAYYOUCAN
DOTRANSACTIONSFORENTITYBEANS"YPUTTINGTRANSACTIONINFORMATIONINTHE
$$INSTEADOFINCODE YOUCANDEPLOYTHESAMEBEANMULTIPLETIMESANDGET
DIFFERENTTRANSACTIONBEHAVIOREACHTIMEWITHOUTEVERTOUCHINGTHECODE

that youÕre
 :ULWHWUDQVDFWLRQFRGHLQ\RXUEHDQ
tell the DrDe of transactions
taking ca
WUDQVDFWLRQW\SH!%HDQWUDQVDFWLRQW\SH!
%HDQPDQDJHG LPSRUW
MDYD[HME  8VHU7UDQVDFWLRQXW FRQWH[WJHW8VHU7UDQVDFWLRQ 
WUDQVDFWLRQV %07  LPSRUWMDYD
XWEHJLQ 
UPL5HPRWH([
FHSWLRQ WUDQVDFWLRQDOFRGH
ically
MDYD XWFRPPLW  programmat
25

 'HFODUHWUDQVDFWLRQVLQWKH''

WUDQVDFWLRQW\SH!&RQWDLQHUWUDQVDFWLRQW\SH!

&RQWDLQHUPDQDJHG ´87)´"!
PHWKRG!
WUDQVDFWLRQV &07 
declaratively
'2&7<3(
HMEMDU HMEQDPH!0\%HDQHMEQDPH!
38%,QF
PHWKRGQDPH!EDUPHWKRGQDPH!
[PO PHWKRG!
WUDQVDWWULEXWH!5HTXLUHGWUDQVDWWULEXWH!

<RXFDQ·WXVH%27+LQ
VDPHEHDQ< RX FD Q·W
WKH
P L[%07
DQG&07LQRQHEHDQ
VLQWKH
QRI%07DQG&07EHDQ
<RX&$1KDYHDFRPELQDWLR RQO \RQH WUDQ VDF WLRQ
QPXVWKDYH
VDPHHMEMDUEXWHDFKEHD DFWLRQ FR GHLQD EH DQ
VHHWUDQV
W\SH2QWKHH[DPLI\RX 
WKH''IRUWKDWEHDQLWVD\V
PDNHVXUHWKDWLI\RXVHH FWL RQ W\S H!
QWUDQVD
WUDQVDFWLRQW\SH!%HD

 &KDSWHU
(-%WUDQVDFWLRQV

<ZIV[IK\QWVZMTI\MLUM\PWL[
IZMQV\ _WQV\MZNIKM[

8VHU7UDQVDFWLRQ (YHU\WKLQJLQWKH8VHU7UDQVDFWLRQ
LQWHUIDFHLVIRUEHDQVXVLQJEHDQ
EHJLQ
PDQDJHGWUDQVDFWLRQV %07 
FRPPLW
JHW6WDWXV
%HDQVZLWKFRQWDLQHUPDQDJHG
UROOEDFN
VHW5ROOEDFN2QO\ WUDQVDFWLRQV &07 DUHQ·WDOORZHGWR
VHW7UDQVDFWLRQ7LPHRXW FDOO$1<7+,1*LQWKLVLQWHUIDFH

MDYD[WUDQVDFWLRQ8VHU7UDQVDFWLRQ

(-%&RQWH[WKDVPHWKRGVIRUERWK%07
(-%&RQWH[W DQG&07EHDQV
)RU%07EHDQVRQO\
JHW8VHU7UDQVDFWLRQ
JHW8VHU7UDQVDFWLRQ

JHW&DOOHU3ULQFLSDO
JHW(-%+RPH
JHW(-%/RFDO+RPH )RUERWK%07DQG&07
LV&DOOHU,Q5ROH DOOQRQWUDQVDFWLRQUHODWHGPHWKRGV

VHW5ROOEDFN2QO\ )RU&07EHDQVRQO\
JHW5ROOEDFN2QO\ JHW5ROOEDFN2QO\
VHW5ROOEDFN2QO\

MDYD[HME(-%&RQWH[W

6XSHUFODVVRI6HVVLRQ&RQWH[W(QWLW\&RQWH[WDQG0HVVDJH'ULYHQ&RQWH[W 

7KLQNDERXWWKHGLIIHUHQFHVEHWZHHQ&07DQG%07
YiX`e
gfn\i ,IWLHGXSDQGIRUFHGWRSLFNRQHRYHUWKHRWKHUZKLFK
ZRXOG\RXSLFN"
 ‰ &07  ‰
%07

:K\":KDWDUHWKHSURVDQGFRQV"

\RXDUHKHUH 
%07WUDQVDFWLRQV

5ISQVOI*5<\ZIV[IK\QWV
 *HWD8VHU7UDQVDFWLRQUHIHUHQFHIURP\RXU(-%&RQWH[W
FRQWH[WJHW8VHU7UDQVDFWLRQ

 6WDUWWKHWUDQVDFWLRQ
XWEHJLQ
g
 (QGWKHWUDQVDFWLRQ FRPPLWRUUROOEDFN 
fe re n ce to somethin
XWFRPPLW
e
Get a r lements the
XWUROOEDFN (WeÕll look at the actual that imp saction interface b)y on
exceptions later when we get
to UserTran tUserTransaction(
the Exceptions chapter). calling ge Context.
the EJB
SXEOLFYRLGFKHFN2XW WKURZV([FHSWLRQ^

8VHU7UDQVDFWLRQXW FRQWH[WJHW8VHU7UDQVDFWLRQ 

this says, ÒStart a new transaction now.Ó


XWEHJLQ 

DQRWKHU%HDQYDOLGDWH&UHGLW FXVWRPHU1XP 
s u m e t h e s e methods
e as ht
FKHFN,QYHQWRU\ 
m e o t h e r methods; rwansaction (they mig
o
call s nder this new t ter.)
will run u weÕll get to that la
not, but
now weÕre ending th
container, ÒGo aheade transaction by telling the
XWFRPPLW 
happened in this tran and commit everything that
saction.Ó
RUXWUROOEDFN 
(or, we could end it with a rollback)
GR1RQ7[6WXII  this method is called without a transaction. We
` canÕt tell from this code if doNonTxStuff()
starts its own transaction. WeÕd have to see that
method to know for sure.
 &KDSWHU
(-%WUDQVDFWLRQV

+ITT[\IKSWN\PMKPMKS7]\UM\PWL

 UTBEGIN ISCALLED ANDTHE  UTBEGIN COMPLETES  VALIDATE#REDIT ISCALLEDAND


TRANSACTIONSTARTS ANDNOWTHECHECKOUT RUNSINTHESAMETRANSACTION
METHODISRUNNINGINA ASCHECK/UT 
TRANSACTIONTX! 

XWEHJLQ W[$ YDOLGDWH&UHGLW W[$


FKHFN2XW FKHFN2XW W[$ FKHFN2XW W[$

 VALIDATE#REDIT COMPLETES  CHECK)NVENTORY ISCALLED  CHECK)NVENTORY COMPLETES


POPSOFFTHESTACK ANDTHE ANDRUNSINTHESAME ANDPOPSOFFTHESTACK4HE
CHECK/UT METHODISSTILL TRANSACTIONTX!  TRANSACTIONTX! ISSTILL
RUNNINGINTX! OPEN

FKHFN,QYHQWRU\ W[$

FKHFN2XW
FKHFN2XW W[$ FKHFN2XW W[$ FKHFN2XW W[$

 COMMIT ISCALLED WHICH  COMMIT COMPLETES AND  DO.ON4X3TUFF ISCALLED


ENDSTHETRANSACTION NOWCHECK/UT ISRUNNING WITHOUTATRANSACTION
WITHOUTATRANSACTION

FRPPLW W[$ GR1RQ7[6WXII QRW[

FKHFN2XW W[$ FKHFN2XW QRW[ FKHFN2XW QRW[

\RXDUHKHUH 
%07WUDQVDFWLRQV

6KDUSHQ \RXU SHQFLO 


SXEOLFYRLGWHVW WKURZV([FHSWLRQ^
EOXH 
8VLQJWKLVFRGHOLVWLQJPDUNWKH 8VHU7UDQVDFWLRQXW FW[JHW8VHU7UDQVDFWLRQ 
JUHHQ 
PDWFKLQJFDOOVWDFNIUDPHVZLWKD XWEHJLQ 
FKHFNPDUNLIWKDWIUDPHLVFXUUHQWO\ SXUSOH 
LQDWUDQVDFWLRQ:HGLGRQHLQWKH XWFRPPLW 
UHG 
PLGGOHIRU\RX
`

YRLGEOXH ^JUHHQ `


YRLGJUHHQ ^`
YRLGSXUSOH ^UHG `
YRLGUHG ^`


JUHHQ
VWDUW EOXH EOXH EOXH JHW8VHU7UDQV

WHVW WHVW WHVW WHVW WHVW WHVW

UHG
JUHHQ EHJLQ SXUSOH SXUSOH
WHVW WHVW WHVW WHVW WHVW WHVW WHVW

SXUSOH FRPPLW UHG HQG

WHVW WHVW WHVW WHVW WHVW WHVW

 &KDSWHU
(-%WUDQVDFWLRQV

<PQVO[aW]U][\67<LW_Q\P*5<

 $%07EHDQPXVW127VWDUWDWUDQVDFWLRQ
EHIRUHHQGLQJWKHFXUUHQWWUDQVDFWLRQ
SXEOLFYRLGJR ^ YiX`e
8VHU7UDQVDFWLRQXW FRQWH[WJHW8VHU7UDQVDFWLRQ  gfn\i
out
ction withthe
XWEHJLQ  ,PDJLQHWKHLPSOLFDWLRQV
a t r a n s a
art or rollback
) RIVWDUWLQJDQHZ
GR6WXII  O! CanÕt st
NO! NO! Ng (through a commitdo that, it would WUDQVDFWLRQEHIRUHHQGLQJ
XWEHJLQ  completinone. If you COULD transactionsÓ. WKHFXUUHQWRQH:KDW
previous could have Ònested PLJKWKDSSHQLI\RXZHUH
u DOORZHGWRGRWKLV"
`

1HVWHGWUDQVDFWLRQV
DUHQRWDOORZHGLQ(-%
DWWKH
<RX¶UHH[SHFWHGWRNQRZZK
DQV DFWLRQ ´P HDQ V
WHUP³QHVWHGWU
DWLWPLJKWORRN OLNH LQFRGH
DQGZK

 $%07VWDWHOHVVVHVVLRQRUPHVVDJHGULYHQEHDQ
PXVW127FRPSOHWHDWUDQVDFWLRQDOPHWKRG
ZLWKRXWHQGLQJWKHWUDQVDFWLRQ YiX`e
gfn\i
SXEOLFYRLGJR ^
:K\DUHVWDWHIXOVHVVLRQ
8VHU7UDQVDFWLRQXW FRQWH[WJHW8VHU7UDQVDFWLRQ  EHDQVDOORZHGWRHQGD
PHWKRGZLWKRXWHQGLQJWKH
XWEHJLQ 
WUDQVDFWLRQ"
hod
eÕre ending the met
This is a problem! eWtransaction we started. In
GR0RUH 
)RUDVWDWHIXOEHDQFDQ
` without ending thereÕs no commit() or rollback(). \RXWKLQNRIDVFHQDULR
other words, th KHUH\RXPLJKWZDQW
RGRWKLV OHDYHWKH
2QO\67$7(
)8/VHVVLR
UDQVDFWLRQRSHQ "

EHDQVFDQO Q :KDWPLJKWJRZURQJLI
HDYHD
WUDQVDFWLRQ RXGRWKLV"
RSHQDWWK
HQGRIDPH H
WKRG

\RXDUHKHUH 
%07WUDQVDFWLRQV

*5<\ZIV[IK\QWV[IZMWVM_Ia"
\PMaKIVXZWXIOI\MW]\\WI+5<
JMIVJ]\VWW\PMZ\ZIV[IK\QWV
KIVXZWXIOI\MQV\WI*5<JMIV

%RWK%07DQG&07EHDQ ,·PD&07EHDQ
WUDQVDFWLRQVSURSDJDWH DQGWKDWPHDQV,·P
SURPLVFXRXVZKHQLWFRPHV
LQWRD&07EHDQ
WRWUDQVDFWLRQV,·OOXVH
DQ\RQH·V
W[FR
P
&07 LQJIUR
&07EHDQ EHD PD
Q
$&07EHDQFDQUXQLQ
WUDQVDFWLRQVFRPLQJIURP
ERWK&07DQG%07EHDQV
7RWKHFDOOHG&07EHDQLW
D &07EHDQ
IURP PDNHVQRGLIIHUHQFHKRZ RU
%07EHDQ PLQJ
W[FR EHDQ E\ZKRP WKHWUDQVDFWLRQ

%07
ZDVVWDUWHG

$%07EHDQZLOO1(9(5XVHDQ\
RWKHUEHDQ·VWUDQVDFWLRQ7KHFDOOHU·V
WUDQVDFWLRQZLOOEHVXVSHQGHG ,SUDFWLFH
ns are VDIHW[7KHRQO\
Transactiod when they WUDQVDFWLRQV,UXQLQ
suspende BMP bean! DUHP\RZQ,IDFDOOHU·V
WUDQ
V get to a WUDQVDFWLRQFRPHVLQ,
&07EHDQ IURP DFWLRQV MXVWVD\´VXVSHQGµ
D& F
07E RPLQJ
HDQ

%07EHDQ
J
RPLQ
F W L R QVF Q
D H D
%07EHDQ WUDQV %07E 7KHRQO\WUDQVDFWLRQD%07
U R P D
I EHDQZLOOUXQLQLVRQHWKDWWKH
EHDQLWVHOIFUHDWHV

 &KDSWHU
(-%WUDQVDFWLRQV

:KHQDWUDQVDFWLRQLV
?PI\LWM[Q\UMIV\W[][XMVL VXVSHQGHGLWZDLWVXQWLOLW
I\ZIV[IK\QWV' FDQSLFNXSZKHUHLWOHIW
RII%XWWKLVPHDQVWKDWWKH
)FATRANSACTIONISINPROGRESSWHENAMETHODONA"-4
BEANISCALLED THETRANSACTIONISSUSPENDED4EMPORARILY WKLQJVWKDWKDSSHQZKLOHWKH
4HETRANSACTIONJUSTSITSTHEREWAITINGFORTHE"-4BEAN WUDQVDFWLRQLVVXVSHQGHGDUH
TOCOMPLETEITSWORK7ORKTHATSNOTPARTOFTHECALLERS
ORIGINALTRANSACTION/NCETHE"-4METHODlNISHESAND 127SDUWRIWKHVDPHDWRPLF
ISPOPPEDOFFTHESTACK THEORIGINALTRANSACTIONKICKS
BACKIN RIGHTWHEREITLEFTOFF
XQLW,QRWKHUZRUGVWKH
)MAGINETHISSCENARIOA#-4BEAN BEANONE ISRUNNING WKLQJVWKDWKDSSHQZKLOHWKH
AMETHODFOO INATRANSACTIONTX! WHENITCALLSA WUDQVDFWLRQLVVXVSHQGHGZRQ·W
METHODBAR ONBEANTWOA"-4BEAN /NCEBAR
COMPLETESANDPOPSOFFTHESTACK METHODFOO INVOKES EHUROOHGEDFNLIWKHVXVSHQGHG
ANOTHERMETHOD BEE BUTTHISTIMETHECALLEDBEANIS
ANOTHER#-4BEANBEANTHREE 
WUDQVDFWLRQ DIWHULWFRPHV
EDFNWROLIH IDLOVWRFRPPLW
%07EHDQ
&07EHDQLQ VXVSHQGVW[$DQG
DU
DOOVE
W[$  F UXQVEDU LQDQHZ
WUDQVDFWLRQW[%

 FDOO
VE
HH &07EHDQJHWVWKH

WUDQVDFWLRQDQGUXQV
PHWKRGIRR 
EHH LQW[$
VWDUWV

EDU W[% EHH W[$


IRR W[$ IRR W[$ IRR W[$
VXVSHQGHG

 -ETHODFOO OFA#-4BEAN  -ETHODBAR SUSPENDS  7HENMETHODBAR COM


ISRUNNINGINTRANSACTION! TRANSACTION! ANDSTARTSA PLETES FOO RESUMESAND
-ETHODFOO THENINVOKES NEWTRANSACTION "-ETHOD PICKSUPTRANSACTION!AGAIN
METHODBAR ONA"-4BEAN BAR RUNSINTHENEW )TTHENCALLSMETHODBEE
TRANSACTION" THENCOMPLETES ONBEANTHREEA#-4BEAN 
-ETHODBEE RUNSINFOO S
EXISTINGTRANSACTION! 

\RXDUHKHUH 
WKH8VHU7UDQVDFWLRQLQWHUIDFH

<PM=[MZ<ZIV[IK\QWVQV\MZNIKM
JAVAXTRANSACTION5SER4RANSACTION

6KDUSHQ \RXU SHQFLO


4HE5SER4RANSACTIONINTERFACEHASSIXMETHODSFOR
THETHINGSA"-4BEANMIGHTWANTTODO4RYTOFIGURE
OUTTHEMETHODNAMES BASEDONTHEDESCRIPTIONOF
WHATYOUWANTTODO4HEANSWERSAREATTHEBOTTOM
UPSIDEDOWN SODONTLOOKDOWNTHERE

 %HJLQDWUDQVDFWLRQ
XWBBBBBBBBBBBBBBBBBBBBBB

 (QGDWUDQVDFWLRQ
XWBBBBBBBBBBBBBBBBBBBBBB 8VHU7UDQ
VDFWLRQL
IRU%07E V
RU HDQVRQO\
$&07EH 
DQ
XWBBBBBBBBBBBBBBBBBBBBBB VXSSRVHG LVQHYHU
WRJHW R
WRXVH D UWU \
UHIHUHQF
8VHU7UDQ HWRD
 0DUNDWUDQVDFWLRQIRUUROOEDFN VDFWLRQ

XWBBBBBBBBBBBBBBBBBBBBBB
7
FWLRQLV12
 )LQGRXWWKHVWDWXVRIWKHWUDQVDFWLRQ
8VHU7UDQVD
IRUHQWLW\E
HD QV 6LQ F H 
V086 7 
HQWLW\EHDQ
XWBBBBBBBBBBBBBBBBBBBBBB 7LI\R XVHH
EH&0 Q
FWLRQFRGHL
8VHU7UDQVD X N Q RZ
HDQ\R
DQHQWLW\E OH JD O
 6HWWKHWUDQVDFWLRQWLPHRXW R W
WKHFRGH·VQ
XWBBBBBBBBBBBBBBBBBBBBBB

7KHUH¶VQRWKLQJDERXWWUDQVDFWLRQ
WLPHRXWRQWKHH[DP
$OOWUDQVDFWLRQVKDYHVRPHGHIDXOWWLPHRXWYDOXH
EXW\RXFDQFKDQJHWKDWZLWK
VHW7UDQVDFWLRQ7LPHRXW DQ,QW9DOXH $VDEHDQGHYHORSHU
\RX¶OOSUREDEO\QHYHUXVHDQ\WKLQJEXWWKHGHIDXOWWLPHRXW JHW6WDWXV VHW7UDQVDFWLRQ7LPHRXW
YDOXHVRZHGRQ¶WWHVWIRULWRQWKHH[DP EHJLQ FRPPLW RUUROOEDFN VHW5ROOEDFN2QO\ 

 &KDSWHU
(-%WUDQVDFWLRQV

[M\:WTTJIKS7VTa 
<PM[W]VLWNI\ZIV[IK\QWV¼[LMI\P
7HENABEANCALLSSET2OLLBACK/NLY ITMEANS
THATTRANSACTIONISGOINGDOWN/NCEYOUINVOKE
SET2OLLBACK/NLY THETRANSACTIONISDOOMEDTONEVER EVER
COMMIT
3O WHATDOESITMEANTOSENTENCEATRANSACTIONTO
DEATH)TMEANSTHETRANSACTIONDElNITELYWONT
COMMIT$UH"UTITALSOMEANSTHATANYPARTICIPANT ,W·VWUDJLF
INTHETRANSACTIONIEANYBEAN CANCHECKTOSEEIF
THETRANSACTIONISALREADYMARKEDFORDEATH :KHQ\RXFDOOWKH
VHW5ROOEDFN2QO\ PHWKRG
2EMEMBER ATRANSACTIONSTARTEDBYA"-4BEAN \RXVHWDÁDJWKDWFDQ
MIGHTPROPAGATETOMETHODCALLSTHATTHE"-4 WHOORWKHUEHDQVWKDWWKH
BEANMAKESON#-4BEANS!#-4BEANINA WUDQVDFWLRQZLOOHQGRQO\
"-4 STARTEDTRANSACTIONMIGHTWANTTOSENTENCETHE RQHZD\KRUULEO\
TRANSACTIONTODEATH ORATLEASTlNDOUTWHETHERITS
ALREADYDOOMED ,I\RXNQRZLQ\RXUFRGH
)NA#-4BEAN SET2OLLBACK/NLY ISHOWYOUTELLTHE WKDWWKLQJVDUHQ·WJRLQJWR
CONTAINERTHATITMUSTNOTCOMMITTHETRANSACTION)FYOU ZRUNFDOOWKLVPHWKRG
CANlGUREOUTINYOURBUSINESSLOGICTHATATRANSACTION ,IWKHWUDQVDFWLRQLVJRLQJ
ISGOINGTOENDBADLY CALLSET2OLLBACK/NLY 4HE WRGLHLW·VSUREDEO\IRUWKH
CONTAINERWONTENDTHETRANSACTIONATTHATPOINT BUT EHVW,WZDVPHDQWWREH
WHENITDOESENDATITSNATURALTIME ITDElNITELYWONT ,W·VJRLQJWRDEHWWHUSODFH
COMMIT
3O WHENDOESATRANSACTIONEND!SSUMINGNO3YSTEM
%XCEPTIONSARETHROWN ATRANSACTIONENDSWHENTHE
#-4METHODTHATSTARTEDTHETRANSACTIONCOMPLETES OR
FORA"-4BEAN WHENTHEBEANSCODECALLSCOMMIT OR
ROLLBACK 
nsaction can ra call
t ra
Any bea n in t h is
() t o m a k e su re t nsaction
y
setRollbackOmnlits.
Z neve r co m
nly(), it
B ea n B ca ll s setRollbackOdoes -- the
If what Bean C be
wonÕt matterl code in Bean C will nevern C
transactio na if B ea
%HDQ$ DPHWKRGLQ
DPHWKRGLQ
%HDQ&LVFDOOHG committed. Would
nÕt it be nice Bean C does
VWDUWVW[= %HDQ%LVFDOOHG O R E
out BEF hat in a minute.
DQGUXQVLQW[=
DQGUXQVLQW[=
could Þnd that rk? WeÕll see t
a bunch of wo
\RXDUHKHUH 
WKHVHW5ROOEDFN2QO\ PHWKRG

,·PVWLOOPLVVLQJ
VRPHWKLQJKHUHLI,·P
XVLQJ%07ZK\ZRXOG,FDOO
VHW5ROOEDFN2QO\ ZKHQ,FDQ
MXVWFDOOUROOEDFN DQGHQGLW
ULJKWWKHUH"

<RXPLJKWNQRZ+2:D%07WUDQVDFWLRQVKRXOGHQG
EHIRUHLW·VWLPHWRDFWXDOO\HQGLW
)NYOUR"-4CODE YOUMIGHTHAVEASINGLEPLACEATTHEENDOFTHE
TRANSACTIONALCODEWHEREYOUSAYEITHERUTCOMMIT ORUTROLLBACK 
4HATSINGLEPLACEMIGHTBEASIMPLEIFTEST
LI WKLQJV/RRN*RRG ^ f
XWFRPPLW  pi c al ex a m p le : at the endolloback
A ty n, commit or r
HOVH^ the transactmioe conditions.
XWUROOEDFN  based on so
`

"UTIFSOMEWHEREEARLIERINYOURCODEYOUCANTELLTHATTHETRANSACTION
ISDOOMED YOUSHOULDCALLSET2OLLBACK/NLY 
LI WKLQJV/RRN%DG ^
XWVHW5ROOEDFN2QO\ 
`
4HISGIVESOTHERTRANSACTIONPARTICIPANTSASIGNALIFTHEYCARETO
CHECK THATTHETRANSACTIONISALREADYDOOMED
%VENIFYOUR"-4CODEDOESNTCALLSET2OLLBACK/NLY SOMEOTHER
CODEINTHETRANSACTIONCOULDHAVE SOYOUMIGHTWANTTOlNDTHAT
OUT)NJUSTAFEWMOREPAGESFROMNOW WELLLEARNHOWABEANCAN
CHECKWHETHERANYONEHASMARKEDATRANSACTIONFORROLLBACK

 &KDSWHU
(-%WUDQVDFWLRQV

[M\:WTTJIKS7VTaTQ^M[QV<?7QV\MZNIKM[

8VHU7UDQVDFWLRQ (-%&RQWH[W
EHJLQ
FRPPLW JHW&DOOHU3ULQFLSDO
JHW6WDWXV JHW(-%+RPH
UROOEDFN JHW(-%/RFDO+RPH
VHW5ROOEDFN2QO\
VHW7UDQVDFWLRQ7LPHRXW
JHW5ROOEDFN2QO\
JHW8VHU7UDQVDFWLRQ
%H685(\
RX
LV&DOOHU,Q5ROH NQRZWKHU
XOHV
VHW5ROOEDFN2QO\ IRU%27+R
IWKH
VHW5ROOEDF
(YHU\WKLQJLQ8VHU7UDQVDFWLRQ N2QO\ 
PHWKRGV
LVIRU%07EHDQV21/<
%HUHDG\IRUW
KHH[DPWRWH
VHW5ROOEDFN2QO\ LQ(-%&RQWH[W WKHXVHRIVHW VW\RXRQ
5ROOEDFN2QO\
LVIRU&07EHDQV21/< %07DQG&0 IRUERWK
7EHDQV
(-%&RQWH[WV
4HEMETHODSINTHE5SER4RANSACTIONINTERFACEARE HW5ROOEDFN2QO
\
FOR"-4BEANSONLY#-4BEANSCANTUSEANYTHINGIN 8VHU7UDQVDF
WLRQVHW5ROOEDF
5SER4RANSACTION N2QO\
5HPHPEHUQR
4HE%*"#ONTEXTINTERFACE ONTHEOTHERHAND IS VLQJOHEHDQF
DQHYHU
XVH%27+RIW
FORBOTH"-4AND#-4BEANS EXCEPTFORTHETWO KHVH
TRANSACTIONMETHODS &07EHDQVFD
QXVHRQO\WK
4HESET2OLLBACK/NLY ANDGET2OLLBACK/NLY (-%&RQWH[WV H
HW5ROOEDFN2QO
\
METHODSIN%*"#ONTEXTAREOFF LIMITSTO"-4BEANS
%07EHDQVFD
QXVHRQO\WK
"OTTOMLINE"-4BEANSCALLSET2OLLBACK/NLY ONA 8VHU7UDQVDF H
WLRQVHW5ROOEDF
5SER4RANSACTION#-4BEANSCALLSET2OLLBACK/NLY N2QO\
ONAN%*"#ONTEXT ([SHFWWRVHH
FRGHH[DPSOHV
\RX¶OOQHHGWR Z
¿JXUHRXWLIWKH KHUH
%07RU&07 EHDQLV
O\  E\ORRNLQJDWWK
EDFN2Q HFRGH
VHW5ROO $QGLWZRQ¶WEH
6 7 E
KD
HL
WF
$EHDQW QDWUDQVDFWLR
D OOV
Q
21/<
WRJHW8VHU7UD
FDOOWR(-%&RQ
DVREYLRXVDV
QVDFWLRQ ,I\R
DFDOO
XVHHD
0 8
P D% 07EHDQ LQ WH[WVHW5ROOEDF
2QO\ I UR RQO\ZLWK IRUH[DPSOH\ N2
RXNQRZWKDWWK QO\ 
Q FD OOV H W5ROOEDFN ,Q R WKHUZRUGV LW RU EHD&07EH LVPXVW
<RXFD QVDFWLR Q WFRPP DQ6RLIWKDWV
QVLGHDWUD XWEHJLQ DQGDX WKDWFDOOV ODWHUVWDUWVD8 DPHEHDQ
LI\RX¶UHL H HQ D HWKR G VHU7UDQVDFWLR
FRGHWKDW¶
VEHWZ
07EHDQ
WKHP DFWLRQ NQRZWKHFRGH Q\RX
) RUD & SS URS ULDWHWUDQV LVLOOHJDO
D FN D YH D QD R Z 
XWUROOE XVWK IURPQ
FN2QO\ P HZSDJHV
VHW5ROOED ¶OOJHWLQWRWKDWDI
ZH
DWWULEXWH

\RXDUHKHUH 
JHW5ROOEDFN2QO\ PHWKRG

OM\:WTTJIKS7VTa 
*MKI][MTQNM¼[\WW[PWZ\NWZIJMIV\W_I[\M\QUM
&07EHDQVFDOO
/NCEABEANHASCALLEDSET2OLLBACK/NLY THETRANSACTION
ISSENTENCEDTODEATH)TWILLNEVERCOMMIT"UTTHE
JHW5ROOEDFN2QO\ WR
TRANSACTIONMIGHTSTILLHAVEALONGWAYTOGO WITHPLENTYOF ILQGRXWLIWKHWUDQVDFWLRQ
OTHERMETHODSINOTHERBEANS ANDWITHLOTSOFHEAVYCODE
)MAGINEYOUREABEAN(OWWOULDYOUFEELIFTHE WKH\·UHLQLVDOUHDG\
TRANSACTIONWEREALREADYDOOMEDBEFOREYOURMETHODS
WERECALLED BUTNOBODYTOLDYOU
GRRPHG,IWKHWUDQVDFWLRQ
LVQHYHUJRLQJWRFRPPLW
2K
OLNH,GRQ·WKDYH
ZK\VKRXOGWKHEHDQZDVWH
%(77(5WKLQJVWRGRWKDQ
UXQP\OLQHVRIFRGH
WLPHZLWKORWVRIFRGH"
ZKHQLW·VDOUHDG\D'HDG
7UDQVDFWLRQ:DONLQJ"

)FYOUREA#-4BEAN YOUCANCALLGET2OLLBACK/NLY TOlND


OUTIFYOURTRANSACTIONHASALREADYBEENSENTENCEDTODEATH
)FITHAS WHYBOTHERDOINGANYWORK

LI JHW5ROOEDFN2QO\ ^
VDYH:RUOG  JHW5ROOED
FN2QO\ 
LV127IR
U%07
`HOVH^ EHDQV2
QO\&07
EHDQVFD
QFDOO
DEDQGRQ$OO+RSH  JHW5ROOED
FN2QO\

 &KDSWHU
(-%WUDQVDFWLRQV

*5<JMIV[][MOM\;\I\][QV[\MILWNOM\:WTTJIKS7VTa

8VHU7UDQVDFWLRQ (-%&RQWH[W
EHJLQ
FRPPLW JHW&DOOHU3ULQFLSDO
JHW6WDWXV JHW(-%+RPH
UROOEDFN JHW(-%/RFDO+RPH
VHW5ROOEDFN2QO\ JHW5ROOEDFN2QO\
VHW7UDQVDFWLRQ7LPHRXW JHW8VHU7UDQVDFWLRQ
LV&DOOHU,Q5ROH
VHW5ROOEDFN2QO\
7KHUH·VQRJHW5ROOEDFN2QO\ 
LQ8VHU7UDQVDFWLRQ%07EHDQV
FDOOJHW6WDWXV LQVWHDG
JHW5ROOEDFN2QO\ LVIRU&07
EHDQVRQO\

4HEGET2OLLBACK/NLY METHODRETURNSABOOLEANˆTRUEIFTHEMETHODHAS
BEENMARKEDFORROLLBACK FALSEIFNOBODYSASKEDFORAROLLBACK4HATSALLA
#-4BEANCANANDNEEDS TOKNOWABOUTTHETRANSACTIONSSTATUS
"-4BEANS ONTHEOTHERHAND AREMOREINVOLVEDINCONTROLLINGTHE
TRANSACTION ANDTHEYMIGHTWANTTOKNOWALOTMORE4HEGET3TATUS METHOD
IN5SER4RANSACTIONCANTELLYOUANYTHINGYOUDEVERWANTTOKNOW ANDSO
MUCHMORE ABOUTHOWTHETRANSACTIONISDOING

<RXGRQ¶WQHHGWRPHPRUL]HWKHVWDWXVFRQVWDQWV
7KHJHW6WDWXV PHWKRGUHWXUQVDQLQWUHSUHVHQWLQJDFRQVWDQW
IRUWKLQJVOLNH67$786B$&7,9(67$786B&200,77('67$786B
&200,77,1*67$786B7+,1.,1*B$%287B&200,77,1* MXVWNLGGLQJRQWKLVRQH 
67$786B0$5.('B52//%$&.67$786B52//,1*B%$&.DQGRXUSHUVRQDODQG
PRVWXVHIXOIDYRULWH67$786B81.12:1
7KHVHFRQVWDQWVDUHGH¿QHGLQWKHMDYD[WUDQVDFWLRQ6WDWXVLQWHUIDFH ZKLFKKDVQR
PHWKRGVMXVWDSLOHRIWKHVHVWDWXVFRQVWDQWV DQG\RXPLJKW¿QGWKHPKHOSIXOLI
\RX¶UHZULWLQJ%07FRGH%XWWKH\¶UHQRWRQWKHH[DP<RX'2QHHGWRNQRZWKDWWKH
JHW6WDWXV PHWKRGLVLQ8VHU7UDQVDFWLRQDQGWKDWLW¶VWKHRQO\ZD\D%07EHDQFDQ
¿QGRXWLIVRPHERG\FDOOHGVHW5ROOEDFN2QO\ EXWWKDW¶VLW

\RXDUHKHUH 
%07FDQKXUWUHXVH

*5<KIVJMIZMITTa*),QLMI
*5<P]Z\[JMIVZM][M
#ANYOUlGUREOUTWHY
4HINKABOUTWHATYOULEARNEDONTHELASTFEWPAGES ESPECIALLYABOUTTRANSACTION
PROPAGATIONTHEWHOLEONE WAYTHING 
,I\RXZULWHD%07EHDQQRERG\HOVHFDQHYHULQFOXGH
\RXUEHDQLQWKHLUWUDQVDFWLRQ
9OUR"-4BEANPUTSUPABIGFATWALLSOCALLINGTRANSACTIONSCANTPASS2EMEMBER
A"-4BEANWILLRUNONLYINTHETRANSACTIONSTHEBEANITSELFCREATESANDSTARTS9OU
DEFEATTHEWHOLEPOINTOFACOMPONENTMODELIFYOULOCKDOWNTHETRANSACTION
DEMARCATIONINSIDETHEBEAN2EMEMBER THECOOLTHINGABOUTACOMPONENTMODELIS
THATCOMPONENTSCANBEMIXEDANDCOMBINEDINNEWWAYSTOMAKENEWAPPLICATIONS
THATTHE"EAN0ROVIDERHADNTEVERTHOUGHTABOUT4HEPURPOSEOFTHEDEPLOYMENT
DESCRIPTORISTOGIVETHEAPPLICATIONASSEMBLERAWAYTOCONlGURETRANSACTIONSSPECIlC
TOAPARTICULARAPPLICATION WITHOUTTOUCHINGTHEBEANCODE

,ILW·VVREDGWRXVH%07ZK\LVLWWKHUH"
"ECAUSEITLETSYOUDOAFEWTHINGSYOUSIMPLYCANNOTDOWITH#-4"UTMOSTOFTHE
TIME YOUWONTNEEDTHESETHINGS

:LWK%07\RXFDQUHGXFHWKHVFRSHRIDWUDQVDFWLRQ
5SING#-4 YOUCANNOTMARKATRANSACTIONATANYTHINGSMALLERTHANASINGLEMETHOD
9OUPUTINTHEDEPLOYMENTDESCRIPTORWHICHTRANSACTIONATTRIBUTEWEREGETTING
THERE GOESWITHWHICHMETHOD9OUCANTSPECIFYAPARTOFAMETHOD"UTWITH
"-4 YOUCANSTARTTHETRANSACTIONANDENDITATASMALLERSCOPE4HISCANIMPROVE
PERFORMANCEBECAUSETHELONGERATRANSACTIONLASTS THEMORELIKELYYOUARETOHURT
YOURCONCURRENCY"UTTHETRADEOFFˆHURTINGYOURREUSEˆISALMOSTNEVERWORTHIT AND
THEREAREUSUALLYMUCHBETTERWAYSOFINCREASINGTHEPERFORMANCE
:LWK%07\RXFDQOHDYHDVWDWHIXOVHVVLRQEHDQWUDQVDFWLRQRSHQDFURVV
PXOWLSOHLQYRFDWLRQVIURPWKHFOLHQW
7ITH"-4 YOUCANOPENATRANSACTIONCALLUTBEGIN INONEMETHOD ANDENDTHE
METHODWITHOUTENDINGTHETRANSACTION!BIGNO NOFORMESSAGE DRIVENORSTATELESS
SESSIONBEANS "UTTHISISALMOSTALWAYSAREALLYBADDESIGNIDEA SOITSPROBABLYNEVER
GOINGTOBEAGOODREASONFOR"-4
:LWK%07\RXVHSDUDWHWUDQVDFWLRQFRPPLWVWDWXVIURPPHVVDJH
DFNQRZOHGJPHQW7KLVPLJKWEHDJRRGUHDVRQIRU%07
7ECOVEREDTHISINMOREDETAILINTHE-$"CHAPTER BUTTHESHORTVERSIONISWITH#-4
MESSAGEACKNOWLEDGMENTISSENTONLYWHENANDIF THETRANSACTIONCOMMITS)NSOME
DESIGNS YOUCANENDUPWITHPOISONMESSAGES

 &KDSWHU
(-%WUDQVDFWLRQV

,PDQDJH
\RXUWUDQVDFWLRQVE\
ORRNLQJDWZKDW\RXSXWLQWKH
GHSOR\PHQWGHVFULSWRUIRUHDFKPHWKRG
,I\RXUPHWKRGQHHGVDWUDQVDFWLRQ,·OO
VWDUWRQHRUDGG\RXWRWKHFDOOHU·V
GHSHQGLQJRQWKHDWWULEXWHV,FDQHYHQ
VXVSHQGDWUDQVDFWLRQLI\RXQHHGWR
UXQZLWKRXWRQH

+WV\IQVMZUIVIOML\ZIV[IK\QWV[
.OWTHATWEVELOOKEDATTHEDO IT YOURSELFWAYTODEMARCATE
TRANSACTIONS YOULLSEEHOWEASYITISWITH#-43OEASYTHAT
YOUDONTWRITEANYTHINGTRANSACTIONALINYOURCODEEXCEPT
MAYBEANOCCASIONALCALLTO%*"#ONTEXTSET2OLLBACK/NLY OR
%*"#ONTEXTGET2OLLBACK/NLY 

7ITH#-4 TRANSACTIONSARESTARTEDANDCOMPLETEDWITH
EITHERACOMMITORROLLBACK BYTHECONTAINER BASEDSOLELY
ONTHEDEPLOYMENTDESCRIPTOR9OU/+ TECHNICALLY
THE!PPLICATION!SSEMBLER MARKSOMEATTRIBUTESINTHE
DEPLOYMENTDESCRIPTORANDTHATSIT
!LMOST
5NLESSYOUUNDERSTANDEXACTLYWHATTHESIXTRANSACTION
ATTRIBUTESARE ANDTHEIMPLICATIONSOFHOWDIFFERENTATTRIBUTES
INTERACTATRUNTIME YOUWONTHAVEACLUEABOUTWHETHERYOUR
BEANISEVENGOINGTOBEINATRANSACTION/R HOWBIGTHE
TRANSACTIONWILLBE/R WHETHERYOUVECREATEDADANGEROUS
SITUATIONTHATCOULDBLOWUPATRUNTIME
&ORTUNATELY THEREAREONLYSIX!NDTHERULESFORHOWTHE
CONTAINERBEHAVESWITHEACHOFTHOSEATTRIBUTESISVERYCLEAR
ANDSIMPLE

\RXDUHKHUH 
WUDQVDFWLRQDWWULEXWHV

0W_I\\ZQJ]\M[_WZS
 0DUNDPHWKRGZLWKRQHRIVL[
WUDQVDFWLRQDWWULEXWHV

ƒ 5HTXLUHG )RR%HDQ

ƒ 5HTXLUHV1HZ VHW)RR Required


ƒ 0DQGDWRU\ JHW)RR Supports
ƒ 6XSSRUWV GR%DU Required
GR%LJ7KLQJ
ƒ 1RW6XSSRUWHG RequiresNew
ƒ 1HYHU

 :KHQWKHPHWKRGLVFDOOHGWKH
FRQWDLQHUXVHVWKHDWWULEXWHWRGR
RQHRIÀYHWKLQJV
YRLGJR ^
ƒ 5XQWKHPHWKRGLQWKHFDOOHU·V D)RR%HDQVHW)RR 
WUDQVDFWLRQ `
25
ƒ 6XVSHQGWKHFDOOHU·VWUDQVDFWLRQDQG /HW·VVHHWKH
VWDUWDQHZWUDQVDFWLRQ JR PHWKRGLVDOUHDG\LQD
25 WUDQVDFWLRQZKHQLWFDOOVVHW)RR 
DQGVHW)RR KDVD5HTXLUHGW[
ƒ 6XVSHQGWKHFDOOHU·VWUDQVDFWLRQDQGUXQ DWWULEXWHVR,ZLOOUXQVHW)RR LQ
WKHPHWKRGZLWKRXWDWUDQVDFWLRQ
WKHVDPHWUDQVDFWLRQDVJR
25
ƒ 7KURZDQH[FHSWLRQEHFDXVHWKHFDOOHU
GRHVQRWKDYHDWUDQVDFWLRQ
25
ƒ 7KURZDQH[FHSWLRQEHFDXVHWKHFDOOHU
GRHVKDYHDWUDQVDFWLRQ

 &KDSWHU
(-%WUDQVDFWLRQV

$VDQ$SSOLFDWLRQ
$VVHPEOHU,KDYHWR
NQRZP\DWWULEXWHVVRWKDW,
FDQJHWWKHEHKDYLRU,GHVLUH
IURPP\EHDQV

3VW_aW]ZI\\ZQJ]\M[
+RZDQDWWULEXWHDIIHFWVEHKDYLRUGHSHQGVRQ
RQHWKLQJ
,VWKHFDOOLQJPHWKRGLQDWUDQVDFWLRQ"

(tx A)
foo() is in a transactioann ot
on her
when it calls bar() is
SXEOLFYRLGIRR ^
bean. The bar() me th od
D%HDQEDU 
` marked as Required.

 -ETHODFOO ISINATRANSACTIONTX! 

IRR W[$

 -ETHODBAR ISMARKEDWITHTHE2EQUIRED
TRANSACTIONATTRIBUTE
PHWKRG!
HMEQDPH!0\%HDQHMEQDPH!
PHWKRGQDPH!EDUPHWKRGQDPH!
PHWKRG!
WUDQVDWWULEXWH!5HTXLUHGWUDQVDWWULEXWH!
The bar() metho
transaction as fodo(runs in the same
Required and foo() ) because bar() is marked
foo() had NOT be has a transaction. If  4HEBAR METHODRUNSINTHECALLERSTRANSACTIONTX! 
the container wou en in a transaction,
transaction for bald have started a new
r() to run in. EDU W[$

IRR W[$

\RXDUHKHUH 
DWWULEXWHVWKDWUHTXLUHDWUDQVDFWLRQ

7UDQVDFWLRQDWWULEXWHVWKDW
UHTXLUHDWUDQVDFWLRQ

$WWULEXWHIRUEDU IRR WUDQVDFWLRQVWDWXV UHVXOW

5HTXLUHG
, EDU W[$
, IRR W[$ ° , IRR W[$
,IWKHPHWKRGLVFDOOHG
LQWUDQVDFWLRQ$ W[$ EDU UXQVLQW[$
ZLWKDQH[LVWLQJ
WUDQVDFWLRQFRQWH[WWKH
PHWKRGUXQVLQWKDW
H[LVWLQJWUDQVDFWLRQ,I , EDU W[$
WKHUHLVQ¶WDWUDQVDFWLRQ IRR BBB ° IRR BBBB
WKHFRQWDLQHUZLOOVWDUWD
QHZRQH QRWUDQVDFWLRQ FRQWDLQHUVWDUWVDQHZWUDQVDFWLRQ
W[$ IRUEDU

5HTXLUHV1HZ
, EDU W[%
, IRR W[$ ° , IRR W[$
7KHPHWKRGZLOO
LQWUDQVDFWLRQ$ W[$ FRQWDLQHUVXVSHQGVW[$DQGVWDUWV
DOZD\VUXQZLWKDQHZ DQHZWUDQVDFWLRQ W[% IRUEDU
WUDQVDFWLRQ,IWKH
PHWKRGLVFDOOHGZLWK
DQH[LVWLQJWUDQVDFWLRQ , EDU W[$
FRQWH[WWKHFDOOHU¶V IRR BBB ° IRR BBBB
WUDQVDFWLRQLVVXVSHQGHG
XQWLOWKLVPHWKRG QRWUDQVDFWLRQ FRQWDLQHUVWDUWVDQHZWUDQVDFWLRQ
FRPSOHWHV W[$ IRUEDU

0DQGDWRU\
, EDU W[$
, IRR W[$ ° , IRR W[$
'DQJHU0DQGDWRU\
LQWUDQVDFWLRQ$ W[$ EDU UXQVLQW[$
UHDOO\PHDQV
³5HTXLUHV([LVWLQJ´,IWKH
PHWKRGLVFDOOHGZLWKRXW
V
- `K M X \ Q W
DQH[LVWLQJWUDQVDFWLRQ
BBB
FRQWH[WWKHFRQWDLQHU IRR °
WKURZVDQH[FHSWLRQ
QRWUDQVDFWLRQ

 &KDSWHU
(-%WUDQVDFWLRQV

7UDQVDFWLRQDWWULEXWHVWKDWGR
QRWUHTXLUHDWUDQVDFWLRQ

$WWULEXWHIRUEDU IRR WUDQVDFWLRQVWDWXV UHVXOW

6XSSRUWV
, EDU W[$
, IRR W[$ ° , IRR W[$
,IWKHPHWKRGLVFDOOHG
LQWUDQVDFWLRQ$ W[$ EDU UXQVLQW[$
ZLWKDQH[LVWLQJ
WUDQVDFWLRQFRQWH[WWKH
PHWKRGUXQVLQWKDW
EDU BBBB
WUDQVDFWLRQ,IWKHUHLVQ¶W
DWUDQVDFWLRQWKHPHWKRG IRR BBB ° IRR BBBB
UXQVZLWKDQ³XQVSHFL¿HG
WUDQVDFWLRQFRQWH[W´ QRWUDQVDFWLRQ EDU UXQVZLWKDQ³XQVSHFL¿HG
WUDQVDFWLRQFRQWH[W´

EDU  BBBB
1RW6XSSRUWHG
, IRR W[$ ° , IRR W[$
,IWKHPHWKRGLVFDOOHGZLWK
LQWUDQVDFWLRQ$ W[$ FRQWDLQHUVXVSHQGVW[$EDU UXQV
DQH[LVWLQJWUDQVDFWLRQ ZLWKDQ³XQVSHFL¿HGWUDQVDFWLRQ
FRQWH[WWKHFDOOHU¶V FRQWH[W´
WUDQVDFWLRQLVVXVSHQGHG
EDU BBBB
5HJDUGOHVVRIZKHWKHU
BBB
WKHUHLVDQH[LVWLQJ IRR ° IRR BBBB
WUDQVDFWLRQWKHPHWKRG
ZLOOUXQLQDQ³XQVSHFL¿HG QRWUDQVDFWLRQ EDU UXQVZLWKDQ³XQVSHFL¿HG
WUDQVDFWLRQFRQWH[W´ WUDQVDFWLRQFRQWH[W´

V
- `K M X \ Q W
1HYHU
, IRR W[$ °
1HYHUPHDQV³1R3UH
LQWUDQVDFWLRQ$ W[$
([LVWLQJ´,IWKHPHWKRG
LVFDOOHGZLWKDQH[LVWLQJ
WUDQVDFWLRQFRQWH[WWKH
FRQWDLQHUWKURZVDQ EDU BBBB
H[FHSWLRQ,IWKHUHLVQ¶WD IRR BBB ° IRR BBBB
WUDQVDFWLRQWKHPHWKRG
UXQVZLWKDQ³XQVSHFL¿HG QRWUDQVDFWLRQ EDU UXQVZLWKDQ³XQVSHFL¿HG
WUDQVDFWLRQFRQWH[W´ WUDQVDFWLRQFRQWH[W´

\RXDUHKHUH 
WUDQVDFWLRQDWWULEXWHV

6KDUSHQ \RXU SHQFLO

.QRZ\RXUDWWULEXWHV
4HEEXAMEXPECTSYOUTOFIGUREOUTWHICHCOMBINATIONOFATTRIBUTESCANORWILL LEAD
TOAPARTICULAROUTCOME9OUMIGHTBEASKEDTOLOOKATASEQUENCEOFMETHODS WHERE
THEMETHODSSHOWWHICHTRANSACTIONTHEYRERUNNINGIN ANDYOUHAVETOFIGUREOUT
WHICHCOMBINATIONOFTRANSACTIONATTRIBUTESCOULDMAKETHATSCENARIOPOSSIBLE4HEY
MIGHTBEFORMATTEDSOMETHINGLIKETHIS
4HEANSWERSAREATTHEBOTTOMOFTHENEXTPAGE

0HWKRG5 0HWKRG6
7[EDU 7[EDU
0HWKRG4
7[IRR
0HWKRG7 0HWKRG8 0HWKRG9

7[IRR BBBB BBBB

15%34)/.7HICHTWOCOMBINATIONSOFATTRIBUTESWOULDMAKETHISPOSSIBLE

 2 3UPPORTS 3 2EQUIRED 4 -ANDATORY 5 .OT3UPPORTED 6 .EVER

 2 2EQUIRES.EW 3 2EQUIRED 4 2EQUIRED 5 .EVER 6 .OT3UPPORTED

 2 2EQUIRES.EW 3 3UPPORTS 4 3UPPORTS 5 .OT3UPPORTED 6 3UPPORTS

 2 2EQUIRES 3 -ANDATORY 4 -ANDATORY 5 3UPPORTS 6 .EVER

 2 2EQUIRES.EW 3 2EQUIRED 4 2EQUIRED 5 .OT3UPPORTED 6 .OT3UPPORTED

 &KDSWHU
(-%WUDQVDFWLRQV

6KDUSHQ \RXU SHQFLO


&ORTHEEXAMANDBEANDEVELOPERLIFEINGENERAL YOUHAVETOKNOWSOME2%!,,9
IMPORTANTRULESABOUTTRANSACTIONS ANDITWILLBEMUCHEASIERFORYOUIFYOUTAKE
THETIMENOWTOFIGURESOMEOFTHISOUTFORYOURSELF5NDERSTANDINGISMUCH
BETTERTHANMEMORIZING ANDITSNOTLIKEYOUDONTHAVEENOUGHTOMEMORIZEAS
ITIS9OULLFINDALLOFTHESEQUESTIONSANSWEREDOVERTHENEXTFEWPAGES BUTYOU
SHOULDREALLYTRYTODOTHISFIRST

 /FTHESIXTRANSACTIONATTRIBUTES WHICHONEORONES MUST./4BEUSEDBY


ABEANTHATCALLSGET2OLLBACK/NLY ORSET2OLLBACK/NLY 

 7HICHTRANSACTIONATTRIBUTEORATTRIBUTES MUST./4BEUSEDBYA
MESSAGE DRIVENBEAN
(INTREMEMBER AMESSAGE DRIVENBEANDOESNTHAVEAhCLIENTvTHECONTAINER
INVOKESTHEON-ESSAGE METHOD

 5NDERWHATCIRCUMSTANCESDOYOUTHINKTHECONTAINERSHOULDAUTOMATICALLYROLL
BACKATRANSACTION
)FTHEBEANGETSARUNTIMEEXCEPTION
)FTHEBEANTHROWSANAPPLICATIONEXCEPTIONEG)NSUFlCIENT&UNDS%XCEPTION

 /FTHESIXTRANSACTIONATTRIBUTES THREEOFTHEMCANBEDANGEROUS WITH


ONEINPARTICULARBEING%842%-%,9RISKY+EEPINGINMINDTHATTHE
"EAN0ROVIDERIS./4THEONEWHOSPECIlESTHEATTRIBUTESFORTHEBEANS
METHODS WHICHOFTHESIXISPOTENTIALLYTHEMOSTDANGEROUS

DQVZHUWRWKH$WWULEXWHVVKDUSHQWKUHHDQGILYH

\RXDUHKHUH 
PHWKRGVWKDWPXVWKDYHDQDWWULEXWH

<PM[MIZM\PMUM\PWL[aW]
5=;<UIZS_Q\PIVI\\ZQJ]\M
NWZI+5<JMIV

6HVVLRQEHDQV (-%2EMHFW (-%+RPH


JHW(-%+RPH JHW+RPH+DQGOH
ƒ %XVLQHVVPHWKRGVLQWKHFRPSRQHQWLQWHUIDFH JHW+DQGOH UHPRYH 2EMHFWSN
UHPRYH UHPRYH +DQGOHK
ƒ 121(RIWKHRWKHUPHWKRGVWKHFOLHQWVHHVLQ LV,GHQWLFDO (-%2EMHFWR JHW(-%0HWD'DWD
WKHFRPSRQHQWLQWHUIDFH IURP(-%2EMHFWRU JHU3ULPDU\.H\
(-%/RFDO2EMHFW
ƒ 121(RIWKHPHWKRGVLQWKHKRPHLQWHUIDFH
LQFOXGLQJWKRVHZULWWHQE\WKH%HDQ3URYLGHUDV $GYLFH $GYLFH+RPH
ZHOODVWKRVHIURP(-%+RPHRU(-%/RFDO+RPH
JHW$GYLFH FUHDWH
s LJQRUH$GYLFH
r e t h e o n ly method
these a e to mark in th e
you hav ent descriptor
deploym

(QWLW\EHDQV (-%2EMHFW (-%+RPH


ƒ %XVLQHVVPHWKRGVLQWKHFRPSRQHQWLQWHUIDFH JHW(-%+RPH JHW+RPH+DQGOH
JHW+DQGOH UHPRYH 2EMHFWSN
ƒ 121(RIWKHRWKHUPHWKRGVWKHFOLHQWVHHVLQ UHPRYH UHPRYH +DQGOHK
LV,GHQWLFDO (-%2EMHFWR JHW(-%0HWD'DWD
WKHFRPSRQHQWLQWHUIDFH IURP(-%2EMHFWRU JHW3ULPDU\.H\
(-%/RFDO2EMHFW H[FHSWUHPRYH
ƒ $//RIWKHKRPHLQWHUIDFHPHWKRGVZULWWHQE\WKH
%HDQ3URYLGHUDVZHOODVWKHUHPRYH PHWKRGV
IURP(-%+RPHRU(-%/RFDO+RPH &XVWRPHU &XVWRPHU+RPH
JHW1DPH FUHDWH
h
more methods wit
VHW1DPH ILQG%\3ULPDU\.H\
You have to emwarhek n you use entity beans r, JHW,' JHW&XVWRPHU/LVW
an attribut with session beans..Remembe
than you do remove() are a Big Deal to
create() and ert and delete!).
an entity (ins
A message-driven bean doesnÕt
0HVVDJHGULYHQEHDQV have any client interfaces.
ƒ RQ0HVVDJH RQ0HVVDJH

 &KDSWHU
(-%WUDQVDFWLRQV

+PPPPZKDWKDSSHQVLI
,XVH´6XSSRUWVµ"+RZZLOO,UHDOO\NQRZ
LIWKHUH·VDWUDQVDFWLRQ"$QGZKDWDERXW
1RW6XSSRUWHG"1HYHU":KDWDERXWHME&UHDWH 
DQGHME5HPRYH IRUVHVVLRQEHDQV":KDW
KDSSHQVLI,TXLWP\MREDQGEHFRPHD
VXUÀQJ LQVWUXFWRULQ.DXDL"
¹=V[XMKQNQML<ZIV[IK\QWV+WV\M`\º
4HETERMhANUNSPECIlEDTRANSACTIONCONTEXTvISTHE%*"
SPECSWAYOFSAYING h9OUHAVENOCLUE)THECONTAINER
CANDOWHATEVER)WANTANDYOULLJUSTHAVETODEALv
9OUMUSTKNOW FORTHEEXAM THEMETHODSAND
CIRCUMSTANCES THATMIGHTBERUNNINGINANhUNSPECIlED
TRANSACTIONCONTEXTv

ƒ $Q\&07PHWKRGPDUNHG1RW6XSSRUWHG1HYHURU6XSSRUWV
1RW6XSSRUWHGDQG1HYHUDUHVXSSRVHGWRPHDQ´QRWUDQVDFWLRQµ
EXWLQUHDOLW\WKHFRQWDLQHUFDQGRZKDWHYHULWZDQWV$QGZLWK
6XSSRUWV\RXQHYHUNQRZDQ\ZD\ ZKLFKLVZK\ZHWKLQNLW·VD
UHDOO\GXPEDWWULEXWHWKDWQRERG\VKRXOGHYHUXVH 
ƒ &07VHVVLRQEHDQPHWKRGVHME&UHDWH  DQ\RIWKHP 
HME5HPRYH HME3DVVLYDWH HME$FWLYDWH 
7KHFUHDWHDQGUHPRYHPHWKRGVRIDVHVVLRQEHDQDUHQRW
FRQVLGHUHGSDUWRIDFOLHQW·VWUDQVDFWLRQ XQOLNHWKHZD\LWZRUNV
ZLWKHQWLW\EHDQV $QGUHPHPEHUDFWLYDWHDQGSDVVLYDWHZLOO
QHYHUEHFDOOHGLIWKHVHVVLRQEHDQLVLQDWUDQVDFWLRQ
ƒ &07PHVVDJHGULYHQEHDQPHWKRGVHME&UHDWH DQG
LQWLV HME5HPRYH 
7KHSR
<28'2
1·7.1
2:
5HPHPEHUIRUDPHVVDJHGULYHQEHDQHME&UHDWH DQG
HME5HPRYH DUHFDOOHGE\WKHFRQWDLQHUZKHQLWZDQWVWRDGGRU
W127
LV WK DW\RXPXV UHPRYHEHDQVIURPWKHSRRO7KHUH·VQRFDOOLQJFOLHQWWUDQVDFWLRQ
UH 
SRLQWKH HKDYLRUIURPWKH 
7KHNH\ H[ DFWE Q¶WN Q RZ EHFDXVHDPHVVDJHGULYHQEHDQGRHVQ·WKDYHDUHDOFOLHQW
Q\ G R
UHO\RQD HFDXVH\RXMXVW DE O\ 
UE SURE
FRQWDLQH HY H ORS HU\RX¶OO Y H U WK LV 3O ISTHEREATRANSACTIONORNOT7HYISIThUNSPECIlEDv
QG W¶VVOHHS
R
$VDEHD R P HQ LV Q¶W
HDP LVDQG 7HYISNTITJUSThDElNITELYNOTRANSACTIONv
QHYHUORV GWRNQRZZKDW
HH
%XW\RXQ  4HESPECLETSTHE#ONTAINERDOWHATEVERITWANTS4HE
DUD QWH HG
JX SPECSUGGESTSSEVERALOPTIONS INCLUDINGEVERYTHINGFROM
EXECUTINGWITHOUTANYTRANSACTIONATALLTOMERGING
:HWKLQNEHLQJDVQRZERDUGLQVWUXFWRULVEHWWHU MULTIPLECALLSTOARESOURCEMANAGERTOGETHERINTOONE
WKDQWHDFKLQJVXUILQJ-XVWDVIXQEXWZLWKRXWDOO
TRANSACTION
WKDWQHRSUHQH2UVKDUNV

\RXDUHKHUH 
WUDQVDFWLRQQRWHV

*]ZV\PM[MQV
4HESEAREALLTHINGSYOUMIGHTBETESTEDON"UTREMEMBER YOUWONTBE
ASKEDASIMPLETRUEORFALSEQUESTION LIKE h4HEGET2OLLBACK/NLY METHOD
CANBECALLEDFROMAMETHODWITHATRANSACTIONATTRIBUTEOF.OT3UPPORTEDv
)NWHICHCASETHEANSWERWOULDBEFALSE OFCOURSE .O YOURELIKELYTOSEE
SOMETHINGMUCHMORECLEVER LIKEBEANCODEPLUSTHEBEANSDEPLOYMENT
DESCRIPTOR ANDYOUHAVETODECIDEIFITALLWORKSTOGETHER

JHW5ROOEDFN2QO\ 
0867EHFDOOHG
0HVVDJHG
ULYHQEHDQ
IURPDEHDQLQD FDQXVHRQ
O\7:2
V
WUDQVDFWLRQ DWWULEXWHV
5HTXLUHV
DQG1RW6X
7KLQNDERXWLW SSRUWHG
WJHW5ROOEDFN2QO\  $PHVVDJH
<RXDOUHDG\NQRZWKD KDYHDFDOOLQ GULYHQEHDQ
O\E\& 07EHDQV JFOLHQW7KH GRHVQ¶W
FDQEHFDOOHGRQ 0HVVDJH P FRQWDLQHUFDO
WWK HPHWK RG H[ LVWV RQO\LQ HWKRGVRLWGR OVWKHRQ
DQGWKD WRXVHWKHRW HV
7LQ8 VHU7UDQVDFWLRQ KHURQHV5HT Q¶WPDNHDQ\VHQVH
(-%&RQWH[WDQG12 XVHOHVVEHFD XLUHV1HZ"7
QVFDQFDOO XVHWKHUHZLOO KDW¶V
5HPHPEHU"%07EHD LQJWUDQVDFWLR QHYHUEHDSU
VDFWLRQEXWWKH\ Q0DQGDWRU\ HH[LVW
JHW6WDWXV RQ8VHU7UDQ XSHYHU\WLP "7KDWZRXOG
FN2 QO\  H E\³EORZX EORZ
FDQ¶WFDOOJHW5ROOED H[FHSWLRQ E S´ZHPHDQ
WKURZDQ
HFDXVH0DQ
3UH([LVWLQJ´ GDWRU\PHDQV
O\ WRZRUNWKH 1HYHU":HO ³5HTXLUHV
%XWIRUJHW5ROOEDFN2Q FDVHDQ\ZD\ OWKDWLVDOZD\
DWUDQ VDFWLRQZKLFK DQG6XSSRUWV VWKH
PHWKRGPXVWEHLQ LVVLOO\WRR<
RXFDQ

5HTXLUHV
5HPHPE
HURQO\6
H[FHSWLR <67(0
QVFDXVH
DXWRPDWL DQ
FUROOEDF
:H¶OOFRYHU N
WKLVLQGHWD
EXWIRUQRZ LOLQWKH([FH
EHDZDUHW SWLRQVFKDS
KDWDSSOLFD WH
127DXWRP
DWLFDOO\FDX WLRQH[FHSWLR U
H[FHSWLRQLV VHDUROOEDFN QVGR
DQ $QDSSOLFD
RQDEHDQLQ \FKHFNHGH[FHSWLRQW WLRQ
WHUIDFHXQOH KDWLVGHFOD
5HPRWH([F VVLW¶VD5H UHG
HSWLRQLVLQ PRWH([FHS
DVSHFLDOF WLRQ
DWHJRU\ 
/HW¶VVD\\R
XVHHVRPH
VKRZVWKHE FRGHRQWK
HDQWKURZLQ HH[DPWKD
VD\D)LQG JDQDSSOLF W
HU([FHSWLRQ DWLRQH[FHS
DFWLRQZLOOE 'R127V WLRQ
HUROOHGEDFN D\WKDWWKHW
GHFLGHLQ\ ,I<28 % UDQV
RXUORJLFWK HDQ3URYLG
DOORZWKHWUD D WWKHVLWXDWLR HU 
QVDFWLRQWR QLVWRREOH
VHW5ROOEDFN FRQWLQXHWK DNWR
2QO\ 7KH HQ<28PX
UROOEDFN21 FRQWDLQHUG VWFDOO
/<IRUV\VWH RHVDQDXWR
FHSWLRQRUD PH[FHSWLR PDWLF
Q\RWKHUUX QV OLNH(-%
QWLPHH[FH ([
SWLRQ 

 &KDSWHU
(-%WUDQVDFWLRQV

(We caught a BMT bean and a


CMT bean arguing at the bar.)

%07AW][]KS %07AW]ZMITTaPI^M\WI[S\PI\73TM\UMJZMISQ\LW_V
[W\PI\M^MVaW]KIV]VLMZ[\IVL"\ZIV[IK\QWV[P]Z\KWVK]ZZMVKa
&077P\PI\¼[[WKTM^MZ?PI\I_Ia_Q\P_WZL[)VL_PI\LW
<PI\UMIV[\PMaP]Z\XMZNWZUIVKMIVL[KITIJQTQ\a)VL\PI\
aW]UMIVJa\PI\')VLQ[Q\R][\UMXMZ[WVITTaWZITT+5<JMIV[
UMIV[¸
QVOMVMZIT'
&07CQV\MZZ]X\QVOEAMIPaMIP1SVW_ITT\PI\*]\_Q\PW]\
%07)TTWN aW]?MMVQM[AW]¼ZMVW\JMIVMVW]OP\WPIVLTM
\ZIV[IK\QWV[aW]KIV¼\M^MVZ]VaW]ZJ][QVM[[
aW]ZW_V\ZIV[IK\QWV[[WaW]TMI^MQ\ITT]X\W\PMKWV\IQVMZ
AW]¼ZMXZWJIJTaINZIQLWN \PMOIZJIOMKWTTMK\WZ\WW %07,]P1¼UVW\\ITSQVOIJW]\VW\][QVO\ZIV[IK\QWV[1¼U
\ITSQVOIJW]\SMMXQVO\PMUI[[PWZ\I[XW[[QJTM1\¼[R][\TQSM\PMLQN
&07?MMVQM',WV¼\\MTTUMaW]IK\]ITTaJMTQM^M\PI\aW]¼ZMUIV
NMZMVKMJM\_MMV[aVKPZWVQbQVOIVMV\QZMUM\PWL^MZ[][UISQVOI
IOQVOaW]ZW_V\ZIV[IK\QWV['<PMKWV\IQVMZQ[IT_Ia[QVKPIZOM
[aVKPZWVQbMLJTWKS
UaNZQMVL;IUMNWZaW]I[Q\Q[NWZUM
&071¼UVW\[]ZM\PI\ZMITTaUI\\MZ[J]\736W_IQ\QN 
%07<PI\¼[VW\\Z]M 1[\IZ\\PM\ZIV[IK\QWVIVL1LMKQLM
aW]ZUM\PWL[IZM\PI\JQOaW]XZWJIJTaPI^MIJIL77LM[QOV
QN¸IVL_PMV¸\WKWUUQ\WZZWTTJIKS?PMZM¼[\PMKWV\IQVMZQV
IVa_Ia;WQN \PI\¼[\PMWVTaJMVMÅ\\W*5<
ITT\PI\'1UMIV[]ZM\PMKWV\IQVMZPI[\WOQ^MUM\PM\ZIV[IK\QWV
J]\IN\MZ\PI\1¼UQVKPIZOM %071\¼[VW\1KIVLW\PQVO[aW]KIV¼\M^MZLW
&076WaW]¼ZMVW\ &07.WZM`IUXTM'
%07AM[1IU %074QSMWXMVI\ZIV[IK\QWVQVWVM[\I\MN]TJMIVUM\PWLIVL
KTW[M\PM\ZIV[IK\QWVQV[WUMW\PMZUM\PWLWN \PI\JMIV
&07)TTaW]¼ZMLWQVOQ[LMUIZKI\QVO\PMJW]VLIZQM[WN \PM
\ZIV[IK\QWVAW]OM\\W[Ia_PMZMQ\[\IZ\[IVL[\WX[-VLWN [\WZa &077PaMIPTQSM\PI\¼[VW\OWVVISQTTaW]ZXMZNWZUIVKM'
,WV¼\aW]SVW_PW_U]KP\PI\P]Z\[aW]Z[KITIJQTQ\a'<PI\
%07=PaW]¼ZMNWZOM\\QVO\PI\1PI^M\PMXW_MZ\WZWTTJIKS
XZM^MV\[aW]Z[\I\MN]TJMIV[NZWUJMQVOXI[[Q^I\ML AW]ZQ[S
&07;WLW1 R][\TMI^QVO\PM\ZIV[IK\QWVWXMVTQSMNWZM^MZ)VLPW_IZMaW]
OWVVIM^MVO]IZIV\MM\PI\\PMUM\PWL\PI\[\IZ\[\PM\ZIV[IK\QWV
%076WaW]LWV¼\
_QTTJMKITTMLJMNWZM\PMUM\PWL\PI\MVL[Q\'/MMbaW]KW]TLKITT
&07AM[1LW?PI\LWaW]\PQVS[M\:WTTJIKS7VTaQ[NWZ' KWUUQ\WZZWTTJIKSJMNWZMaW]M^MZ[IQLJMOQV 
%07AW]KIV¼\KITT\PI\<PI\¼[QV\PM=[MZ<ZIV[IK\QWVQV\MZ %07AMIPJ]\QN [WUMWVMVMML[\WLW\PI\*5<Q[\PMWVTa
NIKMIVL\PI\¼[WNNTQUQ\[\WaW]+5<XMI[IV\[ _Ia\WLWQ\
&071KIV¼\JMTQM^M\PMaTM\aW]JMIJMIVAW]SVW_\PI\-2* &07-`KMX\ITUW[\VWJWLaM^MZVMML[\WLW\PI\ 7Z[PW]TL
+WV\M`\PI[I[M\:WTTJIKS7VTaUM\PWLR][\NWZ+5<JMIV[ 73aM[1¼TTIOZMM\PI\QN QV\PM]VJMTQM^IJTaIVLQVKZMLQJTa]V
%077P1NWZOW\IJW]\\PI\*]\[W_PI\'AW][\QTTIZMV¼\QV TQSMTaM^MV\\PI\ILM^MTWXMZVMML[\WLW\PI\aW]¼ZM\PMWVTa_Ia
KWV\ZWTWN aW]Z\ZIV[IK\QWVJW]VLIZQM[ *]\\PMZM¼[VWW\PMZZMI[WV1KIV[MM\W][M*5<M[XMKQITTa[QVKM
*5<LMNMI\[\PM_PWTMZM][IJTMKWUXWVMV\\PQVO0W_IZZWOIV\
&07*]\_PI\LWM[\PI\UI\\MZ'5aUM\PWL[IZMITTUIZSML KIVaW]JM'AW]KIVVM^MZZ]VQVIVaJWLaMT[M¼[\ZIV[IK\QWV[ 
_Q\PPW_1_IV\\ZIV[IK\QWV[\WJMIXXTQML[WPW_Q[\PI\LQNNMZ 7VTaaW]ZW_V<ITSIJW]\¹LWM[V¼\XTIa_MTT_Q\PW\PMZ[º
MV\NZWUKWV\ZWTTQVO\PMJW]VLIZQM[WN I\ZIV[IK\QWV'
%07?MTT73UIaJM1ZMITTaIUR][\NWZ[XMKQITWKKI[QWV[
%070-447 AW]Z\ZIV[IK\QWV[U][\JMI\TMI[\I[TWVOI[I J]\VM`\\QUM_M¼TTPI^M\W\ITSIJW]\XZM^MV\QVOXWQ[WVUM[[IOM
_PWTMUM\PWL 1KIV[KWXMUa\ZIV[IK\QWV[\W[WUM\PQVOUWZM LZQ^MVJMIVUM[[IOM[1¼U\PMWVTaWVM_PWKIVLW\PI\
OZIV]TIZ\PIV\PM_PWTMLIZVUM\PWL
&07AMIP_MTT_M¼TTR][\PI^M\W[MMIJW]\\PI\_PMV_MOM\
&07*]\_Pa_W]TLaW]M^MZ_IV\\W' \W\PM5,*KPIX\MZ1¼UW]\\IPMZM
\RXDUHKHUH 
WUDQVDFWLRQVLQWKHGHSOR\PHQWGHVFULSWRU

5IZSQVO\ZIV[IK\QWV[QV\PM,,
!LLBEANSMUSTSAYWHETHERTHEYREUSINGBEAN ORCONTAINER MANAGED
TRANSACTIONS&OR"-4BEANS THATSITFORTHE$$
"UTFOR#-4BEANSTHATSJUSTTHEBEGINNING

6XUH,·OOPDQDJH
\RXUWUDQVDFWLRQVEXW
\RXKDYHWRWHOOPH+2:6LQFH
+H\FRQWDLQHU,ZDQW\RXWR \RXVDLG´FRQWDLQHUµLQWKH''IRU
WDNHFDUHRIHYHU\WKLQJVR,·OOVD\ WUDQVDFWLRQW\SH,QHHGWRNQRZWKH
WUDQVDFWLRQW\SH!&RQWDLQHU WUDQVDFWLRQDWWULEXWHVIRU\RXU
WUDQVDFWLRQW\SH!LQWKH'' PHWKRGV

7UDQVDFWLRQUHODWHG''LQIROLYHVLQWZRSODFHV

 )RUERWK&07DQG%07EHDQV
4HETRANSACTION TYPEELEMENTINTHEENTERPRISE BEANSSECTION
HQWHUSULVHEHDQV!
VHVVLRQ!

WUDQVDFWLRQW\SH!&RQWDLQHUWUDQVDFWLRQW\SH!
VHVVLRQ!
HQWHUSULVHEHDQV!
the type is Bean
for BMT,
 )RU&07EHDQVRQO\
4HECONTAINER TRANSACTIONELEMENTINTHEASSEMBLY DESCRIPTORSECTION
DVVHPEO\GHVFULSWRU!
,FRXOGPDQDJHP\RZQ FRQWDLQHUWUDQVDFWLRQ!
WUDQVDFWLRQVLI,ZDQWHGWR1RUHDOO\ PHWKRG!
,MXVWGRQ·WZDQWWR%XWWKDWGRHV127
PDNHPHDZHHQLH
HMEQDPH!0\%HDQHMEQDPH!
PHWKRGQDPH!EDUPHWKRGQDPH!
PHWKRG!
WUDQVDWWULEXWH!5HTXLUHGWUDQVDWWULEXWH!
FRQWDLQHUWUDQVDFWLRQ!
DVVHPEO\GHVFULSWRU!

 &KDSWHU
(-%WUDQVDFWLRQV

,,M`IUXTMNWZ+5<

,QWKHHQWHUSULVHEHDQV!HOHPHQW
HQWHUSULVHEHDQV!

VHVVLRQ!
GLVSOD\QDPH!$GYLFH%HDQGLVSOD\QDPH!
HMEQDPH!$GYLFH%HDQHMEQDPH!
KRPH!KHDG¿UVW$GYLFH+RPHKRPH!
UHPRWH!KHDG¿UVW$GYLFHUHPRWH!
HMEFODVV!KHDG¿UVW$GYLFH%HDQHMEFODVV!
T y o u Õd sa y (surpriser!)Ó
VHVVLRQW\SH!6WDWHOHVVVHVVLRQW\SH! for BM ead of ÒContaine
WUDQVDFWLRQW\SH!&RQWDLQHUWUDQVDFWLRQW\SH!
VHFXULW\LGHQWLW\!
ÒBeanÓ inst
XVHFDOOHULGHQWLW\!XVHFDOOHULGHQWLW\!
VHFXULW\LGHQWLW\!
VHVVLRQ!

HQWHUSULVHEHDQV!

,QWKHDVVHPEO\GHVFULSWRU!HOHPHQW

DVVHPEO\GHVFULSWRU!
FRQWDLQHUWUDQVDFWLRQ!
PHWKRG! there are a few va
HMEQDPH!0\2WKHU%HDQHMEQDPH! <method> elemen riations of the
PHWKRGQDPH!IRRPHWKRGQDPH! t (w
on the next page) eÕll look at them
PHWKRG!
WUDQVDWWULEXWH!5HTXLUHV1HZWUDQVDWWULEXWH!
FRQWDLQHUWUDQVDFWLRQ!
DVVHPEO\GHVFULSWRU!


9OUSPECIFYATTRIBUTESBYLISTINGASPECIlCATTRIBUTE2EQUIRES.EW
3UPPORTS ETC ANDPUTTINGINALLOFTHEMETHODSTHATARESUPPOSED
TOHAVETHATATTRIBUTE9OUMIGHTTHINKYOURESUPPOSEDTOlRST
SPECIFYAMETHODANDTHENGIVETHEATTRIBUTEFORTHATMETHOD
BECAUSETHATSHOWITLOOKSINTHISEXAMPLE BUTTHATSNOTHOWIT
WORKS)TLLALLMAKESENSEONTHENEXTPAGE

\RXDUHKHUH 
WUDQVDFWLRQVLQWKHGHSOR\PHQWGHVFULSWRU

5WZM,,M`IUXTM[NWZ+5<
2SWLRQ:LOGFDUG
5SEAWILDCARDTOSAYTHATALLMETHODSINTHESPECIlEDBEANHAVETHE e
ATTRIBUTEINTHETRANS ATTRIBUTETAG in g t h e bean nama
yg iv e us e
e c if y a method bame. But here, wmethods
FRQWDLQHUWUDQVDFWLRQ! S p method n s ÒALL
PHWKRG!
and thed (*) which meanesNew attribute.Ó
HMEQDPH!%LJ%HDQHMEQDPH!
wildcar ean have Requir
of BigB
PHWKRGQDPH! PHWKRGQDPH!
PHWKRG!
WUDQVDWWULEXWH!5HTXLUHV1HZWUDQVDWWULEXWH!
FRQWDLQHUWUDQVDFWLRQ!

2SWLRQ,QGLYLGXDOO\QDPHGPHWKRGV
3PECIFYEACHMETHODOFEACH#-4BEANINTHEEJB JARUNLESSYOUUSE
THEWILDCARDTOINDICATEALLMETHODSOFTHESPECIlEDBEANCLASSHAVETHE
SPECIlEDATTRIBUTE 
FRQWDLQHUWUDQVDFWLRQ!
PHWKRG!
Here we have three differ
two different beans, that ent methods, in
HMEQDPH!%LJ%HDQHMEQDPH!
PHWKRGQDPH!IRRPHWKRGQDPH!
RequiresNew attribute. all hav e the
PHWKRG!
PHWKRG!
HMEQDPH!7LQ\%HDQHMEQDPH!
PHWKRGQDPH!JRPHWKRGQDPH!
PHWKRG!
PHWKRG!
HMEQDPH!0\%HDQHMEQDPH!
PHWKRGQDPH!EDUPHWKRGQDPH!
PHWKRG!
e
WUDQVDWWULEXWH!5HTXLUHV1HZWUDQVDWWULEXWH!
r a n s a c t io n attributhod
FRQWDLQHUWUDQVDFWLRQ!
ifferent t the met
FRQWDLQHUWUDQVDFWLRQ! This is a des -- so here we listhat weÕre
PHWKRG! -- Requirs Requires. Notice tsed in the
HMEQDPH!%LJ%HDQHMEQDPH! that use he same bean we u tion> element.
PHWKRGQDPH!GR6WXIIPHWKRGQDPH!
naming t container-transac
PHWKRG!
WUDQVDWWULEXWH!5HTXLUHGWUDQVDWWULEXWH! previous <
FRQWDLQHUWUDQVDFWLRQ!

 &KDSWHU
(-%WUDQVDFWLRQV

:DLWDPLQXWHDUH\RX
WHOOLQJPH,FDQ·WKDYHRYHUORDGHG
PHWKRGV",GRQ·WVHHDQ\DUJXPHQW
OLVWVLQWKHUH,IDOO,JHWWRSXW
LQLVWKHPHWKRGQDPH,·P
VFUHZHG

$ONTWORRY
#HANCESARE YOURDESIGNWILLTREATALLVERSIONSOFAN
OVERLOADEDMETHODINTHESAMEWAYFORTRANSACTIONS 
)NTHEEXAMPLESWEVESEENSOFAR AMETHODNAME
REPRESENTSALLOVERLOADEDVERSIONSOFTHATMETHOD
"UTJUSTINCASEYOUDONEEDTODISTINGUISHBETWEEN
DIFFERENTOVERLOADEDMETHODS THEREISAWAYTOSPECIFY
THEARGUMENTS4HEOPTIONALMETHOD PARAMSTAGLOOKS
LIKETHIS

FRQWDLQHUWUDQVDFWLRQ!
PHWKRG!
HMEQDPH!6KRSSLQJ%HDQHMEQDPH!
PHWKRGQDPH!DGG,WHPPHWKRGQDPH!
PHWKRGSDUDPV!
PHWKRGSDUDP!MDYDODQJ6WULQJPHWKRGSDUDP!
PHWKRGSDUDP!LQWPHWKRGSDUDP!
PHWKRGSDUDPV!
d m e t h o d , PHWKRG!
e a n o ve r lo ade s
Here we hawvhere one version takte her FRQWDLQHUWUDQVDFWLRQ!
WUDQVDWWULEXWH!5HTXLUHV1HZWUDQVDWWULEXWH!

addItem, nd an int, and the o e FRQWDLQHUWUDQVDFWLRQ!


a String a an int. The Þrst on nd PHWKRG!
takes onlyiresNew and the seco ve to HMEQDPH!6KRSSLQJ%HDQHMEQDPH!
uses Requ s Required. So we hasion PHWKRGQDPH!DGG,WHPPHWKRGQDPH!
version useHICH overloaded ver tion. PHWKRGSDUDPV!
specify W ing about in each sec and PHWKRGSDUDP!LQWPHWKRGSDUDP!
weÕre talk nal <method-params> a PHWKRGSDUDPV!
The optio param> tags give you WUDQVDWWULEXWH!5HTXLUHVWUDQVDWWULEXWH!
PHWKRG!
d -
<metho that.
o FRQWDLQHUWUDQVDFWLRQ!
way to d

\RXDUHKHUH 
WUDQVDFWLRQDWWULEXWHVLQWKH''

7UDQVDFWLRQDWWULEXWHVDUH
SDUWRIDSSOLFDWLRQDVVHPEO\
<HV\RX'2
127EHDQGHYHORSPHQW
QHHGWRNQRZ
WKHWDJVIRU 7KDWPHDQVWKHDWWULEXWHVDUH
WUDQVDFWLRQV
PRUL]H
VSHFLILHGLQWKHDVVHPEO\SDUW
<RX¶UHQRWH[SHFWHGWRPH
HYHU\W DJLQW KH ZK ROH '' EX W\RX
LI\
RIWKH''UDWKHUWKDQLQWKH
ZW RV SHF
'2QHHGWRNQRZKR
WUDQVDFWLRQDWW ULEX WHV LQFOX GLQ J EHDQSDUW
LOGFDUG
WKHZD\\RXFDQXVHWKHZ
HP HWK RGVRI
WRUHSUHVHQWDOOWK 7KHRQO\WKLQJ\RXVD\DERXW
GWK DWWKHU H,6 DZ D\WR
DEHDQDQ
PH WKR GV GLIIHUHQW
JLYHR YHU ORD GHG
WUDQVDFWLRQVLQWKHEHDQSDUW
WUDQVDFWLRQDWWULEXWHV
QVDFWLRQ LVZKHWKHUWKHEHDQLVXVLQJ
%HVXUH\RXNQRZWKDWWUD
L¿HG LQ
DWWULEXWHVDUH12
USULVH
7V
EHD
SHF
QV! SD UWR IWKH &RQWDLQHURU%HDQPDQDJHG
WKHHQWH
PE O\
''EXWUDWKHULQWKHD
FWLR Q7 KLQ
VVH
ND ERX W WUDQVDFWLRQV
GHVFULSWRU!VH
DWP DNH VV HQV HD% HDQ
ZK\WK
'' 
3URYLGHUKDVWRVD\ LQWKH
ZKHWKHUWKHEHD QLV XV
7KH
LQJ %0
DS S
7 Q: #AN)COMBINETHEWILDCARDWITHSPECIlCMETHODNAMES)
RU&07 EX WWK DW¶VLW MEAN WHATHAPPENSIF)WANTTOHAVEALLTHEBEANSMETHODS EXCEPT
JODWHUDQG
DVVHPEOHUZLOOFRPHDORQ ONEUSE2EQUIRES.EW ANDJUSTONEMETHODTOUSE.OT3UPPORTED
O\K RZ WUD QVD FWLRQV
GHFLGHH[DFW
WKLV SD UWLFXODU
VKRXOG EH KD QGO
GHSOR\PHQWRIWKHE
HG IRU
HDQ  A: .OPROBLEM5SINGTHEWILDCARDISLIKESAYING h!LLMETHODSNOT
OTHERWISESPECIFIEDINTHE$$SHOULDUSETHISATTRIBUTEv3OGOAHEAD
ANDUSETHEWILDCARDFORTHE2EQUIRES.EWPARTOFTHE$$ ANDWHEN
YOUGETTOTHE.OT3UPPORTEDATTRIBUTE GIVETHEMETHODNAME

FRQWDLQHUWUDQVDFWLRQ!
PHWKRG!
HMEQDPH!%LJ%HDQHMEQDPH!
PHWKRGQDPH! PHWKRGQDPH!
PHWKRG!
WUDQVDWWULEXWH!5HTXLUHV1HZWUDQVDWWULEXWH!
FRQWDLQHUWUDQVDFWLRQ!
FRQWDLQHUWUDQVDFWLRQ!
PHWKRG!
HMEQDPH!%LJ%HDQHMEQDPH!
PHWKRGQDPH!XVH2OG'DWDEDVHPHWKRGQDPH!
PHWKRG!
WUDQVDWWULEXWH!1RW6XSSRUWHGWUDQVDWWULEXWH!
FRQWDLQHUWUDQVDFWLRQ!

 &KDSWHU
(-%WUDQVDFWLRQV

6KDUSHQ \RXU SHQFLO


:KLFKPHWKRGVQHHGWUDQVDFWLRQDWWULEXWHV"
7KLVRQHLVDFRPELQDWLRQRIKRZPXFK\RXUHPHPEHUDQGKRZPXFK\RXFDQ
WKLQNWKURXJKZKDWPDNHVVHQVH/RRNLQJDWWKHLQWHUIDFHVEHORZRQHIRUD
VHVVLRQEHDQDQGRQHIRUDQHQWLW\EHDQILJXUHRXWZKLFKPHWKRGV0867KDYH
WUDQVDFWLRQDWWULEXWHVZKHQWKHEHDQLVXVLQJ&073XWDFKHFNPDUNE\LWFLUFOHLW
UXQ\RXUKLJKOLJKWHUWKURXJKLW%XWGRQ·WWU\WRVLPSO\UHPHPEHUZKDW\RX·YHVHHQ
LQWKLVFKDSWHUUHDOO\WKLQNDERXWLW

(-%2EMHFW (-%+RPH
JHW(-%+RPH JHW+RPH+DQGOH
JHW+DQGOH UHPRYH 2EMHFWSN
ch
UHPRYH UHPRYH +DQGOHK HereÕs a suggestion--foreseea
6HVVLRQEHDQ LV,GHQWLFDO (-%2EMHFWR JHW(-%0HWD'DWD method, ask yourself th
JHW3ULPDU\.H\ questions:
thod
* Is there a reason thistiome n? Is
MUST be in a tr an sac
g th at mi gh t be
$GYLFH $GYLFH+RPH it doing anythin an sac tio n?
JHW$GYLFH FUHDWH risky if itÕs no t in a tr
LJQRUH$GYLFH

* Is there any reason thinis a


method should NOT be
transaction?

the
* Is there any reason thratthis
transaction behavior foletely up
(-%2EMHFW (-%+RPH
JHW(-%+RPH JHW+RPH+DQGOH
method should be comp use it
JHW+DQGOH UHPRYH 2EMHFWSN
to the Container... becawhat the
(QWLW\EHDQ has no connection with
UHPRYH UHPRYH +DQGOHK

clientÕs trying to do?


LV,GHQWLFDO (-%2EMHFWR JHW(-%0HWD'DWD
JHW3ULPDU\.H\

&XVWRPHU &XVWRPHU+RPH
JHW1DPH FUHDWH
VHW1DPH ILQG%\3ULPDU\.H\
JHW,' JHW&XVWRPHU/LVW

\RXDUHKHUH 
;]UUIZaWN*MIVUIVIOMLLMUIZKI\QWV

%HDQPDQDJHG %07

ƒ 8VHGE\VWDWHOHVVDQGVWDWHIXOVHVVLRQEHDQV ƒ 7KH8VHU7UDQVDFWLRQLQWHUIDFHGRHV127KDYH
DJHW5ROOEDFN2QO\ PHWKRGEXW%07EHDQV
ƒ 8VHGE\PHVVDJHGULYHQEHDQV FDQFDOOJHW6WDWXV WRILQGRXWLIVRPHRQHLQWKH
ƒ 0XVW127EHXVHGE\HQWLW\EHDQV WUDQVDFWLRQKDVFDOOHGVHW5ROOEDFN2QO\ 

ƒ &DQEHXVHGWRUHGXFHWKHVFRSHRIDWUDQVDFWLRQ ƒ 7KHJHW6WDWXV PHWKRGUHWXUQVDQLQWUHSUHVHQWLQJ


ZKLFKFDQKHOSSHUIRUPDQFH DFRQVWDQWRQHRIZKLFKLV67$786B0$5.('B
52//%$&.
ƒ &DQEHXVHGWRNHHSDWUDQVDFWLRQRSHQDFURVV
PXOWLSOHLQYRFDWLRQVWRDVWDWHIXOPHWKRGEHDQ ƒ 6HVVLRQEHDQVXVLQJ%07PXVWQRWLPSOHPHQW
6HVVLRQ6\QFKURQL]DWLRQ
ƒ &DQEHXVHGE\DPHVVDJHGULYHQEHDQWR
DFNQRZOHGJHDPHWKRGHYHQWKRXJKWKHWUDQVDFWLRQ
HQGVLQDUROOEDFN
ƒ 0HVVDJHGULYHQEHDQVPXVWFRPSOHWHDWUDQVDFWLRQ
E\WKHHQGRIRQ0HVVDJH 
ƒ 6WDWHOHVVVHVVLRQEHDQVPXVWFRPSOHWHD
WUDQVDFWLRQE\WKHHQGRIWKHEXVLQHVVPHWKRGLQ
ZKLFKWKHWUDQVDFWLRQZDVVWDUWHG
 
ƒ 7KH%07EHDQPXVWQRWVWDUWDWUDQVDFWLRQZLWKRXW #-4BEANSRU
N
ILUVWHQGLQJWKHSUHYLRXVWUDQVDFWLRQ 5HPHPEHU TRANSACTIONS
UNKNOWN
QRQHVWHGWUDQVDFWLRQVLQ(-% WHILE"-4BE
ANS
ƒ 7KH%07EHDQPXVWQRWXVHWKHJHW5ROOEDFN2QO\  USEONLYTHEI
ROWN
DQGVHW5ROOEDFN2QO\ PHWKRGVRI(-%&RQWH[W
/+ NOTOURB
ƒ 7KH%07EHDQFDQFDOOWKHVHW5ROOEDFN2QO\  ESTWORK WEKN
DONTYOUTR Y OW3OWHY
IT-EMOR YDE
PHWKRGRQWKH8VHU7UDQVDFWLRQ HELP BUTTHEY VICESCAN
WORKMUCHBE
YOUCREATETH TTERWHEN
ƒ 7KHEHDQJHWVD8VHU7UDQVDFWLRQIURPWKHEHDQ·V EMYOURSELF
(-%&RQWH[W
ƒ 3URSDJDWLRQRIWUDQVDFWLRQVLQD%07EHDQDUH
RQHZD\DEHDQVWDUWHGWUDQVDFWLRQFDQSURSDJDWH
RXWWRRWKHUEHDQVEXWQRWUDQVDFWLRQFDQHYHUEH
SURSDJDWHGLQWRDEHDQXVLQJ%07

 &KDSWHU
(-%WUDQVDFWLRQV

&RQWDLQHUPDQDJHG &07

ƒ 8VHGE\DOOEHDQW\SHV ƒ $&07EHDQWKDWFDOOVVHW5ROOEDFN2QO\ RU


JHW5ROOEDFN2QO\ 0867KDYHDQDWWULEXWHRI
ƒ &RPSXOVRU\IRUHQWLW\EHDQV 5HTXLUHG5HTXLUHV1HZRU0DQGDWRU\
ƒ 7UDQVDFWLRQDWWULEXWHVDUHVSHFLILHGLQWKH ƒ $&07VHVVLRQEHDQPXVWVSHFLI\DWWULEXWHVIRU
GHSOR\PHQWGHVFULSWRU
DOOEXVLQHVVPHWKRGVLQWKHFRPSRQHQWLQWHUIDFH
ƒ 7KHVL[WUDQVDFWLRQDWWULEXWHVDUH5HTXLUHG QRQHRIWKHPHWKRGVLQWKHKRPHDQGQRQHRIWKH
5HTXLUHV1HZ6XSSRUWV0DQGDWRU\1HYHU1RW PHWKRGVIURP(-%2EMHFW RU(-%/RFDO2EMHFW 
6XSSRUWHG
ƒ $OOHQWLW\EHDQVPXVWVSHFLI\DWWULEXWHVIRUDOO
ƒ 7UDQVDFWLRQVFDQEHSURSDJDWHGLQWRDQGRXWRID EXVLQHVVPHWKRGVLQWKHFRPSRQHQWLQWHUIDFH
&07EHDQ DOOWKHPHWKRGVGHFODUHGE\WKH%HDQ3URYLGHULQ
WKHKRPHLQWHUIDFHDQGDQ\UHPRYH PHWKRG
ƒ 7KH&07EHDQPXVWQRWDWWHPSWWRXVH%07 WKDWWKHFOLHQWFDQDFFHVV LHWKHRQHVGHILQHG
LQFOXGLQJJHWWLQJD8VHU7UDQVDFWLRQUHIHUHQFH LQ(-%+RPH(-%/RFDO+RPHRU(-%2EMHFWDQG
ƒ 7KH&07EHDQPXVWQRWXVHWKHVHW5ROOEDFN2QO\ (-%/RFDO2EMHFW
PHWKRGRI8VHU7UDQVDFWLRQ *XHVV\RXFRXOG ƒ <RXSUREDEO\GRQRWZDQWWRXVH6XSSRUWVEHFDXVH
ILJXUHWKDWRXWIURPWKHSUHYLRXVEXOOHWSRLQW \RXFDQ·WNQRZIRUFHUWDLQZKHWKHU\RXUEHDQLV
ƒ 7KH&07EHDQFDQXVHWKHJHW5ROOEDFN2QO\DQG JRLQJWRUXQLQDWUDQVDFWLRQ,I\RX·YHZULWWHQFDOOV
VHW5ROOEDFN2QO\PHWKRGVRI(-%&RQWH[W WRJHW5ROOEDFN2QO\ RUVHW5ROOEDFN2QO\ WKHEHDQ
FDQJHWDQH[FHSWLRQ
ƒ &07WUDQVDFWLRQVFDQQRWVWD\RSHQDFURVVPXOWLSOH
PHWKRGLQYRFDWLRQVIURPDVWDWHIXOVHVVLRQFOLHQW ƒ $PHVVDJHGULYHQEHDQFDQXVHRQO\WZRDWWULEXWHV
%07WUDQVDFWLRQVFDQ  5HTXLUHGRU1RW6XSSRUWHG

ƒ &07WUDQVDFWLRQVDUHVFRSHGDWWKHPHWKRG
OHYHO(LWKHUWKHZKROHPHWKRGUXQVLQDSDUWLFXODU
WUDQVDFWLRQFRQWH[WRULWGRHVQ·W
ƒ &DOOLQJVHW5ROOEDFN2QO\RQDQ(-%&RQWH[WPHDQV
WKHFRQWDLQHUPXVW127FRPPLWWKHWUDQVDFWLRQ

\RXDUHKHUH 
VHVVLRQV\QFKURQL]DWLRQ

-V\Q\aJMIV[PI^MMRJ4WIL\W[\Ia[aVKPZWVQbML
M^MVQN\PM\ZIV[IK\QWVZWTT[JIKS


LPLW
1 HZ/
VHW

&OLHQWFDOOVPHWKRGVRQ EXPPHU
WKHEHDQWKDWFKDQJHWKH
EHDQ·VLQWHUQDOVWDWH

%HDQKDVDSUREOHPDQGFDQ·WFRP
PLWWKHWUDQVDFWLRQ%XWQRZWKDW

OHDYHVWKHEHDQRXWRIV\QFZLWK
WKHGDWDEDVH7KHEHDQ·VOLPLW
VWDWHLVEXWWKHOLPLWLQWKH
GDWDEDVHLVH[DFWO\ZKHUHLW
&RQWDLQHUVLPSO\GRHVDQHZ
ZDVEHIRUHWKHWUDQVDFWLRQEHJDQ
 ORDGRQWKHEHDQWRUHIUHVK
LWZLWKWKHRULJLQDOGDWDIURP
WKHGDWDEDVH

HFW '%
VHO

HM 1RZHYHU\WKLQJLVMXVW
E/
RD OLNHLWZDVEHIRUH$VLI
G QRWKLQJHYHUKDSSHQHG

%HDQLVKDSS\DQGQRZDOORILWV
 SHUVLVWHQWVWDWHPDWFKHVWKH
HQWLW\·VGDWDLQWKHGDWDEDVH

 &KDSWHU
(-%WUDQVDFWLRQV

;M[[QWV;aVKPZWVQbI\QWV
JMKI][M[M[[QWVJMIV[LWV¼\PI^MMRJ4WILIVLMRJ;\WZM
4HEPOINTISTHIS
!NENTITYBEANHASEJB,OAD ANDEJB3TORE TOTELLITWHENTO
SYNCHRONIZEWITHTHEDATABASE)FTHETRANSACTIONISABOUTTOCOMMIT
EJB3TORE ISCALLEDTOGIVETHEBEANONELASTCHANCETOGETITS
PERSISTENTSTATEINORDER READYTOBEWRITTENTOTHEDATABASE!NDIF
THETRANSACTIONDOESNOTCOMMIT THEBEANJUSTGETSANOTHEREJB,OAD
TORETURNITTOITSORIGINALPRE TRANSACTIONSTATE ANDEVERYTHINGISlNE
"UTASESSIONBEANDOESNTHAVETHATLUXURY.OEJB,OAD OR
EJB3TORE TOTELLITWHENITSTIMETOSYNCHRONIZEITSELFWITHADATABASE
"UTIFYOURSESSIONBEANIMPLEMENTS3ESSION3YNCHRONIZATION YOUCAN
GIVEASESSIONBEANTHREENEWCONTAINERCALLBACKS THATNOTIFYTHEBEAN
OFTHREEMORESPECIALMOMENTSINTHEBEANSTRANSACTIONALLIFEWHENA
TRANSACTIONSTARTS WHENITSABOUTTOEND ANDWHENITSOVER

6HVVLRQ%HDQLQWHUIDFH 6HVVLRQ6\QFKURQL]DWLRQLQWHUIDFH
MDYD[HME6HVVLRQ%HDQ MDYD[HME6HVVLRQ6\QFKURQL]DWLRQ

LQWHUIDFH!! LQWHUIDFH!!
6HVVLRQ%HDQ 6HVVLRQ6\QFKURQL]DWLRQ
VHW6HVVLRQ&RQWH[W 6HVVLRQ&RQWH[WVF DIWHU%HJLQ
HME$FWLYDWH EHIRUH&RPSOHWLRQ
HME3DVVLYDWH DIWHU&RPSOHWLRQ ERROHDQFRPPLWWHG
HME5HPRYH

&DUW%HDQ

VHW6HVVLRQ&RQWH[W 6HVVLRQ&RQWH[WVF
HME$FWLYDWH
A session bean can implement
BOTH the SessionBean and
HME3DVVLYDWH
SessionSynchronization interfaces,
HME5HPRYH for a total of 7 methods to
DIWHU%HJLQ implement.
EHIRUH&RPSOHWLRQ
DIWHU&RPSOHWLRQ ERROHDQFRPPLWWHG
EXVLQHVVDQGFUHDWHPHWKRGV

\RXDUHKHUH 
6HVVLRQ6\QFKURQL]DWLRQFDOOEDFNV

;M[[QWV;aVKPZWVQbI\QWV¹[XMKQITUWUMV\[º

025(VSHFLDO
PRPHQWV"

stateful
CMT bean
DIWHU%HJLQ EHIRUH&RPSOHWLRQ DIWHU&RPSOHWLRQ

$WWKHEHJLQQLQJRIDVWDWHIXO -XVWEHIRUHWKHWUDQVDFWLRQ $IWHUWKHWUDQVDFWLRQKDVHQGHG


:KHQLW·VFDOOHG EHDQ·VWUDQVDFWLRQ%()25( HQGV$)7(5WKHEXVLQHVV HLWKHULQDFRPPLWRUUROOEDFN
WKHEXVLQHVVPHWKRGWKDW·V PHWKRGFRPSOHWHV 7KHPHWKRGSDVVHVDERROHDQ
JRLQJWRUXQLQWKHWUDQVDFWLRQ DUJXPHQWWRWHOO\RXZKHWKHU
LVFDOOHG WKHWUDQVDFWLRQFRPPLWWHG

HME/RDG HME6WRUH 1RWKLQJLQWKHHQWLW\EHDQ


:KLFKHQWLW\EHDQ
OLIHF\FOHFRUUHVSRQGVWRWKLV
PHWKRGLW·VPRVWOLNH
%HFDXVHWKHUH·VQRQHHG
/RDGLQGDWDIURPWKHGDWDEDVH /DVWFKDQFHWRXSGDWHWKH )LQGRXWKRZWKHWUDQVDFWLRQ
NQRZLQJWKDWWKHGDWDEDVH GDWDEDVHEHIRUHWKHWUDQVDF ZHQWDQGGRZKDWHYHU\RXKDYH
UHVRXUFHLVQRZSDUWRIWKH WLRQFRPPLWVDQGWKHORFNVRQ WRGRWRVWD\V\QFHGZLWKWKH
WUDQVDFWLRQVR\RXFDQFDFKH WKHGDWDEDVHDUHUHOHDVHG GDWDEDVH)RUH[DPSOHLI\RX
:KDWWRGRZKHQ WKHGDWDLQWKHEHDQIRUWKHUHVW ZHUHFDFKLQJQHZO\FKDQJHG
\RX·UHLQLW RIWKHWUDQVDFWLRQ GDWDLQWHPSRUDU\YDULDEOHV\RX
FDQQRZDVVLJQWKHWHPSRUDU\
YDOXHVWR\RXUSHUPDQHQWVWDWH
YDULDEOHV2ULIWKHWUDQVDFWLRQ
UROOHGEDFN\RXPLJKWKDYHWR
UHVHWVRPHYDOXHVZLWKGDWD
IURPWKHGDWDEDVH
&DOOPHWKRGVRQ\RXU <RX·UHVWLOOLQDWUDQVDFWLRQ &DOOPHWKRGVRQ\RXU
%HDQWKLQJV\RXFDQ
6HVVLRQ&RQWH[WJHW\RXU VR\RXFDQGRWKHVDPHWKLQJV 6HVVLRQ&RQWH[WJHW\RXU
GRZKLOH\RX·UHLQLW
KRPHJHW\RXU(-%REMHFWJHW \RXFDQGRLQDIWHU%HJLQ  KRPHJHW\RXU(-%REMHFWJHW
FDOOHUVHFXULW\LQIRIRUFHWKH FDOOHUVHFXULW\LQIR<RXFDQ·WGR
WUDQVDFWLRQWRUROOEDFNFKHFN DQ\WUDQVDFWLRQUHODWHGWKLQJV
WKHUROOEDFNVWDWXV EHFDXVH\RX·UHQRORQJHU
LQDWUDQVDFWLRQ<RXFDQDF
$FFHVV\RXUVSHFLDO-1', FHVV21/<\RXUVSHFLDO-1',
FRQWH[WUHVRXUFHPDQDJHUV FRQWH[W,W·VQRWVDIHWRDFFHVV
DQGRWKHUEHDQV<RX·UHLQD UHVRXUFHPDQDJHUVRURWKHU
WUDQVDFWLRQVRLW·VDOOVDIH EHDQV

 &KDSWHU
(-%WUDQVDFWLRQV

6WDWHOHVVVHVVLRQ
EHDQVFDQ·WLPSOHPHQ
W
RQ
6HVVLRQ6\QFKURQL]DWL WKHUH DUH QR
'XPE 4XHVWLRQV
DQVFDQLPSOHPHQW
2QO\VWDWH)8/VHVVLRQEH
6HVVLRQ6\QFKURQL]DWLRQEH
¶WDOORZ
FDXVHVWDWHOHVV
HG WRPDLQWDLQD
Q: )FYOUWANTSYNCHRONIZATIONSO
VHVVLRQEHDQ¶VDUHQ BADLY WHYNOTJUSTUSEANENTITYBEAN
FHDP HWK RGKDV HQGHG
WUDQVDFWLRQRQ

A: "ECAUSEYOURBEANMIGHT
REPRESENTAPROCESS ANDNOTANENTITY
.OTEVERYTHINGTHATINVOLVESDATABASE
DATAISANENTITY)FYOURSESSIONBEAN
REPRESENTSAPROCESS LIKEASHOPPING
SESSION BUTITSTILLUSESADATABASE YOU
6HVVLRQ6\QFK
URQL]DWLRQ
MIGHTWANTTOWAITUNTILTHETRANSACTION
ISCOMPLETEBEFOREUPDATINGINFORMATION
LVIRU&07EH INTHEDATABASE
DQV21/<
'RHVLWPDNHVH
QVHIRUD%07EH /NTHEOTHERHAND USINGASESSIONBEAN
6HVVLRQ6\QFKUR DQWRXVH
QL]DWLRQ"1R5 ASASAhPOOR MANSENTITYBEANv JUSTFOR
SRLQWRI6HVVLRQ6 HPHPEHUWKH
\QFKURQL]DWLRQLV THESAKEOFAVOIDINGENTITYBEANS ISSILLY
EHDQWKUHHPRUH WRJLYHWKH
³VSHFLDOPRPHQ )FYOUNEEDANENTITY MAKEITANENTITY
PHWKRGVVRWKDW W´FDOOEDFN
WKHEHDQFDQ¿Q BEANANDGETALLTHEADVANTAGESTHE
DWUDQVDFWLRQVWDU GRXWZKHQ
WVDQGHQGVDQG #ONTAINERHASTOOFFER LIKEAUTOMATIC
HQGV DOVRKRZLW
SYNCHRONIZATIONWITHTHEPERSISTENT
%XWWKLQNDERXWLW
D%07EHDQN STORE"UTIFYOURBEANISAPROCESS BUT
(;$&7/<ZKHQ QRZV
DWUDQVDFWLRQVW STILLNEEDSTOSTAYONTOPOFHOWTHE
EHFDXVHWKHEH DUWVDQGHQGV
DQLVWKHRQHGH TRANSACTIONISGOING YOUVEGOTTHE
WUDQVDFWLRQERXQ PDUFDWLQJWKH
GDULHV OPTIONWITH3ESSION3YNCHRONIZATIONAS
,W¶VWKHEHDQWK
DWVD\VZKHQWK LONGASITSASTATEFUL #-4BEAN
VWDUWVDQGHQG HWUDQVDFWLRQ
V
1RERG\FDQHQG
WKDWWUDQVDFWLRQ
EHDQWKDWVWDUWH H[FHSWWKH
GLWVRWKHUHDUHQ
WKHEHDQQHHGV ¶WDQ\VXUSULVHV
WREH³WROG´DER
XW

\RXDUHKHUH 
WUDQVDFWLRQVSX]]OH

VOIDBMT-ETHOD7ITH4RANSACTIONS [

3RRO3X]]OH ??????????????????

9OURJOBISTOTAKECODESNIPPETSFROMTHE CCMT2EQUIRES.EW 
POOLANDPLACETHEMINTOTHEBLANK
LINESINTHECODE9OUWILLUSEEACH ??????????????????
SNIPPETEXACTLYONCE
??????????????????
9OURGOALISTOMAKEAMETHODIN
A"-4BEANTHATWILLCREATEATOTALOF
??????????????????
FIVETRANSACTIONS"UTWAIT THERESMORE
%XACTLY47)#%DURINGTHISMETHOD A
??????????????????
TRANSACTIONWILLBETEMPORARILYSUSPENDED
7EWONTTELLYOUWHETHERITSTHESAME ??????????????????
TRANSACTIONSUSPENDEDTWICE ORTWO
DIFFERENTTRANSACTIONS !NYMETHODWITH ??????????????????
hCMTvINITSNAMEISFROMA#-4BEAN ANDITS
TRANSACTIONATTRIBUTEISREVEALEDINITSNAME ??????????????????
!SSUMETHATTHEVARIABLEShCvANDhUTv
HAVEBEENPROPERLYINITIALIZEDASINSTANCE ??????????????????
VARIABLES
??????????????????
/HYEAH YOUMUST./4THROWANY
TRANSACTIONRELATEDEXCEPTIONS ??????????????????
!NSWERSAREONTHENEXTPAGE SODONTLOOK ]
UNLESSYOUHAVEABSOLUTELYNOCONCERNFOR
THELOSSOFSELF ESTEEMTHATYOULLEXPERIENCE
BYGOINGSTRAIGHTFORTHEANSWERS

.OTE%ACHSNIPPET
FROMTHEPOOLCANBE
USEDONLYONCE
UTBEGIN 
CCMT.EVER 
UTCOMMIT 
CCMT-ANDATORY 
CCMT3UPPORTS  CCMT-ANDATORY 
CCMT2EQUIRES.EW 
CCMT2EQUIRED  UTBEGIN 
UTCOMMIT 
CCMT.OT3UPPORTED 

 &KDSWHU
 \RXDUHKHUH
VOIDBMT-ETHOD7ITH4RANSACTIONS [

ut.begin();
?????????????????? tx 1
CCMT2EQUIRES.EW  tx 2, suspend tx 1
c.cmtMandatory);
?????????????????? tx 1 (tx 2 ended when the previous method completed)
c.cmtRequiresNew();
??????????????????
tx 3, suspend tx 1 (thatÕs the second and Þnal transaction suspension.)
ut.commit(); now thereÕs no tx
??????????????????
c.cmtNotSupported(); still no tx
??????????????????
c.cmtNever();
??????????????????
still no tx
c.cmtRequired(); tx 4
??????????????????
ut.begin();
??????????????????
tx 5 (tx 4 ended when the previous method completed)
c.cmtSupports(); tx 5
??????????????????
c.cmtMandatory()); tx 5
??????????????????
ut.commit(); Done
??????????????????
]
YOUVECOMPLETEDTHEPUZZLEONTHEPREVIOUSPAGE
7HICHOFCOURSEYOUWONTBELOOKINGATUNTIL
3RRO3X]]OH6ROXWLRQ
(-%WUDQVDFWLRQV
FRIIHHFUDPPRFNH[DP

0RFN([DP
7HICHARETRUEABOUTTRANSACTIONSIN%*"#HOOSEALLTHATAPPLY
1
R! %*"CONTAINERSMUSTSUPPORTBOTH*4!AND*43
R" %*"SUPPORTSNESTEDTRANSACTIONS
R# 4HEMDYD[WUDQVDFWLRQ8VHU7UDQVDFWLRQ!0)ALLOWSYOUTOSET
ISOLATIONLEVELS
R$ !BEANINSTANCECANRUNMULTIPLETRANSACTIONSINPARALLEL
R% !MESSAGE DRIVENBEANINSTANCEMUSTCOMPLETEATRANSACTIONBEFORETHE
@ON-ESSAGEMETHODRETURNS

7HENUSING"-4DEMARCATION WHICHOFTHEFOLLOWINGMUSTCOMMITA
2 TRANSACTIONBEFORETHEMETHODTHATINITIATEDTHETRANSACTIONRETURNS#HOOSE
ALLTHATAPPLY
R! MESSAGE DRIVENBEANS
R" STATEFULSESSIONBEANS
R# STATELESSSESSIONBEANS
R$ NONEOFTHEABOVE

7HICHTWOARETRUEABOUTCONTAINER MANAGEDTRANSACTIONSIN%*"
3 #HOOSEALLTHATAPPLY
R! $IFFERENTIATINGBETWEENOVERLOADEDMETHODSISPOSSIBLEINTHEBEANS
DEPLOYMENTDESCRIPTOR
R" %VERYBUSINESSMETHODINTHEBEANCLASSMUSTHAVEATRANSACTION
ATTRIBUTE
R# )FANON-ESSAGE METHODRETURNSBEFORECOMMITTINGATRANSACTIONTHE
CONTAINERWILLTHROWANEXCEPTION
R$ !MESSAGE DRIVENBEANWITH#-4DEMARCATIONMUSTNOTINVOKETHE
%*"#ONTEXTGET5SER4RANSACTION METHOD

 &KDSWHU
(-%WUDQVDFWLRQV

7HATSTRUEWHENSPECIFYINGTRANSACTIONATTRIBUTESINTHEDEPLOYMENT
4 DESCRIPTOR#HOOSEALLTHATAPPLY
R! &ORSESSIONBEANS TRANSACTIONATTRIBUTESCANBEAPPLIEDONLYTO
METHODSINTHEBEANSCOMPONENTINTERFACE
R" 4HEMETHOD NAMETAGCANTAKEAWILDCARD
R# !SINGLEMETHODCANHAVEMULTIPLETRANSACTIONATTRIBUTESSPECIlEDIN
THEDEPLOYMENTDESCRIPTOR
R$ 4RANSACTIONATTRIBUTESMUST./4BESPECIlEDFORMETHODSINANENTITY
BEANSHOMEINTERFACE

7HICHTRANSACTIONATTRIBUTESCANCAUSEANIN PROGRESSTRANSACTIONTOBE
5 SUSPENDED#HOOSEALLTHATAPPLY
R! .OT3UPPORTED
R" 2EQUIRED
R# 3UPPORTS
R$ 2EQUIRES.EW
R% -ANDATORY
R&.EVER

4HEUSEOFWHICHTRANSACTIONATTRIBUTECANCAUSEA
6 MDYD[WUDQVDFWLRQ7UDQVDFWLRQ5HTXLUHG([FHSWLRQEXCEPTIONTOBE
THROWN
R! .OT3UPPORTED
R" 2EQUIRED
R# 3UPPORTS
R$ 2EQUIRES.EW
R% -ANDATORY
R&.EVER

\RXDUHKHUH 
FRIIHHFUDPPRFNH[DP

)FASETOF#-4BEANMETHODSHASTHEFOLLOWINGTRANSACTIONATTRIBUTES
7 -ETHOD 3UPPORTS
-ETHOD 2EQUIRED
-ETHOD .OT3UPPORTED
-ETHOD 2EQUIRES.EW
)NTHEDIAGRAMSTHATFOLLOW ANARROWINDICATESTHATTHEMETHODONTHE
LEFTCALLSTHEMETHODONTHERIGHT ANDTHEhTXvNUMBERINDICATESAUNIQUE
TRANSACTION7HICHDIAGRAMSWORKWITHTHETRANSACTIONATTRIBUTESLISTEDABOVE
#HOOSEALLTHATAPPLY
R! -4X -.O4X -.O4X -4X
R" -.O4X -4X
<< -4X
< -4X
R# -.O4X -4X -.O4X
< -4X
R$ -4X -4X -4X -4X
7HICHMETHODSOFASESSIONBEAN WITHCONTAINER MANAGEDTRANSACTION
8 DEMARCATION RUNINANUNSPECIlEDTRANSACTIONCONTEXT#HOOSEALLTHAT
APPLY
R! HME$FWLYDWH
R" HME3DVVLYDWH
R# "USINESSMETHODMARKEDµ1RW6XSSRUWHG¶
R$ HME5HPRYH
R% "USINESSMETHODMARKED@2EQUIRES.EW

)FASESSIONBEANSBUSINESSMETHODINVOKES
9 (-%&RQWH[WVHW5ROOEDFN2QO\ WHICHTRANSACTIONATTRIBUTESETTINGSCAN
CAUSETHECONTAINERTOTHROWTHEMDYDODQJ,OOHJDO6WDWH([FHSWLRQ
#HOOSEALLTHATAPPLY
R! .OT3UPPORTED
R" 2EQUIRED
R# 3UPPORTS
R$ 2EQUIRES.EW
R% -ANDATORY
R&.EVER
 &KDSWHU
(-%WUDQVDFWLRQV

7HICHMETHODCANBECALLEDSUCCESSFULLYBYABEANUSINGBEAN MANAGED
10 TRANSACTIONDEMARCATION
R! JHW8VHU7UDQVDFWLRQ
R" DIWHU%HJLQ
R# DIWHU&RPSOHWLRQ
R$ JHW5ROOEDFN2QO\

\RXDUHKHUH 
PRFNH[DPDQVZHUV

0RFN([DP$QVZHUV
7HICHARETRUEABOUTTRANSACTIONSIN%*"#HOOSEALLTHATAPPLY
(spec: 340-341)
1
R! %*"CONTAINERSMUSTSUPPORTBOTH*4!AND*43 - just UserTransaction from JTA
R" %*"SUPPORTSNESTEDTRANSACTIONS
R# 4HEMDYD[WUDQVDFWLRQ8VHU7UDQVDFWLRQ!0)ALLOWSYOUTOSET
ISOLATIONLEVELS - No
R$ !BEANINSTANCECANRUNMULTIPLETRANSACTIONSINPARALLEL
R% !MESSAGE DRIVENBEANINSTANCEMUSTCOMPLETEATRANSACTIONBEFORETHE
@ON-ESSAGEMETHODRETURNS - Yes!
7HENUSING"-4DEMARCATION WHICHOFTHEFOLLOWINGMUSTCOMMITA (spec: 340-341)
2 TRANSACTIONBEFORETHEMETHODTHATINITIATEDTHETRANSACTIONRETURNS#HOOSE
ALLTHATAPPLY
R! MESSAGE DRIVENBEANS
R" STATEFULSESSIONBEANS
R# STATELESSSESSIONBEANS
R$ NONEOFTHEABOVE

7HICHTWOARETRUEABOUTCONTAINER MANAGEDTRANSACTIONSIN%*" (spec: 353-356)


3 #HOOSEALLTHATAPPLY
R! $IFFERENTIATINGBETWEENOVERLOADEDMETHODSISPOSSIBLEINTHEBEANS
DEPLOYMENTDESCRIPTOR
R" %VERYBUSINESSMETHODINTHEBEANCLASSMUSTHAVEATRANSACTION
ATTRIBUTE
R# )FANON-ESSAGE METHODRETURNSBEFORECOMMITTINGATRANSACTIONTHE
CONTAINERWILLTHROWANEXCEPTION - No
R$ !MESSAGE DRIVENBEANWITH#-4DEMARCATIONMUSTNOTINVOKETHE
%*"#ONTEXTGET5SER4RANSACTION METHOD

 &KDSWHU
(-%WUDQVDFWLRQV

4 7HATSTRUEWHENSPECIFYINGTRANSACTIONATTRIBUTESINTHEDEPLOYMENT (spec: 351-354)


DESCRIPTOR#HOOSEALLTHATAPPLY
R! &ORSESSIONBEANS TRANSACTIONATTRIBUTESCANBEAPPLIEDONLYTO
METHODSINTHEBEANSCOMPONENTINTERFACE
R" 4HEMETHOD NAMETAGCANTAKEAWILDCARD
R# !SINGLEMETHODCANHAVEMULTIPLETRANSACTIONATTRIBUTESSPECIlEDIN
THEDEPLOYMENTDESCRIPTOR
R$ 4RANSACTIONATTRIBUTESMUST./4BESPECIlEDFORMETHODSINANENTITY
BEANSHOMEINTERFACE - they must be speciÞed
7HICHTRANSACTIONATTRIBUTESCANCAUSEANIN PROGRESSTRANSACTIONTOBE (spec: 357-359)
5 SUSPENDED#HOOSEALLTHATAPPLY
R! .OT3UPPORTED
R" 2EQUIRED
R# 3UPPORTS
R$ 2EQUIRES.EW
R% -ANDATORY
R&.EVER

6 4HEUSEOFWHICHTRANSACTIONATTRIBUTECANCAUSEA (spec: 357-359)


MDYD[WUDQVDFWLRQ7UDQVDFWLRQ5HTXLUHG([FHSWLRQEXCEPTIONTOBE
THROWN
R! .OT3UPPORTED
R" 2EQUIRED
R# 3UPPORTS
R$ 2EQUIRES.EW
R% -ANDATORY
R&.EVER

\RXDUHKHUH 
PRFNH[DPDQVZHUV

7
)FASETOF#-4BEANMETHODSHASTHEFOLLOWINGTRANSACTIONATTRIBUTES
(spec: 357-359)
-ETHOD 3UPPORTS
-ETHOD 2EQUIRED
-ETHOD .OT3UPPORTED
-ETHOD 2EQUIRES.EW
)NTHEDIAGRAMSTHATFOLLOW ANARROWINDICATESTHATTHEMETHODONTHE
LEFTCALLSTHEMETHODONTHERIGHT ANDTHEhTXvNUMBERINDICATESAUNIQUE
TRANSACTION7HICHDIAGRAMSWORKWITHTHETRANSACTIONATTRIBUTESLISTEDABOVE
#HOOSEALLTHATAPPLY
R! -4X -.O4X -.O4X -4X
R" -.O4X -4X
<< -4X
< -4X
R# -.O4X -4X -.O4X
< -4X
R$ -4X -4X -4X -4X
376)
7HICHMETHODSOFASESSIONBEAN WITHCONTAINER MANAGEDTRANSACTION (spec: 363-364,
8 DEMARCATION RUNINANUNSPECIlEDTRANSACTIONCONTEXT#HOOSEALLTHAT
APPLY
R! HME$FWLYDWH
R" HME3DVVLYDWH
R# "USINESSMETHODMARKEDµ1RW6XSSRUWHG¶
R$ HME5HPRYH
R% "USINESSMETHODMARKED@2EQUIRES.EW

)FASESSIONBEANSBUSINESSMETHODINVOKES
9 (-%&RQWH[WVHW5ROOEDFN2QO\ WHICHTRANSACTIONATTRIBUTESETTINGSCAN (spec: 360-361)
CAUSETHECONTAINERTOTHROWTHEMDYDODQJ,OOHJDO6WDWH([FHSWLRQ
#HOOSEALLTHATAPPLY
R! .OT3UPPORTED
R" 2EQUIRED
R# 3UPPORTS
R$ 2EQUIRES.EW
R% -ANDATORY
R&.EVER
 &KDSWHU
(-%WUDQVDFWLRQV

7HICHMETHODCANBECALLEDSUCCESSFULLYBYABEANUSINGBEAN MANAGED (spec: 361)


10 TRANSACTIONDEMARCATION
R! JHW8VHU7UDQVDFWLRQ
acks from
R" DIWHU%HJLQ } These areyncachllbronization
R# DIWHU&RPSOHWLRQ } Sessi
onS
R$ JHW5ROOEDFN2QO\ - this is for CMT beans only

\RXDUHKHUH 
exceptions in EJB
5
4 :KHQEHDQVJREDG 4
(YHU\WKLQJ ZDVJRLQJ
VRZHOOZHKDGLWDOODQLFH
WUDQVDFWLRQQRQFRUUXSWFRQYHUVDWLRQDO
VWDWHDJUHDWJURXSRIUHIHUHQFHV
DQGWKHQVRPHWKLQJZHQWKRUULEO\ZURQJ
DQGQRZKH·VVQLII!JRQHIRUHYHU$QG
DOO,KDYHOHIWLVDORJHQWU\

([SHFWWKHXQH[SHFWHG'HVSLWH\RXUEHVWHIIRUWVWKLQJVFDQJRZURQJ
7HUULEO\WUDJLFDOO\ZURQJ<RXQHHGWRSURWHFW\RXUVHOI2WKHUVGHSHQGRQ\RX<RX
FDQ¶WOHW\RXUHQWLUHSURJUDPFROODSVHMXVWEHFDXVHRQHEHDQLQWKHIDPLO\WKURZVDQ
H[FHSWLRQ7KHDSSOLFDWLRQPXVWJRRQ<RXFDQ¶WSUHYHQWWUDJHG\EXW\RXFDQSUHSDUH
IRULW<RXQHHGWRNQRZZKDWLVDQGLVQRWUHFRYHUDEOHDQGZKRLVUHVSRQVLEOHZKHQD
SUREOHPRFFXUV6KRXOGWKH%HDQ3URYLGHUWHOOWKH&RQWDLQHUWKHUH¶VVWLOOKRSH"6KRXOG
WKH&RQWDLQHUWHOOWKHFOLHQWWRWU\DJDLQ"2UVKRXOGWKH&RQWDLQHUFXWLWVORVVHVNLOOWKH
EHDQDQGOHWWKH6\V$GPLQVRUWLWRXWODWHU

WKLVLVDQHZFKDSWHU 
H[DPREMHFWLYHV

([FHSWLRQV
2IILFLDO :KDWLWUHDOO\PHDQV
 ,GHQWLI\FRUUHFWDQGLQFRUUHFWVWDWHPHQWV <RXKDYHWRNQRZWKDWDSSOLFDWLRQH[FHSWLRQVDUH
RUH[DPSOHVDERXWH[FHSWLRQKDQGOLQJLQ WKLQJVWKHFOLHQWH[SHFWVDQGPLJKWUHFRYHUIURP
(-% ZKLOHV\VWHPH[FHSWLRQVDUHIRUWKLQJVWKHFOLHQWFDQ¶W
UHFRYHUIURP<RXQHHGWRNQRZWKH¿YHVWDQGDUG
(-%DSSOLFDWLRQH[FHSWLRQVDQGDOORIWKHFRPPRQ
V\VWHPH[FHSWLRQV<RXKDYHWRNQRZH[DFWO\KRZ
WKH&RQWDLQHUEHKDYHVZKHQWKHEHDQWKURZVDQ
DSSOLFDWLRQH[FHSWLRQYVDV\VWHPH[FHSWLRQDQG
\RXKDYHWRNQRZWKHGLIIHUHQFHEHWZHHQH[FHSWLRQV
IRUORFDOFOLHQWVDQGH[FHSWLRQVIRUUHPRWHFOLHQWV

 *LYHQDOLVWRIUHVSRQVLELOLWLHVUHODWHGWR <RXQHHGWRNQRZWKDWLIWKHEHDQWKURZVDQDSSOLFD


H[FHSWLRQVLGHQWLI\WKRVHZKLFKDUHWKH WLRQH[FHSWLRQWKH&RQWDLQHUGRHVQRWDXWRPDWLFDOO\
%HDQ3URYLGHU¶VDQGWKRVHZKLFKDUH UROOEDFNWKHWUDQVDFWLRQDQGWKDWWKH&RQWDLQHUJLYHV
WKHUHVSRQVLELOLW\RIWKH&RQWDLQHU%H WKHH[FHSWLRQWRWKHFOLHQWH[DFWO\DVWKHEHDQWKUHZLW
SUHSDUHGWRUHFRJQL]HUHVSRQVLELOLWLHVIRU :LWKV\VWHPH[FHSWLRQVKRZHYHUWKH&RQWDLQHUDO
ZKLFKQHLWKHUWKHEHDQRU&RQWDLQHUDUH ZD\VUROOVEDFNWKHWUDQVDFWLRQDQGJLYHVWKHH[FHS
UHVSRQVLEOH WLRQWRDUHPRWHFOLHQWDVD5HPRWH([FHSWLRQDQG
WRDORFDOFOLHQWDVDQ(-%([FHSWLRQ<RX¶OOQHHGWR
NQRZWKDWLIDEHDQZDQWVWRUROOEDFNDWUDQVDFWLRQDV
SDUWRIDQDSSOLFDWLRQH[FHSWLRQWKHEHDQPXVWFDOO
VHW5ROOEDFN2QO\ VLQFHWKHUROOEDFNZRQ¶WKDSSHQDX
WRPDWLFDOO\<RXQHHGWRNQRZWKDWWKH&RQWDLQHUZLOO
ORJV\VWHPH[FHSWLRQVEXWQRWDSSOLFDWLRQH[FHSWLRQV
DQGWKDWWKH&RQWDLQHUZLOONLOODQ\EHDQWKDWUDLVHVD
V\VWHPH[FHSWLRQ

 ,GHQWLI\FRUUHFWDQGLQFRUUHFWVWDWHPHQWVRU ,I\RX¶UHJRLQJWRDQVZHUWKHVHTXHVWLRQVFRUUHFWO\


H[DPSOHVDERXWDSSOLFDWLRQH[FHSWLRQVDQG \RXKDYHWRNQRZEHDQGHWDLOVIURPSUHYLRXVFKDSWHUV

V\VWHPH[FHSWLRQVLQHQWLW\EHDQVVHVVLRQ )RUH[DPSOH\RXKDYHWRNQRZWKDWDPHVVDJHGULYHQ
 EHDQVDQGPHVVDJHGULYHQEHDQV EHDQGRHVQ¶WKDYHDFOLHQWYLHZ LHFOLHQWLQWHUIDFHV 
*LYHQDSDUWLFXODUPHWKRGFRQGLWLRQLGHQWLI\ VRDPHVVDJHGULYHQEHDQFDQ¶WGHFODUHRUWKURZDQ\
WKHIROORZLQJZKHWKHUDQH[FHSWLRQZLOOEH DSSOLFDWLRQH[FHSWLRQV$QG\RXKDYHWRNQRZIRUH[
WKURZQWKHW\SHRIH[FHSWLRQWKURZQWKH DPSOHWKDWDEHDQZLOOJHWDQ,OOHJDO6WDWH([FHSWLRQLILW
&RQWDLQHU¶VDFWLRQDQGWKHFOLHQW¶VYLHZ WULHVWRFDOOPHWKRGVRQLWVFRQWH[WIURPSODFHVZKHUH
WKRVHRSHUDWLRQVDUHQ¶WDOORZHG

 &KDSWHU
H[FHSWLRQVLQ(-%

?PI\KIVOW_ZWVO'

 ,QWKH%HDQ

ƒ 7KHEXVLQHVVORJLFLQDPHWKRGUHDOL]HVWKDWLWFDQQRWGRLWVMREEHFDXVHRIDSUREOHP
WKHFOLHQWH[SHFWV)RUH[DPSOHDEDQNLQJEHDQFDQ·WGRDEDODQFHWUDQVIHUEHFDXVH
WKH¶WUDQVIHUIURP·DFFRXQWGRHVQ·WKDYHDQ\PRQH\

ƒ 7KHEHDQFDWFKHVDFKHFNHGH[FHSWLRQZKLOHUXQQLQJEXVLQHVVORJLF)RUH[DPSOHWKH
EHDQIDLOVWRJHWD-'%&FRQQHFWLRQRUD-1',ORRNXSWKURZVD1DPLQJ([FHSWLRQWR
WKHEHDQ7KLVLVDSUREOHPWKDWWKHEHDQH[SHFWVEXWWKHFOLHQWGRHVQ·W

ƒ $PHWKRGLQWKHEHDQ RUDPHWKRGWKHEHDQFDOOV WKURZVDUXQWLPHH[FHSWLRQ OLNH


1XOO3RLQWHU([FHSWLRQ WKDWWKHEHDQGRHVQ·WFDWFKDQGWKHFOLHQWGRHVQ·WH[SHFW

 ,QWKH&RQWDLQHU

ƒ 7KH&RQWDLQHUFDQ·WFRPSOHWHDQRSHUDWLRQIRUZKLFKLWVUHVSRQVLEOHVXFKDVXSGDWLQJWKH
VWDWHRIDQHQWLW\EHDQLQWKHGDWDEDVHWKDWFDXVHVDSUREOHPWKHFOLHQWH[SHFWV

ƒ 7KH&RQWDLQHUFDWFKHVDFKHFNHGH[FHSWLRQWKURZQE\WKHEHDQWKDWWKHFOLHQWH[SHFWV

ƒ $&RQWDLQHUFDWFKHVDUXQWLPHH[FHSWLRQWKURZQE\WKHEHDQRUE\VRPHRWKHUREMHFWWKH
&RQWDLQHULQWHUDFWVZLWK7KLVLVDSUREOHPWKDWWKHFOLHQWGRHVQRWH[SHFW

 ,QWKH50,VXEV\VWHPRUVRPHRWKHUSDUWRIWKH
FRPPXQLFDWLRQSDWKEHWZHHQFOLHQWDQGFRQWDLQHU

ƒ 7KH(-%REMHFWWKURZVDUXQWLPHH[FHSWLRQEHIRUHLWFRPPXQLFDWHVZLWKWKHFOLHQW
DERXWWKHUHVXOWRIDFOLHQW·VEXVLQHVVPHWKRGFDOOWRWKHEHDQ

ƒ 7KH50,VXEV\VWHPFDQ·WFRPPXQLFDWHZLWKWKHFOLHQW

ƒ 7KHFOLHQWVWXEWKURZVDUXQWLPHH[FHSWLRQRUD5HPRWH([FHSWLRQZKLOHWU\LQJWRVHQG
DPHWKRGFDOORUUHFHLYHDUHWXUQYDOXH

\RXDUHKHUH 
-DYDH[FHSWLRQV

:MUMUJMZ2I^IM`KMX\QWV[KIVJMKPMKSMLWZ]VKPMKSML

7KURZDEOH
Checked exceptions are
subclasses of Exception, as
long as they arenÕt subcla
(UURU ([FHSWLRQ of RuntimeException sses

2XW2I0HPRU\(UURU )LOH,2([FHSWLRQ 5XQWLPH([FHSWLRQ

(UURU &KHFNHGH[FHSWLRQV
1XOO3RLQWHU([FHSWLRQ
Although you COULD catch an
ions MUST
error... what the heck would Checked except le or declare
8QFKHFNHG UXQWLPH H[FHSWLRQV
you DO with it? If you get, say, follow the hand piler forces
a VirtualMachineError, youÕre rule--the comledge when you Exceptions that extend
pretty much screwed. 99% you to acknowd that declares
of the time, youÕll catch only call a metho ... RuntimeException are Ôexem
checked Exceptions, and NOT one of these from the handle or declare ptÕ
errors or runtime exceptions. You donÕt have to acknowledlaw.
them... they just happen. ge

7EKNOWTHATYOUREMEMBERALLOFTHIS BUTJUSTSOWEREALLSPEAKINGTHESAMELANGUAGE
HEREˆ*AVAHASBOTHCHECKEDANDUNCHECKEDEXCEPTIONS#HECKEDASINCOMPILER CHECKED)FYOU
CALLAMETHODTHATDECLARESATHROWSCLAUSEWITHACHECKEDEXCEPTION YOUMUSTREASSURETHE
COMPILERTHATYOUKNOWALLABOUTTHISPOTENTIALPROBLEM ANDYOUREREADYTOTAKETHERISK)TS
THEHANDLEORDECLARERULE9OUEITHERWRAPTHERISKYMETHODCALLINATRYCATCH ORYOUDECLARE
THATYOU TOO THROWTHEEXCEPTION
2EMEMBER DECLARINGANEXCEPTIONMEANSDUCKINGITˆLETTINGSOMEONEELSEINTHECALLSTACK
DEALWITHIT$ECLARINGANEXCEPTIONISLIKESAYING h)DONTWANTTOCATCHTHISEXCEPTION
BECAUSE)THINKSOMEONEELSECANDOABETTERJOBOFHANDLINGITORSOMEONEELSESHOULDBE
HANDLINGIT 
)FYOUHANDLEANEXCEPTIONANDEXITTHECATCHBLOCK ITSHOULDMAKENODIFFERENCEWHETHERTHE
EXCEPTIONOCCURREDORNOT)FITDOESMATTER THENYOUARENTHANDLINGTHEEXCEPTIONCORRECTLY
ANDYOUPROBABLYSHOULDHAVEDUCKEDITINSTEAD
2UNTIMEEXCEPTIONSAREUNCHECKEDTHEYMATTERONLYATRUNTIME NOTCOMPILETIME 9OUCAN
DECLARETHEM CATCHTHEM ANDTHROWTHEMINCODEANYWAYTHATYOULIKE BUTTHECOMPILER
WONTCARE"UTIFYOURCODECAUSESARUNTIMEEXCEPTION THECALLSTACKTHREADOFEXECUTION
YOURERUNNINGINDIES)FTHATSTHELASTNON DAEMONTHREADINYOURPROGRAM YOURWHOLE
PROGRAMSHUTSDOWN

 &KDSWHU
H[FHSWLRQVLQ(-%

1\¼[ITTIJW]\M`XMK\I\QWV[
%XCEPTIONHANDLINGIN%*"OR*AVAINGENERAL
CENTERSONEXPECTATIONS9OUHOPETHATEVERYTHING :UDSSLQJDULVN\PHWKRGFDOOLQD
WORKSCORRECTLY9OUHOPETHATYOUDONTGETARUNTIME
EXCEPTION"UTYOUTAKERISKS3OYOUEXPECTTHATSOME WU\FDWFKWHOOVWKHFRPSLOHU DQG
THINGSWILLGOWRONG4HEKEYISINKNOWINGWHATTHOSE
THINGSARE ANDWHATYOUCANDOTORECOVER \RXUGHVLJQ WKDW\RXH[SHFWWKDW
-OSTOFTHETIME THETHINGSTHATCANGOWRONGARE
PRETTYOBVIOUS9OUDOA*.$)LOOKUP BUTTHEOBJECT
FHUWDLQWKLQJVPLJKWJRZURQJ
ISNTTHERE9OUTRYTOCONNECTTOANAMINGSERVICE AND
CANT9OUTRYTOCONNECTTOTHEDATABASEANDCANT <RXKRSHWKDWHYHU\WKLQJZRUNV
9OUTRYTOCREATEANEWENTITYBEAN ANDTHEINSERT
FAILSBECAUSEYOUHAVEADUPLICATEPRIMARYKEY!ND FRUUHFWO\EXW\RXFDQ·WJXDUDQWHH
FOREACHOFTHOSE YOUCANWRITEACATCHBLOCKTHAT
NOWSHOWTODEALWITHTHESPECIlCPROBLEMYOUHAVE
LWVR\RXKDYHDOLVWRIFDWFK
#ANTCONNECTTOTHENAMINGSERVICE-AYBEYOUHAVE
ASECONDNAMINGSERVICETOTRY#ANTCONNECTTOTHE
EORFNVIRUWKLQJV\RXH[SHFW
DATABASE-AYBEYOUCANTRYUSINGALOCALCACHEFOR 0,*+7JRZURQJ
NOW UNTILYOUCANRE ESTABLISHYOURCONNECTION#ANT
DOTHEINSERT4RYAGAIN USINGADIFFERENTPRIMARYKEY
7HENYOUPROVIDEACATCHBLOCKFORARISKYMETHOD %UHDWKLQJLQ,OHWJRRIP\
CALL YOURESAYINGTHATYOUEXPECTSOMETHINGSPECIlC DWWDFKPHQWV%UHDWKLQJRXW,OHWJRRI
MIGHTGOWRONG!LMOSTEVERYEXCEPTIONFORWHICHYOU P\H[SHFWDWLRQV%UHDWKLQJLQ,OHWJR
PROVIDEACATCHBLOCKISANEXCEPTIONTHATYOUEXPECT RIP\DWWDFKPHQWV%UHDWKLQJRXW,OHWJRRI
3OYOUMIGHT FOREXAMPLE EXPECTA.AMING%XCEPTION P\H[SHFWDWLRQWKDWP\ERVVZLOOJLYHPHWKH
ORA&INDER%XCEPTIONORA#REATE%XCEPTION UHFRJQLWLRQ,GHVHUYH%UHDWKLQJLQ,OHWJRRI
P\QHHGWREDFNP\689RYHUP\ERVV
DJDLQDQGDJDLQDQG

As it is in all of life,
with exceptions, the
key to happiness is to
manage expectations.

\RXDUHKHUH 
H[FHSWLRQSDWKZD\V

([FHSWLRQSDWKZD\V

 %HDQWKURZVVRPHWKLQJWKHFOLHQWH[SHFWV
´+H\FOLHQWVRPHWKLQJ\RX ´7HOOFOLHQWWKDWVRPHWKLQJ
H[SHFWKDVKDSSHQHGµ VKHH[SHFWVKDVKDSSHQHGµ

exception
object

 %HDQWKURZVVRPHWKLQJWKHFOLHQWGRHV127H[SHFW
´6RUU\FOLHQWEXWVRPHWKLQJ ´7HOOFOLHQWWKDWVRPHWKLQJ
WHUULEOHKDVKDSSHQHGµ WHUULEOHKDVKDSSHQHGµ

 &RQWDLQHUWKURZVVRPHWKLQJWKHFOLHQWH[SHFWV
´+H\FOLHQWVRPHWKLQJ\RX
H[SHFWKDVKDSSHQHGµ

As far as theveerbeytanhiÕsng
concerned,
is going Þne.

 &KDSWHU
H[FHSWLRQVLQ(-%

 &RQWDLQHUWKURZVVRPHWKLQJWKHFOLHQWGRHV127H[SHFW
´6RUU\FOLHQWEXWVRPHWKLQJ
WHUULEOHKDVKDSSHQHGµ

Bean doesnÕt dilemrectly


caus e th e pr ob .

 7KHVWXEWKURZVVRPHWKLQJWKHFOLHQWH[SHFWV
´6RPHWKLQJ\RXH[SHFW
KDVKDSSHQHGµ

VWXE

Both the n
the Containbea
er
and
t
everything is Þ hink
ne.

 7KHVWXEWKURZVVRPHWKLQJWKHFOLHQWGRHV127H[SHFW
´6RPHWKLQJWHUULEOH
KDVKDSSHQHGµ

VWXE

no problems with the


bean or the Container

\RXDUHKHUH 
$SSOLFDWLRQDQG6\VWHPH[FHSWLRQV

1V-2*M`KMX\QWV[KWUMQV\ _WNTI^WZ["
IXXTQKI\QWVIVL[a[\MU
!PPLICATIONEXCEPTIONSARETHINGSTHECLIENTEXPECTS WHICHMEANSTHECLIENTHASTO
HANDLETHEMONEWAYORANOTHER4HISMEANSTHATAPPLICATIONEXCEPTIONSARE
DECLAREDINTHEINTERFACESEXPOSEDTOTHECLIENT ANDTHECLIENTUSESATRYCATCH
WHENSHECALLSTHEMETHOD3INCETHECLIENTCANCATCHTHEEXPECTEDEXCEPTION THE
CLIENTMIGHTBEABLETORECOVERANDKEEPGOING!PPLICATIONEXCEPTIONSINCLUDE
THINGSLIKE#REATE%XCEPTIONMAYBETHECLIENT SUPPLIEDARGUMENTSWERENTVALID OR
!CCOUNT"ALANCE%XCEPTIONPERHAPSTHECLIENTCANTRYADIFFERENTACCOUNTWITHTHE
NEXTCALL OR/BJECT.OT&OUND%XCEPTIONTHATENTITYISNOLONGERINTHEDATABASE 
!PPLICATIONEXCEPTIONSINCLUDEALLCHECKEDEXCEPTIONSTHROWNBYABEANORA#ONTAINER
EXCEPTJAVARMI2EMOTE%XCEPTION!LTHOUGH2EMOTE%XCEPTIONISCHECKED ANDTHE
CLIENTCATCHESIT ASFARASTHECLIENTISCONCERNED WHATEVERCAUSEDTHE2EMOTE%XCEPTION
ONTHESERVERWASUNEXPECTED
3YSTEMEXCEPTIONSAREFORTHINGSTHECLIENTDOESNOTEXPECTANDORCANTRECOVERFROM4HIS
COULDBEVIRTUALLYANYRUNTIMEEXCEPTIONTHATHAPPENSONTHESERVERFROMTHEBEAN
ORTHE#ONTAINERORANYOTHEROBJECTONTHESERVER OREVENINTHECLIENTSLOCALSTUB
OBJECT3YSTEMEXCEPTIONSARETHINGSTHECLIENTREALLYCANTRECOVERFROM EITHERBECAUSE
THEYRENOTRECOVERABLELIKEAFAILUREINTHEDATABASEORA.ULL0OINTER%XCEPTION OR
BECAUSETHECLIENTDOESNTHAVEENOUGHINFORMATIONTOKNOWWHATTODOLIKEWITHA
2EMOTE%XCEPTIONWHICHˆEVENTHOUGHITISACHECKEDEXCEPTIONTHECLIENTCATCHESˆTELLS
THECLIENTONLYTHATSOMETHINGUNEXPECTEDLYBADHAPPENEDONTHESERVER

*RWWDORYHDSSOLFDWLRQ
2KVK $V\VWHP H[FHSWLRQV,FDQ
H[FHSWLRQ1RWKLQJ,FDQ UHFRYHUIURPWKLVLI,SXW
GRDERXWLW7KHUHJRHVP\ LQDGLIIHUHQWYDOXHIRUWKH
VWDWHIXOEHDQ,·OOKDYHWR DUJXPHQWWRWKHFUHDWH 
VWDUWRYHU PHWKRG

 &KDSWHU
H[FHSWLRQVLQ(-%

?Q\PIV)XXTQKI\QWV-`KMX\QWV\PM+WV\IQVMZ_QTT
 VHQGLWEDFNWRWKHFOLHQW(;$&7/<DVLWZDVWKURZQ

$FFRXQW%DODQFH([FHSWLRQ $FFRXQW%DODQFH([FHSWLRQ
$KDQ
$FFRXQW%DODQFH
H[FHSWLRQ

 127VHWWKHWUDQVDFWLRQWRUROOEDFN

,·OOOHWWKH ,·OOWKURZWKHH[FHSWLRQVR
WUDQVDFWLRQFRQWLQXH WKH&RQWDLQHUFDQWHOOWKH
$FFRXQW%DODQFH([FHSWLRQ FOLHQWEXWWKHWUDQVDFWLRQLV
HYHQWKRXJK,·PJRQQD
VWLOOVDIHWRFRQWLQXHVR,ZRQ·W
WKURZWKLVWRWKH
DVNLWWRUROOEDFN,IWKLQJVJHW
FOLHQW EDGODWHU,FDQDOZD\VFDOO
VHW5ROOEDFN2QO\

 VSDUHWKHEHDQ·VOLIH

,·OOOHWWKHEHDQ
:KHZ7KDQNP\OXFN\
OLYHVLQFHDQDSSOLFDWLRQ
HOHFWURQVLWZDVDQDSSOLFDWLRQ
H[FHSWLRQGRHVQ·WQHFHVVDULO\ H[FHSWLRQDQGQRWDV\VWHP
PHDQWKHEHDQLVFRUUXSW H[FHSWLRQRUHOVH,·GEH
RQO\WKLVWLPHLWZRXOGQ·WEH
MXVWDQDFW

\RXDUHKHUH 
6\VWHPH[FHSWLRQV

?Q\PI;a[\MU-`KMX\QWV\PM+WV\IQVMZ_QTT
 VHQGLWEDFNWRD5HPRWHFOLHQWDVD5HPRWH([FHSWLRQ
RUWRDORFDOFOLHQWDVDQ(-%([FHSWLRQ

,KDYHQR 5HPRWH([FHSWLRQ 1XOO3RLQWHU([FHSWLRQ


LGHDZKDWZHQW
ZURQJ

remotte
clien

 DOZD\VFDXVHDWUDQVDFWLRQUROOEDFN

7KLVLVEDG$OO
KRSHLVORVWIRUWKLV
1XOO3RLQWHU([FHSWLRQ 7KHUH·V12ZD\WKLV
WUDQVDFWLRQVR,·PUROOLQ·
WUDQVDFWLRQLVVDIH
LWEDFNEDE\
QRZ 1RWWKDW,·PJRLQJ
WRFDUH

 NLOOWKHEHDQDQGORJWKHH[FHSWLRQ

e bean dies, it
this time, wheann th
7KLVEHDQLVKLVWRU\:KR
.12:6ZKDWVWDWHLWVYDULDEOHV STANCE is r
DUHLQQRZ,KDYHWRDVVXPHLW·V means the bed mIN ad e eligible fo
FRUUXSWDQGNLOOLW,·OOORJLWIRU discarded an ction. If itÕs an
WKHV\VDGPLQ garbage colle the real entity is
entity bean, d can be reloaded
still alive, an an instance.
/2* into a new be

 &KDSWHU
H[FHSWLRQVLQ(-%

$SSOLFDWLRQ([FHSWLRQV 6\VWHP([FHSWLRQV

FOLHQWFDQWU\WR FOLHQWFDQ·W
UHFRYHU UHFRYHU
&OLHQWUHFRYHU\

7UDQVDFWLRQVWDWXV
WUDQVDFWLRQSURFHHGV XQOHVV DXWRPDWLFUROOEDFN
EHDQFDOOVVHW5ROOEDFN2QO\

%HDQLQVWDQFH

LQVWDQFHOLYHV LQVWDQFHGLHV

/2* /2*
/RJJLQJ

127ORJJHG H[FHSWLRQORJJHG

([DPSOHV &UHDWH([FHSWLRQ 5HPRWH([FHSWLRQ UHPRWHFOLHQW


5HPRYH([FHSWLRQ (-%([FHSWLRQ ORFDOFOLHQW
)LQGHU([FHSWLRQ ,OOHJDO6WDWH([FHSWLRQ
2EMHFW1RW)RXQG([FHSWLRQ 7UDQVDFWLRQ5HTXLUHG([FHSWLRQ
'XSOLFDWH.H\([FHSWLRQ 1R6XFK2EMHFW([FHSWLRQ
$UUD\,QGH[2XW2I%RXQGV([FHSWLRQ
$FFRXQW%DODQFH([FHSWLRQ 1XOO3RLQWHU([FHSWLRQ
%DG4XHU\$UJV([FHSWLRQ 5XQWLPH([FHSWLRQ
%RRN0DSSLQJ([FHSWLRQ
([FHSWLRQ

&RPSLOHUFKHFNLQJ $OODSSOLFDWLRQH[FHSWLRQV0867 7KHRQO\V\VWHPH[FHSWLRQWKDWLV


DQGRWKHUUXOHV EHFKHFNHGH[FHSWLRQVDQGPXVW FKHFNHGLV5HPRWH([FHSWLRQ$OO
127H[WHQG5HPRWH([FHSWLRQ RWKHUVDUHD5XQWLPH([FHSWLRQ RU
RQHRILWVVXEFODVVHV

\RXDUHKHUH 
$SSOLFDWLRQH[FHSWLRQV

7KDWFDQ·WEHULJKWLI
,WKURZDQDSSOLFDWLRQ
H[FHSWLRQ,WKLQNWKHUH·VDGDUQ
JRRGFKDQFHWKDW,GR127ZDQW
WKHWUDQVDFWLRQWRFRPPLW

YiX`e
gfn\i

:KDWLIDQ\WKLQJFDQ\RXGRLI\RXNQRZ\RX
ZDQWWRWKURZDQDSSOLFDWLRQH[FHSWLRQWRWKH
FOLHQWEXW\RXGR127ZDQWWKHWUDQVDFWLRQWR
FRPPLW"

7KLQNDERXWWKDWIRUDPRPHQW

:H¶OOWDNHDORRNDWWKLVVFHQDULRLQDIHZSDJHV

 &KDSWHU
H[FHSWLRQVLQ(-%

?IZVQVO :MUW\M-`KMX\QWVQ[KPMKSML
J]\VW\M`XMK\ML
.ORMALLYWHENWETHINKOFEXPECTEDVSUNEXPECTED
EXCEPTIONS WEMAPITTOCHECKEDVSUNCHECKEDEXCEPTIONS!
&ILE)/%XCEPTIONISEXPECTED!.ULL0OINTER%XCEPTIONISNOT
$SSOLFDWLRQH[FHSWLRQVDUH
!NYDIRECTSUBCLASSOF%XCEPTIONISEXPECTED!SUBCLASSOF DOZD\VFRPSLOHUFKHFNHG
2UNTIME%XCEPTIONISNOT!CHECKEDEXCEPTIONMUSTBEHANDLED
!NUNCHECKEDEXCEPTIONUSUALLYWONTBE H[FHSWLRQVH[FHSWIRU
"UTTHERESONEBIGEXCEPTIONTOTHEWHOLEEXCEPTIONSAND 5HPRWH([FHSWLRQ
EXPECTATIONSTHINGˆJAVARMI2EMOTE%XCEPTION
2EMOTE%XCEPTIONISACHECKEDEXCEPTION OFCOURSE SOTHECLIENT
ISFORCEDTOACKNOWLEDGEA2EMOTE%XCEPTIONBYHANDLINGITWITH 7KLQNRI5HPRWH([FHSWLRQ
ATRYCATCH"UTUNLIKETHEOTHERCHECKEDEXCEPTIONSACLIENT
SEESINABEANSINTERFACE 2EMOTE%XCEPTIONISSTILLCONSIDERED DV´DUXQWLPHH[FHSWLRQRQ
UNEXPECTED/+ NOTEXACTLYUNEXPECTEDBUTUNEXPECTED WKHVHUYHUµHYHQWKRXJK
&ROMTHECLIENTSPOINTOFVIEW THINKOF2EMOTE%XCEPTIONAKIND
OFRUNTIMEEXCEPTIONONTHEREMOTEPARTOFTHEAPPLICATION 5HPRWH([FHSWLRQLVD
"ECAUSETHATSOFTENWHATITMEANS!.ULL0OINTER%XCEPTION FKHFNHGH[FHSWLRQWRWKH
ONTHESERVERMEANSA2EMOTE%XCEPTIONTOTHECLIENT!
$IVIDE"Y:ERO%XCEPTIONONTHESERVERMEANSA2EMOTE%XCEPTION FOLHQW
TOTHECLIENT!#LASS#AST%XCEPTIONONTHESERVERMEANSA
2EMOTE%XCEPTIONTOTHECLIENT4HOSEAREALLUNCHECKED
EXCEPTIONSONTHESERVER BUTTHEYPROPAGATEBACKTOTHECLIENT ,QRWKHUZRUGVDUHPRWH
ASACHECKED2EMOTE%XCEPTION)NOTHERWORDS THECLIENTHASTO
EXPECTTHATTHESERVERCANTHROWSOMETHINGUNEXPECTED FOLHQWPXVW(;3(&7
$OESTHISMEANTHATEVERY2EMOTE%XCEPTIONONTHECLIENTWAS WKDWWKHVHUYHUFDQWKURZ
ORIGINALLYTRIGGEREDBYABEANGETTINGARUNTIMEEXCEPTION.O
!BEANMIGHT FOREXAMPLE CATCHACHECKEDEXCEPTIONASPARTOF VRPHWKLQJ81(;3(&7('
ITSBUSINESSLOGIC ANDTHENREALIZEITCANTRECOVER!TTHATPOINT
THEBEANTURNSWHATWASORIGINALLYACHECKEDEXCEPTIONFROM
THEBEANSPERSPECTIVE TOANUNCHECKEDSYSTEM EXCEPTIONBY
WRAPPINGANDRETHROWINGITASAN%*"%XCEPTION WHICHULTIMATELY
SHOWSUPASA2EMOTE%XCEPTIONONTHEREMOTECLIENT
)NFACT THECLIENTCANGETA2EMOTE%XCEPTIONEVENWITHOUTTHE
SERVER!STUB FOREXAMPLE MIGHTTHROWA2EMOTE%XCEPTION
BECAUSEITCANTEVENREACHTHESERVER4HEKEYHEREISTOTHINKOF
APPLICATIONEXCEPTIONSASCHECKEDEXCEPTIONSTHATTHECLIENTMUST
ACKNOWLEDGEANDMIGHTRECOVERFROM ANDSYSTEMEXCEPTIONSASALL
OTHEREXCEPTIONS INCLUDING2EMOTE%XCEPTIONANDITSSUBCLASSES 

\RXDUHKHUH 
GHFODULQJH[FHSWLRQV

):MUW\MMV\Q\aJMIVPWUMQV\MZNIKMLMKTIZM[IXXTQKI\QWV
M`KMX\QWV[IVLWVM[a[\MUM`KMX\QWV:MUW\M-`KMX\QWV
SDFNDJHKHDG¿UVW

LPSRUWMDYD[HME 
LPSRUWMDYDUPL5HPRWH([FHSWLRQ
system
applicationn
LPSRUWMDYDXWLO&ROOHFWLRQ
exception
SXEOLFLQWHUIDFH&XVWRPHU+RPHH[WHQGV(-%+RPH^ exceptio
SXEOLF&XVWRPHUFUHDWH 6WULQJODVW6WULQJ¿UVW WKURZV&UHDWH([FHSWLRQ5HPRWH([FHSWLRQ

SXEOLF&XVWRPHU¿QG%\3ULPDU\.H\ 6WULQJNH\ WKURZV)LQGHU([FHSWLRQ5HPRWH([FHSWLRQ

SXEOLF&ROOHFWLRQ¿QG%\&LW\ 6WULQJFLW\ WKURZV)LQGHU([FHSWLRQ5HPRWH([FHSWLRQ


`

ed
something the client ects, and something unexpee ct er, so
can potentially recoveexp happened on th se rv
ver.
application exception) r from (an the client ca nÕ t re co

)TWKITMV\Q\aJMIVPWUMQV\MZNIKMLMKTIZM[WVTa
IXXTQKI\QWVM`KMX\QWV[

SDFNDJHKHDG¿UVW

LPSRUWMDYD[HME  application
LPSRUWMDYDXWLO&ROOHFWLRQ exception
SXEOLFLQWHUIDFH&XVWRPHU+RPH/RFDOH[WHQGV(-%/RFDO+RPH^

SXEOLF&XVWRPHUFUHDWH 6WULQJODVW6WULQJ¿UVW WKURZV&UHDWH([FHSWLRQ

SXEOLF&XVWRPHU¿QG%\3ULPDU\.H\ 6WULQJNH\ WKURZV)LQGHU([FHSWLRQ

SXEOLF&ROOHFWLRQ¿QG%\&LW\ 6WULQJFLW\ WKURZV)LQGHU([FHSWLRQ


`
n
applicatioion
exce p t

 &KDSWHU
H[FHSWLRQVLQ(-%

:MUW\M-`KMX\QWVOWM[\WZMUW\MKTQMV\[
-2*-`KMX\QWVOWM[\WTWKITKTQMV\[
7HENSOMETHINGUNEXPECTEDHAPPENSONTHESERVER THE#ONTAINER
TELLSTHECLIENTBYTHROWINGEITHERA2EMOTE%XCEPTIONORAN :KHQVRPHWKLQJ
%*"%XCEPTION
2EMOTE%XCEPTIONISFORREMOTECLIENTSONLY ANDEVENTHOUGHITISA XQH[SHFWHGKDSSHQVRQ
CHECKEDEXCEPTION ITSTELLINGTHECLIENTTHATSOMETHINGUNEXPECTED
HAPPENED3OMETHINGFROMWHICHTHECLIENTCANTRECOVER
WKHVHUYHUDORFDOFOLHQW
%*"%XCEPTIONISFORLOCALCLIENTSONLY ANDITSUNCHECKED)NOTHER JHWVD5XQWLPH([FHSWLRQ
WORDS %*"%XCEPTIONISASUBCLASSOF2UNTIME%XCEPTION4OTHE
CLIENT GETTINGAN%*"%XCEPTIONISNTMUCHDIFFERENTFROMGETTING
(-%([FHSWLRQ EXW
SAY AN!RRAY)NDEX/UT/F"OUNDS%XCEPTION)TMEANSSOMETHING DUHPRWHFOLHQWJHWV
UNEXPECTEDWENTWRONG ANDTHERESNOTHINGYOUCANDOTO
RECOVER4HEONLYDIFFERENCEISTHATTHECLIENTDOESHAVETOCATCHTHE DFRPSLOHUFKHFNHG
2EMOTE%XCEPTION BUTONCEHECATCHESIT THECLIENTUSUALLYWONT
BEABLETOTELLWHATHAPPENEDATLEASTNOTINANYRECOVERABLEWAY  5HPRWH([FHSWLRQ
5HPRWHFOLHQW

,FDXJKWWKH
5HPRWH([FHSWLRQEXW, 5HPRWH([FHSWLRQ 1XOO3RLQWHU([FHSWLRQ
KDYHQRLGHDZKDWZHQW
ZURQJ

FOLHQWKHDS VHUYHUKHDS

/RFDOFOLHQW

<LNHV,JRW
D5XQWLPH([FHSWLRQ
(-%([FHSWLRQ 1XOO3RLQWHU([FHSWLRQ
QRWKLQJ,FDQGR

VHUYHUKHDS

\RXDUHKHUH 
TXHVWLRQRQH[FHSWLRQV

WKHUH DUH QR
'XPE 4XHVWLRQV
Q: )NTHEPICTURE YOUSHOWTHECLIENT
THINKING h)HAVENOIDEAWHATHAPPENEDv
WHENSHEGETSA2EMOTE%XCEPTION"UTWHEN)
GETA2EMOTE%XCEPTIONINMYSHELLTERMINAL IT
USUALLYTELLSMEWHATHAPPENEDWITHAMESSAGE
LIKE h!.ULL0OINTER%XCEPTIONOCCURREDONTHE
SERVERvORSOMETHINGLIKETHAT

A: !NDATRUNTIMETHATHELPSYOUHOW3URE IT
HELPSYOUA4/.ATDEVELOPMENTANDTESTINGTIME
BUTWHENYOURAPPLICATIONISACTUALLYRUNNING
YOURCLIENTCODEPROBABLYISNTGOINGTOPARSE
THESTACKTRACE7HENWESAYTHATTHECLIENT
HASNOIDEAWHATHAPPENED WEMEANTHATTHE
CLIENTWASNTABLETOCATCHSOMETHINGSPECIFICˆ
SOMETHINGRECOVERABLE
#ONTRASTTHATWITHSOMETHINGLIKE
#REATE%XCEPTION WHERETHECLIENTCANCATCHTHE
EXCEPTION ANDFROMTHECATCHBLOCKTRYTHECREATE
AGAIN POSSIBLYWITHDIFFERENTARGUMENTS

,W·VWHPSWLQJWRWKLQNR
H[FHSWLRQVYV V\V WHP
IDSSOLFDWLRQ
H[ FHSWLRQVDVVLPSO\
G
FKHFNHGYVXQFKHFNH
PH[FHSWLRQV
SHUVSHFWLYHWKHRQO\V\VWH
$QGLQIDFWIURPWKHFOLHQW¶V FHS WLRQ VD UH5 HP RWH([FHSWLRQV
XQWLPH H[
WKDWDUH127XQFKHFNHG U FNH GH[FHSWLRQV
VWHPH[FHSWLRQVDUHXQFKH
6RIRUORFDOFOLHQWV$//V\ SOLFDWLR QH [FH SWLRQVDUH
HSWLRQ ZKLOHDOODS
VXEFODVVHVRI5XQWLPH([F HSW )RU
LRQ
HSWLRQEXWQRW5XQWLPH([F
FKHFNHG VXEFODVVHVRI([F HG EX WWKHUHLVDOVR
QH[FHSWLRQVDUHFKHFN
UHPRWHFOLHQWVDOODSSOLFDWLR V\ VWH PH [FH SWLR Q)URP
W¶VFRQVLGHUHGD
RQHFKHFNHGH[FHSWLRQWKD HSWLRQ EHLQJ
DV
XFDQWKLQNRI5HPRWH([F
WKHFOLHQW¶VSRLQWRIYLHZ\R DWKDSS HQVRQWKH
GUXQWLPHH[FHSWLRQWK
DZUDSSHUIRUDQXQFKHFNH LHZ WKHR ULJLQDO H[FHSWLRQ
EHDQ¶VSRLQWRIY
VHUYHU $OWKRXJKIURPWKH HE HDQ NQHZLW
H[FHSWLRQEXWRQHWKDWWK
PLJKWKDYHEHHQDFKHFNHG
FRXOGQ¶WUHFRYHUIURP

 &KDSWHU
H[FHSWLRQVLQ(-%

*MIV8ZW^QLMZ¼[ZM[XWV[QJQTQ\QM[
 ,I\RXUEXVLQHVVORJLFFDWFKHV RUFUHDWHV DQDSSOLFDWLRQ
H[FHSWLRQWKURZLWWRWKH&RQWDLQHUDVWKHDSSOLFDWLRQH[FHSWLRQ
)NBEANCODE IFYOUCATCHANAPPLICATIONEXCEPTIONTHROWNBYOTHERCODEORYOUCREATE
THEEXCEPTIONASPARTOFYOURBUSINESSLOGIC THROWITTOTHE#ONTAINEREXACTLYAS IS&OR
EXAMPLE IFYOURBEANCODEGETSA&INDER%XCEPTIONWHILETRYINGTOLOOKUPANOTHERBEAN
INOTHERWORDS WHILECALLINGAlNDERMETHODONANOTHERBEANSHOMEINTERFACE GIVE
THE&INDER%XCEPTIONTOTHE#ONTAINEREXACTLYASYOUGOTIT4HATMEANSEITHERDECLARINGIT
DUCKINGITANDLETTINGITPROPAGATEBACKDOWNTHESTACKTOTHE#ONTAINER 
row it,
if you intend to th
re it (just
you have to adlaecwla)
SXEOLFYRLGVRPH%XVLQHVV0HWKRG WKURZV)LQGHU([FHSWLRQ^
&XVWRPHU+RPHKRPH QXOO
WU\^ regular Jav
,QLWLDO&RQWH[WLF QHZ,QLWLDO&RQWH[W 
2EMHFWR LFORRNXS ³&XVWRPHUV´ 
KRPH  &XVWRPHU+RPH 3RUWDEOH5HPRWH2EMHFWQDUURZ R&XVWRPHU+RPHFODVV 
`FDWFK 1DPLQJ([FHSWLRQQH ^
GHDOZLWK1DPLQJ([FHSWLRQ
`
We catc
and Remohta NamingException
WU\^
&XVWRPHUFXVW KRPH¿QG%\3ULPDU\.H\ ³´ 
PRUHVWXII the Finder eException, but N
`FDWFK 5HPRWH([FHSWLRQUH ^ FinderExceException, so the OT
GHDOZLWK5HPRWH([FHSWLRQ the Containption propagates
er automat ba
` ically ck to
`

/RCATCHINGITANDRETHROWINGITAS AS

SXEOLFYRLGVRPH2WKHU%XVLQHVV0HWKRG WKURZV)LQGHU([FHSWLRQ^ still have to declare


&XVWRPHU+RPHKRPH QXOO it, of course
WU\^
,QLWLDO&RQWH[WLF QHZ,QLWLDO&RQWH[W 
2EMHFWR LFORRNXS ³&XVWRPHUV´ 
KRPH  &XVWRPHU+RPH 3RUWDEOH5HPRWH2EMHFWQDUURZ R&XVWRPHU+RPHFODVV 
`FDWFK 1DPLQJ([FHSWLRQQH ^
GHDOZLWKQDPLQJH[FHSWLRQ
`
WU\^
&XVWRPHUFXVW KRPH¿QG%\3ULPDU\.H\ ³´ 
PRUHVWXII
`FDWFK 5HPRWH([FHSWLRQUH ^
GHDOZLWKLW
r,
if we canÕt recove
`FDWFK )LQGHU([FHSWLRQIH ^
LI UHFRYHUDEOH ^
W e caught it, buextactly as we got it
WKURZIH
we rethrow it
`HOVH^RWKHUVWXII`
`
`
\RXDUHKHUH 
%HDQ3URYLGHUDQGH[FHSWLRQV

*MIV8ZW^QLMZ¼[ZM[XWV[QJQTQ\QM[
 ,I\RXFDWFKDQDSSOLFDWLRQH[FHSWLRQDQGÀQGWKDW\RX
FDQ·WFRQWLQXHWKHWUDQVDFWLRQFDOOVHW5ROOEDFN2QO\ EHIRUH
WKURZLQJWKHH[FHSWLRQWRWKH&RQWDLQHU
2EMEMBER THE#ONTAINERWONTROLLBACKATRANSACTIONJUSTBECAUSETHERESANAPPLICATION
EXCEPTION7ITHANAPPLICATIONEXCEPTION THE#ONTAINERASSUMESTHATTHEWHOLETHING
MIGHTBERECOVERABLE ANDTHATTHETRANSACTIONCANCONTINUE5NLESSYOUlNDOUT IN
YOURBUSINESSLOGIC THATCOMMITTINGWOULDBEA2EALLY"AD)DEAITOFTENIS 7HATSYOUR
OPTION&ORCETHE#ONTAINERTOROLLBACKTHETRANSACTIONUSINGSET2OLLBACK/NLY ONYOUR
%*"#ONTEXTFORA#-4BEAN ORONYOUR5SER4RANSACTIONFORA"-4BEAN 

SXEOLFYRLGVRPH2WKHU%XVLQHVV0HWKRG WKURZV)LQGHU([FHSWLRQ^
&XVWRPHU+RPHKRPH QXOO
WU\^
,QLWLDO&RQWH[WLF QHZ,QLWLDO&RQWH[W 
2EMHFWR LFORRNXS ³&XVWRPHUV´ 
KRPH  &XVWRPHU+RPH 3RUWDEOH5HPRWH2EMHFWQDUURZ R&XVWRPHU+RPHFODVV 
`FDWFK 1DPLQJ([FHSWLRQQH ^
GHDOZLWKQDPLQJH[FHSWLRQ
`
WU\^
&XVWRPHUFXVW KRPH¿QG%\3ULPDU\.H\ ³´ 
PRUHVWXII
`FDWFK 5HPRWH([FHSWLRQUH ^
GHDOZLWKLW
`FDWFK )LQGHU([FHSWLRQIH ^ t we know that
LI UHFRYHUDEOH ^ We caught it,vebur AND we canÕt
FRQWH[WVHW5ROOEDFN2QO\  we canÕt recosaction commit!!
WKURZIH let the tran
`HOVH^RWKHUVWXII`
`
`

 &KDSWHU
H[FHSWLRQVLQ(-%

*MIV8ZW^QLMZ¼[ZM[XWV[QJQTQ\QM[
 ,I\RXUEXVLQHVVORJLFFDWFKHVDQH[FHSWLRQWKHFOLHQWLVQRW
H[SHFWLQJ LQRWKHUZRUGVQRWGHFODUHGLQ\RXUFOLHQWYLHZ 
ZUDSLWDQGUHWKURZLWDVDQ(-%([FHSWLRQ

(OWMUCHSHOULDTHECLIENTKNOWABOUTYOURINTERNALBEHAVIOR,ITTLEORNOTHING RIGHT
&OREXAMPLE ISITANYOFTHECLIENTSBUSINESSTHATYOUREUSING*$"#TOGETYOURWORKDONE
!NDTHATYOUMIGHT ASPARTOFYOURBUSINESSLOGIC CATCHAN31,%XCEPTION4HROWINGAN
%*"%XCEPTIONISTHEPROGRAMMERSWAYOFTELLINGTHE#ONTAINER h)VELOSTCONTROLv

/HJDOEXWDEDGLGHD
&DQ\RXVD\´WRRPXFK
SXEOLFLQWHUIDFH%DG6HUYLFHH[WHQG(-%/RFDO2EMHFW^
LQIRUPDWLRQ"µ,5($//<GLGQ·W
SXEOLFYRLGVRPH0HWKRG WKURZV64/([FHSWLRQ
QHHGWRNQRZWKDWDERXW\RX8P
LQWKHIXWXUH,VXJJHVWWKDW `
\RXGR127H[SRVH\RXUSULYDWH
Do you really think th e
SUREOHPVWRWKHZRUOG
clien t sho uld KNOW th at
youÕre using SQL?
SXEOLFFODVV%DG6HUYLFH%HDQLPSOHPHQWV6HVVLRQ%HDQ^
SXEOLFYRLGVRPH0HWKRG WKURZV64/([FHSWLRQ^
GRVWXIIWKDWPLJKWFDXVHDQ64/([FHSWLRQ
`
RWKHUEHDQPHWKRGV
`

7KHZD\\RX6+28/'GRLW
SXEOLFLQWHUIDFH*RRG6HUYLFHH[WHQG(-%/RFDO2EMHFW^
SXEOLFYRLGVRPH0HWKRG 
`

SXEOLFFODVV*RRG6HUYLFH%HDQLPSOHPHQWV6HVVLRQ%HDQ^

SXEOLFYRLGVRPH0HWKRG ^ EJBEx tio


WU\^ runtimeceexpce n is a
GRVWXII donÕt have toption, so you
`FDWFK 64/([FHSWLRQVH ^ declare it.
LIZHFDQ¶WUHFRYHU
WKURZQHZ(-%([FHSWLRQ VH 
`
`
as
wrap and theprotiwon
an EJBExc

\RXDUHKHUH 
%HDQ3URYLGHUDQGH[FHSWLRQV

*MIV8ZW^QLMZ¼[ZM[XWV[QJQTQ\QM[
 ,I\RXUEXVLQHVVORJLFHQFRXQWHUVDUXQWLPHH[FHSWLRQ
OHWLWSURSDJDWHWRWKH&RQWDLQHU'RQ·WWU\WRFDWFKLW
*USTDONTDOIT$ONTUSEATRYCATCHTOCATCH SAY %XCEPTION4HATWOULD
MEANYOUDCATCHEVERYTHING ANDTHEWORSTTHINGYOUCANDOISTOEAT
RUNTIMEEXCEPTIONSWITHOUTLETTINGTHEMPASSBACKUPTOTHE#ONTAINER
)FYOUDONEEDTOCATCHARUNTIMEEXCEPTION BUTTHENlNDTHATYOUCANT
RECOVER YOUCANSIMPLYTHROWITAS IS"UTWHATEVERYOUDO DONTDOTHIS

FYRLGGXPE0HWK
E0H
catch all Exceptions
U\
WU\^ Really stupid idea. DonÕt
Throwables!) Catch only

 (or even worse -- all ur siness logic, and let
FDWFK ([FHSWLR
FK
`FDWFK ([FHSWLRQH[ ^` what you need for yo ceptbuions propagate back
`
the other runtime ex the Container.
down the call stack to

 ,I\RXUEXVLQHVVORJLFJHQHUDWHVDQDSSOLFDWLRQ
H[FHSWLRQ\RXPXVWKDYHGHFODUHGWKHH[FHSWLRQLQ
ERWK\RXUFOLHQWLQWHUIDFH$1'\RXUEHDQFODVV

2EMEMBER JUSTBECAUSEYOUDECLAREANEXCEPTIONINANINTERFACEDOESNT
MEANYOUHAVETODECLARETHEEXCEPTIONINYOURIMPLEMENTATIONOFTHE
METHOD4HATSTRUEREGARDLESSOFWHETHERYOUIMPLEMENTTHEMETHODIN
THEFORMAL*AVAWAYBECAUSEYOURCLASSSAYS hEXTENDS4HIS)NTERFACEv "UTIF
THERESACHANCETHATYOULLTHROWANAPPLICATIONEXCEPTION EITHERBECAUSE
YOUHAVEATRYCATCHINYOURCODE ORBECAUSEYOUROWNBUSINESSLOGICCAN
CREATEONE YOUMUSTDECLARETHEEXCEPTIONINYOURBEANCLASS
You have to
declare it, if you
SXEOLFYRLGZLWKGUDZ GRXEOHG WKURZV$FFRXQW%DODQFH([FHSWLRQ^ might throw it.
LI EDODQFHG  ^
WKURZQHZ$FFRXQW%DODQFH([FHSWLRQ RYHUGUDZQ0VJ 
`HOVH^
EDODQFH G
`
`
`

SXEOLFDEVWUDFWYRLGZLWKGUDZ GRXEOHG WKURZV$FFRXQW%DODQFH([FHSWLRQ

 &KDSWHU
H[FHSWLRQVLQ(-%

*MIV8ZW^QLMZ¼[ZM[XWV[QJQTQ\QM[
 ,I\RXFUHDWH\RXURZQDSSOLFDWLRQH[FHSWLRQVWKH\PXVWH[WHQG
GLUHFWO\RULQGLUHFWO\ ([FHSWLRQEXWQRW5XQWLPH([FHSWLRQRU
5HPRWH([FHSWLRQ
!LTHOUGHYOUREENCOURAGEDTOUSE OREXTEND THESTANDARD%*"EXCEPTIONSWELLGETTO
THOSEINAMINUTE WHENYOURDESIGNCALLSFORYOUROWNCUSTOMEXCEPTIONS YOUMUSTMAKE
THEMCHECKEDEXCEPTIONS4HATMEANSTHEYMUSTEXTENDJAVALANG%XCEPTIONORONEOFITS
SUBCLASSES ASLONGASITDOESNOTEXTENDJAVALANG2UNTIME%XCEPTION4HEOTHERRESTRICTION
ISTHATAPPLICATIONEXCEPTIONSMUSTNOTEXTENDJAVARMI2EMOTE%XCEPTIONDIRECTLYOR
INDIRECTLY 2EMEMBER ANAPPLICATIONEXCEPTIONISANYCHECKEDEXCEPTIONDECLAREDINTHE
CLIENTVIEW EXCEPT2EMOTE%XCEPTION
SXEOLFYRLGZLWKGUDZ GRXEOHG WKURZV$FFRXQW%DODQFH([FHSWLRQ^
LI EDODQFHG  ^
WKURZQHZ$FFRXQW%DODQFH([FHSWLRQ RYHUGUDZQ0VJ 
`HOVH^EDODQFH G`
`
`
FODVV$FFRXQW%DODQFH([FHSWLRQH[WHQGV([FHSWLRQ^
$FFRXQW%DODQFH([FHSWLRQ 6WULQJV ^
VXSHU V 
`
`
WKHUH DUH QR
'XPE 4XHVWLRQV
Q: )JUSTREALIZEDSOMETHINGTHECONTAINER Q: 9OUSAIDTHEINTERFACESDONTDECLAREANY
CALLBACKSDECLAREDINTHE3ESSION"EANAND%NTITY"EAN CHECKEDEXCEPTIONS4(!49/5#!.53%7HATDOES
INTERFACESDONTDECLARECHECKEDEXCEPTIONS RIGHT3O THATMEAN7HATSANEXAMPLEOFADECLAREDCHECKED
DOESNTTHISMEANTHATYOUCANTTHROWANAPPLICATION EXCEPTIONTHATYOUCANTUSE
EXCEPTIONFROM SAY EJB!CTIVATE 

A: A: )FYOUGOTOTHE*%%!0)WELLWAIT WHILEYOUDO
4HATSRIGHT9OUCANTHROWONLYUNCHECKED THATSTILLWAITINGWAITINGWAITING YOUCANSEETHAT
EXCEPTIONSFROMACONTAINERCALLBACKTHATISNOTPARTOF ALLOFTHEMETHODSDECLAREA2EMOTE%XCEPTION9ES A"IG
YOURCLIENTVIEW4HISISJUSTPLAINOLD*AVAYOUCANT &AT#HECKEDEXCEPTION4HEYALSODECLARE%*"%XCEPTION
THROWACHECKEDEXCEPTIONFROMAMETHODTHATDOESNT ASANICEGESTURE BUTNOTAREQUIREMENTSINCE
DECLARETHEEXCEPTION ANDSINCETHOSEINTERFACESDONT %*"%XCEPTIONISASUBCLASSOF2UNTIME%XCEPTION $OES
DECLAREANYCHECKEDEXCEPTIONSTHATYOUCANUSE YOURE THISMEANYOUCANTHROWA2EMOTE%XCEPTIONYOURSELF
STUCKWITHRUNTIMEEXCEPTIONS4HEONLYTHINGYOU ,IKE IFYOUCAUGHTONEWHILEYOURBEANISBEINGACLIENT
SHOULDTHROWFROMONEOFTHECONTAINERCALLBACKSOF TOANOTHERBEAN FOREXAMPLE././!TIMES./
3ESSION"EAN %NTITY"EAN OR-ESSAGE$RIVEN"EAN ISAN )NTHEDAYSOFSTEAM DRIVENCONTAINERS THE%*"SPEC
%*"%XCEPTION ALLOWEDYOUTOTHROW2EMOTE%XCEPTIONS FROMYOUR
BEAN4HOSEDAYSAREOVER AND%*"DOESNTALLOWIT
3OUNLESSYOUREAPOORSOULTASKEDWITHLEGACYBEAN
MAINTENANCE YOUSHOULDAVERTYOURGAZEWHENYOU
LOOKATTHE!0)DOCS ANDPRETENDYOUNEVERSAWTHAT
2EMOTE%XCEPTION

\RXDUHKHUH 
7KH&RQWDLQHUDQGH[FHSWLRQV

<PM+WV\IQVMZ¼[ZM[XWV[QJQTQ\QM[
 ,IWKHEHDQWKURZVDQDSSOLFDWLRQH[FHSWLRQVHQGLWEDFNWR
WKHFOLHQW(;$&7/<DVLWZDVWKURZQDQGGR127UROOEDFNWKH
WUDQVDFWLRQ

)FTHEBEANTHROWSA#REATE%XCEPTION SENDTHATEXCEPTIONTOTHECLIENT)FTHEBEAN
THROWSA&INDER%XCEPTION SENDTHATEXCEPTIONTOTHECLIENT)FTHEBEANTHROWSAN
!CCOUNT"ALANCE%XCEPTION SENDTHATEXCEPTIONTOTHECLIENT
)TMAKESNODIFFERENCEWHETHERTHEEXCEPTIONISONEOFTHESTANDARD%*"EXCEPTIONS
FROMTHEJAVAEJBPACKAGE ORONETHATTHE"EAN0ROVIDERDElNED

,ZDV $FFRXQW%DODQFH([FHSWLRQ $FFRXQW%DODQFH([FHSWLRQ


UHDG\IRUDQ
$FFRXQW%DODQFH
H[FHSWLRQ

 ,IWKHEHDQWKURZVDV\VWHPH[FHSWLRQ LQFOXGLQJ(-%([FHSWLRQ
RUDQ\UXQWLPHH[FHSWLRQ

ƒ 7KURZD5HPRWH([FHSWLRQLIWKHFOLHQWLV5HPRWH
ƒ 7KURZDQ(-%([FHSWLRQLIWKHFOLHQWLVORFDO
ƒ /RJWKHH[FHSWLRQ
ƒ 5ROOEDFNWKHWUDQVDFWLRQ
ƒ 'LVFDUGWKHEHDQLQVWDQFH DVVXPHLW·VWRDVW

:HOOWKDWVXFNV, (-%([FHSWLRQ 1XOO3RLQWHU([FHSWLRQ


JRWD5XQWLPH([FHSWLRQ

/2*

ORFDOFOLHQW

 &KDSWHU
H[FHSWLRQVLQ(-%

YiX`e 6KDUSHQ \RXU SHQFLO


gfn\i
)URPWKHOLVWRISRVVLEOHRSWLRQVVHOHFWZKDW
7KLQNDERXWWKHFOLHQWIRUDPRPHQW,IWKHFOL \RXDVD%HDQ3URYLGHUVKRXOGGRLQHDFK
HQWJHWVD5HPRWH([FHSWLRQGRHVWKHFOLHQW RIWKHIROORZLQJVFHQDULRV$VVXPHWKDWWKH\
NQRZIRUFHUWDLQWKDWWKHEXVLQHVVPHWKRG DOOWDNHSODFHZLWKLQDEXVLQHVVPHWKRGRID
FRPSOHWHG" VHVVLRQEHDQ

'RHVWKHFOLHQWNQRZIRUFHUWDLQWKDWWKH 2SWLRQV \RXPD\XVHDQRSWLRQPRUHWKDQRQFH


WUDQVDFWLRQZDVUROOHGEDFN" $7KURZDQ(-%([FHSWLRQ

,VWKHUHDQ\ZD\WKHFOLHQWPLJKWEHDEOHWR %7KURZD5HPRWH([FHSWLRQ
¿QGRXW"
:KDWLIWKHFOLHQWLVDQRWKHUEHDQ" &,QYRNHVHW5ROOEDFN2QO\

'$OORZWKHH[FHSWLRQWRSURSDJDWH LQ
RWKHUZRUGVGXFNLW 

6FHQDULRV
QWKHH[DP
7KHUH¶VQRWKLQJR
LHQWVWUDWHJLHV <RXFDWFKDFKHFNHGH[FHSWLRQLQ\RXU
DERXWQRQ-((FO
DQVDFWLRQIDLOXUHV HME$FWLYDWHPHWKRG7KHPHWKRGLVQRWLQ
IRUFRSLQJZLWKWU DWUDQVDFWLRQ
ERXWZKDWPLJKW
\RXQHHGWRWKLQND
%XWDVDGHYHORSHU UV LWXDWLRQVLQ
QWVLGHHVSHFLDOO\IR
KDSSHQRQWKHFOLH UDQ VD FWL RQVXFFHHGHG $'LYLGH%\=HURH[FHSWLRQRFFXUVDV\RXU
ZZKHWKHUDW
ZKLFK\RXGRQ¶WNQR I\RXU-(( EXVLQHVVORJLFLVUXQQLQJ<RXGRQRW
QRUDQRWKHUSDUWR
,I\RXUFOLHQWLVDEHD - ((FOLHQW KDYHDWU\FDWFKIRUWKLV
QJRRGVKDSH7KH
DSSOLFDWLRQ\RX¶UHL WK HW UDQ VD FWLRQ%XWD
WWKHVWDWXVRI
FDQXVXDOO\¿QGRX HF QLVPRUDW
KD
QHHGVRPHRWKHUP <RXWKURZD&UHDWH([FHSWLRQIURP\RXU
QRQ-((FOLHQWZLOO WHP SWVWKHVDPH
QWHHWKDWLIKHDW HME&UHDWH PHWKRGDQG\RXUHDOL]HWKDW
OHDVWDZD\WRJXDUD G\ VX FF HH GHG EXWKH
WHULWDOUHD \RXSUREDEO\FDQQRWVDIHO\FRPSOHWH
WUDQVDFWLRQDJDLQDI \VXEVHTXHQW 
WWKHVHFRQG RUDQ \RXUWUDQVDFWLRQ
GRHVQ¶WNQRZ WKD Q\ RXKDYHDQ
HSUREOHPV:KH
DWWHPSWZRQ¶WFDXV RE OHP VL ID WWHPSWHGDIWHU
¶WFDXVHSU
RSHUDWLRQWKDWZRQ RSHUDWLRQLV <RXFDWFKDFKHFNHGH[FHSWLRQLQD
GWKDWPHDQV\RXU
LWVDOUHDG\VXFFHHGH GR Q¶W OLNHWKHVRXQGRI EXVLQHVVPHWKRGDQGUHDOL]HWKDW\RXU
W¶$QGW KRXJKZHUHDOO\
µLGHP SR WHQ JULW\RI\RXUDSS EHDQLVSUREDEO\FRUUXSW
HFULWLFDOWRWKHLQWH
WKDWZRUGLWPLJKWE

\RXDUHKHUH 
$SSOLFDWLRQH[FHSWLRQV

<PMNQ^M[\IVLIZL-2*IXXTQKI\QWVM`KMX\QWV[
4HEJAVAXEJBPACKAGEHASlVESTANDARDAPPLICATIONEXCEPTIONSUSEDBYTHE%*"CONTAINER BUT
YOUCANUSETHEMASWELL EITHERDIRECTLYORASSUPERCLASSESTOYOUROWNCUSTOMEXCEPTIONS

([FHSWLRQ MDYDODQJSDFNDJH

&UHDWH([FHSWLRQ )LQGHU([FHSWLRQ 5HPRYH([FHSWLRQ

'XSOLFDWH.H\([FHSWLRQ 2EMHFW1RW)RXQG([FHSWLRQ
MDYD[HMESDFNDJH

 &UHDWH([FHSWLRQ
4HE#ONTAINERTHROWSTHISFROM YOUGUESSEDIT ACREATEMETHOD IFSOMETHING
GOESWRONGDURINGCREATION4HISINCLUDESSCENARIOSINWHICHTHEBEANCODETHROWS
#REATE%XCEPTIONITSELF WHILERUNNINGACREATEMETHOD!LTHOUGHIFTHEBEANSGONNA
THROWIT THEBEANSGOTTADECLAREITINTHEBEANCLASS NOTJUSTTHEHOMEINTERFACE

 'XSOLFDWH.H\([FHSWLRQ
4HE#ONTAINERTHROWSTHISTOTHECLIENTFROMANENTITYBEANCREATEMETHODSEEHOWITSA
SUBCLASSOF#REATE%XCEPTION IFTHEBUSINESSLOGICRELATEDTOTHECREATEASKSTHE#ONTAINERTO
INSERTANEWENTITYUSINGAPRIMARYKEYTHATHASALREADYBEENASSIGNEDTOANOTHERENTITY

 )LQGHU([FHSWLRQ
4HE#ONTAINERTHROWSTHISTOTHECLIENTFROMANENTITYBEANSlNDERMETHOD TOTELLTHE
CLIENTTHATSOMETHINGWENTWRONGDURINGTHElNDER4HEBEANMIGHTHAVETHROWNIT"-0
BEANSONLY BUTFOR#-0BEANS ONLYTHE#ONTAINERCANTHROWTHISMETHOD

 2EMHFW1RW)RXQG([FHSWLRQ
4HE#ONTAINERTHROWSTHISTOTHECLIENT/.,9DURINGSINGLE ENTITYlNDERMETHODS WHEN
THERESNOENTITYINTHEDATABASEMATCHINGTHEPRIMARYKEYPARAMETEROFTHElNDERMETHOD

 5HPRYH([FHSWLRQ
4HE#ONTAINERTHROWSTHISTOTHECLIENTFROMASESSIONORENTITYBEANWHENSOMETHING
GOESWRONGINAREMOVEMETHOD"UTTHEBEANPROVIDERCANTHROWTHISEXCEPTIONIF FOR
EXAMPLE HEDOESNTWANTTOLETCLIENTSREMOVEENTITYBEANS

 &KDSWHU
H[FHSWLRQVLQ(-%

<PMNQ^M[\IVLIZLIXXTQKI\QWVM`KMX\QWV[NZWU\PM
KTQMV\¼[XWQV\WN^QM_
4WOOFTHElVEAREMORESPECIlCˆ$UPLICATE+EY%XCEPTIONAND
/BJECT.OT&OUND%XCEPTION)FTHECLIENTGETSAN/BJECT.OT&OUND%XCEPTION THE
CLIENTHASMOREINFORMATIONTHANIFHEGETSAMOREABSTRACT&INDER%XCEPTION!NDIF
THECLIENTGETSA$UPLICATE+EY%XCEPTION HEKNOWSALOTMOREABOUTWHATWENTWRONG
THANIFHEGETSAGENERIC#REATE%XCEPTION

" &UHDWH([FHSWLRQ
4HECLIENTDOESNOTKNOWFORCERTAINWHETHERTHEBEANWAS
ACTUALLYCREATED4HE#ONTAINERMIGHTHAVEHADAPROBLEMAFTER
THETRANSACTIONCOMMITTED

'XSOLFDWH.H\([FHSWLRQ
*RWLW
)FTHECLIENTCATCHESA$UPLICATE+EY%XCEPTION SHECANBE
CERTAINTHATTHEBEANWASNOTCREATED

)LQGHU([FHSWLRQ
" 4HECLIENTDOESNOTKNOWWHETHERAMATCHINGENTITYOR
ENTITIES FORMULTIPLE ENTITYlNDERS EXISTSINTHEDATABASE
4HE#ONTAINERMIGHTTHROWA&INDER%XCEPTIONBECAUSEOF
SOMETHINGTHATWENTWRONGBEFOREITWASABLETOLOOKINTHE
DATBASE

*RWLW 2EMHFW1RW)RXQG([FHSWLRQ
)FTHECLIENTCATCHESAN/BJECT.OT&OUND%XCEPTION SHECAN
BECERTAINTHATTHEREWASNOMATCHFORTHISPRIMARYKEY
INTHEDATABASE2EMEMBER /BJECT.OT&OUND%XCEPTIONIS
FORSINGLE ENTITYlNDERSONLY SOACLIENTWILLNEVERGETTHISFOR
AMULTI ENTITYlNDER

5HPRYH([FHSWLRQ
"
4HECLIENTDOESNOTKNOWFORCERTAINWHETHERTHEBEANWAS
ACTUALLYREMOVED4HEBEANPROVIDERMIGHTSIMPLYHAVE
REJECTEDTHECLIENTSREQUEST ASIN h9OUCANASKALLDAYLONG
BUTTHEREISNO7!9THAT)MGOINGTOREMOVETHATENTITYFROM
THEDATABASEv/RTHEENTITYMIGHTHAVEBEENREMOVEDFROMTHE
DATABASE BUTTHENSOMETHINGELSEWENTWRONGTHATTRIGGERED
THE2EMOVE%XCEPTION
\RXDUHKHUH 
$SSOLFDWLRQH[FHSWLRQV

WKHUH DUH QR
'XPE 4XHVWLRQV

6WDWHOHVVVHVVLRQE
Q: )FA2EMOVE%XCEPTIONMAKESNOSENSE
HDQ FORASTATELESSSESSIONBEAN WHYAREYOU
FOLHQWVZLOO1(9(5JH ALLOWEDTOTHROWITASSUMINGYOUDECLAREIT
WD
5HPRYH([FHSWLRQ ONYOURBEANSREMOVE METHOD 
,I\RXVHHDVFHQDULRZK
HUHWKHFOLHQWJHWVD
5HPRYH([FHSWLRQ\RXFDQ
VHVVLRQEHDQV7KLQNDERX
UXOHRXWVWDWHOHVV
WLWDVWDWHOHVVVHV
A: 2EMEMBER THERESNOTHINGINTHEBEAN
VLRQEHDQ¶VUHPRYDOLV1( CLASSTHATCANTELLYOUWHETHERTHEBEANIS
9(5WLHGWRDFOLHQWVR
WKHUH¶VQRERG\WRJLYHWK DEFINITELYSTATELESS9OUCANTELLIFABEANIS
HH[FHSWLRQWR<RXFDQ
WKURZD5HPRYH([FHSWLR STATEFUL OFCOURSE BECAUSEANYBEANWITH
QIURP\RXUHME5H
PRYH PHWKRGEXWWKHF OVERLOADEDCREATESORITSONLYCREATEHASARGS
OLHQWZLOOQHYHUVHHLWLI
WKHEHDQLVDVWDWHOHVVVHV MUSTBESTATEFUL"UTEVENIFASESSIONBEANHAS
VLRQEHDQ
ONLYASINGLENO ARGCREATEMETHOD YOUSTILL
DONTKNOWWHETHERTHATBEANISGOINGTOBE
MARKEDSTATELESSORSTATEFULATDEPLOYTIME
4HISWOULDALLBEDIFFERENTIFTHEREWEREA
7KHFOLHQWPLJKW
SEPARATEINTERFACEFOR3TATELESS3ESSION"EAN
AND3TATEFUL3ESSION"EAN THATYOURBEANHAD
127JHWWKH TOIMPLEMENTINSTEADOFJUST3ESSION"EAN BUT
PRVWVSHFLÀF THATSNOTHOWITWORKS
H[FHSWLRQ

'RQ¶WFRXQWRQ$/:$<6J
PRVWVSHFL¿FH[FHSWLRQR
HWWLQJWKH
QWK HFOLHQW
Q: )FTHE"EAN0ROVIDERDOESNTWANTTOLET
WQR WD FFR UGLQJ ENTITYBEANCLIENTSREMOVEABEAN WHYDOES
7KH&RQWDLQHUPLJK HEHAVEAREMOVEMETHOD
FVHQG WKH FOLH QWD 
WRWKHVSH
HQLIWKDWLV
'XSOLFDWH.H\([FHSWLRQHY
WKHSUREOHP
:KDWGRHVWKLVPHDQWRWKH
FOLHQW" A: !RENTYOUFORGETTINGSOMETHINGOBVIOUS
DF DWF K HERE7HEREDOTHEREMOVE METHODSLIVE
,IWKHFOLHQW¶VFRGHKDV (OWARETHEYEXPOSEDTOTHECLIENT4HATSRIGHT
H([ FHS WLRQ DQ GD
IRUERWKD&UHDW )NTHECLIENTINTERFACES2EMEMBER THEREARE
.H\ ([F HSW LRQ WK HF OLHQ W
'XSOLFDWH THREEREMOVE METHODSAVAILABLETOAREMOTE
UWDL QWK DWLI
FDQ¶WEHFRPSOHWHO\FH ENTITYBEANCLIENTTHENO ARGINTHE%*"/BJECT
SWLRQWKH
VKHFDWFKHVD&UHDWH([FH
PLV1 27 DG XSO LFD WHN H\LVVXH INTERFACE ANDTHEREMOVETHATTAKESAKEYAND
SUREOH
RUH [DP SOHWKH THEREMOVETHATTAKESAHANDLEINTHE%*"(OME
7KLVZRXOGEHEDGLII
WNH SWWU\LQ JWR FUH DWH  INTERFACE !LOCALENTITYBEANCLIENTHASTWO
FOLHQWFRGHMXV REMOVEMETHODSˆTHEONEIN%*"/BJECT AND
LQN LQJ ´,
VHQGLQJLQWKHVDPHNH\WK
WH. H\( [FH SWLR QVR THEONEINTHEHOMETHATTAKESAPRIMARYKEY3O
GLGQ¶WJHWD'XSOLFD THERESNOTHINGYOUCANDOTOHIDETHEREMOVE
FDQ ¶WEHWK HS URE OHP ´
,NQRZ7+$7 METHODSFROMACLIENT BUTIFYOUDONTSUPPORT
Q
,I\RXJHWD&UHDWH([FHSWLR ITFROMYOURBEAN THROWA2EMOVE%XCEPTION
RQWKHFOLHQWDQG127D FROMYOURBEANSEJB2EMOVE METHOD ANDTHE
XZRQ¶W
'XSOLFDWH.H\([FHSWLRQ\R
NH \LVR.,W¶V #ONTAINERWONTGOTHROUGHWITHTHEREMOVE
NQRZIRUFHUWDLQWKDWWKH
UZ KHW KHU LWJLYHV 4HISISYOURWAYOFTELLINGTHE#ONTAINER h$ONT
XSWRWKH&RQWDLQH
UHV SHF L¿FH [FH SWLR Q DOIT)DONTCAREWHATTHECLIENTSAYS DONTYOU
\RXWKHPR
DAREGOTHROUGHWITHTHEREMOVEv

 &KDSWHU
H[FHSWLRQVLQ(-%

+WUUWV[a[\MUM`KMX\QWV[
"ESIDESTHESTANDARDAPPLICATIONEXCEPTIONSFOR%*" THEREARESEVERAL
IMPORTANTSYSTEMEXCEPTIONS!FEWINCLUDING%*"%XCEPTION AREPARTOF
THE*%%!0) BUTTWOOFTHEMOSTLIKELYSYSTEMEXCEPTIONSIN%*"INCLUDE
JAVARMI.O3UCH/BJECT%XCEPTIONANDJAVALANG)LLEGAL3TATE%XCEPTION

/RFDOFOLHQWVDQG
EHDQVZLOOJHWWKHVH
XQFKHFNHG 5XWLPH([FHSWLRQ
MDYDODQJSDFNDJH

MDYD[HMESDFNDJH (-%([FHSWLRQ ,OOHJDO6WDWH([FHSWLRQ

1R6XFK2EMHFW/RFDO([FHSWLRQ 1R6XFK(QWLW\([FHSWLRQ

2QO\5HPRWHFOLHQWVZLOOJHWWKHVH FKHFNHG

MDYDUPLSDFNDJH 5HPRWH([FHSWLRQ

1R6XFK2EMHFW([FHSWLRQ 7UDQVDFWLRQ5HTXLUHG([FHSWLRQ 7UDQVDFWLRQ5ROOHGEDFN([FHSWLRQ

MDYD[HMESDFNDJH

\RXDUHKHUH 
6\VWHPH[FHSWLRQV

+WUUWV[a[\MUM`KMX\QWV[
 ,OOHJDO6WDWH([FHSWLRQ
4HE#ONTAINERTHROWSTHISTOABEANIFTHEBEANCALLSAMETHODONITSCONTEXTTHATISNT
ALLOWEDATTHATTIME&OREXAMPLE ASESSIONBEANCANTASKITSCONTEXTFORAREFERENCETO
ITS%*"OBJECTWHILEINTHESET3ESSION#ONTEXT METHOD)TSTOOEARLY!BEANCANALSO
GETAN)LLEGAL3TATE%XCEPTIONIFITCALLSATRANSACTIONMETHODLIKESET2OLLBACK/NLY OR
GET2OLLBACK/NLY WHENTHERESNOTRANSACTION

 (-%([FHSWLRQ
4HEBEANTHROWSTHISTOTELLTHE#ONTAINERASYSTEMEXCEPTIONHASOCCURREDWHICHFORCESTHE
#ONTAINERTOROLLBACKTHETRANSACTION LOGTHEEXCEPTION KILLTHEBEAN ANDGIVEALOCALCLIENT
THE%*"%XCEPTIONANDAREMOTECLIENTA2EMOTE%XCEPTION "UTTHE#ONTAINERCANALSOTHROW
THISFORAVARIETYOFOTHERREASONSWELLLOOKATINAMINUTE

 1R6XFK2EMHFW/RFDO([FHSWLRQ
4HISEXCEPTIONISKINDOFALOCALCOMPANIONTOJAVARMI.O3UCH/BJECT%XCEPTION4HE
#ONTAINERTHROWSITTOTHECLIENTWHENTHECLIENTINVOKESAMETHODONALOCALHOMEOR
COMPONENTINTERFACE BUTTHERESNOUNDERLYINGBEANTOSUPPORTTHEOBJECT4HISCAN
HAPPEN FOREXAMPLE IFTHEBEANHASALREADYBEENREMOVEDEITHERTHROUGHAPREVIOUSCLIENT
CALLTOREMOVE ORBECAUSETHE#ONTAINERKILLEDTHEBEANDUETOANEXCEPTION STATEFULBEAN
TIMEOUT ORTOREDUCETHESIZEOFTHEPOOL 

 1R6XFK(QWLW\([FHSWLRQ
9OUPROBABLYWONTSEEORUSETHISEXCEPTIONMUCH ESPECIALLYWITH#-0 BUTITSFORYOUTO
THROWFROMYOURBEANCODEWHENYOUWANTTOTELLTHE#ONTAINERTHATTHEENTITYYOURETRYINGTO
ACCESSISNOLONGERINTHEDATABASEPERHAPSBECAUSEITWASREMOVEDBYANADMINAPPLICATION 

 7UDQVDFWLRQ5HTXLUHG/RFDO([FHSWLRQ7UDQVDFWLRQ5HTXLUHG([FHSWLRQ
4HE#ONTAINERTHROWSTHISTOTHECALLERWHENTHECALLEDMETHODHASATRANSACTIONATTRIBUTE
OFMANDATORY BUTTHERESNOTRANSACTIONCONTEXTCOMINGINWITHTHECALL)NOTHERWORDS ITS
MANDATORYTHATTHECALLERINVOKESTHEMETHODWITHINANEXISTINGTRANSACTION ANDIFTHEREISNT
ONE THEAPPROPRIATE4RANSACTION2EQUIREDEXCEPTIONISTHROWNDEPENDINGONWHETHERTHE
CLIENTISLOCALORREMOTE

 7UDQVDFWLRQ5ROOHGEDFN([FHSWLRQ7UDQVDFWLRQ5ROOHGEDFN/RFDO([FHSWLRQ
4HE#ONTAINERTHROWSTHISTOTHECALLERWHENTHE#ONTAINERCANTCOMMITTHETRANSACTION ANDTHE
CALLERINVOKEDTHEMETHODWITHINANEXISTINGTRANSACTIONCONTEXT"UTTHE#ONTAINERWILLNOTTHROW
THISEXCEPTIONIFTHEFAILURETOCOMMITISBECAUSETHEBEANEXPLICITLYCALLEDTHESET2OLLBACK/NLY
METHOD)NTHATCASE THE#ONTAINERWILLROLLBACKTHETRANSACTIONANDPASSTHEBUSINESSMETHOD
RESULTBACKTOTHECLIENTUNLESSTHEBEANALSOTHROWSANAPPLICATIONEXCEPTION 

 &KDSWHU
H[FHSWLRQVLQ(-%

<RX·UHNLGGLQJULJKW"
+RZDP,VXSSRVHGWRUHPHPEHU
WKHGLIIHUHQFHEHWZHHQVD\
1R6XFK2EMHFWDQG2EMHFW1RW)RXQG
H[FHSWLRQV",ZRQGHUZKDWJHQLXVFDPH
XSZLWKVXFKFOHDUHDV\WRGLVWLQJXLVK
the only one thatÕs NO T in
QDPHV2QDQGOHWPHJXHVV
javax.ej b is in jav a.r mi . It means
the
WKH\·UHRQWKHH[DPULJKW"
the client has a stugone. t
b, bu
Remote objec t is
checked
MDYDUPL1R6XFK2EMHFW([FHSWLRQ
this was added to B
when local interfaceEJ
in version 2.0. It meas ns
came
not checked the client has an invalid
MDYD[HME1R6XFK2EMHFW/RFDO([FHSWLRQ EJB object reference.

checked
MDYD[HME2EMHFW1RW)RXQG([FHSWLRQ this is ONLY for Þnder ders)
methods! (single-entity Þn
not checked clients will never see th
MDYD[HME1R6XFK(QWLW\([FHSWLRQ youÕll probably never useis,it.and
just donÕt confuse it with ..
of the others! any

/+ WEAGREE4HENAMESFEELALITTLE
SHALLWESAY ARBITRARY"UTREMEMBER THE
.O3UCH/BJECT%XCEPTIONCAMElRST)TWAS
DESIGNEDFORTHESCENARIOWHERETHECLIENTHASA
STUBTOA2EMOTEOBJECT ANDFORWHATEVERREASON
THE2EMOTEOBJECTISNOLONGERUSABLE-IGHTHAVE
BEENASERVERCRASH-IGHTBETHATTHESERVICE
ITSELFHASBEENUNDEPLOYED$OESNTMATTER!S
FARASTHECLIENTSCONCERNED THEPHONEHASBEEN
DISCONNECTEDOVERATTHESERVERSIDE
.O3UCH/BJECT,OCAL%XCEPTIONWASADDEDWHEN
LOCALCLIENTVIEWSWEREADDEDIN%*"4HE
CONCEPTISSLIGHTLYDIFFERENT BECAUSETHELOCAL
CLIENTISUSINGNOTASTUB BUTAREAL*AVAOBJECT
REFERENCE"UTFROMTHECLIENTSPERSPECTIVE
ITREALLYDOESNTMATTERWHETHERITSLOCALOR
2EMOTEˆA.O3UCH/BJECTWHATEVEREXCEPTION
MEANSYOUCANTUSEYOUR%*"OBJECTREFERENCETO
GETTOABEAN9OUHAVETOGOBACKTHROUGHTHE
HOMEANDSTARTOVER

\RXDUHKHUH 
FRQIXVLQJO\QDPHGH[FHSWLRQV

,WULHGWRÀQGKLPEXWDQ
H[RWLFGDQFHUQDPHG3DXO
$UH\RXVXUH\RX :KHDWRQZDV1RW)RXQG
ORRNHGHYHU\ZKHUH" DQ\ZKHUHLQWKHUHFRUGV0D\EHLI
$QG\RXVWLOOGLGQ·WÀQG ZHXSJUDGHGWRDGDWDEDVHWKDW·VLQ
DQ\UHFRUGRI3DXO FRORU,FRXOGDFWXDOO\JHWVRPHWKLQJ
:KHDWRQ" GRQHDURXQGKHUH

,·PVRUU\EXWWKHUH·V1R6XFK
SHUVRQKHUH<HV,UHDOL]HWKDW
WKLVLVKRZ\RXFRQWDFWHGKLP
LQWKHSDVW%XWWUXVWPHKRQH\
+H·VEHHQUHPRYHG,SXWKLVERG\
WKURXJKWKHZRRGFKLSSHUQRW
WZRGD\VDJR

2EMHFW1RW)RXQG([FHSWLRQLVD)LQGHU([FHSWLRQ

1R6XFK2EHFW([FHSWLRQLVZKHQWKHFOLHQWVWLOOKDV
DVWXEWRD5HPRWHREMHFWEXWWKHREMHFWKDVEHHQ
UHPRYHG RULVQRORQJHUYDOLGIRUDQ\RWKHUUHDVRQ

1R6XFK2EMHFW/RFDO([FHSWLRQLVZKHQWKHORFDOFOLHQW
KDVDUHIHUHQFHWRDQ(-%REMHFWIRUDEHDQWKDW¶VEHHQ
UHPRYHG RULVQRORQJHUYDOLGIRUDQ\RWKHUUHDVRQ 

 &KDSWHU
H[FHSWLRQVLQ(-%

:MDD=LHGAFLK

ƒ ([FHSWLRQVLQ-DYDFDQEHFKHFNHGRUXQFKHFNHG ƒ ,IWKH%HDQ3URYLGHUFDWFKHVDQH[FHSWLRQIURP
&KHFNHGH[FHSWLRQVH[WHQGMDYDODQJ([FHSWLRQ ZKLFKWKHEHDQFDQQRWUHFRYHUKHVKRXOGZUDS
EXWQRWMDYDODQJ5XQWLPH([FHSWLRQ DQGUHWKURZWKHH[FHSWLRQDVDQ(-%([FHSWLRQ D
UXQWLPHH[FHSWLRQVRKHGLGQ·WQHHGWRGHFODUHLW 
ƒ ([FHSWLRQVLQ(-%FDQEHWKURZQIURPWKHEHDQWR
WKH&RQWDLQHUDQGIURPWKH&RQWDLQHUWRWKHEHDQ ƒ 7KHUHDUHILYHVWDQGDUG(-%DSSOLFDWLRQH[FHSWLRQV
&UHDWH([FHSWLRQ'XSOLFDWH.H\([FHSWLRQ
ƒ (-%H[FHSWLRQVFRPHLQWZRW\SHVDSSOLFDWLRQDQG H[WHQGV&UHDWH([FHSWLRQ )LQGHU([FHSWLRQ
V\VWHP
2EMHFW1RW)RXQG([FHSWLRQ H[WHQGV
ƒ $SSOLFDWLRQH[FHSWLRQVDUHFKHFNHGH[FHSWLRQVWKDW )LQGHU([FHSWLRQ DQG5HPRYH([FHSWLRQ
WKHFOLHQWLVH[SHFWLQJDQGPLJKWEHDEOHWRUHFRYHU
ƒ &RPPRQV\VWHPH[FHSWLRQVLQFOXGH(-%([FHSWLRQ
IURP7KLVLQFOXGHVDOOFKHFNHGH[FHSWLRQVH[FHSW
,OOHJDO6WDWH([FHSWLRQ7UDQVDFWLRQ5HTXLUHG/RFDO([
MDYDUPL5HPRWH([FHSWLRQDQGLWVVXEFODVVHV
FHSWLRQDQG1R6XFK2EMHFW/RFDO([FHSWLRQ
ƒ 6\VWHPH[FHSWLRQVDUHDOORWKHUH[FHSWLRQV ƒ 2EMHFW1RW)RXQG([FHSWLRQLVIRUZKHQVLQJOH
DQGLQFOXGHDOOUXQWLPHH[FHSWLRQVSOXV
HQWLW\ILQGHUPHWKRGVFDQQRWILQGDQHQWLW\LQWKH
5HPRWH([FHSWLRQ
SHUVLVWHQWVWRUHWKDWPDWFKHVWKHSULPDU\NH\
ƒ )RUWKHFOLHQWD5HPRWH([FHSWLRQFDQEHWUHDWHG DUJXPHQWWRWKHILQGHUPHWKRG
DVWKRXJKDUXQWLPHH[FHSWLRQ LHVRPHWKLQJ
ƒ 1R6XFK2EMHFW([FHSWLRQLVDQ50,H[FHSWLRQIRU
XQH[SHFWHG KDSSHQHGRQWKHVHUYHU
ZKHQD5HPRWHFOLHQWKDVDVWXEWRD5HPRWH
ƒ :KHQWKH&RQWDLQHUJHWVDV\VWHPH[FHSWLRQLW REMHFWWKDW·VEHHQUHPRYHGRULVLQYDOLGIRUVRPH
ZLOOUROOEDFNWKHWUDQVDFWLRQORJWKHH[FHSWLRQDQG RWKHUUHDVRQ
WKURZDZD\WKHEHDQ
ƒ 1R6XFK2EMHFW/RFDO([FHSWLRQLVDUXQWLPH
ƒ :KHQWKH&RQWDLQHUJHWVDQDSSOLFDWLRQH[FHSWLRQ H[FHSWLRQIRUZKHQDORFDOFOLHQWKDVDUHIHUHQFH
LWZLOOVHQGLWWRWKHFOLHQWH[DFWO\DVLWZDVUHFHLYHG WRDQ(-%REMHFWWKDW·VQRORQJHUYDOLG PRVWOLNHO\
7KHWUDQVDFWLRQZLOOQRWDXWRPDWLFDOO\UROOEDFNDQG EHFDXVHWKHEHDQKDVDOUHDG\EHHQUHPRYHG 
WKHEHDQ·VOLIHZLOOEHVSDUHG
ƒ 7KH%HDQ3URYLGHUVKRXOGWKURZDSSOLFDWLRQ
H[FHSWLRQVWRWKH&RQWDLQHUDVLVVRWKDWWKH
&RQWDLQHUFDQSDVVWKHPRQWRWKHFOLHQW,IWKH
EHDQ·VWUDQVDFWLRQLVSRVVLEO\FRUUXSWWKH%HDQ
3URYLGHUVKRXOGFDOOVHW5ROOEDFN2QO\ EHIRUH
WKURZLQJDSSOLFDWLRQH[FHSWLRQVRWKDWWKH
&RQWDLQHUZLOOQRWFRPPLWWKHWUDQVDFWLRQ

\RXDUHKHUH 
H[FHSWLRQVFHQDULRV

;KMVIZQW["_PI\LWaW]\PQVSPIXXMV['
4ECHNICALLY THISSECTIONISLIKEABIGSTEALTH3HARPEN9OUR0ENCILEXERCISE/NLY
WEJUSTTOLDYOU SOMAYBENOTSOSTEALTHY3URE WECOULDJUSTTELLYOUEVERYTHING
ONEFACTAFTERANOTHERBUTYOULLHAVEAMUCHBETTERCHANCEATREMEMBERING
ITIFYOUWORKITOUTFORYOURSELF7ESUMMARIZEEVERYTHINGNEARTHEENDOFTHE
CHAPTER BUTDO./4JUMPTHERENOW%VENIFYOURESOMEONEWHONEVERDOES
THEEXERCISES DOTHISSCENARIOWALK THROUGH9OULLTHINKOFUSFONDLYWHENYOURE
HOLDINGYOURLOVELYLAPELPINTHATYOUGETFROMPASSINGTHECERTIlCATIONEXAM

 $PHVVDJHGULYHQEHDQ¶VRQ0HVVDJH PHWKRGFDWFKHVDQDSSOLFDWLRQH[FHSWLRQ
&DQLWUHWKURZWKHDSSOLFDWLRQH[FHSWLRQWRWKH&RQWDLQHU"

+LQWZKDWGRHVD&RQWDLQHUXVXDOO\GRZKHQLWJHWVDQDSSOLFDWLRQH[FHSWLRQIURPD
EHDQ":RXOGWKH&RQWDLQHUEHDEOHWRGRWKDWLQWKLVVFHQDULR"

 $VHVVLRQEHDQXVLQJ&07KDVDPHWKRGPDUNHGZLWKWKH1RW6XSSRUWHGWUDQVDFWLRQ
DWWULEXWH:KLOHWKHPHWKRGLVUXQQLQJWKHEHDQFDOOVVHW5ROOEDFN2QO\ RQLWVFRQWH[W
:LOOWKLVFDXVHDQH[FHSWLRQ":KDWNLQG"

+LQWWKLQNDERXWZKDWVHW5ROOEDFN2QO\ GRHVDQGZKDWVWDWHWKHEHDQKDVWREHLQ

 $PHVVDJHGULYHQEHDQLQWKHRQ0HVVDJH PHWKRGFDOOVJHW&DOOHU3ULQFLSDO :KDW


KDSSHQV"

+LQWZKDW¶VJHW&DOOHU3ULQFLSDO XVHGIRU"'RHVWKDWPDNHVHQVHKHUH"

 $VHVVLRQEHDQXVLQJ&07KDVDPHWKRGPDUNHGZLWKWKH0DQGDWRU\WUDQVDFWLRQ
DWWULEXWH7KHFOLHQWFDOOLQJWKHPHWKRGLVQRWLQDWUDQVDFWLRQ:KDWKDSSHQV"

+LQW7KLQNDERXWWKHQDPHVRIWKHFRPPRQV\VWHPH[FHSWLRQV,VWKHUHRQHWKDW
PDNHVVHQVHKHUH"

 $EHDQUHDOL]HVLWFDQ¶WFRPPLWDWUDQVDFWLRQEXWLWGRHVQ¶WZDQWWKHFOLHQWWRJHWDQ
H[FHSWLRQ:KDWFDQWKHEHDQGR"

 $EHDQZDQWVWKHFOLHQWWRJHWDQDSSOLFDWLRQH[FHSWLRQEXWWKHEHDQVWLOOZDQWVWKH
WUDQVDFWLRQWRFRPPLW:KDWVKRXOGWKHEHDQGR"

 &KDSWHU
H[FHSWLRQVLQ(-%

6KDUSHQ \RXU SHQFLO 0DWFKWKHVFHQDULRVZLWKWKHH[FHSWLRQ V WKDWPLJKW


RFFXUZLWKWKDWVFHQDULR'RQ¶WWXUQWKHSDJH7KH
DQVZHUVDUHMXVWDSDJHDZD\

6FHQDULRV 7UDQVDFWLRQV

$&07EHDQFDOOVFRQWH[WJHW8VHU7UDQVDFWLRQ  ,OOHJDO6WDWH([FHSWLRQ

&OLHQWFDOOVUHPRYH RQDEHDQWKDW¶VDOUHDG\EHHQUHPRYHG (-%([FHSWLRQ

&OLHQWFDOOVUHPRYH RQDVWDWHIXOEHDQWKDWLVVWLOOLQDQRSHQ &UHDWH([FHSWLRQ


WUDQVDFWLRQ
5HPRYH([FHSWLRQ
$VHVVLRQEHDQFDOOVJHW3ULPDU\.H\ RQLWVFRQWH[W
2EMHFW1RW)RXQG([FHSWLRQ
$&07EHDQFDOOVJHW5ROOEDFN2QO\ IURPDPHWKRGPDUNHG
1RW6XSSRUWHG 1R6XFK2EMHFW([FHSWLRQ

&OLHQWFDOOVDPHWKRGRQD5HPRWH&07EHDQDQGWKH 5HPRWH([FHSWLRQ
PHWKRGLVPDUNHG0DQGDWRU\7KHFDOOHUGRHVQRWKDYHD
7UDQVDFWLRQ5HTXLUHG([FHSWLRQ
WUDQVDFWLRQFRQWH[WLQSODFHZKHQWKHFDOOFRPHVLQ
1RW6XSSRUWHG([FHSWLRQ
$PHVVDJHGULYHQEHDQFDOOVLV&DOOHU,Q5ROH RQLWVFRQWH[W
IURPZLWKLQWKHRQ0HVVDJH PHWKRG 5XQWLPH([FHSWLRQ
&OLHQWFDOOVWKHKRPHUHPRYHPHWKRGRQWKH/2&$/KRPH 1R6XFK2EMHFW/RFDO([FHSWLRQ
LQWHUIDFHRIDVHVVLRQEHDQ
'XSOLFDWH.H\([FHSWLRQ
$VWDWHOHVVVHVVLRQEHDQFDOOVJHW&DOOHU3ULQFLSDO RQLWV
FRQWH[WGXULQJWKHVHW6HVVLRQ&RQWH[WPHWKRG 6\VWHP([FHSWLRQ

&OLHQW)RRFDOOVDPHWKRGRQDUHPRWHVWDWHIXOEHDQZKLOH 1R6XFK(QWLW\([FHSWLRQ
WKDWVDPHEHDQLVDOUHDG\H[HFXWLQJDPHWKRGIRUFOLHQW%DU

&OLHQWFDOOVJHW3ULPDU\.H\ RQWKHORFDOFRPSRQHQWLQWHUIDFH
RIDVHVVLRQEHDQ

$PHVVDJHGULYHQEHDQFDWFKHVD1DPLQJ([FHSWLRQIURP
ZKLFKLWFDQ¶WUHFRYHU:KLFKH[FHSWLRQ LIDQ\ FDQWKHEHDQ
WKURZWRWHOOWKH&RQWDLQHU"

$VHVVLRQEHDQZDQWVWKH&RQWDLQHUWRNQRZWKDWWKH
WUDQVDFWLRQVKRXOGEHUROOHGEDFNDQGWKHEHDQVKRXOGEH
NLOOHG

&OLHQWFDOOV¿QG%\3ULPDU\.H\ ³´ ZKHUHWKHUHLVQRHQWLW\


ZLWKDSULPDU\NH\RI³´

$OWKRXJKWKHEHDQLV¿QHWKH&RQWDLQHUKDVDV\VWHP
H[FHSWLRQLWZDQWVWRWKURZWRDORFDOFOLHQW
\RXDUHKHUH 
H[FHSWLRQVFHQDULRV

;KMVIZQW;]UUIZa

7UDQVDFWLRQ6FHQDULRV

$&07EHDQFDOOVFRQWH[WJHW8VHU7UDQVDFWLRQ 
7KHEHDQJHWVDQ,OOHJDO6WDWH([FHSWLRQ 2QO\%07EHDQVFDQJHWD
8VHU7UDQVDFWLRQ

&OLHQWFDOOVUHPRYH RQDVWDWHIXOEHDQWKDWLVVWLOOLQDQRSHQ
WUDQVDFWLRQ
7KHFOLHQWJHWVD5HPRYH([FHSWLRQ<RXFDQ¶WUHPRYHDVWDWHIXOEHDQ
ZKLOHLWVLQDWUDQVDFWLRQ :KLFKLVMXVWRQHRIDJD]LOOLRQUHDVRQVZK\LW¶V
D%DG,GHDWROHDYHDWUDQVDFWLRQRSHQDFURVVPXOWLSOHFOLHQWLQYRFDWLRQV
,QRWKHUZRUGVLI\RXEHJLQD%07WUDQVDFWLRQLQDPHWKRG\RXVKRXOG
HQGLWLQWKDWPHWKRG

$&07EHDQFDOOVJHW5ROOEDFN2QO\ IURPDPHWKRGPDUNHG
1RW6XSSRUWHG
7KHEHDQJHWVDQ,OOHJDO6WDWH([FHSWLRQ<RXPXVWEHLQDWUDQVDFWLRQ
ZKHQ\RXFDOOJHW5ROOEDFN2QO\ RUVHW5ROOEDFN2QO\ 7KDWPHDQV\RX
FDQ¶WFDOOWKHPZLWKLQDPHWKRGPDUNHG1RW6XSSRUWHG1HYHURU6XSSRUWV
VHVVLRQDQGHQWLW\EHDQV RU1RW6XSSRUWHG PHVVDJHGULYHQEHDQV²
UHPHPEHUPHVVDJHGULYHQEHDQVFDQ¶WXVH1HYHURU6XSSRUWVEHFDXVH
WKH\GRQ¶WPDNHVHQVHJLYHQWKDWWUDQVDFWLRQVFDQQHYHUSURSDJDWHLQWRD
PHVVDJHGULYHQEHDQ

&OLHQWFDOOVDPHWKRGRQD5HPRWH&07EHDQDQGWKHPHWKRGLV
PDUNHG0DQGDWRU\7KHFDOOHUGRHVQRWKDYHDWUDQVDFWLRQFRQWH[WLQ
SODFHZKHQWKHFDOOFRPHVLQ
7KHFOLHQWJHWVD7UDQVDFWLRQ5HTXLUHG([FHSWLRQ DORFDOFOLHQWZRXOGJHW
7UDQVDFWLRQ5HTXLUHG/RFDO([FHSWLRQ 

$VHVVLRQEHDQZDQWVWKH&RQWDLQHUWRNQRZWKDWWKHWUDQVDFWLRQ
VKRXOGEHUROOHGEDFNDQGWKHEHDQVKRXOGEHNLOOHG
7KHEHDQVKRXOGWKURZDQ(-%([FHSWLRQ7KH&RQWDLQHUWDNHVRYHU
DQGGRHVLWVQRUPDO&RQWDLQHUWKLQJIRUV\VWHPH[FHSWLRQV²UROOEDFN
WKHWUDQVDFWLRQORJWKHH[FHSWLRQNLOOWKHEHDQDQGWKURZD
5HPRWH([FHSWLRQWRD5HPRWHFOLHQWRUWKH(-%([FHSWLRQWRDORFDOFOLHQW

 &KDSWHU
H[FHSWLRQVLQ(-%

;KMVIZQW;]UUIZa

&OLHQW6FHQDULRV

&OLHQWFDOOVUHPRYH RQDEHDQWKDW¶VDOUHDG\EHHQUHPRYHG
<RXPLJKWEHWHPSWHGWRVD\5HPRYH([FHSWLRQEXWWKDW¶VQRWLW5HPHPEHU
UHPRYH LVMXVWDQRWKHUPHWKRGLQWKHEHDQ¶VLQWHUIDFHDQGLI\RXFDOOLW
RQDUHPRYHGEHDQ\RX¶OOJHWWKHVDPHH[FHSWLRQ\RX¶GVHHLI\RXFDOOHG
DQ\RWKHUEXVLQHVVPHWKRGRQDUHPRYHGEHDQ²UHPRWHFOLHQWVJHW
5HPRWH([FHSWLRQDQGORFDOFOLHQWVJHW(-%([FHSWLRQ

&OLHQWFDOOVWKHKRPHUHPRYHPHWKRGRQWKH/2&$/KRPHLQWHUIDFHRI
DVHVVLRQEHDQ
7KHFOLHQWJHWVD5HPRYH([FHSWLRQ:K\"%HFDXVHWKHRQO\UHPRYH 
PHWKRGLQDVHVVLRQEHDQ¶VORFDOKRPHLVWKHRQHWKDWWDNHVDSULPDU\NH\
DQGWKDWFDQQHYHUZRUN5HPRWHFOLHQWVZRXOGDOVRJHWD5HPRYH([FHSWLRQ

&OLHQW)RRFDOOVDPHWKRGRQDUHPRWHVWDWHIXOEHDQZKLOHWKDWVDPH
EHDQLVDOUHDG\H[HFXWLQJDPHWKRGIRUFOLHQW%DU
&OLHQW)RRJHWVD5HPRWH([FHSWLRQ LIFOLHQW)RRKDGEHHQORFDOKH¶GJHWDQ
(-%([FHSWLRQ $VHVVLRQEHDQKDQGOHRQO\RQHFOLHQWDWDWLPH

&OLHQWFDOOVJHW3ULPDU\.H\ RQWKHORFDOFRPSRQHQWLQWHUIDFHRID
VHVVLRQEHDQ
7KLVLVMXVWOLNHWKHRQHZKHUHWKHFOLHQWFDOOVUHPRYH RQDORFDOEHDQ¶V
KRPH7KHFOLHQWJHWVDQ(-%([FHSWLRQ LIWKHFOLHQWZHUHORFDOKH¶GJHWD
5HPRWH([FHSWLRQ 7KHSRLQWLV"6HVVLRQEHDQVGRQ¶WKDYHSULPDU\NH\V
$Q\PHWKRG\RXFDOOUHODWHGWRWKHSULPDU\NH\RIDEHDQZLOOIDLOLIWKDWEHDQ
LVDVHVVLRQEHDQ

&OLHQWFDOOV¿QG%\3ULPDU\.H\ ³´ ZKHUHWKHUHLVQRHQWLW\ZLWKD


SULPDU\NH\RI³´
7KHFOLHQWJHWVDQ2EMHFW1RW)RXQG([FHSWLRQDVXEFODVVRI)LQGHU([FHSWLRQ

$OWKRXJKWKHEHDQLV¿QHWKH&RQWDLQHUKDVDV\VWHPH[FHSWLRQLW
ZDQWVWRWKURZWRDORFDOFOLHQW
7KHFOLHQWJHWVDQ(-%([FHSWLRQ

\RXDUHKHUH 
H[FHSWLRQVFHQDULRV

;KMVIZQW;]UUIZa

%HDQ6FHQDULRV

$VHVVLRQEHDQFDOOVJHW3ULPDU\.H\ RQLWVFRQWH[W
7KHEHDQJHWVDQ,OOHJDO6WDWH([FHSWLRQ<RXNQRZZK\6HVVLRQEHDQV
DQGSULPDU\NH\VGRQ¶WJRWRJHWKHU

$PHVVDJHGULYHQEHDQFDOOVLV&DOOHU,Q5ROH RQLWVFRQWH[WIURP
ZLWKLQWKHRQ0HVVDJH PHWKRG
7KLQNDERXWLW'RHVDPHVVDJHGULYHQEHDQKDYHDFDOOLQJFOLHQW ZH
GRQ¶WUHDOO\FRXQWWKH&RQWDLQHUDVDµFOLHQW¶DOWKRXJKLWLVFDOOLQJWKH
EHDQ¶VPHWKRGV ,IWKHUH¶VQRFOLHQWWKHQ:+26(VHFXULW\LQIRUPDWLRQ
ZRXOGWKHEHDQJHW"7KHEHDQJHWVDQ,OOHJDO6WDWH([FHSWLRQMXVWIRU
EHLQJFOXHOHVVHQRXJKWRHYHQWU\

$VWDWHOHVVVHVVLRQEHDQFDOOVJHW&DOOHU3ULQFLSDO RQLWVFRQWH[W
GXULQJWKHVHW6HVVLRQ&RQWH[WPHWKRG
7KHEHDQJHWVDQ,OOHJDO6WDWH([FHSWLRQEHFDXVHVHW6HVVLRQ&RQWH[W 
LVWRRHDUO\LQWKHEHDQ¶VOLIHWRJHWFOLHQWLQIRUPDWLRQ,QIDFWD
VWDWHOHVVEHDQFDQJHWFOLHQWVHFXULW\LQIRUPDWLRQ21/<ZKLOHUXQQLQJ
DEXVLQHVVPHWKRGRIWKHFRPSRQHQWLQWHUIDFH$QGHYHQLIWKHEHDQ
ZHUHVWDWH)8/LWZRXOGVWLOOEHWRRHDUO\IRUFOLHQWLQIRUPDWLRQDOWKRXJK
DVWDWHIXOEHDQ EXWQRWVWDWHOHVV FRXOGFDOOJHW&DOOHU3ULQFLSDO DQG
LV&DOOHU,Q5ROH IURPZLWKLQHME&UHDWH 

$PHVVDJHGULYHQEHDQFDWFKHVD1DPLQJ([FHSWLRQIURPZKLFK
LWFDQ¶WUHFRYHU:KLFKH[FHSWLRQ LIDQ\ FDQWKHEHDQWKURZWR
WHOOWKH&RQWDLQHU"
7KHEHDQVKRXOGWKURZDQ(-%([FHSWLRQ5HPHPEHUPHVVDJHGULYHQ
EHDQVGRQ¶WKDYHFOLHQWV7KH\GRQ¶WKDYHFOLHQWLQWHUIDFHV6RWKHUH¶V
QRSODFHWRGHFODUHDSSOLFDWLRQH[FHSWLRQV7KDWPHDQV\RXUEHDQ
FDQ¶WWKURZDQ\WKLQJEXWV\VWHPH[FHSWLRQV7KHRQO\H[FHSWLRQWKH
PHVVDJHGULYHQEHDQVKRXOGHYHUWKURZLV(-%([FHSWLRQ,WFDQQHYHU
WKURZDSSOLFDWLRQH[FHSWLRQVDQGLWVKRXOGOHWRWKHUV\VWHPH[FHSWLRQV
SURSDJDWHWRWKH&RQWDLQHU

 &KDSWHU
H[FHSWLRQVLQ(-%

)LOOWKLVFKDUWLQWRGHVFULEHWKHGLIIHUHQFHVEHWZHHQ
UHPRWHDQGORFDOFOLHQWV<RX¶OOZDQWWRXVHWKLVDVD
FKHDWVKHHWEHIRUHWKHH[DPVRGRQ¶WVFUHZLWXS
([HUFLVH
Some things might be the same 5HPRWHFOLHQWV /RFDOFOLHQWV
for both remote and local
clients, but we arenÕt telling.

+RZV\VWHPH[FHSWLRQVLQWKH
EHDQDUHGHOLYHUHGWRWKHFOLHQW

7KHH[FHSWLRQIRUZKHQWKHFOLHQW
FDOOVDPHWKRGRQDEHDQWKDW·V
EHHQUHPRYHG

7KHH[FHSWLRQIRUZKHQ
WKHFOLHQWFDOOVDPHWKRG
PDUNHG0DQGDWRU\ZLWKRXWD
WUDQVDFWLRQFRQWH[WLQSODFH

7KHH[FHSWLRQIRUZKHQWKHFOLHQW
VWDUWVDWUDQVDFWLRQDQGWKH
&RQWDLQHUKDVWRUROOLWEDFN

7KHH[FHSWLRQIRUZKHQWKH
FOLHQWFDOOVJHW3ULPDU\.H\ RQ
WKHFRPSRQHQWLQWHUIDFHRID
VHVVLRQEHDQ

7KHH[FHSWLRQIRUZKHQWKHFOLHQW
FDOOVDPHWKRGLQDVHVVLRQEHDQ
DQGWKHEHDQLVDOUHDG\H[HFXWLQJ
DPHWKRGIRUDQRWKHUFOLHQW

7KHH[FHSWLRQIRUZKHQWKHFOLHQW
FDOOVDUHPRYH PHWKRGRQD
VWDWHIXOVHVVLRQEHDQWKDW·VVWLOOLQD
WUDQVDFWLRQ

\RXDUHKHUH 
H[FHSWLRQH[HUFLVH

'HMDYX"<HV\RX¶YHVHHQWKLV1HDUWKHEHJLQQLQJRI
WKLVFKDSWHU([FHSWLWZDVDOO¿OOHGLQ1RZLW¶V\RXUWXUQ
%RQXVSRLQWVLI\RXXVHGUDZLQJVDORQJZLWK\RXUZRUGV
([HUFLVH

$SSOLFDWLRQ([FHSWLRQV 6\VWHP([FHSWLRQV

&OLHQWUHFRYHU\

7UDQVDFWLRQVWDWXV

%HDQLQVWDQFH

/RJJLQJ

([DPSOHV

&RPSLOHUFKHFNLQJ
DQGRWKHUUXOHV

 &KDSWHU
H[FHSWLRQVLQ(-%

0RFN([DP
7HATISTRUEWHENANENTITYBEANSCLIENTRECEIVESAJAVAXEJB%*"%XCEPTION
1 #HOOSEALLTHATAPPLY
R! 4HECLIENTMUSTBEREMOTE
R" 4HECLIENTMUSTBELOCAL
R# !CLIENTWILLNEVERRECEIVETHISEXCEPTION
R$ 4HECLIENTMUSTHANDLEORDECLARETHISEXCEPTION
R% 4HISEXCEPTIONCANONLYOCCURIFTHECLIENTISINATRANSACTION

7HICHSCENARIOWILLCAUSEAJAVARMI.O3UCH/BJECT%XCEPTIONTOBETHROWN
2 #HOOSEALLTHATAPPLY
R! !REMOTECLIENTINVOKESAMETHODONASTATEFULSESSIONBEANWHICHHAS
BEENREMOVED
R" !REMOTECLIENTINVOKESAMETHODONANENTITYBEANWHICHHASBEEN
REMOVED
R# !REMOTECLIENTINVOKESAlNDERMETHODWITHINVALIDARGUMENTS
R$ 4HECONTAINERINVOKESANEJB0ASSIVATE METHODONABEANTHATISNOT
READYTOBESERIALIZED

7HICHISASUBCLASSOFJAVALANG2UNTIME%XCEPTION#HOOSEALLTHATAPPLY
3
R! MDYD[HME(-%([FHSWLRQ
R" MDYD[HME5HPRYH([FHSWLRQ
R# MDYD[HME&UHDWH([FHSWLRQ
R$ MDYD[HME1R6XFK(QWLW\([FHSWLRQ
R% MDYDUPL5HPRWH([FHSWLRQ
R&MDYD[HME2EMHFW1RW)RXQG([FHSWLRQ
R'MDYDUPL1R6XFK2EMHFW([FHSWLRQ

\RXDUHKHUH 
FRIIHHFUDPPRFNH[DP

7HICHOFTHEFOLLOWINGARE%*"SPECIlCATIONGUIDELINESREGARDINGSYSTEM
4 EXCEPTIONS#HOOSEALLTHATAPPLY
R! "EANMETHODSSHOULDCATCH2UNTIME%XCEPTIONEXCEPTIONS
R" "EANMETHODSSHOULDWRAPUNRECOVERABLECHECKEDEXCEPTIONSINA
MDYD[HME(-%([FHSWLRQEXCEPTION
R# &ORREMOTECLIENTS BEANMETHODSSHOULDWRAPUNRECOVERABLECHECKED
EXCEPTIONSINAMDYDUPL5HPRWH([FHSWLRQ
R$ )FA#-4BEANTHROWSASYSTEMEXCEPTION THETRANSACTIONWILLSTILL
COMMITUNLESSTHEBEANINVOKESVHW5ROOEDFN2QO\

)FABUSINESSMETHODOFA#-4DEMARCATEDBEANTHROWSASYSTEMEXCEPTION IN
5 WHICHCASEWILLTHECONTAINERALWAYSTHROWA
MDYD[WUDQVDFWLRQ7UDQVDFWLRQ5ROOHGEDFN([FHSWLRQ#HOOSEALL
THATAPPLY
R! )FTHEMETHODSTRANSACTIONATTRIBUTEISMARKED@2EQUIRES.EW
R" )FTHEMETHODSTRANSACTIONATTRIBUTEISMARKED@-ANDATORY
R# )FTHEMETHODSTRANSACTIONATTRIBUTEISMARKED@.EVER
R$ )FTHEMETHODSTRANSACTIONATTRIBUTEISMARKED@.OT3UPPORTED

7HICHISASUBCLASSOFJAVAXEJB&INDER%XCEPTION#HOOSEALLTHATAPPLY
6
R! #REATE%XCEPTION
R" .O3UCH%NTITY%XCEPTION
R# 2EMOVE%XCEPTION
R$ $UPLICATE+EY%XCEPTION
R% /BJECT.OT&OUND%XCEPTION

&ROMWHICHMETHODSCAN-$"SWITH#-4DEMARCATIONTHROWAPPLICATION
7 EXCEPTIONS#HOOSEALLTHATAPPLY
R! RQ0HVVDJH
R" HME&UHDWH
R# HME5HPRYH
R$ JHW8VHU7UDQVDFWLRQ
R% VHW0HVVDJH'ULYHQ&RQWH[W
R&NONEOFTHEABOVE

 &KDSWHU
H[FHSWLRQVLQ(-%

7HATSTRUEFORALOCALCLIENTTHATRECEIVESANEXCEPTIONFROMAN%*"
8 INVOCATION#HOOSEALLTHATAPPLY
R! 4HEEXCEPTIONMIGHTBEFROMTHEJAVARMIPACKAGE
R" 4HEEXCEPTIONMIGHTBEANAPPLICATIONEXCEPTION
R# 4HEEXCEPTIONMIGHTBEASYSTEMEXCEPTION
R$ .ONEOFTHEABOVE

7HICHACTIONS WILLTHECONTAINERTAKEIFAMESSAGE DRIVENBEANWITH"-4


9 DEMARCATIONTHROWSASYSTEMEXCEPTION#HOOSEALLTHATAPPLY
R! ,OGTHEEXCEPTION
R" $ISCARDTHEINSTANCE
R# -ARKTHETRANSACTIONFORROLLBACK
R$ #OMMITTHETRANSACTIONUNLESSTHEBEANHASINVOKED
VHW5ROOEDFN2QO\ 
R% .ONEOFTHEABOVE

&ROMWHICHTYPESOFBEANSCANCLIENTSRECEIVESYSTEMEXCEPTIONS#HOOSEALL
10 THATAPPLY
R! 3ESSIONBEANSWITH#-4DEMARCATION
R" 3ESSIONBEANSWITH"-4DEMARCATION
R# -ESSAGE DRIVENBEANSWITH#-4DEMARCATION
R$ -ESSAGE DRIVENBEANSWITH"-4DEMARCATION
R% %NTITYBEANSWITH#-4DEMARCATION

\RXDUHKHUH 
PRFNH[DPDQVZHUV

0RFN([DP$QVZHUV
(spec: 374)
7HATISTRUEWHENANENTITYBEANSCLIENTRECEIVESAJAVAXEJB%*"%XCEPTION
1 #HOOSEALLTHATAPPLY
R! 4HECLIENTMUSTBEREMOTE - Remote clients get RemoteException
R" 4HECLIENTMUSTBELOCAL
R# !CLIENTWILLNEVERRECEIVETHISEXCEPTION
R$ 4HECLIENTMUSTHANDLEORDECLARETHISEXCEPTION
R% 4HISEXCEPTIONCANONLYOCCURIFTHECLIENTISINATRANSACTION
(spec: 374)
7HICHSCENARIOWILLCAUSEAJAVARMI.O3UCH/BJECT%XCEPTIONTOBETHROWN
2 #HOOSEALLTHATAPPLY
R! !REMOTECLIENTINVOKESAMETHODONASTATEFULSESSIONBEANWHICHHAS
BEENREMOVED
R" !REMOTECLIENTINVOKESAMETHODONANENTITYBEANWHICHHASBEEN
REMOVED - client gets
R# !REMOTECLIENTINVOKESAlNDERMETHODWITHINVALIDARGUMENTS FinderException or
ObjectNotFoundException
R$ 4HECONTAINERINVOKESANEJB0ASSIVATE METHODONABEANTHATISNOT (subclass of
READYTOBESERIALIZED FinderException)
7HICHISASUBCLASSOFJAVALANG2UNTIME%XCEPTION#HOOSEALLTHATAPPLY
3
R! MDYD[HME(-%([FHSWLRQ
R" MDYD[HME5HPRYH([FHSWLRQ
R# MDYD[HME&UHDWH([FHSWLRQ (API docs)
R$ MDYD[HME1R6XFK(QWLW\([FHSWLRQ
R% MDYDUPL5HPRWH([FHSWLRQ
R&MDYD[HME2EMHFW1RW)RXQG([FHSWLRQ
R'MDYDUPL1R6XFK2EMHFW([FHSWLRQ

 &KDSWHU
H[FHSWLRQVLQ(-%

)
7HICHOFTHEFOLLOWINGARE%*"SPECIlCATIONGUIDELINESREGARDINGSYSTEM (spec: 373-374
4 EXCEPTIONS#HOOSEALLTHATAPPLY
R! "EANMETHODSSHOULDCATCH2UNTIME%XCEPTIONEXCEPTIONS
R" "EANMETHODSSHOULDWRAPUNRECOVERABLECHECKEDEXCEPTIONSINA
MDYD[HME(-%([FHSWLRQEXCEPTION
No, the Container
R# &ORREMOTECLIENTS BEANMETHODSSHOULDWRAPUNRECOVERABLECHECKED will do this
EXCEPTIONSINAMDYDUPL5HPRWH([FHSWLRQ
R$ )FA#-4BEANTHROWSASYSTEMEXCEPTION THETRANSACTIONWILLSTILL - system exceptions always
COMMITUNLESSTHEBEANINVOKESVHW5ROOEDFN2QO\ cause a tx rollback

5 )FABUSINESSMETHODOFA#-4DEMARCATEDBEANTHROWSASYSTEMEXCEPTION IN (spec: 375-376)


WHICHCASEWILLTHECONTAINERALWAYSTHROWA
MDYD[WUDQVDFWLRQ7UDQVDFWLRQ5ROOHGEDFN([FHSWLRQ#HOOSEALL
THATAPPLY
The others are wrong because
R! )FTHEMETHODSTRANSACTIONATTRIBUTEISMARKED@2EQUIRES.EW they indicate that the callerÕs tx
was not the active tx when the
R" )FTHEMETHODSTRANSACTIONATTRIBUTEISMARKED@-ANDATORY exception occurred. ThereÕs no
R# )FTHEMETHODSTRANSACTIONATTRIBUTEISMARKED@.EVER need to tell a caller (through an
exception) unless itÕs the callerÕs
R$ )FTHEMETHODSTRANSACTIONATTRIBUTEISMARKED@.OT3UPPORTED transaction that is rolled back!
)
7HICHISASUBCLASSOFJAVAXEJB&INDER%XCEPTION#HOOSEALLTHATAPPLY (spec: 263-264
6
R! #REATE%XCEPTION
R" .O3UCH%NTITY%XCEPTION
R# 2EMOVE%XCEPTION
R$ $UPLICATE+EY%XCEPTION - subclass of CreateException
R% /BJECT.OT&OUND%XCEPTION

(spec: 377)
&ROMWHICHMETHODSCAN-$"SWITH#-4DEMARCATIONTHROWAPPLICATION
7 EXCEPTIONS#HOOSEALLTHATAPPLY
R! RQ0HVVDJH - MDBs cannot declare / throw any
R" HME&UHDWH application exceptions... who would catch
them? thereÕs no client.
R# HME5HPRYH
R$ JHW8VHU7UDQVDFWLRQ
R% VHW0HVVDJH'ULYHQ&RQWH[W
R&NONEOFTHEABOVE

\RXDUHKHUH 
PRFNH[DPDQVZHUV

8 7HATSTRUEFORALOCALCLIENTTHATRECEIVESANEXCEPTIONFROMAN%*" (spec: 381-382)


INVOCATION#HOOSEALLTHATAPPLY
R! 4HEEXCEPTIONMIGHTBEFROMTHEJAVARMIPACKAGE
R" 4HEEXCEPTIONMIGHTBEANAPPLICATIONEXCEPTION
R# 4HEEXCEPTIONMIGHTBEASYSTEMEXCEPTION
R$ .ONEOFTHEABOVE

7HICHACTIONS WILLTHECONTAINERTAKEIFAMESSAGE DRIVENBEANWITH"-4 (spec: 378)


9 DEMARCATIONTHROWSASYSTEMEXCEPTION#HOOSEALLTHATAPPLY
R! ,OGTHEEXCEPTION
R" $ISCARDTHEINSTANCE
R# -ARKTHETRANSACTIONFORROLLBACK
R$ #OMMITTHETRANSACTIONUNLESSTHEBEANHASINVOKED
VHW5ROOEDFN2QO\ 
R% .ONEOFTHEABOVE

&ROMWHICHTYPESOFBEANSCANCLIENTSRECEIVESYSTEMEXCEPTIONS#HOOSEALL (spec: 377)


10 THATAPPLY
R! 3ESSIONBEANSWITH#-4DEMARCATION
R" 3ESSIONBEANSWITH"-4DEMARCATION
R# -ESSAGE DRIVENBEANSWITH#-4DEMARCATION
- MDBs have no clients!
R$ -ESSAGE DRIVENBEANSWITH"-4DEMARCATION
R% %NTITYBEANSWITH#-4DEMARCATION

 &KDSWHU
security in EJB
5
4
4 3URWHFW<RXU6HFUHWV
 QR ZD\<RXFDQ·W
OHW6XVLHKHDUWKLV,EHWWHU
SXWVRPHPHWKRGSHUPLVVLRQVLQ
P\''WRVWRSKHUIURPFDOOLQJ
/HW·VSXWKHULQWKH¶FU\EDE\·
VHFXULW\UROH

.HHS\RXUVHFUHWV6HFXULW\LVDERXWDXWKHQWLFDWLRQDQGDXWKRUL]DWLRQ)LUVW
\RXKDYHWRSURYH\RXULGHQWLW\DQGWKHQZH¶OOWHOO\RXZKDW\RX¶UHDOORZHGWRGR6HFXULW\
LVHDV\LQ(-%EHFDXVH\RX¶UHRQO\GHDOLQJZLWKDXWKRUL]DWLRQ<RXGHFLGHZKRJHWVWR
FDOOZKLFKPHWKRGVRQ\RXUEHDQV([FHSWRQHSUREOHPLI\RX¶UHD%HDQ3URYLGHURU
$SS$VVHPEOHU\RXSUREDEO\GRQ¶WNQRZZKRWKHXVHUVDUHJRLQJWREH6R\RXPDNH
VWXIIXS<RXPDNHXSUROHVOLNHMREWLWOHVLQFOXGLQJ0DQDJHU6XSHUYLVRU$GPLQHWFDQG
ZKHQVRPHRQHGHSOR\V\RXUDSSOLFDWLRQLQDUHDOFRPSDQ\WKDW'HSOR\HUPDSVEHWZHHQ
\RXUPDGHXSQDPHV 0DQDJHU DQGUHDOSHRSOHZKRZLOOXVHWKHDSS

WKLVLVDQHZFKDSWHU 
H[DPREMHFWLYHV

6HFXULW\
2IILFLDO :KDWLWUHDOO\PHDQV
 ,GHQWLI\FRUUHFWDQGLQFRUUHFWVWDWHPHQWV <RXKDYHWRNQRZWKDW\RXFDQGRWZRNLQGVRI
DERXWWKH(-%VXSSRUWIRUVHFXULW\ VHFXULW\LQ(-%SURJUDPPDWLFDQGGHFODUDWLYH
PDQDJHPHQWLQFOXGLQJVHFXULW\UROHV 'HFODUDWLYHPHDQV\RXUVHFXULW\LVGH¿QHGLQWKH
VHFXULW\UROHUHIHUHQFHVDQGPHWKRG 'HSOR\PHQW'HVFULSWRU<RXQHHGWRNQRZWKDW
SHUPLVVLRQV VHFXULW\LQ(-%LVPRVWO\DERXWGHFODULQJDVHWRI
DEVWUDFWVHFXULW\UROHVWKHQGHFODULQJZKLFKPHWKRGV
HDFKRIWKRVHUROHVLVDOORZHGWRFDOO

 )URPDOLVWRIUHVSRQVLELOLWLHVLGHQWLI\ 3D\FORVHDWWHQWLRQWRWKLVLQWKHFKDSWHU<RXQHHGWR


ZKLFKEHORQJWRWKH$SSOLFDWLRQ$VVHPEOHU WKLQNDERXWWKHZKROHSURFHVVLQDFRPSRQHQWEDVHG
%HDQ3URYLGHU'HSOR\HU&RQWDLQHU GHYHORSPHQWZD\WRNQRZZKRLVUHVSRQVLEOHIRU
3URYLGHURU6\VWHP$GPLQLVWUDWRU ZKDW<RXQHHGWRNQRZWKDWWKH%HDQ3URYLGHUXVX
DOO\ZRQ¶WKDYHDQ\VHFXULW\UHVSRQVLELOLWLHVEXWWKDW
LIKHGRHVXVHWKHLV&DOOHU,Q5ROH PHWKRGWKHQKH
PXVWWHOOWKH$SS$VVHPEOHUZKDWQDPHKHKDUGFRG
HGLQDVWKHDUJXPHQWWRWKHLV&DOOHU,Q5ROH PHWKRG
E\SXWWLQJDVHFXULW\UROHUHIHUHQFHLQWKH''<RX
PXVWNQRZWKDWWKH$SS$VVHPEOHU¶VMRELVWRGH¿QH
VHFXULW\UROHVPHWKRGSHUPLVVLRQVDQGUROHOLQNV
PDSSLQJIURPWKHSURJUDPPHU¶VPDGHXSUROHUHIHU
HQFHVDQGWKH$SS$VVHPEOHU¶VUHDOVHFXULW\UROHV)L
QDOO\\RXPXVWNQRZWKDWWKH'HSOR\HULVUHVSRQVLEOH
IRUPDSSLQJ LQDYHQGRUVSHFL¿FZD\ EHWZHHQUHDO
XVHUVDQGJURXSVDQGWKH$SS$VVHPEOHU¶VDEVWUDFW
VHFXULW\UROHVDQGWKDWWKLVLVGRQHXVLQJ&RQWDLQHU
WRROVRUSURSHUW\¿OHV

 *LYHQDFRGHOLVWLQJGHWHUPLQHZKHWKHU <RXKDYHWRNQRZHYHU\WKLQJDERXWWKH''WDJVUH


LWLVDOHJDODQGRUDSSURSULDWHZD\WR ODWHGWRVHFXULW\LQFOXGLQJWKDWVHFXULW\UROHUHIHUHQFHV

SURJUDPPDWLFDOO\DFFHVVDFDOOHU¶V DQGUROHOLQNVDUHLQWKHHQWHUSULVHEHDQ!VHFWLRQ
 VHFXULW\FRQWH[W EXWVHFXULW\UROHVDQGPHWKRGSHUPLVVLRQVDUHLQWKH
*LYHQDVHFXULW\UHODWHGGHSOR\PHQW DSSOLFDWLRQDVVHPEO\!SDUW<RXPXVWNQRZKRZWKH
GHVFULSWRUWDJLGHQWLI\FRUUHFWDQG VHFXULW\LGHQWLW\!WDJLVXVHGDQGWKDWPHVVDJHGULY
LQFRUUHFWVWDWHPHQWVDQGRUFRGHUHODWHG HQEHDQVPXVWQHYHUXVHFDOOHULGHQWLW\!<RXQHHG
WRWKDWWDJ WRNQRZWKDWWKHWZRSURJUDPPDWLFVHFXULW\PHWKRGV
DUHFDOOHGRQDVHVVLRQRUHQWLW\EHDQ¶VFRQWH[W

 &KDSWHU
VHFXULW\LQ(-%

1UIOQVMaW]¼ZM_ZQ\QVOIXIaZWTTIXXTQKI\QWV

7KLVZLOOEHZLWKRXWDGRXEW
WKHEHVWSD\UROOSURJUDPHYHU
ZULWWHQ,·PJRQQD58/(WKH
session bean to
pay information update e entity
,7GHSDUWPHQWZKHQWKH\VHHWKLV
DSS(YHQ,DPVWLOODVWRQLVKHGE\ employe
P\VXSHULRUFRGLQJVNLOOV

&KDQJH3D\ (PSOR\HH
VHW6DODU\
JHW1DPH
JLYH%RQXV
VHW1DPH
UHLQEXUVH
JHW6DODU\
DGMXVW3D\
VHW6DODU\
JHW(PSOR\HH,'
JLYH%RQXV
PRUH

:HOOZHOOZKDWGRZHKDYHKHUH"
6RPHERG\IRUJRWWRSURWHFWWKH&KDQJH3D\
PHWKRGV,WKLQN,·OOMXVWJLYHP\VHOIDOLWWOHVDODU\
DGMXVWPHQW7KH\GRQ·WSD\PHKDOIRIZKDW,·PZRUWK
DQ\ZD\EXWZKDWHYHUWKH\·UHSD\LQJ%LOOWKHJX\
ZKRGHYHORSHGWKLVDSSLW·VZDDDDD\WRRPXFK
+HGLGQ·WHYHQWKLQNDERXWVHFXULW\

\RXDUHKHUH 
(-%VHFXULW\

?PI\KIVaW]LW'
7HOREALLYISRESPONSIBLEFORMAKINGTHEPROGRAMSECURE(OWDOESITHAPPEN
4HERESGOODNEWSANDBADNEWSWITH%*"SECURITY

 6HFXULW\LQ(-%LVHDV\,W·VDERXW$87+25,=$7,21

ƒ 0RVWRIWKHWLPH\RXGRQ·WSXWDQ\VHFXULW\UHODWHGFRGHLQWR\RXUEHDQFODVVHV
ƒ ,QIDFWWKH%HDQ3URYLGHUGRHVQRWHYHQWKLQNDERXWVHFXULW\H[FHSWLQYHU\VSHFLDO
FDVHVZH·OOORRNDWLQWKHODVWSDUWRIWKLVFKDSWHU

ƒ 6HFXULW\LQ(-%LVDERXWVD\LQJ:+2FDQFDOO:+$7<RXFDQUHVWULFWDFFHVVIRUHDFK
LQGLYLGXDOPHWKRGLQ\RXUDSSOLFDWLRQWRRQO\WKRVHLQGLYLGXDOVWKDWDUHLQDSULYLOHJHG
¶UROH· 'LUHFWRU3D\UROO$GPLQ3D\UROO$VVLVWDQWHWF

ƒ 7KH(-%SDUWRIWKHVHFXULW\³WKHSDUWWKDWVSHFLILHVWKHUROHVDQGWKHPHWKRGVWKRVHUROHV
FDQDFFHVV³LVGRQHGHFODUDWLYHO\LQWKHGHSOR\PHQWGHVFULSWRUXVLQJVLPSOH;0/WDJV

ƒ $WWKH(-%OHYHOLWUHDOO\LVDVVLPSOHDVVD\LQJ´7KHVHW6DODU\ PHWKRGFDQEH
DFFHVVHGE\21/<'LUHFWRUVDQG3D\UROO$GPLQLVWUDWRUVµ

 6HFXULW\LQ(-%LVDEVWUDFW,W·V127DERXW$87+(17,&$7,21

ƒ 7KH(-%VSHFPDNHVLWYHU\HDV\WRGHILQHUROHVDQGWRDVVLJQUROHVWRPHWKRGVLQRUGHUWR
FRQWURODFFHVVWRWKHPHWKRGV%XWWKHVSHFVD\V127+,1*DERXWKRZWKHV\VWHPZLOO.12:
ZKLFKUHDOKXPDQEHLQJVEHORQJWRWKRVHUROHV6RPHZKHUHRXWVLGHRIWKH(-%GHSOR\PHQW
GHVFULSWRU DQGRXWVLGHWKHVSHFLILFDWLRQ \RXVWLOOKDYHWRVD\WKDW-DFN2·%U\DQLVLQWKH'LUHFWRU
UROH DQGSUREDEO\RWKHUUROHVDVZHOO 2UVD\WKDWDOO3D\UROO0DQDJHUVLQFRPSDQ\;<=DUH
TXDOLILHGWREHLQWKHUROHRIZKDWWKHDSSOLFDWLRQKDVODEHOHG3D\UROO$GPLQ

ƒ 7KHVSHFDOVRGRHVQRWGHILQHKRZDUHDOKXPDQEHLQJFDQEHDXWKHQWLFDWHGWRWKHV\VWHP
,QRWKHUZRUGVWKHUH·VQRWKLQJLQ(-%DERXWKRZ\RXZLOONQRZWKDWVD\WKHSHUVRQORJJLQJLQDV
-DFN2·%U\DQUHDOO\LV-DFN2·%U\DQ7KLVPLJKWKDSSHQLQDYDULHW\RIZD\VDOWKRXJKRQHW\SLFDO
RSWLRQLVWRKDYHFOLHQWVDXWKHQWLFDWHWKURXJKWKHZHEWLHU WKH\ORJLQXVLQJDEURZVHU RID-((
IULHQGO\ZHEVHUYHU

ƒ 7KHVHFXULW\LQWKHUHDORSHUDWLQJHQYLURQPHQW³WKHFRPSDQ\UXQQLQJWKHDSSOLFDWLRQ³PXVWKDYH
DVHFXULW\VWUXFWXUHLQSODFHDQGLQDIRUPDWWKDW\RXUVSHFLILF(-%VHUYHUFDQKRRNLQWR2UDW
WKHYHU\OHDVW\RXQHHGDVHUYHUWKDWOHWV\RXVSHFLILFDOO\FRQILJXUHDVHFXULW\UHDOP(YHQLILW·V
QRWKLQJPRUHWKDQDOLVWRIQDPHVSDVVZRUGVDQGWKH¶UROHV·WKRVHQDPHVEHORQJWR\RXVWLOO
QHHGVRPHLQIUDVWUXFWXUHRXWVLGHRI(-%

 &KDSWHU
VHFXULW\LQ(-%

0W_\WLW[MK]ZQ\aQV-2*
0\ MRE LV PRUH LQYROYHG,GHFLGH
0\MRELVHDV\0RVWRI
ZKLFKUROHVPDNHVHQVHLQWKHDSSOLFDWLRQ
WKHWLPH,GRQ·WHYHQKDYHWR )RU%LOO·VSD\UROOEHDQV SOXV,DGGHG
WKLQNDERXWVHFXULW\ZKHQ,·PZULWLQJD VRPHRIP\RZQEHDQVWRPDNHWKHFRPSOHWH
EHDQ$QGWKDW·VJRRGEHFDXVHP\ DSS ,FKRVH3D\UROO$GPLQ3D\UROO$VVLVWDQW
SKLORVRSK\LV´6HFXULW\LVKDUG DQG3D\UROO'LUHFWRUDVWKHUROHV7KHQ,VHW
GRQ·WGRLWµ XSPHWKRGSHUPLVVLRQVLQWKH''WRVD\
ZKLFKUROHVFDQFDOOZKLFKPHWKRGV

$QQLHWKH
$SSOLFDWLRQ
$VVHPEOHU

%LOOWKH%HDQ
3URYLGHU

$QQLHFDQVHWXSDVPDQ\UROHVDVVKH
ZDQWVEXWXQOHVV,PDSUHDOSHRSOHRUJURXSV
LQWRWKRVHUROHVLWZRQ·WPDWWHUEHFDXVH
12%2'<ZLOOEHDEOHWRFDOOWKRVHPHWKRGV,
KDYHWRFRQÀJXUHWKHVHUYHUWRXVHWKHUHDOXVHUVDQG
JURXSVLQRXULQWHUQDOHPSOR\HHV\VWHPDQG,KDYHWR
PDSEHWZHHQRXUJURXSVDQG$QQLH·VUROHV6ROHW·V
VHH,·OOPDNHRXU3D\UROO0DQDJHUVJURXSPDS
WRZKDW$QQLHFDOOHG´3D\UROO$GPLQµ

'LFNWKH
'HSOR\HU

\RXDUHKHUH 
WKH$SS$VVHPEOHUDQGVHFXULW\

<PM)XXTQKI\QWV)[[MUJTMZ¼[RWJ"IKKM[[KWV\ZWT
4HE!PP!SSEMBLERKNOWSTHEAPPLICATION3HEKNOWSWHATTHEMETHODSDO
ANDHOWTHEYRESUPPOSEDTOBEUSED4HE!PP!SSEMBLERKNOWSTHEABSTRACT
ROLESTHATMAKESENSELOGICALLY FORTHISAPPLICATION&OREXAMPLE SHEKNOWS
THATTHERESNONEEDFORA-ARKETINGROLEINTHEPAYROLLAPPLICATION"UTSHE
KNOWSTHATTHERESHOULDBEALEASTTHREELEVELSOFACCESSFORTHEAPP
0EOPLEWHOHAVEFULLCONTROLANDCANBOTHVIEWANDCHANGEANEMPLOYEESPAYROLLDATA
0EOPLEWHOCANREADEVERYTHINGANDMODIFYSOMETHINGS
0EOPLEWHOCANREADSOMETHINGS BUTCANTMODIFYANYTHING
3OHERJOBISBROKENINTOTWOPARTS

 'HÀQHWKHUROHV

ƒ )LJXUHRXWZKLFKUROHVPDNHVVHQVHLQWKHDSSOLFDWLRQDQGFRPHXSZLWKQDPHVIRUWKHVHUROHV
6LQFHWKH$SS$VVHPEOHUPLJKWQRWEHZRUNLQJLQWKHUHDOHQYLURQPHQWZKHUHWKHDSSOLFDWLRQZLOO
UXQVKH·VMXVWPDNLQJXSDEVWUDFWQDPHV,QRWKHUZRUGVKHUQDPHVGRQ·WKDYHWRFRUUHVSRQG
WRDQ\WKLQJLQWKHUHDOZRUOG)RUDOOZHFDUHVKHFRXOGQDPHWKHWKUHHUROHV&ORZQ0LPHDQG
-XJJOHU$VORQJDVVKHFDQGHVFULEHWKHPZHOOHQRXJKIRUWKHGHSOR\HUWRILJXUHRXWZKLFKUHDO
SHRSOHEHORQJWRWKRVHUROHVLWGRHVQ·WPDWWHUWKDWWKHQDPHVDUHPDGHXS

ƒ ,QWKHGHSOR\PHQWGHVFULSWRUGHILQHDVHFXULW\UROH!HOHPHQWIRUHDFKUROHLQWKH
DSSOLFDWLRQ

ƒ ,QWKHGHSOR\PHQWGHVFULSWRUXVHWKHUROHQDPH!HOHPHQWWRGHILQHWKHPDGHXSQDPHIRU
WKLVUROH

 $VVLJQPHWKRGSHUPLVVLRQV

ƒ )LJXUHRXWWKHPHWKRGVIURPWKHFOLHQWYLHZWRZKLFKHDFKRIWKHUROHVVKRXOGKDYHDFFHVV
5HPHPEHUWKHFOLHQWYLHZLQFOXGHVQRWRQO\WKHPHWKRGVWKH%HDQ3URYLGHUGHFODUHGLQWKH
KRPHDQGFRPSRQHQWLQWHUIDFHRIWKHEHDQEXWDOVRWKHPHWKRGVRIWKHVXSHULQWHUIDFHV
(-%2EMHFW(-%+RPHRU(-%/RFDO2EMHFWDQG(-%/RFDO+RPH

ƒ ,QWKHGHSOR\PHQWGHVFULSWRUGHILQHDPHWKRGSHUPLVVLRQ!HOHPHQWWKDWOLVWVRQHRU
PRUHVHFXULW\UROHVDQGRQHRUPRUHPHWKRGV

ƒ ,IVKHFKRRVHVWKH$SS$VVHPEOHUFDQFDQXVHWKHXQFKHFNHG!HOHPHQWWRLQGLFDWHWKDW
DSDUWLFXODUPHWKRGGRHVQ·WUHTXLUHDQ\DXWKRUL]DWLRQ LQRWKHUZRUGVDQ\ERG\FDQFDOOLW 

ƒ ,IVKHFKRRVHVVKHFDQXVHWKHH[FOXGHOLVW!HOHPHQWWRGHILQHDOLVWRIPHWKRGVWKDW
QRERG\FDQFDOOHYHU,QRWKHUZRUGVQRUROHZLOOEHDEOHWRFDOOWKHPHWKRGVRQWKHH[FOXGHOLVW

 &KDSWHU
VHFXULW\LQ(-%

WKHUH DUH QR 6KDUSHQ \RXU SHQFLO


'XPE 4XHVWLRQV
Q: 9OUMENTIONANEXCLUDE LIST /RRNDWWKHIROORZLQJDSSOLFDWLRQVDQGWU\WR
)FNOBODYWILLBEALLOWEDTOCALLTHE FRPHXSZLWKVHFXULW\UROHVWKDWPLJKWPDNH
METHOD THENWHYISTHEMETHOD VHQVHIRUWKHVHDSSOLFDWLRQV/DWHUZH¶OO¿JXUH
THERE RXWZKLFKPHWKRGVHDFKRIWKHUROHVVKRXOGEH
DOORZHGWRFDOO
A: 2EMEMBER BEANSAREREUSABLE
COMPONENTS MEANTTOBEASSEMBLED
INMULTIPLEAPPLICATIONS!METHOD $QLQYHQWRU\V\VWHPIRUDQRQOLQHVWRUHNHHSV
THATMAKESSENSEINONEAPPLICATION WUDFNRISURGXFWVVROGDQGVKLSSHGLQYHQWRU\
MIGHTNOTMAKESENSEINANOTHER&OR OHYHOVDQGSULFHV
EXAMPLE A0RODUCT)NVENTORYBEAN
THATREPRESENTSPRODUCTSINADATABASE
MIGHTHAVEMETHODSFORANINVENTORY
ADMINISTRATORTOADDPRODUCTSOR
CHANGEPRICES ETC BUTACLIENTCATALOG
PROGRAMUSINGTHATSAMEBEANSHOULD
NEVERNEEDTOSEEANYTHINGBUTTHE
READ ONLYMETHODSIEJUSTTHEGETTERS 
$QDSSOLFDWLRQIRUUHVHUYLQJDQGERRNLQJGXGH
UDQFKYDFDWLRQVWKURXJKDWUDYHODJHQW

Q: )WOULDTHINKTHATTHEPERSON
WRITINGTHEBEANSWOULDBETHEONE
WHO2%!,,9KNOWSWHATTHEROLES
SHOULDBE

A: 2EMEMBER BEANSAREREUSABLE
COMPONENTS9ES WEJUSTSAIDTHATIN $UXOHEDVHGSURGXFWUHFRPPHQGDWLRQV\VWHP
THEPREVIOUSQUESTION BUTITWORKS WKDWDVNVWKHXVHUDVHULHVRITXHVWLRQVDQGWKHQ
HERETOO4HE"EAN0ROVIDERSHOULD JLYHVDSSURSULDWHDGYLFHRQZKLFKSURGXFWWKH
NOTKNOWEXACTLYHOWTHESEBEANS XVHUVKRXOGSXUFKDVH
AREBEINGUSED)FHEGETSTOOSPECIFIC
WHENHEDESIGNSTHECODEANDWRITES
THEBEANS THENTHEBEANSPROBABLY
WONTWORKWELLOUTSIDETHESPECIFIC
PAYROLLAPPLICATIONTHATHEHASINMIND
/NLYTHE!PPLICATION!SSEMBLERKNOWS
FORSUREHOWTHEDIFFERENTPIECESOFTHE
APPLICATIONRELATEDTOONEANOTHER AND
WHICHROLESMAKESENSE4HEREISONE
SMALLEXCEPTIONTOTHISTHATWELLTALK
ABOUTLATERINTHECHAPTER WHENWE $QRQOLQHPDWFKPDNLQJSHUVRQDODGVHUYLFH
LOOKAT@PROGRAMMATICSECURITY

\RXDUHKHUH 
GHFODUDWLYHVHFXULW\

,MNQVQVO\PMZWTM[
<PM$[MK]ZQ\aZWTM&MTMUMV\

&UHDWHWKHVHFXULW\UROHVLQWKHDVVHPEO\GHVFULSWRU!SDUWRIWKH
GHSOR\PHQWGHVFULSWRU5HPHPEHUWKHGHSOR\PHQWGHVFULSWRUKDVWZR
SDUWV

7KHHQWHUSULVHEHDQV!VHFWLRQWKDW¶VFUHDWHGE\WKH%HDQ3URYLGHU
DQGGHVFULEHVHDFKEHDQLQWKHDSSOLFDWLRQ

7KHDVVHPEO\GHVFULSWRU!SDUWWKDW¶VFUHDWHGE\WKH$SS$VVHPEOHU
DQGGHVFULEHVFKDUDFWHULVWLFVRIWKHDSSOLFDWLRQDVDZKROHLQFOXGLQJWKH
ZD\VLQZKLFKEHDQVUHIHUWRRQHDQRWKHUPRVWVHFXULW\LQIRUPDWLRQDQG
WUDQVDFWLRQDWWULEXWHV

DVVHPEO\GHVFULSWRU!

VHFXULW\UROH!
UROHQDPH!3D\UROO'LUHFWRUUROHQDPH!
VHFXULW\UROH!

VHFXULW\UROH!
UROHQDPH!3D\UROO$GPLQUROHQDPH!
VHFXULW\UROH!

VHFXULW\UROH!
UROHQDPH!3D\UROO$VVLVWDQWUROHQDPH!
VHFXULW\UROH!

DVVHPEO\GHVFULSWRU!
the only element yo mu
<security-role> elemeu nt st have in a
is <role-name>

 &KDSWHU
VHFXULW\LQ(-%

,MNQVQVO\PMZWTM[IJM\\MZ_Ia
<PM$[MK]ZQ\aZWTM&MTMUMV\_Q\PLM[KZQX\QWV[

'HVFULSWLRQVDUHRSWLRQDOHOHPHQWVIRUWKH
VHFXULW\UROH!HOHPHQW
%XWWKLQNDERXWLW :KDW·VWKH
GLIIHUHQFHEHWZHHQ
7KLQNDERXWWKHSRRURYHUZRUNHGXQGHUSDLG 3D\UROO$GPLQDQG
GHSOR\HU ZKLFKLQUHDOLW\LVSUREDEO\\RX 'LUHFWRU":KDWZDV
VKHWKLQNLQJ"""
VLQFHFKDQFHVDUHJRRGWKDW\RX¶UHZHDULQJDOO
WKUHHKDWV%HDQ3URYLGHU$SS$VVHPEOHUDQG
'HSOR\HU²DQGZKDWWKHKHFNSUREDEO\VRPH
6\V$GPLQLQWKHUHWRR 

+H·VQRWDPLQGUHDGHU
DVVHPEO\GHVFULSWRU!

VHFXULW\UROH!
GHVFULSWLRQ!
ke it M UC H
7KLVUROHLVIRUWKHHPSOR\HHVZKRKDYHWKH
descriptions ma r to
 SRZHUWRYLHZDQGFKDQJHDOOHPSOR\HHSD\UROO
easier for th e de plo ye
ct LQIRUPDWLRQ
raGHVFULSWLRQ!
map the made-up abstou ps
roles to the REAL gr e th
UROHQDPH!3D\UROO'LUHFWRUUROHQDPH!
e
in the comp an y wh er VHFXULW\UROH!
application will run.
VHFXULW\UROH!
GHVFULSWLRQ!
7KLVUROHLVIRUWKHHPSOR\HHVZKRKDYHWKH
 SRZHUWRYLHZDOOHPSOR\HHLQIRUPDWLRQDQG
 FKDQJHVRPHSLHFHV
GHVFULSWLRQ!
UROHQDPH!3D\UROO$GPLQUROHQDPH!
VHFXULW\UROH!

VHFXULW\UROH!
GHVFULSWLRQ!
7KLVUROHLVIRUWKHHPSOR\HHVZKRKDYHWKH
 SRZHUWRYLHZDOOHPSOR\HHSD\UROO
 LQIRUPDWLRQ
GHVFULSWLRQ!
UROHQDPH!3D\UROO$VVLVWDQWUROHQDPH!
VHFXULW\UROH!

DVVHPEO\GHVFULSWRU!

\RXDUHKHUH 
GHFODUDWLYHVHFXULW\

,MNQVQVO\PMUM\PWLXMZUQ[[QWV[
<PM$UM\PWLXMZUQ[[QWV&MTMUMV\

(YHU\WKLQJLQDEHDQ¶VKRPHDQGFRPSRQHQWLQWHUIDFHLVSRWHQWLDOO\FDOODEOH
E\FOLHQWV1RZWKDWWKH$SS$VVHPEOHUKDVGH¿QHGWKHUROHVVKHFDQGH¿QH
ZKLFKPHWKRGVHDFKUROHLVDOORZHGWRFDOO$VVKHGLGZLWKWKHVHFXULW\UROH
GH¿QLWLRQVVKH¶OOSXWWKHPHWKRGSHUPLVVLRQVLQWKHDVVHPEO\GHVFULSWRU!
VHFWLRQRIWKHGHSOR\PHQWGHVFULSWRU

DVVHPEO\GHVFULSWRU!
A method permissth ion starts
says which
with a role, an beenans this role
d
methods in which
PHWKRGSHUPLVVLRQ!
UROHQDPH!3D\UROO'LUHFWRUUROHQDPH!
is allowed to call
PHWKRG!
HMEQDPH!&KDQJH3D\HMEQDPH!
PHWKRGQDPH! PHWKRGQDPH!
this method permission
client in the role of ÔPasayrys, ÒA
PHWKRG!

PHWKRG! DirectorÕ is allowed to ca oll


HMEQDPH!(PSOR\HHHMEQDPH! methods in the ChangePa ll ALL
PHWKRGQDPH! PHWKRGQDPH! client view (i.e. the home y beanÕs
PHWKRG! component interfaces) an and
methods in the Employee d ALL
PHWKRGSHUPLVVLRQ! client view. beanÕs

PHWKRGSHUPLVVLRQ!
UROHQDPH!3D\UROO$GPLQUROHQDPH!

t in
PHWKRG!
pe r m is si o n says ÒA clienÕ can
this in
ÔPayroll Adm
HMEQDPH!&KDQJH3D\HMEQDPH!
PHWKRGQDPH!UHLPEXUVHPHWKRGQDPH! the role ofimburse and giveBonus ,
PHWKRG! call the re f the ChangePay bean
methods o tSalary method of
PHWKRG!
and the geyee bean.
the Emplo
HMEQDPH!&KDQJH3D\HMEQDPH!
PHWKRGQDPH!JLYH%RQXVPHWKRGQDPH!
PHWKRG!

PHWKRG!
HMEQDPH!(PSOR\HHHMEQDPH!
PHWKRGQDPH!JHW6DODU\PHWKRGQDPH!
PHWKRG!

PHWKRGSHUPLVVLRQ!

DVVHPEO\GHVFULSWRU!

 &KDSWHU
VHFXULW\LQ(-%

,MNQVQVO\PMUM\PWLXMZUQ[[QWV[
<PZMMLQNNMZMV\_Ia[\W[XMKQNaUM\PWL[
<RXMXVWVDZWZRZD\VWRVSHFLI\DEHDQ¶VPHWKRGQDPHWKHZLOGFDUG ZKLFK
PHDQV$//PHWKRGVLQWKHEHDQDQGWKHDFWXDOQDPHRIWKHPHWKRG%XWWKHQDPH
DORQHLVQ¶WDOZD\VHQRXJK:HWDONHGDERXWWKLVEHIRUH²LQWKHWUDQVDFWLRQVFKDSWHU
ZHIDFHGWKHVDPHSUREOHPZKHQZHKDGWRVSHFLI\WUDQVDFWLRQDWWULEXWHV:KDW
KDSSHQVLIWKHPHWKRGLVRYHUORDGHG"
&KDQFHVDUH\RXUGHVLJQZLOOWUHDWDOOYHUVLRQVRIDQRYHUORDGHGPHWKRGLQWKHVDPH
ZD\%XWWKHUH¶VDQRSWLRQDOPHWKRGSDUDPV!HOHPHQWMXVWLQFDVH\RXZDQWVD\
DSDUWLFXODUVHFXULW\UROHWRKDYHSHUPLVVLRQIRURQO\RQHYHUVLRQRIDQRYHUORDGHG
PHWKRGEXWQRWWKHRWKHUV

 %\ZLOGFDUG IRU$//PHWKRGV
PHWKRG!
HMEQDPH!:RUOG'RPLQDWLRQHMEQDPH! an asterisk (*) is
PHWKRGQDPH! PHWKRGQDPH! wildcard that mea the
PHWKRG! ALL methods ns
beanÕs interfacesin the

 %\QDPHDORQHIRUDOOPHWKRGVZLWKWKLV
QDPHUHJDUGOHVVRIDUJXPHQWVRUZKHWKHU
WKH\·UHLQWKHKRPHRUFRPSRQHQWLQWHUIDFH
PHWKRG! ALL
HMEQDPH!:RUOG'RPLQDWLRQHMEQDPH! this means thathods
PHWKRGQDPH!WDNH2YHUPHWKRGQDPH!
et
overloaded m verÕ will be
PHWKRG! named ÔtakeO e role.
accessible to th

 %\QDPHDQGDUJXPHQWVWRGLVWLQJXLVKEHWZHHQ
RYHUORDGHGPHWKRGV
PHWKRG!
HMEQDPH!:RUOG'RPLQDWLRQHMEQDPH!
this speciÞes O
takeOver methoNdLY the
PHWKRGQDPH!WDNH2YHUPHWKRGQDPH!
PHWKRGSDUDPV!
PHWKRGSDUDP!6WULQJPHWKRGSDUDP! takes a String, bu that
PHWKRGSDUDPV! no other overloadedt
PHWKRG! versions.

\RXDUHKHUH 
GHFODUDWLYHVHFXULW\

0HWKRGSHUPLVVLRQVLQWHUDFW
ZLWKRQHDQRWKHUDVDXQLRQ
-ETHODPERMISSIONSDONOTRELATETOONEANOTHERINTHESAMEWAYTHATTRANSACTIONATTRIBUTES
DO7ITHTRANSACTIONATTRIBUTES USINGAWILDCARDSAYS h%VERYMETHODINTHISBEANWILLHAVE
THISATTRIBUTEUNLESS)SAYOTHERWISE BYNAMINGASPECIlCMETHODINADIFFERENTCONTAINER
TRANSACTIONTAGv)NOTHERWORDS NAMINGASPECIlCMETHODOVERRIDESTHEWILDCARDSETTING
"UTWITHMETHODPERMISSIONS USINGTHEWILDCARDSAYS h!LLMETHODSINTHISBEANCANBE
ACCESSEDBYTHISROLEv.OTHINGELSEYOUDOINANYOTHERMETHODPERMISSIONWILLCHANGETHAT

7UDQVDFWLRQDWWULEXWHV
FRQWDLQHUWUDQVDFWLRQ! 7KLVVD\VWKDWDOOPHWKRGVLQ
PHWKRG! %LJ%HDQZLOOXVHWKH5HTXLUHV1HZ
HMEQDPH!%LJ%HDQHMEQDPH! DWWULEXWH(;&(37WKH
PHWKRGQDPH! PHWKRGQDPH! XVH2OG'DWDEDVHPHWKRGZKLFKZLOO
PHWKRG! XVHWKH1RW6XSSRUWHGDWWULEXWH
WUDQVDWWULEXWH!5HTXLUHV1HZWUDQVDWWULEXWH!
FRQWDLQHUWUDQVDFWLRQ! 7KHVHFRQGFRQWDLQHUWUDQVDFWLRQ!
RYHUULGHVWKHZLOGFDUGRQHDQG
FRQWDLQHUWUDQVDFWLRQ!
PHWKRG! WDNHVWKHXVH2OG'DWDEDVHPHWKRG
HMEQDPH!%LJ%HDQHMEQDPH! RXWRIWKH5HTXLUHV1HZOLVWDQG
PHWKRGQDPH!XVH2OG'DWDEDVHPHWKRGQDPH! PRYHVLWWRWKH1RW6XSSRUWHGOLVW
PHWKRG!
WUDQVDWWULEXWH!1RW6XSSRUWHGWUDQVDWWULEXWH!
FRQWDLQHUWUDQVDFWLRQ!

0HWKRGSHUPLVVLRQV
7KLVVD\VWKDWWKHUROH0LQLRQ
PHWKRGSHUPLVVLRQ! FDQDFFHVV$//PHWKRGVRI
UROHQDPH!0LQLRQUROHQDPH! :RUOG'RPLQDWLRQ
PHWKRG!
HMEQDPH!:RUOG'RPLQDWLRQHMEQDPH!
$1'WKDWWKH%RVVUROHFDQDFFHVV
PHWKRGQDPH! PHWKRGQDPH! 21/<WKHOHDUQ3ODQPHWKRGRI
PHWKRG! :RUOG'RPLQDWLRQ
PHWKRGSHUPLVVLRQ!
7KHVHFRQGPHWKRGSHUPLVVLRQ!
DGGVWRWKHILUVW
PHWKRGSHUPLVVLRQ!
UROHQDPH!%RVVUROHQDPH!

PHWKRG!
HMEQDPH!:RUOG'RPLQDWLRQHMEQDPH!
PHWKRGQDPH!OHDUQ3ODQPHWKRGQDPH!
PHWKRG!
PHWKRGSHUPLVVLRQ!

 &KDSWHU
VHFXULW\LQ(-%

:DWFKRXWIRUXQFKHFNHG!
4HINKOFUNCHECKEDASSTANDINGINFORAROLE NAMEINAMETHOD
PERMISSION"UTBECAUSEOFTHEWAYMETHODPERMISSIONSINTERACT IFYOUHAVE
AMETHODPERMISSIONDElNEDFORAMETHODUSINGUNCHECKED ITWONT
MATTERWHATOTHERMETHODPERMISSIONSYOUSETUPFORTHATMETHOD/NELITTLE
UNCHECKEDANDITMEANSTHEMETHODISFREEFORANYONETOCALL REGARDLESSOF
THEIRPRINCIPALORSECURITYROLE

0HWKRGSHUPLVVLRQVZLWKXQFKHFNHG!

PHWKRGSHUPLVVLRQ! This says that Acc


allowed to call th ountManager is
UROHQDPH!$FFRXQW0DQDJHUUROHQDPH!
e
method on the Acc increaseLimit()
ount bean.
PHWKRG!
HMEQDPH!$FFRXQWHMEQDPH!
PHWKRGQDPH!LQFUHDVH/LPLWPHWKRGQDPH!
PHWKRG!
PHWKRGSHUPLVVLRQ

PHWKRGSHUPLVVLRQ! But who cares??!! By say tha


there is a method-permissioingn for t
XQFKHFNHG! Account that says ALL me
>
<uncheckedc/e of unchecked, it doesnÕt matterthowhds are
goes in p la PHWKRG!
else we say about the Account at
the <role-na
me> HMEQDPH!$FFRXQWHMEQDPH!
methods. They are all uncheckedbeanÕs
PHWKRGQDPH! PHWKRGQDPH! !
element PHWKRG!
PHWKRGSHUPLVVLRQ



7KHXQFKHFNHG!HOHPHQW
RYHUULGHV$//RWKHUPHWKRG
SHUPLVVLRQVIRUDPHWKRG

\RXDUHKHUH 
GHFODUDWLYHVHFXULW\

:DLW,MXVWWKRXJKWRI
VRPHWKLQJHOVH6XSSRVH,KDYH
WKHVDPHPHWKRGQDPHLQ%27+
WKHKRPHDQGFRPSRQHQWLQWHUIDFH"
$QG,ZDQWWKHPWRKDYHGLIIHUHQW
DFFHVVFRQWUROV"

+RZWRGHDOZLWKDEHDQWKDWKDVWZR
PHWKRGVRIWKHVDPHQDPHEXWRQHLV
LQWKHKRPHLQWHUIDFHDQGWKHRWKHULV
LQWKHFRPSRQHQWLQWHUIDFH
<HVZHOLHGWKHUHDUHDFWXDOO\IRXUZD\VWRGHVFULEH
DPHWKRGE\ZLOGFDUG E\QDPHE\QDPHDQG
SDUDPHWHUVDQGE\QDPHDQGLQWHUIDFH

PHWKRG!
HMEQDPH!:RUOG'RPLQDWLRQHMEQDPH!
PHWKRGLQWI!5HPRWHPHWKRGLQWI!
PHWKRGQDPH!WDNH2YHUPHWKRGQDPH!
PHWKRG!

7KHYDOXHRIPHWKRGLQWI!PXVW
EHRQHRIWKHVHIRXU

PHWKRGLQWI!5HPRWHPHWKRGLQWI!

PHWKRGLQWI!+RPHPHWKRGLQWI!

PHWKRGLQWI!/RFDOPHWKRGLQWI!

PHWKRGLQWI!/RFDO+RPHPHWKRGLQWI!

 &KDSWHU
VHFXULW\LQ(-%

<PM,MXTWaMZ¼[ RWJ"UIXXQVOIK\]ITP]UIV[\WIJ[\ZIK\ZWTM[
4HE!PP!SSEMBLERKNOWSTHEAPPLICATION BUTTHE$EPLOYERKNOWSTHE
OPERATIONALENVIRONMENT7EANDTHESPEC USETHETERMOPERATIONALENVIRONMENT
ASAFANCYWAYOFSAYING THEBUSINESSWHERETHEAPPLICATIONISRUNNING-AYBETHE
COMPANYBOUGHTTHEAPPOFF THE SHELF-AYBETHEYBUILTITIN HOUSE$OESNT
MATTER4HE$EPLOYERWORKSTHERE(EKNOWSTHEPLACE-OSTIMPORTANTLY HE
KNOWSHOWSECURITYISMANAGEDATTHECOMPANYFOREXAMPLE THECOMPANY
MIGHTHAVEALLTHEEMPLOYEENAMESANDPASSWORDSASPARTOFAN,$!0SYSTEM 
(ESTHEBESTPERSONTOKNOWHOWTHEABSTRACTROLESTHE!PP!SSEMBLERPUTIN
SHOULDMAPTOREALPEOPLEANDGROUPSINHISCOMPANY
(EHASTWOMAINJOBS

 $VVLJQLQJWKHVHFXULW\GRPDLQDQGSULQFLSDOUHDOPWRWKHDSS

ƒ 7KHFRPSDQ\ZKHUHWKHDSSLVUXQQLQJKDVUHDOHPSOR\HHV6RPHKRZWKRVHHPSOR\HHVKDYHD
ZD\RIDXWKHQWLFDWLQJWKHPVHOYHVWRDVHUYHUSUREDEO\ZLWKDQDPHDQGDSDVVZRUG7KHVHFXULW\
LQIRUPDWLRQLQWKHRSHUDWLRQDOHQYLURQPHQWKDVWREHFRQILJXUHGLQWRWKHVHUYHULQVXFKDZD\WKDW
WKHVHUYHUFDQWHOOZKRLVDFWXDOO\FDOOLQJWKHPHWKRG

7KLVKDSSHQVRXWVLGHRIWKH(-%VSHFLILFDWLRQ,QRWKHUZRUGVLW·VYHQGRUVSHFLILF

 0DSSLQJXVHUVDQGRUJURXSVWRWKHDEVWUDFWVHFXULW\UROHV

ƒ 7KH$SS$VVHPEOHUPDGHXSWKHDEVWUDFWVHFXULW\UROHVWKDWEHVWILWWKHSD\UROODSS%XWWKRVH
UROHVGRQ·WPHDQDQ\WKLQJLQWKHFRPSDQ\ZKHUHWKHDSSLVJRLQJWRUXQ7KH'HSOR\HUKDVWR
PDSEHWZHHQZKDW$QQLH WKH$SS$VVHPEOHU GHILQHG3D\UROO'LUHFWRU3D\UROO$GPLQ3D\UROO
$VVLVWDQWWRZKDWUHDOO\H[LVWVLQWKH'HSOR\HU·VFRPSDQ\3D\UROO0DQDJHU3D\UROO6XSHUYLVRU
+5$GPLQ

7KLVWRRKDSSHQVRXWVLGHRIWKH(-%VSHFLILFDWLRQLQDYHQGRUVSHFLILFZD\
erm
ec uses the t
Note: the sprity rolesÓ to refer to
Òlogical secue calling the Òabstract
what weÕr lesÓ, but we like the
HGWR security ro ractÓ. Just know that ct
)RUWKHH[DP\RXGRQ¶WQH term Òabst rity rolesÓ and Òabstraing.
SOR \HUGR HVWKLV
Òlogical secuolesÓ mean the same th
NQRZ+2:WKH 'H
WKLQJV
RQO\WKDWKH0867GRWKHVH security r
H[SHFW\RXWRNQRZDERXW
5HPHPEHUWKHH[DPGRHVQ¶W
W\%XW\RX'2KDYHWR
DQ\YHQGRUVSHFL¿FIXQFWLRQDOL
VSRQVLELOLW\WRGRWKLV
NQRZWKDWLWLVWKH'HSOR\HU¶VUH
ZHHQUH DOK XPDQVDQGWKH$SS
OHYHORIPDSSLQJEHW
$VVHPEOHU¶VDEVWUDFWUROHV

\RXDUHKHUH 
(-%VHFXULW\

8ZQVKQXIT[IVL:WTM[=[MZ[IVL/ZW]X[
$AN*OHNSSONAUTHENTICATESTOTHESYSTEMUSINGHISLOGINNAMEANDPASSWORD ANDISNOW
REPRESENTEDBYANINSTANCEOFTYPE0RINCIPAL)NAVENDOR SPECIlCWAY THE$EPLOYERHASTOLD
THE%*"APPLICATIONTHAT$ANS0RINCIPALISASSOCIATEDWITHONEORMOREROLES3OWHENEVER
$AN ASTHECLIENT CALLSAMETHODONONEOFTHEBEANSCLIENTINTERFACES HIS0RINCIPALAND
THEROLESTOWHICHTHAT0RINCIPALHASBEENASSIGNED PROPAGATESWITHTHECALL4HATMEANS
EVERYCALLONTHECONCEPTUAL CALLSTACKWILLSEE$ANS0RINCIPALASTHECALLER

,Q(-%
 3ULQFLSDO
7KHFOLHQWDXWKHQWLFDWHGWRWKHV\VWHPLVUHSUHVHQWHGE\DMDYDVHFXULW\3ULQFLSDOREMHFW7KLV
3ULQFLSDOLVDQDEVWUDFWUHSUHVHQWDWLRQRIVRPHWKLQJDVVRFLDWHGZLWKDQDPHEXWWKHUH·VQRJXDUDQWHH
WKDWWKH3ULQFLSDOQDPHPDWFKHVWKHORJLQQDPHRIWKHFOLHQW,WDOOGHSHQGVRQKRZ\RXUV\VWHP
KDQGOHVVHFXULW\DXWKHQWLFDWLRQ$QGGRQ·WEHWRRDWWDFKHGWRWKLQNLQJWKDWD3ULQFLSDOLVDOZD\VD
DEVWUDFWDFWRULQ XQLTXHLQGLYLGXDO6RPHWLPHVD3ULQFLSDOUHSUHVHQWVDODUJHUJURXSOLNHVD\6\V$GPLQ7KH3ULQFLSDO
WKHV\VWHP XVXDOO\ LVDVVRFLDWHGZLWKRQHRUPRUHDEVWUDFWVHFXULW\UROHVWKDWWKH$SS$VVHPEOHUGHILQHG$ERXWWKHRQO\
PDSVWRDSHUVRQ XVHIXOWKLQJDEHDQFDQGRZLWKD3ULQFLSDOREMHFWLVJHWLWVQDPH D3ULQFLSDOJHW1DPH EXWWKDW·V
ULVN\EHFDXVH\RXZRQ·WEHDEOHWRNQRZH[DFWO\ZKDWWKDWQDPHUHSUHVHQWVXQOHVV\RXNQRZWKH
H[DFWHQYLURQPHQWLQZKLFKWKHEHDQLVUXQQLQJ<XFN

0DQDJHU  5ROH
.H\$FFRXQW ,Q(-%DVHFXULW\UROHLVDQDEVWUDFWUROHGHILQHGE\WKH$SS$VVHPEOHUDQGDOWKRXJKLWGRHVQ·WPDWFK
&XVWRPHU
DQ\WKLQJLQWKHUHDOZRUOGWKH'HSOR\HUZLOOPDSUHDOXVHUVDQGJURXSVLQWKHFRPSDQ\ZKHUHWKH
3D\UROO'LUHFWRU
6ZHGLVK7HDP DSSOLFDWLRQLVUXQQLQJWRWKHDEVWUDFWUROHV)RUH[DPSOHWKH´(PSOR\HHµDEVWUDFWUROHPLJKWPDSWR
6ZLQJ'DQFHUV WKH´6ODYHVµJURXSLQWKH'HSOR\HU·VFRPSDQ\

,QWKHRSHUDWLRQDOHQYLURQPHQW
 8VHUV
8VHUVDUHSHRSOHLQWKHUHDOHQYLURQPHQW5HDOXVHUV/LYLQJEUHDWKLQJKXPDQV7KH\·UHUHSUHVHQWHG
LQWKHUHDOHQYLURQPHQWLQVRPHZD\EXWRIFRXUVHLQ(-%ZHKDYHQRZD\RINQRZLQJLQDGYDQFH
WKDWVD\WKHFRPSDQ\XVHVDQ/'$3VHUYHUWRKROGWKHXVHUVHFXULW\LQIRUPDWLRQ7\SLFDOO\XVHUV
DUHPDSSHGWRDORJLQQDPHDQGSDVVZRUGDQGWKDWLQIRUPDWLRQLVVWRUHGVRPHZKHUHDQGLI\RX·UH
OXFN\DQGPDNHWKHULJKWVHUYHUGHFLVLRQ\RXU(-%VHUYHUFDQEHFRQILJXUHGGLUHFWO\WRWKHV\VWHP
KROGLQJ\RXUVHFXULW\LQIR3UHWW\PXFKWKHODVWWKLQJ\RXZDQWWRGRLVVLWWKHUHDQGW\SHXVHU
QDPHVDQGSDVVZRUGVLQWR\RXU(-%VHUYHU·VSURSHUW\ILOHVVLPSO\EHFDXVH\RXU(-%VHUYHUZDVQ·W
FRPSDWLEOHZLWKZKDWHYHU\RXUFRPSDQ\LVXVLQJWRVWRUHXVHUVHFXULW\LQIRUPDWLRQ
&XVWRPHU  *URXSV
3D\UROO0DQDJHU
6ZHGHQ 7\SLFDOO\VHFXULW\LQIRUPDWLRQRUJDQL]HVXVHUVLQWRRQHRUPRUHJURXSVRIWHQE\GHSDUWPHQWRU
6DOVD'DQFHUV ORFDWLRQ7KH'HSOR\HUFDQRIWHQPDSGLUHFWO\IURPJURXSVWRDEVWUDFWVHFXULW\UROHVEXWKHPLJKWDOVR
KDYHWRPDSLQGLYLGXDOXVHUV
 &KDSWHU
VHFXULW\LQ(-%

2.,NQRZ,·PQRWVXSSRVHG
WREHWKLQNLQJDERXWWKLVZKHQ,ZULWH
P\FRGHEXWWKHUH·VVRPHWKLQJEXJJLQJPH
/RRNLQJDWWKHGHSOR\PHQWGHVFULSWRULWOHWV
\RXVD\ZKRFDQDFFHVVZKLFKEHDQW\SH
%XW\RXFDQ·WVD\ZKLFKLQVWDQFHRI
WKDWEHDQW\SH

, NQRZ ZKDW KH·V JHWWLQJ DWEHFDXVH


,ZDVWKLQNLQJWKHVDPHWKLQJ:KDWGR
,GRLI,ZDQWHPSOR\HHVWREHDEOHWRKDYH
DFFHVVWRVRPHRIWKHLURZQGDWD³EXWRQO\
WKHLU2:1GDWD+RZGR,VHWLQGLYLGXDOHQWLW\
OHYHOFRQWURO"2WKHUZLVH,·GKDYHWRHLWKHUEORFN
$//HPSOR\HHVIURPWKHVHPHWKRGVRUOHW$//
HPSOR\HHVKDYHDFFHVVWRWKHPHWKRGVWKDWZRXOG
ZRUNRQ$1<HQWLW\EHDQ+RZFDQ,OHWWKHUROH
RI¶HPSOR\HH·FDOOVD\JHW6DODU\ EXWRQO\
VHHKLV2:1VDODU\"

\RXDUHKHUH 
SURJUDPPDWLFVHFXULW\

+TI[[TM^MT^[QV[\IVKMTM^MT[MK]ZQ\a
?PMVLMKTIZI\Q^M[MK]ZQ\aQ[VW\MVW]OPaW]UQOP\VMMLXZWOZIUUI\QK
[MK]ZQ\a\WZM[\ZQK\IKKM[[\WI[XMKQNQKQV[\IVKMWNIJMIV
3OFAR ALLTHESECURITYWEVELOOKEDATHASBEENDECLARATIVENOTHARD CODEDINTO
THEBEANCLASS$ECLARATIVESECURITYISCOOLBECAUSEITSUPPORTSTHEWHOLEIDEA
OFCOMPONENT BASEDDEVELOPMENTˆYOUCANCUSTOMIZETHEBEANATDEPLOY
TIMEWITHOUTTOUCHINGTHECODE#OMPANY!MIGHTBEUSINGABEANINONE
APPLICATION ANDNEEDAPARTICULARTYPEOFACCESSCONTROLTHATSCOMPLETELY
DIFFERENTFROMTHEWAY#OMPANY"ISUSINGTHATSAMEBEAN/REVENTWOUSES
OFTHESAMEBEANINTHESAMECOMPANYMIGHTNEEDDIFFERENTACCESSCONTROL
"UTDECLARATIVESECURITYISATTHECLASS LEVEL9OUSPECIFYWHICHMETHODSA
PARTICULARROLECANCALL BUTITMEANSTHATROLECANCALLTHEMETHODON!.9
INSTANCEOFTHEBEANCLASS)FYOUNEEDINSTANCE LEVELSECURITY YOUCANTDOIT
INTHEDEPLOYMENTDESCRIPTOR"UTYOUCANDOPROGRAMMATICSECURITY WHICH
OFCOURSEYOUALREADYKNOWYOUVESEENTHETWOSECURITY RELATEDMETHODSIN
3ESSION#ONTEXTAND%NTITY#ONTEXT

6RWKHUH,6
VRPHWKLQJ,FDQSXW
LQP\EHDQFRGH

SXEOLFYRLGGR6HFXULW\ ^
MDYDVHFXULW\3ULQFLSDOS FRQWH[WJHW&DOOHU3ULQFLSDO 
6WULQJQDPH SJHW1DPH 
QRZGRDFRPSDULVRQE\FKHFNLQJWKHQDPH
DJDLQVWWKHSHUVLVWHQW¿HOGLQWKHEHDQ
WKDWVKRXOGPDWFKWKHSULQFLSDOQDPH
`

"UTBECAREFUL4HEREISNOGUARANTEETHATTHENAMECOMINGFROMTHEGET.AME METHOD
ONTHEPRINCIPALMATCHESTHEUSERSLOG INNAME3OYOUHAVETOASSUMETHATASSOON
ASYOUPUTPROGRAMMATICSECURITYINTOYOURBEAN YOUREDRASTICALLYREDUCINGITS
REUSABILITY ANDPORTABILITY!NDITMEANSTHE"EAN0ROVIDERMIGHTNEEDTOBE
MORETIGHTLY COUPLEDTOTHEOPERATIONALENVIRONMENTTHANYOUDNORMALLYWANT
"ECAUSETHE"EAN0ROVIDERISMAKINGANASSUMPTIONTHATTHENAMECOMING
FROMTHEGET.AME METHODWILLMATCHAPERSISTENTlELDINTHEENTITYBEAN
ANDTHATMIGHTNOTBETRUEINALLENVIRONMENTS DEPENDINGONHOWYOURSYSTEM
HANDLESSECURITY

 &KDSWHU
SURJUDPPDWLFVHFXULW\ VHFXULW\LQ(-%

=[QVOXZWOZIUUI\QK[MK]ZQ\a\W
K][\WU\IQTWZIUM\PWL
7EJUSTLOOKEDATGET#ALLER0RINCIPAL TOSEEHOWYOUCOULDlND
OUTEXACTLY7(/THECONTAINERBELIEVESISCALLINGTHEMETHOD"UT
WECANALSOUSETHEIS#ALLER)N2OLE METHODTOTESTWHETHERTHE
PRINCIPALWHOEVERITISANDINTHISCASEWEDONTCARE ISAMEMBER :LWKLV&DOOHU,Q5ROH \RX
OFASPECIlCROLETHATWEDOCAREABOUT)MAGINETHATYOUHAVEA
PRIVATEPRICINGMETHOD CALLEDBYONEOFYOURBUSINESSMETHODS FDQXVHVHFXULW\LQIRUPDWLRQ
THATCHECKSTOSEEIFTHISCUSTOMERAUTHENTICATEDASAMEMBEROF WRWDLORUWKHZD\DPHWKRG
YOURSPECIAL6)0CUSTOMERGROUP)FHEIS YOUTREATHIMDIFFERENTLY
THANIFHEISNT-AYBEYOUGIVEHIMADISCOUNT-AYBEYOURAISE UXQVGHSHQGLQJRQZKLFK
THEPRICE7HATEVERYOURBUSINESSLOGICTELLSYOUTODO UROHFDOOHGWKHPHWKRG
SULYDWHYRLGGHWHUPLQH3ULFH ^ 7KLVLVXVXDOO\127DJRRG
 ZD\WRKDQGOHVHFXULW\7R
LI FRQWH[WLV&DOOHU,Q5ROH ³9,3&XVWRPHU´ ^
WUHDWFXVWRPHUZHOO FRQWURODFFHVVWRDPHWKRG
`HOVH^ \RX·UHPXFKEHWWHURIIXVLQJ
WUHDWKLPOLNHWKHORVHUKHLV
` WKHPHWKRGSHUPLVVLRQV
` WRVWRSDQXQDXWKRUL]HG
"ESIDESTHEOBVIOUSPROBLEMWITHHARD CODINGSECURITYINFORMATION
UROHIURPHYHUFDOOLQJWKH
CUTSDOWNYOURREUSE INCREASESTHECHANCESTHATTHINGSWONT PHWKRG
WORKINAPORTABLEWAY ETC THERESANOTHERBIGPROBLEMˆHOW
THEHECKDOESTHE"EAN0ROVIDERKNOWINADVANCEWHATROLESTHE %XW\RXFDQVWLOO86(WKH
!PP!SSEMBLERISGOINGTOASSIGN
FDOOHU·VUROHLQIRUPDWLRQWR
(EDOESNT/RATLEAST HEPROBABLYSHOULDNT7EKNOW WEKNOW
)NREALITY THE"EAN0ROVIDERAND!PP!SSEMBLERARE IFNOTTHE GRRWKHUQRQVHFXULW\WKLQJV
SAMEPERSON CLOSELYRELATEDPROFESSIONALLY SPEAKING OFCOURSE  LQ\RXUFRGH
"UTWERESTILLPUSHINGFORACOMPONENT BASEDDEVELOPMENTMODEL
HERE ANDATTHEVERYLEAST WEWANTTHE!PP!SSEMBLERTOTAKE
WHATTHE"EAN0ROVIDERHASDONEANDSOMEHOWlTITINTOHEROWN
APPLICATION!NDTHATMIGHTMEANINTEGRATINGTHEBEANWITHBEANS
FROMOTHERPROVIDERS
3ONOWIMAGINETHISSCENARIO!NNIETHE!PP!SSEMBLERIS
BUILDINGANEWAPPFROMFOUREXISTINGBEANS TWOOFWHICHCAME
FROMDIFFERENTPROVIDERS0ROVIDERSWHODIDNTWORKFORTHESAME
COMPANYORKNOWONEANOTHER(OWCOULDTHEYHAVECOMMUNICATED
INADVANCE TOKNOWWHICHROLES!NNIEWASGOINGTOCHOOSEFORHER
APPLICATION

\RXDUHKHUH 
SURJUDPPDWLFVHFXULW\

<PMXZWJTMU_Q\PQ[+ITTMZ1V:WTM
\PM*MIV8ZW^QLMZPIZLKWLM[IZWTMVIUMJ]\PW_LWM[
PMSVW__PI\ZWTM[\PM)XX)[[MUJTMZ_QTT][M')VL
_PI\QN\PMZM¼[UWZM\PIVWVM*MIV8ZW^QLMZ '

,·OOFDOOWKH
ELJDFFRXQWVUROH
¶9,3&XVWRPHUµLQP\
FRGH ,·OOFDOOWKHUROHIRU
LPSRUWDQWDFFRXQWV
´(QOLJKWHQHG&XVWRPHUVµ
6HHWKHSUREOHP",KDYH
WR LQWHJUDWHWKHVHEHDQVLQWRRQHDSS
EXW%LOOSLFNHGWKHQDPH´9,3&XVWRPHUµWR
KDUGFRGHLQWRKLVEHDQDQG5D\6XQVKLQH
WKHUHGHFLGHGWKHUROHVKRXOGEHFDOOHG
´(QOLJKWHQHG&XVWRPHUVµ6RQRZ,KDYHWRVRPHKRZ
PDS7+(,5FRPSOHWHO\PDGHXSQDPHVWRWKH
DEVWUDFWVHFXULW\UROHVWKDW,SXWLQWKHGHSOR\PHQW
GHVFULSWRU,KDYHWRWHOOWKHDSSWKDWERWKRIWKHLU
QDPHV5($//<PHDQ´.H\$FFRXQWVµ$QGKRZZLOO,
HYHQ.12:WKDWWKH\XVHGWKHVHQDPHVLI
,GRQ·WVHHWKHVRXUFHFRGH""" 5D\6XQVKLQH
%LOOSURYLGHGEHDQ$ SURYLGHGEHDQ%

7KH$SS$VVHPEOHUPXVWPDS
$QQLHQHHGVWRXVH%27+ EHWZHHQWKHSURJUDPPHU·V
EHDQVLQKHUDSSEXWVKH
KDUGFRGHG FRPSOHWHO\IDNH 
ZDQWVWRGHÀQHKHUUROH
QDPHDV´.H\$FFRXQWVµ UROHQDPHDQGWKHDEVWUDFW
UROHVKHZDQWVWRGHÀQHIRU
WKLVDSSOLFDWLRQ
DEVWUDFWUROHQDPH.H\$FFRXQWV
EHDQ$UROHQDPH9,3&XVWRPHU
EHDQ%UROHQDPH(QOLJKWHQHG
&XVWRPHUV
ME
d iffe re nt na mes for the SrAto map
three ts the deploye
role!! Annie weran groups to ÒKeyAccountsÓse
REAL custom other two names, but tho he
and not thosecode, and she canÕt touch t
names are in de !
Java source co
 &KDSWHU
SURJUDPPDWLFVHFXULW\ VHFXULW\LQ(-%

0DSGHFODUDWLYHVHFXULW\UROHVWRWKH
SURJUDPPHU·VKDUGFRGHG IDNH UROHV
4HE!PP!SSEMBLERMAPSBETWEENSECURITYROLEREFERENCESHARD CODED
ROLENAMESTHEPROGRAMMERMADEUP ANDSECURITYROLESABSTRACTROLE
NAMESSHECHOSEFORTHISAPP USINGTHEUROHOLQN!ELEMENT

%HDQ3URYLGHU L the
der has to TEL
The Bean Prorvi what he did in code, by
App Assemble<security-role-ref> tag
HQWHUSULVHEHDQV!
VHVVLRQ!
putting in a
2K\HDKWKH$SS
$VVHPEOHUQHHGVWRNQRZWKDW HMEQDPH!6KRSSLQJ&DUWHMEQDPH!
,SXWDUROHQDPHLQP\FRGH,·OO 
PDNHDVHFXULW\UROHUHIHUHQFH VHFXULW\UROHUHI!
LQWKH'',PDNHIRUWKLV GHVFULSWLRQ!
EHDQ WKLVUROHVKRXOGEHDVVLJQHGWRWKH
DFFRXQWVWKDWJHWVSHFLDO9,3SULFLQJ
GHVFULSWLRQ!
UROHQDPH!9,3&XVWRPHUUROHQDPH!
VHFXULW\UROHUHI! t MATCH.
 These names tmusin the ÔrealÕ
VHVVLRQ! You donÕt pu u put in the
HQWHUSULVHEHDQV! role name, yo gu-
the ar
one you used aslerInRole()
ment to isCal
FRQWH[WLV&DOOHU,Q5ROH ³9,3&XVWRPHU´

$SS$VVHPEOHU

,KDYHWRJR
LQWRKLVEHDQGHVFULSWLRQDQG
DGGDUROHOLQN!HOHPHQWIRU
WKLVVHFXULW\UROHUHIHUHQFHVR
The App Assembler ad
WKDWWKH&RQWDLQHUZLOONQRZWKDW
what the Bean Providedsr pua <role-link> to
role-ref>, to map the CO t in his <security-
´9,3&XVWRPHUµUHDOO\PHDQV
´.H\$FFRXQWVµ
VHFXULW\UROHUHI! App AssemblerÕs true abstrDED role to the
act role
GHVFULSWLRQ!
WKLVUROHVKRXOGEHDVVLJQHGWRWKH
DFFRXQWVWKDWJHWVSHFLDO9,3SULFLQJ
GHVFULSWLRQ!
UROHQDPH!9,3&XVWRPHUVUROHQDPH!
UROHOLQN!.H\$FFRXQWVUROHOLQN!
VHFXULW\UROHUHI!

\RXDUHKHUH 
(-%VHFXULW\PDSSLQJ

7KHFRPSOHWHVHFXULW\PDSSLQJSLFWXUH

VHFXULW\UROHUHI! VHFXULW\UROH! XVHUVDQGJURXSV UHDOSHRSOH

$SS$VVHPEOHUPDSVWKH 'HSOR\HUPDSVWKH$SS 6RPHRQHLQWKHRSHUDWLRQDO


SURJUDPPHU·VKDUGFRGHG $VVHPEOHU·VDEVWUDFW HQYLURQPHQWVHWVXSXVHUV
VHFXULW\UROHUHIHUHQFHVWR VHFXULW\UROHVWRXVHUVDQG DQGJURXSVLQWKHUHDO
KHUDEVWUDFWVHFXULW\UROHV JURXSVLQWKH'HSOR\HU·V FRPSDQ\3UREDEO\VRPHNLQG
XVLQJWKHUROHOLQN!HOHPHQW FRPSDQ\XVLQJDYHQGRU RIV\VDGPLQUHVSRQVLEOH
VSHFLÀFPDSSLQJ FRXOGEHD IRUDVVLJQLQJORJLQLQIRDQG
SURSHUWLHVÀOH  SDVVZRUGVWRHPSOR\HHV

:KHUHDQGKRZWKHPDSSLQJKDSSHQV

,QWKH(-% ,QDYHQGRU ,QDFRPSDQ\


'HSOR\PHQW VSHFL¿FZD\ VSHFL¿FZD\
'HVFULSWRU

VHFXULW\UROHUHI! VHFXULW\UROH! XVHUVDQGJURXSV UHDOSHRSOH

this is the part thatÕs


the part you have to kninowthe spec, and youÕll Þnd this out from youron way out of the scope of
on the exam
vendor/product documentati a bean developerÕs job

 &KDSWHU
VHFXULW\LQ(-%

=[M$Z]VI[&[MK]ZQ\aQLMV\Q\a\W
XZM\MVL[WUMWVMMT[MQ[KITTQVO
7HENACLIENTCALLSAMETHOD THE#ONTAINERALWAYS
KNOWSTHECLIENTS0RINCIPAL WHICHINCLUDESTHEABSTRACT 1RZZKHQHYHU,FDOODQRWKHUEHDQ
SECURITYROLESTHE$EPLOYERASSIGNEDTOTHAT0RINCIPAL LQWKHDSSOLFDWLRQWKDWEHDQWKLQNV
!NDREMEMBER THECALLERSSECURITYCONTEXTISPROPAGATED ,·PVRPHRQHVSHFLDO6RPHRQHFRROHU
THROUGHOUTTHEAPPLICATIONASTHECLIENTSORIGINALMETHOD 6RPHRQHZLWKSRZHUZKRFDQUHDOO\*2
GOESABOUTDOINGITSWORK%ACHMETHODCALLEDINTHE SODFHV6RPHRQHD/27PRUHLQWHUHVWLQJ
WKDQWKHFOLHQWZKRFDOOHGWKHEXVLQHVV
CONCEPTUALCALLSTACKWILLGETTHESECURITYCONTEXTALONGWITH
PHWKRGWKDWVWDUWHGDOOWKLV
THECALL
"UTLETSSAYTHATYOUDONTWANTTHECLIENTSSECURITYCONTEXT
TOKEEPPROPAGATING,ETSSAYTHATWHENTHECLIENTCALLS"EAN
! AND"EAN!INTURNCALLS"EAN" YOUWANT"EAN"TOTHINK
THATSOMEONEELSEISCALLING)NOTHERWORDS WHATIFYOUWANT
"EAN!TOPRETENDTOBESOMEONEELSE4HATWAY ANYBEAN
THAT"EAN!CALLSWILLTHINKTHE0RINCIPALANDROLES OFTHE
CALLERISSOMETHINGOTHERTHANTHEORIGINALCLIENTS
7HYWOULDYOUDOTHIS"EAN"MIGHTHAVETIGHTERACCESS
CONTROL0ERHAPS"EAN"WONTALLOWOUTSIDECLIENTSTOCALLITS
METHODS SOITDOESNTHAVEMETHODPERMISSIONSSETUPFOR
ANYOFTHEABSTRACTROLESMAPPEDTOCLIENTSUSERSANDGROUPS
"UTPERHAPSYOUHAVEASPECIALROLESET UPJUSTFOROTHER
BEANS AND"EAN"WILLTAKECALLSFROMOTHERBEANS ASLONGAS
THOSEBEANSAREINTHATROLE

:KHQ\RXZDQWWKHEHDQWR%(VRPH ([SOLFLWO\VD\LQJWKDW\RXZDQWWKH
RQHRWKHUWKDQWKHFDOOLQJFOLHQW FDOOLQJFOLHQW·VLGHQWLW\WREHXVHG
HQWHUSULVHEHDQV! HQWHUSULVHEHDQV!
VHVVLRQ! VHVVLRQ!
HMEQDPH!%HDQ$HMEQDPH! HMEQDPH!%HDQ$HMEQDPH!
 
VHFXULW\LGHQWLW\! VHFXULW\LGHQWLW\!
UXQDV! XVHFDOOHULGHQWLW\!
UROHQDPH!6XSHU%HDQUROHQDPH! VHFXULW\LGHQWLW\!
UXQDV! 
This is what you get by
VHFXULW\LGHQWLW\! VHVVLRQ!
 HQWHUSULVHEHDQV! donÕt
VHVVLRQ!
ust
role-name emal abstract default, if you
HQWHUSULVHEHDQV! match a r by put in a <security-
set up identity> element at all.
security-rossleembler
the App A So you donÕt have to say
this, but you can.

\RXDUHKHUH 
UXQDV!VHFXULW\LGHQWLW\

;MK]ZQ\aKWV\M`\XZWXIOI\QWV
_Q\P$Z]VI[&

&OLHQWFDOOVZLWKDVHFXULW\ 5DWKHUWKDQSURSDJDWHWKH %HDQ%GRHVQ·WNQRZDERXWWKH


FRQWH[WWKDWVD\VVKH·VD FOLHQW·VVHFXULW\LGHQWLW\ RULJLQDOFOLHQWDQGWKLQNVWKH
PHPEHURIWKH´FXVWRPHUVµ %HDQ$WDNHVRQWKHUROH FDOOHU·VVHFXULW\LGHQWLW\LV
UROH RI¶6XSHU%HDQ·WKHQFDOOVD ¶6XSHU%HDQ·8QOHVV%HDQ%KDV
PHWKRGRQ%HDQ% LWV2:1UXQDVLGHQWLW\LWZLOO
SURSDJDWH¶6XSHU%HDQ·ZLWKDQ\
FDOOV%HDQ%PDNHVRQRWKHUEHDQV

%HDQ$ 6WLOO%HDQ$
EXWQRZUXQQLQJ %HDQ%
DV¶6XSHU%HDQ·
&OLHQWLQWKH
¶FXVWRPHUV·UROH
%HDQ$·VVHFXULW\LGHQWLW\!
LVQRWDERXWZKR%HDQ$
0HVVDJHGULYHQEHDQV
PXVW127 VKRXOGVHHDVLWVFDOOHUEXW
HULGHQWLW\!
VD\XVHFDOO
UDWKHUZKDW%HDQ%ZLOOVHH
:KLFKFDOOHUZRXOGWKDWEH
"0HVVDJHGULYHQEHDQV
GRQ¶W
HQW 
ZKHQ%HDQ$FDOOVLW
DWFKRXWIRUDGHSOR \P
+$9(DFDOOLQJFOLHQW6RZ EHD QZ LWKD
GHVFULSWRUWKDWVKRZVDPH
VVDJHGULY
XV
HQ
HFDOOHULGHQWLW\!+RZH
YHU ,QRWKHUZRUGVVHFXULW\
VHFXULW \LGHQW LW\WKDWVD \V 
$QG
PHVVDJHGULYHQEHDQV&$
1KDYHDUXQDV
VVD JH
!LGHQW
GULY
LW\
HQ EHD Q
LGHQWLW\!LVQRWDERXW
UJHWWKDWD PH
ZKLOHZH¶UHKHUHGRQ¶WIR  FKDQJLQJWKHLQFRPLQJ
HYH UWU\ WRDVN LWV0H VVDJH'ULYHQ&RQWH[WIRUWKH
PXVWQ LGH QWLW\! GRH VQ¶W
QWLW\$VHFXULW\
FDOOLQJFOLHQW¶VVHFXULW\LGH ,7EX WUDWKH UZ KR WKH FOLHQWLGHQWLW\EXWDERXW
LVFDOOLQJ
VSHFLI\ZKRWKHEHDQWKLQNV 5E HDQ V
LWPDNHVFDOOVWR27+( FKDQJLQJZKDWWKHEHDQ
EHDQSUHWHQGVWREHZKHQ

SURSDJDWHVDVWKHRXWJRLQJ
LGHQWLW\ZKHQWKHEHDQ
FDOOVRWKHUEHDQV
under the name
(Like registering at a hoteuÕrl e ACTUALLY
ÒJennifer LopezÓ, when yoe hotel clerk canÕt tell.
ÒSimon RobertsÓ... and th , youÕre J-Lo.)
As far as he is concerned
 &KDSWHU
VHFXULW\LQ(-%

0RFN([DP
7HATSTRUEABOUTSECURITYFOR%*"S#HOOSEALLTHATAPPLY
1
R! !LLSECURITYPOLICIESMUSTBEEXPRESSEDDECLARATIVELY
R" 4HEDEFAULTSECURITYPRINCIPALUNDERWHICHAMETHODINVOCATIONIS
PERFORMEDISTHATOFTHECOMPONENTSCREATOR
R# 5SING%*"S METHODPERMISSIONSCANBEDECLAREDUSING%*"1,INTHE
DEPLOYMENTDESCRIPTOR
R$ 3ECURITYAUTHORIZATIONCANBEBYPASSEDONAMETHODBYMETHODBASIS
R% 3ECURITYAUTHORIZATIONCANBEBYPASSEDONANINSTANCEBYINSTANCEBASIS

7HATSTRUEABOUTMETHODSTHATSHOULDRUNWITHOUTBEINGCHECKEDFOR
2 AUTHORIZATION#HOOSEALLTHATAPPLY
R! 4HEYCANBELISTEDINTHEEXCLUDE LISTELEMENT
R" 4HEYCANBELISTEDINTHEUNCHECKEDELEMENT
R# 7HENTHEUNCHECKEDELEMENTISUSED ITSHOULDBEPLACEDWHERETHE
ROLE NAMEELEMENTNORMALLYOCCURSINTHEDEPLOYMENTDESCRIPTOR
R$ 7HENAMETHODPERMISSIONRELATIONSPECIlESBOTHUNCHECKEDANDA
SECURITYROLE THECONTAINERWILLUSETHESECURITYROLE

7HICHROLES SHOULDTYPICALLYDElNETHEAPPROPRIATESECURITYPOLICIESFORAN
3 APPLICATION#HOOSEALLTHATAPPLY
R! BEANPROVIDER
R" APPLICATIONASSEMBLER
R# DEPLOYER
R$ SYSTEMADMINISTRATOR
R% SERVERPROVIDER

\RXDUHKHUH 
FRIIHHFUDPPRFNH[DP

)NWHICHOFTHEFOLLOWINGMETHODSCANASTATEFULSESSIONBEANINVOKETHE
4 LV&DOOHU,Q5ROHMETHODINORDERTOPERFORMASECURITYCHECK#HOOSEALL
THATAPPLY
R! HME&UHDWH
R" HME$FWLYDWH
R# HME3DVVLYDWH
R$ .ONEOFTHEABOVE
7HICHARETHEBEANPROVIDERSRESPONSIBILITIESWHENMAKINGANAPPLICATION
5 SECURE#HOOSEALLTHATAPPLY
R! !SSIGNINGTHESECURITYDOMAINTOTHEAPPLICATION
R" !UTHENTICATIONOFPRINCIPALS
R# -APPINGTHEPRINCIPALSUSEDBYTHECLIENTTOTHEPRINCIPALSDElNEDFOR
THEBEAN
R$ .ONEOFTHEABOVE

)NWHICHOFTHEFOLLOWINGMETHODSCANA#-0ENTITYBEANINVOKETHE
6 GET#ALLER0RINCIPAL METHODINORDERTOPERFORMASECURITYCHECK#HOOSE
ALLTHATAPPLY
R! HME&UHDWH
R" HME$FWLYDWH
R# HME3DVVLYDWH
R$ HME3RVW&UHDWH
R% "USINESSMETHODS

)NWHICHOFTHEFOLLOWINGMETHODSCANA"-0ENTITYBEANINVOKETHE
7 JHW&DOOHU3ULQFLSDO METHODINORDERTOPERFORMASECURITYCHECK
#HOOSEALLTHATAPPLY
R! HME/RDG
R" HME6WRUH
R# HME3DVVLYDWH
R$ HME3RVW&UHDWH
R% "USINESSMETHODS

 &KDSWHU
VHFXULW\LQ(-%

7HENDESCRIBINGMETHODPERMISSIONSINTHEDEPLOYMENTDESCRIPTORFORA
8 SPECIlCBEAN WHATSTRUE#HOOSEALLTHATAPPLY
R! !WILD CARDCHARACTERCANREFERTOALLOFTHEBEANSMETHODS
R" )NDIVIDUALOVERLOADEDMETHODSCANNOTBEDISTINGUISHEDFROMEACH
OTHER
R# !METHODINTHEHOMEINTERFACECANNOTBEDISTINGUISHEDFROMA
METHODWITHTHESAMENAMEINTHECOMPONENTINTERFACE
R$ )NDIVIDUALMETHODSCANBEREFERREDTO

4HEUROHQDPH!ELEMENTCANBEUSEDWITHINWHATOTHERSECURITYRELATED
9 DEPLOYMENTDESCRIPTORELEMENTS #HOOSEALLTHATAPPLY
R! VHFXULW\UROH!
R" UXQDV!
R# PHWKRGQDPH!
R$ H[FOXGHOLVW!
R% VHFXULW\UROHUHI!

7HICHROLESHAVEWHATRESPONSIBILITIESWHENIMPLEMENTINGSECURITYFOR%*"
10 APPLICATIONS#HOOSEALLTHATAPPLY
R! 4HE!PPLICATION!SSEMBLERTYPICALLYSPECIlESWHENRUN ASIDENTITY
SHOULDBEUSEDINANAPPLICATION
R" 4HE"EAN0ROVIDERMAPSSECURITYROLEREFERENCESTOSECURITYROLES
R# 4HE"EAN0ROVIDERISTYPICALLYRESPONSIBLEFORASSIGNINGTHESECURITY
DOMAINANDPRINCIPALREALMTOTHEAPPLICATION
R$ 4HE$EPLOYERMAPSSECURITYROLEREFERENCESTOSECURITYROLES

7ITHINTHEVHFXULW\UROHUHI!DEPLOYMENTDESCRIPTORELEMENT WHICH
11 SUB ELEMENTSAREOPTIONAL#HOOSEALLTHATAPPLY
R! UROHQDPH!
R" UROHOLQN!
R# GHVFULSWLRQ!
R$ .ONEOFTHEABOVEAREOPTIONAL

\RXDUHKHUH 
GHFODUDWLYHVHFXULW\

0RFN([DP$QVZHUV
)
7HATSTRUEABOUTSECURITYFOR%*"S#HOOSEALLTHATAPPLY (spec: 434-435
1
R! !LLSECURITYPOLICIESMUSTBEEXPRESSEDDECLARATIVELY
R" 4HEDEFAULTSECURITYPRINCIPALUNDERWHICHAMETHODINVOCATIONIS
PERFORMEDISTHATOFTHECOMPONENTSCREATOR
R# 5SING%*"S METHODPERMISSIONSCANBEDECLAREDUSING%*"1,INTHE
DEPLOYMENTDESCRIPTOR
R$ 3ECURITYAUTHORIZATIONCANBEBYPASSEDONAMETHODBYMETHODBASIS
R% 3ECURITYAUTHORIZATIONCANBEBYPASSEDONANINSTANCEBYINSTANCEBASIS

7HATSTRUEABOUTMETHODSTHATSHOULDRUNWITHOUTBEINGCHECKEDFOR
(spec: 443)
2 AUTHORIZATION#HOOSEALLTHATAPPLY
R! 4HEYCANBELISTEDINTHEEXCLUDE LISTELEMENT - For methods that must
NEVER be called
R" 4HEYCANBELISTEDINTHEUNCHECKEDELEMENT
R# 7HENTHEUNCHECKEDELEMENTISUSED ITSHOULDBEPLACEDWHERETHE
ROLE NAMEELEMENTNORMALLYOCCURSINTHEDEPLOYMENTDESCRIPTOR
R$ 7HENAMETHODPERMISSIONRELATIONSPECIlESBOTHUNCHECKEDANDA
SECURITYROLE THECONTAINERWILLUSETHESECURITYROLE

7HICHROLES SHOULDTYPICALLYDElNETHEAPPROPRIATESECURITYPOLICIESFORAN (spec: 435-436)


3 APPLICATION#HOOSEALLTHATAPPLY
R! BEANPROVIDER
R" APPLICATIONASSEMBLER
R# DEPLOYER
R$ SYSTEMADMINISTRATOR
R% SERVERPROVIDER

 &KDSWHU
VHFXULW\LQ(-%

4 )NWHICHOFTHEFOLLOWINGMETHODSCANASTATEFULSESSIONBEANINVOKETHE (spec: 80)


LV&DOOHU,Q5ROHMETHODINORDERTOPERFORMASECURITYCHECK#HOOSEALL
THATAPPLY
R! HME&UHDWH
R" HME$FWLYDWH
R# HME3DVVLYDWH
R$ .ONEOFTHEABOVE
)
7HICHARETHEBEANPROVIDERSRESPONSIBILITIESWHENMAKINGANAPPLICATION (spec: 448-454
5 SECURE#HOOSEALLTHATAPPLY
R! !SSIGNINGTHESECURITYDOMAINTOTHEAPPLICATION Typically the DeployerÕs job
R" !UTHENTICATIONOFPRINCIPALS
R# -APPINGTHEPRINCIPALSUSEDBYTHECLIENTTOTHEPRINCIPALSDElNEDFOR
THEBEAN
R$ .ONEOFTHEABOVE

)NWHICHOFTHEFOLLOWINGMETHODSCANA#-0ENTITYBEANINVOKETHE (spec: 179-180)


6 GET#ALLER0RINCIPAL METHODINORDERTOPERFORMASECURITYCHECK#HOOSE
ALLTHATAPPLY
R! HME&UHDWH
R" HME$FWLYDWH client be?
- who would the
R# HME3DVVLYDWH
R$ HME3RVW&UHDWH
R% "USINESSMETHODS

7 )NWHICHOFTHEFOLLOWINGMETHODSCANA"-0ENTITYBEANINVOKETHE (spec: 257)


JHW&DOOHU3ULQFLSDO METHODINORDERTOPERFORMASECURITYCHECK
#HOOSEALLTHATAPPLY
R! HME/RDG
R" HME6WRUH
R# HME3DVVLYDWH - who would t
he client be?
R$ HME3RVW&UHDWH
R% "USINESSMETHODS

\RXDUHKHUH 
GHFODUDWLYHVHFXULW\

7HENDESCRIBINGMETHODPERMISSIONSINTHEDEPLOYMENTDESCRIPTORFORA (spec: 444)


8 SPECIlCBEAN WHATSTRUE#HOOSEALLTHATAPPLY
R! !WILD CARDCHARACTERCANREFERTOALLOFTHEBEANSMETHODS
R" )NDIVIDUALOVERLOADEDMETHODSCANNOTBEDISTINGUISHEDFROMEACH The <method-intf>
OTHER element does this
R# !METHODINTHEHOMEINTERFACECANNOTBEDISTINGUISHEDFROMA
METHODWITHTHESAMENAMEINTHECOMPONENTINTERFACE
R$ )NDIVIDUALMETHODSCANBEREFERREDTO
7)
4HEUROHQDPH!ELEMENTCANBEUSEDWITHINWHATOTHERSECURITYRELATED (spec: 444-44
9 DEPLOYMENTDESCRIPTORELEMENTS #HOOSEALLTHATAPPLY
R! VHFXULW\UROH!
R" UXQDV!
R# PHWKRGQDPH!
R$ H[FOXGHOLVW!
R% VHFXULW\UROHUHI!

9)
7HICHROLESHAVEWHATRESPONSIBILITIESWHENIMPLEMENTINGSECURITYFOR%*" (spec: 446-44
10 APPLICATIONS#HOOSEALLTHATAPPLY
R! 4HE!PPLICATION!SSEMBLERTYPICALLYSPECIlESWHENRUN ASIDENTITY
SHOULDBEUSEDINANAPPLICATION
Usually deÞned by the
R" 4HE"EAN0ROVIDERMAPSSECURITYROLEREFERENCESTOSECURITYROLES Application assembler
R# 4HE"EAN0ROVIDERISTYPICALLYRESPONSIBLEFORASSIGNINGTHESECURITY
DOMAINANDPRINCIPALREALMTOTHEAPPLICATION
R$ 4HE$EPLOYERMAPSSECURITYROLEREFERENCESTOSECURITYROLES

11 7ITHINTHEVHFXULW\UROHUHI!DEPLOYMENTDESCRIPTORELEMENT WHICH (spec: 527)


SUB ELEMENTSAREOPTIONAL#HOOSEALLTHATAPPLY
R! UROHQDPH!
R" UROHOLQN! Usually deÞned by the Application assembler
R# GHVFULSWLRQ!
R$ .ONEOFTHEABOVEAREOPTIONAL

 &KDSWHU
a beanÕs environment
5
4
47KH-R\RI'HSOR\PHQW

7KDQNVWRWKH
EHQHÀWVRIGHSOR\WLPH
FXVWRPL]DWLRQ,KDYHH[WUD ,KHDUG\RXU
WLPHWRHQMR\PRUHORYHO\ H[ZLIHVWLOOFKDQJHV
PHDOVZLWK\RX VRXUFHFRGH

<RXZRUNHGKDUGRQWKDWEHDQ<RXFRGHG\RXFRPSLOHG\RXWHVWHG$ERXW
DKXQGUHG]LOOLRQWLPHV7KHODVWWKLQJ\RXZDQWWRWRXFKLVDOUHDG\WHVWHGVRXUFHFRGH
MXVWEHFDXVHVRPHWKLQJVLPSOHFKDQJHGLQWKHGHSOR\PHQWFRQ¿JXUDWLRQ0D\EHWKHQDPH
RIWKHGDWDEDVHLVGLIIHUHQW0D\EH\RXKDUGFRGHGDWD[UDWH UHPHPEHU²EHDQ¶VFDQ¶W
DFFHVVSURSHUW\¿OHV $QGZKDWLI\RXGRQ¶WHYHQKDYHWKHVRXUFHFRGH"0D\EH\RXJRW
LWIURP%HDQVU8VDQGWKH\ZRQ¶WVHOO\RXWKHVRXUFH QRWRQ\RXUEXGJHWDQ\ZD\ (-%
VXSSRUWVEHDQUHXVHWKURXJKWKH'HSOR\PHQW'HVFULSWRUDQGDEHDQ¶VVSHFLDOHQYLURQPHQW

WKLVLVDQHZFKDSWHU 
H[DPREMHFWLYHV

$%HDQ·V(QYLURQPHQW

2IILFLDO :KDWLWUHDOO\PHDQV
,GHQWLI\FRUUHFWDQGLQFRUUHFW <RXPXVWNQRZWKHZD\VLQZKLFKDEHDQFDQEHFXVWRP
VWDWHPHQWVRUH[DPSOHVDERXWDQ L]HGDWGHSOR\PHQWWLPHZLWKRXWFKDQJLQJVRXUFHFRGH
HQWHUSULVHEHDQ¶V-1',QDPLQJ :KHQDEHDQGRHVD-1',ORRNXSXVLQJWKHEHDQ¶V
RZQVSHFLDOHQYLURQPHQW\RXPXVWNQRZKRZWKHFRGH
,GHQWLI\FRUUHFWDQGLQFRUUHFW UHODWHVWRZKDW¶VLQWKHGHSOR\PHQWGHVFULSWRUDQGD
VWDWHPHQWVDERXWWKHSXUSRVHDQGRU EXQFKRI¿QLFN\GHWDLOVWKDWPHDQWKHGLIIHUHQFHEHWZHHQ
XVHRIWKHGHSOR\PHQWGHVFULSWRU DVXFFHVVIXOGHSOR\PHQWRURQHWKDWZRQ¶WGHSOR\2U
HOHPHQWVIRUHQYLURQPHQWHQWULHV PXFKZRUVHRQHWKDWGHSOR\VEXWEORZVXSVRPHWLPH
(-%UHIHUHQFHVUHVRXUFHPDQDJHU ODWHUZKLOHLWVUXQQLQJ
FRQQHFWLRQIDFWRU\UHIHUHQFHV
LQFOXGLQJZKHWKHUDJLYHQFRGHOLVWLQJ <RXQHHGWRNQRZZKDWLVDQGLVQRWJXDUDQWHHGE\WKH
LVDSSURSULDWHDQGFRUUHFWZLWKUHVSHFW (-%VSHFL¿FDWLRQ)RUH[DPSOHDQ(-%FRQWDLQHU
WRDSDUWLFXODU''HOHPHQW LVQRWUHTXLUHGWRVXSSRUW-;7$-0;6HUYOHWVRU-63V
EXWLWLVUHTXLUHGWRVXSSRUW-1',-06DQG-$;3<RX
*LYHQDOLVWRIUHVSRQVLELOLWLHVLGHQWLI\ QHHGWRNQRZZKDW(-%UHDOO\JLYHV\RX
ZKLFKEHORQJWRWKH'HSOR\HU%HDQ
3URYLGHU$SS$VVHPEOHU&RQWDLQHU <RXDOVRQHHGWRNQRZZKDW\RXFDQDQGFDQQRWGRLQ
6\V$GPLQRUDQ\FRPELQDWLRQ (-%LI\RXZDQWWRPDNHDEHDQWKDWLVSRUWDEOHDFURVV
DOO(-%FRPSOLDQWFRQWDLQHUV)RUH[DPSOH\RXFDQ¶W
OLVWHQRQD6HUYHU6RFNHWEXW\RXFDQFUHDWHDFOLHQW
 *LYHQDOLVWRIWHFKQRORJ\
VSHFL¿FDWLRQVLGHQWLI\ZKLFKDUH 6RFNHW<RXFDQ¶WDFFHVVWKHVHUYHU¶VORFDO¿OHV\VWHP
UHTXLUHPHQWVIRUDQ(-%FRQWDLQHU RUPDNH\RXURZQWKUHDGV%XW\RXFDQPDNH\RXUEHDQ
FODVVH[WHQGDQRWKHU
 ,GHQWLI\FRUUHFWDQGLQFRUUHFW <RXQHHGWRNQRZDERXWWKH(-%UROHV %HDQ3URYLGHU
VWDWHPHQWVRUH[DPSOHVDERXW(-%
$SSOLFDWLRQ$VVHPEOHUHWF DQGZKRGRHVZKDWGXULQJ
SURJUDPPLQJUHVWULFWLRQV
GHYHORSPHQWDQGGHSOR\PHQW$OWKRXJK\RXZRQ¶WKDYH
PDQ\TXHVWLRQVDERXWWKLVLW¶VDQDUHDWKHH[DPEHWD
 0DWFK(-%UROHVZLWKWKH WHVWHUVVWUXJJOHGZLWKVRLIZHZHUH\RXZH¶GVWXG\WKLV
FRUUHVSRQGLQJGHVFULSWLRQRIWKHUROH¶V SDUWFDUHIXOO\
UHVSRQVLELOLWLHVZKHUHWKHGHVFULSWLRQ
PD\LQFOXGHGHSOR\PHQWGHVFULSWRU )LQDOO\\RXPXVWNQRZZKDWLVDQGLVQRWVXSSRVHGWREH
LQIRUPDWLRQ LQDQHMEMDU¿OH)RUH[DPSOHWKHKRPHDQGFRPSRQHQW
LQWHUIDFHPXVWEHWKHUH XQOHVV\RX¶UHXVLQJDPHVVDJH
 *LYHQDOLVWLGHQWLI\ZKLFKDUH GULYHQEHDQ EXWWKHVWXEVPXVWQRWEHWKHUH
UHTXLUHPHQWVIRUDQHMEMDU¿OH

 FKDSWHU
DEHDQ¶VHQYLURQPHQW

,MXVW/29(WRFKDQJH
VRXUFHFRGH7KDW·VZK\,KDYH
DKLJKSD\LQJMREZRUNLQJLQ
DUHVSHFWHG,7FRPSDQ\
FDIHWHULD

5DLVH\RXUKDQGLI\RXOLNHFKDQJLQJ
\RXUVRXUFHFRGHHYHU\WLPH\RXQHHG
WRFKDQJHWKHZD\\RXUEHDQEHKDYHV

/FCOURSEYOUDONTLIKEGOINGBACKTOYOURSOURCE
CODEJUSTBECAUSE SAY SOMEBODYCHANGEDTHENAME
OFTHEDATABASE9OUALREADYKNOWTHATYOUCAN
CHANGETRANSACTIONATTRIBUTESANDSECURITYACCESSJUST
BYTWEAKINGTHEDEPLOYMENTDESCRIPTOR"UTWAIT
THERESMORE

%VERY%*"CONTAINERGIVESYOURBEANITSOWNSPECIAL
ENVIRONMENT THATYOURBEANCANUSETOLOOKUPFOUR
DIFFERENTTHINGS

ƒ (QYLURQPHQW(QWULHV
7KHVHDUHGHSOR\WLPHYDOXHV VR\RXGRQ·WKDYHWR
FRGHLQYDOXHVOLNHWKHFXUUHQWGLVFRXQWSHUFHQWDJHRU
WD[UDWH 
ƒ 5HVRXUFH0DQDJHU&RQQHFWLRQ
)DFWRULHV
<RX·OOXVHWKHVHWRJHWDFRQQHFWLRQWRDGDWDEDVH
ƒ (QWHUSULVH%HDQ5HIHUHQFHV
:KHQRQHEHDQZDQWVWRORRNXSDQRWKHUEHDQ<RX·OO
GRWKLVDORW0RVWGHVLJQVLQYROYHDWOHDVWVRPHOHYHORI
EHDQWREHDQFRPPXQLFDWLRQ
ƒ 5HVRXUFH(QYLURQPHQW5HIHUHQFHV
<RX·OOXVHWKLVWRJHWDUHIHUHQFHWRVRPHWKLQJFDOOHG
´DQDGPLQLVWHUHGREMHFWµIURPWKHVHUYHUOLNHD-06
GHVWLQDWLRQ

\RXDUHKHUH 
GHSOR\WLPHFXVWRPL]DWLRQ

)JMIV¼[[XMKQITXTIKMRI^I"KWUXMV^
9OURBEANISENTITLEDTOA*.$)CONTEXTALLITSOWN!SPECIAL
PLACETHATSJUSTFORYOURBEAN WHEREYOURBEANCANLOOKTHINGS
UP)TALLSTARTSWITHAN)NITIAL#ONTEXT BUTTHEJAVACOMPENV
SUBCONTEXTISWHERETHEBEANBEGINSNAVIGATINGWHENHEWANTS
TOLOOKSOMETHINGUP

IRR
$-1',¶YLUWXDO
GLUHFWRU\WUHH·

EDU
ED] 'XGH,ÀQDOO\
REM KDYHDSODFHRIP\
RZQ-XVWIRUPH
$GYLVRU

WN special
This is the beanÕs beO an starts MDYDFRPSHQY
subcontext. The here when he
navigating from environment to
wants to use his
look stuff up.
REM
HME MGEF
WD[5DWH
This bean ca
value of taxRnatlook up the
java:comp/env/ e using
taxRate REM
REM
UHIHUHQFHWRD'DWD6RXUFH
UHIHUHQFHWR$GYLVRU IRUWKH&XVWRPHUGDWDEDVH

This bean ca e
other beans inn look up be an ca n lo ok up a DataSourc
This p/env/jdbc
java:comp/env/ the in the java:com
subcontext ejb subcontext

 FKDSWHU
DEHDQ¶VHQYLURQPHQW

*]\Q\¼[VW\XMZJMIVQV[\IVKM
1\¼[XMZJMIVPWUM
4HESCOPEOFABEANSENVIRONMENTISFORALLBEANSFROMTHESAMEHOME)F
YOUDEPLOYEDAPARTICULARBEANTYPEINTOYOURSERVERTHREETIMES EACHOF
THETHREEDEPLOYMENTSWOULDHAVEITSOWNUNIQUEHOME SOTHEREDBE
THREEDIFFERENTENVIRONMENTS

$OOEHDQVIURPWKH
VDPHKRPHKDYHWKH
VDPHHQYLURQPHQW

MDYDFRPSHQY
7KLVVXFNV
,KDWHVKDULQJ

&XVWRPHU%HDQ DOOWKHRWKHU&XVWRPHU%HDQV

,QLWLDO&RQWH[WLF QHZ,QLWLDO&RQWH[W 
'RXEOHGLVFRXQW  'RXEOH LFORRNXS ³MDYDFRPSHQYFXVW'LVFRXQW´ 

This value will be th


no matter which inste same
CustomerBean runs ance of
this code.

\RXDUHKHUH 
GHSOR\WLPHFXVWRPL]DWLRQ

(QYLURQPHQWVXEFRQWH[WV
MDYDFRPSHQYMGEF&XVWRPHU'%

ouÕre
the priva a m e o f the ÔthingÕ ryesource
for this btee environment Th e n
n this case ,
an type looking up (ifactory to the
A subcontext we named ÔjdbcÕ by connection se)
convention (although ÔjdbcÕ is not ÔCustomerDBÕ databa
required, and we could have said
java:comp/env/CustomerDB

LQDEHDQ·VEXVLQHVVPHWKRG

,QLWLDO&RQWH[WLF QHZ,QLWLDO&RQWH[W 
'DWD6RXUFHGV  'DWD6RXUFH LFORRNXS ³MDYDFRPSHQYMGEF&XVWRPHU'%´ 
&RQQHFWLRQFRQQ GVJHW&RQQHFWLRQ 


YS starts
Navigation ALWAt. So you will MDYDFRPSHQY
with this contexava:comp/envÓ
ALWAYS see Òj e code when a
somewhere in th hing up in its
bean looks somet
environment
e MGEF
The spec recommends usingJDthBC
ÔjdbcÕ subcontext for all n
resource manager connectiotext for
factories, the ÔmailÕ subconyou guess
mail connections and can ns? REM
what it is for url connectio
DUHIHUHQFHWRWKHFRQQHFWLRQ
IDFWRU\IRUWKHFXVWRPHUGDWDEDVH
QDPHG´&XVWRPHU'%µRULVLW"

how the heck do


programmer knowes the
of the database??the name

 FKDSWHU
DEHDQ¶VHQYLURQPHQW

'HMDYXLW·VWKHVDPHLVVXH
ZHKDGZLWKVHFXULW\,KDYH
WRSXW620(7+,1*LQFRGHEXW
,GRQ·WNQRZWKHUHDOQDPHRIWKH
GDWDEDVH+PPPP

YiX`e
gfn\i
+RZFDQZHGHDOZLWKWKLV"+RZGRHVWKH
SURJUDPPHUKDUGFRGHDORRNXS6WULQJOLNH
³MDYDFRPSHQYMGEF&XVWRPHU'%´ZLWKRXW
NQRZLQJKRZWKHGDWDEDVHZDVFRQ¿JXUHG
LQWRWKHVHUYHU"

KLQWKRZGLGZHGHDOZLWKLWHDUOLHUZKHQ
WKH%HDQ3URYLGHUXVHGSURJUDPPDWLF
VHFXULW\ZLWKLV&DOOHU,Q5ROH ³VRPH5ROH´ "

\RXDUHKHUH 
GHSOR\WLPHFXVWRPL]DWLRQ

1\¼[[QUXTM
QN\PMXZWOZIUUMZX]\[IUILM]X26,1VIUMQVKWLM
PMPI[\WIVVW]VKM\PI\\W\PMLMXTWaMZQV\PM,,

4HE$EPLOYERHASNOCLUEWHATTHE"EAN0ROVIDERPUTINCODE UNLESSTHE
"EAN0ROVIDER

!4ELLSHIM
"7RITESTHENAMESONASTICKYNOTEANDSTICKSITONTHE$EPLOYERSMONITOR
OR
#$ECLARESREFERENCESINTHE$EPLOYMENT$ESCRIPTOR COMPLETEWITHHELPFUL
DESCRIPTIONSTHATMAKEITVERYCLEARWHATTHE$EPLOYERISSUPPOSEDTOMAPTO
THEPROGRAMMERSMADE UPNAMES

+HEHWWHUGHFODUHDOOKLV
-1',HQYLURQPHQWUHIHUHQFHV
7KHGHSOR\HUJHWVUHDOO\
LQWKH''VR,FDQPDSWKHPWR
SLVVHGRIILI\RXGRQ·WGHFODUH
\RXU-1',ORRNXSVWULQJVLQ
5($/QDPHVWKDWRQO\,NQRZ$QG
WKHGHSOR\PHQWGHVFULSWRU$VN LIKHGRHVQ·W,·OOVKRZKLPZKDW
PHDERXWWKHÀJKWZHKDGODVW WKUHH\HDUVRI3LODWHVFDQGR
PRQWK6HULRXVO\$VNPH

'HFODUHVWKHPDGHXS-1',QDPHV 0DSVWKHSURJUDPPHU·VPDGHXS
LQWKH'HSOR\PHQW'HVFULSWRUIRU IDNHQDPHVWRWKH5($/-1',
WKH'HSOR\HU QDPHVXQGHUZKLFKWKHUHVRXUFHV
ZHUHGHSOR\HGRUFRQÀJXUHGLQWR
WKHVHUYHU

 FKDSWHU
DEHDQ¶VHQYLURQPHQW

(QYLURQPHQWHQWULHVGHSOR\WLPHFRQVWDQWV
)MAGINEYOUREWRITINGASIMPLECHECKOUTBEANFORANONLINESHOPPING
CARTSYSTEM9OUDONTKNOWWHERETHATBEANMIGHTENDUP%VENIFYOUDO
YOUKNOWTHATTHINGSLIKETAXRATESANDDISCOUNTPOLICIESCANCHANGE EVEN
WITHINTHESAMECOMPANY
%NVIRONMENTENTRIESLETYOUWRITEYOURCODEUSINGAVARIABLETHATYOULLlLL
INATRUNTIMEUSINGA*.$)LOOKUP2EMEMBER THE"EAN0ROVIDERCHOOSES
THENAME ANDITSUPTOTHE$EPLOYERTOlLLINTHEVALUE this is the part of
the lookup that must
LQDEHDQ·VEXVLQHVVPHWKRG go in the DD
,QLWLDO&RQWH[WLF QHZ,QLWLDO&RQWH[W 
'RXEOHGEO  'RXEOH LFORRNXS ³MDYDFRPSHQYVPDUW&XVWRPHU'LVFRXQW´ 
FXVWRPHU'LVFRXQW GEOGRXEOH9DOXH 
XVHWKHSULPLWLYHGRXEOHYDOXHWRFDOFXODWHWKHGLVFRXQW

a va :c o m p/env/Ó !
j r
NO T p ut the Ò descriptor. Eve at
You do he deployment Y the part th
t
LQWKH'HSOR\PHQW'HVFULSWRU part in , you put ONL p/env/Ó
D m
HQWLW\! In the ter the Òjava:co
D
comes a f if you have any

compassion at
HQYHQWU\! all, youÕll put in a
er
The programmGHVFULSWLRQ!GLVFRXQWIRUVPDUWFXVWRPHUVGHVFULSWLRQ! description for the
is na me
made up th HQYHQWU\QDPH!VPDUW&XVWRPHU'LVFRXQWHQYHQWU\QDPH! poor Deployer.
HQYHQWU\W\SH!MDYDODQJ'RXEOHHQYHQWU\W\SH!
HQYHQWU\YDOXH!HQYHQWU\YDOXH!
the type must be
HQYHQWU\! either a String or a
 wrapper class
HQWLW\!

The value is optional for the Bean Provider, but he can use <RXFDQ·WFKDQJHD
YDOXHG\QDPLFDOO\
this element to supply a default. But the Deployer MUST SOR\HGWKHUHLV
ensure that thereÕs a valid value before the bean is deployed. 2QFHDEHDQKDVEHHQGH
HWKHY DOXHRIWKHHQYL
12:$<WRFKDQJ
Environment entries are different from the other ZD\WRXSGDWH
URQPHQWYDULDEOH7KHRQO\
LVWRUHGHSOR\WKH
customizations in that the Deployer doesnÕt map from the WKHYDOXHDEHDQVHHV
EHDQZLWKWKHQHZ' '
Bean ProviderÕs name to some other real name. Environment
entries donÕt exist until the Bean Provider says they do, by
putting in the <env-entry>. As long as the <env-entry> has a
value when its deployed, the environment entry will be created.

\RXDUHKHUH 
GHSOR\WLPHFXVWRPL]DWLRQ

WKHUH DUH QR
'XPE 4XHVWLRQV <RX0867NQRZ
WKHVFRSHRI
Q: 7HYCANTYOUJUSTUSE*AVAPROPERTYlLES :DWFKLW DQHQYLURQPHQW
HQWU\
INSTEADOFENVIRONMENTENTRIES
W
<RX¶UHH[SHFWHGWRNQRZWKD
A: 9OURENOTALLOWEDTOUSEPROPERTIESBECAUSE HQYLURQPHQWH
XQLTXH WRHDF
QWUL
KK
HV
RP
DUH
H,
SUL
I\R
YDW
XG
HDQG
HSOR\
YOUCANTACCESSTHEFILESYSTEMTOREADTHEMIN AND µIR R¶Z LWKD
YOUDONTHAVEANYCONTROLOVERSYSTEMPROPERTIESFOR DQHQYLURQPHQWHQWU\
RUWKH &X VWR PH UEH DQ
EXAMPLE YOUHAVENOWAYTOSETAPROPERTYASA*6- YDOXHRII
DQ ZLOO
COMMAND LINEARGUMENT DOOLQVWDQFHVRI&XVWRPHU%H 
ZK HQ WKH \G RD
JHWWKDWVDPHYDOXH
LQJMDY DFRP SH QY IRR IURP
ORRNXSXV
Q: 7HYCANT)HAVEANENVIRONMENTENTRYTHATS DEXVLQHVVPHWKRG
SHAREDAMONGMULTIPLEBEANSINTHESAMEAPP/RAT WU\µIRR¶
LEASTWITHINTHESAMEEJB JAR %XW\RXUHQYLURQPHQWHQ
LQJ FROOL
GRHV127FDXVHDQDP
HU% ($ 1W \SH
VLRQZLWKDQ\RWK
A: "ECAUSEBECAUSEYOUCANT4HERESSIMPLY WKDW¶VEHH QGHSO
VDPHHQYLURQPHQWH
R\H GZ
QWU
LWK
\Q
WKH
DP

H
NOMECHANISMFORSHARINGTHEBEANSENVIRONMENT WKHVDPH
BECAUSETHATWOULDDEFEATTHEWHOLEPURPOSEOFTHE &XVWRPHUEHDQ¶VµIRR¶LVQRW
HQWKRXJK
BEANHAVINGHISOWNPRIVATESPACE(AVINGABEANS DV$GYLFHEHDQ¶VµIRR¶HY
GHQ WLFDO
ENVIRONMENTPREVENTSWHATWOULDBEANEXTREMELY WKHORRNXSVWULQJVDUHL
FRPS HQ YIR R´ DQG
LIKELYDISASTERNAMINGCOLLISIONSBETWEENDIFFERENT LFORRNXS ³MDYD
HVDPH
BEANS)NOTHERWORDS DIFFERENTBEANSDEPLOYEDWITH HYHQLIERWKEHDQVDUHLQWK
DUFKLY H HDU 
ENVIRONMENTENTRIESOROTHERREFERENCES THATUSETHE HMEMDURUHQWHUSULVH
SAMENAME VLQJOH
%XWZH¶UHQRWGRQH\HWD
27 EH GH SOR\HG
)FYOUHAVEASHAREDRESOURCEORENVIRONMENTENTRY EHDQW\SHPXVW1
YOU-534CONFIGUREITWITHEACHBEANYOUDEPLOY4HIS KDQ RQ HµW KLQ J¶R IWKH
ZLWKPRUHW
IS./4PER$EPLOYMENT$ESCRIPTOR BUTPEREVERYINDI HQ DP H6R\ RX FDQ ¶WF DOODQHQ
VDP
UHVRXUFH
VIDUALBEAN REGARDLESSOFWHERETHEBEANLIVES YLURQPHQWHQWU\µIRR¶DQGD
RQQ HFW LRQ IDF WRU\ µIRR¶LQ
PDQDJHUF
JD V\RX
WKH&XVWRPHUEHDQ$VORQ
(QYLURQPHQWHQWULHVPXVW WK RXJ K\ RX¶ UH2.
XVHVXEFRQWH[WV
EHRQHRIWKHVHW\SHV HµMGEF IRR ¶LVGLII HUH QWIURP
%HFDXV
&$ 1K DYH 
MXVWµIRR¶DORQH6R\RX
ƒ 6WULQJ ERWK
ƒ %\WH 2QO\6WULQJV MDYDFRPSHQYIRR
ƒ 6KRUW DQG
DQGZUDSSHUV MDYDFRPSHQYMGEFIRR
ƒ ,QWHJHU DUHDOORZHGIRU EXW127WZRWKLQJVQDPHG
ƒ /RQJ HQYLURQPHQW
LIWKRVHWZR
ƒ )ORDW
HQWULHV MDYDFRPSHQYIRRHYHQ
HW\SHV
WKLQJVDUHGLIIHUHQWUHVRXUF
ƒ 'RXEOH
ƒ &KDUDFWHU
ƒ %RROHDQ

 FKDSWHU
DEHDQ¶VHQYLURQPHQW

,W·VVXEFRQWH[WVDOOWKHZD\GRZQ
2EMEMBER YOURJAVACOMPENVSPACEISJUSTASUBCONTEXT!SPECIALONE
SURE BUTSTILLACONTEXT3OYOUCANSAVETHATINA#ONTEXTVARIABLE ANDSAVE
YOURSELFFROMHAVINGTORETYPEhJAVACOMPENVvEVERYFRICKINTIMEYOUWANT
TOLOOKSOMETHINGUP

6DYLQJ\RXUVSHFLDOHQYLURQPHQWFRQWH[W
,QLWLDO&RQWH[WLF QHZ,QLWLDO&RQWH[W 
&RQWH[WP\6SHFLDO3ODFH  &RQWH[W LFORRNXS ³MDYDFRPSHQY´ 
QRZORRNVRPHWKLQJXSRQP\6SHFLDO3ODFH
'RXEOHGEO  'RXEOH P\6SHFLDO3ODFHORRNXS ³VPDUW&XVWRPHU'LVFRXQW´ 

text,
taxInfo is a subconronment.
8VLQJDVXEFRQWH[W of the beanÕs envi
MDYDFRPSHQY
,QLWLDO&RQWH[WLF QHZ,QLWLDO&RQWH[W 
&RQWH[WP\7D[,QIR&W[  &RQWH[W LFORRNXS ³MDYDFRPSHQYWD[,QIR´ 
QRZORRNVRPHWKLQJXSRQP\7D[,QIR&W[VXEFRQWH[W
'RXEOHGEO  'RXEOH P\7D[,QIR&W[ORRNXS ³WD[5DWH´ 
WD[,QIR
ct
Note: you donÕt need to narrow anything comi
ng taxRate is an objeo
out of JNDI lookups EXCEPT for stubs within the ta xI nf
(Remote home interface references), so all you subcontext
REM need is a plain old cast.

WD[5DWH
&UHDWLQJDVXEFRQWH[W
!SUBCONTEXTEXISTSSIMPLYBECAUSEYOUSAYITDOES)FYOUTYPEhJAVACOMP
ENVFOOBARvINTOYOURLOOKUPCODE YOUVESAID h4HEREISASUBCONTEXTIN
In the DD for trthe MYENVIRONMENTNAMEDhFOOv ANDITCONTAINSTHEOBJECThBARv!SLONGASYOU
environment en y
USETHESAMESUBCONTEXTINTHEDEPLOYMENTDESCRIPTORWHENYOUDEPLOYTHE
BEAN THESUBCONTEXTWILLMAGICALLYEXIST JUSTBECAUSEYOUSAIDITDOES)NOTHER
name, anything sh
followed by a slacomes
WORDS YOUDONTHAVETOGOTHROUGHAPROCESSOFSOMEHOWCREATINGANEW
automatically be
*.$)CONTEXTANDNAMINGIT!CTLIKEITSTHERE ANDITSTHERE$ONTYOUWISH
a subcontext!
EVERYTHINGWORKEDTHATWAY

HQYHQWU\QDPH!WD[,QIRWD[5DWHHQYHQWU\QDPH!

putting ÒtaxInfo / Ó before ÒtaxRateÓ


automatically creates the taxRate
subcontext when this bean is deployed

\RXDUHKHUH 
GHSOR\WLPHFXVWRPL]DWLRQ

5HVRXUFHPDQDJHUFRQQHFWLRQIDFWRULHV
WKLQNGDWDEDVH
!NYBEANCANUSEADATABASE)NFACT EVENANENTITYBEANWITHCONTAINER
MANAGEDPERSISTENCECANGETACONNECTIONTOADATABASE ASLONGASITSUSING
THATDATABASEFORSOMETHINGOTHERTHANMANAGINGITSOWNPERSISTENCE4HE
CODEISSIMPLELOOKUPA$ATA3OURCE ANDASKITFORA#ONNECTION/NCEYOU
HAVEA#ONNECTION YOUCANSEND*$"#STATEMENTSTODOYOUR31,
!LTHOUGHJAVAXSQL$ATA3OURCEISBYFARTHEMOSTCOMMONLY USEDRESOURCE
MANAGERCONNECTIONFACTORY YOUCANHAVEOTHERSINCLUDINGAMAILOR52,
CONNECTION this is the part of
the lookup that must
go in the DD
LQDEHDQ·VEXVLQHVVPHWKRG
,QLWLDO&RQWH[WLF QHZ,QLWLDO&RQWH[W 
'DWD6RXUFHGV  'DWD6RXUFH LFORRNXS ³MDYDFRPSHQYMGEF&XVWRPHU'% ´ 
&RQQHFWLRQFRQQ GVJHW&RQQHFWLRQ 
XVHWKHFRQQHFWLRQWRGR-'%&

LQWKH'HSOR\PHQW'HVFULSWRU
Be SURE to leave off e
comp/env/ part, and beth
HQWLW\! java:
 gin
UHVRXUFHUHI! Þrst subcontext (jdbc) wit h the
ade-
ProgrammerÕs mthe UHVUHIQDPH!MGEF&XVWRPEHU'%UHVUHIQDPH!
up name. NOTe!.
read DB nam UHVW\SH!MDYD[VTO'DWD6RXUFHUHVW\SH! the resource manager
connection factory type
e ifUHVDXWK!&RQWDLQHUUHVDXWK!
Who checks to see right
the user has th for UHVVKDULQJVFRSH!6KDUHDEOHUHVVKDULQJVFRSH!
the
security accessher the
database? Eit ontaUHVRXUFHUHI!
iner <res-sharing-scope> is optio
Bean or the C ÒS hareableÓ. It means that otnal, and defaults to

HQWLW\! same app, using the same re her beans in the
 transaction, can use the samsource, in the SAME
disable sharing, the value sho e connection. To
uld be ÒUnshareableÓ

 FKDSWHU
DEHDQ¶VHQYLURQPHQW

5HVRXUFHPDQDJHUFRQQHFWLRQIDFWRU\W\SHV

9OUCANTPUTARBITRARYTYPESINTOTHE$$&ORTHEFOURSTANDARDRESOURCEMANAGER
CONNECTIONFACTORIESlVE IFYOUCOUNT*-3TOPICSANDQUEUESASTWODIFFERENT
TYPES YOUMUSTUSEONEOFTHEFOLLOWING

 UHVW\SH!MDYD[VTO'DWD6RXUFHUHVW\SH!

 UHVW\SH!MDYD[MPV4XHXH&RQQHFWLRQ)DFWRU\UHVW\SH!
-06 UHVW\SH!MDYD[MPV7RSLF&RQQHFWLRQ)DFWRU\UHVW\SH!

 UHVW\SH!MDYD[PDLO6HVVLRQUHVW\SH!

KWWSZZZKHDGILUVWFRP  UHVW\SH!MDYD[QHW85/UHVW\SH!

!LTHOUGHTHESEFOURARETHEONLYTYPESSTANDARDTO%*" YOUCANUSETHE
#ONNECTORARCHITECTUREIFYOUNEEDACCESSTOOTHERRESOURCES LIKELEGACYSYSTEMS
#ONNECTORSAREOUTOFSCOPEFORTHISBOOKANDTHEEXAM SOYOUCANRELAX"UT
YOUDONEEDTOKNOWITSOUTTHERE IFYOUNEEDIT

5HVRXUFHDXWKRUL]DWLRQ
!UTHENTICATIONTOTHE%*"SERVERITSELFISONETHING BUTCHANCESARE THEDATABASE
HASITSOWNLOG INSCHEME!USERMIGHTNEEDALOG INNAMEANDPASSWORDTHATIS
DIFFERENTFROMTHEONEHEUSESTOAUTHENTICATETOTHE%*"SERVER
!SA"EAN0ROVIDER YOUCANCHOOSEBETWEENTWOWAYSTOGIVETHERESOURCE
MANAGERSUCHASADATABASE THEUSERSLOG INDATA

 UHVDXWK!&RQWDLQHUUHVDXWK!
&RQWDLQHUDXWKRUL]DWLRQPHDQVWKH'HSOR\HUPXVWFRQ¿JXUHWKHVLJQRQ
LQIRUPDWLRQIRUWKHUHVRXUFHPDQDJHU,W¶VFRPSOHWHO\YHQGRUDQGUHVRXUFHVSHFL¿F
DQGPLJKWPHDQWKDWWKHGHSOR\HUKDVWRPDSEHWZHHQWKHSULQFLSDOVDQGUROHV
XVHGLQ(-%VHFXULW\WRZKDWHYHUWKHUHVRXUFHPDQDJHUQHHGV$WWKHVLPSOHVW
OHYHOWKH'HSOR\HUPLJKWVSHFLI\DQDPHDQGSDVVZRUGWKDW¶OOOHWDQ\ERG\LQ

 UHVDXWK!%HDQUHVDXWK!
%HDQDXWKRUL]DWLRQPHDQVWKHSURJUDPPHUXVHVWKHRYHUORDGHGYHUVLRQRI
JHW&RQQHFWLRQ WKDWWDNHVDQDPHDQGDSDVVZRUG

&RQQHFWLRQFRQQ GVJHW&RQQHFWLRQ XVHU1DPHSDVVZRUG 

\RXDUHKHUH 
PDSSLQJUHVRXUFHV

7KHFRPSOHWHUHVRXUFHPDSSLQJSLFWXUH

IDNH-1',QDPH
UHVRXUFHUHI!&XVW'%UHVRXUFHUHI! DFWXDO-1',QDPH&XVW'DWDEDVH 5($/GDWDEDVHQDPH&XVWRPHU'DWD

sys-admin
,QFRGHWKH%HDQ3URYLGHUGRHV 'HSOR\HUPDSVWKH%HDQ 7KH6\V$GPLQ RUVRPHRQHLQ
D-1',ORRNXSRQD'DWD6RXUFH 3URYLGHU·VPDGHXSUHVRXUFHUHI! WKHRSHUDWLRQDOHQYLURQPHQW
ZKLFKKHXVHVWRJHWDGDWDEDVH QDPHWRWKHDFWXDO-1',QDPH FRQÀJXUHVWKHGDWDEDVHLQWRWKH
FRQQHFWLRQ +HGRHVQ·WNQRZWKH XQGHUZKLFKWKH'DWD6RXUFHLV VHUYHUDQGJLYHVLWD-1',QDPH
UHDO-1',QDPHRIWKHGDWDEDVH UHJLVWHUHG
DQGKH'(),1,7(/<GRHVQ·W
NQRZDFWXDOGDWDEDVHQDPH VR
KHPDNHVRQHXS%XWKHWHOOV
WKHGHSOR\HUZKDWKH·VGRQH
E\GHFODULQJDUHVRXUFHUHI!
HOHPHQWLQWKH''

:KHUHDQGKRZWKHPDSSLQJKDSSHQV

,QWKH(-% ,QDYHQGRU ,QDYHQGRU


'HSOR\PHQW VSHFL¿FZD\ VSHFL¿FZD\
'HVFULSWRU

UHVRXUFHUHI! GDWDEDVH-1', UHDOGDWDEDVH


QDPH

this is the part thatÕs in


spec, and the part you ha the youÕll Þnd out how to do this way out of the scope of
to know on the exam ve mapping from your vendor/ a bean developerÕs job
product documentation

 FKDSWHU
DEHDQ¶VHQYLURQPHQW

(-%UHIHUHQFHV
ZKHQDEHDQZDQWVDQRWKHUEHDQ
"EANSWHONEEDOTHERBEANSARETHELUCKIESTBEANSINTHESERVER"UT
REMEMBER BEANSHAVETOGOTHROUGHTHEHOMEINTERFACEJUSTLIKEEVERYBODY
ELSE)F"EAN!WANTSTODOA*.$)LOOKUPON"EAN"SHOME WEVEGOTTHE
SAMEPROBLEMASALWAYSˆWHATS"EAN"S*.$)NAME!SA"EAN0ROVIDER
YOUREJUSTMAKINGONEUP!TDEPLOYTIME THE$EPLOYERWILLMAPYOUR
FAKECODEDNAMETOTHEREAL*.$)NAMEMATCHINGABEANOFTHETYPEYOU
SPECIlEDINTHE$$
Òejb/AdviceGiverÓ must go
in the
DD (without the quotes).
Reme
when coding you have no ide mber,
LQDEHDQ·VEXVLQHVVPHWKRG a what
the REAL name will be...
,QLWLDO&RQWH[WLF QHZ,QLWLDO&RQWH[W 
2EMHFWR LFORRNXS ³MDYDFRPSHQYHME$GYLFH*LYHU´ 
$GYLFH+RPHKRPH  $GYLFH+RPH 3RUWDEOH5HPRWH2EMHFWQDUURZ R$GYLFH+RPHFODVV 
$GYLFHDGYLVRU KRPHFUHDWH 
FDOOPHWKRGVRQ$GYLVRU

LQWKH'HSOR\PHQW'HVFULSWRU Be SURE to leave off e


HQWLW\! comp/env/ part, and beth
gin
java:
 Þrst subcontext (ejb) wit h the
HMEUHI!

ade-
ProgrammerÕs mthe HMEUHIQDPH!HME$GYLFH*LYHUHMEUHIQDPH!
T
up name. NO me of
real JNDI na HMEUHIW\SH!6HVVLRQHMEUHIW\SH! this must be either
the bean. Session or Entity
KRPH!KHDG¿UVW$GYLFH+RPHKRPH!
The fully-qualiÞed name of
the home interface
UHPRWH!KHDG¿UVW$GYLFHUHPRWH!
The fully-
HMEUHI! the componqeualiÞed name of
nt interface

HQWLW\!


\RXDUHKHUH 
GHSOR\WLPHFXVWRPL]DWLRQ

(-%ORFDOUHIHUHQFHV

5SETHEEJB LOCAL REFTAGIFYOUWANTTOLOOKUPTHEBEANSLOCALHOME

HMEORFDOUHI!
HMEUHIQDPH!HME$GYLFH*LYHUHMEUHIQDPH!
e
The sub-elementsearlocal HMEUHIW\SH!6HVVLRQHMEUHIW\SH!
different for th -home>
interfaces: <local and <local>
ORFDOKRPH!KHDG¿UVW$GYLFH+RPH/RFDOORFDOKRPH!

instead of <h om e> ORFDO!KHDG¿UVW$GYLFH/RFDOORFDO!


in st ea d of <rem ot e>
HMEORFDOUHI!

WKHUH DUH QR
'XPE 4XHVWLRQV
Q: )UNDERSTANDTHEELEMENTNAMESFORHOMEAND
UHVUHI
W\S
LOCAL HOME-AKESSENSE"UTWHATSUPWITHREMOTE 127EHD H!PXVW
PHVVDJ
ANDLOCAL3HOULDNTITBECOMPONENTANDLOCAL GULYHQE H
7KHUHVU HDQ 
COMPONENT HIW\SH!H
³6HVVLRQ´ OHPHQWFD
RU³(QWLW\´ QE
DQ\RQHOH 7KDW¶VLW+ HHLWKHU
WDORQHDE RZFRXOG
A: 9OUCANRUNFROMYOURPAST BUTYOUCANTHIDE"EFORE
VDJHGULYH
GULYHQEHD
QEHDQ"5
QVGRQ¶WK
HDQORRNX
HPHPEHU
SDPHV
PHVVDJH
%*" THEREWASNOCONCEPTOFLOCALINTERFACES3OTHE KDYHKRP DYHFOLHQWV 
CLIENTVIEWWASALWAYSCALLED(OMEAND2EMOTE!LTHOUGH HV7KHUH 7KH\GRQ
XSLQ-1' ¶VQRLQWHUI ¶W
,6RGRQ¶W DFH
EVENTHATWASANINCONSISTENTNAMESCHEME SINCEBOTHTHE EHWULFNHG WRORRN

HOMEANDTHEBUSINESSMETHODINTERFACEWERE2EMOTEAS
INJAVARMI2EMOTE "UTONCELOCALINTERFACESCAMEONTHE
SCENE THINGSGOTABITMORECOMPLICATEDh,ETSSEEWECAN
NAMETHELOCALHOMEhLOCAL HOMEvANDTHENWELLNAMETHE
LOCALREMOTEhLOCAL REMOTEv3EETHEPROBLEM3OWITH%*"
 WESTOPPEDCALLINGTHEBUSINESSINTERFACEhTHEREMOTE
INTERFACEvANDSTARTEDCALLINGIThTHECOMPONENTINTERFACEv
!NDNOWWECALLTHEMhLOCALCOMPONENTINTERFACESvAND
hREMOTECOMPONENTINTERFACESv
<RXGR127VSHFLI\WK
EHDQW\SHLQHMEUHI!
H

QNWKDW\RXVKRXOG
Q: 5M YOUSTILLDIDNTANSWERMYQUESTION(OWCOME
%XWLVLV62WHPSWLQJWRWKL
<RXSXWLQ21/<WKHKRPH
DQGFRPSRQHQW
DQEXWQRWWKHEHDQ
THETAGSTILLSAYShREMOTEvFORTHEREMOTECOMPONENT LQWHUIDFHW\SHVIRUWKHEH
EHD QW\ SH"7KLQNDERXWWKH
INTERFACEANDhLOCALvFORTHELOCALCOMPONENTINTERFACE FODVV:K\QRWWKH
LQNDERXWKRZWLJKWO\
ÀH[LELOLW\WKLVJLYHV\RX7K
DQG'HSOR\HUZRXOG
FRXSOHGWKH%HDQ3URYLGHU
A: "ECAUSEOFTHEPAST"ACKWARDCOMPATIBILITYAND QHHGWREHLIWKH %HD Q3 URY LGHUKDGWRNQRZWKH
Q
ALLTHAT)N%*" THEEJB REFTAGSSAIDHOMEAND H[DFWFODVVW\SHRIWKHEHD
REMOTE SOTHEYSTILLDO4HENAMINGSCHEMEISBASICALLY
THISh4HECOMPONENTINTERFACEISEITHERLOCALORREMOTE
)FTHETAG DOESNTEXPLICITLYSAYhHOMEv THENYOURE
TALKINGABOUTTHECOMPONENTINTERFACE4HESEQUIRKYLITTLE
INCONSISTENCIESAREJUSTPARTOF%*"SCHARM

 FKDSWHU
DEHDQ¶VHQYLURQPHQW

8VLQJHMEOLQN!ZLWK(-%UHIHUHQFHV
)FTHE!PPLICATION!SSEMBLERSEESTHATONEBEANS%*"REFERENCEIT
TOANOTHERBEANINTHESAMEAPPLICATION SHESHOULDUSETHEEJB
LINKTOLINKTHEEJB REFTOANOTHERBEANSPECIlEDINTHEDEPLOYMENT
DESCRIPTOR4HINKOFEJB LINKASAKINDOFhJUMPTOTHISLABELvTHING
WHERETHEVALUEOFTHELINKMATCHESTHEVALUEOFANEJB NAME
HMEOLQN!YDOXHV0867
ELEMENTSOMEWHEREELSE PDWFKWKHYDOXHRIVRPH
6RPHZKHUHLQWKH'' 27+(5EHDQ·VHMEQDPH!
HQWLW\! $QGUHPHPEHUHMEQDPH!

LVQRWKLQJPRUHWKDQDODEHO
HMEUHI!
HMEUHIQDPH!HME$GYLFH*LYHUHMEUHIQDPH! LQWKH'',WGRHVQ·WKDYH
HMEUHIW\SH!6HVVLRQHMEUHIW\SH! WRPDWFKWKHFODVVQDPH
KRPH!KHDG¿UVW$GYLFH+RPHKRPH! LQWHUIDFHQDPH-1',QDPH
UHPRWH!KHDG¿UVW$GYLFHUHPRWH!
HMEOLQN!$GYLFH(-%HMEOLQN!
RUDQ\WKLQJHOVH,W·VMXVW
HMEUHI!
The <ejb-link> MUST match the
WKHODEHOLQWKH''IRUD
 value of an <ejb-name> for some SDUWLFXODUEHDQ
HQWLW\! other bean in this DD (or another
DD in the same J2EE app). 1RERG\EXW\RXUFRZRUNHUV
6RPHZKHUHHOVH ZLOOFDUHLI\RXQDPH\RXU
LQWKH'' EHDQVDIWHUVD\\RXUSHWV
VHVVLRQ!
HMEQDPH!$GYLFH(-%HMEQDPH!
 Remember, <ejb-name> is just a label in the DD, for
VHVVLRQ! other parts of the DD to refer to. ItÕs not the real
BEAN class name or anything (unless you happen to
make your ejb-name the same as the bean class).
'' ZKLFKPHDQV
QLTXHZLWKLQDVLQJOH
HMEQDPH!PXVWEHX
DVLQJOHHMEMDU EXWQ
RWZLWKLQDVLQJOH-
(( DSS
H!
XVWKDYHXQLTXHHMEQDP
12 7P HDQ DOOEH DQV LQWKHVDPH-((DSSP EMDUD QG HDF KR I
%XWWKLVG RHV LWKRQH''SHUHM
DYHPXOWLSOHHMEMDU¿OHVZ OHP
YDOXHV$VLQJOHHDUFDQK KEXW7+ (1 WKH UH¶V DS URE
HWKHVDPHHMEQDPH!$
WKH''¶VLQWKHDSSFDQKDY WLUHDSSQRWMXVWWKHFXUUHQW''IRUDPDWF
KLQJ
LQN !Z KLFKOR RNV LQWKH HQ QWLFDO HME QDPH!
ZLWKH MEO WKHDSSZLWK LGH
,I\RX'2KDYHWZR''¶VLQ QN¶V
HMEQDPH!1RWWRZRUU\ V\QWD[WRDGGWKHSDWKW RWKHH MEMDUZ KHU HWK LVOL
HD OWHUQDW H HME OLQN! UUHQ W''¶V MDU
HQWULHVXVHWK UHODWLYHWRWKHFX
LQJ H MEQ DP H!OLYH V7 KHSDWK IROORZHGE\³´ LV
PDWFK MEOLQN!
DGYLFHMDU$GYLFH(-%H
HMEOLQN!FXVW6HUYLFHV

\RXDUHKHUH 
GHSOR\WLPHFXVWRPL]DWLRQ

5HVRXUFHHQYLURQPHQWUHIHUHQFHV
WKLQN-06GHVWLQDWLRQV
!SA"EAN0ROVIDER YOUCANLOOKUPTWODIFFERENTKINDSOFRESOURCE RELATED
THINGSIN*.$)ARESOURCEMANAGERCONNECTIONFACTORYREFERENCE ANDA
REFERENCETOSOMETHINGKNOWNASANADMINISTEREDOBJECT4HEMAINDIFFERENCE
ISTHATARESOURCEENVIRONMENTREFERENCEISTOATHINGYOUWANT NOTTHE
FACTORYTHATGIVESYOUACONNECTIONTOTHETHINGYOUWANT)NOTHERWORDS
THEADMINISTEREDOBJECTISTHEDESTINATION WHEREASARESOURCEMANAGER
CONNECTIONFACTORYREFERENCEISJUSTTHElRSTSTEPINGETTINGWHATYOUREALLY
WANTACONNECTION 
"UTTODAY JUSTDOAMENTALSEARCHANDREPLACEINYOURMINDSOTHAT
EVERYWHEREYOUSEERESOURCEENVIRONMENTREFERENCE YOUSUBSTITUTE*-3
DESTINATION"ECAUSETHATSPRETTYMUCHALLYOULLUSEITFORNOW9ES THEY
COULDHAVECALLEDITh*-3DESTINATIONREFERENCEv BUTTHATWOULDBETOO
LIMITINGFORTHEFUTURE.OTTOMENTIONTOOCLEAR UNAMBIGUOUS AND
MEANINGFULTOHAVEANYVALUEWHATSOEVERASACOGNITIVECHALLENGE

LQDEHDQ·VEXVLQHVVPHWKRG
,QLWLDO&RQWH[WLF QHZ,QLWLDO&RQWH[W 
2EMHFWR LFORRNXS ³MDYDFRPSHQYMPV1HZ&XVWRPHU4XHXH´ 
MDYD[MPV4XHXHFXVW4  MDYD[MPV4XHXH R
XVHWKHFXVW4

YouÕre now tired of he


LQWKH'HSOR\PHQW'HVFULSWRU that you need to leave arofing
HQWLW\! java:comp/env/ part, and f the
 with the Þrst subcontext begin
UHVRXUFHHQYUHI! (jms)

ProgrammerÕs e.UHVRXUFHHQYUHIQDPH!MPV1HZ&XVWRPHU4XHXHUHVRXUFHHQYUHIQDPH!
made-up nam
NOT the readUHVRXUFHHQYUHIW\SH!MDYD[MPV4XHXHUHVRXUFHHQYUHIW\SH!
JNDI name of
the Queue This could also be
UHVRXUFHHQYUHI! javax.jms.Topic
 (youÕre not limit
ed
HQWLW\!
destinations, but to just JMS
th
standard thing w atÕs the only

e have right now
.

 FKDSWHU
DEHDQ¶VHQYLURQPHQW

*MIV8ZW^QLMZIVL)XXTQKI\QWV)[[MUJTMZ
ZM[XWV[QJQTQ\aNWZ\PM,MXTWaUMV\,M[KZQX\WZ
'RQ¶WZRUU\DERXWPHPRUL]LQJDOORIWKHVHQRZ,WZLOOPDNHPRUH
VHQVHDVZHJHWIDUWKHULQWRWKHWRSLFV)RUQRZLW¶V2.IRU\RXWR
KDYHMXVWDQRYHUDOOFRQFHSWRIZKDWHDFKLVUHVSRQVLEOHIRU

Annie puts in mostly thing s


be an s
about how two or more her in
Bill puts in mostly ot
are related to one an etimes
things that are related the application, and som info
to the code in the bean she customizes the bean ion.
classes for a particular applicat
%HDQ3URYLGHU $SSOLFDWLRQ$VVHPEOHU

ƒ EHDQQDPH 0RGLILFDWLRQVWR%HDQ3URYLGHULQIRUPDWLRQ
ƒ IXOO\TXDOLILHGQDPHRIEHDQFODVVDQG ƒ YDOXHVRIHQYLURQPHQWHQWULHV
KRPHDQGFRPSRQHQWLQWHUIDFHV ƒ GHVFULSWLRQILHOGV FKDQJHRUFUHDWH
ƒ EHDQW\SH VHVVLRQHQWLW\HWF ƒ UHODWLRQVKLSQDPHPRGLILFDWLRQV
ƒ UHHQWUDQF\ IRUHQWLW\EHDQVRQO\ ƒ PHVVDJHGULYHQEHDQPHVVDJHVHOHFWRU
ƒ VWDWHPDQDJHPHQWIRUVHVVLRQEHDQV PD\UHVWULFWEXWQRWUHSODFH
VWDWHOHVVRUVWDWHIXO
ƒ WUDQVDFWLRQGHPDUFDWLRQW\SH EHDQRU $SSOLFDWLRQ$VVHPEO\LQIRUPDWLRQ DOO
FRQWDLQHU RSWLRQDO 
ƒ HQWLW\EHDQSHUVLVWHQFHPDQDJHPHQW ƒ ELQGLQJHQWHUSULVHEHDQUHIHUHQFHV LH
EHDQRUFRQWDLQHU OLQNLQJRQHEHDQWRDQRWKHULQWKHVDPH
ƒ SULPDU\NH\FODVV HMEMDURU-((DSS
ƒ IRU&03DEVWUDFWVFKHPDQDPH&03 ƒ VHFXULW\UROHV WKHUHFRPPHQGHGUROHVIRU
ILHOGV&05UHODWLRQVKLSVILQGHUDQGVHOHFW FOLHQWVRIWKHEHDQV
TXHULHV ƒ PHWKRGSHUPLVVLRQVDUHODWLRQVKLS
ƒ UHVRXUFHPDQDJHUFRQQHFWLRQIDFWRU\ EHWZHHQVHFXULW\UROHVDQGPHWKRGVRIWKH
UHIHUHQFHV KRPHDQGFRPSRQHQWLQWHUIDFHRIWKHEHDQ
ƒ HQYLURQPHQWHQWU\GHFODUDWLRQV ƒ OLQNLQJVHFXULW\UROHUHIHUHQFHVWRVHFXULW\
UROHV
ƒ (-%UHIHUHQFHV ORFDODQGUHPRWH
ƒ VHFXULW\LGHQWLW\W\SHFDOOHURUUXQDV
ƒ VHFXULW\UROHUHIHUHQFHV
ƒ WUDQVDFWLRQDWWULEXWHVIRUPHWKRGVRID&07
ƒ IRUPHVVDJHGULYHQEHDQVGHVWLQDWLRQ
EHDQ
PHVVDJHVHOHFWRUDQGDFNQRZOHGJHPHQW
PRGH

\RXDUHKHUH 
WKH'HSOR\HU¶VUHVSRQVLELOLWLHV

,MXTWaMZZM[XWV[QJQTQ\aNWZ\PM
,MXTWaUMV\,M[KZQX\WZ

0RGLILFDWLRQVWR%HDQ3URYLGHULQIRUPDWLRQ
ƒ HQVXUHOHJDOYDOXHVIRUDOOHQYLURQPHQWHQWULHV

2WKHUWDVNVUHODWHGWRWKHGHSOR\PHQWGHVFULSWRU$OODUHGRQHLQ
DYHQGRUVSHFLILFWRRODQG127DSDUWRIWKHHMEMDUGHSOR\PHQW
GHVFULSWRU

6(&85,7<
ƒ DVVLJQRIWKHVHFXULW\GRPDLQDQGSULQFLSDOUHDOPWRWKHDSS

'HSOR\HU ƒ DVVLJQSULQFLSDOVDQGRUJURXSVWRVHFXULW\UROHVEXW127WKHVHFX
ULW\UROHUHIHUHQFHV
ƒ SULQFLSDOGHOHJDWLRQIRULQWHUFRPSRQHQWFDOOV LHFRQILJXULQJWKH
UXQDVSULQFLSDO 

(6285&(0$1$*(5&211(&7,21)$&725,(6
7KH'HSOR\HU
GRHVWKLQJV ELQGLQJRIUHVRXUFHPDQDJHUFRQQHFWLRQIDFWRU\UHIHUHQFHVWRDQ
XVLQJYHQGRU DFWXDOUHVRXUFHPDQDJHUFRQQHFWLRQIDFWRU\LQWKHRSHUDWLRQDO
VSHFLÀFWRROV HQYLURQPHQW
DERXW FRQILJXUDWLRQVLJQRQLQIRIRUFRQWDLQHUDXWKRUL]HGUHVRXUFHDFFHVV
<RXPLJKWVHHDTXHVWLRQ
VUH ODWHG
WKHGHSOR\HUDQGWKLQJ
QWG HVF ULSW RU
WRWKHGHSOR\PH -%5()(5(1&(6
QN³7K HGHSO R\H ULV Q¶W
DQGWKL
WKH
VXSSRVHGWRWRXFKWKLQJVLQ HQVXUHWKDWDOO(-%UHIHUHQFHVDUHERXQGWRWKHKRPHVRIEHDQV
DQ¶WEH KLV MRE ´
''VRWKLVF WKDWH[LVWLQWKHRSHUDWLRQDOHQYLURQPHQW
YH
%XWWKHGHSOR\HUGRHVKD
VUH ODWH G HQVXUHWKDWWKHWDUJHWEHDQLVW\SHFRPSDWLEOHZLWKWKHW\SHV
DORWRIUHVSRQVLELOLWLH
KH '' VR ORR N GHFODUHGLQWKH(-%UHIHUHQFH
WRWKLQJVLQW
RIWKH
FDUHIXOO\DWWKHGHVFULSWLRQ
WDVN
(6285&((19,5210(175()(5(1&(6 -06WRSLFRUTXHXH
)RUH[DPSOHZKRPDSV
OH
VHFXULW\UROHVWRVHFXULW\UR HQVXUHWKDWDOOGHFODUHGUHVRXUFHUHIHUHQFHVDUHERXQGWRREMHFWV
$S S$ VVH PEOHU
UHIHUHQFHV"7KH WKDWH[LVWLQWKHRSHUDWLRQDOHQYLURQPHQWDQGHQVXUHWKDWWKHWDUJHW
SU LQF LSD OVW RV HFX ULW\
:KRPDSV REMHFWLVW\SHFRPSDWLEOHZLWKWKHGHFODUHGW\SH
UROHV"7KH'HSOR\HU

 FKDSWHU
DEHDQ¶VHQYLURQPHQW

:MUMUJMZQVO_PWLWM[_PI\
7KLQNDERXWLW
KRZFDQ,SRVVLEO\NQRZWKH
QDPHVRIWKLQJVLQWKHVHUYHUZKHUH
WKLVEHDQPLJKWUXQ",ZULWHFRGH
ZLWKRXWNQRZLQJZKHUHWKHEHDQVZLOO
HQGXS6R,KDYHWRFRGHLQJXHVVHVDERXW
VHFXULW\UROHQDPHVRUWKH-1',QDPHRI
DQRWKHUEHDQP\EHDQLVXVLQJ ,·PWKHRQO\RQHZKR
UHDOO\NQRZVKRZWKHVHUYHULV
FRQÀJXUHGDQGZKDW-1',QDPHV
HYHU\WKLQJKDV$QG,·PWKHRQO\RQH
ZKRNQRZVDERXWWKHVHFXULW\GRPDLQLQ
WKLVFRPSDQ\%XW,GRQ·WNQRZZKDW·VLQWKH
FRGHVR,·PFRXQWLQJRQWKH%HDQ3URYLGHU
%HDQ3URYLGHU WRWHOOPH YLDWKHGHSOR\PHQWGHVFULSWRU 
DERXWKLV¶PDGHXS·QDPHVVR,FDQ
PDSWKRVHIDNHQDPHVWRUHDO
QDPHVLQWKHVHUYHU

'HSOR\HU
,KDYHWR
LQWHJUDWHWZRRUPRUH
EHDQV SRVVLEO\IURPGLIIHUHQW
YHQGRUV 6RLI%HDQ$XVHVWKHPDGH
XSVHFXULW\UHIHUHQFH´(PSOR\HHµ
DQG%HDQ%KDVFRGHXVLQJWKHPDGH
XSVHFXULW\UHIHUHQFH´0LQLRQVµ,KDYH
WRPDSWKHPERWKWRDVLQJOHVHFXULW\
UROH´6ODYHVµ7KH%HDQ3URYLGHU
GHFODUHVWKHPDGHXSQDPHLQWKH''
7KDW·VKRZKHWHOOVPHZKDWKH·V
GRQHLQWKHFRGH

$SSOLFDWLRQ
$VVHPEOHU

\RXDUHKHUH 
GHSOR\WLPHFXVWRPL]DWLRQ

6W_TM\¼[TWWSI\\PMJMIV¼[Z]V\QUMMV^QZWVUMV\
7EREALMOSTDONEWITHTHEBEANSWORLD.OWTHATWEVESEENTHEBEANSSPECIAL
*.$)ENVIRONMENT WESTILLHAVEAFEWMORELITTLEDETAILSONTHEBEANSRUNTIME
ENVIRONMENT%ACHOFTHESEISCOVEREDBYTHEEXAMOBJECTIVES SODONTFALLASLEEP
NOW7EREALMOSTDONE

ƒ *XDUDQWHHG$3,V
<RXPXVWZKLFK$3,VDUHDQGDUHQRWJXDUDQWHHGWREHSDUWRI
HYHU\(-%FRQWDLQHU)RUH[DPSOH-06LVVXSSRUWHG-;7$LV
QRW

ƒ *XDUDQWHHGVHUYLFHV
<RXPXVWNQRZZKDWLVDQGLVQRWJXDUDQWHHGWREHVXSSRUWHG
E\HYHU\(-%FRQWDLQHU)RUH[DPSOHWUDQVDFWLRQVXSSRUWLV
JXDUDQWHHGORDGEDODQFLQJLVQRW

ƒ 6WUXFWXUHRIWKHHMEMDU
0D\EHWKLVLVQ·WUHDOO\DUXQWLPHHQYLURQPHQWWKLQJEXWZHGLGQ·W
KDYHDQRWKHUJRRGSODFHWRVWLFNLWDQG\RXKDYHWRNQRZLW
6RKHUHLWLVMXVWLQFDVH\RXGRQ·WUHPHPEHUZKDWZHFRYHUHG
ZDDDDD\EDFNLQFKDSWHU)RUH[DPSOH\RXPXVWNQRZWKDWWKH
DQHMEMDUGRHVQRWKDYHDPDQLIHVWEXW0867KDYHD0(7$,1)
GLUHFWRU\DQGWKDWGLUHFWRU\0867KROGWKHGHSOR\PHQWGHVFULSWRU
:KLFKRK\HV0867EHQDPHG´HMEMDU[POµ

ƒ 3URJUDPPLQJUHVWULFWLRQV
,I\RXZDQW\RXUEHDQWREHSRUWDEOHWRFRPSDWLEOHZLWKDQ\(-%
FRPSOLDQWFRQWDLQHU\RXPXVWQRWGRDQ\RIWKHWKLQJVRQ
WKHOLVWHYHQLI\RXUYHQGRUDOORZVLW ZKLFKWKHYHQGRUPD\GR
XQLQWHQWLRQDOO\ 
$QGLW·VQRWMXVWIRUSRUWDELOLW\EXWIRUVDIHW\,I\RXWU\WRPDQDJH
\RXURZQWKUHDGVIRUH[DPSOH\RX·UHVWHSSLQJRQWKH&RQWDLQHU·V
WRHVDQGZKRNQRZVZKDWNLQGRIPHVV\RX·OOHQGXSZLWK<RXGR
QRWZDQWWRPHVVZLWKWKH&RQWDLQHU·VMRE
-XVWEHFDXVH\RXU&RQWDLQHUSHUPLWVLWGRHVQ·WPDNHLWULJKW$QG
IRUWKHH[DP\RXPXVWNQRZZKDW·VUHVWULFWHGLQWKHVSHF
,IWKHH[DPDVNVLIVRPHWKLQJLVSRVVLEOHDQGLW·VRQHRIWKH
H[SOLFLWO\UHVWULFWHGWKLQJVLQWKHVSHF\RXPXVWVD\12HYHQLI
\RXUYHQGRUOHWV\RXGRLW$VIDUDVWKHH[DPLVFRQFHUQHGLI\RX
FDQ·WGRLWDQGUHPDLQSRUWDEOH\RXFDQ·WGRLW

 FKDSWHU
DEHDQ¶VHQYLURQPHQW

?PQKP)81[LWM[-2*O]IZIV\MM'

6XSSRUWHG$3,V
-6(VXS
ƒ -DYD6WDQGDUG(GLWLRQY -6( -DYD
SRUWLV
127
ƒ -1',$3,  
-XVWEHFDX
VHDQ$3,LV
ƒ -7$H[WHQVLRQ WKH8VHU7UDQVDFWLRQ -6(VWDQG
DUGOLEUDU\I
LQWKH
LQWHUIDFHRQO\ GRHVQ RUYHUVLRQ
RWPHDQWK
JXDUDQWHHG DW$3,LV
IRU(-%7
ƒ -'%&H[WHQVLRQ VSHFUHTXLU
HV
KH(-%
VRLI\R RQO\-6(YHUVLRQ
ƒ -06H[WHQVLRQ XZULWHDE
UHOLHVRQVR HDQWKDW
PH
\RXUEHDQLV WKLQJLQ-6(
ƒ -DYD0DLOVHQGLQJPDLORQO\ EHSRUWDEOH
QRWJXDUDQ
WHHGWR
DFURVVDQ
ƒ -$;3 FRQWDLQHU \(-%

7KDWPHDQ
VIRUH[DP
WKDWWKH-D SOH
YD&U\SWRJ
([WHQVLRQ UDSK\
-&( $3,VD
JXDUDQWHHG UHQRW
<RXGRQ¶WKDYHWRPHPRUL]HDOORI WREHVXSS
(-%H RUWHGE\
WKHH[DFWYHUVLRQQXPEHUV YHQWKRXJK
QRZSDUWR WKH\DUH
IWKH-6(
7KHH[DPLVQ¶WJRLQJWRWULFN\RXRQVRPHWKLQJ DVRIYHUVLR SODWIRUP
Q
DVWULYLDODVUHPHPEHUZKHWKHU-DYD0DLOLVRU
RUZKHWKHUWKH-7$H[WHQVLRQLVRU7KHRQO\
QXPEHUV\RXUHDOO\QHHGWRNQRZ EHVLGHVWKHLQ
(-% DUHWKH-'%&H[WHQVLRQDQGWKDWRQO\
YHUVLRQ QRWQHFHVVDULO\ RI-6(LVJXDUDQWHHG

6KDUSHQ \RXU SHQFLO


-6(
:LWKRXWORRNLQJLWXSZULWH -1',
GRZQZKDWHDFKRIWKHVH
$3,VGR,I\RXGRQ¶WNQRZ -7$
WDNHDJRRGJXHVVEDVHG
RQZKDW\RXNQRZDERXW -'%&
(-%
-06
:H¶OOVWDUW\RXRIIE\JLYLQJ
\RXWKHPRVWGLI¿FXOWRQH
-DYD0DLO sending mail
-$;3

\RXDUHKHUH 
PHPRUL]LQJWKH$3,VLQ(-%

$3,VWKD
WDUH
127LQWK
H
(-%VSHF
%HFDUHIXOR
I$3,VWKDW
JXDUDQWHHG DUHQ¶W
6RPH$3
6HUYOHWVRU ,VOLNH
-63DUHJX
E\WKH-( DUDQWHHG
(VSHFEX

 
WKH(-%VS WQRWE\
HFDQGWKH
FDUHVRQO\D H[DP
THAT ERXWZKDW¶V
E LI V E RS APIC TURE OP (-%VSHF LQWKH
SENGER D AILONT
B T H E * -3MES APIECEOF*AVA- :KDW¶VQRW
SDUWRI(-%
"O ITH  "
"#CANW BOXUNDERNEATH +HUHDUHV
HASA*$ N A M IN G PLJKWWULFN
RPHRIWKH
RQHVWKDW
$) 0 
ANDA*. CHOF*AX *AVA
\RX
V E RS I T TOABUN A GEDBYA NOW
(EDE LI I S M A N -;7$
ELIVERY ELL SO
A N K FU LLY HISD A N D A LLGOESW -76
4 H 4!
ON!0)* NCH
4RANSAC TI AKEAHOURLU LBURN
-LQL NOT guaranteed as
HEGETST
O T
P IC TURESWIL M -0;
STORYWIT
H T H E
GTHEEXA part of EJB 2.0 !!
ZINGTHIS IERTORECALLDURIN -&$
MEMORI E A S -63
MAKEIT
ITINAND 6HUYOHWV

7KLVGHOLYHU\PDQDJHGE\ ,·P
-DYD7UDQVDFWLRQ$3, -7$  ,·P-DFN -DFN ,·P-DFN

JavaMail
Java Messaging
Service (JMS)

TheyÕre
all Jacks
Bob takes a 1.3 hour (JAXP)
lunch (J2SE 1.3)

 FKDSWHU
DEHDQ¶VHQYLURQPHQW

6RPHRIWKHNH\JXDUDQWHHG
VHUYLFHVDQGEHKDYLRU

ƒ 'LVWULEXWHGWUDQVDFWLRQV
ƒ 7KUHDGVDIHW\
ƒ &RQWDLQHUPDQDJHGSHUVLVWHQFHIRUHQWLW\EHDQV
ƒ $VHFXULW\GRPDLQDQGRQHSULQFLSDOUHDOP PXOWLSOHUHDOPV
LVQRWJXDUDQWHHG
ƒ (QIRUFHFOLHQWDFFHVVVHFXULW\SROLFLHVVSHFLILHGE\WKH
GHSOR\PHQWGHVFULSWRUDQGRWKHUGHSOR\PHQWWRROV
,XVHGWRWKLQNFOXVWHULQJ
ƒ ,PSOHPHQWDWLRQRIWKHMDYDFRPSHQYHQYLURQPHQWQDPLQJ IDLORYHUDQGORDGEDODQFLQJZHUH
FRQWH[WSURYLGHGWRWKHEHDQ SDUWRIWKHVSHF%XWWKH\DUHQ·W,I
,QHHGWKRVHIHDWXUHV,KDYHWRÀQG
ƒ *HQHUDWLRQRIFODVVHVWKDWLPSOHPHQWWKHKRPHDQG DYHQGRUWKDWVXSSRUWVWKHP0DQ\
FRPSRQHQWLQWHUIDFHVDQGVWXEFODVVHVIRUUHPRWHREMHFWV GREXWGRQ·WEHIRROHGLQWRWKLQNLQJ
WKLVLVSDUWRIWKH(-%VSHF
ƒ ,PSOHPHQWDWLRQRIWKHUHVRXUFHPDQDJHUFRQQHFWLRQ
IDFWRU\FODVVHVIRUUHVRXUFHVFRQILJXUHGZLWKWKHVHUYHU

6RPHWKLQJV
VRXQGJRRG
EXWDUHQ·W
JXDUDQWHHG
U
(YHU\ERG\WDONVDERXWWKHL
DQF HG IDX OW
FOXVWHUHGORDGEDO
VWHP2K \H DK ZLW KIDLO
WROHUDQWV\
WLW\ GD WD ,W·VDOZD\VDERXW
RYHUOD]\ORDGLQJRIHQ
DQGLQPHPRU\G DWDFD FKL QJ \RXUQHHGV

UV
$OWKRXJKPRVW-((YHQGR
SURYLGHRQHRUP RUH RI
Q¶W
WKHVHFDSDELOLWLHVWKH\DUH
JXDUDQWHHGLQWKHVSHF
HUHQFH
%HVXUH\RXNQRZWKHGLII
DQW HHG 
EHWZHHQZKDWLVJXDU
RW/RR NLQWKH 
DQGZKDWLVQ
WOHG
VSHFXQGHUWKHVHFWLRQVWL
UUHVSR QVL ELOLW\´
³&RQWDLQHU3URYLGH

\RXDUHKHUH 
WKHHMEMDU

<RXKDYHWR
NQRZZKDW
?PI\5=;<JMQVIVMRJRIZ' LV127LQWKH
HMEMDU
DW¶V
<RX¶UHH[SHFWHGWRNQRZZK
beans 127LQWKHHMEMDU¿ OH1R WLFH 

J" 7KH WKLQJ \RX
ZKDW¶VPLVVLQ
-$5 HFW WR QG
¿ LQD-$5 "+ HUH¶V
H[S
XDOO\
 DKLQWLW¶VWKHWKLQJWKDWXV
0( 7$,1) GLU HFW RU\
JRHVLQWKH
HMEMDU '2&7<3(
deployment descriptor W7KH
)LJXUHLWRXW"7KHPDQLIHV
HMEMDU
38%,QF

OHLVQRWUHTX LUHG DV


HMEMDU[PO PDQLIHVW¿
-% <R X& $1 SX WRQ HLQ
RI(
QG XVX DOO\ QR W
EXWLW¶VRSWLRQDOD
QHHGHG 
867
<RXDOVRPXVWNQRZZKDW0
LQWKH HME MDU FODVV HV JHQ
QRWEH
U5 HP HP
;\Z]K\]ZMWNIVMRJRIZ HUDWHGE\WKHFRQWDLQH
HUL PS OHP HQW VWK H
EHUWKHFRQWDLQ
QG FRP SRQ HQW LQWHUID FH 
KRPHD
WHUIDFHV
DQGPDNHVVWXEVLIWKHLQ
LVG RHV Q¶W KDSSHQ
-$5 DUHUHPRWH7K
HSO R\P HQW VRWK H\ DUHQ¶W
 XQWLOG
Q3 URY LGHU
SDUWRIZKDWWKH%HD
$V VHP EOH USX WLQWR
HMEMDU RU$SSOLFDWLRQ
LUG HOLYHUD EOH ²W KH HME MDU¿OH
WKH
The classes MUST 0(7$,1)
FRP
be in a directory
structure that
matches the package.
KHDGILUVW
'2&7<3(
HMEMDU
38%,QF
7KHQDPLQJ
HMEMDU[PO FRQYHQWLRQLV
r
deployment descripto QRWUHTXLUHG
MUST be na me d
T
ejb-jar.xml and MUS
7KHQDPLQJFRQYHQWLR
QIRUDEHDQ
N F LVWRSXWWKHFRPSRQHQ


   be in the M ET A -I WKHFRPSRQHQWLQWHUIDF
WQDPHDV
HQDPH
directory
 

$GYLFHFODVV  


WKHQDGGµKRPH¶RUµEH
DQ¶WRFRPH
$GYLFH+RPHFODVV $GYLFH%HDQFODVV XSZLWKWKHRWKHUWZRQ
DPHV:H
VWURQJO\UHFRPPHQGWK
ome and The bean class Þle DW\RXIRO
The beannÕst hinterfaces ORZLWLWPDNHVGHSOR\
PHQWPXFK
e
compon ion and entity HDVLHUDQGOHW¶VRWKHUV
UHDG\RXU
(for sessot message-driven)
FRGH%XWLW¶VQRWDUHT
XLUHPHQW
beans, n
 FKDSWHU
DEHDQ¶VHQYLURQPHQW

8ZWOZIUUQVOZM[\ZQK\QWV[
:KDWWRDYRLGLQ(-%LI\RXZDQWWRJXDU
DQWHH\RXUEHDQFDQEHGHSOR\HGRQ$1<
(-%FRPSOLDQWVHUYHU 'RQ·WEHI
RROHG
E\WKLQJVW
KD
RQO\6((0 W
EDG
get security
get sec y <RX¶UHH[SHF
EXWDUHQ·W

ServerSocket
erverSocke
verSo policyy info
inf FDQDQGFDQ¶
WHGWRNQRZ
WGRLQ(-%
ZKDW\RX
WKLQNDERXWL ,I\RX
WWRRPXFK\
SV\FK\RXUVH RXFDQ
OILQWRWKLQNLQJ
H[DP WKDWD  RQWKH
Q\WKLQJFRXO
GEHEDG
Read/Write
Read/Writ
ead/ +HUHDUHDIH
ZWKLQJVWKDW
staticc ffiel
ield &$1GRLQ(
XSRQWKHH[
-%WKDWPLJ
DP
\RX
KWWULS\RX

MDYDQHW6R
FNHWSODLQ
load
oad native
ad a nati 6RFNHWVDUH
OLVWHQRQD6
¿QH<RXMX
ROGFOLHQW
VWFDQ¶W
HUYHU6RFNHW
library
ibra ([WHQGDQR
WKHUFODVVIU
EHDQFODVV RP\RXU
AWT output
T for outpp or WDQFHLV2.
QRUPDOMDYD
IRUDEHDQF
LQKHUL
keyboard input
boardd inp
in 0DUNDEHD
ODVV
Q¿HOGVWDWL
¿QDOLQID FDQG
FWWKDW¶VWKH
\RX¶UHVXSSR RQO\ZD\
VHGWRPDUN
Threads
hread ¿HOG VHHWK
UHDGZULWHVW
HUHVWULFWLRQ
DVWDWLF
DERXWQR
DWLF¿HOGV
create
reate gget a
ate or ge
class
ass loader
oade

java.io
va.io
a.io package
pac
pack YiX`e
gfn\i
9OUREALLYWANTTOREMEMBERTHESEPROGRAMMINGRESTRICTIONS4HEBEST
WAYTOMAKETHATHAPPEN3TOPRIGHTNOWANDTHINKABOUTEACHOF
THESERESTRICTEDTHINGS ANDCOMEUPWITHONEORMOREREASONSFORWHY
THERESTRICTIONEXISTS7HENYOUREDONE TURNTOPAGEINTHE%*"
SPEC WHERETHESERESTRICTIONSANDOTHERS AREDESCRIBED

\RXDUHKHUH 
GHSOR\WLPHFXVWRPL]DWLRQ

0HPRUL]H7+,6

([HUFLVH
 /RRNLQJDWWKHSLFWXUHEHORZVHHLI\RX
FDQWHOOWKHVWRU\SXWWLQJLQWKH$3,¶V
ZKHUHWKH\EHORQJ:HGLGRQHIRU\RX

j2se 1.3
He takes a 1.3 hour
lunch-break.

Draw the structure of


the JAR Þle here:
 8VLQJWKHSLHFHVEHORZ DQG21/<WKHSLHFHV
EHORZ UHDVVHPEOHWKHPLQWRWKHLUFRUUHFW
FRQ¿JXUDWLRQ GUDZLQJOLQHVDVQHHGHG 'UDZ
\RXU¿QLVKHGVWUXFWXUHLQWKHVSDFHDWWKHULJKW
DQGZULWHWKHFRUUHFWQDPHVRQWKHGLUHFWRULHV
DQGQDPHWKH[PO¿OH7KHEHDQLVLQWKH
FRPKHDG¿UVWSDFNDJH
-$5


HMEMDU

'2&7<3(
HMEMDU
38%,QF

BBBBBB[PO





$GYLFHFODVV 




$GYLFH+RPHFODVV
$GYLFH%HDQFODVV

 FKDSWHU
DEHDQ¶VHQYLURQPHQW

0RFN([DP
7HICH!0)SAREGUARANTEEDTOBESUPPORTEDBY%*"CONTAINERS#HOOSE
1 ALLTHATAPPLY
R! *!80
R" *.$)
R# *84!
R$ *$"#
R% *-3

7HATSTRUEABOUTANENTERPRISEBEANSENVIRONMENT#HOOSEALLTHATAPPLY
2
R! %NVIRONMENTENTRIESCANBEUNIQUEFORINSTANCESOFTHESAME
ENTERPRISEBEANTYPE
R" 7ITHINASINGLE%*"CONTAINER AN%*"CANHAVEMULTIPLESETSOF
ENVIRONMENTENTRIES
R# !N%*"SENVIRONMENTENTRYSVALUESCANBEMODIlEDBYTHE%*"AT
RUNTIME
R$ %NVIRONMENTENTRYVALUESMAYBEPRIMITIVESORWRAPPERTYPES

7HICH!0)SAREGUARANTEEDTOBESUPPORTEDBY%*"CONTAINERS#HOOSE
3 ALLTHATAPPLY
R! *3%
R" *!8"
R# *!82
R$ *!80

\RXDUHKHUH 
FRIIHHFUDPPRFNH[DP

'IVENABEANNAMED@#USTOMER ANDANENVIRONMENTENTRYNAMED@LAST.AME
4 WHICHCODEFRAGMENTS INSIDEOFTHEBEANCLASSWOULDRETURNTHEVALUEOFTHE
ENVIRONMENTENTRY#HOOSEALLTHATAPPLY
R! &RQWH[WF QHZ6HVVLRQ&RQWH[W 
  &RQWH[WH  &RQWH[W FORRNXS ³MDYDFRPSHQY´ 
  6WULQJQDPH  6WULQJ HORRNXS ³ODVW1DPH´ 
R" &RQWH[WF QHZ,QLWLDO&RQWH[W 
  &RQWH[WH  &RQWH[W FORRNXS ³MDYDFRPSHQY
&XVWRPHU´ 
  6WULQJQDPH  6WULQJ HORRNXS ³ODVW1DPH´ 
R# &RQWH[WH QHZ/RRNXS ³MDYDFRPSHQY´ 
  &RQWH[WF QHZ,QLWLDO&RQWH[W H 
  6WULQJQDPH  6WULQJ FORRNXS ³ODVW1DPH´ 
R$ &RQWH[WF QHZ,QLWLDO&RQWH[W ³&XVWRPHU´ 
  &RQWH[WH  &RQWH[W FORRNXS ³MDYDFRPSHQY´ 
  6WULQJQDPH  6WULQJ HORRNXS ³ODVW1DPH´ 
R% &RQWH[WF QHZ,QLWLDO&RQWH[W 
  &RQWH[WH  &RQWH[W FORRNXS ³MDYDFRPSHQY´ 
  6WULQJQDPH  6WULQJ HORRNXS ³ODVW1DPH´ 

7HENPROGRAMMINGASESSIONBEANCLASSWHICHTECHNIQUES SHOULDALWAYSBE
5 AVOIDEDTOENSUREBEANPORTABILITYACROSSALL%*"CONTAINERS#HOOSEALL
THATAPPLY
R! 5SINGTHEMDYDQHW6RFNHWCLASS
R" 5SINGINNERCLASSES
R# 5SINGTHE@lNALMODIlERFORlELDS
R$ 0ASSING@THISASANARGUMENT

 FKDSWHU
DEHDQ¶VHQYLURQPHQW

7HICHOFTHEFOLLOWINGAREVALIDDATATYPESINAHQYHQWU\W\SH!ELEMENT
6 INABEANSDEPLOYMENTDESCRIPTOR#HOOSEALLTHATAPPLY
R! E\WH
R" VKRUW
R# $UUD\/LVW
R$ MDYDODQJ%RROHDQ
R% MDYDODQJ&KDUDFWHU

7HENPROGRAMMING%*"SWHICHDECLARATIONS SHOULDBEAVOIDEDTOENSURE
7 BEANPORTABILITYACROSSALL%*"CONTAINERS#HOOSEALLTHATAPPLY
R! ¿QDOLQW[
R" VWDWLFLQW[
R# ¿QDOVWDWLFLQW[
R$ ¿QDOWUDQVLHQWLQW[

7HOISTYPICALLYRESPONSIBLEFORSPECIFYINGlNDERANDSELECTQUERIESINTHE
8 BEANSDEPLOYMENTDESCRIPTOR
R! 4HEBEANPROVIDER
R" 4HEAPPLICATIONASSEMBLER
R# 4HEDEPLOYER
R$ 4HESYSTEMADMINISTRATOR
R% 4HESERVERPROVIDER

7HICHDEPLOYMENTDESCRIPTORELEMENTS WOULDBEUSEDWHENOBTAININGA
9 *$"#CONNECTION#HOOSEALLTHATAPPLY
R! HMEUHI!
R" HMEOLQN!
R# UROHQDPH!
R$ HQYHQWU\!
R% UHVRXUFHUHI!

\RXDUHKHUH 
FRIIHHFUDPPRFNH[DP

7HOWILLTYPICALLYMERGEMULTIPLEEJB JARlLESINTOASINGLEEJB JARlLE


10
R! 4HEBEANPROVIDER
R" 4HEAPPLICATIONASSEMBLER
R# 4HEDEPLOYER
R$ 4HESYSTEMADMINISTRATOR
R% 4HESERVERPROVIDER

7HICHDEPLOYMENTDESCRIPTORELEMENTS WOULDBEUSEDBYABEANPROVIDERTO
11 LOCATETHEHOMEINTERFACESOFOTHER%*"S#HOOSEALLTHATAPPLY
R! HMEUHI!
R" UHVW\SH!
R# HQYHQWU\!
R$ UROHQDPH!
R% UHVRXUFHUHI!

7HICHAREBEANPROVIDERRESPONSIBILITIESCONCERNINGRESOURCEMANAGER
12 CONNECTIONFACTORYREFERENCES#HOOSEALLTHATAPPLY
R! #ONlGURERESOURCEMANAGERSINTHE%*"SERVER
R" #ONlGURESIGN ONINFORMATIONFORTHERESOURCEMANAGER
R# !SSIGNSUCHAREFERENCETOTHEDEPLOYMENTDESCRIPTOR
R$ #REATINGASYMBOLICLINKTO*.$)

4HEEJB JARlLEISCONSIDEREDTOBEPARTOFTHECONTRACTBETWEENWHICHPAIRS
13 #HOOSEALLTHATAPPLY
R! BEANPROVIDERANDSYSTEMADMINISTRATOR
R" BEANPROVIDERANDAPPLICATIONASSEMBLER
R# APPLICATIONASSEMBLERANDDEPLOYER
R$ APPLICATIONASSEMBLERANDSYSTEMADMINISTRATOR
R% DEPLOYERANDSYSTEMADMINISTRATOR

 FKDSWHU
DEHDQ¶VHQYLURQPHQW

7HICHCLASSlLESMUSTBEINCLUDED EITHERDIRECTLYORBYREFERENCE INEVERYEJB


14 JARlLE#HOOSEALLTHATAPPLY
R! 4HEENTERPRISEBEANCLASS
R" 4HESTUBCLASSFORTHE%*"/BJECTINTERFACE
R# 4HEENTERPRISEBEANSSUPERCLASSES
R$ !NY*3%CLASSESUSEDASARGUMENTSORRETURNTYPES

7HICHROLEISTYPICALLYRESPONSIBLEFORDECLARINGTHERESOURCECONNECTION
15 FACTORYREFERENCESINTHEDEPLOYMENTDESCRIPTOR
R! BEANPROVIDER
R" APPLICATIONASSEMBLER
R# DEPLOYER
R$ CONTAINERPROVIDER
R% SYSTEMADMINISTRATOR

7HATSTRUEABOUTALEGALEJB JARlLE#HOOSEALLTHATAPPLY
16
R! )TMUSTCONTAINBOTHAHOMEINTERFACEANDACOMPONENTINTERFACE
R" 4HEDEPLOYMENTDESCRIPTORISOPTIONAL
R# )TMUSTCONTAINANY*%%CLASSESUSEDBYTHEBEAN
R$ 4HEENTERPRISEBEANCLASSISOPTIONAL

7HICHROLEWOULDTYPICALLYSETUPRESOURCEMANAGERSIGN ONINFORMATION
17
R! BEANPROVIDER
R" APPLICATIONASSEMBLER
R# DEPLOYER
R$ CONTAINERPROVIDER
R% SYSTEMADMINISTRATOR

\RXDUHKHUH 
PRFNH[DPDQVZHUV

0RFN([DP$QVZHUV
7HICH!0)SAREGUARANTEEDTOBESUPPORTEDBY%*"CONTAINERS#HOOSE (spec: 493)
1 ALLTHATAPPLY
R! *!80
R" *.$)
R# *84!
R$ *$"#
R% *-3

)
2 7HATSTRUEABOUTANENTERPRISEBEANSENVIRONMENT#HOOSEALLTHATAPPLY (spec: 410-412
R! %NVIRONMENTENTRIESCANBEUNIQUEFORINSTANCESOFTHESAME
ENTERPRISEBEANTYPE
R" 7ITHINASINGLE%*"CONTAINER AN%*"CANHAVEMULTIPLESETSOF
ENVIRONMENTENTRIES
R# !N%*"SENVIRONMENTENTRYSVALUESCANBEMODIlEDBYTHE%*"AT
RUNTIME
R$ %NVIRONMENTENTRYVALUESMAYBEPRIMITIVESORWRAPPERTYPES - Only Strings and Wrappers

)
3 7HICH!0)SAREGUARANTEEDTOBESUPPORTEDBY%*"CONTAINERS#HOOSE (spec: 496-497
ALLTHATAPPLY
R! *3%
R" *!8"
R# *!82
R$ *!80

 FKDSWHU
DEHDQ¶VHQYLURQPHQW

4 'IVENABEANNAMED@#USTOMER ANDANENVIRONMENTENTRYNAMED@LAST.AME
WHICHCODEFRAGMENTS INSIDEOFTHEBEANCLASSWOULDRETURNTHEVALUEOFTHE
(spec: 411-412)
ENVIRONMENTENTRY#HOOSEALLTHATAPPLY
R! &RQWH[WF QHZ6HVVLRQ&RQWH[W  - SessionContext is not the sam
e as JNDI Context
  &RQWH[WH  &RQWH[W FORRNXS ³MDYDFRPSHQY´ 
  6WULQJQDPH  6WULQJ HORRNXS ³ODVW1DPH´ 
R" &RQWH[WF QHZ,QLWLDO&RQWH[W 
  &RQWH[WH  &RQWH[W FORRNXS ³MDYDFRPSHQY
&XVWRPHU´ 
  6WULQJQDPH  6WULQJ HORRNXS ³ODVW1DPH´ 
R# &RQWH[WH QHZ/RRNXS ³MDYDFRPSHQY´ 
  &RQWH[WF QHZ,QLWLDO&RQWH[W H 
  6WULQJQDPH  6WULQJ FORRNXS ³ODVW1DPH´ 
R$ &RQWH[WF QHZ,QLWLDO&RQWH[W ³&XVWRPHU´  - no argument here
  &RQWH[WH  &RQWH[W FORRNXS ³MDYDFRPSHQY´ 
  6WULQJQDPH  6WULQJ HORRNXS ³ODVW1DPH´ 
R% &RQWH[WF QHZ,QLWLDO&RQWH[W 
  &RQWH[WH  &RQWH[W FORRNXS ³MDYDFRPSHQY´ 
  6WULQJQDPH  6WULQJ HORRNXS ³ODVW1DPH´ 

)
5 7HENPROGRAMMINGASESSIONBEANCLASSWHICHTECHNIQUES SHOULDALWAYSBE (spec: 494-495
AVOIDEDTOENSUREBEANPORTABILITYACROSSALL%*"CONTAINERS#HOOSEALL
THATAPPLY
R! 5SINGTHEMDYDQHW6RFNHWCLASS - client Sockets are
R" 5SINGINNERCLASSES just not a ServerSocOK
ket
,

R# 5SINGTHE@lNALMODIlERFORlELDS
R$ 0ASSING@THISASANARGUMENT

\RXDUHKHUH 
PRFNH[DPDQVZHUV

7HICHOFTHEFOLLOWINGAREVALIDDATATYPESINAHQYHQWU\W\SH!ELEMENT (spec: 413)


6 INABEANSDEPLOYMENTDESCRIPTOR#HOOSEALLTHATAPPLY
R! E\WH
R" VKRUW
R# $UUD\/LVW
R$ MDYDODQJ%RROHDQ
- only Wrappers and Strings are supported
R% MDYDODQJ&KDUDFWHU

7HENPROGRAMMING%*"SWHICHDECLARATIONS SHOULDBEAVOIDEDTOENSURE (spec: 494)


7 BEANPORTABILITYACROSSALL%*"CONTAINERS#HOOSEALLTHATAPPLY
R! ¿QDOLQW[
R" VWDWLFLQW[ - statics should also be Þnal
R# ¿QDOVWDWLFLQW[
R$ ¿QDOWUDQVLHQWLQW[
)
8 7HOISTYPICALLYRESPONSIBLEFORSPECIFYINGlNDERANDSELECTQUERIESINTHE (spec: 456-457
BEANSDEPLOYMENTDESCRIPTOR
R! 4HEBEANPROVIDER
R" 4HEAPPLICATIONASSEMBLER
R# 4HEDEPLOYER
R$ 4HESYSTEMADMINISTRATOR
R% 4HESERVERPROVIDER

9 7HICHDEPLOYMENTDESCRIPTORELEMENTS WOULDBEUSEDWHENOBTAININGA (spec: 424)


*$"#CONNECTION#HOOSEALLTHATAPPLY
R! HMEUHI!
R" HMEOLQN!
R# UROHQDPH!
R$ HQYHQWU\!
R% UHVRXUFHUHI!

 FKDSWHU
DEHDQ¶VHQYLURQPHQW

7HOWILLTYPICALLYMERGEMULTIPLEEJB JARlLESINTOASINGLEEJB JARlLE (spec: 458)


10
R! 4HEBEANPROVIDER
R" 4HEAPPLICATIONASSEMBLER
R# 4HEDEPLOYER
R$ 4HESYSTEMADMINISTRATOR
R% 4HESERVERPROVIDER

7HICHDEPLOYMENTDESCRIPTORELEMENTS WOULDBEUSEDBYABEANPROVIDERTO
11 LOCATETHEHOMEINTERFACESOFOTHER%*"S#HOOSEALLTHATAPPLY (spec: 416)
R! HMEUHI!
R" UHVW\SH!
R# HQYHQWU\!
R$ UROHQDPH!
R% UHVRXUFHUHI!

12 7HICHAREBEANPROVIDERRESPONSIBILITIESCONCERNINGRESOURCEMANAGER
(spec: 421)
CONNECTIONFACTORYREFERENCES#HOOSEALLTHATAPPLY
R! #ONlGURERESOURCEMANAGERSINTHE%*"SERVER
R" #ONlGURESIGN ONINFORMATIONFORTHERESOURCEMANAGER
R# !SSIGNSUCHAREFERENCETOTHEDEPLOYMENTDESCRIPTOR
R$ #REATINGASYMBOLICLINKTO*.$)

13 4HEEJB JARlLEISCONSIDEREDTOBEPARTOFTHECONTRACTBETWEENWHICHPAIRS (spec: 487)


#HOOSEALLTHATAPPLY
R! BEANPROVIDERANDSYSTEMADMINISTRATOR
R" BEANPROVIDERANDAPPLICATIONASSEMBLER
R# APPLICATIONASSEMBLERANDDEPLOYER
R$ APPLICATIONASSEMBLERANDSYSTEMADMINISTRATOR
R% DEPLOYERANDSYSTEMADMINISTRATOR

\RXDUHKHUH 
PRFNH[DPDQVZHUV

14 7HICHCLASSlLESMUSTBEINCLUDED EITHERDIRECTLYORBYREFERENCE INEVERYEJB (spec: 488)


JARlLE#HOOSEALLTHATAPPLY
R! 4HEENTERPRISEBEANCLASS
R" 4HESTUBCLASSFORTHE%*"/BJECTINTERFACE
R# 4HEENTERPRISEBEANSSUPERCLASSES
R$ !NY*3%CLASSESUSEDASARGUMENTSORRETURNTYPES - ItÕll already be there, baby!

15 7HICHROLEISTYPICALLYRESPONSIBLEFORDECLARINGTHERESOURCECONNECTION (spec: 423)


FACTORYREFERENCESINTHEDEPLOYMENTDESCRIPTOR
R! BEANPROVIDER
R" APPLICATIONASSEMBLER
R# DEPLOYER
R$ CONTAINERPROVIDER
R% SYSTEMADMINISTRATOR

7HATSTRUEABOUTALEGALEJB JARlLE#HOOSEALLTHATAPPLY (spec: 488)


16
R! )TMUSTCONTAINBOTHAHOMEINTERFACEANDACOMPONENTINTERFACE
R" 4HEDEPLOYMENTDESCRIPTORISOPTIONAL
R# )TMUSTCONTAINANY*%%CLASSESUSEDBYTHEBEAN
R$ 4HEENTERPRISEBEANCLASSISOPTIONAL

7HICHROLEWOULDTYPICALLYSETUPRESOURCEMANAGERSIGN ONINFORMATION (spec: 422)


17
R! BEANPROVIDER
R" APPLICATIONASSEMBLER
R# DEPLOYER
R$ CONTAINERPROVIDER
R% SYSTEMADMINISTRATOR

 FKDSWHU
Appendix A:
Final Mock Exam

'R127WU\WRWDNHWKLVH[DPXQWLO\RXEHOLHYH\RX¶UHUHDG\IRUWKHUHDOWKLQJ,I\RXWDNH
LWWRRVRRQWKHQZKHQ\RX¿QDOO\FRPHEDFNWRLW\RX¶OODOUHDG\KDYHVRPHPHPRU\RI
WKHTXHVWLRQVDQGLWFRXOGJLYH\RXDQDUWL¿FLDOO\KLJKVFRUH:HUHDOO\GRZDQW\RXWR
SDVVWKH¿UVWWLPH 8QOHVVWKHUHZHUHVRPHZD\WRFRQYLQFH\RXWKDW\RXQHHGWREX\D
IUHVKFRS\RIWKLVERRNHDFKWLPH\RXUHWDNHWKHH[DP 

7RKHOSGHIHDWWKH³,UHPHPEHUWKLVTXHVWLRQ´SUREOHPZH¶YHPDGHWKLVH[DPMXVWDOLWWOH
KDUGHUWKDQWKHUHDOH[DPE\QRWWHOOLQJ\RXKRZPDQ\DQVZHUVDUHFRUUHFWIRUHDFK
RIRXUTXHVWLRQV2XUTXHVWLRQVDQGDQVZHUVDUHYLUWXDOO\LGHQWLFDOWRWKHWRQHVW\OH
GLI¿FXOW\DQGWRSLFVRIWKHUHDOH[DPEXWE\QRWWHOOLQJ\RXKRZPDQ\DQVZHUVWRFKRRVH
\RXFDQ¶WDXWRPDWLFDOO\HOLPLQDWHDQ\RIWKHDQVZHUV,W¶VFUXHORIXVUHDOO\DQGZHZLVK
ZHFRXOGWHOO\RXWKDWLWKXUWVXVPRUHWKDQLWKXUWV\RXWRKDYHWRWDNHWKHH[DPWKLVZD\
%XWEHJUDWHIXO²XQWLODIHZ\HDUVDJR6XQ¶VUHDO-DYDH[DPVZHUHZULWWHQWKLVZD\
ZKHUHPRVWTXHVWLRQVHQGHGZLWK³&KRRVHDOOWKDWDSSO\´

0RVWH[DPFDQGLGDWHVKDYHVDLGWKDWRXUPRFNH[DPVDUHDOLWWOHPRUHGLI¿FXOWWKDQWKH
UHDO6&%&'EXWWKDWWKHLUVFRUHVRQRXUH[DPDQGRQWKHUHDORQHZHUHYHU\FORVH7KLV
PRFNH[DPLVDSHUIHFWZD\WRVHHLI\RX¶UHUHDG\EXWRQO\LI\RX

 *LYH\RXUVHOIQRPRUHWKDQWZRKRXUVWRFRPSOHWHLWMXVWOLNHWKHUHDOH[DP

 'RQ¶WORRNDQ\ZKHUHHOVHLQWKHERRNZKLOH\RX¶UHWDNLQJWKHH[DP

 'RQ¶WWDNHLWRYHUDQGRYHUDJDLQ%\WKHIRXUWKWLPH\RXPLJKWEHJHWWLQJDQG\HW
VWLOOQRWEHDEOHWRSDVVWKHUHDOH[DPVLPSO\EHFDXVH\RXZHUHPHPRUL]LQJRXUH[DFW
TXHVWLRQVDQGDQVZHUV

 :DLWXQWLODIWHU\RX¿QLVKWKHH[DPWRFRQVXPHODUJHTXDQWLWLHVRIDOFRKRORURWKHU
PLQGDOWHULQJVXEVWDQFHV %HQDQG-HUU\¶VŒ)XGJH%URZQLH5HG%XOOŒ)URVWHG
)ODNHVŒFHUHDOWRQDPHDIHZRIWKHPRUHGHDGO\RQHV 
WKLVLVDQHZDSSHQGL[ 
FRIIHHFUDPPRFNH[DP

0DVWHU0RFN([DP
7HICHAREBENElTSOF%*"#HOOSEALLTHATAPPLY
1
R! -$"SSURVIVESERVERCRASHES
R" 2EPRESENTATIONSOFASINGLEENTITYCANBESHAREDAMONGMULTIPLECLI
ENTS
R# 3UPPORTFORNESTEDTRANSACTIONS
R$ $YNAMICSERVICEDISCOVERY
R% $ECLARATIVEISOLATIONLEVELSETTINGS

7HICHMETHODSAREDIRECTLYINVOKEDBYTHECLIENT#HOOSEALLTHATAPPLY
2
R! HME3DVVLYDWH
R" BUSINESSMETHODS
R# VHW6HVVLRQ&RQWH[W
R$ QHZ,QVWDQFH
R% FUHDWH

7HICHMETHODS CANBEFOUNDINTHE%*"(OMEINTERFACE#HOOSEALLTHAT
3 APPLY
R! REMOVE(ANDLEHANDLE
R" REMOVE/BJECTPRIMARY+EY
R# GET(ANDLE
R$ NONEOFTHEABOVE

 DSSHQGL[$
DSSHQGL[$ILQDOPRFNH[DP

7HICHMETHODS CANBERUNBYA#-0BEANINTHEPOOLEDSTATE#HOOSEALL
4 THATAPPLY
R! HME/RDG
R" HME)LQG
R# HME6WRUH
R$ HME&UHDWH
R% "USINESSMETHOD
R&HME+RPH
7HATSTRUEABOUTMESSAGE DRIVENBEANS#HOOSEALLTHATAPPLY
5
R! !LLCALLSTOAMESSAGE DRIVENBEANINSTANCEMUSTBESERIALIZED
R" 4HECONTAINERGUARANTEESTHATMESSAGESWILLBEPROCESSEDINTHEORDER
INWHICHTHEYARERECEIVED
R# 4HEBEANSHME&UHDWH METHODMUSTTAKEASINGLEARGUMENTOFTYPE
MDYD[MPV0HVVDJH
R$ 4HEBEANPROVIDERUSESTHEDEPLOYMENTDESCRIPTORTOINDICATEWHETHER
INSTANCESOFTHEBEANCLASSAREINTENDEDFORTOPICSORQUEUES

7HATSTRUEABOUTANENTERPRISEBEANSENVIRONMENT#HOOSEALLTHATAPPLY
6
R! "EFOREABEANCANACCESSITSENVIRONMENTENTRIES THEBEANMUSTlRST
OBTAINTHENAMINGCONTEXTUSINGA6HVVLRQ&RQWH[WOBJECT
R" /NLYTHEBEANPROVIDERCANSETANENVIRONMENTENTRYVALUE
R# !BEANSENVIRONMENTENTRIESCANBESTOREDONLYIN
µMDYDFRPSHQY¶ORONEOFITSSUBCONTEXTS
R$ %VERYENVIRONMENTENTRYLOOKUPINABEANSCODEMUSTHAVEAMATCHING
HQYHQWU\!ELEMENTINTHEBEANSDEPLOYMENTDESCRIPTOR

7HATSTRUEABOUTSECURITYROLESIN%*"S#HOOSEALLTHATAPPLY
7
R! 3ECURITYROLESAREDElNEDINTHEDEPLOYMENTDESCRIPTORUSINGSECURITY
ROLEELEMENTS
R" 3ECURITYROLESARESCOPEDTOTHEINSTANCELEVEL
R# -ANYMETHODSCANBEMAPPEDTOASINGLESECURITYROLE
R$ !METHODCANAPPEARINONLYONESECURITYROLE

\RXDUHKHUH 
FRIIHHFUDPPRFNH[DP

!N%*"CONTAINERMUSTSUPPORTATLEASTASUBSETOFWHICH!0)S#HOOSEALL
8 THATAPPLY
R! *4!
R" *$"#
R# *-3
R$ *!8 2#0

7HICHSTATEMENTSCONCERNINGSTATELESSSESSIONBEANSARETRUE#HOOSEALLTHAT
9 APPLY
R! 4HEYCANUSEBEAN MANAGEDTRANSACTIONDEMARCATION
R" 4HEYMUSTHAVEONENO ARGUMENTCREATEMETHOD
R# !SINGLEINSTANCECANSUPPORTCONCURRENTCALLS
R$ 4HEYMUSTEXTENDJAVAXEJB3ESSION"EAN

7HATCAPABILITYEXISTSIN/.,9/.%OFTHETWOBUTNOTBOTH 
10 ANENTITYOBJECTSREMOTECOMPONENTINTERFACE
ANENTITYOBJECTSLOCALCOMPONENTINTERFACE
#HOOSEALLTHATAPPLY
R! 2EMOVINGTHEOBJECT
R" /BTAININGTHEOBJECTSHANDLE
R# )NVOKINGBUSINESSMETHODS
R$ /BTAININGTHEOBJECTSPRIMARYKEY

7HENCREATINGA#-0ENTITYBEAN WHICHMETHODS AREOPTIONAL#HOOSEALL


11 THATAPPLY
R! HME/RDG
R" HME&UHDWH
R# HME5HPRYH
R$ HME6HOHFW
R% HME3DVVLYDWH
R&VHW(QWLW\&RQWH[W

 DSSHQGL[$
DSSHQGL[$ILQDOPRFNH[DP

7HICHMETHODS CANBECALLEDONABEANINTHEPOOLEDSTATE#HOOSEALL
12 THATAPPLY
R! HME)LQG
R" HME/RDG
R# HME6WRUH
R$ HME6HOHFW
R% HME3DVVLYDWH

7HATSTRUEABOUTTHELIFECYCLEOFAMESSAGE DRIVENBEAN#HOOSEALLTHATAP
13 PLY
R! 7HENTHETHEOQ0HVVDJHMETHODCOMPLETES THECONTAINERWILLTYPI
CALLYCALLEJB2EMOVE
R" 4HEON0HVVDJH METHODCANTHROWAPPLICATIONEXCEPTIONS
R# -ESSAGE DRIVENBEANSCANRUNONLYWITH#-4DEMARCATION
R$ 4HEJHW5ROOEDFN2QO\ METHODCANBECALLEDONLYFROMTHE
ON-ESSAGEMETHOD

7HICHSTATEMENTS CONCERNINGMESSAGE DRIVENBEANCLASSESARETRUE


14 #HOOSEALLTHATAPPLY
R! 4HEYMUSTIMPLEMENT DIRECTLYORINDIRECTLY MDYD[MPV0HVVDJH
R" 4HEYMUSTHAVEAPUBLICCONSTRUCTORTHATTAKESASINGLEARGUMENTOF
TYPEMDYD[MPV0HVVDJH
R# )MPLEMENTINGTHE¿QDOL]H METHODISALLOWED
R$ )MPLEMENTINGTHEHME&UHDWH METHODISOPTIONAL
R% 4HECLASSMUSTNOTBEDECLARED@lNAL

7ITHINTHEDEPLOYMENTDESCRIPTORSHMEORFDOUHI!ELEMENT WHICHELE
15 MENTSAREOPTIONAL#HOOSEALLTHATAPPLY
R! ORFDO!
R" HMEOLQN!
R# ORFDOKRPH!
R$ GHVFULSWLRQ!
R% HMEUHIQDPH!
R&HMEUHIW\SH!

\RXDUHKHUH 
FRIIHHFUDPPRFNH[DP

7HATSTRUEABOUTRESOURCEMANAGERCONNECTIONFACTORIES#HOOSEALLTHAT
16 APPLY
R4HEUHVVKDULQJVFRSH!DEPLOYMENTDESCRIPTORELEMENTISUSEDTO
INDICATEWHETHERCONNECTIONSTOARESOURCEMANAGERARESHAREABLE
ACROSSMULTIPLE%*"SINANAPPLICATION
R" 4HEUHVVKDULQJVFRSH!DEPLOYMENTDESCRIPTORELEMENTCONTAINS
THEUHVRXUFHUHI!ELEMENT
R# !LLOFABEANSRESOURCEMANAGERCONNECTIONFACTORYREFERENCESARE
DECLAREDINASINGLEUHVRXUFHUHI!ELEMENT USING
UHVUHIQDPH!ELEMENTSTODISTINGUISHTHEM
R$ "YDEFAULT CONNECTIONSTOAGIVENRESOURCEMANAGERARESHAREABLE
ACROSSMULTIPLEBEANSINANAPPLICATION

7HATSTRUEABOUTSECURITYROLESREFERENCEDFROMAN%*"SCODE#HOOSEALL
17 THATAPPLY
R! )NTHEDEPLOYMENTDESCRIPTOR SUCHREFERENCESARECONTAINEDINTHE
VHFXULW\UROHUHI!ELEMENT
R" 4HEVHFXULW\UROH!ELEMENTINCLUDESTHEVHFXULW\UROH
UHI!ELEMENT
R# 7ITHINTHEVHFXULW\UROHUHI!ELEMENT THEUROHQDPH!
ELEMENTSVALUEISTHESAMEASTHEARGUMENTFORTHEBEANSINVOCATION
OFTHELV&DOOHU,Q5ROHMETHOD
R$ 4HEUROHOLQN!ELEMENTISUSEDTOLINKTWO
VHFXULW\UROHUHI!ELEMENTS

7HATSTRUEABOUTTHECLIENTSVIEWOFSECURITY#HOOSEALLTHATAPPLY
18
R! !TRANSACTIONALCLIENTCANNOTCHANGEITSPRINCIPALASSOCIATIONWITHINA
TRANSACTION
R" !SESSIONBEANSCLIENTCANNOTCHANGEITSPRINCIPALASSOCIATIONFORTHE
DURATIONOFTHECOMMUNICATIONWITHTHESESSIONOBJECT
R# 4RANSACTIONALREQUESTSWITHINASINGLETRANSACTIONCANNOTARRIVEFROM
MULTIPLECLIENTS
R$ .ONEOFTHEABOVE

 DSSHQGL[$
DSSHQGL[$ILQDOPRFNH[DP

7HENPROGRAMMINGANENTITYBEANCLASSWHICHTECHNIQUES SHOULDBE
19 !6/)$%$TOENSUREBEANPORTABILITYACROSSALL%*"CONTAINERS#HOOSEALL
THATAPPLY
R! #HANGINGATHREADSPRIORITY
R" 5SINGTHEREmECTION!0)
R# 5SINGWRAPPERCLASSES
R$ 5SINGSTATICNESTEDCLASSES
7HENPROGRAMMINGAMESSAGE DRIVENBEANCLASSWHICHTECHNIQUES SHOULD
20 BEAVOIDEDTOENSUREBEANPORTABILITYACROSSALL%*"CONTAINERS#HOOSE
ALLTHATAPPLY
R! 5SING3WING!0)SFORA'5)
R" 5SINGTHE@TRANSIENTMODIlER
R# 5SINGNATIVELIBRARIES
R$ 2EADINGlLEDESCRIPTORS

7HATISREQUIREDOFTHECONTAINERWHENITPASSIVATESASTATEFULSESSIONBEAN
21
R! 4HEBEANSINSTANCESTATEWILLALWAYSUNDERGO*AVAPROGRAMMINGLAN
GUAGE3ERIALIZATION
R" )TMUSTSAVEALLOFTHEBEANSINSTANCElELDSTATEREGARDLESSOFTHElELDS
MODIlERS
R# )TMUSTSAVEANYREFERENCESTOTHEBEANS3ESSION#ONTEXTOBJECT
R$ )TMUSTSAVEALLNON NULLTRANSIENTVARIABLES

7HICHCAPABILITIESAREDElNEDINTHEMDYD[HME(-%/RFDO2EMHFWINTER
22 FACE#HOOSEALLTHATAPPLY 
R! 2EMOVEANENTITYOBJECT
R" /BTAINANENTITYOBJECTSPRIMARYKEY
R# /BTAINALOCALHOMEINTERFACEFORTHEENTITYOBJECT
R$ /BTAINAREMOTECOMPONENTINTERFACEFORTHEENTITYOBJECT
R%%XPOSETHEMETHODSOFTHEMDYD[HME(QWLW\%HDQINTERFACETOTHE
CLIENT

\RXDUHKHUH 
FRIIHHFUDPPRFNH[DP

7HATSTRUEABOUTEJB3ELECTMETHODS#HOOSEALLTHATAPPLY
23
R! 4HEYCANBEEXPOSEDTOTHECLIENT
R" 4HEYCANRETURNONLY%*"/BJECTSOR%*",OCAL/BJECTS
R# 4HEYCANBEINVOKEDONLYBYABEANINTHEREADYSTATE
R$ 4HEYMUSTBEASSOCIATEDWITHAQUERYELEMENTINTHEDEPLOYMENTDE
SCRIPTOR

7HICHMETHODSCAN.%6%2BESUCCESSFULLYINVOKEDFROMAMESSAGE DRIVEN
24 BEAN#HOOSEALLTHATAPPLY
R! LV&DOOHU,Q5ROH
R" JHW(-%+RPH
R# JHW5ROOEDFN2QO\
R$ VHW5ROOEDFN2QO\
R%JHW&DOOHU3ULQFLSDO

7HICHROLEISTYPICALLYRESPONSIBLEFORADDINGEJB LINKELEMENTSTOAN%*"S
25 DEPLOYMENTDESCRIPTOR
R! BEANPROVIDER
R" APPLICATIONASSEMBLER
R# DEPLOYER
R$ CONTAINERPROVIDER
R%SYSTEMADMINISTRATOR

)NWHICHOFTHEFOLLOWINGMETHODSCANASTATELESSSESSIONBEANINVOKETHE
26 LV&DOOHU,Q5ROH METHODINORDERTOPERFORMASECURITYCHECK#HOOSE
ALLTHATAPPLY
R! HME&UHDWH
R" HME5HPRYH
R# VHW6HVVLRQ&RQWH[W
R$ .ONEOFTHEABOVE

 DSSHQGL[$
DSSHQGL[$ILQDOPRFNH[DP

7HICHTWOARETYPICALLYRESPONSIBLEFORCREATINGEJB JARlLES#HOOSETWO
27
R! 4HEBEANPROVIDER
R" 4HEAPPLICATIONASSEMBLER
R# 4HEDEPLOYER
R$ 4HESYSTEMADMINISTRATOR

7HICHOFTHEFOLLOWINGSTATELESSSESSIONBEANCONTAINERCALLBACKMETHODS
28 TAKESANARGUMENT#HOOSEALLTHATAPPLY
R! HME5HPRYH
R" HME&UHDWH
R# HME&UHDWH
R$ HME3DVVLYDWH
R%VHW6HVVLRQ&RQWH[W

7HICHOFTHESECANNEVERBECALLEDONA3ESSION#ONTEXTINTERFACE#HOOSEALL
29 THATAPPLY
R! JHW(-%+RPH
R" JHW(-%2EMHFW
R# JHW(-%7UDQVDFWLRQ
R$ LV&DOOHU,Q5ROH
R%JHW8VHU7UDQVDFWLRQ

7HATSTRUEABOUTANENTITYBEANSREMOTECOMPONENTINTERFACE#HOOSEALL
30 THATAPPLY
R! )FACLIENTATTEMPTSTOINVOKEAMETHODONANENTITYTHATDOESNOTEXIST A
MDYDUPL1R6XFK5HPRWH2EMHFW([FHSWLRQWILLBETHROWN
R" )TMUSTEXTENDMDYD[HME(-%+RPH
R# )TSMETHODSMUSTDECLAREMDYDUPL5HPRWH([FHSWLRQ
R$ )TDElNESAUHPRYH +DQGOHKDQGOH METHOD

\RXDUHKHUH 
FRIIHHFUDPPRFNH[DP

7HICHARETRUEABOUTlNDERMETHODSINANENTITYBEANSLOCALHOMEINTERFACE
31 #HOOSEALLTHATAPPLY
R! 4HEYCANHAVEANYLEGAL*AVANAME
R" 4HEYMUSTALLDECLAREMDYD[HME)LQGHU([FHSWLRQ
R# 4HEYCANOPTIONALLYDECLAREMDYDUPL5HPRWH([FHSWLRQ
R$ 4HE¿QG%\3ULPDU\.H\METHODCANBEOVERLOADED
R%4HE¿QG%\3ULPDU\.H\METHODSRETURNTYPEMUSTBETHEBEANSLOCAL
COMPONENTINTERFACE
R&!METHODCALLEDhlND888vMUSTHAVETHEBEANSLOCALCOMPONENT
INTERFACEASITSDECLAREDRETURNTYPE

7HICHARETRUEFORAMESSAGE DRIVENBEAN#HOOSEALLTHATAPPLY
32
R! 4HE$EPLOYERUSESTHEDEPLOYMENTDESCRIPTORTODETERMINEWHETHERABEAN
ISINTENDEDFORA1UEUEORA4OPIC
R" 4HECLASSMUSTBEDECLAREDlNAL
R# 4HECLASSMUSTDElNEONEHME5HPRYH METHOD
R$ 4HECLASSCANHAVEOVERLOADEDHME&UHDWH METHODS
R%4HECLASSMUSTDElNEANO ARGUMENTON-ESSAGEMETHOD

'IVENTHEFOLLOWINGSUBSETOFADEPLOYMENTDESCRIPTOR
33 HQWLW\!
HMEQDPH!3D\UROOHMEQDPH!
VHFXULW\UROHUHI!
UROHQDPH!FOHUNUROHQDPH!
VHFXULW\UROHUHI!

HQWLW\!
7HICHCODESNIPPETS MAKESALEGALSECURITYCHECK#HOOSEALLTHATAPPLY
R! FRQWH[WLV&DOOHU,Q5ROH ³3D\UROO´ 
R" FRQWH[WLV&DOOHU,Q5ROH ³FOHUN´ 
R# FRQWH[WLV&DOOHU,Q5ROH ³3D\UROOFOHUN´ 
R$ FRQWH[WLV&DOOHU,Q5ROH ³3D\UROOFOHUN´ 

 DSSHQGL[$
DSSHQGL[$ILQDOPRFNH[DP

7HICHAREVALIDLOCALHOMEINTERFACESFORASTATEFULSESSIONBEAN#HOOSEALL
34 THATAPPLY
R! SXEOLFLQWHUIDFH7HVW%HDQLPSOHPHQWV
MDYD[HME(-%/RFDO+RPH^
Y
RLGFUHDWH WKURZV&UHDWH([FHSWLRQ
`
R" SXEOLFLQWHUIDFH7HVW%HDQH[WHQGV
MDYD[HME(-%/RFDO+RPH^
7
HVW%HDQ/RFDOHME&UHDWH WKURZV&UHDWH([FHSWLRQ
`
R# SXEOLFLQWHUIDFH7HVW%HDQH[WHQGV
MDYD[HME(-%/RFDO+RPH^
 7HVW%HDQ/RFDOFUHDWH WKURZV&UHDWH([FHSWLRQ
`
R$ SXEOLFLQWHUIDFH7HVW%HDQH[WHQGV
MDYD[HME(-%/RFDO+RPH^
7
HVW%HDQ/RFDOFUHDWH WKURZV&UHDWH([FHSWLRQ
5HPRWH([FHSWLRQ
`
R%SXEOLFLQWHUIDFH7HVW%HDQH[WHQGV
MDYD[HME(-%/RFDO+RPH^
7
HVW%HDQ/RFDOFUHDWH WKURZV/RFDO([FHSWLRQ
`

7HICHMETHODSCANBECALLEDBYABEANPROVIDER#HOOSEALLTHATAPPLY
35
R! UHPRYH
R" HME&UHDWH
R# DIWHU%HJLQ
R$ JHW&DOOHU3ULQFLSDO
R%HME3DVVLYDWH

\RXDUHKHUH 
FRIIHHFUDPPRFNH[DP

7HOWILLTYPICALLYSPECIFYWHETHERABEANISRE ENTRANTINTHEBEANSDEPLOY
36 MENTDESCRIPTOR
R! 4HEBEANPROVIDER
R" 4HEAPPLICATIONASSEMBLER
R# 4HEDEPLOYER
R$ 4HESYSTEMADMINISTRATOR

7HICHSTATEMENTSABOUTSTATEFULANDSTATELESSSESSIONBEANSARETRUE
37 #HOOSEALLTHATAPPLY
R! /NLYSTATEFULSESSIONBEANSSUPPORTTRANSACTIONS
R" /NLYSTATEFULSESSIONBEANSCANBEPASSIVATED
R# /NLYSTATEFULSESSIONBEANSHAVEAµVHW6HVVLRQ&RQWH[W¶METHOD
R$ "OTHSTATEFULANDSTATELESSSESSIONBEANSCANSUPPORTOVERLOADED
µHME&UHDWH¶METHODS
R%"OTHSTATEFULANDSTATELESSSESSIONBEANSCANIMPLEMENTTHE
MDYD[HME6HVVLRQ6\QFKURQL]DWLRQINTERFACE
R&"OTHSTATEFULANDSTATELESSSESSIONBEANSCANHAVEINSTANCEVARIABLESTATE

7HICHMUSTBEINCLUDEDINEVERYEJB JARlLE#HOOSEALLTHATAPPLY
38
R! 4HESTUBFORTHE%*"(OMEINTERFACE EITHERDIRECTLYORBYREFERENCE
R" 4HE*!2-ANIFESTlLE
R# !DEPLOYMENTDESCRIPTOR
R$ 4HE*.$)CONTEXT
R%4HE%*"SHOMEINTERFACE EITHERDIRECTLYORBYREFERENCE

7HICHMETHODS AREDECLAREDINTHEJAVAXEJB%*"(OMEINTERFACE#HOOSE
39 ALLTHATAPPLY
R! FUHDWH
R" ORRNXS
R# JHW+DQGOH
R$ JHW+RPH+DQGOH
R%VHW6HVVLRQ&RQWH[W

 DSSHQGL[$
DSSHQGL[$ILQDOPRFNH[DP

(OWMANYJAVAXEJB%*",OCAL(OMEINTERFACEMETHODSCANBECALLEDWITHOUT
40 ANEXCEPTION FROMASESSIONBEANCLIENT
R! 
R" 
R# 
R$ 
R%

7HICHOFTHEFOLLOWING IFCALLED ALWAYSHAVETHESAMETRANSACTIONCONTEXTASA


41 SESSIONBEANSBUSINESSMETHODS#HOOSEALLTHATAPPLY
R! CONSTRUCTOR
R" VHW6HVVLRQ&RQWH[W
R# DIWHU%HJLQ
R$ DIWHU&RPSOHWLRQ
R%EHIRUH&RPSOHWLRQ

'IVENASTATEFULSESSIONBEANWITHCONTAINER MANAGEDTRANSACTIONDEMARCATION
42 FROMWHICHMETHODSCANYOUACCESSANOTHERBEAN#HOOSEALLTHATAPPLY
R! VHW6HVVLRQ&RQWH[W
R" HME&UHDWH
R# DIWHU%HJLQ
R$ EHIRUH&RPSOHWLRQ
R%DIWHU&RPSOHWLRQ

7HICHDEPLOYMENTDESCRIPTORELEMENTS CANOPTIONALLYSPECIFYCASCADE DELETE


43 FUNCTIONALITY#HOOSEALLTHATAPPLY
R! HMEUHODWLRQ!
R" DEVWUDFWVFKHPDQDPH!
R# HMEUHODWLRQVKLSUROH!
R$ UHODWLRQVKLSUROHVRXUFH!

\RXDUHKHUH 
FRIIHHFUDPPRFNH[DP

7HATSTRUEABOUTCASCADE DELETE#HOOSEALLTHATAPPLY
44
R! )TISDECLAREDINTHEHME5HPRYH METHOD
R" 7HENACASCADE DELETEENABLEDBEANISDELETED ITCAUSESALLOFTHE
BEANSWITHRELATIONSHIPSTOITTOBEAUTOMATICALLYDELETEDTOO
R# )TCANBESPECIlEDFORONE TO ONE ONE TO MANY ORMANY TO MANYRELA
TIONSHIPS
R$ !CASCADE DELETEENABLEDBEANISAUTOMATICALLYREMOVEDWHENANY
hMULTIPLICITYOFONEvBEANWITHWHICHITISRELATEDISREMOVED

7HICHMETHODS FROMTHE%NTITY#ONTEXTINTERFACECANBEINVOKED REGARDLESS
45 OFTRANSACTIONCONTEXT#HOOSEALLTHATAPPLY
R! JHW(-%+RPH
R" JHW(-%2EMHFW
R# VHW5ROOEDFN2QO\
R$ JHW5ROOEDFN2QO\

7HATSTRUEABOUTANENTITYBEANSPRIMARYKEY#HOOSEALLTHATAPPLY
46
R! 0RIMARYKEYlELDSMUSTBECMP lELDS
R" 3ETTERMETHODSFORlELDSASSOCIATEDWITHAPRIMARYKEYMUSTNOTBE
EXPOSEDTHROUGHACLIENTVIEW
R# )FTWOENTITYOBJECTSHAVETHESAMEHOMEANDTHESAMEPRIMARYKEY
THEYARECONSIDEREDIDENTICAL
R$ 4HEJHW3ULPDU\.H\ METHODCANBEINVOKEDONREFERENCESTOONLY
REMOTEHOMEINTERFACES NOTLOCALHOMEINTERFACES

7HICHINTERFACES AREUSEDBYTHEBEANPROVIDERTOPERFORM"-4DEMARCA
47 TION#HOOSEALLTHATAPPLY
R! MDYD[WUDQVDFWLRQ7UDQVDFWLRQ
R" MDYD[WUDQVDFWLRQ8VHU7UDQVDFWLRQ
R# MDYD[WUDQVDFWLRQ6\QFKURQL]DWLRQ
R$MDYD[WUDQVDFWLRQ7UDQVDFWLRQ0DQDJHU

 DSSHQGL[$
DSSHQGL[$ILQDOPRFNH[DP

7HICHOFTHEFOLLOWINGARELEGAL%*"1,QUERIES#HOOSEALLTHATAPPLY
48
R! 3%,%#4C
&2/-#USTOMERC
R" 3%,%#4/"*%#4 CNAME
&2/-#USTOMERC
R# 3%,%#4/"*%#4C
7(%2%#USTOMERC
R$ 3%,%#4/"*%#4C
&2/-#USTOMERC
R%3%,%#4CNAME
&2/-#USTOMERC

7HICHARETRUEABOUTTRANSACTIONSIN%*"#HOOSEALLTHATAPPLY
49
R! /NLYONEDATABASECANBEUPDATEDWITHINASINGLETRANSACTION
R" %NTITYBEANSWITH"-4DEMARCATIONMUSTUSETHESET3TATUSMETHOD
INSTEADOFTHEVHW5ROOEDFN2QO\METHOD
R# %NTITYBEANSWITH"-4DEMARCATIONMUSTUSETHEGET3TATUSMETHOD
INSTEADOFTHEJHW5ROOEDFN2QO\METHOD
R$ "-4DEMARCATIONSHOULDBEUSEDWHENBEANSACCESSRESOURCEMANAG
ERSTHATDONOTSUPPORTTRANSACTIONS
R%4HE@3ESSION3YNCHRONIZATIONINTERFACECANBEUSEDONLYBYSTATEFUL
SESSIONBEANS

4OENSUREBEANPORTABILITY WHICHTRANSACTIONATTRIBUTESSHOULDBEUSEDONTHE
50 BUSINESSMETHODSINTHECOMPONENTINTERFACEOFANENTITYBEANUSING#-0
#HOOSEALLTHATAPPLY
R! .OT3UPPORTED
R" 2EQUIRED
R# 3UPPORTS
R$ 2EQUIRES.EW
R%-ANDATORY
R&.EVER

\RXDUHKHUH 
FRIIHHFUDPPRFNH[DP

7HICHOFTHEFOLLOWINGEXCEPTIONSWOULDCAUSEABEANTOBEDISCARDEDBYTHE
51 CONTAINER#HOOSEALLTHATAPPLY
R! MDYD[HME2EMHFW1RW)RXQG([FHSWLRQ
R" MDYD[HME&UHDWH([FHSWLRQ
R# MDYD[HME1R6XFK(QWLW\([FHSWLRQ
R$ MDYD[HME)LQGHU([FHSWLRQ
R%MDYD[HME5HPRYH([FHSWLRQ

)NWHICHCASESSHOULDTHECONTAINERLOGANEXCEPTIONTHROWNBYABUSINESS
52 METHODOFA#-4DEMARCATEDBEAN#HOOSEALLTHATAPPLY
R!)FTHEMETHODRUNSWITHANUNSPECIlEDTRANSACTIONCONTEXTANDTHROWS
ASYSTEMEXCEPTION
R")FTHEMETHODRUNSWITHANUNSPECIlEDTRANSACTIONCONTEXTANDTHROWS
ANAPPLICATIONEXCEPTION
R#)FTHEMETHODRUNSWITHA2EQUIRES.EWCONTEXTANDTHROWSASYSTEM
EXCEPTION
R$)FTHEMETHODRUNSWITHA2EQUIREDCONTEXTANDTHROWSASYSTEMEXCEP
TION
R%)FTHEMETHODRUNSWITHA2EQUIRES.EWCONTEXTANDTHROWSANAPPLICA
TIONEXCEPTION
R&)FTHEMETHODRUNSWITHA2EQUIREDCONTEXTANDTHROWSANAPPLICATION
EXCEPTION

7HICHSESSIONBEANCOMPONENTINTERFACEMETHODS CANBECALLEDSUCCESSFULLY
53 BYALOCALCLIENT#HOOSEALLTHATAPPLY
R! UHPRYH
R" JHW+DQGOH
R# LV,GHQWLFDO
R$ JHW(-%+RPH

 DSSHQGL[$
DSSHQGL[$ILQDOPRFNH[DP

)NWHATSCENARIOS CANABEANSBUSINESSMETHODCALLTHELV&DOOHU,Q5ROH
54 METHODOFTHE3ESSION#ONTEXTINTERFACE#HOOSEALLTHATAPPLY
R! !STATEFULSESSIONBEANWITHCONTAINER MANAGEDTRANSACTIONDEMARCA
TION
R" !STATELESSSESSIONBEANWITHCONTAINER MANAGEDTRANSACTIONDEMARCA
TION
R# !STATEFULSESSIONBEANWITHBEAN MANAGEDTRANSACTIONDEMARCATION
R$ !STATELESSSESSIONBEANWITHBEAN MANAGEDTRANSACTIONDEMARCATION
R%.ONEOFTHEABOVE

7HENCREATINGANENTITYBEANUSINGCONTAINER MANAGEDPERSISTENCE WHICHCAN


55 BEACCESSEDTHROUGHTHEBEANSREMOTECOMPONENTINTERFACE#HOOSEALLTHAT
APPLY
R! !CCESSORMETHODSFORTHERELATIONSHIPlELDS
R" 4HELOCALINTERFACEOFTHEENTITYBEAN
R# 4HEBEANSBUSINESSMETHODS
R$ 4HECOLLECTIONCLASSESUSEDFORCONTAINER MANAGEDRELATIONSHIPS
R%!CCESSORMETHODSFORTHEPERSISTENTlELDS

'IVENTHECONTAINER MANAGED ONE TO ONE BIDIRECTIONALRELATIONSHIP


56 )RR!%DU
!NDTHEOBJECTRELATIONS
I
!E
I!E
7HICHBOOLEANEXPRESSIONWILLBETRUEAFTERTHEFOLLOWINGCODERUNS
E
VHW)RR EJHW)RR 
#HOOSEALLTHATAPPLY
R!IJHW%DU  QXOO
R" EJHW)RR  QXOO
R# IJHW%DU  QXOO
R$ NONEOFTHEABOVE

\RXDUHKHUH 
FRIIHHFUDPPRFNH[DP

7HATSTRUEABOUTANENTITYBEANSIDENTITY#HOOSEALLTHATAPPLY
57
R! )FTWOENTITYOBJECTREFERENCESARECOMPAREDUSINGTHEOPERATOR THE
CONTAINERPROVIDERISNOTREQUIREDTOPRODUCECONSISTENTRESULTS
R" )FTWOENTITYOBJECTREFERENCESARECOMPAREDUSINGTHEHTXDOV
METHOD THECONTAINERWILLRETURNTRUEIFTHETWOENTITYOBJECTSHAVETHE
SAMEPRIMARYKEY
R# )FTWOENTITYOBJECTREFERENCESARECOMPAREDUSINGTHELV,GHQWL
FDO METHOD THECONTAINERWILLRETURNTRUEIFTHETWOENTITYOBJECTS
HAVETHESAMEPRIMARYKEY
R$ .ONEOFTHEABOVESTATEMENTSARETRUE

'IVEN#-0BEANS#USTOMER"EAN /RDER"EAN AND,INE)TEMS"EANWITHTHE


58 FOLLOWINGRELATIONSHIPS
#USTOMER"EAN  /RDER"EANN
/RDER"EAN  ,INE)TEMS"EANN
7HICHWILLRETURNASETOFCUSTOMERSTHATHAVEORDERS#HOOSEALLTHATAPPLY
R! 3%,%#4#USTOMER
&2/-/RDER
R" 3%,%#4$)34).#4#USTOMER
&2/-/RDER
R# 3%,%#4OCUSTNUM
&2/-/RDERO #USTOMERC
7(%2%CCUSTNUMOCUSTNUM
R$ 3%,%#4/"*%#4C
&2/-#USTOMERC /RDERO
7(%2%CCUSTNUMOCUSTNUM
R%3%,%#4$)34).#4/"*%#4C
&2/-#USTOMERC /RDERO
7(%2%CCUSTNUMOCUSTNUM

 DSSHQGL[$
DSSHQGL[$ILQDOPRFNH[DP

'IVEN
59
0
HWKRG 7[ !0HWKRG 7[ !0HWKRG 7[
?!0HWKRG 7[

)FTHECALLINGMETHODISONTHELEFTSIDEOFANARROW ANDTHECALLEDMETHODON
THERIGHT WHICHSETOFTRANSACTIONATTRIBUTESWILLSUPPORTTHETRANSACTIONSCOPE
SPECIlED#HOOSEALLTHATAPPLY
R! 0 1HYHU
  0 6XSSRUWV
  0 5HTXLUHG
  0 5HTXLUHV1HZ
R" 0 5HTXLUHG
  0 6XSSRUWV
  0 0DQGDWRU\
  0 5HTXLUHV1HZ
R# 0 5HTXLUHV1HZ
  0 5HTXLUHV1HZ
  0 6XSSRUWV
  0 5HTXLUHV1HZ
R$ 0 5HTXLUHG
  0 0DQGDWRU\
  0 6XSSRUWV
  0 6XSSRUWV

'IVENTHE%*"1,EXPRESSION
60 SGLVFRXQW127%(7:((1$1'
7HICHEXPRESSIONISEQUIVALENT
R! SGLVFRXQW25SGLVFRXQW!
R" SGLVFRXQW 25SGLVFRXQW!
R# SGLVFRXQW25SGLVFRXQW! 
R$ SGLVFRXQW 25SGLVFRXQW! 

\RXDUHKHUH 
FRIIHHFUDPPRFNH[DP

7HENABUSINESSMETHODINANENTITYBEANCALLSTHEJHW5ROOEDFN2QO\
61 METHOD WHICHTRANSACTIONATTRIBUTESETTINGSCOULDCAUSETHECONTAINERTO
THROWANEXCEPTION#HOOSEALLTHATAPPLY
R! .OT3UPPORTED
R" 2EQUIRED
R# 3UPPORTS
R$ 2EQUIRES.EW
R%-ANDATORY
R&.EVER

7HICHOFTHEFOLLOWINGISPERFORMEDBYTHECONTAINERIFAMESSAGE DRIVENBEAN
62 DOESNOTCOMPLETEITSTRANSACTIONBEFORETHEENDOFTHEON-ESSAGE METHOD
#HOOSEALLTHATAPPLY
R! ,OGANAPPLICATIONERROR
R" 2OLLBACKTHESTARTEDTRANSACTION
R# $ISCARDTHEINSTANCEOFTHEBEAN
R$ 4HROWANEXCEPTION

&ROMWHICHCLASSES CANAPPLICATIONEXCEPTIONSEXTEND#HOOSEALLTHATAP
63 PLY
R! MDYDODQJ([FHSWLRQ
R" MDYDODQJ5XQWLPH([FHSWLRQ
R# MDYDUPL5HPRWH([FHSWLRQ
R$ MDYD[HME&UHDWH([FHSWLRQ

7HATSTRUEABOUTAPPLICATIONEXCEPTIONS#HOOSEALLTHATAPPLY
64
R! 4HEYAREINTENDEDTOBEHANDLEDBYTHESYSTEMADMINISTRATOR
R" 4HEYSHOULDREPORTSYSTEMLEVELPROBLEMS
R# 4HEYCAUSEAUTOMATICMARKINGOFTRANSACTIONSFORROLLBACK
R$ 4HEYMUSTNOTEXTENDMDYDODQJ5XQWLPH([FHSWLRQ
R%4HEYMAYEXTENDMDYDUPL5HPRWH([FHSWLRQ

 DSSHQGL[$
DSSHQGL[$ILQDOPRFNH[DP

7HICHCASESCANCAUSEASESSIONBEANINSTANCETOBEDESTROYEDWITHOUTTHE
65 CONTAINERCALLINGHME5HPRYH #HOOSEALLTHATAPPLY
R! !TRANSACTIONISROLLEDBACKONASTATEFULSESSIONBEANWITHCONTAINER
MANAGEDTRANSACTIONDEMARCATION
R" !SYSTEMEXCEPTIONISTHROWNFROMABUSINESSMETHOD
R# !NINACTIVECLIENTISTIMEDOUTWHILETHEBEANISINAPASSIVATEDSTATE
R$ 4HECLIENTINVOKESTHEREMOVEMETHODWHILETHEBEANISINATRANSAC
TION

7HICHDEPLOYMENTDESCRIPTORELEMENTS AREUSEDTOSPECIFYA#OLLECTION
66 INTERFACE#HOOSEALLTHATAPPLY
R! HMEQDPH!
R" FPU¿HOG!
R# HMEUHODWLRQ!
R$ FPU¿HOGW\SH!
R% DEVWUDFWVFKHPDQDPH!

)FABEANCATCHESACHECKEDEXCEPTION FROMWHICHITCANNOTRECOVER WHAT


67 SHOULDITDO#HOOSEALLTHATAPPLY
R! )FTHECLIENTISREMOTE THROWAMDYDUPL5HPRWH([FHSWLRQ
R" 0RINTASTACKTRACE
R# 2EGARDLESSOFTHECLIENT THROWAMDYD[HME(-%([FHSWLRQ
R$ 2EGARDLESSOFTHECLIENT PROPAGATETHESAMEEXCEPTIONTOTHECONTAIN
ER
7HICHAREREQUIREMENTSFORA#-0ENTITYBEANCLASS#HOOSEALLTHATAPPLY
68
R! !LLHME6HOHFW METHODSMUSTBEDECLAREDASABSTRACT
R" 4HECLASSMUST./4DElNEANHME&UHDWHMETHOD
R# 4HEHME3RVW&UHDWHMETHODSAREIMPLEMENTEDBYTHECONTAINER
R$ (ELPERMETHODSMUST./4BEIMPLEMENTEDINTHEBEANCLASS
R%-ETHODSSTARTINGWITH@HME)LQGMUSTNOTBEIMPLEMENTED

\RXDUHKHUH 
FRIIHHFUDPPRFNH[DP

7HICHAREVALIDDEPLOYMENTDESCRIPTORSEGMENTS TODElNEACMR lELD


69 #HOOSEALLTHATAPPLY
R! HMEUHODWLRQVKLSUROH!
  DVVXPHPDQGDWRU\HMEUHODWLRQVKLSUROHHOHPHQWV
LQVHUWHGKHUH!
  FPU¿HOG!
  FPU¿HOGW\SH!MDYDXWLO&ROOHFWLRQFPU¿HOGW\SH!
  FPU¿HOG!
HMEUHODWLRQVKLSUROH!
R" HMEUHODWLRQVKLSUROH!
  DVVXPHPDQGDWRU\HMEUHODWLRQVKLSUROHHOHPHQWV
LQVHUWHGKHUH!
  FPU¿HOG!
  FPU¿HOGQDPH!OLQH,WHPVFPU¿HOGQDPH!
  FPU¿HOGW\SH!MDYDXWLO&ROOHFWLRQFPU¿HOGW\SH!
  FPU¿HOG!
HMEUHODWLRQVKLSUROH!
R# UHODWLRQVKLSUROHVRXUFH!
  DVVXPHPDQGDWRU\UHODWLRQVKLSUROHVRXUFHHOH
PHQWVLQVHUWHGKHUH!
  FPU¿HOG!
  FPU¿HOGW\SH!MDYDXWLO&ROOHFWLRQFPU¿HOGW\SH!
  FPU¿HOG!
UHODWLRQVKLSUROHVRXUFH!
R$ UHODWLRQVKLSUROHVRXUFH!
  DVVXPHPDQGDWRU\UHODWLRQVKLSUROHVRXUFHHOH
PHQWVLQVHUWHGKHUH!
  FPU¿HOG!
  FPU¿HOGQDPH!OLQH,WHPVFPU¿HOGQDPH!
  FPU¿HOGW\SH!MDYDXWLO&ROOHFWLRQFPU¿HOGW\SH!
  FPU¿HOG!
UHODWLRQVKLSUROHVRXUFH!

 DSSHQGL[$
DSSHQGL[$ILQDOPRFNH[DP

7HATSTRUEABOUTAREMOTECLIENTSVIEWOFEXCEPTIONSRECEIVEDFROMANENTITY
70 BEAN#HOOSEALLTHATAPPLY
R! )FTHECONTAINERMARKSATRANSACTIONFORROLLBACK THECONTAINERWILL
ALWAYSISSUEAMDYD[WUDQVDFWLRQ7UDQVDFWLRQ5ROOHGEDFN([FH
SWLRQEXCEPTION
R" )FTHECLIENTRECEIVESAMDYD[WUDQVDFWLRQ7UDQVDFWLRQ5ROOHG
%DFN([FHSWLRQ THECONTAINERGUARANTEESTHATTHATTRANSACTIONWILL
NEVERCOMMIT
R# !MDYD[WUDQVDFWLRQ7UDQVDFWLRQ5HTXLUHG([FHSWLRQEXCEP
TION INFORMSTHECLIENTTHATTHEBEANNEEDEDTOBECALLEDWITHINTHE
CONTEXTOFATRANSACTION
R$ )FTHECONTAINERDISCOVERSTHATAREQUESTEDBEANNOLONGEREXISTS ITWILL
ALWAYSTHROWTHEMDYD[HME1R6XFK2EMHFW(QWLW\([FHSWLRQ

\RXDUHKHUH 
PRFNH[DPDQVZHUV

0DVWHU0RFN([DP$QVZHUV
7HICHAREBENElTSOF%*"#HOOSEALLTHATAPPLY (spec: 108)
1
R! -$"SSURVIVESERVERCRASHES
R" 2EPRESENTATIONSOFASINGLEENTITYCANBESHAREDAMONGMULTIPLECLI
ENTS
R# 3UPPORTFORNESTEDTRANSACTIONS
R$ $YNAMICSERVICEDISCOVERY - ThatÕs a Jini thing
R% $ECLARATIVEISOLATIONLEVELSETTINGS

7HICHMETHODSAREDIRECTLYINVOKEDBYTHECLIENT#HOOSEALLTHATAPPLY
2
R! HME3DVVLYDWH - invoked by the Container
R" BUSINESSMETHODS
R# VHW6HVVLRQ&RQWH[W
R$ QHZ,QVWDQFH - invoked by the Container
R% FUHDWH

7HICHMETHODS CANBEFOUNDINTHE%*"(OMEINTERFACE#HOOSEALLTHAT
3 APPLY (API docs)
R! REMOVE(ANDLEHANDLE
R" REMOVE/BJECTPRIMARY+EY
R# GET(ANDLE - this is in EJBObject
R$ NONEOFTHEABOVE

 DSSHQGL[$
DSSHQGL[$ILQDOPRFNH[DP

7HICHMETHODS CANBERUNBYA#-0BEANINTHEPOOLEDSTATE#HOOSEALL (spec: 168)


4 THATAPPLY
R! HME/RDG - The bean doesnÕt leave the pool for
R" HME)LQG home and Þnder methods
R# HME6WRUH
R$ HME&UHDWH
R% "USINESSMETHOD
R&HME+RPH
324)
7HATSTRUEABOUTMESSAGE DRIVENBEANS#HOOSEALLTHATAPPLY
(spec: 314, 316,
5
R! !LLCALLSTOAMESSAGE DRIVENBEANINSTANCEMUSTBESERIALIZED
R" 4HECONTAINERGUARANTEESTHATMESSAGESWILLBEPROCESSEDINTHEORDER
INWHICHTHEYARERECEIVED
must have a no-arg create,
R# 4HEBEANSHME&UHDWH METHODMUSTTAKEASINGLEARGUMENTOFTYPE onMessa ge takes the
MDYD[MPV0HVVDJH message as its argument
R$ 4HEBEANPROVIDERUSESTHEDEPLOYMENTDESCRIPTORTOINDICATEWHETHER
INSTANCESOFTHEBEANCLASSAREINTENDEDFORTOPICSORQUEUES

7HATSTRUEABOUTANENTERPRISEBEANSENVIRONMENT#HOOSEALLTHATAPPLY (spec: 412-413)


6
R! "EFOREABEANCANACCESSITSENVIRONMENTENTRIES THEBEANMUSTlRST
OBTAINTHENAMINGCONTEXTUSINGA6HVVLRQ&RQWH[WOBJECT
ypic al ly se t by the Deployer or
- t
R" /NLYTHEBEANPROVIDERCANSETANENVIRONMENTENTRYVALUE Application Assembler
R# !BEANSENVIRONMENTENTRIESCANBESTOREDONLYIN
µMDYDFRPSHQY¶ORONEOFITSSUBCONTEXTS
- donÕt confuse a JNDI context and an
EJBContext (like SessionContext)
R$ %VERYENVIRONMENTENTRYLOOKUPINABEANSCODEMUSTHAVEAMATCHING
HQYHQWU\!ELEMENTINTHEBEANSDEPLOYMENTDESCRIPTOR - otherwise the code would have
nothing to look up!
7HATSTRUEABOUTSECURITYROLESIN%*"S#HOOSEALLTHATAPPLY
7 (spec: 440-44
3)
R! 3ECURITYROLESAREDElNEDINTHEDEPLOYMENTDESCRIPTORUSINGSECURITY
ROLEELEMENTS
R" 3ECURITYROLESARESCOPEDTOTHEINSTANCELEVEL
R# -ANYMETHODSCANBEMAPPEDTOASINGLESECURITYROLE
R$ !METHODCANAPPEARINONLYONESECURITYROLE

\RXDUHKHUH 
PRFNH[DPDQVZHUV

)
!N%*"CONTAINERMUSTSUPPORTATLEASTASUBSETOFWHICH!0)S#HOOSEALL (spec: 493-493
8 THATAPPLY
R! *4!
R" *$"#
R# *-3
R$ *!8 2#0

7HICHSTATEMENTSCONCERNINGSTATELESSSESSIONBEANSARETRUE#HOOSEALLTHAT (spec: 95)


9 APPLY
R! 4HEYCANUSEBEAN MANAGEDTRANSACTIONDEMARCATION
R" 4HEYMUSTHAVEONENO ARGUMENTCREATEMETHOD
R# !SINGLEINSTANCECANSUPPORTCONCURRENTCALLS
R$ 4HEYMUSTEXTENDJAVAXEJB3ESSION"EAN - implements : )

7HATCAPABILITYEXISTSIN/.,9/.%OFTHETWOBUTNOTBOTH 
10 ANENTITYOBJECTSREMOTECOMPONENTINTERFACE
ANENTITYOBJECTSLOCALCOMPONENTINTERFACE
#HOOSEALLTHATAPPLY
R! 2EMOVINGTHEOBJECT
R" /BTAININGTHEOBJECTSHANDLE not for local interfaces
R# )NVOKINGBUSINESSMETHODS
R$ /BTAININGTHEOBJECTSPRIMARYKEY

7HENCREATINGA#-0ENTITYBEAN WHICHMETHODS AREOPTIONAL#HOOSEALL (spec: 171-174)


11 THATAPPLY
R! HME/RDG s
- yo u d on Õt ha ve to allow client
R" HME&UHDWH tities
to insert new en
R# HME5HPRYH
R$ HME6HOHFW
R% HME3DVVLYDWH
R&VHW(QWLW\&RQWH[W

 DSSHQGL[$
DSSHQGL[$ILQDOPRFNH[DP

7HICHMETHODS CANBECALLEDONABEANINTHEPOOLEDSTATE#HOOSEALL (spec: 168)


12 THATAPPLY
R! HME)LQG Þnder and seenleÕtctspeciÞc
R" HME/RDG methods arity
to one ent
R# HME6WRUH
R$ HME6HOHFW
R% HME3DVVLYDWH

7HATSTRUEABOUTTHELIFECYCLEOFAMESSAGE DRIVENBEAN#HOOSEALLTHATAP (spec: 318-320)


13 PLY
R! 7HENTHETHEOQ0HVVDJHMETHODCOMPLETES THECONTAINERWILLTYPI
CALLYCALLEJB2EMOVE - bean just goes back to the pool
R" 4HEON0HVVDJH METHODCANTHROWAPPLICATIONEXCEPTIONS - to whom ?
R# -ESSAGE DRIVENBEANSCANRUNONLYWITH#-4DEMARCATION
R$ 4HEJHW5ROOEDFN2QO\ METHODCANBECALLEDONLYFROMTHE
ON-ESSAGEMETHOD

14 7HICHSTATEMENTS CONCERNINGMESSAGE DRIVENBEANCLASSESARETRUE (spec: 323)


#HOOSEALLTHATAPPLY
R! 4HEYMUSTIMPLEMENT DIRECTLYORINDIRECTLY MDYD[MPV0HVVDJH - itÕs MessageListener
R" 4HEYMUSTHAVEAPUBLICCONSTRUCTORTHATTAKESASINGLEARGUMENTOF
TYPEMDYD[MPV0HVVDJH
R# )MPLEMENTINGTHE¿QDOL]H METHODISALLOWED -No! not in any bean
R$ )MPLEMENTINGTHEHME&UHDWH METHODISOPTIONAL
R% 4HECLASSMUSTNOTBEDECLARED@lNAL- the Container might want to dep
loy a subclass of your bean
7ITHINTHEDEPLOYMENTDESCRIPTORSHMEORFDOUHI!ELEMENT WHICHELE
15 MENTSAREOPTIONAL#HOOSEALLTHATAPPLY (spec: 466)
R! ORFDO!
R" HMEOLQN!
R# ORFDOKRPH!
R$ GHVFULSWLRQ!
R% HMEUHIQDPH!
R&HMEUHIW\SH!

\RXDUHKHUH 
PRFNH[DPDQVZHUV

7HATSTRUEABOUTRESOURCEMANAGERCONNECTIONFACTORIES#HOOSEALLTHAT (spec: 423, 481)


16 APPLY
R4HEUHVVKDULQJVFRSH!DEPLOYMENTDESCRIPTORELEMENTISUSEDTO
INDICATEWHETHERCONNECTIONSTOARESOURCEMANAGERARESHAREABLE
ACROSSMULTIPLE%*"SINANAPPLICATION
R" 4HEUHVVKDULQJVFRSH!DEPLOYMENTDESCRIPTORELEMENTCONTAINS - backwards
THEUHVRXUFHUHI!ELEMENT
R# !LLOFABEANSRESOURCEMANAGERCONNECTIONFACTORYREFERENCESARE - each must be individually
DECLAREDINASINGLEUHVRXUFHUHI!ELEMENT USING speciÞed with a
UHVUHIQDPH!ELEMENTSTODISTINGUISHTHEM <resource-ref>
R$ "YDEFAULT CONNECTIONSTOAGIVENRESOURCEMANAGERARESHAREABLE
ACROSSMULTIPLEBEANSINANAPPLICATION
446)
7HATSTRUEABOUTSECURITYROLESREFERENCEDFROMAN%*"SCODE#HOOSEALL (spec: 439-441,
17 THATAPPLY
R! )NTHEDEPLOYMENTDESCRIPTOR SUCHREFERENCESARECONTAINEDINTHE
VHFXULW\UROHUHI!ELEMENT
R" 4HEVHFXULW\UROH!ELEMENTINCLUDESTHE
VHFXULW\UROHUHI!ELEMENT
R# 7ITHINTHEVHFXULW\UROHUHI!ELEMENT THEUROHQDPH! - this is NOT the same as a real
<security-role> role name
ELEMENTSVALUEISTHESAMEASTHEARGUMENTFORTHEBEANSINVOCATION
OFTHELV&DOOHU,Q5ROHMETHOD
R$ 4HEUROHOLQN!ELEMENTISUSEDTOLINKTWO - no, it links a <security-role-ref> to a
VHFXULW\UROHUHI!ELEMENTS <security-role>
7HATSTRUEABOUTTHECLIENTSVIEWOFSECURITY#HOOSEALLTHATAPPLY (spec: 450)
18
R! !TRANSACTIONALCLIENTCANNOTCHANGEITSPRINCIPALASSOCIATIONWITHINA
TRANSACTION
R" !SESSIONBEANSCLIENTCANNOTCHANGEITSPRINCIPALASSOCIATIONFORTHE
DURATIONOFTHECOMMUNICATIONWITHTHESESSIONOBJECT
R# 4RANSACTIONALREQUESTSWITHINASINGLETRANSACTIONCANNOTARRIVEFROM
MULTIPLECLIENTS
R$ .ONEOFTHEABOVE

 DSSHQGL[$
DSSHQGL[$ILQDOPRFNH[DP

)
(spec: 494-495
7HENPROGRAMMINGANENTITYBEANCLASSWHICHTECHNIQUES SHOULDBE
19 !6/)$%$TOENSUREBEANPORTABILITYACROSSALL%*"CONTAINERS#HOOSEALL
THATAPPLY
R! #HANGINGATHREADSPRIORITY
R" 5SINGTHEREmECTION!0)
R# 5SINGWRAPPERCLASSES
R$ 5SINGSTATICNESTEDCLASSES
)
20 7HENPROGRAMMINGAMESSAGE DRIVENBEANCLASSWHICHTECHNIQUES SHOULD (spec: 494-495
BEAVOIDEDTOENSUREBEANPORTABILITYACROSSALL%*"CONTAINERS#HOOSE
ALLTHATAPPLY
R! 5SING3WING!0)SFORA'5)
R" 5SINGTHE@TRANSIENTMODIlER
R# 5SINGNATIVELIBRARIES
R$ 2EADINGlLEDESCRIPTORS

7HATISREQUIREDOFTHECONTAINERWHENITPASSIVATESASTATEFULSESSIONBEAN (spec: 71)


21
R! 4HEBEANSINSTANCESTATEWILLALWAYSUNDERGO*AVAPROGRAMMINGLAN
GUAGE3ERIALIZATION - it might be something similar
R" )TMUSTSAVEALLOFTHEBEANSINSTANCElELDSTATEREGARDLESSOFTHElELDS
MODIlERS
R# )TMUSTSAVEANYREFERENCESTOTHEBEANS3ESSION#ONTEXTOBJECT
R$ )TMUSTSAVEALLNON NULLTRANSIENTVARIABLES - no, it wonÕt save transient variables, but
it might not reset them to default values...
7HICHCAPABILITIESAREDElNEDINTHEMDYD[HME(-%/RFDO2EMHFWINTER
22 FACE#HOOSEALLTHATAPPLY 
R! 2EMOVEANENTITYOBJECT
R" /BTAINANENTITYOBJECTSPRIMARYKEY
R# /BTAINALOCALHOMEINTERFACEFORTHEENTITYOBJECT
R$ /BTAINAREMOTECOMPONENTINTERFACEFORTHEENTITYOBJECT
R%%XPOSETHEMETHODSOFTHEMDYD[HME(QWLW\%HDQINTERFACETOTHE
CLIENT

\RXDUHKHUH 
PRFNH[DPDQVZHUV

7HATSTRUEABOUTEJB3ELECTMETHODS#HOOSEALLTHATAPPLY (spec: 183)


23
R! 4HEYCANBEEXPOSEDTOTHECLIENT
R" 4HEYCANRETURNONLY%*"/BJECTSOR%*",OCAL/BJECTS - They can return almost anything
R# 4HEYCANBEINVOKEDONLYBYABEANINTHEREADYSTATE - No, theyÕre good for home biz methods
R$ 4HEYMUSTBEASSOCIATEDWITHAQUERYELEMENTINTHEDEPLOYMENTDE
SCRIPTOR

7HICHMETHODSCAN.%6%2BESUCCESSFULLYINVOKEDFROMAMESSAGE DRIVEN (spec: 320-321)


24 BEAN#HOOSEALLTHATAPPLY
ient
R! LV&DOOHU,Q5ROH MDBs have ynohaclve no
R" JHW(-%+RPH view, so theient security
home or cl n
R# JHW5ROOEDFN2QO\ informatio
R$ VHW5ROOEDFN2QO\
R%JHW&DOOHU3ULQFLSDO

7HICHROLEISTYPICALLYRESPONSIBLEFORADDINGEJB LINKELEMENTSTOAN%*"S (spec: 418)


25 DEPLOYMENTDESCRIPTOR
R! BEANPROVIDER
R" APPLICATIONASSEMBLER - linking one bean that refers to another
R# DEPLOYER
R$ CONTAINERPROVIDER
R%SYSTEMADMINISTRATOR

26 )NWHICHOFTHEFOLLOWINGMETHODSCANASTATELESSSESSIONBEANINVOKETHE (spec: 90)


LV&DOOHU,Q5ROH METHODINORDERTOPERFORMASECURITYCHECK#HOOSE
ALLTHATAPPLY
R! HME&UHDWH - isCallerInRole() can be called
R" HME5HPRYH from business methods only
R# VHW6HVVLRQ&RQWH[W
R$ .ONEOFTHEABOVE

 DSSHQGL[$
DSSHQGL[$ILQDOPRFNH[DP

7HICHTWOARETYPICALLYRESPONSIBLEFORCREATINGEJB JARlLES#HOOSETWO (spec: 487)


27
R! 4HEBEANPROVIDER
R" 4HEAPPLICATIONASSEMBLER
R# 4HEDEPLOYER
R$ 4HESYSTEMADMINISTRATOR

7HICHOFTHEFOLLOWINGSTATELESSSESSIONBEANCONTAINERCALLBACKMETHODS (spec: 77)


28 TAKESANARGUMENT#HOOSEALLTHATAPPLY
R! HME5HPRYH
R" HME&UHDWH
R# HME&UHDWH
R$ HME3DVVLYDWH
t ak es a S es si on Context object
R%VHW6HVVLRQ&RQWH[W -

7HICHOFTHESECANNEVERBECALLEDONA3ESSION#ONTEXTINTERFACE#HOOSEALL (spec: 74)


29 THATAPPLY
R! JHW(-%+RPH
R" JHW(-%2EMHFW
R# JHW(-%7UDQVDFWLRQ - no such method : )
R$ LV&DOOHU,Q5ROH
R%JHW8VHU7UDQVDFWLRQ

7HATSTRUEABOUTANENTITYBEANSREMOTECOMPONENTINTERFACE#HOOSEALL (spec: 190)


30 THATAPPLY
R! )FACLIENTATTEMPTSTOINVOKEAMETHODONANENTITYTHATDOESNOTEXIST A
MDYDUPL1R6XFK5HPRWH2EMHFW([FHSWLRQWILLBETHROWN - itÕs NoSuchObjectException
R" )TMUSTEXTENDMDYD[HME(-%+RPH - itÕs EJBObject
R# )TSMETHODSMUSTDECLAREMDYDUPL5HPRWH([FHSWLRQ
R$ )TDElNESAUHPRYH +DQGOHKDQGOH METHOD - This is only in the hom
e

\RXDUHKHUH 
PRFNH[DPDQVZHUV

7HICHARETRUEABOUTlNDERMETHODSINANENTITYBEANSLOCALHOMEINTERFACE
(spec: 196)
31 #HOOSEALLTHATAPPLY
R! 4HEYCANHAVEANYLEGAL*AVANAME - must start with ÒÞndÓ
R" 4HEYMUSTALLDECLAREMDYD[HME)LQGHU([FHSWLRQ
R# 4HEYCANOPTIONALLYDECLAREMDYDUPL5HPRWH([FHSWLRQ - not in a local interface!
R$ 4HE¿QG%\3ULPDU\.H\METHODCANBEOVERLOADED
R%4HE¿QG%\3ULPDU\.H\METHODSRETURNTYPEMUSTBETHEBEANSLOCAL
COMPONENTINTERFACE
R&!METHODCALLEDhlND888vMUSTHAVETHEBEANSLOCALCOMPONENT
INTERFACEASITSDECLAREDRETURNTYPE - it could also be a Collection
, 317)
7HICHARETRUEFORAMESSAGE DRIVENBEAN#HOOSEALLTHATAPPLY (spec: 324-325
32
R! 4HE$EPLOYERUSESTHEDEPLOYMENTDESCRIPTORTODETERMINEWHETHERABEAN
ISINTENDEDFORA1UEUEORA4OPIC
R" 4HECLASSMUSTBEDECLAREDlNAL
R# 4HECLASSMUSTDElNEONEHME5HPRYH METHOD
R$ 4HECLASSCANHAVEOVERLOADEDHME&UHDWH METHODS - thereÕs no client
R%4HECLASSMUSTDElNEANO ARGUMENTON-ESSAGEMETHOD - onMessage takes a message

'IVENTHEFOLLOWINGSUBSETOFADEPLOYMENTDESCRIPTOR
33 HQWLW\! (spec: 440)
HMEQDPH!3D\UROOHMEQDPH!
VHFXULW\UROHUHI!
UROHQDPH!FOHUNUROHQDPH!
VHFXULW\UROHUHI!

HQWLW\!
7HICHCODESNIPPETS MAKESALEGALSECURITYCHECK#HOOSEALLTHATAPPLY
R! FRQWH[WLV&DOOHU,Q5ROH ³3D\UROO´ 
R" FRQWH[WLV&DOOHU,Q5ROH ³FOHUN´ 
R# FRQWH[WLV&DOOHU,Q5ROH ³3D\UROOFOHUN´ 
R$ FRQWH[WLV&DOOHU,Q5ROH ³3D\UROOFOHUN´ 

 DSSHQGL[$
DSSHQGL[$ILQDOPRFNH[DP

34 7HICHAREVALIDLOCALHOMEINTERFACESFORASTATEFULSESSIONBEAN#HOOSEALL (spec: 98)


THATAPPLY
R! SXEOLFLQWHUIDFH7HVW%HDQLPSOHPHQWV
MDYD[HME(-%/RFDO+RPH^ Must:
Y
RLGFUHDWH WKURZV&UHDWH([FHSWLRQ - throw CreateException
`
- return local interface type
- start with ÒcreateÓ
R" SXEOLFLQWHUIDFH7HVW%HDQH[WHQGV - NOT throw RemoteException
MDYD[HME(-%/RFDO+RPH^
7
HVW%HDQ/RFDOHME&UHDWH WKURZV&UHDWH([FHSWLRQ
`
R# SXEOLFLQWHUIDFH7HVW%HDQH[WHQGV
MDYD[HME(-%/RFDO+RPH^
 7HVW%HDQ/RFDOFUHDWH WKURZV&UHDWH([FHSWLRQ
`
R$ SXEOLFLQWHUIDFH7HVW%HDQH[WHQGV
MDYD[HME(-%/RFDO+RPH^
7
HVW%HDQ/RFDOFUHDWH WKURZV&UHDWH([FHSWLRQ
5HPRWH([FHSWLRQ
`
R%SXEOLFLQWHUIDFH7HVW%HDQH[WHQGV
MDYD[HME(-%/RFDO+RPH^
7
HVW%HDQ/RFDOFUHDWH WKURZV/RFDO([FHSWLRQ
`

7HICHMETHODSCANBECALLEDBYABEANPROVIDER#HOOSEALLTHATAPPLY
35
R! UHPRYH - the callback is ejbRemove
R" HME&UHDWH
R# DIWHU%HJLQ The others caarllbe acks
R$ JHW&DOOHU3ULQFLSDO Container
R%HME3DVVLYDWH

\RXDUHKHUH 
PRFNH[DPDQVZHUV

7HOWILLTYPICALLYSPECIFYWHETHERABEANISRE ENTRANTINTHEBEANSDEPLOY (spec: 457)


36 MENTDESCRIPTOR
R! 4HEBEANPROVIDER
R" 4HEAPPLICATIONASSEMBLER
R# 4HEDEPLOYER
R$ 4HESYSTEMADMINISTRATOR

7HICHSTATEMENTSABOUTSTATEFULANDSTATELESSSESSIONBEANSARETRUE
37 #HOOSEALLTHATAPPLY
R! /NLYSTATEFULSESSIONBEANSSUPPORTTRANSACTIONS
R" /NLYSTATEFULSESSIONBEANSCANBEPASSIVATED
R# /NLYSTATEFULSESSIONBEANSHAVEAµVHW6HVVLRQ&RQWH[W¶METHOD le,
- st at el es s must have a sing
R$ "OTHSTATEFULANDSTATELESSSESSIONBEANSCANSUPPORTOVERLOADED
µHME&UHDWH¶METHODS
arg ejbCreate
no-
R%"OTHSTATEFULANDSTATELESSSESSIONBEANSCANIMPLEMENTTHE- only stateful
MDYD[HME6HVVLRQ6\QFKURQL]DWLRQINTERFACE ve state,
- stateless iecantn -haspeciÞc
R&"OTHSTATEFULANDSTATELESSSESSIONBEANSCANHAVEINSTANCEVARIABLESTATE just not cl
state
)
38 7HICHMUSTBEINCLUDEDINEVERYEJB JARlLE#HOOSEALLTHATAPPLY (spec: 488-490
R! 4HESTUBFORTHE%*"(OMEINTERFACE EITHERDIRECTLYORBYREFERENCE
- This is the
R" 4HE*!2-ANIFESTlLE - not n ContainerÕs jo
eeded as of E b
R# !DEPLOYMENTDESCRIPTOR J B 2 .0
R$ 4HE*.$)CONTEXT
R%4HE%*"SHOMEINTERFACE EITHERDIRECTLYORBYREFERENCE

7HICHMETHODS AREDECLAREDINTHEJAVAXEJB%*"(OMEINTERFACE#HOOSE (API docs)


39 ALLTHATAPPLY
R! FUHDWH
R" ORRNXS
R# JHW+DQGOH
R$ JHW+RPH+DQGOH
R%VHW6HVVLRQ&RQWH[W

 DSSHQGL[$
DSSHQGL[$ILQDOPRFNH[DP

(OWMANYJAVAXEJB%*",OCAL(OMEINTERFACEMETHODSCANBECALLEDWITHOUT (spec: 60)


40 ANEXCEPTION FROMASESSIONBEANCLIENT
R! 
The only method in EJBLocalHome is
R"  remove that takes a primary key
R# 
R$ 
R%

7HICHOFTHEFOLLOWING IFCALLED ALWAYSHAVETHESAMETRANSACTIONCONTEXTASA (spec: 76)


41 SESSIONBEANSBUSINESSMETHODS#HOOSEALLTHATAPPLY
R! CONSTRUCTOR
R" VHW6HVVLRQ&RQWH[W
R# DIWHU%HJLQ
R$ DIWHU&RPSOHWLRQ - transaction is over
R%EHIRUH&RPSOHWLRQ

42 'IVENASTATEFULSESSIONBEANWITHCONTAINER MANAGEDTRANSACTIONDEMARCATION (spec: 80)


FROMWHICHMETHODSCANYOUACCESSANOTHERBEAN#HOOSEALLTHATAPPLY
R! VHW6HVVLRQ&RQWH[W
R" HME&UHDWH setSessionContext and
R# DIWHU%HJLQ afterCompletion have
NO meaningful tx context
R$ EHIRUH&RPSOHWLRQ
R%DIWHU&RPSOHWLRQ

7HICHDEPLOYMENTDESCRIPTORELEMENTS CANOPTIONALLYSPECIFYCASCADE DELETE (spec: 468)


43 FUNCTIONALITY#HOOSEALLTHATAPPLY
R! HMEUHODWLRQ!
R" DEVWUDFWVFKHPDQDPH!
R# HMEUHODWLRQVKLSUROH!
R$ UHODWLRQVKLSUROHVRXUFH!

\RXDUHKHUH 
PRFNH[DPDQVZHUV

7HATSTRUEABOUTCASCADE DELETE#HOOSEALLTHATAPPLY (spec: 133)


44
R! )TISDECLAREDINTHEHME5HPRYH METHOD
- cascade-delete says Òdelete
R" 7HENACASCADE DELETEENABLEDBEANISDELETED ITCAUSESALLOFTHE ME if my partner is removedÓ
BEANSWITHRELATIONSHIPSTOITTOBEAUTOMATICALLYDELETEDTOO
- not for many-to-many
R# )TCANBESPECIlEDFORONE TO ONE ONE TO MANY ORMANY TO MANYRELA
TIONSHIPS
R$ !CASCADE DELETEENABLEDBEANISAUTOMATICALLYREMOVEDWHENANY
hMULTIPLICITYOFONEvBEANWITHWHICHITISRELATEDISREMOVED

7HICHMETHODS FROMTHE%NTITY#ONTEXTINTERFACECANBEINVOKED REGARDLESS (spec: 180)
45 OFTRANSACTIONCONTEXT#HOOSEALLTHATAPPLY
R! JHW(-%+RPH
R" JHW(-%2EMHFW
R# VHW5ROOEDFN2QO\
R$ JHW5ROOEDFN2QO\

7HATSTRUEABOUTANENTITYBEANSPRIMARYKEY#HOOSEALLTHATAPPLY
(spec: 120, 130)
46
R! 0RIMARYKEYlELDSMUSTBECMP lELDS - you can use a compound key
R" 3ETTERMETHODSFORlELDSASSOCIATEDWITHAPRIMARYKEYMUSTNOTBE
EXPOSEDTHROUGHACLIENTVIEW
R# )FTWOENTITYOBJECTSHAVETHESAMEHOMEANDTHESAMEPRIMARYKEY
THEYARECONSIDEREDIDENTICAL
R$ 4HEJHW3ULPDU\.H\ METHODCANBEINVOKEDONREFERENCESTOONLY
REMOTEHOMEINTERFACES NOTLOCALHOMEINTERFACES

7HICHINTERFACES AREUSEDBYTHEBEANPROVIDERTOPERFORM"-4DEMARCA (spec: 332)
47 TION#HOOSEALLTHATAPPLY
R! MDYD[WUDQVDFWLRQ7UDQVDFWLRQ
R" MDYD[WUDQVDFWLRQ8VHU7UDQVDFWLRQ
R# MDYD[WUDQVDFWLRQ6\QFKURQL]DWLRQ
R$MDYD[WUDQVDFWLRQ7UDQVDFWLRQ0DQDJHU

 DSSHQGL[$
DSSHQGL[$ILQDOPRFNH[DP

7HICHOFTHEFOLLOWINGARELEGAL%*"1,QUERIES#HOOSEALLTHATAPPLY (spec: 236)


48
R! 3%,%#4C -needs Object (c) or a path
&2/-#USTOMERC
R" 3%,%#4/"*%#4 CNAME - Just all wrong! must be OBJECT(c) or
&2/-#USTOMERC c.name (see answers D and E)
R# 3%,%#4/"*%#4C - must have a FROM, and (c)
7(%2%#USTOMERC
R$ 3%,%#4/"*%#4C
&2/-#USTOMERC
R%3%,%#4CNAME
&2/-#USTOMERC

7HICHARETRUEABOUTTRANSACTIONSIN%*"#HOOSEALLTHATAPPLY
(spec: 339, 348)
49
R! /NLYONEDATABASECANBEUPDATEDWITHINASINGLETRANSACTION - This would elinimate a key
EJB 2.0 feature of
R" %NTITYBEANSWITH"-4DEMARCATIONMUSTUSETHESET3TATUSMETHOD distributed transactions
INSTEADOFTHEVHW5ROOEDFN2QO\METHOD
R# %NTITYBEANSWITH"-4DEMARCATIONMUSTUSETHEGET3TATUSMETHOD
INSTEADOFTHEJHW5ROOEDFN2QO\METHOD
R$ "-4DEMARCATIONSHOULDBEUSEDWHENBEANSACCESSRESOURCEMANAG
- use CMT
ERSTHATDONOTSUPPORTTRANSACTIONS with ÒNotSuppo
rtedÓ
R%4HE@3ESSION3YNCHRONIZATIONINTERFACECANBEUSEDONLYBYSTATEFUL
SESSIONBEANS

50 4OENSUREBEANPORTABILITY WHICHTRANSACTIONATTRIBUTESSHOULDBEUSEDONTHE (spec: 352)


BUSINESSMETHODSINTHECOMPONENTINTERFACEOFANENTITYBEANUSING#-0
#HOOSEALLTHATAPPLY
R! .OT3UPPORTED
R" 2EQUIRED
R# 3UPPORTS
R$ 2EQUIRES.EW
R%-ANDATORY
R&.EVER

\RXDUHKHUH 
PRFNH[DPDQVZHUV

)
7HICHOFTHEFOLLOWINGEXCEPTIONSWOULDCAUSEABEANTOBEDISCARDEDBYTHE (spec: 372-374
51 CONTAINER#HOOSEALLTHATAPPLY
R! MDYD[HME2EMHFW1RW)RXQG([FHSWLRQ The others are recoverable
R" MDYD[HME&UHDWH([FHSWLRQ application exceptions
R# MDYD[HME1R6XFK(QWLW\([FHSWLRQ
R$ MDYD[HME)LQGHU([FHSWLRQ
R%MDYD[HME5HPRYH([FHSWLRQ

)NWHICHCASESSHOULDTHECONTAINERLOGANEXCEPTIONTHROWNBYABUSINESS (spec: 376)


52 METHODOFA#-4DEMARCATEDBEAN#HOOSEALLTHATAPPLY
R!)FTHEMETHODRUNSWITHANUNSPECIlEDTRANSACTIONCONTEXTANDTHROWS
ASYSTEMEXCEPTION
- system exceptions are
R")FTHEMETHODRUNSWITHANUNSPECIlEDTRANSACTIONCONTEXTANDTHROWS always logged
ANAPPLICATIONEXCEPTION
R#)FTHEMETHODRUNSWITHA2EQUIRES.EWCONTEXTANDTHROWSASYSTEM
EXCEPTION
R$)FTHEMETHODRUNSWITHA2EQUIREDCONTEXTANDTHROWSASYSTEMEXCEP
TION
R%)FTHEMETHODRUNSWITHA2EQUIRES.EWCONTEXTANDTHROWSANAPPLICA
TIONEXCEPTION
R&)FTHEMETHODRUNSWITHA2EQUIREDCONTEXTANDTHROWSANAPPLICATION
EXCEPTION

7HICHSESSIONBEANCOMPONENTINTERFACEMETHODS CANBECALLEDSUCCESSFULLY
53 BYALOCALCLIENT#HOOSEALLTHATAPPLY
R! UHPRYH
R" JHW+DQGOH - local client views donÕt have handles
R# LV,GHQWLFDO
R$ JHW(-%+RPH - should
be getEJBLo
calHome()

 DSSHQGL[$
DSSHQGL[$ILQDOPRFNH[DP

)NWHATSCENARIOS CANABEANSBUSINESSMETHODCALLTHELV&DOOHU,Q5ROH
54 METHODOFTHE3ESSION#ONTEXTINTERFACE#HOOSEALLTHATAPPLY
Transaction demarcation
R! !STATEFULSESSIONBEANWITHCONTAINER MANAGEDTRANSACTIONDEMARCA
doesnÕt matter here
TION
R" !STATELESSSESSIONBEANWITHCONTAINER MANAGEDTRANSACTIONDEMARCA
TION
R# !STATEFULSESSIONBEANWITHBEAN MANAGEDTRANSACTIONDEMARCATION
R$ !STATELESSSESSIONBEANWITHBEAN MANAGEDTRANSACTIONDEMARCATION
R%.ONEOFTHEABOVE

7HENCREATINGANENTITYBEANUSINGCONTAINER MANAGEDPERSISTENCE WHICHCAN


(spec: 130)
55 BEACCESSEDTHROUGHTHEBEANSREMOTECOMPONENTINTERFACE#HOOSEALLTHAT
APPLY
R! !CCESSORMETHODSFORTHERELATIONSHIPlELDS
R" 4HELOCALINTERFACEOFTHEENTITYBEAN
R# 4HEBEANSBUSINESSMETHODS
R$ 4HECOLLECTIONCLASSESUSEDFORCONTAINER MANAGEDRELATIONSHIPS
idea...
R%!CCESSORMETHODSFORTHEPERSISTENTlELDS - legal, just not a good

'IVENTHECONTAINER MANAGED ONE TO ONE BIDIRECTIONALRELATIONSHIP (spec: 138)


56 )RR!%DU
!NDTHEOBJECTRELATIONS
I
!E
I!E
7HICHBOOLEANEXPRESSIONWILLBETRUEAFTERTHEFOLLOWINGCODERUNS
E
VHW)RR EJHW)RR 
#HOOSEALLTHATAPPLY
When b2 took b1Õs Foo, he replaced his own
foo2 with foo1. So now, foo2 has no bar.
R!IJHW%DU  QXOO
I
E
R" EJHW)RR  QXOO
IE
R# IJHW%DU  QXOO
R$ NONEOFTHEABOVE

\RXDUHKHUH 
PRFNH[DPDQVZHUV

7HATSTRUEABOUTANENTITYBEANSIDENTITY#HOOSEALLTHATAPPLY
57 (spec: 121)
R! )FTWOENTITYOBJECTREFERENCESARECOMPAREDUSINGTHEOPERATOR THE
CONTAINERPROVIDERISNOTREQUIREDTOPRODUCECONSISTENTRESULTS
R" )FTWOENTITYOBJECTREFERENCESARECOMPAREDUSINGTHEHTXDOV
METHOD THECONTAINERWILLRETURNTRUEIFTHETWOENTITYOBJECTSHAVETHE
SAMEPRIMARYKEY - not guaranteed
R# )FTWOENTITYOBJECTREFERENCESARECOMPAREDUSINGTHELV,GHQWLFDO
METHOD THECONTAINERWILLRETURNTRUEIFTHETWOENTITYOBJECTSHAVETHE
SAMEPRIMARYKEY
R$ .ONEOFTHEABOVESTATEMENTSARETRUE

'IVEN#-0BEANS#USTOMER"EAN /RDER"EAN AND,INE)TEMS"EANWITHTHE (spec: 232)


58 FOLLOWINGRELATIONSHIPS
#USTOMER"EAN  /RDER"EANN
/RDER"EAN  ,INE)TEMS"EANN

7HICHWILLRETURNASETOFCUSTOMERSTHATHAVEORDERS#HOOSEALLTHATAPPLY
R! 3%,%#4#USTOMER - need OBJECT or path
&2/-/RDER
R" 3%,%#4$)34).#4#USTOMER - need OBJECT or path
&2/-/RDER
R# 3%,%#4OCUSTNUM
&2/-/RDERO #USTOMERC
- not a Customer type
7(%2%CCUSTNUMOCUSTNUM
R$ 3%,%#4/"*%#4C - doesnÕt guarantee you wonÕt
&2/-#USTOMERC /RDERO get duplicates
7(%2%CCUSTNUMOCUSTNUM
R%3%,%#4$)34).#4/"*%#4C
&2/-#USTOMERC /RDERO
7(%2%CCUSTNUMOCUSTNUM

 DSSHQGL[$
DSSHQGL[$ILQDOPRFNH[DP

'IVEN
59
(spec: 357-359)
0
HWKRG 7[ !0HWKRG 7[ !0HWKRG 7[
?!0HWKRG 7[

)FTHECALLINGMETHODISONTHELEFTSIDEOFANARROW ANDTHECALLEDMETHODON
THERIGHT WHICHSETOFTRANSACTIONATTRIBUTESWILLSUPPORTTHETRANSACTIONSCOPE
SPECIlED#HOOSEALLTHATAPPLY
a
R! 0 1HYHU
V E R . M et ho d 1 could not Nbeeviner
N E w as
  0 6XSSRUWV - Never meannsif...its transaction attribute
  0 5HTXLUHG trans ac t io
  0 5HTXLUHV1HZ
R" 0 5HTXLUHG
  0 6XSSRUWV
  0 0DQGDWRU\
  0 5HTXLUHV1HZ
R# 0 5HTXLUHV1HZ
ho d tion, but
1Õs transacra
nn in g in m et t nsaction
  0 5HTXLUHV1HZ
- method 2Reqis uiruresNew, it would be a new
  0 6XSSRUWV if it had
  0 5HTXLUHV1HZ
R$ 0 5HTXLUHG - method 4 starts a
  0 0DQGDWRU\ does not have Supportsnew transaction, so it obviously
  0 6XSSRUWV
as an attribute
  0 6XSSRUWV

'IVENTHE%*"1,EXPRESSION (spec: 229)


60 SGLVFRXQW127%(7:((1$1' - 10 and 15 a
re EXCLUDE
7HICHEXPRESSIONISEQUIVALENT D
R! SGLVFRXQW25SGLVFRXQW!
R" SGLVFRXQW 25SGLVFRXQW!
R# SGLVFRXQW25SGLVFRXQW! 
R$ SGLVFRXQW 25SGLVFRXQW! 

\RXDUHKHUH 
PRFNH[DPDQVZHUV

7HENABUSINESSMETHODINANENTITYBEANCALLSTHEJHW5ROOEDFN2QO\ (spec: 361)


61 METHOD WHICHTRANSACTIONATTRIBUTESETTINGSCOULDCAUSETHECONTAINERTO
THROWANEXCEPTION#HOOSEALLTHATAPPLY
R! .OT3UPPORTED
R" 2EQUIRED
R# 3UPPORTS - because there might not be one
R$ 2EQUIRES.EW
R%-ANDATORY
R&.EVER

7HICHOFTHEFOLLOWINGISPERFORMEDBYTHECONTAINERIFAMESSAGE DRIVENBEAN (spec: 356)


62 DOESNOTCOMPLETEITSTRANSACTIONBEFORETHEENDOFTHEON-ESSAGE METHOD
#HOOSEALLTHATAPPLY
R! ,OGANAPPLICATIONERROR
R" 2OLLBACKTHESTARTEDTRANSACTION
R# $ISCARDTHEINSTANCEOFTHEBEAN
R$ 4HROWANEXCEPTION - to whom?

&ROMWHICHCLASSES CANAPPLICATIONEXCEPTIONSEXTEND#HOOSEALLTHATAP (spec: 373)


63 PLY
R! MDYDODQJ([FHSWLRQ
R" MDYDODQJ5XQWLPH([FHSWLRQ - they must be checked
R# MDYDUPL5HPRWH([FHSWLRQ - you just canÕt do this, even though it IS a
checked exception... itÕs Bean Law
R$ MDYD[HME&UHDWH([FHSWLRQ

7HATSTRUEABOUTAPPLICATIONEXCEPTIONS#HOOSEALLTHATAPPLY (spec: 372-373)


64
R! 4HEYAREINTENDEDTOBEHANDLEDBYTHESYSTEMADMINISTRATOR
R" 4HEYSHOULDREPORTSYSTEMLEVELPROBLEMS
They are intended to be
handled by the client
R# 4HEYCAUSEAUTOMATICMARKINGOFTRANSACTIONSFORROLLBACK
R$ 4HEYMUSTNOTEXTENDMDYDODQJ5XQWLPH([FHSWLRQ
R%4HEYMAYEXTENDMDYDUPL5HPRWH([FHSWLRQ - NO

 DSSHQGL[$
DSSHQGL[$ILQDOPRFNH[DP

7HICHCASESCANCAUSEASESSIONBEANINSTANCETOBEDESTROYEDWITHOUTTHE (spec: 79)


65 CONTAINERCALLINGHME5HPRYH #HOOSEALLTHATAPPLY
R! !TRANSACTIONISROLLEDBACKONASTATEFULSESSIONBEANWITHCONTAINER
MANAGEDTRANSACTIONDEMARCATION
R" !SYSTEMEXCEPTIONISTHROWNFROMABUSINESSMETHOD
R# !NINACTIVECLIENTISTIMEDOUTWHILETHEBEANISINAPASSIVATEDSTATE
R$ 4HECLIENTINVOKESTHEREMOVEMETHODWHILETHEBEANISINATRANSAC
TION - client gets exception, bean survives
7HICHDEPLOYMENTDESCRIPTORELEMENTS AREUSEDTOSPECIFYA#OLLECTION (spec: 462)
66 INTERFACE#HOOSEALLTHATAPPLY
R! HMEQDPH!
R" FPU¿HOG!
R# HMEUHODWLRQ!
R$ FPU¿HOGW\SH! - fororÒmanyÓ multiplicity, to indicate
Set Collection
R% DEVWUDFWVFKHPDQDPH!

)FABEANCATCHESACHECKEDEXCEPTION FROMWHICHITCANNOTRECOVER WHAT (spec: 373)


67 SHOULDITDO#HOOSEALLTHATAPPLY
R! )FTHECLIENTISREMOTE THROWAMDYDUPL5HPRWH([FHSWLRQ - a bean must NEVER throw
R" 0RINTASTACKTRACE RemoteException. Only the
Container can do it.
R# 2EGARDLESSOFTHECLIENT THROWAMDYD[HME(-%([FHSWLRQ
R$ 2EGARDLESSOFTHECLIENT PROPAGATETHESAMEEXCEPTIONTOTHECONTAIN
ER
7HICHAREREQUIREMENTSFORA#-0ENTITYBEANCLASS#HOOSEALLTHATAPPLY (spec: 190-191)
68
R! !LLHME6HOHFW METHODSMUSTBEDECLAREDASABSTRACT
R" 4HECLASSMUST./4DElNEANHME&UHDWHMETHOD
R# 4HEHME3RVW&UHDWHMETHODSAREIMPLEMENTEDBYTHECONTAINER
R$ (ELPERMETHODSMUST./4BEIMPLEMENTEDINTHEBEANCLASS
R%-ETHODSSTARTINGWITH@HME)LQGMUSTNOTBEIMPLEMENTED

\RXDUHKHUH 
PRFNH[DPDQVZHUV

7HICHAREVALIDDEPLOYMENTDESCRIPTORSEGMENTS TODElNEACMR lELD (spec: 162, 463)


69 #HOOSEALLTHATAPPLY
R! HMEUHODWLRQVKLSUROH!
  DVVXPHPDQGDWRU\HMEUHODWLRQVKLSUROHHOHPHQWV
LQVHUWHGKHUH!
me
  FPU¿HOG!
-missing Þeld na
  FPU¿HOGW\SH!MDYDXWLO&ROOHFWLRQFPU¿HOGW\SH!
  FPU¿HOG!
HMEUHODWLRQVKLSUROH!
R" HMEUHODWLRQVKLSUROH!
  DVVXPHPDQGDWRU\HMEUHODWLRQVKLSUROHHOHPHQWV
LQVHUWHGKHUH!
  FPU¿HOG!
  FPU¿HOGQDPH!OLQH,WHPVFPU¿HOGQDPH!
  FPU¿HOGW\SH!MDYDXWLO&ROOHFWLRQFPU¿HOGW\SH!
  FPU¿HOG!
HMEUHODWLRQVKLSUROH!
R# UHODWLRQVKLSUROHVRXUFH!
  DVVXPHPDQGDWRU\UHODWLRQVKLSUROHVRXUFHHOH
PHQWVLQVHUWHGKHUH!
  FPU¿HOG!
- missing name, and in
  FPU¿HOGW\SH!MDYDXWLO&ROOHFWLRQFPU¿HOGW\SH! role source, as opposed
  FPU¿HOG! to role
UHODWLRQVKLSUROHVRXUFH!
R$ UHODWLRQVKLSUROHVRXUFH!
  DVVXPHPDQGDWRU\UHODWLRQVKLSUROHVRXUFHHOH
PHQWVLQVHUWHGKHUH!
  FPU¿HOG! le source
  FPU¿HOGQDPH!OLQH,WHPVFPU¿HOGQDPH! -canÕt be in a ro
  FPU¿HOGW\SH!MDYDXWLO&ROOHFWLRQFPU¿HOGW\SH!
  FPU¿HOG!
UHODWLRQVKLSUROHVRXUFH!

 DSSHQGL[$
DSSHQGL[$ILQDOPRFNH[DP

7HATSTRUEABOUTAREMOTECLIENTSVIEWOFEXCEPTIONSRECEIVEDFROMANENTITY (spec: 383)


70 BEAN#HOOSEALLTHATAPPLY
- only if the callerÕs
R! )FTHECONTAINERMARKSATRANSACTIONFORROLLBACK THECONTAINERWILL
ALWAYSISSUEAMDYD[WUDQVDFWLRQ7UDQVDFWLRQ5ROOHGEDFN([FH transac
tion was rolled
SWLRQEXCEPTION
back (as opposed to
suspended)
R" )FTHECLIENTRECEIVESAMDYD[WUDQVDFWLRQ7UDQVDFWLRQ5ROOHG
%DFN([FHSWLRQ THECONTAINERGUARANTEESTHATTHATTRANSACTIONWILL
NEVERCOMMIT
happens with
R# !MDYD[WUDQVDFWLRQ7UDQVDFWLRQ5HTXLUHG([FHSWLRQEXCEP -Mandat
the
ory tx attribute
TION INFORMSTHECLIENTTHATTHEBEANNEEDEDTOBECALLEDWITHINTHE
CONTEXTOFATRANSACTION
R$ )FTHECONTAINERDISCOVERSTHATAREQUESTEDBEANNOLONGEREXISTS ITWILL
ALWAYSTHROWTHEMDYD[HME1R6XFK2EMHFW(QWLW\([FHSWLRQ
- java.rmi.NoS
uchObjectExce
ption

\RXDUHKHUH 
JRRGOXFN
This isnÕt goodbye
%ULQJ\RXUEUDLQRYHUWR
'RQ·W\RXNQRZWKHUH·VPRUHRQWKH ZLFNHGO\VPDUWFRP
ZLFNHGO\VPDUWFRPZHEVLWH"<RX·OOÀQGVRPH
FRGHVRPHPRUHPRFNH[DPTXHVWLRQVDQG
$QGGRQ·WIRUJHWWRZULWHDQGWHOOXV
PD\EHHYHQRXUIDYRULWHPDUWLQLUHFLSH
ZKHQ\RXSDVVWKHH[DP
$QGLI\RX·UHJRLQJWRWDNHWKHH[DPEHVXUHWRGURSE\
MDYDUDQFKFRPDQGVSHQGVRPHWLPHLQWKH6&%&'
,NLFNHGEXWW#ZLFNHGO\VPDUWFRP
VWXG\IRUXP)RONVWKHUHDUHMXVWVRGDPQ :H¶OOKDYHDGULQNLQ\RXUKRQRU
IULHQGO\LW·OOPDNH\RXZDQWWRWKURZXS


RXWWDNHV
&RYHU5RXJK'UDIWVIRUWKHVHULHV
,WZDVDWRXJKGHFLVLRQ
%HIRUHZHÀQDOO\VHWWOHGRQ

ZHNLFNHGDURXQG
DORWRISURPLVLQJ
FDQGLGDWHV
We were
 the wholethhainnking this might play u
do you think? ds-on approach... whatp
-K & B
0IVL[.QZ[\ ZHOOVLQFHLW·VEUDLQEDVHG ZK\
GRQ·WZHHPSKDVL]HWK H+($'DQG
FDOOLW+HDG)LUVW" DUNHWLQJ
P

Hey, is this what you had in


 mind by Òemphasize the Head?Ó
-K&B
>XPQRPDUNHWLQJ@
, .1 2: W KL V RQ H LV PRUHIHVWLYHE(XWOHDYH
0MIL.QZ[
\
<HV
ZKDWWKHA#URG RHVLWPHDQ"3/($6
VVLRQDOV
 WKLVWRWKHSIHPDUNHWLQJ
WasnÕt this the one 
we agreed on last
 week? - K & B
/]Q\IZ.QZ[\
0MIL.QZ[\

\RXDUHKHUH 
Index

Symbols <env-entry> 607


<exclude-list> 574

<abstract-schema-name> 384, 394, 406 <message-driven-destination> 449

<acknowledge-mode> 460 <message-driven> 449

<assembly-descriptor> 503 <method-intf> 582

<cascade-delete/> 393 <method-param> 505

<cmp-field> 384 <method-params> 505, 579

<cmr-field-name> 388 <method-permission> 574, 578

<cmr-field-type> 388 <method> 504, 579

<cmr-field> 388 <multiplicity> 388, 422

<container-transaction> 502 <persistence-type> 385

<destination-type> 449 <relationships> 395

<ejb-link> 615 <res-auth> 610, 611

<ejb-local-ref> 614 <res-ref-name> 610

<ejb-ref-name> 613 <res-sharing-scope> 610

<ejb-ref-type> 613 <res-type> 610

<ejb-ref> 613 <resource-env-ref> 616

<ejb-relation> 388 <resource-ref> 610

<ejb-relationship-role-name> 388 <role-link> 589

<ejb-relationship-role> 388 <role-name> 574

<env-entry-name> 607 <run-as> 591, 592

<env-entry-type> 607 <security-identity> 591

<env-entry-value> 607 <security-role-ref> 589

this is a new appendix 685


the index

<security-role> 574 architectural overview 63


<trans-attribute> 476, 502, 504 arguments 67
<transaction-type> 476, 502 Atomic 472
<unchecked/> 574, 581 attributes. See transaction attributes
authentication 572
authorization 572

A Auto-acknowledge 460

B
abstract 313
abstract getters and setters 315, 383
abstract getter and setter 313
abstract persistence schema 384, 387 Bean-managed transactions. See BMT
abstract schema type 408 beanness 188, 191, 196
ACID test 472 beans 11. See also entity beans; See also message-driven
beans; See also session beans
acknowledgement. See message acknowledgement
bean inheritance 186
actor playing an entity 350
five things you do to build a bean 16
administered object 616
overview 98
Advice Guy bean 15
bean creation 188, 192, 194, 196. See also entity beans
afterBegin() 512
bean getting shot 283
afterCompletion() 512
Bean Provider 26
Application 33
exception responsibilities 541
making a new J2EE app in the deploytool 33
passivation responsibility for stateful session beans
Application Assembler 26 203
Application Assembler’s responsibility responsibility for the Deployment Descriptor 617
<ejb-link> 615 security responsibilities 589
deployment descriptor 617 writing a CMP entity bean 313
security 574, 588 writing a message-driven bean 447
Application exceptions 532 beat box. See also appendix A
application exceptions 500, 548 beforeCompletion() 512

686 index
the index

begin() 476, 478


Being John Entity Bean 350 C
BETWEEN 416. See EJB-QL
cascade-delete 387, 388
BMP 303
cast 120
BMT 476, 478, 482, 485, 487, 490, 502, 508
narrow before cast 120
getStatus() 489
client 55
restrictions 481
client Code 57, 219
summary of bean-managed demarcation 508
client view 111
bodyguard 94
component interface 136
bullet points 166
exceptions 159
architectural overview 97
local 145
client view 131
code example 119
EJB-QL 420
creating a test client 55
entity client view 287
InitialContext 117
entity relationships 420
local client code 160
exceptions 555
lookup 116
local interfaces 166
Client before and after message-driven beans 441
overview 14
client Jar 51
Remote interfaces 144
client view 111, 131
RMI 76
EJBHome methods 129
session bean lifecycle 221
EJBObject methods 137
business interface 79
entity bean 287
business methods 199, 226
exceptions 159
local 145
local interface code 156
CMP 302
vs. BMP 303
CMR 383, 396. See also cascade-delete
cmr-field 387

you are here4 687


the index

CMR field 383, 386 chapter 4: session beans 244


CMT 476, 482, 485, 487, 499, 502, 509 chapter 5: entity bean client view 288
summary of container-managed transactions 509 chapter 6: entity bean synchronization 362
CMT. 491 chapter 7: entity relationships and EJB-QL 425
code examples chapter 8: message-driven beans 463
AdviceStatefulBean code 218 chapter 9: transactions 516
client 119 commit 471, 473
AdviceStatefulBean client 219 commit() 478
exceptions in client interfaces 538 commit options 356
CMP entity bean complete 318 compare
CustomerBeanCMP 318 equals() vs. isIdentical() 150
Customer BMT entity bean 268 Remote vs. local interfaces 154
Customer CMT entity bean 316 compiling a bean 30
entity bean Remote home interface 275 component-based development 3
exceptions in client interfaces 538 component interface 87, 133, 234, 271, 272
local client code 160 implementing 87
local client interfaces 156 confusingly-named exceptions 554
message-driven beans 446 Consistent 472
MovieBean CMP code 396 constructor 195, 196
MovieHomeRemote interface 398 container 6
Remote home interface 126 container-managed persistence. See CMP
WelcomeBean 446 container-managed relationship. See CMR
Coffee Cram Container-managed transactions. See CMT
appendix A: final mock exam 637 container callbacks 181, 310
chapter 1: overview 59 ejbActivate() 183
chapter 10: exceptions 563 ejbCreate() 181
chapter 11: security 593 ejbPassivate() 183
chapter 12: environment and programming restric- ejbRemove() 183
tions 627
implementing in a session bean 183
chapter 3: client view 168
setSessionContext() 183

688 index
the index

Container responsibilities abstract persistence schema 384


exceptions 546 abstract schema 394
create() 123, 232, 237 intro 23
entity vs. session bean 281 message-driven bean 449
CreateException 125, 548 resource manager connection factories 610
create methods 159, 181 transactions 502, 503, 504
creation method parameters 505
entity beans 329 wildcard 579
entity vs. session bean 281 deploytool 32
session beans 188, 192 deserializing 71
Director 378
Director talking to entity bean 284

D distributed transactions 473


two-phase commit 473
DuplicateKeyException 548
database 301
Dups-ok-acknowledge 460
database to entity mapping 400
Durable 472
DataSource 602, 610
durable subscription 450
dead bean 284
entity vs. instance death 285

E
declarative security 572
declarative transactions. See CMT
DELETE 265
deploy-time customization 602, 618 EJB
Deployer 27 and RMI 81
deployment descriptor responsibilities 618 architectural overview 63
responsibilities for mapping abstract roles to people EJBObject 82
583
ejb-jar 24, 620, 624
deployment descriptor
requirements 24
<ejb-link> 615
ejb-jar.xml 624

you are here4 689


the index

EJB-QL 401, 402, 411 EJBLocalObject 145, 156


AND 405 EJBMetaData 149
BETWEEN 416 EJBObject 82, 94, 133, 137
Collection types 413 ejbPassivate() 183, 200, 204, 207, 308, 314, 355
FROM clause 403 ejbPostCreate() 334, 396
identifiers 410 ejbRemove() 183, 210, 213, 214, 216, 314
IN operator for the FROM clause 415 missed ejbRemove() in session beans 213
IN with the WHERE clause 417 ejbStore() 314, 355
IS EMPTY 418 EJB 2.0 guarantees
IS NOT EMPTY 418 services and behavior 623
LIKE expression 419 supported APIs 621
parameters 405 EJB references 613
path navigation 404 <ejb-local-ref> 614
reserved words 410 EJB Roles and Responsibilities 26
SELECT clause 403, 406 Application Assembler 26
String literals 417 Bean Provider 26
topics and queues 450 Deployer 27
using collections in a path 414 EJB security mapping 590
WHERE 412 EntityBean 312, 314
WHERE clause 403, 411 entity beans 99
ejb-relation 387 activation 352, 354
ejb-relationship-role 387 actor playing an entity 350
ejbActivate() 183, 200, 204, 207, 308, 314, 354 business method 348
EJBContext 477 client view 287
ejbCreate() 181, 195, 196, 237, 331, 333 CMP bean construction 326, 327
EJBException 537, 539, 552, 558 CMP bean creation 328, 338
EJBHome 128 ejbCreate() 331, 333
methods 129 ejbPostCreate() 334
ejbLoad() 314, 354 OID for bean creation 329
EJBLocalHome 145 CMP class example 316

690 index
the index

CMP complete class code 318 exam objectives


container callbacks 310, 312 bean environment 600
ejbActivate() 308 client view 112
ejbPassivate() 308 EJB overview 2
ejbPostCreate() 396 entity bean client view 260
entity realization (how a bean becomes an entity) entity bean lifecycle 296
306
entity relationships: CMP and CMR 374
entity vs. instance death 285
exceptions 526
finder methods 276, 339, 341
message-driven beans 438
home business method 345
security 570
home interface 273, 275
session beans 174
lifecycle 320
transactions 470
mapping from abstract schema to a real database
400 exceptions 555

overview 268 application exceptions 533, 548

passivation 308, 355 client interfaces 159

relationships 378 common system exceptions 551

unidirectional 391 CreateException 548

relationship assignments 421 DuplicateKeyException 548

remove() 282, 283, 284 EJBException 537, 539

session remove vs. entity remove 282 FinderException 538, 548

synchronization 298, 301 logging system exceptions 535

environment ObjectNotFoundException 548

creating a subcontext 609 RemoteException 78, 133, 537

resource mapping 612 RemoveException 548

subcontexts 604 scenarios 556

environment entries 607 system exceptions 534

scope 608 exception pathways 530

types 608 exception scenarios 556

equals() 150 Exercise. See Sharpen your pencil


exotic casting 122. See narrow

you are here4 691


the index

F H
findByPrimaryKey() 274 Handle 139, 149
FinderException 538, 548, 559 handle 149
finder methods 274, 276, 339, 341 home 91
Container writes all the code 342 business methods 278
FROM 411 create() 123
EJBHome 128
home interface 114

G methods 129
home business method 278, 345
home interface 273
getCallerPrincipal() 241, 587
EJBHome 128
getEJBHome() 137, 241
entity bean Remote home interface 273, 279
getEJBLocalHome() 241
methods 129
getEJBLocalObject() 241
rules 125
getEJBMetaData() 129
home object 91
getEJBObject() 241
getHandle() 137

I
getHomeHandle() 129
getPrimaryKey() 137
getRollbackOnly() 241, 488, 500
getStatus() 489 IIOP 90
getUserTransaction() 241, 476, 477, 478 IllegalStateException 551, 552, 558, 560
IN. See EJB-QL
inheritance 186
InitialContext 117
input parameters 412. See EJB-QL
INSERT 265

692 index
the index

instance-level security 586


interface J
business interface 79
J2EE Reference Implementation (RI)
comparing Remote vs. local 154, 163
Client Jar 51
component interface 82, 133, 271
deploytool 32
EJBHome 129
JNDI name 52
EJBObject 137
New Enterprise Bean Wizard 37
extending 85
server 31
home interface 91, 114, 125, 273
verifier 47
javax.ejb.EntityBean 182
java.net.Socket 625
javax.ejb.EntityContext 182
java:comp/env 602, 603
javax.ejb.MessageDrivenBean 182
subcontexts 604
javax.ejb.MessageDrivenContext 182
JavaMail 621
javax.ejb.SessionBean 182
javax.ejb.EJBContext 477
javax.ejb.SessionContext 182
javax.ejb.EntityBean 312. See also EntityBean
local client interfaces 145, 166
javax.ejb.SessionBean 182. See also SessionBean
exceptions 159
javax.ejb.SessionSynchronization 511
Remote 78
javax.jms.QueueConnectionFactory 611
squeamish about not implementing 86
javax.jms.Topic 449
isCallerInRole 587
javax.jms.TopicConnectionFactory 611
isCallerInRole() 587
javax.mail.Session 611
isCallerInRole(String s) 241
javax.transaction.UserTransaction 471, 477
isIdentical 141
JAXP 621
isIdentical() 142
JDBC 621
isIdentical(Object o) 137
JMS 452, 621
Isolated 472
JNDI 92, 602
IS EMPTY. See EJB-QL
bean’s special context 189, 602
IS NOT EMPTY. See EJB-QL
InitialContext 117, 602
lookup 116

you are here4 693


the index

narrow the result 120 JMS 452


JNDI API 1.2 621 lifecycle 445
JNDI name 52 MessageDrivenContext 455, 456
JTA 621 MessageListener 452
JTS 471 message acknowledgement 458, 460
queues 454
rules for writing the class 448

L topics 453
transaction attribute 500
MessageDrivenContext 455, 456
LIKE expression
MessageListener 452
EJB-QL. See EJB-QL
message acknowledgement 458
local client view 145
methods
local interface 148, 156
afterBegin() 512
exceptions 159
afterCompletion() 512
vs. Remote interface 154
beforeCompletion() 512
locking (database) 301
begin() 476
logging 535
create() 128, 274
lookup 116
create methods 159
ejbActivate() 183, 200, 204, 207, 309, 354
ejbCreate() 183, 195, 331, 333

M ejbLoad() 354
ejbPassivate() 183, 200, 204, 207, 309

Mandatory 492 ejbPostCreate() 334

Many-to-Many 380 ejbRemove() 213, 214, 216

message-driven beans 106, 437, 442 findByPrimaryKey() 274

BMT 460 getCallerPrincipal() 587

CMT 460, 500 getEJBHome() 137

concurrent processing 444 getEJBMetaData() 129


getHandle() 137

694 index
the index

getHomeHandle() 129
getPrimaryKey() 137 N
getRollbackOnly() 488
narrow 120
getStatus() 489
PortableRemoteObject.narrow() 121
getUserTransaction() 476
network transparency 65, 66
isIdentical(Object o) 137, 141
Never 492, 495
remove() 137, 282
NoSuchEntityException 551, 552
remove(Handle h) 129
NoSuchObjectException 551, 553
remove(Object key) 129
NoSuchObjectLocalException 551, 552, 553
remove methods 159
NotSupported 492, 495
setRollbackOnly() 485
NOT IN. See EJB-QL
setSessionContext() 183
setSessionContext(SessionContext sc) 195

O
method permissions 578
<unchecked/> 581
union 580
missed ejbRemove() in session beans 213, 215 objectives. See exam objectives
mock exam. See Coffee cram ObjectNotFoundException 548, 553, 559
Movie 378 ome business method 346
MovieBean code 396 One-to-Many 380
MovieHomeRemote interface 398 One-to-One 380
MovieSchema 408
multiplicity 380, 387, 422

P
affects return type 382
Many-to-Many 380
One-to-Many 380
One-to-One 380 passing objects remotely 68
passivation
stateful session bean 200
transactions 206

you are here4 695


the index

pass by copy 69
pass by reference 68 R
path navigation 404
relationships 378, 394
persistent field 313
unidirectional 391
virtual 315
relationship assignments 421
point-to-point 451. See also queue; See also topic
Remote 65
PortableRemoteObject.narrow() 121
arguments 67, 72
primary key 332, 333
Serializable 72
Principal 584
business interface 79
programmatic security 586, 589
component interface 82
programmatic transactions. See BMT
home interface 125
programming restrictions 625
interface 78
propagation
PortableRemoteObject.narrow() 121
transactions 474, 482
RemoteException 78
proxy. See stub
return values 67, 72
publish/subscribe 451
Serializable 72
vs. local interface 154

Q
RemoteException 78, 133, 537, 559
Remote home interface 125, 279
EJBHome 128

queries 406. See EJB-QL Remote interface 78, 144

queues 450, 454 component interface 82, 137, 271


home interface 125
EJBHome 128
vs. local interface 154
Remote Method Invocation 63, 64
Remote object 65, 67
EJBObject 82
remove 129, 151, 159, 282

696 index
the index

entity beans 284 rollback() 478


entity vs. session bean 282, 283 RPC 67
remove() 137, 151, 208, 282, 286 run-as 591
entity vs. session bean 283 RuntimeException 545
remove(Handle h) 129
remove(Object key) 129
RemoveException 548, 559
remove methods 159 S
Required 492
scalable
RequiresNew 492
stateless session beans 103
resource manager connection factory 610
security
resource authorization 611
App Assembler 574, 576
return values 67
authentication 572
Serializable 72
authorization 572
RMI 63
context propagation 592
arguments 67
declarative security 572
how its used by EJB 81
Deployer 583
IIOP 90
identity 591
PortableRemoteObject.narrow() 121
instance-level security 586
RemoteException 78
isCallerInRole() 587
Remote object 65
Principal 584
return values 67
programmatic security 586
RMI-IIOP 90
roles 574
rmic 90
role definition 576
skeleton 65, 67
security identity 592
stub 64
security mapping 590
rmic 90
security roles 574, 576
Role 584
<method-permission> 578
role reference 589
SELECT 265, 402, 406
rollback 473

you are here4 697


the index

Serializable 67, 72 setSessionContext(SessionContext sc) 195


server 31 Sharpen your pencil
Server dude at the pool 441 APIs 621
SessionBean 182, 183 architectural overview 107
SessionContext 189, 199, 240, 241 bean table 108
SessionSynchronization 511, 512 bean types 13
callbacks 512 client view exercise 165
session beans 182 CMP entity creation 359
bean lifecycle 180, 184 compiler checked? 447
container callbacks 182 EJB-QL 407
implementing 183 EJB architecture 10, 80
missed ejbRemove() calls 215 EJB Lifecycle 96
overview 98, 100 EntityBean interface 323
passivation 200, 207 entity bean 280
removal 208, 210 entity bean callbacks 353
scalability 103 entity bean class methods 361
SessionBean interface 182 entity bean relationships (Director-to-Movie) 390
stateful session beans 178, 184 entity business method 360
creation 179, 192, 196 entity CMP code annotation 319
OID for bean creation 194 entity lifecycle activity 324
passivation/activation 207 environment 626
removal 210 exceptions 561
stateless session bean 102, 222 exception exercise 562
creation exception scenarios 557
OID for bean creation 227 home interface 132
session context 240 local and Remote client interfaces 155
setEntityContext(EntityContext ec) 314 local clients 158
setRollbackOnly() 485, 487 local client view 147
setRollbackOnly(boolean b) 241 message-driven bean 461
setSessionContext(SessionContext ctx) 183 message-driven bean context methods 455

698 index
the index

Multiplicity and Assignments 423 supported APIs 621


package name 119 Supports 492, 495
security roles 575 suspended transactions 483
SessionBean interface 186 synchronization 298
session bean overview 104 system exceptions 500, 551
stateful session bean state diagram 187 logging 535
stateless to stateful 220
transactions 480
transactions puzzle 514
transaction attributes 496, 497, 507 T
UserTransaction 484
The Advice Guy 15
write an entity bean 317
Tikibean Lounge
skeleton 65, 67
BMT/CMT 501
squeamish 86
EJBObject/bean 89
stateful session bean 178
session bean/bartender 14
creation 179, 194, 196
topics 450, 453
Object Interaction Diagram (OID) for bean creation
194 durable subscription 450
removal 210 topics and queues 450
SessionSynchronization 512 TransactionRequiredException 551, 552
stateless session TransactionRequiredLocalException 551, 552
transactions in 481 TransactionRolledbackException 551, 552
stateless session bean 102, 222 TransactionRolledbackLocalException 551, 552
business methods 226 transactions 471, 473. See also commit; See also roll-
back; See also setRollbackOnly()
creation 224
Bean-managed transactions 476
Object Interaction Diagram (OID) for bean creation
227 begin() 476
String literals. See EJB-QL BMT 476, 481
stub 64, 67 call stack example 479
subcontexts 604 database locking 301

you are here4 699


the index

deployment descriptor 503 UserTransaction 476, 477


getRollbackOnly() 488, 500 getStatus() 489
message-driven beans 460, 500
propagation 474, 482
SessionSynchronization 512
stateful session bean passivation 206 V
suspension 475, 483
vendor lock-in 5
transaction attributes 492
verifier 47
two-phase commit 473
virtual persistent fields 315
unspecified transaction context 499
transaction attributes 492, 493, 498
attributes that require a transaction 494
Mandatory 492
Never 492, 495
W
NotSupported 492, 495 WHERE 403, 411, 412
Required 492 wildcard
RequiresNew 492 method elements 504
Supports 492, 495 transaction attributes 504
Tutorial 28
two-phase commit 473

U
unidirectional 391
unsetEntityContext() 314
unspecified transaction context 499
UPDATE 265
Users 584

700 index
Interface summary
javax.ejb.EJBContext

getCallerPrincipal()
getEJBHome()
getEJBLocalHome()
getRollbackOnly()
getUserTransaction()
isCallerInRole(String role)
setRollbackOnly()

javax.ejb.EntityContext javax.ejb.SessionContext javax.ejb.MessageDrivenContext

getEJBLocalObject() getEJBLocalObject() // adds no methods


getEJBObject() getEJBObject()
getPrimaryKey()

java.rmi.Remote

// no methods declared

javax.ejb.EJBHome javax.ejb.EJBObject javax.ejb.EJBLocalHome javax.ejb.EJBLocalObject

getEJBMetaData() getEJBHome() remove(Object PK) getEJBLocalHome()


getHomeHandle() getHandle() getPrimaryKey()
remove(Handle h) getPrimaryKey() isIdentical(EJBLocalObject
remove(Object PK) isIdentical(EJBObject o) o)
remove()
Interface summary

java.io.Serializable

// no methods declared

javax.ejb.EnterpriseBean javax.ejb.Handle javax.ejb.HomeHandle

// no methods declared getEJBObject() getEJBHome()

javax.ejb.EntityBean javax.ejb.MessageDrivenBean

ejbActivate() ejbRemove()
ejbLoad() javax.ejb.SessionBean setMessageDrivenContext
ejbPassivate() (MessageDrivenContext ctx)
ejbRemove() ejbActivate()
ejbStore() ejbPassivate()
setEntityContext ejbRemove()
(EntityContext ctx) setSessionContext
unsetEntityContext() (SessionContext ctx)
Interface summary

javax.ejb.SessionSynchronization
javax.transaction.UserTransaction afterBegin()
afterCompletion( boolean committed)
begin()
beforeCompletion()
commit()
getStatus()
rollback()
setRollbackOnly()
setTransactionTimeout(int seconds)
javax.jms.MessageListener

onMessage(Message message)
am...
tTra ns ac ti on Tim eo ut() is not on thfoereexthe
se e elapsed time be
it lets you tunedeth d th e tr ansaction has timed
Contai ne r de ci
rolls it back.
out, and automatically

Das könnte Ihnen auch gefallen