head first ejb

Head First EJB™ by Kathy Sierra and Bert Bates Copyright © 2003 O’Reilly Media, Inc. All rights reserved. Printed in th...

1 downloads 55 Views
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 [email protected]. 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

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

61

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.

t EJB obj e c

En

an

services

biz interface

Server

terp se be ri

EJB Container

biz logic separate from data DB

2

Exam objectives

2

What is EJB all about?

3

No more vendor lock-in!

5

How does it all work?

7

Behind the scenes...

8

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

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...

(J2SE API)

<> Remote

(J2EE API)

no methods

no methods

(J2EE API)

<> EJBObject // several methods

YOU write this interface (the remote component interface)

<> BookCart addBook() removeBook() showBooksInCart() doCheckout()

<> EnterpriseBean

(J2EE API)

<> SessionBean // several methods

BookCartBean

YOU write this class addBook() removeBook() (the bean class) showBooksInCart() doCheckout() // other methods

x

Exam objectives

62

Making a Remote method call

64

What about arguments and return values?

67

The client calls business methods through the Remote interface

79

EJB uses RMI

81

The Remote object is not the bean, it’s the bean’s bodyguard

82

Architectural overview: Session beans

98

Architectural overview: Entity beans

99

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

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 beans

These beans are all identical

bean

bean bean

For stateless session beans from the same home, isIdentical() always returns true, even for different beans.

4

Exam objectives

112

What the client really wants

113

What’s JNDI?

116

PortableRemoteObject.narrow() (exotic casting)

121

Writing the Remote home interface for a session bean

125

Thankfully, we’ve got handles (online shopping takes time)

139

Which methods make sense for the local client interfaces?

148

Why so many remove methods?

151

Comparing Remote vs. Local interfaces

154

Arguments to Remote vs. local methods

163

Coffee Cram

168

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.

For me? This is such a special moment! Once in a lifetime...

Exam objectives

174

Container callbacks, for the special moments in a bean’s life

181

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 a Customer entity bean, then one bean might represent the entity Tyler Durden, ID #343,

If you’ve got any last 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.

No, Please, No! I’ll give you whatever you want, just don’t call remove()!

6 If I’m a bean I say to a method, “Don’t call me, call my bodyguard, and here’s his contact information...”

Instead of:

260

What’s an entity bean?

261

Entity beans from the client’s point of view

265

A very simple Customer entity bean

268

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

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 stay in sync. Imagine the horror if the bean is pretending to be, say, Audrey Leone, and someone lowers Audrey’s credit limit in the database... but forgets to tell the bean.

bean

doStuff(this); EJB object

Use: doStuff(myContext.getEJBObject());

xii

Exam objectives

Exam objectives

296

The real power of entity beans is synchronization

298

Container-managed vs. bean-managed persistence

303

The EntityBean interface adds new container callbacks

310

Writing a CMP entity bean

313

Object identity: the primary key

332

Finder methods

339

Home business methods

345

Coffee Cram

362

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.

Multiplicity: many

Multiplicity: one Director

Movie

Collection getMovies()

Director getDirector()

0..*

1

one Director. Each Movie has y Movies. man A Director has

8 <> EJBContext

getCallerPrincipal() getEJBHome() isCallerInRole(String s) getRollbackOnly() getEJBLocalHome() getUserTransaction() setRollbackOnly()

<> MessageDrivenContext

Exam objectives

374

Relationships

378

Multiplicity

380

CMP and CMR fields

383

Cascade delete can propagate

393

EJB-QL for the MovieBean

402

SELECT and FROM are the mandatory!

409

The WHERE clause

411

Collections don’t bark()!

414

The BETWEEN, IN, IS EMPTY, and LIKE expression

416

Relationship assignments

421

Coffee cram

425

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 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.

My life is sad. I have no home, I have no clients... I can use my context ONLY for transactions... Oh well, at least I get a pool.

Exam objectives

438

Writing a message-driven bean: your job as Bean Provider

447

Complete DD for a message-driven bean

449

Topics and Queues

450

MessageDrivenContext

455

Message acknowledgement

458

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.

������������� CMT beans ru n transactions unknown, while BMT be ans use only their own. OK, not our be st work, we kn ow. So why don’t you tr y it. Memor y de vices can help, but they work much be tter when you create th em yourself.

10

Oh sh**! A system exception. Nothing I can do about it. There goes my stateful bean. I’ll have to start over...

Exam objectives

470

The ACID test

472

How it works in EJB

474

Transaction propagation

475

How do I make (or get) a transaction?

476

setRollbackOnly() lives in TWO interfaces

487

BMT can be a really BAD idea.

490

BMT hurts bean reuse

Container-managed transactions

491

How attributes work

492

Methods you MUST mark with an attribute (for a CMT bean)

498

“Unspecified Transaction Context”

499

DD example for CMT

503

SessionSynchronization “special moments”

512

Coffee cram

516

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 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.

Gotta love application exceptions... I can recover from this if I put in a different value for the argument to the create() method...

xiv

Exam objectives

526

In EJB, exceptions come in two flavors

532

With an Application Exception, the Container will...

533

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

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! In a vendorspecific way

In the EJB Deployment Descriptor

users and groups

In a companyspecific way

real people

Exam objectives

570

How to do security in EJB

573

The Application Assembler’s job: access control

574

Defining the method permissions

578

The Deployer’s job: mapping actual humans to abstract roles 583

12

Class-level vs. instance-level security

586

Using programmatic security to custom-tailor a method

587

Use security identity to pretend someone else is calling...

591

Security context propagation with

592

Coffee cram

593

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 Deployment Descriptor and a bean’s special environment.

JAR 1

ejb-jar META-INF

com


headfirst

ejb-jar.xml 011 0 1 1100 1 0 100 0 0 1 1 1 0111 0 11 00011 01

011 0 1 1100 1 0 100 0 0 1 1 1 0111 0 11 00011 01

011 0 1 1100 1 0 100 0 0 1 1 1 0111 0 11 00011 01

AdviceBean.class

Advice.class AdviceHome.class

Exam objectives

600

A bean’s special place- java:comp/env

602

Creating and using a subcontext

609

Bean Provider and Application Assembler responsibility

617

Deployer responsibility

618

Remembering who does what

619

Which APIs does EJB 2.0 guarantee?

621

What MUST be in an ejb-jar?

624

Programming restrictions

625

Coffee cram

627

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

i

xvi

Index

637

685

Intro to EJB

5

4 :HOFRPHWR(-%

4


(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


FKDUDFWHULVWLFVRI(QWHUSULVH -DYDEHDQVWHFKQRORJ\IRUYHUVLRQ RIWKH(-%VSHFL¿FDWLRQ




&KDSWHU

LQWURWR(-%

?PI\Q[-2*ITTIJW]\' &RPSRQHQWEDVHGGHYHORSPHQW 7ITHENTERPRISEJAVABEANS YOUCANDEVELOPBUILDING BLOCKSˆ%*"COMPONENTSˆTHATYOUORSOMEONEELSECAN ASSEMBLEANDREASSEMBLEINTODIFFERENTAPPLICATIONS &OREXAMPLE YOUMIGHTCREATEA#USTOMERBEANBEANIS ANOTHERWORDFORCOMPONENT THATREPRESENTSACUSTOMER INADATABASE9OUCANUSETHAT#USTOMERBEANINAN ACCOUNTINGPROGRAM ANE COMMERCESHOPPINGCART SYSTEM ATECHSUPPORTAPPLICATION ORVIRTUALLYANYOTHER APPLICATIONTHATMIGHTNEEDTOREPRESENTACUSTOMER )NFACT WITHSOMEBEANS THEBEANDEVELOPERANDTHE APPLICATIONASSEMBLERMIGHTNOTWORKFORTHESAME COMPANYORHAVEANYKNOWLEDGEOFONEANOTHER )FYOUREABEANDEVELOPER YOUMIGHTBUILDAN/RDER BEAN ORA0AYROLLBEAN ORA3HOPPING#ARTBEANTHAT DEVELOPERSINSOMEUNRELATEDCOMPANYCANBUYANDUSE TOCONSTRUCTTHEIROWNCUSTOMAPPLICATIONS /NEBEAUTYOFCOMPONENT BASEDDEVELOPMENTISTHAT YOUTAKECODEREUSETOAWHOLENEWLEVEL)NSTEADOF REUSING*AVACLASSES YOUGETTOREUSEABIGGERCHUNKOF FUNCTIONALITY/FTEN YOUCANMODIFYTHEWAYABEAN WORKSWITHOUTEVERTOUCHINGITS*AVACODE9OULLLEARNIN THISCHAPTERTHATWHENYOUDEPLOYABEANINTOASERVER YOUCANCONlGUREANDCUSTOMIZETHEBEANDECLARATIVELYˆ THROUGHAN8-, BASEDDEPLOYMENTDESCRIPTORˆTOCHANGE THEWAYTHEBEANBEHAVESATRUNTIME

With component-based development, you take code reuse to a whole new level. With OO development, you reuse classes, but with components, you reuse a bigger chunk of functionality, and you can customize them without touching code!

ts built componens-R-Us by Bean &XVWRPHU FRPSRQHQW

Fred w this onerote

2UGHU FRPSRQHQW

&DUW FRPSRQHQW

$SSOLFDWLRQ$RQOLQHVKRSSLQJ )UHGDVVHPEOHVDQRQOLQHVKRSSLQJ DSSOLFDWLRQXVLQJWZRFRPSRQHQWVKH ERXJKWIURP%HDQV58VSOXVDWKLUG FRPSRQHQW)UHGGHYHORSHGDWKLV FRPSDQ\

uilt components b-Us by Beans-R

6XSSRUW FRPSRQHQW

&XVWRPHU FRPSRQHQW

,QYHQWRU\ FRPSRQHQW

Bill made these two 2UGHU FRPSRQHQW

$SSOLFDWLRQ%WHFKQLFDOVXSSRUW %LOODVVHPEOHVDWHFKQLFDOVXSSRUWDSS XVLQJWZRFRPSRQHQWVKHERXJKWIURP %HDQV58VSOXVWZRFRPSRQHQWVKH GHYHORSHGKLPVHOI

\RXDUHKHUH



EHQH¿WVRI(-%

?PI\LWM[-2*ZMITTaOQ^MUM' (-%OHWV\RXIRFXVRQWKHEXVLQHVVORJLF IRU\RXUEXVLQHVVDQGOHDYHWKHXQGHUO\LQJ VHUYLFHV WUDQVDFWLRQVQHWZRUNLQJ VHFXULW\HWF WRWKH(-%VHUYHUYHQGRU )MAGINEYOUWORKFOR'UITAR,AND ACOMPANYTHATSELLS MUSICIANSGEARONLINE9OUHAVEBETTERTHINGSTODOTHAN WORKHOURSAWEEK SOWHEREWOULDYOUWANTTOSPENDYOUR TIME7OULDNTYOURATHERCONCENTRATEONHOW'UITAR,AND DOESBUSINESSONLINE ASOPPOSEDTOWRITINGYOUROWNSECURE NETWORKED TRANSACTIONMANAGEMENTSERVER7HYNOTWORK ONWHATYOUKNOWBESTBUSINESSLOGICFORYOURPARTICULAR BUSINESS ANDLEAVETHEHEAVYLIFTINGIE THEBIGINFRASTRUCTURESERVICESYOUGET FROMTHESERVER TOSOMEONEELSE 4HE%*"MODELISTOLETEVERYONEDO WHATTHEYDOBESTˆTHESERVERVENDORS CONCENTRATEONTHEINFRASTRUCTURETHATMOST ENTERPRISEAPPLICATIONSNEED WHILETHE BUSINESSDEVELOPERSCONCENTRATEONTHEIROWN BUSINESSLOGIC

(-%OHW·V\RXFXVWRPL]HDQG FRQÀJXUHUHXVDEOHFRPSRQHQWVDW GHSOR\WLPHZLWKRXWWRXFKLQJWKH VRXUFHFRGH

(-%VHUYHUVJLYH\RXDEXQFK RIVHUYLFHVVRWKDW\RXGRQ·W KDYHWRZULWHWKHP\RXUVHOI 57UDQVDFWLRQPDQDJHPHQW

56HFXULW\

5&RQFXUUHQF\

51HWZRUNLQJ

55HVRXUFHPDQDJHPHQW

53HUVLVWHQFH

50HVVDJLQJ

5'HSOR\WLPHFXVWRPL]DWLRQ

9OUCANCHANGETHEWAYABEANUSESTHE UNDERLYINGSERVICESSIMPLYBYTWEAKINGAN8-LDOCUMENT ATDEPLOY TIME&OREXAMPLE YOUCANCOMPLETELYDElNETHE SECURITYACCESSCONTROLFORABEANSMETHODSWITHIN8-, DECLARATIVELY RATHERTHANWITHINTHEBEANSSOURCECODE PROGRAMMATICALLY !NDYOUCANCUSTOMIZETHEWAYABEANS METHODSRUNINTRANSACTIONS ALLWITHINTHEDEPLOYMENT DESCRIPTOR WITHOUTHAVINGTOHARD CODEINTRANSACTION BOUNDARIESANDBEHAVIORS4HATJUSTROCKS



&KDSWHU

y wrotef, d a e lr a y Somebodsted all this stuf and te donÕt have to. so you

LQWURWR(-%

you vendor

6WUWZM^MVLWZTWKSQV (QWHUSULVHEHDQVDUHSRUWDEOH³ QRWMXVWWRGLIIHUHQW-90·VEXW WRGLIIHUHQW(-%VHUYHUV /NEOFTHEREASONSWEALLLOVE*AVAISITS PORTABILITYACROSSMULTIPLEPLATFORMS4HEWHOLE WRITE ONCE RUN ANYWHERE7/2! THING

,QVWHDGRIOHDUQLQJ DQHZ$3,IRUHDFKDSSVHUYHU ZLWK(-%,RQO\OHDUQ21(DQGP\ FRPSRQHQWVZLOOZRUNRQDQ\(-%VHUYHU 7KRVHYHQGRUVDUHJRQQDKDYHWRVXFNXS WR0(IRUDFKDQJH

%*"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:

Q:

Q:

A:

A:

A:

7HATSTHEDIFFERENCE BETWEEN%*"AND*%%

"OTH*%%AND%*"ARE SPECIFICATIONSFORASERVER"UT%*" ISACTUALLYASUBSETOF*%%)NOTHER WORDS A*%%SERVERMUSTINCLUDE AN%*"CONTAINER7EVEUSEDTHE WORDSERVERONTHESEFIRSTPAGES BUT TECHNICALLY THETHINGTHATENTERPRISE JAVABEANSRUNINISCALLEDAN%*" CONTAINER3O EVERY*%%SERVERMUST INCLUDEAN%*"CONTAINERALONG WITHA7EBCONTAINERTHATCANRUN SERVLETSAND*30S  4HISEXAMISABOUTTHE%*"PORTION OF*%% WHEREASTHE3#7#$EXAM 3UN#ERTIFIED7EB#OMPONENT $EVELOPER ISABOUTTHE7EBPORTION OF*%% ,ATERINTHISCHAPTER WELLGETMORE INTOTHEDETAILSOFHOW*%%AND%*" FITTOGETHER &ORTHERESTOFTHISBOOK WEUSE THETERMS%*"SERVER CONTAINER ANDSERVERINTERCHANGEABLY)FTHE DIFFERENCEBETWEENTHETERMS MATTERS WELLMAKEITCLEAR

#AN)USE%*"COMPONENTS WITHOUTAN%*" COMPLIANTAPP SERVER

.OPE%*"COMPONENTSCANT LIVEOUTSIDEOFAN%*"CONTAINER4HEY DONTHAVEAMAINMETHOD ANDEVEN IFYOUADDONETOYOURBEANCLASS THEBEANWOULDNTBEVERYUSEFUL ONITSOWN-OSTOFTHEMETHODSIN ANENTERPRISEBEANARECALLEDBYTHE CONTAINERITSELFANDHAVENOMEANING OUTSIDETHESERVER2EMEMBER THE WHOLEPOINTOFAN%*"SERVERISTO GIVEYOUALLTHEBIGSERVICESSECURITY TRANSACTIONS ETC ANDWITHOUTTHE SERVER YOUDLOSEEVERYTHINGBUT YOURBASICBUSINESSLOGIC!NDIFTHAT BUSINESSLOGICRELIESONTHECONTAINER FOREXAMPLE CALLINGMETHODS ONINTERFACESPROVIDEDBYTHE CONTAINER THENEVENTHEBUSINESS LOGICWOULDFAIL

Q:

#AN)DESIGNANDWRITEMY CODEINSUCHAWAYTHATMOSTOF THEBUSINESSLOGICISINAPLAINOLD *AVACLASS ANDJUSTHAVETHEBEAN CALLMETHODSONTHATCLASS4HAT WAY)COULDSTILLREUSETHEBUSINESS LOGIC

A:

9ES YOUCANDOTHAT ANDIN FACTALOTOFDESIGNERSWRITESEPARATE NON BEAN REUSABLECLASSESANDTHEN HAVETHEBEANSINVOKEMETHODS ONTHOSECLASSES)FYOURBEANCALLS AMETHODONANON BEAN*AVA CLASS THATMETHODISSTILLUNDERTHE CONTROLOFTHECONTAINER SOASFAR ASTHECONTAINERISCONCERNED THAT NON BEANMETHODISJUSTPARTOFTHE BEANSFUNCTIONALITY



7HATSTHEDIFFERENCE BETWEENREGULARJAVABEANSAND ENTERPRISEJAVABEANS

#ONGRATULATIONS9OURETHE MILLIONTHPERSONTOHAVEASKEDTHAT QUESTION

4HETERMhJAVABEANvMEANSA REUSABLECOMPONENT2EGULAROLD NON ENTERPRISEBEANSANDBEANSIS JUSTASHORTERFORMOFJAVABEANS ARE REUSABLECOMPONENTSTHATFOLLOWA NAMINGCONVENTIONTHATCANBEUSED BYDEVELOPMENTTOOLS "YFAR THEMOSTCOMMONTYPEOF JAVABEANISANY'5)COMPONENTLIKE A3WINGBUTTONORTEXTFIELD .EARLY ALL*AVA)$%SAREJAVABEAN COMPLIANT SOTHATIFYOUREWORKINGINAVISUAL LAYOUTTOOLYOUCANCLICKONABUTTON ANDUPPOPSAPROPERTYSHEETWHERE YOUCANSETTHECOLOR SIZE FONT ETC 4HETOOLKNOWSWHICHPROPERTIESTHE BEANHASBECAUSETHEBEANFOLLOWS CONVENTIONSFORGETTERSANDSETTERS "UTREGULARJAVABEANSARENTJUST FOR'5)COMPONENTSˆOTHER*AVA TECHNOLOGIES INCLUDING*INIAND 3ERVLETS CANUSEJAVABEANFEATURES %NTERPRISEJAVABEANSAREALSO REUSABLECOMPONENTS BUTTHATS WHERETHESIMILARITYENDS4HE@BEAN PARTOFAREGULARJAVABEANISUSED MOSTLYATDEVELOPMENT TIME ASA WAYTOEASEORSPEEDUPHOOKING ONEBEANSEVENTSTOANOTHERBEANS METHODS ORSETTINGPROPERTYVALUES WHICHOFTENMEANTHESAMETHING ASINSTANCEVARIABLEVALUES !REGULAR BEANRUNSINA*6- JUSTLIKEANY OTHERNORMAL*AVACLASS"UTTHE hBEANvPARTOFANENTERPRISEBEAN KICKSINATRUNTIME ANDANENTERPRISE BEANMUSTBERUNUNDERTHECONTROL OFAN%*"CONTAINER &ORTHERESTOFTHEBOOK WHENWE SAYBEAN WEMEANENTERPRISEBEAN

&KDSWHU

LQWURWR(-%

0W_LWM[Q\ITT_WZS'
This client could be let, a ANYTHINGÑa servapp, stand-alone Java bean, a another enterprise mobile device...

The EJB object intercepts the calls to the bean. A client can NEVER talk directly to the bean.

s... HereÕs where it all happd en an in s ep st r the serve layers in the services. y for Most of what you pa happens here.

Business logic lives here! 6HUYHU



VHUYLFHV

W (-% REMHF

(Q (-%&RQWDLQHU

DQ

 & OL HQWREMHFW

EL]LQWHUIDFH

&OLHQW

WHUS VHEH UL

biz logic separate from data '%

$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 8K\HDKSXW WKH%URNHUEHDQRQ WKHSKRQH³,QHHGWR PDNHDWUDGH12:

SDVVRQ\RXUUHTXHVW

+PPPPOHW·V VHHKHGRHVVHHP WREHRQWKHDSSURYHGOLVW IRUFDOOLQJPDNH7UDGH RQD %URNHUEHDQ



(-%2EMHFW



 &OLHQW &RQWDLQHU



&KDSWHU

LQWURWR(-%

:KDWGR\RXPHDQ WKHUH·VQREHDQ"-XVW JHWRQHIURPWKHIUHDNLQ·SRRO1R LWGRHVQ·WPDWWHUZKLFKRQH
,QHHGD%URNHUEHDQ GRZQKHUHQRZ6OLP6OHD]\ QHHGVWRPDNHDWUDGH2KDQG PDNHVXUHWKHEHDQJHWVKLVRZQ QHZWUDQVDFWLRQ



&RQWDLQHU

+H\ , ZHQWODVW WLPHVRRQHRI\RXFDQ JRQRZ%HVLGHV,·PVWLOO UHFRYHULQJIURPWKDWELJ WUDQVDFWLRQUROOEDFN





&RQWDLQHU

7KH\62GRQ·WSD\ XVHQRXJKIRUWKLV :H·UHWKHRQHVZKRGRWKH5($/ EXVLQHVVORJLF%XWDWOHDVWZH QHYHUKDYHWRWDONWRWKHFOLHQWV
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 XVHD5($/DSSVHUYHU" JDUEDJHFROOHFWRU

 WKH%HDQ3RRO

&RQWDLQHU

\RXDUHKHUH



(-%DUFKLWHFWXUH

6KDUSHQ \RXU SHQFLO



/DEHOWKHWKUHHSDUWVLQWKHGLDJUDP

VHUYHU

%

 & OL HQWREMHFW

EL]LQWHUIDFH

&OLHQW

$

& '%



'HVFULEH EULHÀ\ ZKDWHDFKRIWKHWKUHHWKLQJVDUH UHVSRQVLEOHIRURUKRZWKH\EHKDYH

$

%

&



&KDSWHU

LQWURWR(-%

EHDQV

*MIV[KWUMQV\PZMMNTI^WZ[ (QWLW\

'%

5SEANENTITYBEANTOREPRESENTATHINGINA PERSISTENTSTORE4HATALMOSTALWAYSMEANS SOMETHINGINADATABASE WHEREANINSTANCE OFANENTITYBEANREPRESENTSAROWINATABLE ALTHOUGHIFTHEDATABASEISNORMALIZED THE BEANMIGHTBEDRAWINGFROMROWSINMULTIPLE TABLES !TYPICALENTITYEXAMPLEIS#USTOMER WHEREONEENTITYMIGHTREPRESENT"O/LEAN )$ ANDANOTHERENTITYMIGHTREPRESENT 4RIXIA,IN)$ 

7UL[LD/LQ ,'

3DUW /DYD/DPS %R2OHDQ ,'

&XVWRPHU %HDQ

,QYHQWRU\ %HDQ &XVWRPHU %HDQ

0HVVDJHGULYHQ 5SEAMESSAGE DRIVENBEANONLYWHENYOU NEEDA*-3CONSUMER)NOTHERWORDS ABEAN THATCANLISTENFORMESSAGESFROMA*-3MESSAGING SERVICE#LIENTSNEVERCALLMESSAGE DRIVEN BEANSDIRECTLYINORDERTOGETAMESSAGE DRIVENBEANTODOSOMETHING ACLIENTMUST SENDAMESSAGETOAMESSAGINGSERVICE 4HATMEANSAMESSAGE DRIVENBEANHASNO %*"/BJECTBECAUSETHESERVERGETSTHECLIENT REQUESTSDIRECTLYFROMAMESSAGINGSERVICE RATHERTHANASACALLFROMTHECLIENTTOTHE BEAN!TYPICALMESSAGE DRIVENBEANMIGHT BEA.EW#USTOMER.OTIlCATIONSUBSCRIBER

,·PZDLWLQJIRU DQQRXQFHPHQWVDERXW QHZFXVWRPHUV

,·PZDLWLQJIRUD ELJFDOFXODWLRQMRE WREHSRVWHG

1HZ&XVWRPHU/LVWHQHU %HDQ %LJ&DOF-RE/LVWHQHU %HDQ

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

,GRJHQHWLF PDWFKLQJ

*HQH%HDQ

\RXDUHKHUH



VWDWHIXODQGVWDWHOHVVVHVVLRQEHDQV

;M[[QWVJMIV[KIVJM[\I\MTM[[ WZ[\I\MN]T 7ELLGOOVERALLTHISINDETAILINTHE3ESSION"EAN CHAPTER&ORNOW YOUNEEDTOKNOWTHATSESSION BEANSCANBEMARKEDATDEPLOYMENTTIME AS EITHERSTATELESSORSTATEFUL !STATEFULBEANCANREMEMBERCONVERSATIONALSTATE BETWEENMETHODCALLS WHILEASTATELESSBEANWONT REMEMBERANYTHINGABOUTTHECLIENTBETWEEN METHODINVOCATIONS 4HEPHRASEhCONVERSATIONALSTATEvREALLYMEANS hCLIENT SPECIlCSTATEv ANDATYPICALEXAMPLEIS ASHOPPINGCART)TWOULDNTBEFUNIFYOUTHE SHOPPER GOTACART PUTSOMETHINGIN BUTTHEN WHENYOUGOTOPUTTHESECONDTHINGIN THE lRSTTHINGVANISHESFROMTHECART.OTTOOUSER FRIENDLY3O AGOODSHOPPINGCARTWILLKEEPTHE CLIENTSHOPPERSTATEIETHEITEMSINTHECART FORASLONGASTHESHOPPINGSESSIONISALIVE7ELL EXPLAINWHATWEMEANBYALIVEINTHE3ESSION"EAN CHAPTER 3TATELESSBEANSSIMPLYFORGETABOUTTHECLIENT ONCETHEMETHODCALLCOMPLETES3O STATELESS BEANSAREFORSERVICESTHATDONTREQUIREA CONTINUEDCONVERSATIONBETWEENTHECLIENTAND THESERVICE4HATDOESNTMEANTHECLIENTWONT KEEPCALLINGMETHODSONTHESTATELESSBEAN BUT ITDOESMEANTHATTHECLIENTCANTDEPENDONTHE BEANREMEMBERINGANYTHINGABOUTTHEPREVIOUS METHODCALLS

:DWFKLW

6WDWHOHVVEHDQV&$1 KDYHVWDWH -XVWQRW FOLHQWVSHFLÀFVWDWH

OHVV´PHDQV 6RPHSHRSOHWKLQN³VWDWH FDQKDYH HDQ VE OHV WDWH ³QRVWDWH´$V WKHUREMHFW \R LQVWDQFHYDULDEOHVOLNHDQ LQYDOXHV LQWD PD WR HP LWMXVWFDQ¶WXVHWK W LHQ UFO XOD UWLF SD VSHFL¿FWRD



&KDSWHU

WKHUH DUH QR

'XPE 4XHVWLRQV

Q:

)VEHEARDTHATONLY STATELESSSESSIONBEANSARE SCALABLE ANDTHATNOBODYSHOULD EVERUSESTATEFULSESSIONBEANS )STHATTRUE

A:

.O NOTCOMPLETELY)TIS TRUETHATSTATELESSSESSIONBEANS AREGENERALLYMORESCALABLETHAN STATEFULSESSIONBEANSBECAUSE OFTHEWAYSTATELESSBEANSARE MANAGEDBYTHECONTAINER9OULL SEETHEREASONSFORTHISINTHE 3ESSION"EANCHAPTER "UTTHATDOESNTMEANYOU SHOULDNEVERUSESTATEFULBEANS 9OUSHOULDCONSIDERSTATEFULBEANS WHENYOUNEEDCONVERSATIONAL STATE ANDWHENTHEALTERNATIVES FORSAVINGTHATSTATELIKEUSING THECLIENTTOSTORESTATE ORUSING ASERVLETTOSTORESTATE ORUSINGA DATABASETOSTORESTATEBETWEEN EACHMETHODCALLFROMTHECLIENT AREMOREOFAPERFORMANCEHIT THANTHELESS SCALABLENATUREOF STATEFULSESSIONBEANS

LQWURWR(-%

  WKLQJ H P R V  6 ,  Q HD $QHQWLW\E HWKLQJ P R V  6 ( 2 ' HDQ $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 VHQGLQJWKHPRXWIRUDSSURYDO

VWDWHIXOVWDWHOHVV

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

VWDWHIXOVWDWHOHVV

7KHERRNVLQDOLEUDU\

VWDWHIXOVWDWHOHVV

\RXDUHKHUH



7LNLEHDQ/RXQJH

RYHUYLHZ

EHDQEXOOHWSRLQWV VHVVLRQEHDQDQGEDUWHQGHU

:MDD=LHGAFLK

ƒ (-%LVDFRPSRQHQWEDVHG GHYHORSPHQWPRGHO

ƒ &RPSRQHQWVDUHUHXVDEOHFKXQNV 6HVVLRQEHDQ,·PVRWLUHGRIGRLQJDOOWKHZRUNDQGJHWWLQJQRQH RIWKHJORU\ %DUWHQGHU:KDWGR\RXPHDQ´QRQHRIWKHJORU\·µ"$UHQ·W\RXWKH RQO\EHDQWKDW·VEHHQUHTXLUHGE\WKHVSHFVLQFHWKHYHU\EHJLQQLQJ" 6LQFH(-%" 6HVVLRQEHDQ)DWORWRIJRRG7+$7GRHVPH$OODQ\RQHZDQWV WRWDONDERXWQRZLVHQWLW\EHDQV(QWLW\EHDQVHQWLW\EHDQVHQWLW\ EHDQV1RWWKDW,GRQ·WOLNHWKHP³VRPHRIP\EHVWIULHQGVDUH HQWLW\EHDQVEXW,ZLVKSHRSOHZRXOGWDONDERXWZKDW,GR %DUWHQGHU1RZWKDW\RXPHQWLRQLWHQWLW\EHDQVDUHPRVWO\ ZKDWIRONVWDONDERXWKHUHDWWKHEDUZKDWZLWKWKHELJ&03 LPSURYHPHQWVLQ(-% 6HVVLRQEHDQ$QGWKDW·VDQRWKHUWKLQJZKDWLVWKH%LJ'HDOZLWK &03",W·VMXVWJRLQJWRDGDWDEDVH6HULRXVO\WHOOPH:+$7LVVR VSHFLDODERXWWKDW"´2RRKKKORRN,WXSGDWHGDUHFRUGµ3OHDVH %DUWHQGHU7REHFRQWLQXHG@



&KDSWHU

RIIXQFWLRQDOLW\\RXFDQPRGLI\IRU GLIIHUHQWDSSOLFDWLRQVZLWKRXWWRXFKLQJ WKHMDYDVRXUFHFRGH

ƒ 2QHEHQHILWRI(-%LV:2'$³:ULWH 2QFH'HSOR\$Q\ZKHUH
ƒ :2'$PHDQV\RXKDYHWROHDUQ RQO\RQHVWDQGDUG$3,UDWKHUWKDQ SURSULHWDU\YHQGRUVSHFLILF$3,V

ƒ 7KH(-%DUFKLWHFWXUHXVHVDQ (-%2EMHFWWRLQWHUFHSWFOLHQWFDOOVWRD EHDQ7KLVJLYHVWKHVHUYHUFRQWDLQHU DFKDQFHWRVWHSLQDQGDGGVHUYLFHV

ƒ (-%VHUYLFHVLQFOXGHWUDQVDFWLRQV VHFXULW\UHVRXUFHPDQDJHPHQW QHWZRUNLQJDQGSHUVLVWHQFH

ƒ %HDQVFRPHLQWKUHHIODYRUV(QWLW\ 6HVVLRQDQG0HVVDJHGULYHQ

ƒ (QWLW\EHDQVUHSUHVHQWDXQLTXHO\ LGHQWLILDEOHWKLQJLQDSHUVLVWHQW VWRUHXVXDOO\WKDWPHDQVDURZLQD GDWDEDVHWDEOH

ƒ 0HVVDJHGULYHQEHDQVDUH-06 PHVVDJLQJVHUYLFHFRQVXPHUV

ƒ 6HVVLRQEHDQVDUHHYHU\WKLQJHOVH ƒ 6HVVLRQEHDQVFDQEHVWDWHIXORU VWDWHOHVV

ƒ 6WDWHIXOEHDQVFDQUHPHPEHU ´FRQYHUVDWLRQDOVWDWHµZLWKDFOLHQW ZKLOHVWDWHOHVVEHDQVFDQQRW

LQWURWR(-%

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

-`IUXTM" 7KDWVKDGHRI


JUHHQLVQ·WUHDOO\ ZRUNLQ·IRU\RX

"EFOREWEGETINTOTHEGUTSOF%*" LETS LOOKATHOWTODEVELOP DEPLOY ANDTEST ABEANFROMSTARTTOlNISH)FYOURE NOTALREADYFAMILIARWITH%*" YOUWONT UNDERSTANDEVERYTHINGHERE$ONTWORRY ABOUTITNOWWELLlGUREITALLOUTINLATER CHAPTERS4HISISJUSTTOGIVEYOUAFEELING FORWHATITSLIKETOGETABEANUPAND RUNNING /URlRSTBEANISFORTHE!DVICE'UY SERVICEˆAREMOTESERVICETHATGIVESBACK ANADVICE3TRINGEACHTIMETHECLIENT MAKESAREQUEST7ELLSPENDTHENEXT SEVERALPAGESLOOKINGATTHEPROCESS AND THENWELLACTUALLYMAKETHISBEAN ASA TUTORIAL

7KH$GYLFH*X\ 2XU¿UVWEHDQLVIRUWKH$GYLFH*X\ VHUYLFH(DFKWLPHWKHFOLHQWPDNHV DUHTXHVWWKH$GYLFH*X\VHUYLFH DQHQWHUSULVHMDYDEHDQ JLYHVEDFN 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" 

&RGHWKHEHDQFODVVZLWKDOORIWKH EXVLQHVVPHWKRGV



&RGHWZRLQWHUIDFHVIRUWKHEHDQ KRPHDQGFRPSRQHQW



&UHDWHDQ;0/GHSOR\PHQWGHVFULSWRU WKDWWHOOVWKHVHUYHUZKDW\RXUEHDQLVDQG KRZLWVKRXOGEHPDQDJHG


3XWWKHEHDQWKHLQWHUIDFHVDQGWKH GHSOR\PHQWGHVFULSWRULQWRDQHMEMDU¿OH 7KHUHPLJKWEHPRUHWKDQRQHEHDQLQWKH HMEMDUEXWWKHUHZLOODOZD\VEHMXVWRQH GHSOR\PHQWGHVFULSWRU



'HSOR\WKHEHDQLQWRWKHVHUYHUXVLQJWKH WRROVSURYLGHGE\WKHVHUYHUYHQGRU

MDYD[HME  LPSRUWMDYD UPL5HPRWH([ FHSWLRQ

$GYLFH%HDQMDYD

MDYD[HME  LPSRUWMDYD UPL5HPRWH([ FHSWLRQ

7KHVHDUHWKH VWHSV\RX·OOJRWKURXJK IRUDOPRVWHYHU\EHDQ\RX·OO PDNH&RGLQJLVVLPSOHWKH WULFN\SDUWLVGHSOR\LQJ

$GYLFH+RPHMDYD $GYLFHMDYD

'2&7<3( HMEMDU 38%,QF

HMEMDU[PO

-$5 HMEMDU




&KDSWHU

LQWURWR(-% EHDQFODVV LQWHUIDFHV ;0/'' HMEMDU GHSOR\

MDYD[HME  LPSRUWMDYD UPL5HPRWH([ FHSWLRQ

$GYLFH%HDQMDYD

ne businessBean o ly n o e v a we h for the Advice method

 :ULWHWKHEHDQFODVVZLWK

WKHDFWXDOEXVLQHVVPHWKRGV WKHFOLHQWFDOOV 4HISISWHEREITALLHAPPENS4HE IMPLEMENTATIONOFYOURBUSINESS METHODSDElNEDINTHECOMPONENT INTERFACE)NOTHERWORDS YOUWRITEYOUR BUSINESSLOGICINTHEBEANCLASS 4HEREARETHREEBEANTYPESTOCHOOSE FROM 3ESSION %NTITY AND-ESSAGE DRIVEN ANDWELLCOVEREACHONEINDETAILINLATER CHAPTERSOFTHEBOOK"EFOREMAKING ABEAN THOUGH YOUMUSTDECIDEWHAT TYPEYOUNEEDBECAUSEYOURBEANCLASS MUSTIMPLEMENTONEOFTHREEINTERFACES DEPENDINGONTHETYPEYOUCHOOSE 7EVECHOSENA3ESSIONBEANHERE BECAUSEITSPERFECTFORTHE!DVICE'UY APPLICATION!DVICE'UYGIVESBACK ANADVICE3TRINGWHENYOUINVOKETHE SURPRISINGLY NAMEDGET!DVICE METHOD 3OOURBEANCLASSONTHENEXTPAGE IMPLEMENTSTHE3ESSION"EANINTERFACE !ND3ESSION"EANISNTJUSTAMARKER INTERFACE ˆITHASMETHODSYOURBEAN CLASSMUSTIMPLEMENT 4HEMETHODSYOUIMPLEMENTFROM THE3ESSION"EANINTERFACEAREKNOWN ASCONTAINER CALLBACKS BECAUSETHE CONTAINERUSESTHEMTONOTIFYYOUOF IMPORTANTMILESTONESINTHEBEANSLIFE

SXEOLF6WULQJJHW$GYLFH ^ DGYLFHJHQHUDWLQJFRGH `

RZKRZ
$PDUNHULQWHUIDFH DOVRFDOOHGDWDJLQWHUIDFH KDV QRPHWKRGVWRLPSOHPHQWDQGH[LVWVVRWKDW\RXFDQ DQQRXQFHWRWKHZRUOGWKDW´


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 SDFNDJHKHDG¿UVW LPSRUWMDYD[HME 

age you need this pack

an type e of the threeDberiven) on t en em pl im You MUST sion, Entity, or Message interfaces (Ses

SXEOLFFODVV$GYLFH%HDQLPSOHPHQWV6HVVLRQ%HDQ^  SULYDWH6WULQJ>@DGYLFH6WULQJV ^³2QHZRUGLQDSSURSULDWH´³
he are from thave s d o h t e m u These foueran interface, so yohis simple SessionB hem in here. For t anything to put t donÕt need to do got print 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 ! if) theyÕrout what these ar worry ab

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



&KDSWHU

Finally! The actual business method from th component interface. ItÕse the whole point of th bean... the thing the clie en t wants to call.

You must have an ejb ea te() method. ItÕs an EJB rule youÕlCr l lea later. But it does not co rn about the SessionBean interfa me from ce.

LQWURWR(-% EHDQ LQWHUIDFHV ;0/'' HMEMDU GHSOR\

LPSRUW MDYD[HME  LPSRUWMDYD FHSWLRQ

MDYD[HME  LPSRUWMDYD UPL5HPRWH([ FHSWLRQ

$GYLFHMDYD $GYLFH+RPHMDYD

 :ULWHWZRLQWHUIDFHVIRUWKHEHDQ 4HESEARETHEINTERFACESTHECLIENTSEES7EHAVEANENTIRECHAPTER DEVOTEDTOTHESEINTERFACES SOYOUDONTHAVETOUNDERSTANDITALLNOW &20321(17LQWHUIDFH 4HISISWHEREALLTHEBUSINESSMETHODSAREDECLARED)NOTHERWORDS ITSWHEREYOUPUTTHEMETHODSTHECLIENTWANTSTOCALL SDFNDJHKHDG¿UVW LPSRUWMDYD[HME  LPSRUWMDYDUPL5HPRWH([FHSWLRQ

LPSRUW MDYD[HME  LPSRUWMDYD UPL5HPRWH([ FHSWLRQ

$GYLFHMDYD

FRPSRQHQW LQWHUIDFH EXVLQHVV PHWKRGV

o you need theseentwts. import statem

terface, the EJBObjectteinr er th ei nd te ex It must which weÕll see la JBLocalObject, E or SXEOLFLQWHUIDFH$GYLFHH[WHQGV(-%2EMHFW^ You must declare RemoteException 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 4HECLIENTUSESTHEHOMEINTERFACETOASKFORAREFERENCETOTHE COMPONENTINTERFACE4HEHOMEISTHECLIENTSSTARTINGPOINTFORGETTING HOLDOFAREFERENCETOABEANORATLEASTWHATTHECLIENTTHINKSISTHE BEAN BUTWELLGETTOTHATLATER &ORNOW THINKOFTHEHOMEASAKIND OFFACTORYTHATMAKESANDDISTRIBUTESBEANREFERENCESTOCLIENTS

LPSRUW MDYD[HME  LPSRUWMDYD FHSWLRQ

$GYLFH+RPHMDYD

KRPH LQWHUIDFH DIDFWRU\ IRUEHDQ UHIHUHQFHV

statements same import ome as above. LPSRUWMDYD[HME  either the EJBeÕHll see later nd te ex t us m e m w The ho LPSRUWMDYDUPL5HPRWH([FHSWLRQ LocalHome, which exceptions, interface, or EJB need TWO ption This time weeption and RemoteExce SXEOLFLQWHUIDFH$GYLFH+RPHH[WHQGV(-%+RPH^ CreateExc SDFNDJHKHDG¿UVW

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

the create() method must return your component interface 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 CLASS!DVICE"EAN IMPLEMENT THECOMPONENTINTERFACE!DVICE IFITHASTOIMPLEMENTTHESAME METHODS*AVACLASSESAREALLOWED TOIMPLEMENTMORETHANONE INTERFACE SOWHATSTHEPROBLEMWITH SAYING

Q:

FODVV$GYLFH%HDQLPSOHPHQWV $GYLFH6HVVLRQ%HDQ

"UTTHERESANEASYSOLUTIONTO 4(!4PROBLEMYOUCOULDHAVETHE BEANEXTENDACLASSTHATHASALLTHE IMPLEMENTATIONSTHATYOUNEEDTO SATISFYTHECOMPILER BUTDONTREALLY NEEDTOIMPLEMENTINYOURCODE,IKE THEADAPTEREVENTLISTENERCLASSESIN !747HYNOTDOSOMETHINGLIKETHAT HEREANDMAKEASUPERCLASSFORYOUR BEANTHATIMPLEMENTSTHEMETHODS

A:

A:

,EGALLY THEBEANCLASSCAN IMPLEMENTTHECOMPONENTINTERFACE BUTTHESPECDOESNTRECOMMENDIT 2EMEMBER ALTHOUGHTOTHECLIENTIT LOOKSASTHOUGHTHE!DVICE"EANISTHE OBJECTTHECLIENTSINVOKINGMETHODS ONTHEOBJECTTHATIMPLEMENTSˆIN THETRUE*AVASENSEˆTHECOMPONENT INTERFACE THECLIENTREALLYINVOKES METHODSONSOMETHINGCALLEDAN %*"/BJECT THATSIMPLEMENTEDBYTHE SERVERATDEPLOY TIME4HECLIENTNEVER INTERACTSDIRECTLYWITHTHEBEAN.EVER EVER EVER,ATERINTHEBOOK YOULLSEE THATIFTHEBEANDOESIMPLEMENTTHE COMPONENTINTERFACE YOUCOULDSNEAK THINGSPASTTHECOMPILERTHATWOULD EXPLODEATRUNTIME3OWESTRONGLY URGEYOUNOTTOHAVEYOURBEAN IMPLEMENTTHECOMPONENTINTERFACE "UTTHERESANOTHERISSUEASWELLˆTHE COMPONENTINTERFACEEXTENDSANOTHER INTERFACE)NOUREXAMPLE !DVICE EXTENDS%*"/BJECT AND%*"/BJECT ISNOTAMARKERINTERFACE)THAS METHODS4HISMEANSTHATANYCLASS IMPLEMENTING!DVICEMUSTALSO IMPLEMENTTHEMETHODSOF%*"/BJECT

9ES YOUCOULDDOTHAT ANDIT WOULDBELEGAL"UTITSTILLMEANSYOUR BEANISCAPABLEOFHAVINGMETHODS INVOKEDTHATTHEBEANSHOULD NEVERKNOWABOUT4HEMETHODSOF %*"/BJECTAREMETHODSFORTHECLIENT TOCALLONTHEBEAN BUT./4FORTHE BEANTOACTUALLYIMPLEMENT3OITSNOT THEBEST//PRACTICE !NDTHERESSTILLANOTHERREASONWHY ITSNOTGOODPRACTICETOHAVETHE BEANIMPLEMENTTHECOMPONENT INTERFACEˆIFTHEINTERFACEISREMOTE AND%*"/BJECTIS SINCEITEXTENDSTHE JAVARMI2EMOTEINTERFACE THATWOULD MAKETHEBEANCLASSA2EMOTECLASS ANDTHATMUSTNEVERBE4HEBEANIS PROTECTEDBYTHESERVER ANDMUST NEVERBEACCESSEDINANYOTHERWAY BYANYTHINGBUTTHESERVER)TSTHE SERVERTHATMAKESTHE%*"/BJECTBY IMPLEMENTINGTHE!DVICEINTERFACE WHICH)3REMOTE ANDWHICHINTERCEPTS ALLBUSINESSMETHODCALLSTOTHEBEAN

Q:

"UTIFYOUDONTHAVETHE BEANIMPLEMENTTHEINTERFACE IN OTHERWORDS IF!DVICE"EANDOESNT IMPLEMENT!DVICE DOESNTTHISMEAN THATTHECOMPILERWONTCATCHYOUIF THEBEANBLOWSITANDDOESNTMATCH THEMETHODSOFTHEINTERFACE

A:

9ES THATSEXACTLYWHATIT MEANS!NDYES THATMAKESMOST *AVADEVELOPERSALITTLEQUEASYJUST THINKINGABOUTIT!FTERALL THATSONE OFTHEBENEFITSOFINTERFACESIN*AVAˆ THATTHECOMPILERGUARANTEESTHAT YOUHAVEALLOFTHEINTERFACEMETHODS PROPERLYIMPLEMENTED "UTDONTPANIC)NOURDEVELOPMENT INTHISBOOK WEDOHAVETOBECAREFUL SINCETHECOMPILERISNTMAKINGSURE THATWEVEIMPLEMENTEDTHEBUSINESS METHODSFROMTHECOMPONENT INTERFACE)NTHEREALWORLD HOWEVER YOULLALMOSTCERTAINLYBEUSINGAN %*" READYDEVELOPMENTENVIRONMENT THATWILLMAKESUREYOUPROVIDETHE METHODS EITHERBYPUTTINGAhYOUR CODEGOESHEREvVERSIONOFTHEMETHOD INYOURBEANCLASS ORBYDOINGTHE REVERSEˆFINDINGTHEBUSINESSMETHOD INTHEBEANCLASSANDPUTTINGITINTO THECOMPONENTINTERFACE!TTHEVERY LEAST MOSTSERVERSWILLCHECKBEFORE ORATTHETIMEYOUDEPLOYTHEBEAN THATYOURCOMPONENTINTERFACEAND BEANCLASSHAVEMATCHINGMETHODS )FTHISSTILLBOTHERSYOU THOUGH WEDO HAVEATECHNIQUEFORGETTINGAROUNDIT THATWELLLOOKATALITTLELATER#HANCES ARE YOUWONTNEEDTOUSEIT

3O YOURBEANWOULDENDUP IMPLEMENTINGABUNCHOFMETHODSIT SHOULDNEVERHAVELIKEGET(ANDLE GET%*"(OME 

\RXDUHKHUH



EHDQ%UDLQ3RZHU

YiX`e gfn\i

7KHQDPLQJ FRQYHQWLRQ IRUEHDQVLV 127SDUWRI  WKH(-%VSHF

$GYLFH$GYLFH+RPH $GYLFH%HDQ HVH
%HDQDZDUH GHYHORSPHQW WRROV



&KDSWHU


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

LQWURWR(-% EHDQ LQWHUIDFHV ;0/'' HMEMDU GHSOR\

'2&7<3( HMEMDU 38%,QF

HMEMDU[PO

D Þle required! ThemDlÓ This name is ed Òejb-jar.x must be nam

tually  &UHDWHDQ;0/GHSOR\PHQWGHVFULSWRU (In this book, we wonÕt ac let the ll WKDWWHOOVWKHVHUYHUZKDW\RXUEHDQLVDQGKRZwrite this ourselves;uiwldeÕit for us.) sb deployment tool LWVKRXOGEHPDQDJHG 4HEDEPLOYMENTDESCRIPTOR$$ DESCRIBESTHESTRUCTURE OFYOURBEANINCLUDINGHOWTHETHREElLESCOMPONENT INTERFACE HOMEINTERFACE ANDBEANCLASS ARERELATEDTOONE ANOTHER4HESERVERWONTLOOKATYOURNAMINGCONVENTION ANDlGUREOUTWHICHISTHEHOME WHICHISTHEBEAN ETC9OU HAVETOTELLTHESERVER THROUGHTHE$$ WHICHCLASSISWHICH ANDHOWTHEYRECONNECTED"UTTHE$$DOESALOTMORETHAN THAT!NDFORSOMEBEANS THE$$CANBESEVERALPAGESLONG &ORTHISSIMPLEBEAN THE$$ISSHORT2EMEMBER YOUDONT NEEDTOMEMORIZETHESYNTAXOFTHE8-,INTHE$$,ATER INTHEBOOKINSEVERALDIFFERENTCHAPTERS WELLGOOVERTHE ASPECTSOFTHE$$THATYOUDONEEDTOKNOW "[POYHUVLRQ ´´HQFRGLQJ ´87)´"! '2&7<3(HMEMDU38%/,&µ6XQ0LFURV\VWHPV ,QF'7'(QWHUSULVH-DYD%HDQV(1¶µKWWS MDYDVXQFRPGWGHMEMDUBBGWG¶! HMEMDU! GLVSOD\QDPH!(MEGLVSOD\QDPH! HQWHUSULVHEHDQV! 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! XVHFDOOHULGHQWLW\!XVHFDOOHULGHQWLW\! VHFXULW\LGHQWLW\! VHVVLRQ! HQWHUSULVHEHDQV! HMEMDU!

You donÕt have to write the XML by hand if you use a tool that can help you build a deployment descriptor. You can use the J2EE RI bean wizard to do it for you, and the XML it spits out will work in any EJB 2.0 container!

For now, just know th every bean in an application at mu st element in the DD that have an the beanÕs structure and describes type.

\RXDUHKHUH



WKHHMEMDU EHDQ LQWHUIDFHV ;0/'' HMEMDU GHSOR\

-$5

HMEMDU

Õt use the JAs;R on w e w k, oo b is (in th ejb-bar ours)elve e h t e ak m to tool loytools do it weÕll let the dep

 3XWWKHEHDQWKHLQWHUIDFHVDQGWKH

GHSOR\PHQWGHVFULSWRULQWRDQHMEMDU¿OH

!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$$

t descriptor The deploymaenmed Òejb-jar.xmlÓ MUST be n be in a directory and MUST TA-INFÓ named ÒME

The ejb-jar Þle must inc lude all three of the bean .class Þles (the plus the bean implementattwo interfaces the deployment descripto ion class) and ejb-jar Þle whatever yo r. Name the required name for the ejbu like; thereÕs no -jar.

P\HMEMDU

0(7$,1)

'2&7<3( HMEMDU 38%,QF

HMEMDU[PO

KHDGILUVW

    

$G L %

:DWFKLW



&KDSWHU

    

$GYLFHFODVV

O

    

Þle, the directory R JA r he ot y an th As wi 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. the ÒheadÞrstÓ

$GYLFH+RPHFODVV

7KHH[DPH[SHFWV\RXWRNQRZZKDWLVVXSSRVHGWREHLQWKHHMEMDU¿OHDQGDOVR ZKDWLVQRWVXSSRVHGWREHLQWKHUH7KHFODVVHVDQGLQWHUIDFHVJHQHUDWHGE\WKH 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
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 SURJUDPHQWHUSULVHMDYDEHDQV,QRWKHU ZRUGVZULWHWKHEHDQFRGH &KDUDFWHULVWLFV.QRZVWKHEXVLQHVV ORJLFWKDWVKRXOGEHLQDSDUWLFXODUW\SHRI FRPSRQHQWIRUDSDUWLFXODUGRPDLQ

,·PDGHYHORSHUIRUD ELJRQOLQHERRNVWRUH :HEX\DORWRIEHDQVIURP %HDQV58VEXW,DOVRPDNHP\ RZQEHDQV,PL[WKHPWRJHWKHU LQWRQHZDSSOLFDWLRQVFXVWRPL]HG IRUWKHEXVLQHVVUXOHVRIKRZ ZHVHOOERRNV

Annie

:DWFKLW

7KHH[DP FRYHUVVXEWOH GLIIHUHQFHV EHWZHHQUROHV

DQ\ 3D\YHU\FORVHDWWHQWLRQWR V WKL VLQ ROH %U I(QR QWLR PH FRYHU ERRNHVSHFLDOO\ZKHQZH HQW R\P HSO HG IWK LOVR PRUHGHWD WHG WHV LQJ GHVFULSWRU&RXQWRQEH  XQW FR DQG DW RQZKRGRHVZK VXEWOH RQWKRVHTXHVWLRQVEHLQJ DQ %H 7KH$SS$VVHPEOHUDQG HDV ODU HUD VHY LQ 3URYLGHURYHUODS H GWK UDQ R\H HSO H' VWK DVGRH P $SS$VVHPEOHU)RUWKHH[D DV HK URO LFK ZK QRZ \RXQHHGWRN  RUD W\I LELOL RQV HVS U\U LPD WKHSU WR QJ DYL OO\K SDUWLFXODUWDVN XVXD VFULSWRU GRZLWKWKHGHSOR\PHQWGH VSDJH WKL RQ WXII HV 7K WLRQ UPD LQIR  WDUW DV DQGWKHQH[WDUHMXVW



&KDSWHU

(-%5ROH $SSOLFDWLRQ$VVHPEOHU 'HOLYHUDEOHHMEMDU¿OHV WKDWLQFOXGH RQHRUPRUHEHDQVDQGDQ;0/ GHSOR\PHQWGHVFULSWRUZLWK%HDQ 3URYLGHULQIRDVZHOODVDSSOLFDWLRQ DVVHPEO\LQIR 0D\DOVRFUHDWHFOLHQWV RUGH¿QHLQWHUDFWLRQEHWZHHQRWKHU FRPSRQHQWV VXFKDV-63V  3ULPDU\UHVSRQVLELOLW\&RPELQH RQHRUPRUHHQWHUSULVHEHDQVLQWRD ODUJHUDSSOLFDWLRQ0D\VRPHWLPHVZHDUWKH%HDQ 3URYLGHUKDWPL[LQJQHZDQGH[LVWLQJEHDQV WRJHWKHUWREXLOGDQDSS'H¿QHVWKHVHFXULW\DQG WUDQVDFWLRQEHKDYLRUIRUWKHDSSOLFDWLRQ &KDUDFWHULVWLFV'H¿QLWHO\DGRPDLQH[SHUW 0LJKWQRWGRDVPXFKFRGLQJDVWKH%HDQ3URYLGHU

LQWURWR(-%

(-%5ROH 'HSOR\HU 'HOLYHUDEOH(QWHUSULVHEHDQVWKDWKDYHEHHQ :RZ,WDFWXDOO\GHSOR\HG 8QEHOLHYDEOH,ZRUNIRU WKHVDPHRQOLQHERRNVWRUHDVWKHDSS DVVHPEOHUDQG,WDNHKHUHMEMDUVWXG\ WKHGHSOR\PHQWGHVFULSWRUDQGJHWWKHWKLQJ DFWXDOO\UXQQLQJLQWRWKHVHUYHUDQGZDLWLQJ IRUFOLHQWV,NQRZD/27DERXWWKHZD\RXU V\VWHPVDUHFRQÀJXUHGDQGUXQQLQJKHUH

FXVWRPL]HGIRUDVSHFL¿FRSHUDWLRQDOHQYLURQPHQWDQG GHSOR\HGLQWRWKHVHUYHU 3ULPDU\UHVSRQVLELOLW\7DNHWKH$SSOLFDWLRQ $VVHPEOHU¶VGHOLYHUDEOHVWXG\WKHGHSOR\PHQWGHVFULSWRU DQGUHVROYHDQ\H[WHUQDOGHSHQGHQFLHV)RUH[DPSOH 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

:HZRUNIRUWKH 6XSHU6HUYHUFRPSDQ\ :H·UHH[SHUWVLQORZOHYHO VHUYLFHVOLNHWUDQVDFWLRQ PDQDJHPHQWSRROLQJDQG VHFXULW\

:HGRWKH ELJVHUYLFHVVR\RXJHW WRIRFXVRQ\RXUEXVLQHVVORJLF :HFRPSHWHZLWK,%0%($ DQG2UDFOHDQGVRPHGD\ZH·OO NLFN/DUU\(OOLVRQ·VEXWW

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 EJB JAR DEPLOYTHEBEAN CREATEACLIENT ANDTESTTHEBEAN USINGTHECLIENT4HEONLYTHINGWEWONTDOISINSTALLAND CONlGURETHESERVER7EASSUMEYOUALREADYDIDTHAT )FYOUDONTYETHAVETHE*%%2)UPANDRUNNING GO TOHTTPJAVASUNCOMJEEANDDOWNLOADVERSION OF*%%ITINCLUDESSET UPINSTRUCTIONS THENGOBACKAND DOWNLOADTHE*%%!0)DOCUMENTATION :K\DUHZHXVLQJ WKH5, ":K\FDQ·WZHXVH D5($/DSSVHUYHU"

:KLFKVHUYHUZRXOGZHXVH":HXVHWKH 5,IRUOHDUQLQJDQGSUDFWLFLQJEHFDXVH ZHGRQ¶WNQRZZKLFKVHUYHU\RX¶OOQHHG WRXVHDQGWKH5,LVWKHVLPSOHVWRIDOO WKHIUHHO\DYDLODEOHVHUYHUV:HZDQW LWWREHDVHDV\DVSRVVLEOHIRU\RXWR IRFXVRQ(-%WHFKQRORJ\DQGLJQRUHWKH WRROVSHFL¿FWDVNV 2SHQVRXUFHSURGXFWVOLNH-%RVVDUH VWLOOUHDOSURGXFWLRQVHUYHUVVRWKH\WHQG WRKDYHDORWPRUHFRQ¿JXUDWLRQDQG DGPLQLVWUDWLRQWDVNVWRFRSHZLWK8VLQJ WKH5,OHWV\RXVSHQGPRUHWLPHGRLQJ WKHWKLQJV\RX¶OOKDYHWRGRUHJDUGOHVV RIWKHVHUYHUZLWKWKHOHDVWDPRXQWRI WLPHVSHQWOHDUQLQJDVHUYHUVSHFL¿F DSSURDFKWRWKRVHWKLQJV



&KDSWHU

Remember, the exam is for 1.3, NOT 1.4! Whatever you J2EE NOT study for the exam usi do, do ng the 1.4 spec. See the intro for mo details about why the exam re and not 1.4Ñthe short versiouses 1.3 we donÕt want to certify fol n is: something that almost nobod ks on CertiÞcation is NOT about ÒIy is using. the latest and greatest releas know about ÒI know the technology eÓ. ItÕs people are using now. IÕve been that using it for at least six months.Ó RWKLQJ 7KHUH¶VQ P [D RQWKHH ((5, HWK W X DER 

U RQVHUYH DSSOLFDWL XWDQ\ U H WK R \ R 2UDQ NQRZDE ¶WKDYHWR LQJ6XQ¶V IRU
LQWURWR(-%

7ZOIVQbMaW]ZXZWRMK\LQZMK\WZa !LLTHEBEANSINTHISBOOKAREORGANIZEDINTOPACKAGES WHICHMEANSYOU MUSTBEALITTLEMORECAREFULABOUTCOMPILINGANDRUNNING%VERYINSTRUCTION INTHISCHAPTERASSUMESYOUVEORGANIZEDYOURPROJECTEXACTLYTHEWAYITS SHOWNHERE)FYOUDEVIATEFROMTHISSTRUCTURE YOUREONYOUROWNFOR MAPPINGOURCOMMAND LINEANDDEPLOYMENTFORMULASTOYOUROWNSTRUCTURE 7KHUH·VRQO\21(SURMHFWV GLUHFWRU\IRUWKHZKROH ERRN

SDFNDJH

SURMHFWRUJDQL]DWLRQ

SURMHFWV

VKRSSLQJ

FODVVHV

KHDGILUVW

       

FODVVILOHV

(DFKSURMHFWLQWKHERRNKDVLWV RZQGLUHFWRU\7KLVGLUHFWRU\LV IRUWKHDGYLFHSURMHFW

DGYLFH

VUF

KHDGILUVW

MDYD[HME  LPSRUWMDYD UPL5HPRWH([ FHSWLRQ

MDYDILOHV

FODVVHV

KHDGILUVW

       

FODVVILOHV

VUF

KHDGILUVW

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

7KLVLVZKHUHWKHSDFNDJH GLUHFWRU\VWUXFWXUHEHJLQV 0RVWSURMHFWFODVVHVDUH LQWKH³KHDG¿UVW´SDFNDJH ZKLFKPHDQVWKHFODVVHV PXVWEHLQDGLUHFWRU\ QDPHGKHDG¿UVW

MDYD[HME  LPSRUWMDYD UPL5HPRWH([ FHSWLRQ

MDYDILOHV

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

FGaSURMHFWVDGYLFHVUF

FRPSLOHIURPWKHVUFGLUHFWRU\

FGaSURMHFWVDGYLFH

UXQFOLHQWVIURPWKHVSHFL¿F SURMHFWGLUHFWRU\ \RXDUHKHUH



FRPSLOLQJWKHLQWHUIDFHVDQGEHDQFODVV

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

5LJKWQRZWKLVLVKRZ \RXUSURMHFWVGLUHFWRU\ VWUXFWXUHVKRXOGORRN

SURMHFWV

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

FGaSURMHFWVDGYLFHVUF DGYLFH

MDYDFGFODVVHVKHDG¿UVW MDYD

7EREUSINGTHEGCOMPILERmAG SOTHECOMMAND LINEABOVESAYS h#OMPILEALLTHEJAVAlLESINTHE @HEADlRSTDIRECTORY ANDTHENPUTTHECOMPILED CLASSlLESINTOTHE@CLASSESDIRECTORY WHICHYOULL lNDBYGOINGUPONELEVELFROMTHECURRENTSRC DIRECTORY/HYEAH ALMOSTFORGOT BESURETOPUT THECLASSESINTHEIRCORRECT0!#+!'%DIRECTORY ,OOKFORTHEPACKAGESTRUCTUREINSIDETHE@CLASSES DIRECTORY WHICHMEANSYOUSHOULDSEEADIRECTORY NAMED@HEADlRST AND4(!4SWHERETHECLASS lLESNEEDTOGOANDIFYOUDO./4lNDTHE @HEADlRSTDIRECTORYTHERE THENMAKEONEFORME 4HANKSv

FODVVHV

VUF

KHDGILUVW

KHDGILUVW

When we the .class compile, weÕll make in the clas Þles land here, directory. ses/headÞrst

MDYD[HME  LPSRUWMDYD UPL5HPRWH([ FHSWLRQ

LPSRUW MDYD[HME  LPSRUWMDYD UPL5HPRWH([ FHSWLRQ

$GYLFH%HDQMDYD

$GYLFHMDYD

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 4HE2)ISA*%%SERVER REMEMBER NOTJUSTAN%*"CONTAINER 3OWEHAVETODOASMALLBITOF*%%ISHSTUFFBEFOREWECAN MAKETHEEJB JARANDDEPLOYTHEAPP4HISSTEPISWHERE WECREATEANEW*%%APPLICATION ANDFORNOW YOUCAN THINKOFTHE*%%APPLICATIONASSOMETHINGTHATWRAPSTHE BEANSANDADDSALITTLEMOREINFORMATIONFORTHESERVER 4HEMAINDIFFERENCEBETWEENA*%%APPLICATIONANDAN %*"APPLICATIONISTHATA*%%APPLICATIONCANINCLUDEWEB COMPONENTSSERVLETSAND*30S ASWELLAS%*"COMPONENTS ALLINTEGRATEDASPARTOFASINGLEAPP &KRRVH)LOH1HZ$SSOLFDWLRQ

WKHUH DUH QR

'XPE 4XHVWLRQV

Q:

$OESTHISMEANTHAT) -534HAVEA*%%SERVERIF) WANTTOUSESERVLETSAND%*"S TOGETHER

A:

.O7ITHA*%%SERVER THEWEBCOMPONENTSAND%*" COMPONENTSAREMORETIGHTLY INTEGRATED WHICHMEANSYOU CANHAVEALLOFTHECOMPONENTS 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 s. Then select the headto Þr st directory. You donÕt 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


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



&KDSWHU

LQWURWR(-%


\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\




&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 ZH¶OOOHDUQDERXWWKDWLQWKH&OLHQW9LHZFKDSWHU    8VHWKH,QLWLDO&RQWH[WWRGRDORRNXSRQWKH KRPHLQWHUIDFHRIWKHEHDQ WKDWZHQDPHG ³$GYLVRU´ZKHQZHGHSOR\HG 



:H·UHXVLQJDVWDQGDORQH-DYD SURJUDPDVWKHFOLHQW ,QWKHUHDOZRUOG\RXUFOLHQWV ZLOOOLNHO\EHVHUYOHWVRURWKHU EHDQV



1DUURZDQGFDVWWKHWKLQJZHJHWEDFN IURPWKHORRNXS 7KDWWKLQJLVVRPHWKLQJ WKDWLPSOHPHQWVWKH$GYLFH+RPHLQWHUIDFH  :H¶OOOHDUQDERXWQDUURZLQJLQWKH&OLHQW9LHZ FKDSWHU

7KHÀYHWKLQJVWKHFOLHQWPXVW GRDUHWKHVDPHUHJDUGOHVVRI WKHW\SHRIFOLHQW



&DOOFUHDWHRQWKHKRPHLQWHUIDFHWRJHW EDFNDUHIHUHQFHWRWKHFRPSRQHQWLQWHUIDFH

6RXVLQJDVWDQGDORQH-DYD SURJUDPWHDFKHV\RXWRGRWKH VDPHWKLQJV\RX·OOQHHGWRGR ZLWKDVHUYOHWFOLHQW



&DOOJHW$GYLFH  WKHEXVLQHVVPHWKRG WKHUHDVRQZH¶UHKHUHUHPHPEHU" RQWKH FRPSRQHQWLQWHUIDFHDQGSULQWWKHUHVXOW

,I\RXUFOLHQWLVDQRWKHU 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 GLUHFWRU\VKRXOGORRNOLNHDIWHUZH ZULWHDQGFRPSLOHWKHFOLHQWFRGH

SURMHFWV

This is the client JA the server gave us R when we deployed.

MDYD[HME  LPSRUWMDYD UPL5HPRWH([ FHSWLRQ

$GYLFH&OLHQWMDYD

$GYLFH$SS&OLHQWMDU

KHDGILUVW

KHDGILUVW

    

MDYD[HME  LPSRUWMDYD UPL5HPRWH([ FHSWLRQ

LPSRUW MDYD[HME  LPSRUWMDYD FHSWLRQ

$GYLFHFODVV

    

$GYLFH+RPHFODVV

    

$GYLFH&OLHQWFODVV

VUF

$GYLFH%HDQFODVV

&KDSWHU

DGYLFH

FODVVHV

    



so we ster client,in a e t a st ju 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. in the ad

$GYLFH%HDQMDYD

$GYLFHMDYD

MDYD[HME  LPSRUWMDYD UPL5HPRWH([ FHSWLRQ

$GYLFH+RPHMDYD

LQWURWR(-%

7KH&OLHQW&RGH $GYLFH&OLHQWMDYD LPSRUWMDYD[QDPLQJ  LPSRUWMDYDUPL  LPSRUWMDYD[UPL  LPSRUWKHDG¿UVW  LPSRUWMDYD[HME 

A bunch of imports

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

is our entry po,int ng service I o the JND nami int kup. SXEOLFYRLGJR ^ where we do the loo I WU\^ e bean using thet.JND &RQWH[WLF QHZ,QLWLDO&RQWH[W  Lookup the Aditvicdu en ym plo de ring 2EMHFWR LFORRNXS ³$GYLVRU´  name we gave

 $GYLFH+RPHKRPH  $GYLFH+RPH 3RUWDEOH5HPRWH2EMHFWQDUURZ R$GYLFH+RPHFODVV   $GYLFHDGYLVRU KRPHFUHDWH  Just go with it for now. 6\VWHPRXWSULQWOQ DGYLVRUJHW$GYLFH  make perfect sense a lit ItÕll all `FDWFK ([FHSWLRQH[ ^ tle later. H[SULQW6WDFN7UDFH  ` 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 JAR Þle

The client class

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




&KDSWHU

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

LQWURWR(-%

0RFN([DP 1

7HICHAREFEATURESEVERY%*"CONTAINERMUSTIMPLEMENTORSUPPORT #HOOSEALLTHATAPPLY

R! !'5)BEANDEPLOYMENTUTILITY R" 3YNCHRONOUSINVOCATIONFORALLBEANTYPES R# 4RANSACTIONSUPPORTFORALLBEANTYPES R$ 2EMOTECLIENTVIEWSFORALLBEANTYPES R% *.$)NAMESPACE

2

7HICHAREGUARANTEEDCAPABILITIESOF%*"#HOOSEALLTHATAPPLY

3

7HICHAREFEATURESIN%*"#HOOSEALLTHATAPPLY

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

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

\RXDUHKHUH



PRFNH[DPDQVZHUV

0RFN([DP$QVZHUV 1

(spec: 30)

7HICHAREFEATURESEVERY%*"CONTAINERMUSTIMPLEMENTORSUPPORT #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 nt views R% *.$)NAMESPACE

2

7HICHAREGUARANTEEDCAPABILITIESOF%*"#HOOSEALLTHATAPPLY

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

(spec: 25-26)

7HICHAREFEATURESIN%*"#HOOSEALLTHATAPPLY

R! 0ORTABLElNDERQUERYSYNTAX R" #ONTAINERMANAGEDPERSISTENCE R# ,OCALINTERFACESFORSESSIONBEANS R$ 8-,BASEDDEPLOYMENTDESCRIPTORS R% 3YNCHRONOUSMESSAGE DRIVENBEANS - MDBs are always asynchron

ous



&KDSWHU

architectural overview

5

4 (-%$UFKLWHFWXUH

4

,WDOOORRNVVR LPSUHVVLYHIURPWKLV YLHZ7RREDGZHFDQ·W VWD\DWWKLVOHYHO

(-%LVDERXWLQIUDVWUXFWXUH


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


&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 t bu , re he a miracle probably is...

miracle occurs here miracle occurs here

VHUYHU



VHUYLFHV

W (-% REMHF

(Q

DQ

 & OL HQWREMHFW

EL]LQWHUIDFH

&OLHQW

WHUS VHEH UL

'%

$ULGLFXORXVO\KLJKOHYHOYLHZRI(-%DUFKLWHFWXUH

\RXDUHKHUH



UHPRWHPHWKRGV

5ISQVOIZMUW\MUM\PWLKITT 7HENYOUWRITEACLIENTTOACCESSABEAN THECLIENTISEITHERLOCAL ORREMOTE!LOCALCLIENTMEANSTHECLIENTISRUNNINGINTHESAME *6-ASTHEBEAN)NOTHERWORDS BOTHTHEBEANANDTHECLIENT LIVEINTHESAMEHEAP7ELLTALKABOUTTHATMUCHMOREINTHE #LIENT6IEWCHAPTER BUTFORNOW REMEMBERTHATLOCALMEANS SAMEHEAP*6-#HANCESARE YOULLUSELOCALCLIENTSONLYWITH ENTITYBEANS ANDONLYUNDERVERYSPECIALCIRCUMSTANCES 9OULLUSEAREMOTECLIENTWHENYOUWANTABEANTOBEUSEDBYTHE OUTSIDEWORLD-OSTENTERPRISEAPPLICATIONSHAVEAREMOTECLIENT EVENIFSOMEOFTHEBEANSUSEDINTHEAPPLICATIONTALKTOONE ANOTHERASLOCALCLIENTS7ELLEXPLOREEVERYGORYDETAILABOUT THISBEFORETHEBOOKISOVER 3OHOWDOESANOBJECTINONEHEAP*6-DIRECTLYCALLAMETHOD ONAREFERENCETOANOBJECTRUNNINGINANOTHERHEAP*6- 4ECHNICALLY ITSNOTPOSSIBLE*AVAREFERENCESHOLDBITSTHATDONT MEANANYTHINGOUTSIDETHECURRENTLYRUNNING*6-)FYOUREAN OBJECTANDYOUHAVEAREFERENCETOANOTHEROBJECT THATOBJECTMUST BEINTHESAMEHEAPWITHYOU *AVA2-)2EMOTE-ETHOD)NVOCATION SOLVESTHISPROBLEMBY GIVINGTHECLIENTAPROXYCALLEDASTUB OBJECTTHATACTSASTHE GO BETWEENFORTHECLIENTAND2EMOTEOBJECT4HECLIENTCALLS AMETHODONTHESTUB ANDTHESTUBTAKESCAREOFTHELOW LEVEL COMMUNICATIONSOCKETSANDSTREAMS WITHTHE2EMOTEOBJECT

:LWK50,\RXUFOLHQWREMHFW JHWVWRDFWOLNHLW·VPDNLQJD UHPRWHPHWKRGFDOO%XWZKDW LW·VUHDOO\GRLQJLVFDOOLQJD PHWKRGRQD´SUR[\µREMHFW UXQQLQJLQWKHVDPHKHDS ZLWKWKHFOLHQW7KHSUR[\LV FDOOHGD´VWXEµDQGLWKDQGOHV DOOWKHORZOHYHOQHWZRUNLQJ VRFNHWVDQGVWUHDPV

, e Remote object th be to s d en et Helper ÒstubÓ prproxy... something that knows . but itÕs just a icate with the Remote object how to commun JHW$GYLFH

&OLHQWKHDS $ G Y LF H JHW

 FW

FOL HQWREMH

The clientÕs goal is to ca object (the thing that doll a method on the Remote Remote object is in a dif es the real work). But since the method on a local ÒstubÓ ferent heap, the client calls a object (which in turn sen over the network) ds info



&KDSWHU

5H PRWH REMHF 

W

UHP E· RWH¶VWX

6HUYHUKHDS

The Remote Object is the object with the method that actually does the real work for whatever that method is supposed to do (checkCredit(), calculatePi(), etc.).

DUFKLWHFWXUDORYHUYLHZ


tion g Socket connyiecng, in m co in e th s pt 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

JHW$GYLFH

JHW$GYLFH

6HUYHUKHDS

$ G YL F H JHW

 FOL HQWREMHFW

a method call to To the client, itÕs juste same heap. another object in th

¶VNHOHWRQ·

5H PRWH REMHF 

W

UHP E· RWH¶VWX

To the Remote object, itÕs just a method call from another object in the same heap.

\RXDUHKHUH



(-%DUFKLWHFWXUH

WKHUH DUH QR

'XPE 4XHVWLRQV

Q:

Q:

A:

.O YOUDONTNEEDTOMAKETHESTUBSAND SKELETONS7ITHPLAINOLD2-) YOUUSETHE2-) COMPILERRMIC TOGENERATETHEM"UTFORTHEOTHER TWOQUESTIONSWELLLETYOUTHINKABOUTITFORA MINUTEBEFOREWELOOKATTHEDETAILS

(OWCANYOUHAVEhNETWORKTRANSPARENCYv 7HATHAPPENSIFTHENETWORKORTHESERVERIS DOWNWHENTHECLIENTCALLSTHEREMOTEMETHOD)T SEEMSLIKETHERESA,/4MORETHATCANGOWRONG THANIFTHECLIENTOBJECTISJUSTMAKINGAPLAINOLD METHODCALLTOANOTHEROBJECTINTHEHEAP

9ES YES9OUOBVIOUSLYUNDERSTANDTHAT hNETWORKTRANSPARENCYvISNOTONLYAMYTH ITSABAD IDEA/FCOURSETHEREMOTEMETHODCALLCANFAILIN WAYSALOCALMETHODCALLWOULDNOT ANDTHECLIENT NEEDSTOBEPREPAREDFORTHAT 4HATSWHY IN*AVA2-) ALLREMOTEMETHODSMUST DECLAREAJAVARMI2EMOTE%XCEPTION WHICHISA CHECKEDEXCEPTION4HATMEANSTHECLIENTHASTO HANDLEORDECLARETHEEXCEPTION)NOTHERWORDS THECLIENTCANTREALLYPRETENDTHEMETHODCALLISNT REMOTE "UTWAIT THERESMOREˆTHECLIENTHASTODO SOMETHINGSPECIALTOEVENGETTHEREFERENCETOTHE 2EMOTEOBJECTINTHEFIRSTPLACE!NDWHATEXACTLYIS THATREFERENCE)TSREALLYAREFERENCETOTHE2EMOTE OBJECTSPROXYˆTHESTUB 3ONO 2-)DOESNOTGIVEYOUTRUENETWORK TRANSPARENCY4HEDESIGNERSOF2-)WANTTHECLIENT TOACKNOWLEDGETHATTHINGSCANGOHORRIBLYWRONG WITHAREMOTEMETHODINVOCATION 3TILL WHENYOULOOKATEVERYTHINGTHATNEEDSTO HAPPENTOMAKEAREMOTEMETHODCALLNETWORKING 3OCKETCONNECTION STREAMS PACKAGINGUP ARGUMENTS ETC THECLIENTHASTODOONLYACOUPLE OFTHINGSUSEASPECIALLOOKUPPROCESSTOGETTHE REFERENCETOTHEREMOTEOBJECT ANDWRAPREMOTE METHODCALLSINATRYCATCH4HATSPRETTYTRIVIAL WHENYOUCONSIDERWHATITWOULDTAKEIFTHECLIENT HADTOMANAGETHEWHOLEPROCESS !NDTHERESEVENAWAYTOMAKEITEASIERFORTHE CLIENT USINGAN%*"DESIGNPATTERNWELLSEEINTHE LASTCHAPTER 



&KDSWHU

!M)RESPONSIBLEFORBUILDINGTHESTUB ANDTHESKELETON(OWDOESTHESTUBKNOWWHAT METHODSMY2EMOTEOBJECTHAS&ORTHATMATTER HOWDOESTHECLIENTKNOWWHATMETHODSMY 2EMOTEOBJECTHAS

A:

YiX`e gfn\i ,Q-DYDZKDW¶VWKHEHVWZD\WRWHOOWKHFOLHQW ZKDWPHWKRGVVKHFDQFDOO",QRWKHUZRUGV KRZGR\RXH[SRVH\RXUSXEOLFPHWKRGVWR RWKHUV"

7KLQNDERXWWKHUHODWLRQVKLSEHWZHHQWKH VWXEDQGWKHDFWXDO5HPRWHREMHFW:KDW PXVWWKH\ERWKKDYHLQFRPPRQ"

:H·OOVHHWKHDQVZHUVHYHUDOSDJHVIURPQRZ

DUFKLWHFWXUDORYHUYLHZ



?PI\IJW]\IZO]UMV\[IVLZM\]ZV^IT]M['

7KHVWXEDQGVNHOHWRQ DUHLQLWIRUWKHZKROH URXQGWULS7KH\·UHERWK UHVSRQVLEOHIRUSDFNLQJ DQGXQSDFNLQJWKHYDOXHV VKLSSHGRYHUWKHZLUH

2EMOTEMETHODCALLSAREJUSTLIKELOCALMETHODCALLS EXCEPTFORTHE 2EMOTE%XCEPTIONS!NDWHATGOODWOULDAMETHODCALLBEIFYOU COULDNTPASSARGUMENTSORGETARETURNVALUE9OUMIGHTASWELLBE DOING20# THEWAYYOURPARENTSDID 4HISBRINGSUSTOONEOFTHEKEYJOBSFORTHESTUBANDTHESKELETONOR WHATEVERISDOINGTHESKELETONISHTHINGS ˆPACKINGANDUNPACKING VALUESSHIPPEDOVERTHEWIRE

%XWLWZRQ·WZRUNLIWKH DUJXPHQWVDQGUHWXUQ YDOXHVDUHQ·WVKLSSDEOH

2EMEMBER THECLIENTISREALLYCALLINGAMETHODONTHESTUB ANDTHE STUBISLOCALTOTHECLIENTIEINTHESAMEHEAP 3O FROMTHECLIENTS PERSPECTIVE THERESNOTHINGSPECIALABOUTSENDINGARGUMENTSWITH THEMETHOD)TSTHESTUBTHATDOESALLTHEDIRTYWORK4HESTUBHASTO PACKAGEUPTHEARGUMENTSTHROUGHAPROCESSKNOWNASMARSHALLING ANDSENDTHEMINTHEOUTPUTSTREAM THROUGHTHE3OCKETCONNECTION WITHTHESERVER

6KLSSDEOHYDOXHVPXVWEH RQHRIWKHVH

5 3ULPLWLYHV 5 6HULDOL]DEOHREMHFWV

4HESKELETON THINGONTHESERVERHASTOPROCESSTHESTREAMFROMTHE STUB UNPACKTHEARGUMENTS lGUREOUTWHATTODOWITHEVERYTHINGFOR INSTANCE WHICHMETHODTOCALLONWHICHOBJECT ANDTHENINVOKETHE METHODALOCALCALL ONTHE2EMOTEOBJECT WITHTHEARGUMENTS

5 $QDUUD\RUFROOHFWLRQ RISULPLWLYHVRU 6HULDOL]DEOHREMHFWV

4HENITALLHAPPENSINREVERSE4HESKELETONPACKAGESUPTHERETURN VALUESANDSHIPSTHEMTOTHESTUB WHOUNPACKSTHEMANDGIVESTHEM TOTHECLIENTASPLAINOLDGARDEN VARIETYRETURNVALUES"UTINORDERTO SENDARGUMENTSANDRETURNVALUES THEYMUSTBEPRIMITIVES 3ERIALIZABLE OBJECTS ANARRAYORCOLLECTIONOFPRIMITIVESOR3ERIALIZABLEOBJECTS ORA 2EMOTEOBJECT

1DPH  JHW

&OLHQW

5 $5HPRWHREMHFW

JHW1DPH 

JHW1DPH 

6HUYHU ´-RQµ ´-RQµ VWXE

´-RQµ

VNHOHWRQ

5HPRWHREMHFW

FOLHQW

e argument and The stub packages upththod call information, sends it with the meturn value for the client. then unpacks the re

53&VWDQGVIRU5HPRWH3URFHGXUH&DOO%RULQJ

The skeleton (or whatever is doing the skeleton behavior on the server) unpacks the method arguments for the Remote object method call, then packs and ships the return value.

\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 Something we cato an object on the heap. call methods) on n use to push buttons (i.e. the object.

'RJ REMHFW ^a\g 'RJ

ng What are we really passi

YRLGJR ^ 'RJ¿GR QHZ'RJ 

here??

WKLVWUDLQ3HW ¿GR  `

A copy of the reference (the remote control), not the Dog object 'RJ REMHFW

YRLGWUDLQ3HW 'RJDUJ ^` :HNQRZ\RXNQRZDOOWKLV REYLRXVO\EXWMXVWVR¶ZH·UHDOO RQWKHVDPHSDJH· ZKLFKLV DQRGGWKLQJWRVD\VLQFHZH FOHDUO\$5(DOORQWKHVDPH SDJH EXW\RXJHWWKHLGHD



&KDSWHU

Yj_

ter and the Now the ÒargÓ parame tical copies. Both en ÒÞdoÓ variable are idDog object. reference the same

^a\g 'RJ

'RJ

DUFKLWHFWXUDORYHUYLHZ

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

'RJ REMHFW ^a\g 'RJ

&OLHQW

,PDJLQHWKLV&/,(17FRGH WU\^

NOW what are we really passing here??

'RJ¿GR QHZ'RJ 

UHPRWH6WXEWUDLQ3HW ¿GR  `FDWFK 5HPRWH([FHSWLRQH[ ^ H[SULQW6WDFN7UDFH  `

'RJ REMHFW

! NOT the reference value ItÕs a serialized copyctof. the actual Dog obje

$QGWKLV5(027(PHWKRG

,I\RXUUHPRWHPHWKRG KDVDQDUJXPHQW WKDW·VDQREMHFWW\SH WKHDUJXPHQWLV SDVVHGDVDIXOOFRS\ RIWKHREMHFWLWVHOI )RUUHPRWHFDOOV -DYDSDVVHVREMHFWV E\REMHFWFRS\QRW UHIHUHQFHFRS\ $VHULDOL]HGFRS\RI WKHREMHFWLVVKLSSHG WRWKH5HPRWHREMHFW

YRLGWUDLQ3HW 'RJDUJ ^` 6HULDOL]DEOH

py The server Dog is a co of the client Dog. 'RJ REMHFW ^a\g 'RJ

'RJ REMHFW

'RJ

Yj_

&OLHQW

'RJ

6HUYHU

'RJLPSOHPHQWV 6HULDOL]DEOH

\RXDUHKHUH



UHPRWHPHWKRGDUJXPHQWV

*HWWLQJWKHREMHFWDUJXPHQWIURP WKHFOLHQWWRWKHVHUYHU



&OLHQWLQYRNHVWUDLQ3HW P\'RJ RQWKH VWXESDVVLQJDFRS\RIWKHUHIHUHQFHWR WKH'RJREMHFW

'RJ 3H WUDLQ W P\'RJ

FOLHQW

Client passes a co of a reference to py the Dog object on the heap. ThereÕs only one Dog object.

VNHO

5HPRWH REMHFW

VNHO

5HPRWH REMHFW

VWXE

 7KHVWXEPDNHVDVHULDOL]HGFRS\RI WKHREMHFWDQGVHQGVWKDWFRS\RYHU WKHZLUHWRWKHVNHOHWRQ

a serialized The stub sendDs og. copy of the

'RJ 'RJ

FOLHQW



&KDSWHU

VWXE

DUFKLWHFWXUDORYHUYLHZ

8QSDFNLQJ GHVHULDOL]LQJ WKH REMHFWRQWKHVHUYHU

 7KHVNHOHWRQGHVHULDOL]HVWKHSDVVHG DUJXPHQWFUHDWLQJDQHZ'RJREMHFWLQWKH 5HPRWHREMHFW·VKHDS

'RJ 5HPRWH REMHFW

VNHO FOLHQW

VWXE

'RJ

The new D one on the ocgli is just like the ent side.  7KHVNHOHWRQLQYRNHVWKHPHWKRGRQ WKH5HPRWHREMHFWSDVVLQJDSODLQROG -DYDUHIHUHQFHWRWKHQHZ'RJREMHFW

'RJ VNHO FOLHQW

VWXE

WUD LQ3HW QHZ'RJ

5HPRWH REMHFW

'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:

Q:

)MSITTINGHEREWITHA(ASH-APFULLOF 3ERIALIZABLE#USTOMEROBJECTSWITH3TRINGKEYS $O)HAVETOWORRYABOUTWHETHERTHE(ASH-AP ITSELFIS3ERIALIZABLE

)FSOMETHINGYOUREPASSINGTOAREMOTE METHODISNT3ERIALIZABLE ISTHISACOMPILE TIMEOR RUNTIMEFAILURE

A:

2UNTIME5SUALLY ANYWAY2EMEMBERTHATTHE DECLAREDARGUMENTORRETURNTYPEISNOTNECESSARILY THESAMEASTHEACTUALRUNTIMETYPE

/+ THISISKINDOFATRICKYONE!LLOFTHE #OLLECTIONIMPLEMENTATIONSINTHE*3%!0)ARE 3ERIALIZABLE3OYOUDONTHAVETOWORRYABOUTA (ASHMAPˆASLONGASWHATYOUPUTINTHE(ASHMAP IS3ERIALIZABLE YOUREFINE

"UTTHEREISONEPLACEWHERETHINGSCANFAIL #HANCESARE YOULLNEVERSEETHIS BUTITSSTILLWORTH MENTIONING9OUPROBABLYALREADYKNOWTHATTHE -APCLASSESLIKE(ASH-APAND(ASHTABLEHAVEA VALUES METHODTHATRETURNSACOLLECTIONOFJUST THEVALUES WITHOUTTHEKEYS)NOTHERWORDS IFYOU CALLEDITONYOUR(ASH-AP YOUDGETA#OLLECTIONOF #USTOMEROBJECTS "UTWHATTYPEOFCOLLECTION!NDTHERESTHE PROBLEM9OUDONTKNOW!LLYOUKNOWISTHAT ITSSOMETHINGTHATIMPLEMENTSTHE#OLLECTION INTERFACE"UTTHATISNTENOUGHTOTELLYOUWHETHER THE#OLLECTIONRETURNEDBYVALUES IS3ERIALIZABLE )NOTHERWORDS YOUMIGHTGETBACKA#OLLECTION THATˆEVENWHENFILLEDWITH3ERIALIZABLEOBJECTSˆIS NOTITSELF3ERIALIZABLE 4HEBOTTOMLINEDONTRELYONTHE#OLLECTION RETURNEDFROMAMAPSVALUES METHODTOBE 3ERIALIZABLE0UTYOURVALUESINTOSOMETHINGYOUCAN TRUSTTOBE3ERIALIZABLE LIKE!RRAY,IST BEFORETRYING TOSHIPTHEMASPARTOFAREMOTEMETHODCALL

A:

4HEONLYCASEWHEREITCANFAILATCOMPILETIMEISIF THEREMOTEMETHODACTUALLYUSES3ERIALIZABLEASTHE DECLAREDTYPEOFTHEARGUMENTORRETURNVALUE SXEOLFYRLGWDNH,W 6HULDOL]DEOHV  )NTHATCIRCUMSTANCE THECOMPILERCANUSENORMAL *AVATYPE CHECKINGTOSEEIFTHEDECLAREDTYPEOFTHE THINGBEINGPASSEDIMPLEMENTS3ERIALIZABLE -OSTOFTHETIME THEDECLAREDARGUMENTORRETURN TYPEISSOMETHINGOTHERTHAN3ERIALIZABLELIKE$OG !RRAY,IST 3TRING ETC SO*AVAWONTKNOWWHETHERTHE RUNTIMEOBJECTIS3ERIALIZABLEUNTILITACTUALLYTRIESTO DOTHESERIALIZATIONANDTHENITTHROWSANEXCEPTION  !NDWITHCOLLECTIONSANDARRAYS IFANYOFTHEOBJECTS INSIDEARENT3ERIALIZABLE THEWHOLESERIALIZATIONFAILS

Q:

$OESMYCLASSHAVETOEXPLICITLYIMPLEMENT 3ERIALIZABLE ORCAN)INHERIT3ERIALIZABLENESSFROMMY SUPERCLASS

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 5 6HULDOL]DEOHREMHFWV 5 $QDUUD\RUFROOHFWLRQRISULPLWLYHV RU6HULDOL]DEOHREMHFWV

,GRQ·WJHWZK\LW·VOHJDO WRSDVVD5HPRWHREMHFWLQD UHPRWHPHWKRG,VQ·WWKHZKROH SRLQWRID5HPRWHREMHFWWRVWD\ UHPRWH":K\ZRXOG\RXVHQGD 5HPRWHREMHFWWRWKHFOLHQW"" 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 )TDOESNOTMAKESENSETOSENDA2EMOTEOBJECTINA REMOTEMETHODCALL!FTERALL THEWHOLEPOINTOFA 2EMOTEOBJECTISTOSTAYREMOTE4OBEACCESSEDBY CLIENTSWHOLIVESOMEWHEREELSE)NANOTHERHEAP "UTWHATIFYOUWANTTOPASSAREMOTECLIENTA REFERENCETOANOTHER2EMOTEOBJECT7HATIF RATHERTHANHANDINGYOURCLIENTAFULL BLOWNCOPY OFA#USTOMER YOUSENDHIMASTUBTOA2EMOTE #USTOMER 4HINKABOUTIT"EFOREYOUREADTHENEXTPAGE

:KHQ\RXSDVVD5HPRWH REMHFWWRRUIURPDUHPRWH PHWKRG-DYDDFWXDOO\VHQGV WKH5HPRWHREMHFW·VVWXE ,QRWKHUZRUGVDWUXQWLPH WKH5HPRWHREMHFWVWD\VULJKW ZKHUHLWLVDQGLWVVWXELV VHQWRYHUWKHZLUHLQVWHDG

YiX`e gfn\i :KDWDUHWKHLPSOLFDWLRQVRISDVVLQJDVWXEWRD 5HPRWH&XVWRPHUREMHFWDVRSSRVHGWRSDVVLQJD QRQUHPRWH&XVWRPHUREMHFW"

A remote re remote obje ference is a stub to a a remote re ct. If the client has reference toference, he has a local talk to the a stub, and the stub can Remote obje ct.

:KDWDUHWKHEHQH¿WVRISDVVLQJDVWXELQVWHDGRI WKHUHDO&XVWRPHUREMHFW"

FOLHQW

VHUYHU )RR VWXE

:KDWDUHWKHGUDZEDFNV"

^gg^ )RR

nce

1RWHZKHWKHUWRSDVVVHULDOL]HGREMHFWVRUVWXEV WRUHPRWHREMHFWVLVDFUXFLDOGHVLJQGHFLVLRQ:H¶OO H[SORUHWKLVZKHQZHORRNDWSHUIRUPDQFHDQG SDWWHUQV



&KDSWHU

local refere to a stub

stub to a Remote object

5HPRWH )RR REMHFW

DUFKLWHFWXUDORYHUYLHZ

:KHQWKHUHWXUQYDOXHLVD 5HPRWHREMHFW

 7KHFOLHQWLQYRNHVJHW&XVWRPHU RQ5HPRWH REMHFW$ XVLQJVWXE$ 

JHW&XVWRPHU

JHW&XVWRPHU JHW&XVWRPHU FOLHQW

5HPRWH REMHFW$

VNHO VWXE$

5HPRWH REMHFW% &XVWRPHU



5HPRWHREMHFW$UHWXUQVDUHIHUHQFHWRD &XVWRPHUREMHFW 5HPRWHREMHFW% 7KHVNHOHWRQ VXEVWLWXWHV DQGVHULDOL]HV WKH5HPRWHREMHFW·V VWXEDQGVHQGVLWEDFNWRWKHFOLHQW

turns ct (A) simply mreer je ob e ot em R he T to the Custo a local referencee object B), but itÕs object (Remot ub that gets sent back. actually the st

7KH&XVWRPHUVWXE % LVGHVHULDOL]HGRQWKH FOLHQWDQGWKHFOLHQWJHWVDORFDOUHIHUHQFHWRWKH QHZVWXEREMHFW

5HPRWH REMHFW$

VNHO FOLHQW

VWXE$

ORFDOUHIHUHQFH WRVWXE% VWXE%

a local Now the client gets back stub r me sto Cu reference to the object (B).

5HPRWH

5HPRWH REMHFW%

VWXE%

Serialized stub B (the Customerto Remote object object).

&XVWRPHU

\RXDUHKHUH



50,TXHVWLRQV

WKHUH DUH QR

'XPE 4XHVWLRQV :MDD=LHGAFLK

Q:

7HATHAPPENSIFTHECLIENTOBJECTANDTHE 2EMOTEOBJECTARERUNNINGINDIFFERENT*6-S BUT ONTHESAMEPHYSICALMACHINE)NOTHERWORDS THEYREBOTHRUNNINGIN*AVAPROGRAMSONTHESAME SERVER

ƒ (-%XVHV-DYD50, 5HPRWH0HWKRG,QYRFDWLRQ VR WKDW\RXUEHDQVFDQEHDFFHVVHGE\UHPRWHFOLHQWV

ƒ $UHPRWHFOLHQWLQWKLVFRQWH[WLVDQREMHFWUXQQLQJLQ DGLIIHUHQW-90ZKLFKDOVRPHDQVDGLIIHUHQWKHDS

A:

$OESNTMAKEANYDIFFERENCE!LLTHATMATTERS ISWHETHERTHETWOOBJECTSLIVEINDIFFERENTHEAPS AND*6-SDONOTSHAREHEAPSWITHONEANOTHER THANK YOUVERYMUCH NOMATTERHOWINTIMATETHEYARE COHABITINGTHESAMESERVER  )NFACT YOUCANANDWITH%*"OFTENMUST USE2-) EVENWHENTHEOBJECTSAREINTHESAMEHEAP

Q:

7HYINTHEWORLDWOULDYOUEVERWANTTODO USE2-)IFYOUDONTNEEDTO)SNTTHEREENOUGH OVERHEADWITHREMOTECALLSASITIS

A:

ƒ $5HPRWHREMHFWVWD\VLQLWVRZQKHDSZKLOHFOLHQWV LQYRNHPHWKRGVRQWKH5HPRWHREMHFW·VSUR[\FDOOHG DVWXE

ƒ 7KHVWXEREMHFWKDQGOHVDOOWKHORZOHYHOQHWZRUNLQJ GHWDLOVLQFRPPXQLFDWLQJZLWKWKH5HPRWHREMHFW

ƒ :KHQWKHFOLHQWZDQWVWRFDOODPHWKRGRQD5HPRWH REMHFWWKHFOLHQWFDOOVWKHVDPHPHWKRGRQWKHVWXE 7KHVWXEOLYHVLQWKHVDPHKHDSDVWKHFOLHQW

ƒ 7RWKHFOLHQWDUHPRWHPHWKRGFDOOLVLGHQWLFDOWRD ORFDOPHWKRGFDOOH[FHSWDUHPRWHPHWKRGFDQWKURZ D5HPRWH([FHSWLRQ DFKHFNHGH[FHSWLRQ 

7ELLGOINTOTHISINMOREDETAILLATER BUT THEMAINREASONISBECAUSEIFYOUDONTUSE2-)FOR METHODCALLS YOURELOCKINGDOWNYOURDESIGNIN SUCHAWAYTHATYOUCANTDISTRIBUTEYOUROBJECTSIN DIFFERENTPLACESINYOURNETWORKOREVENONTHESAME SERVER )NOTHERWORDS WITHOUT2-) YOUMUSTHAVE BOTHOBJECTSINTHESAMEHEAP

ƒ 7KHVWXESDFNDJHVXSWKHPHWKRGDUJXPHQWVDQG

&ORADISTRIBUTEDPROGRAMMINGMODEL THATSAPRETTY PERMANENTDECISION WITHNOCHANCETOCHANGEYOUR MINDLATER WITHOUTREWRITINGCODE/NTHEOTHER HAND IFYOUDOUSE2-) YOUCANDECIDELATERTOSPLIT YOURPROGRAMUPINTODIFFERENTNODESONYOURSYSTEM WITHLITTLEORUSUALLYNOCODECHANGES

ƒ $UJXPHQWVDQGUHWXUQYDOXHVPXVWEHRQHRIWKH

3OTHETRADEOFFISFLEXIBILITYFORPERFORMANCE BUTFOR MOSTDISTRIBUTEDENTERPRISEAPPS THEOVERHEADOFA REMOTECALLISNOTYOURBIGGESTPROBLEM)TSUSUALLY YOURBANDWIDTHANDORCONCURRENCYTHATHURTSTHE MOST/VERALL YOUPROBABLYHAVEBIGGERPERFORMANCE FISHTOFRYINAREASOTHERTHANWHETHERYOURCALLSARE REMOTEORLOCAL"UTTHESTORYISNTALWAYSTHATSIMPLE SOWELLEXPLORETHISAGAINLATERINTHEBOOK



&KDSWHU

VHQGVLQIRUPDWLRQDERXWWKHFDOOWRDVNHOHWRQRQ WKHVHUYHU7KHVNHOHWRQREMHFWLWVHOILVRSWLRQDOEXW WKHVNHOHWRQ·VZRUNPXVWEHGRQHE\VRPHWKLQJRQ WKHVHUYHU:HGRQ·WKDYHWRFDUHZKR³RUZKDW³LV DFWXDOO\GRLQJWKHVNHOHWRQ·VZRUN IROORZLQJDSULPLWLYHD6HULDOL]DEOHREMHFWDQDUUD\ RUFROOHFWLRQRISULPLWLYHVRU6HULDOL]DEOHREMHFWVRUD 5HPRWHREMHFW,IWKHYDOXHLVQ·WRQHRIWKHVH\RX·OO JHWDUXQWLPHH[FHSWLRQ

ƒ ,IDQREMHFWLVSDVVHGDVDQDUJXPHQWRUUHWXUQ YDOXHWKHREMHFWLVVHQWDVDVHULDOL]HGFRS\WKHQ GHVHULDOL]HGRQWKH5HPRWHREMHFW·VORFDOKHDS

ƒ ,ID5HPRWHREMHFWLVSDVVHGDVDQDUJXPHQWRUUHWXUQ YDOXHWKHREMHFW·VVWXELVVHQWLQVWHDG

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 (OWDOESTHESTUBKNOWWHICHMETHODSTHE 2EMOTEOBJECTHAS 2EMEMBER IFTHESTUBISPRETENDINGTOBETHE 2EMOTEOBJECT THESTUBMUSTHAVETHESAME METHODSASTHE2EMOTEOBJECT /FCOURSEYOUKNOWTHEANSWERTOTHIS !NINTERFACE 4HEWAYALLMETHODSINADISTRIBUTEDENVIRONMENT SHOULDBEEXPOSEDTOACLIENT 7ECALLTHISTHEBUSINESSINTERFACEBECAUSEITHAS THEBUSINESSMETHODS THECLIENTWANTSTOCALL 4ECHNICALLY THEBUSINESSINTERFACEFORA2EMOTE OBJECTMUSTBE SURPRISINGLY A2EMOTEINTERFACE

,WDOOEHJLQVZLWKD5HPRWH LQWHUIDFH%RWKWKH5HPRWH REMHFWDQGWKHVWXELPSOHPHQW WKHVDPHLQWHUIDFHWKHRQH ZLWKWKHPHWKRGVWKHFOLHQW ZDQWVWRFDOO $5HPRWHLQWHUIDFHPXVW H[WHQGMDYDUPL5HPRWHDQG 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 interface are in java

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



&KDSWHU

DUFKLWHFWXUDORYHUYLHZ


LQWHUIDFH!! 5HPRWH

2EMEMBER ASFARASTHECLIENTSCONCERNED HESCALLING METHODSON4HE2EAL4HING4HEACTUAL2EMOTEOBJECT4HE THINGTHATHASTHEMETHODSHEWANTSTOCALL 4HEONLYTHINGREMINDINGTHECLIENTTHATHEISNT CALLINGMETHODSDIRECTLYONTHE2EMOTEOBJECTISTHE 2EMOTE%XCEPTIONSHEHASTODEALWITH

LQWHUIDFH!! 'LFH5ROOHU UROO'LFH

the stub class

UROO'LFH

'LFH5ROOHU,PSO UROO'LFH

te the Remcolass t c obje

l (the Remote p Im r e ll o R e ic Both the D the actual dice rolling ub object with y) and the DiceRoller stterface. functionalit he Remote DiceRoller in implement t

&OLHQWKHDS

XE

'L FH5 ROOHUVW

mote business The client uses the Re s on the stub. interface to call methmoodte object both The stub and the Rete interface. implement the Remo

O

'LFH5ROOHU

6HUYHUKHDS 'LFH5ROOHU

FOLHQW

'LFH5ROOHU6WXE

the Remote rface (business) inte

'L PS FH5 ROOHU,

From this to show a skpoeint forward, weÕre not about is that leton object. All we ca going is handling th SOMETHING on the re se e skeleton fu nctionality. rver

\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 'RJ7UDLQHU

3H WUDLQ W P\'RJ

FOLHQW

VWXE

       

'RJ7UDLQHU,PSO

       

'RJ7UDLQHU LQWHUIDFH



&KDSWHU

       

'RJ7UDLQHU6WXE

       

FOLHQWFODVV

       

'RJ

DUFKLWHFWXUDORYHUYLHZ

0W_-2*][M[:51 3O2-)LIESATTHEHEARTOFMOSTCLIENT TO BEANCOMMUNICATION"UTASYOUSAWAHINT OFINTHElRSTCHAPTER THE%*"ARCHITECTURE ISALITTLEMORECOMPLEXTHANASIMPLE CLIENT TO STUB TO 2EMOTE OBJECTSCENARIO )N%*" THEBEANˆTHETHINGONWHICHTHE CLIENTWANTSTOCALLBUSINESSMETHODSˆIS NOT2EMOTE

)N%*" ACLIENTSENTRYPOINTINTOTHE ENTERPRISEAPPLICATIONISNEARLYALWAYS THROUGHAREFERENCESTUB TOA2EMOTE OBJECT9ES ITISPOSSIBLE ANDSOMETIMES NECESSARY TOUSEALOCALCLIENTIEA CLIENTINTHESAMEHEAPASTHEBEAN AND WHICHDOESNTUSE2-)TOINVOKEBUSINESS METHODS BUTTHISISFORONLYAFEWVERY SPECIALCASES

3ODLQ50,

Business logic lives here! VHUYHU

VWXE

EL]LQWHUIDFH

FOLHQW

EL]LQWHUIDFH

&OLHQW

5HPRWH REMHFW

'%

KHDS

Business logic lives here!

50,LQ(-%

VHUYHU

(-% W 2EM H F



(Q

KHDS

DQ

5HPRWH REMHFW

VHUYLFHV

VWXE

EL]LQWHUIDFH

FOLHQW

EL]LQWHUIDFH

&OLHQW

WHUS VHEH UL

'%

\RXDUHKHUH



(-%REMHFW


1RERG\WDONVWRWKH EHDQZLWKRXWJRLQJ WKURXJKPHÀUVW

The bean doesnÕ the Remote (bustinactually implement it DOES have the ess) interface! (But real business logic.) (-%VHUYHU

(-% W 2EM H F KHDS



&KDSWHU



(Q

DQ

5HPRWH REMHFW

VHUYLFHV

VWXE

EL]LQWHUIDFH

FOLHQW

7KHEHDQFODVVGRHV127 LPSOHPHQWWKHEXVLQHVV LQWHUIDFH LQWKHIRUPDO -DYDZD\ EXWWKHEHDQ KDVWKHUHDOEXVLQHVVORJLF IXQFWLRQDOLW\

te and the Remino terface, ub st e h t h t Bo ent the same object impleomnÕt have the REAL but they d c implementations. business logi

EL]LQWHUIDFH

&OLHQW

%RWKWKH5HPRWHREMHFW DQGWKHVWXELPSOHPHQWWKH VDPHLQWHUIDFH³WKHEXVLQHVV LQWHUIDFH FDOOHGD&RPSRQHQW LQWHUIDFH ³EXWZLWKRXWWKH UHDOEXVLQHVVORJLFEHKDYLRU

WHUS VHEH UL

'%

DUFKLWHFWXUDORYHUYLHZ


LQWHUIDFH!! 5HPRWH

es All Remote interfac nd te must ex java.rmi.Remote.

LQWHUIDFH!! (-%2EMHFW

In RMI, java.rmi.Ryeomu extend EJB, your inote directly. In javax.ejb terface extend in turn ex.EtJeBObject, which s nds Remote.

.H\SRLQWV 



$Q\LQWHUIDFHZLWKMDYDUPL5HPRWHLQLWVLQKHULWDQFH WUHHLVD5HPRWHLQWHUIDFH

VHYHUDOPHWKRGV

7KH(-%2EMHFWLQWHUIDFHH[WHQGV5HPRWHVR (-%2EMHFWLVD5HPRWHLQWHUIDFH

LQWHUIDFH!! %RRN&DUW 







7KH(-%2EMHFWLQWHUIDFHDGGVDGGLWLRQDOPHWKRGVIRU WKHFOLHQWWRXVH :H¶OOVHHWKRVHODWHU

DGG%RRN UHPRYH%RRN VKRZ%RRNV,Q&DUW GR&KHFNRXW

interface Your componentejb.E JBObject. x. va ja extends t your pu u yo This is where ods. This is th me s busines ! es us t en what the cli

:KRHYHULPSOHPHQWVWKH%RRN&DUW LQWHUIDFHPXVWLPSOHPHQWDOOWKHPHWKRGV IURPERWK%RRN&DUWDQG(-%2EMHFW7KH (-%2EMHFWLQWHUIDFHDGGVWKHPHWKRGV WKDWDOO(-%FOLHQWVPLJKWQHHG

\RXDUHKHUH



WKHEHDQFODVV

+RZWKHEHDQFODVVÀWVLQ

-6($3,

LQWHUIDFH!! 5HPRWH

LQWHUIDFH!! (QWHUSULVH%HDQ

-(($3,

QRPHWKRGV

QRPHWKRGV

-(($3,

LQWHUIDFH!! (-%2EMHFW VHYHUDOPHWKRGV

<28ZULWHWKLV LQWHUIDFH WKHUHPRWH FRPSRQHQW LQWHUIDFH

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

LQWHUIDFH!! 6HVVLRQ%HDQ

-(($3,

VHYHUDOPHWKRGV

%RRN&DUW%HDQ

<28ZULWHWKLV FODVV DGG%RRN UHPRYH%RRN WKHEHDQFODVV VKRZ%RRNV,Q&DUW GR&KHFNRXW RWKHUPHWKRGV


QRZ 7KHH[DPH[SHFWV\RXWRN YHV GOL WKR PH FK HD H[DFWO\ZKHUH WKRGV PH LFK ZK QRZ WRN HG QH


&KDSWHU

ookCCartBean ookCart interfdoacese! not implement the ut it sure looks lik e it does...)

The bean developer must make sure that h the the bean class has methods that matcexac tly e, rfac inte t onen methods in the comp the ment imple DID class as if the bean component interface.

DUFKLWHFWXUDORYHUYLHZ

WKHUH DUH QR

'XPE 4XHVWLRQV

Q:

)JUSTWANTTOBESURE)MCLEARABOUTTHIS INTERFACESCAN%84%.$OTHERINTERFACES

A:

9ES INTERFACESHAVETHEIROWNINHERITANCETREE )NFACT WITHINTERFACES YOUCANDOSOMETHINGYOU CANTEVERDOWITHACLASSˆANINTERFACECANEXTEND MORETHANONEINTERFACE

LQWHUIDFH&DUWH[WHQGV(-%2EMHFW&DUW%XVLQHVV

Q:

"UTWHATDOESTHATREALLYMEANWHENAN INTERFACEEXTENDSANOTHERINTERFACE%XTENDING MEANSINHERITANCE BUTWHATISTHEINTERFACE INHERITING

A:

7HENONEINTERFACEEXTENDSANOTHER IT INHERITSEVERYTHINGFROMTHATINTERFACE7HOEVER IMPLEMENTSANINTERFACEMUSTIMPLEMENTNOTJUSTTHE METHODSFROMTHATINTERFACE BUTALSOTHEMETHODS FROMEVERYINTERFACETHATINTERFACEEXTENDSALLTHE WAYUPTHEINTERFACEINHERITANCETREE 3O INTHISEXAMPLE WHOEVERIMPLEMENTS"OOK#ART MUSTALSOIMPLEMENTTHEMETHODSOF%*"/BJECT

:KHQ\RXLPSOHPHQW DQLQWHUIDFH\RXPXVW LPSOHPHQWDOOWKH PHWKRGVWKDWLQWHUIDFH LQKHULWVIURPLWVVXSHU LQWHUIDFHV 6RZKRHYHULPSOHPHQWV %RRN&DUWPXVWLPSOHPHQW WKHPHWKRGVIURPERWK %RRN&DUWDQG(-%2EMHFW

Q:

7HYDOESNTTHEBEANIMPLEMENTTHE 2EMOTEBUSINESSINTERFACE)SNTTHEWHOLE POINTOFANINTERFACEIMPLEMENTATIONTOUSETHE COMPILERTOKEEPYOUHONEST ANDTOSUPPORT*AVA TYPE CHECKING

A:

9OUASKEDTHISQUESTIONBEFORE"UT HEY WEALLFORGETTHINGS SOWELLREMINDYOUAGAIN4HE BEANDOESNTIMPLEMENTTHE2EMOTEINTERFACE BECAUSETHEBEANISNEVERSUPPOSEDTOBEA 2EMOTEOBJECTINTHE*AVA2-)SENSE )NOTHER WORDS YOUNEVEREVERWANTANYONETOHAVEASTUB TOTHEACTUALBEAN)FYOUWERETOSOMEHOWSNEAK AREMOTEREFERENCEIEASTUB OUTTOTHEWORLD YOUDBEDEFEATINGTHEWHOLEPURPOSEOF%*")FYOU LETACLIENTTALKDIRECTLYTOTHEBEAN THENTHESERVER WOULDNTBEABLETOAPPLYITSSERVICES ANDIFYOU DONTNEEDTHESERVICESYOUSEEWHEREWEREGOING HERE 4ECHNICALLY ITISLEGALTOHAVETHEBEANIMPLEMENT THE2EMOTEINTERFACE BUTITSAREALLYBADIDEA SINCE YOUCOULDMAKEMISTAKESTHATWOULDNTBECAUGHT ATCOMPILETIMEBUTWHICHWOULDBLOWUPLATER  "UTYOUDONTNEEDTODOIT SINCEVIRTUALLYALLBEAN DEVELOPMENTTOOLSINCLUDINGNEARLYEVERYBEAN AWARE)$% UNDERSTANDTHERELATIONSHIPBETWEEN THEBEAN THE%*"/BJECT ANDTHE2EMOTEINTERFACE ANDTHEYGUARANTEETHATTHECOMPONENTINTERFACE ANDTHEBEANCLASSHAVEMATCHINGMETHODS

Q:

"UTWHATIF)JUSTlNDTHISTOODISTURBING 4HISWHOLEIDEAVIOLATESMY*AVASENSIBILITIES THE VERYPRINCIPLESUPONWHICH)CODE3URELYTHERE MUSTBESOMETHING)CANDO

A:

9OUCOULDTRUSTUSONTHEWHOLEhYOURE ALMOSTCERTAINLYUSINGTOOLS SOITREALLYWONT MATTER2EALLYvTHING BUTNOSOIFYOUINSIST YES THEREISSOMETHINGYOUCANDOTHATLLPROBABLYHELP YOUFEELBETTER)TSONTHENEXTPAGE BUTYOUCAN PROBABLYFIGUREITOUTYOURSELFANYWAY .ONETHELESS WERESTICKINGBYOURSTORYTHATMOST DEVELOPERSWONTNEEDTODOTHIS \RXDUHKHUH



LQWHUIDFHLPSOHPHQWDWLRQ

$GHVLJQIRUWKRVHZKRIHHO VTXHDPLVKWKDWWKHEHDQ GRHVQ·WLPSOHPHQWWKH EXVLQHVVPHWKRGLQWHUIDFH

LQWHUIDFH!! 5HPRWH

Create an inte the business metrfhoace that has not extend EJBObjds, but does not a remote interfect (so itÕs ace).

LQWHUIDFH!! (QWHUSULVH%HDQ QRPHWKRGV

QRPHWKRGV

LQWHUIDFH!! %RRN&DUW%XVLQHVV

LQWHUIDFH!! (-%2EMHFW VHYHUDOPHWKRGV

DGG%RRN UHPRYH%RRN VKRZ%RRNV,Q&DUW GR&KHFNRXW

LQWHUIDFH!! 6HVVLRQ%HDQ VHYHUDOPHWKRGV

LQWHUIDFH!! %RRN&DUW

%RRN&DUW%HDQ

QRPHWKRGV

DGG%RRN UHPRYH%RRN VKRZ%RRNV,Q&DUW GR&KHFNRXW RWKHUPHWKRGV

ace nent intebrfject o p m o c e h t Now, both the EJBO ss extends e AND the busine interfac interface. method



&KDSWHU

Make the bean class pleme nt both the SessionBeanimint er fa AND the business me od ce interface. Now, the cothmp make sure you have the rigiler will methods in the bean class. ht

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


WKH&RQWDLQHU



7KH&RPSRQHQWLQWHUIDFH H[WHQGVMDYD[HME(-%2EMHFW



7KH(-%2EMHFWFODVV LPSOHPHQWV\RXU&RPSRQHQWLQWHUIDFH 



7KH%HDQFODVV LPSOHPHQWVMDYD[HME6HVVLRQ%HDQ RUMDYD[HME(QWLW\%HDQ



7KH(-%2EMHFWVWXEFODVV LPSOHPHQWV\RXU&RPSRQHQWLQWHUIDFH DQGNQRZVKRZWRWDONWRWKH(-%2EMHFW



7KH+RPHLQWHUIDFH H[WHQGVMDYD[HME(-%+RPHZH¶OO WDONDERXWWKLVRQWKHQH[WSDJH



7KH+RPHFODVV LPSOHPHQWV\RXU+RPHLQWHUIDFH



7KH+RPHVWXEFODVV LPSOHPHQWV\RXU+RPHLQWHUIDFH DQGNQRZVKRZWRWDONWRWKH+RPH

&RQWDLQHU


W (-% 2EMHF

&RQWDLQHU



5HPRWH REMHFW

(Q

DQ

VWXE

VHUYHU

VHUYLFHV

&OLHQW

FRPSRQHQWLQWHUIDFH

We havenÕt lked about so we donÕt ta show it on thisthpie Home yet, cture.

WHUS VHEH UL




&KDSWHU

DUFKLWHFWXUDORYHUYLHZ

(-%2EMHFW+H\%HDQLHGRQ·W\RXHYHUJHWWLUHGRI DOZD\VKDYLQJPHLQWKHPLGGOHRIHYHU\WKLQJ"'RQ·W \RXHYHUMXVWZDQWWRKDYHDGLUHFWFRQYHUVDWLRQZLWK VRPHRQH" %HDQ1R,·PWRRLPSRUWDQW,·PWRRYDOXDEOH$QG ,·PVXUHDVKHOOQRWJRQQDVWDUWVFUHHQLQJP\RZQFDOOV 7KDW·VZKDW\RXSHRSOHDUHIRU (-%2EMHFW
(-%2EMHFW,JXHVVWKDWPDNHVVHQVH
%HDQ/RRNP\ZRUNLVWRRLPSRUWDQWWREH LQWHUUXSWHGE\FOLHQWVZKRKDYHQREXVLQHVVFDOOLQJPH LQWKHÀUVWSODFH'R\RXKRQHVWO\WKLQNWKDW,DPJRLQJ WRFKHFNVHFXULW\FOHDUDQFHVIRUHYHU\FDOOHU"/LNH, GRQ·WKDYHEHWWHUWKLQJVWRGR"

%HDQ:HOOWKLQNDERXWHQWLW\EHDQVIRUDPLQXWH,I ,·PDQHQWLW\EHDQWKDWPHDQV,·PUHSUHVHQWLQJVRPH HQWLW\LQWKHXQGHUO\LQJSHUVLVWHQWVWRUHDQG³

(-%2EMHFW2.VRLW·VUHDOO\MXVWDVHFXULW\WKLQJEXW ,GRQ·WVHHZK\\RXFDQ·WMXVWKDYHWKHFRGHWRFKHFN WKHVHFXULW\DFFHVVRIWKHFDOOHU7KDWZRXOGVDYHDORW RIRYHUKHDG QDPHO\0( 

%HDQ8KQHZVÁDVKWKHZRUGSKUDVH´SHUVLVWHQW VWRUHµLVQRWDV\QRQ\PIRU´GDWDEDVHµ$GDWDEDVHLV MXVWRQHH[DPSOHRIDSHUVLVWHQWVWRUH%XWLILWPDNHV \RXIHHOEHWWHUWRWKLQNDERXWLWWKDWZD\JRDKHDGIRU QRZ%XWDV,ZDVVD\LQJLI,UHSUHVHQWDQHQWLW\VD\ DFXVWRPHUQDPHG7RP'XIIWKHQZKDWKDSSHQVLIWKH FOLHQWFDOOVP\JHW$GGUHVV PHWKRG"7KHVHUYHUFDQ·W MXVWKDQGPHWKHFDOO

%HDQ)LUVWRIDOOVHFXULW\LVMXVW21(RIWKHUHDVRQV \RXKDYHWRWDNHP\FDOOV,·OOJHWWRWKRVHRWKHU UHDVRQVLQDPLQXWH%XWDVIRUSXWWLQJLQFRGHWRGRP\ RZQFKHFNVDFWXDOO\,&$1GRWKDWLIWKHSURJUDPPHU ZDQWVPHWR%XWLW·VXVXDOO\QRWWKHZD\WRKDQGOH VHFXULW\ (-%2EMHFW:KDW·VZURQJZLWK\RXKDQGOLQJWKH VHFXULW\FKHFNVLQ\RXURZQFRGH" %HDQUROOVH\HV@)LUVW LIWKHVHFXULW\FKHFNVDUHFRGHGLQWRPHWKHQ,·PQRW DVUHXVDEOH7KHZKROHSRLQWRI(-%LVWRFRQÀJXUHDQG FXVWRPL]HEHDQVDWUXQWLPHZLWKRXWUHZULWLQJWKHFRGH ,I,·YHJRWVHFXULW\SURJUDPPLQJLQP\-DYDFRGHWKHQ LWFDQ·WEHFKDQJHGZLWKRXWWRXFKLQJWKHVRXUFH$QG ZKRZDQWVWKDW"

(-%2EMHFW³ZDLW³E\SHUVLVWHQWVWRUHGRQ·W\RXMXVW PHDQ'$7$%$6(":K\GRQ·W\RXMXVWVD\GDWDEDVH"

(-%2EMHFW%HFDXVH %HDQ%HFDXVH,KDYHWRORDGLQ7RP'XII·V LQIRUPDWLRQIURPWKHGDWDEDVHÀUVW (-%2EMHFW%HFDXVH %HDQ%HFDXVH,·GUHWXUQDQDGGUHVVWKDWPLJKWQRW HYHQEHYDOLG8QOHVV,·PVWLOOLQDSUHYLRXVWUDQVDFWLRQ ZLWKWKLVFOLHQWWKHQWKHVHUYHUKDVWRWHOOPHWR ORDGP\VHOIZLWK7RP'XII·VGDWDEDVHLQIR%()25( WKHVHUYHUWHOOVPHWRUXQWKHJHW$GGUHVV PHWKRG 2WKHUZLVHZKRNQRZVZKDW,·GUHWXUQ"2.ZHOOWKDW·V ODVWFDOOVRZH·OOKDYHWRFRQWLQXHWKLVVRPHRWKHUWLPH \RXDUHKHUH



(-%DUFKLWHFWXUH

there are no

Dumb Questions

Q:

(OWANDWHENDOESTHE CONTAINERCREATETHE%*"/BJECTAND THE(OMEANDTHESTUBS

A:

7HENYOUDEPLOYABEAN THECONTAINERLOOKSATTHE$$AND TAKESITFROMTHERE2EMEMBER THE $$GIVESTHEFULLYQUALIFIEDNAMEOF YOUR2EMOTE#OMPONENT%*"/BJECT INTERFACEANDYOUR2EMOTE(OME INTERFACE3O ONCETHECONTAINERGETS THOSEINTERFACES ITGENERATESCODE FORTHETWOCLASSESIMPLEMENTING THOSEINTERFACES!NDBECAUSETHEYRE 2EMOTE THECONTAINERALSOCREATES THECLIENTSTUBSTHATKNOWHOWTO COMMUNICATEBACKTOTHE2EMOTE OBJECTS

Q:

!RETHESEALWAYSPLAINOLD2-) STUBS)SEETHATWHENWEDEPLOYED USINGTHE2) ITPRINTEDOUTAMESSAGE THATITWASRUNNINGRMIC

A:

4HECONTAINERCANDOWHAT EVERITWANTSTOCREATETHESTUBSTHE REQUIREMENTISTHATTHESTUBSBE2-) ))/0COMPLIANT)NFACT ASERVERCAN USESOMETHINGCALLEDDYNAMICPROXIES TOIMPLEMENTTHESTUBFUNCTIONAL ITY BUTWEDONTCARE7HENWESAY hSTUBvWEMEANSOMETHINGWITHSTUB BEHAVIOR7HETHERITSAN2-)STUBOR SOMETHINGELSE ISANIMPLEMENTATION DETAILFORTHESERVER7ELLLOOKATTHAT INMOREDETAILINTHENEXTCHAPTER4HE BOTTOMLINEISTHATYOUREALLYDONT KNOWWHATTHESTUBCLASSCODELOOKS LIKE&ORTHATMATTER YOUREALLYDONT KNOWHOWTHE%*"/BJECTANDTHE (OMEAREIMPLEMENTED9OURENOT SUPPOSEDTOKNOW 9OUMIGHTHAVEAN%*"CONTAINERTHAT



&KDSWHU

LETSYOUVIEWPOSSIBLYEVENHACK THEGENERATEDSOURCECODE BUTDONT COUNTONIT!NDIFWEWEREYOU WE JUSTWOULDNTGOTHERE EVENIFWE COULD

Q:

3OTHESECLASSESAREUPTOTHE VENDORSIMPLEMENTATION

A:

9ES4HEVENDORHASALLSORTS OFCHOICESFORIMPLEMENTINGTHESE CLASSESANDMIGHTUSETHESTUBSAND OR(OMEAND%*"/BJECTSTOGETSOME PERFORMANCEADVANTAGES"UTAGAIN THATSNOTUPFORYOUTOMESSWITH OR EVENKNOWABOUT 4HEONLYREQUIREMENTINTHESPEC THATYOUREGUARANTEEDANDREQUIRED TOADHERETO ISTHAT2EMOTEOBJECTS MUSTFOLLOWTHERULESFOR2-) ))/0 WHICHMEANS*AVAS2EMOTE-ETHOD )NVOCATIONUSINGTHE))/0#/2"! STANDARD WIREPROTOCOL

Q:

9OUBROUGHTITUPHOWIS2-) ))/0DIFFERENTFROMREGULAR2-)

A:

0LAINOLD2-)USES*2-0ASITS WIREPROTOCOL"UT))/0LETS2EMOTE OBJECTSINTEROPERATETHROUGH#/2"! WEWONTBESAYINGMUCHATALLABOUT #/2"!INTHISBOOKITSDEFINITELYOUT OFSCOPEFORTHEEXAMANDTHEBOOK EXCEPTINAFEWTINYCASESWELLSEE SCATTEREDTHROUGHOUTTHECHAPTERS  4HATGIVESYOUROBJECTSACHANCETOBE ACCESSED FOREXAMPLE BYEVENNON *AVACLIENTS/NETHING))/0SPECIFIESIS THEWAYINFORMATIONFORTRANSACTIONS ANDSECURITYCANBEPROPAGATED ALONGWITHTHEMETHODCALL ANDYOUR CONTAINERMIGHTBETAKINGADVANTAGE OFTHAT

&ORTHEMOSTPART YOULLBARELYNOTICE THEDIFFERENCEBETWEENPLAINOLD2-) AND2-) ))/0"UTTHEREAREACOUPLE OFPLACESWHEREITSDIFFERENT ANDONE OFTHESEDIFFERENCESISDEFINITELYON THEEXAMˆTHENEEDTONARROWASTUB 7ELLCOVERNARROWINGINDETAILINTHE NEXTCHAPTERON#LIENT6IEW&ORNOW JUSTKNOWTHATITSSOMETHINGACLIENT MUSTDOWITHAN%*"STUBTHATTHEY DONTHAVETODOWITHAPLAIN*AVA STUBBECAUSETHE%*"SPECTELLSYOUTO ASSUMETHATTHESTUBISUSING))/0AND THUSMIGHTBEADIFFERENTKINDOFSTUB

Q:

7HENAREWEGOINGTOTALK ABOUTTHE(OME

A: Q:

.EXTPAGE

7HYDIDYOUTAKESOLONG )SNTTHE(OMEIMPORTANT

A:

!SCRUCIALASTHE(OMEIS ITSUSUALLYJUSTTHEWAYYOUGET AREFERENCETOSOMETHINGTHAT IMPLEMENTSTHE#OMPONENTINTERFACE )NOTHERWORDS YOUUSETHE(OMETO GETAN%*"/BJECTSTUBFOR2EMOTE CLIENTS WHICHISALLWEVETALKEDABOUT SOFAR  &OR%NTITYBEANS THE(OMECANHAVE AMOREIMPORTANTROLE ANDWELLSEE THAT BUTEVENWITH%NTITYBEANS THE (OMESPRIMARYUSEISSTILLTOGET %*"/BJECTSTUBS!FTERTHAT MOSTOF THECOMMUNICATIONBETWEENTHE CLIENTANDTHEBEANCOMESTHROUGH THE%*"/BJECTANDNOTTHE(OME -OSTOFTHETIME INFACT CLIENTSUSE THE(OMEJUSTTOGETTHE%*"/BJECT REFERENCE ANDTHENTHE(OME REFERENCEISTOSSEDOUT NOTNEEDED

DUFKLWHFWXUDORYHUYLHZ


(DFKGHSOR\HG6HVVLRQDQG (QWLW\EHDQKDVD+RPH)RU H[DPSOHWKH$GYLFH%HDQKDV DQ$GYLFH%HDQ+RPH1R PDWWHUKRZPDQ\FOLHQWVJHW DQ$GYLFH%HDQWKHUH·VRQO\ RQH$GYLFH%HDQ+RPH 7KH+RPH·VMRELVWRKDQG RXWUHIHUHQFHVWRWKDWEHDQ·V &RPSRQHQWLQWHUIDFH 7HFKQLFDOO\WKHUH¶VDOLWWOHPRUHWRWKHVWRU\ 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

VHUYLFHV

LQVWDQWLDWHVWKH$GYLFH%HDQ+RPHREMHFW DQGUHJLVWHUVLWZLWK-1',

+RPHLQWHUIDFH

FOLHQW

+RPH REMHFW

-1',1DPLQJ 6HUYLFH

³$GYLVRU´ VWXE

 7KHFOLHQWGRHVD-1',ORRNXSRQWKH+RPH

VHUYLFHV

XVLQJWKHUHJLVWHUHGQDPH´$GYLVRUµ

+RPHLQWHUIDFH

FOLHQW

ORRNX S ´$G YLVRU µ



&KDSWHU

+RPH REMHFW

-1',1DPLQJ 6HUYLFH

³$GYLVRU´ VWXE

DUFKLWHFWXUDORYHUYLHZ

VHUYLFHV

 -1',VHQGVEDFNDVWXEWRWKH5HPRWH+RPHREMHFW

+RPHLQWHUIDFH

FOLHQW

+RPH REMHFW

-1',1DPLQJ 6HUYLFH

VWXE

³$GYLVRU´ VWXE

 7KHFOLHQWDVNVWKH+RPHIRUDUHIHUHQFHWRWKH &RPSRQHQWLQWHUIDFHE\FDOOLQJFUHDWH

FUH DWH

VWXE

+RPHLQWHUIDFH

FOLHQW

+RPHLQWHUIDFH

VHUYLFHV

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

+RPH REMHFW

\RXDUHKHUH



WKHKRPH

7KH+RPHREMHFWPDNHVWKH(-%2EMHFW DQGVHQGVEDFNWKHVWXE

+RPHLQWHUIDFH

FOLHQW

+RPHLQWHUIDFH

VHUYLFHV

 1RZWKH´VHUYLFHVµNLFNLQDQGWKHEHDQLVFUHDWHG

VWXE

FUH DWH

EHDQ

+RPH REMHFW

 7KH(-%2EMHFWLVPDGH WKHERG\JXDUGIRUWKLVQHZO\



&KDSWHU

VWXE

VWXE

VHUYLFHV

(-% REMHFW

EHDQ

+RPHLQWHUIDFH

FOLHQW

+RPHLQWHUIDFH

&RPSRQHQWLQWHUIDFH

FUHDWHGEHDQ DQGLWVVWXELVUHWXUQHGWRWKHFOLHQW

+RPH REMHFW

DUFKLWHFWXUDORYHUYLHZ

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

VWXE

VHUYLFHV

&RPSRQHQWLQWHUIDFH

VWXE

(-% REMHFW

EHDQ

+RPHLQWHUIDFH

FOLHQW

+RPHLQWHUIDFH

&RPSRQHQWLQWHUIDFH

WRGR³FDOODEXVLQHVVPHWKRGRQWKHEHDQ :KLFKRI FRXUVHKDVWRJRWKURXJKWKH&RPSRQHQWLQWHUIDFH

+RPH REMHFW

 7KHFOLHQWFDQJHWULGRIKLV+RPHVWXELIKHGRHVQ·W

+RPHLQWHUIDFH

FOLHQW

VWXE

VHUYLFHV

(-% REMHFW

EHDQ

+RPHLQWHUIDFH

VWXE

&RPSRQHQWLQWHUIDFH

&RPSRQHQWLQWHUIDFH

ZDQWDFFHVVWRPRUHEHDQVRIWKLVW\SH $GYLFH%HDQ  EXWKHFDQVWLOONHHSFDOOLQJPHWKRGVRQWKH &RPSRQHQWLQWHUIDFH

+RPH REMHFW

\RXDUHKHUH



(-%DUFKLWHFWXUH

6KDUSHQ \RXU SHQFLO (-%/LIHF\FOH &OLHQWKDVRQO\D +RPHVWXEEXWZDQWV WRLQYRNHDEXVLQHVV PHWKRGRQDEHDQ

,QWKHVFHQDULREHORZDVVXPHWKHFOLHQWKDVSUHYLRXVO\GRQHD-1',ORRNXSDQG JRWWHQEDFNDVWXEWRWKH5HPRWH+RPHREMHFW (YHU\WKLQJLQWKHSLFWXUHLVZKDWKDSSHQV$)7(5WKHFOLHQWKDVWKH+RPHVWXEDQG QRZZDQWVWRJHWDUHIHUHQFHWRDQ(-%2EMHFWDQGXOWLPDWHO\FDOODEXVLQHVVPHWKRG RQWKHEHDQ 1XPEHUWKHDUURZV XVLQJWKHER[HVRYHUWKHDUURZV LQWKHRUGHULQZKLFKWKH\ RFFXU7KHVHDUURZVDUHQ¶WQHFHVVDULO\GLUHFWPHWKRGFDOOV DOWKRXJKWKH\PLJKWEH  EXWUDWKHUDUURZVSRLQWLQJWRWKHQH[W7+,1*WKDWKDSSHQV7HOODVWRU\IRUZKDWKDS SHQVDWHDFKDUURZ7KHUHPLJKWEHPRUHWKDQRQHULJKWDQVZHUGHSHQGLQJRQKRZ \RXWHOOWKHVWRU\6RPHDUURZVDUHPLVVLQJ\RXFDQDGGWKHPLI\RXZDQWRUMXVW DVVXPHVRPHWKLQJVDUHKDSSHQLQJWKDW\RXGRQ¶WKDYHDUURZVIRU

VHUYLFHV

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

(-% REMHFW

VWXE

FOLHQW VWXE

 

+RPH REMHFW

2



The stub tells the Home that the client wants to ÒcreateÓ a bean.













 



&KDSWHU

EHDQ

DUFKLWHFWXUDORYHUYLHZ

:MDD=LHGAFLK

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

 

AREBLUE /5 D VIOLETS E R RE TTENBY9 A S RI 2OSE SAREW E C A RF TE OTEIN 4HE2EM CT BIGPROJE DQUITEA N A D E T R /BJEC 2OSESARE ETHE%*" WILLMAK R E RV E S 4HE T WILLFLOA HEPETALS T D TE E R M RE ER2E O 2OSESA ELF ISNEV TS I S S LA C 4HEBEAN

UTRYIT WORK9O ST E N l TMORE R U NOTO STICKALO 9EAH /+ THESETHINGSWILL ELF ER URS 2EMEMB UPWITHTHEMYO ME IFYOUCO

(-%WKHLQWHUIDFHWKDWH[WHQGV(-%2EMHFWLVFDOOHGWKH HPRWH&RPSRQHQWLQWHUIDFH,WLVZKHUHWKHEXVLQHVVPHWKRGV HGHFODUHG KHFOLHQWQHYHUFDOOVPHWKRGVRQWKHEHDQLWVHOIEHFDXVHWKH HDQLV127D5HPRWHREMHFW KHFRQWDLQHULPSOHPHQWVWKH5HPRWH&RPSRQHQWLQWHUIDFHE\ XLOGLQJDFODVVWKDWLPSOHPHQWVLW7KLVFODVVLVXVHGWRPDNHWKH -%2EMHFWIRUWKHEHDQ 7KHEHDQ·VERG\JXDUG KHFRQWDLQHUDOVRFUHDWHVWKHVWXEWRWKH(-%2EMHFW RXFUHDWHWKH5HPRWH&RPSRQHQWLQWHUIDFHE\ZULWLQJDQ WHUIDFHWKDWH[WHQGVMDYD[HME(-%2EMHFW DQLQWHUIDFHWKDW [WHQGVMDYDUPL5HPRWH 

ƒ
ƒ 7KH+RPHLVWKHIDFWRU\IRUWKHEHDQ,WVPDLQMRELVWRKDQGWKH FOLHQWDUHIHUHQFHWRWKHEHDQ%XWUHPHPEHUWKHFOLHQWFDQQHYHU WUXO\JHWDUHIHUHQFHWRWKHEHDQ³WKHEHVWWKHFOLHQWFDQGRLVWR JHWDUHIHUHQFHWRWKHEHDQ·V(-%2EMHFW

ƒ
ƒ 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

VWXE

FOLHQW

VHUYLFHV

&OLHQW2QH

(-% REMHFW

EHDQ

VWXE

+RPH REMHFW

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

VHUYLFHV

EHDQ

&OLHQW7ZR (-% REMHFW

VWXE

FOLHQW

VWXE



&KDSWHU

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

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

6HUYHU

&OLHQW2QH

VWXE 

FOLHQW

)UHG6PLWK 

)UHG6PLWK·V ERG\JXDUG

EHDQ VWXE

&XVWRPHU WDEOH

(-% REMHFW

'%

VHUYLFHV

+RPH REMHFW

&OLHQW7ZR EHDQ

VWXE

(-% REMHFW

6N\OHU6DQ 

6N\OHU6DQ·V ERG\JXDUG

FOLHQW

VWXE 

VWXE 

\RXDUHKHUH



VHVVLRQEHDQRYHUYLHZ

)ZKPQ\MK\]ZITW^MZ ^QM_" +ZMI\QVOI;\I\MN]T;M[[QWVJMIV



(-% REMHFW

VWXE

VHUYLFHV

$IWHUJHWWLQJD+RPHVWXEWKHFOLHQWFDOOV³FUHDWH´RQWKH+RPH 7KH+RPHFUHDWHVWKHEHDQDQGWKH(-%2EMHFWIRUWKHEHDQDQG KDQGVEDFNWKH(-%2EMHFWVWXE

 EHDQ





FOLHQW

+RPH REMHFW





&KDSWHU

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.

DUFKLWHFWXUDORYHUYLHZ

)ZKPQ\MK\]ZITW^MZ ^QM_" +ZMI\QVOI;\I\MTM[[;M[[QWVJMIV

(-% REMHFW

VWXE



VHUYLFHV

$IWHUJHWWLQJD+RPHVWXEWKHFOLHQWFDOOV³FUHDWH´RQWKH+RPH7KH +RPHJLYHVWKHFOLHQWDVWXEWRDQH[LVWLQJ(-%2EMHFWEXWGRHVQRW DVVRFLDWHDEHDQZLWKWKLV(-%2EMHFW,QVWHDGWKHEHDQVWD\VLQDSRRO XQWLOWKHFOLHQWXVHVWKH(-%2EMHFWVWXEWRFDOODEXVLQHVVPHWKRG

EHDQ





FOLHQW

 +RPH REMHFW



VWXE

EHDQSRRO





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

FOLHQW

6HUYHU

VWXE

VWXE (-% REMHFW

+RPH REMHFW

EHDQ

&OLHQW7ZR (-% REMHFW

EHDQSRRO

VWXE

FOLHQW VWXE

The bean comes out of the pool 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

:K\GRHVWKH³SRRO´DUFKLWHFWXUHZRUNWRPDNH VWDWHOHVVVHVVLRQEHDQVPRUHVFDODEOHEXW QRWVWDWHIXOVHVVLRQEHDQV":K\FDQ¶WVWDWHIXO VHVVLRQEHDQVXVHWKHEHDQSRRO"

there are no

6KDUSHQ \RXU SHQFLO 7)

$VWDWHIXOVHVVLRQEHDQFDQEHVKDUHG EHWZHHQPXOWLSOHFOLHQWV

7)

$QHQWLW\EHDQFDQEHVKDUHGEHWZHHQ PXOWLSOHFOLHQWVDVORQJDVWKHHQWLW\ EHLQJVKDUHGLVWKHVDPH

7)

6WDWHOHVVVHVVLRQEHDQVDUHFUHDWHG ZKHQWKHFOLHQWLQYRNHVFUHDWHRQWKH +RPH

7)

6WDWHIXOVHVVLRQEHDQVDUHFUHDWHG ZKHQWKHFOLHQWLQYRNHVFUHDWHRQWKH +RPH

Dumb Questions

Q:

(ERESSOMETHINGTHATIS2%!,,9 STARTINGTOANNOYMEWHYDOYOUHAVEA #OMPONENTINTERFACEANDA(OMEINTERFACE WHENTHE2EMOTEOBJECTSARECALLEDTHE (OMEANDTHE%*"/BJECT7HYISNTITJUST THE%*"/BJECTINTERFACEANDTHE(OME/BJECT INTERFACE/RTHE(OMEANDTHE%*" INTERFACES7HYTHEINCONSISTENCY

7) 7KHUHPXVWEHRQHVWDWHOHVVVHVVLRQ

EHDQSHUFOLHQWIRUDVORQJDVWKHFOLHQW KROGVDUHIHUHQFHWRDQ(-%2EMHFW

7) 7KHUHPXVWEHRQHVWDWHOHVVVHVVLRQ

EHDQSHUFOLHQWIRUDVORQJDVWKHFOLHQW LVLQWKHPLGGOHRIDEXVLQHVVPHWKRG LQYRFDWLRQRQWKHEHDQ

A:

!CTUALLY THATREALLYPISSESUSOFFTOO"UT YOULLGETUSEDTOIT"ETHANKFUL ITWASEVEN WORSEIFYOULEARNED%*"PRIORTOVERSION WHENITWASCALLEDTHE(OMEANDTHE2EMOTE .OWTHATWASAREALPROBLEMBECAUSE FIRST 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 



&KDSWHU

7)

(DFKHQWLW\EHDQPXVWKDYHLWV (-%2EMHFW

$QVZHUV)7)7)77

YiX`e gfn\i

DUFKLWHFWXUDORYHUYLHZ

there are no

Dumb Questions

Q:

(OWDOESTHISWORK)STHERE ONEBEANPOOLFORALLBEANS ORONE BEANPOOLFORAPARTICULARTYPEOF BEAN

A:

)NREALITY WEDONTKNOWWHAT THECONTAINERIMPLEMENTATIONIS BUT CONCEPTUALLYTHERESONEPOOLFOR EVERYBEANTYPE3O IFYOUDEPLOY AN!DVICE"EANANDA7EATHER"EAN ANDBOTHARESTATELESSSESSIONBEANS THEYLLEACHGETTHEIROWNPOOL

Q:

$OESEACHSTATELESSSESSION BEANHAVEITSOWN%*"/BJECT

A:

3ORTOF!STATELESSSESSION BEANDOESNTNEEDABODYGUARD UNTILHESACTUALLYINVOLVEDINA METHODINVOCATION3O THECLIENT GETSAREFERENCETOAN%*"/BJECT BUTTHEBEANISNTASSOCIATEDWITH THAT%*"/BJECTUNTILTHECLIENTCALLS ABUSINESSMETHOD!TTHATPOINT THEBEANSLIDESOUTOFTHEPOOLTO SERVICETHEMETHOD3O THE%*"/BJECT THECLIENTHASISFORAKINDOFBEAN !DVICE"EAN 7EATHER"EAN ETC BUT NOTASPECIFICINSTANCEOFABEAN

Q:

7HYDONTSTATEFULSESSION BEANSHAVEAPOOL

A:

(AVEYOUALREADYTHOUGHT ABOUTTHISINTHE"RAIN0OWERONTHE PREVIOUSPAGE"ECAUSEIFYOUHAVENT DONTREADANYFURTHERUNTILYOUVE COMEUPWITHYOUROWNIDEAS)FYOU

MADEITTHISFAR WEASSUMETHATYOU ALREADYKNOWTHEANSWERANDWERE JUSTCONFIRMINGIT !STATEFULBEAN REMEMBER HOLDSCLIENT CONVERSATIONALSTATE4HATMEANSTHE BEANHASTOSAVECLIENT SPECIFICSTATE INOTHERWORDS ITHASTOREMEMBER THINGSABOUTTHISCLIENT ACROSS MULTIPLEMETHODINVOCATIONSFROMTHE CLIENT

Q:

(OWLONGDOESASTATEFULBEAN KEEPCLIENT SPECIlCSTATE

A:

/NLYFORTHELIFEOFTHESESSION !SESSIONCONTINUESUNTILTHECLIENT TELLSTHEBEANHESDONEBYCALLING REMOVE ONTHEBEANS#OMPONENT INTERFACE ORTHESERVERCRASHES ORTHE BEANTIMESOUTWELLCOVERTHATINTHE 3ESSIONLIFECYCLECHAPTER 

4HINKOFASHOPPINGCARTAGAINˆA STATEFULBEANNEEDSTOREMEMBER WHATSINTHECLIENTSCARTEACHTIMETHE CLIENTCALLSADD)TEM4O#ART !STATELESS BEAN ONTHEOTHERHAND DOESNTHAVE 3OSTATEFULSESSIONBEANS TOREMEMBERANYTHINGONTHECLIENTS ARENTSCALABLE BEHALF SOTOACLIENT ONESTATELESS BEANOFAPARTICULARTYPE ISASGOOD ASANYOTHERBEANOFTHATTYPE .O THEYARE*USTNOTASSCALABLE )FTHE!DVICE"EANSIMPLYRETURNS ASSTATELESSBEANS APIECEOFADVICENOTCONNECTED INANYWAYTOANYTHINGITTOLDTHE CLIENTBEFOREORANYTHINGTHECLIENT TOLDIT THENTHERESNONEEDFORTHE (OWCANASTATEFULBEANBE !DVICE"EANTOBESTATEFUL)NTHATCASE SCALABLEIFYOUALWAYSNEEDONEBEAN EACHTIMEACLIENTCALLSGET!DVICE FOREVERYCLIENT ONTHE#OMPONENTINTERFACEIETHE %*"/BJECT ANY!DVICE"EANISJUSTAS CAPABLEOFRUNNINGTHEMETHODASANY 9OUDONEEDASEPARATEBEAN OTHER ALLOCATEDFOREACHCLIENT BUTNOTEVERY /NTHEOTHERHAND IFTHE!DVICE"EAN BEANHASTOBEACTIVELYCONSUMING WEREMODIFIEDTORETURN SAY RANDOM RESOURCES)FTHESTATEFULSESSIONBEAN BUTNON REPEATINGADVICE THENTHE CLIENTISTAKINGALONGTIMEBETWEEN !DVICE"EANWOULDHAVETOBESTATEFUL METHODCALLS THESTATEFULBEANCAN SOTHATITCOULDKEEPTRACKOFPREVIOUS BETEMPORARILYTAKENDOWNANDPUT ADVICEANDNEVERREPEATIT INASTATECALLEDPASSIVATION4HISSTATE PRESERVESTHECLIENT SPECIFICSTATE OF COURSE BUTREDUCESTHENUMBEROF BEANSCURRENTLYALIVEINTHESERVER4HE BEANCOMESOUTOFPASSIVATIONAND BACKINTOACTIVEDUTYACTIVATION WHEN THECLIENTCALLSABUSINESSMETHOD

Q:

A: Q:

A:

\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

 VHUYLFHV

M E

FOLHQW





&KDSWHU

D

EHDQ



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).

DUFKLWHFWXUDORYHUYLHZ

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

([HUFLVH

VHUYHU

FOLHQW

(-% REMHFW        

       

(-%2EMHFWLQWHUIDFH EHDQ

FOLHQWFODVV

VWXE

       

'%

EHDQFODVV

VWXE        

KRPHVWXEFODVV

       

KRPHFODVV

+RPH REMHFW

\RXDUHKHUH



EHDQWDEOH

7ZOIVQbMaW]ZJMIV[ ([HUFLVH

)LQLVKWKHWDEOHE\SXWWLQJLQDFKHFNPDUN HYHQEHWWHULI\RX DGGQRWHV LQWKHER[HVFRUUHVSRQGLQJWRWKHODEHOVWKDWDSSO\ WRWKDWEHDQW\SH:H¶YHGRQHRQHRIWKHER[HVIRU\RX,I\RX JHWVWXFNJREDFNWKURXJKWKHSUHYLRXVWZRFKDSWHUVFXHWKHPHVRQJIURP³5RFN\´@

6WDWHIXO6HVVLRQ 6WDWHIXO6HVVLRQ %HDQV %HDQV

8VHVDSRRO

0XOWLSOHFOLHQWVFDQKDYHDUHIHUHQFH WRWKHVDPHEHDQ

*XDUDQWHHGWRVXUYLYHDFRQWDLQHU FUDVK

+DVDFOLHQWYLHZ

$OORZVDV\QFKURQRXVFRPPXQLFDWLRQ

5HSUHVHQWVDSURFHVV

5HSUHVHQWVD´WKLQJµLQDQXQGHUO\ LQJSHUVLVWHQWVWRUH OLNHDGDWDEDVH



&KDSWHU

Yes. Since they donÕt keep any client-speciÞc data, you donÕt need one per each client.

(QWLW\%HDQV

0HVVDJHGULYHQ %HDQV

H[HUFLVHVROXWLRQ

DUFKLWHFWXUDORYHUYLHZ

([HUFLVH 6ROXWLRQV

?PI\OWM[_PMZM'

       

       

VWXE

(-%2EMHFWLQWHUIDFH        

(-% REMHFW

EHDQFODVV

       

(-%2EMHFWLQWHUIDFH

KRPHVWXEFODVV VWXE

FOLHQWFODVV

EHDQ        

       

+RPH REMHFW

KRPHFODVV

FOLHQW

       

KRPHVWXEFODVV

VHUYHU

'%

127(\RXZRQ¶W¿QGD¿QLVKHGVROXWLRQIRUWKH2UJDQL]H
\RXDUHKHUH



(-%DUFKLWHFWXUH

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




&KDSWHU

the client view

5

4 ([SRVLQJ
4




H[DPREMHFWLYHV

7KH&OLHQW9LHZ

2IILFLDO  ,GHQWLI\FRUUHFWDQGLQFRUUHFW VWDWHPHQWVRUH[DPSOHVDERXWWKH FOLHQWYLHZRIDVHVVLRQEHDQ¶VORFDO DQGUHPRWHKRPHLQWHUIDFHVLQFOXGLQJ WKHFRGHXVHGE\WKHFOLHQWWRORFDWHD VHVVLRQEHDQ¶VKRPHLQWHUIDFH

 ,GHQWLI\FRUUHFWDQGLQFRUUHFW VWDWHPHQWVRUH[DPSOHVDERXWWKH FOLHQWYLHZRIDVHVVLRQEHDQ¶VORFDO DQGUHPRWHFRPSRQHQWLQWHUIDFHV



&KDSWHU

:KDWLWUHDOO\PHDQV
WKHFOLHQWYLHZ

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

:KDW,UHDOO\ ZDQWLVWRFDOOD EXVLQHVVPHWKRGRQ DEHDQ

%XW,FDQ·W JHWDUHIHUHQFH WRWKHEHDQ,KDYHWR JRWKURXJKWKHEHDQ·V FRPSRQHQWLQWHUIDFH WKH(-%REMHFW

%XWKRZGR,JHWD UHIHUHQFHWRWKH(-%REMHFW" ,KDYHWRJRWKURXJKWKHEHDQ·V KRPH
\RXDUHKHUH



WKH+RPHLQWHUIDFH

1\ITT[\IZ\[_Q\P\PMPWUMQV\MZNIKM 4HECLIENTWANTSTHEBEAN7ELL TOOBAD4HE CLIENTWILLNEVERGETTHEBEAN BECAUSENOBODY TALKSTOTHEBEANEXCEPTTHECONTAINER  4HEBESTTHECLIENTCANHOPEFORISA REFERENCETOTHEBEANSBODYGUARDˆTHE COMPONENTINTERFACE!NDTHECLIENT GETSAREFERENCETOTHEBEANSCOMPONENT INTERFACEBYCALLINGAMETHODONTHE BEANSHOMEINTERFACE

WKHUH DUH QR

'XPE 4XHVWLRQV

Q:

(OWCOMEYOUSAID h!NDTHECLIENTGETSAREFERENCETO THEBEANSCOMPONENTINTERFACEv9OUCANTHAVEAREFERENCETO ANINTERFACEIN*AVAˆYOUCANREFERENCEANOBJECT BUTYOUCANT REFERENCEANINTERFACE4HEREFERENCEVARIABLECANBEDECLARED ASANINTERFACETYPE BUTTHATSNOTTHESAMETHING

A:

7ELL ACTUALLYITISTHESAMETHING)NTHISBOOK ANDINTHE SPEC ANDINTHEEXAM EVERYWHEREYOUSEETHEPHRASE hREFERENCE TOANINTERFACEv DOAMENTALSEARCHANDREPLACETOMAKEIT hREFERENCETOANOBJECTTHATIMPLEMENTSTHEINTERFACEv )TCANFEELALITTLESTRANGE IFYOUHAVENTREADDOCUMENTSTHATUSE THISCONVENTION BUTYOUBETTERGETUSEDTOIT"UTDONTWORRY BY #HAPTER YOULLWONDERHOWANYONEEVERSAIDITDIFFERENTLY

Q:

9OUSAIDTHECLIENTSULTIMATEGOALISTOCALLMETHODSON THEBEAN/+ THECOMPONENTINTERFACE BUTYOUKNOWWHAT) MEAN "UTWITHENTITYBEANS YOUCANHAVEBUSINESSMETHODS INTHEHOME RIGHT3OWITHENTITYBEANS ISNTITTRUETHAT SOMETIMESTHECLIENTSGOALIS*534TOUSETHEHOME

:KDWWKHFOLHQW5($//< ZDQWVLVDUHIHUHQFHWRWKH EHDQ%XWWKHEHVWWKHFOLHQW FDQGRLVJHWDUHIHUHQFH WRWKHEHDQ·VFRPSRQHQW LQWHUIDFHWKH(-%REMHFW  %XWLIVKHZDQWVDQ(-% REMHFWUHIHUHQFHWKHFOLHQW KDVWRJHWDUHIHUHQFHWRWKH EHDQ·VKRPHLQWHUIDFH 6RWKDW·VZKHUHLWEHJLQV WKHFOLHQWGRHVDORRNXSRQ WKHEHDQ·VKRPH

A:

9ES YOURERIGHT4HEYRECALLEDhHOMEBUSINESSMETHODSv ASOPPOSEDTOPLAINOLDhHOMEMETHODSvORPLAINOLDhBUSINESS METHODSv "UTTHEYREASPECIALCASEWELLLOOKATLATERINTHE BOOK4HEREAREOTHERREASONS TOO FORWHYYOUMIGHTNEEDONLY THEHOMEOFANENTITYBEAN&OREXAMPLE IFYOUWANTTOCREATEA BUNCHOFNEWCUSTOMERSINADATABASE BUTYOUDONTWANTTODO ANYOTHEROPERATIONSONREFERENCESTOTHOSEENTITYCUSTOMERS



&KDSWHU

:HXVHWKHZRUG³(-%REMHFW´WRPHDQWKH EHDQ¶VFRPSRQHQWLQWHUIDFH WKHERG\JXDUG  LHWKHWKLQJUHFHLYLQJPHWKRGFDOOVPHDQW IRUWKHEHDQUHJDUGOHVVRIZKHWKHUWKHFOLHQW LVORFDORUUHPRWH

WKHFOLHQWYLHZ

0W_IKTQMV\][M[I[M[[QWVJMIV" KZMI\M][MIVLZMUW^M LQWHUIDFH!! 5HPRWH



Note: over the next sev eral pages, weÕre lookin REMOTE interfaceg satfoonly the r a bean. Later weÕll see ÒlocalÓ versions). the special-case

&UHDWH &OLHQWDVNVWKHKRPHLQWHUIDFHIRUDUHIHUHQFHWR WKHEHDQ¶VFRPSRQHQWLQWHUIDFH

LQWHUIDFH!! (-%+RPH PHWKRGV

:KLFKPHDQVWKHFOLHQWFDOOVDFUHDWH PHWKRG RQWKHKRPHVWXE LQWHUIDFH!! $GYLFH+RPH

FUHDWH



8VH

per must The bean deve()lome thod te ea cr put a me ho Õs in the bean

LQWHUIDFH!! 5HPRWH

&OLHQWFDOOVEXVLQHVVPHWKRGVGHFODUHGLQWKH FRPSRQHQWLQWHUIDFH :KLFKPHDQVWKHFOLHQWFDOOVPHWKRGVRQWKH(-% REMHFWVWXE



LQWHUIDFH!! (-%2EMHFW UHPRYH PRUHPHWKRGV

BObject The javax.ejb.s EJ ve() re a interface ha clientmocan e th od meth call.

5HPRYH &OLHQWWHOOVWKHEHDQWKDWKH¶VGRQHXVLQJLW :KLFKPHDQVWKHFOLHQWFDOOVUHPRYH RQWKH EHDQ¶V(-%REMHFWVWXE

LQWHUIDFH!! $GYLFH

JHW$GYLFH

In the c the deveolompeponent interface, business met r puts in the compone hods, but since the EJBnOtbjeinterface EXTENthDeS client se t ct interface, the he methods BOTH inetserf 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 to ÒicÓ is a re lookup service.

&RQWH[WLF QHZ,QLWLDO&RQWH[W  2EMHFWR LFORRNXS ³$GYLVRU´  DIHZPRUHVWHSV

Give it a name (whatever the used to regist bean loyer er and get back an that bean with thedep server) object. ings into a JNDI organizesorythtr eeÓ. Òvirtual direct r e tree is eitheed Each level of thdi a all (c y or ct re al another virtu an object. ÒcontextÓ) or...

?PI\¼[26,1' *.$)STANDSFOR*AVA.AMINGAND $IRECTORY)NTERFACE ANDITSAN!0)FOR ACCESSINGNAMINGANDDIRECTORYSERVICES !LTHOUGH*.$)ISQUITEPOWERFUL THERE AREONLYAFEWPIECESOFITYOUNEEDTO KNOWFOR%*"ˆHOWCLIENTSlNDIT HOW CLIENTSUSEIT HOWBEANSUSEIT ANDHOWTO PUTTHINGSINTOIT 4HE*.$)!0)CANWORKWITHMANY DIFFERENTSERVICES ASLONGASTHAT REM SERVICEHASA*.$)DRIVERCALLEDA 3ERVICE0ROVIDER )TSALOTLIKE*$"# WHEREYOUTHEDEVELOPER USETHE*$"# !0)TOSEND31,STATEMENTSTOAVARIETY OFDIFFERENTDATABASES4HE*.$)DRIVER TRANSLATESTHEMETHODCALLSYOUMAKE ONTHE*.$)!0)INTOSOMETHINGTHE UNDERLYINGNAMINGDIRECTORYSERVICE UNDERSTANDS



&KDSWHU

IRR

a JNDI Ôc

EDU

ED]

ontextÕ

REM

just a plain old

object

REM

a JNDI context can hold objects as well as other contexts.

EDW WD] REM REM

]RR

WKHFOLHQWYLHZ

$-1',´YLUWXDO GLUHFWRU\WUHHµ

*HWWLQJWKHKRPHLQWHUIDFHVWXE IRR 

LetÕs say thatthe ÒbarÓ is where is InitialContext for your beans.

*HWDQ,QLWLDO&RQWH[W &RQWH[WLF QHZ,QLWLDO&RQWH[W  7KH,QLWLDO&RQWH[W DVXEW\SHRI&RQWH[W LV\RXUHQWU\ SRLQWLQWRWKH-1',WUHH,W¶VVLPSO\WKH¿UVWFRQWH[WIURP ZKLFK\RXVWDUWQDYLJDWLQJ.LQGRIOLNH\RXUFXUUHQW ZRUNLQJGLUHFWRU\ WKHRQH\RXFGWR  7KH,QLWLDO&RQWH[WFRQVWUXFWRU¿JXUHVRXWZKHUH\RX VKRXOGVWDUW :H¶OOWDONDERXWWKDWLQDPLQXWH %RWK &RQWH[WDQG,QLWLDO&RQWH[WDUHSDUWRIWKHMDYD[QDPLQJ SDFNDJHSDUWRI-((EXWDOVRDGGHGWR-6(ZLWK YHUVLRQ

EDU

ED]

REM REM

REM

$GYLVRU

&XVWRPHU 7D[5DWH

t you start wi,thifis Whichever contex ext. For example your InitialContex s ÒtazÓ, then nt the InitialCo yotu wa lookup from uld co the only thing the ÒItemDBÓ object here would be

EDW WD] REM 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 7KHUHWXUQW\SHRIWKHFRQWH[WORRNXSPHWKRGLV2EMHFW VR\RXKDYHWRFDVWLWEDFNWRWKHEHDQ¶VKRPHLQWHUIDFH W\SHEHIRUH\RXFDQFDOO$GYLFH+RPHPHWKRGV

isnÕt quite Warning: This coh de it LOOKS like it right... althougl Þn out whatÕs should be. WeÕl fewd pages. wrong in just a

\RXDUHKHUH



WKH+RPHLQWHUIDFH

WKHUH DUH QR

'XPE 4XHVWLRQV

Q:

(OWDO)KNOWWHATTHE DEVELOPERNAMEDTHEBEAN

A:

!CTUALLY ITSNOTUPTOTHEBEAN DEVELOPERTHE%*"ROLEKNOWNAS"EAN 0ROVIDERˆTHEONEWHOACTUALLYWROTE THEBEANCODE TOGIVETHEBEAN ITS*.$)NAME2EMEMBER THE"EAN 0ROVIDERMIGHTHAVEWRITTENTHATBEAN ASAREUSABLECOMPONENTFOR"EANS@2 5SANDTHUSMIGHTHAVENOIDEAWHERE ANDHOWTHEBEANWILLBEUSED )TSTHEDEPLOYERˆTHEPERSONWHO ACTUALLYGETSTHEBEANRUNNINGINTHE SERVERASPARTOFSOMEAPPLICATIONˆ WHOREGISTERSTHEBEANUNDERA LOGICALNAME"UTTHEBOTTOMLINEIS THATTHERESNOSTANDARDORAUTOMATIC MECHANISMFORLEARNINGTHENAMES OFREGISTEREDBEANS!SACLIENT SOMEBODY SOMEHOW HASTOTELLYOU THAT SAY THEBEANWASREGISTEREDAS h!DVISORv .OTICETHATh!DVISORv WHILEDESCRIBING THESERVICE ISNOTA3TRINGTHAT CORRESPONDSDIRECTLYTOTHENAMESOF ANYOFTHEOTHERPIECESOFTHEBEAN 2EMEMBER THECOMPONENTINTERFACE WAS!DVICE THEHOMEINTERFACEWAS !DVICE(OME ANDTHEBEANITSELFIS !DVICE"EAN4HENAMEh!DVISORvWAS JUSTSOMETHINGTHEDEPLOYERTHOUGHT HADANICERINGTOIT /FCOURSE INYOURCOMPANY YOUMIGHT ANDPROBABLYWILL HAVESTRICTNAMING GUIDELINESTOFOLLOWFORHOWBEANSARE REGISTEREDWITH*.$)ATDEPLOYMENT TIME 5NLESSITSYOUROWNCOMPANY IN WHICHCASEYOUCANDOWHATEVERYOU DARNWELLPLEASE INCLUDINGNAMING EACHBEANAFTERYOURFAVORITEROCKSTAR OR-ATRIXCHARACTER



&KDSWHU

Q:

)JUSTTHOUGHTOFANEVEN ")''%2PROBLEMHOWTHEHECKDO) KNOWWHERETOlNDTHESERVER!ND HOWDO)SPECIFYIT)DIDNTSEEANY CODEFORAN)0ADDRESSOR4#0PORT NUMBER

A:

'OODCATCH9EAH THATSALL ABITOFAMYSTERY ISNTIT7EHAVE THREEANSWERSFORNOW

)RUWKHH[DP\RXGRQ¶WQHHG WRNQRZPXFKDERXW-1',

 7ERECHEATINGALITTLE BECAUSE THECODEWEREUSINGWORKSONLY BECAUSEWEREUSINGTHE2EFERENCE )MPLEMENTATION ANDEVENTHENONLY BECAUSEWERERUNNINGTHESERVERON THESAMEPHYSICALMACHINEASTHE CLIENT3O WERETAKINGADVANTAGE OFDEFAULTSETTINGSTHATAREINPLACE AUTOMATICALLY BECAUSEWERERUNNING THE2EFERENCE)MPLEMENTATION

)RUWKHFOLHQWUHODWHGREMHFWLYHV WKHRQHVIURPWKLVFKDSWHU  DOO\RXQHHGWRNQRZLVWKH IXQGDPHQWDOSURFHVVIRUGRLQJD -1',ORRNXSWKDW\RXQHHGWR VWDUWZLWKDQ,QLWLDO&RQWH[WDQG WKHQFDOOORRNXS ZKLFKUHWXUQV VRPHWKLQJRIW\SH2EMHFW

 7ELIEDALITTLEINPOINTNUMBER ABOVE BECAUSETHISCODECOULDBE CORRECTIFITWEREINSIDEABEAN7ELL GETTOTHATINTHE"EAN%NVIRONMENT CHAPTER


 )NREALITY ACLIENTDOESNEEDTO KNOWHOWTOFINDTHE*.$)SERVICE WHEREABEANSHOMEISREGISTERED 4HEREARESEVERALWAYSYOUCANDO THISˆYOUCOULDPASSINFORMATION TOTHE)NITIAL#ONTEXTCONSTRUCTOR A0ROPERTIESOBJECTTHATCONTAINS EVERYTHINGTHE)NITIAL#ONTEXTNEEDS TOFINDTHESERVERANDTHESTARTING CONTEXT /R THEREARESEVERAL PLACESWHERE*.$)PROPERTIESCAN BEPLACEDONTHECLIENTSMACHINE )NEITHERCASE THECLIENT-534BE GIVENSOMETHINGˆEITHERINFOFOR THE)NITIAL#ONTEXTCONSTRUCTOR ORA PROPERTIESFILE)TSDIFFERENTFOREACH VENDORSSERVER TOO SOYOUHAVETO CHECKYOURDOCUMENTATIONINORDER TOKNOWWHATTHECLIENTNEEDS

,QWKH%HDQ(QYLURQPHQW FKDSWHUZH¶OODGGDWLQ\ELWPRUH -1',LQIRIRUKRZWKHEHDQLWVHOI XVHV-1',WRORRNXSWKLQJVWKDW KDYHEHHQVSHFL¿FDOO\SODFHG WKHUHIRUWKHEHDQ %XWWKDW¶VDERXWLWIRU\RXU-1', NQRZOHGJH
WKHFOLHQWYLHZ

4M\¼[\ISMIVW\PMZTWWSI\\PMKWUXTM\MKTQMV\KWLM LPSRUWMDYD[QDPLQJ  LPSRUWMDYDUPL  LPSRUWMDYD[UPL  LPSRUWKHDG¿UVW  LPSRUWMDYD[HME 

weÕll look A bunch of impoivirtdus, ally at the at each one ind page bottom of the

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

o the is our entry pointdoint e lookup th we e er , wh DI naming service JN rÓ SXEOLFYRLGJR ^ on the name ÒAdviso WU\^ What is THIS??? Why &RQWH[WLF QHZ,QLWLDO&RQWH[W  not just a plain old ca 2EMHFWR LFORRNXS ³$GYLVRU´  st?  $GYLFH+RPHKRPH  $GYLFH+RPH 3RUWDEOH5HPRWH2EMHFWQDUURZ R$GYLFH+RPHFODVV   Call create on the home $GYLFHDGYLVRU KRPHFUHDWH  to get us wh

REALLY want Ñ the

6\VWHPRXWSULQWOQ DGYLVRUJHW$GYLFH  `FDWFK 5HPRWH([FHSWLRQUH[ ^ UH[SULQW6WDFN7UDFH  `FDWFK &UHDWH([FHSWLRQFH[ ^ FH[SULQW6WDFN7UDFH  `FDWFK ([FHSWLRQH[ ^ H[SULQW6WDFN7UDFH  ` ` `

at component interfawe ce.

The point of everything! To call a business method on the bean (via the EJBObject stub) to handle (or ns Not a good way le) exceptio nd ha rather, NOTe want to show some here... but wked exceptions... of the chec

6KDUSHQ \RXU SHQFLO -ATCHTHECLASSNAMEWITH THEPACKAGEITSFROM9OUCAN USETHESAMEPACKAGENAME MORETHANONCE )FYOURENOTSURE MAKEYOUR BESTGUESS

0ACKAGE.AME

#LASS.AME

MDYD[QDPLQJ

,QLWLDO&RQWH[W

MDYDUPL

$GYLFH+RPH

MDYD[UPL

3RUWDEOH5HPRWH2EMHFW

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  2EMHFWR LFORRNXS ³$GYLVRU´  $GYLFH+RPHKRPH  $GYLFH+RPH R

, but isnÕt. This LOOKS right interface, With a Remoteenhooume . gh t casting is no

*]\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 )NOTHERWORDS ITGIVESUSBACKSOMETHINGWECANTHENCAST TOTHEHOMEINTERFACETYPE ANDCALLCREATE 

3RUWDEOH5HPRWH2EMHFWQDUURZ R$GYLFH+RPHFODVV 

the object you got from JNDI

the interfac pe you want it to bee. ty It must be a Remote inte rface!

HWDLOVRI,,23 NQRZWKHG WR G HH Q ¶W Q
7KHKRPHVWXEUHWXUQHGIURP D-1',ORRNXSPLJKWQRW LPSOHPHQWWKHKRPHLQWHUIDFH
\RXDUHKHUH



3RUWDEOH5HPRWH2EMHFWQDUURZ

:LWKD5HPRWH KRPHVWXEIURP -1',DQRUGLQDU\FDVW LVQ·WJRRGHQRXJK
7KLQNRIQDUURZLQJDV ´([RWLF&DVWLQJµ .ARROWINGISNOTTHESAMEASCASTING BUTYOU CANTHINKOFITASAFORMOFhEXOTICCASTINGv #ASTINGISABOUTPOLYMORPHISM7ITHACAST THEOBJECTDOESNTCHANGE BUTTHEWAYYOU REFERTOTHATOBJECTDOES7ITHNARROWING YOU MIGHTACTUALLYGETADIFFERENTOBJECT &DVW $QLPDODQL QHZ'RJ  'RJ¿GR  'RJ DQL

u see Casting lets yo multiple in ct je ob ONE e re fe ways. The reines nc t ha w rm te de type ll, ca n ca u methods yo ct itself but the obje itÕs a Dog. always knows

'RJ REMHFW

Yfa ^a\g $QLPDO 'RJ

1DUURZ QDUURZ R$GYLFH+RPHFODVV  ,,23 VWXE

g 2EMHFW

`ge] $GYLFH+RPH



&KDSWHU

KRPH VWXE

The narrow method might return a completely different object (or it might not). But regardless, youÕll get a stub that really DOES implem the interface, so youent can then cast it.

WKHFOLHQWYLHZ

1RZWKDWZH ÀQDOO\ KDYHWKHKRPHVWXE OHW·VXVHLWWRJHWZKDWZH5($//<ZDQW



&DOOFUHDWH RQWKHKRPHLQWHUIDFHWR JHWWKH(-%REMHFWVWXE $GYLFHDGYLVRU KRPHFUHDWH  7KHFUHDWHPHWKRGUHWXUQVDUHIHUHQFHWRWKH FRPSRQHQWLQWHUIDFH$GYLFH,QRWKHUZRUGVLWUHWXUQV DVWXEWRWKH(-%REMHFW ZKLFKLPSOHPHQWV$GYLFHWKH 5HPRWHFRPSRQHQWLQWHUIDFHIRUWKLVEHDQ 


:DLWDPLQXWHKRZ FRPHZHGLGQ·WKDYHWR FDVWDQGQDUURZWKH(-% REMHFWVWXEEXWZHKDGWR IRUWKHKRPHVWXE"

&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 SENDWITHANON ))/0REMOTEMETHODCALL 3O))/0LETSACONTAINERATLEASTHAVETHEPOTENTIALFOR INTEROPERATINGWITHOTHERSERVERS INCLUDINGPOSSIBLY ONETHATISNT*AVA BASED 2EMEMBER #/2"!ISASTANDARDTHATAMONGOTHER THINGS CANGIVETWOOBJECTS WRITTENINTWODIFFERENT LANGUAGES ACHANCETOINVOKEEACHOTHERSMETHODS 4HISDOESNOTMEANTHATYOURSERVERISNECESSARILYUSING ))/04HESPECSAYSTHAT9/5ˆTHEDEVELOPERˆHAVETO ASSUMETHESERVERISUSING))/0 WHICHMEANSYOUHAVE TOBESUREYOURBEANSARE))/0 COMPLIANTWELLTALK ABOUT))/0COMPLIANCEALITTLELATERINTHISCHAPTER 

Q:

)FMYSERVERDOESNTUSE))/0 DO)STILLHAVETO DOTHEWHOLENARROWINGTHING

A:

9ESANDNO9OURCODEMIGHTWORKJUSTFINEWITH NOTHINGMORETHANACAST"UTˆANDTHISISAREALLYHUGE BUTˆYOURCLIENTCODEWONTBEVENDOR INDEPENDENT)N OTHERWORDS YOUWONTHAVEAPORTABLEAPPIFYOUDONT USENARROW BECAUSEREDEPLOYINGTHEBEANONASERVER THATDOESUSE))/0WILLBREAKTHECLIENTS

Q:

)STHEREANYDOWNSIDETOUSINGNARROW%SPE CIALLYIFTHESERVERISNOTUSING))/0

A:

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



&KDSWHU

7KHGHFODUHGUHWXUQW\SHRI FUHDWH LVWKHFRPSRQHQW LQWHUIDFHQRW2EMHFW 6RWKH(-%REMHFWFRPHVEDFN IURPFUHDWH DOUHDG\NQRZLQJ ZKDWLWLV DQLPSOHPHQWDWLRQ RI\RXUFRPSRQHQWLQWHUIDFH  SXEOLF$GYLFHFUHDWH

e home The return type ofmeththod is () te interface crea t interface ALWAYS the componen doesnÕt need So the EJB object..stub a cast or a narrow

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 ZKDWPHWKRGV DUHLQKHUH" FOLHQWFDQFDOO WKHVHPHWKRGV

LQWHUIDFH!! $GYLFH+RPH

FUHDWH

The client sees EJBHome! All ofeverything in are exposed to these methods the AdviceHome the client through interface.

Remember, any class that implements AdviceHome must from implement ALL the methods e both AdviceHome AND EJBHom (Remote doesnÕt have any methods).

\RXDUHKHUH



WKH(-%+RPHLQWHUIDFH

:KDWWKH&/,(17VHHV

:KDW<28ZULWH

LQWHUIDFH!! $GYLFH+RPH

LQWHUIDFH!! $GYLFH+RPH

FUHDWH

FUHDWH

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

5HPHPEHUWKHFRQWDLQHU LPSOHPHQWV\RXUKRPH LQWHUIDFHDQGPDWFKLQJVWXE

FUHDWH

FUHDWH

7KHFRQWDLQHUPXVW LPSOHPHQW(9(5<7+,1*IURP $GYLFH+RPHDQG(-%+RPH

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

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

$GYLFH+RPH,PSO

the class of the actual Remote home object

$GYLFH+RPH,PSOBVWXE

the class home objecof the t stub

1RWHWKHVHDUHQ¶WQHFHVVDULO\WKHUHDOQDPHV² WKHVHUYHUJHQHUDWHVWKHVHFODVVHVDQGLWFDQ QDPHWKHPZKDWHYHULWZDQWVWR



&KDSWHU

WKHFOLHQWYLHZ

,I\RX·UHDFOLHQWDQG\RXZDQWWR  JHWUHÁHFWLRQOLNHLQIRUPDWLRQDERXWWKHEHDQ 8QOHVV\RX¶UHDWRROYHQGRU\RX¶OOSUREDEO\QHYHUQHHGWRFDOOWKLV PHWKRG,WUHWXUQVWKH(-%0HWD'DWDLQWHUIDFH²VRPHWKLQJ\RXFDQ XVHWRJHWPRUHVSHFL¿FFODVVLQIRUPDWLRQDERXWWKHEHDQ,I\RX¶YH JRW\RXUVHOIDQ(-%0HWD'DWDUHIHUHQFH E\FDOOLQJJHW(-%0HWD'DWD  \RXFDQFDOOJHW+RPH,QWHUIDFH&ODVV JHW3ULPDU\.H\&ODVV  LV6HVVLRQ DQGPRUH

 VHULDOL]HWKHKRPHVRWKDW\RXFDQXVHWKHKRPH DJDLQODWHUZLWKRXWKDYLQJWRJRWKURXJK-1', ,PDJLQH\RX¶UHDFOLHQWDQG\RX¶YHEHHQZRUNLQJZLWKDKRPH² PDNLQJDEXQFKRIEHDQVFDOOLQJKRPHPHWKRGVRQHQWLW\EHDQV ZKDWHYHU$QGQRZ\RXKDYHWRUHERRW\RXUPDFKLQH2UPRYHWR DQRWKHUPDFKLQH%XW\RXZDQWWRFRQWLQXHZRUNLQJZLWKWKLVKRPH :KDWGR\RXGR"

&DOOWKLVPHWKRG LQWHUIDFH!!

(-%+RPH

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

LQWHUIDFH!!

(-%+RPH

(-%0HWD'DWDJHW(-%0HWD'DWD

+RPH+DQGOHJHW+RPH+DQGOH YRLGUHPRYH +DQGOHK YRLGUHPRYH 2EMHFWNH\


 WHOOWKHKRPH\RX·UHGRQHZLWKDVHVVLRQEHDQ :KHQ\RX¶UHGRQHZLWKDVHVVLRQEHDQ\RXFDQWHOOWKHKRPHE\FDOOLQJ UHPRYH DQGSDVVLQJWKH(-%REMHFW¶VKDQGOH
 WHOOWKHKRPHWRUHPRYHDQHQWLW\EHDQ 1RWLFHZHGLGQ¶WVD\³7HOOWKHKRPH\RX¶UHGRQHZLWKDQHQWLW\EHDQ´7KDW¶V EHFDXVHFDOOLQJUHPRYHRQDQHQWLW\EHDQLVGUDVWLFDOO\GLIIHUHQWIURPFDOO LQJUHPRYHRQDVHVVLRQEHDQ:H¶OOJHWLQWRWKHGHWDLOVLQWKHHQWLW\EHDQ FKDSWHUVEXWWKHVKRUWYHUVLRQLVZKHQ\RXUHPRYHDQHQWLW\EHDQ\RX¶UH QRWMXVWWHOOLQJWKHFRQWDLQHUWKDW\RX¶UHGRQHZLWKWKHEHDQ\RX¶UHWHOOLQJLW WKDWHYHU\RQHLVGRQHZLWKWKHEHDQ)RUHYHU%HFDXVHFDOOLQJUHPRYH RQ DQHQWLW\EHDQPHDQV³'HOHWHWKLVHQWLW\IURPWKHSHUVLVWHQWVWRUH´ :KLFK XVXDOO\PHDQV³'HOHWHWKLVURZIURPWKHGDWDEDVH´ 7KLVYHUVLRQRIUHPRYHWDNHVDSULPDU\NH\ZKLFKVHVVLRQEHDQVGRQ¶WKDYH VRXQOLNHWKHRWKHUUHPRYH WKLVYHUVLRQFDQEHXVHGIRUHQWLW\EHDQVRQO\

LQWHUIDFH!!

(-%+RPH

(-%0HWD'DWDJHW(-%0HWD'DWD +RPH+DQGOHJHW+RPH+DQGOH

YRLGUHPRYH +DQGOHK YRLGUHPRYH 2EMHFWNH\

LQWHUIDFH!!

(-%+RPH

(-%0HWD'DWDJHW(-%0HWD'DWD +RPH+DQGOHJHW+RPH+DQGOH YRLGUHPRYH +DQGOHK

YRLGUHPRYH 2EMHFWNH\

\RXDUHKHUH



WKH(-%+RPHLQWHUIDFH

+H\GLG,MXVW VHHVRPHWKLQJDERXW DSULPDU\NH\",QWKHKRPH LQWHUIDFHIRUDVHVVLRQ EHDQ"7KDWFDQ·WEH ULJKW

,NQRZLVQ·WWKDWRGG" %XWORRNWKHUH·VRQO\RQH KRPHLQWHUIDFH(-%+RPH UHJDUGOHVVRIWKHEHDQW\SH7KHUH·V QRVHSDUDWH(-%6HVVLRQ+RPH RU(-%(QWLW\+RPHLW·VMXVW (-%+RPHIRUHYHU\WKLQJ

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

  ECLIENT TUBONTH S E M O H SA 4HEREWA EDEFIANT E6-QUIT H T E D A 4HATM D E D WASNEE !NARROW EEDED H STTOBE A C E ANT TH R &O !COMPLI AS#/2" W T I E S U " E CA

 

7RGRD-1',ORRNXSWKHFOLHQWPXVWILUVWJHWDQ ,QLWLDO&RQWH[WZKLFKLVWKHHQWU\SRLQWLQWRWKH VHUYHU·V-1',´YLUWXDOGLUHFWRU\WUHHµ )RUD5HPRWHKRPHLQWHUIDFHWKHVWXEUHWXUQHG IURP-1',PXVWEHERWKFDVWDQGQDUURZHG 1DUURZLQJLVWKH´H[RWLFFDVWLQJµQHHGHGIRUVWXE REMHFWVWKDWFRPHIURPDPHWKRGWKDWGRHVQRW UHWXUQWKHVWXE·VFOLHQWLQWHUIDFH6LQFHWKH-1', ORRNXSUHWXUQVW\SH2EMHFWWKHREMHFWUHWXUQHG IURPWKHORRNXSPXVWEHQDUURZHGWRWKHEHDQ·V KRPHLQWHUIDFHDQGWKHQFDVWWRWKHEHDQ·VKRPH LQWHUIDFH



2OSESARERED BLUEISTHESKY YOUCANTGETABEANFROM*.$

7RJHWWKHEHDQ·VKRPHWKHFOLHQWGRHVDORRNXS RQ-1',XVLQJWKHORJLFDOQDPHXQGHUZKLFKWKH EHDQZDVGHSOR\HG

ƒ 1DUURZLQJLVUHTXLUHGIRU,,23VWXEV ,,23LV

)

)TSONLYTHEHOMEACLIENTWI LLSPY WHENHEDOESALOOKUPON*.$ )

WKHZLUHSURWRFROIRU&25%$ EHFDXVHZKDW·V UHWXUQHGIURPWKHORRNXSPLJKWQRWEHFDSDEOHRI LPSOHPHQWLQJPXOWLSOHLQWHUIDFHVDQGWKXVZRXOG NQRZRQO\DERXWWKHPHWKRGVLQW\SH2EMHFW 1DUURZLQJUHWXUQVDQREMHFWWKDWLPSOHPHQWVWKH KRPHLQWHUIDFH

ƒ 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


RRNDW 7KHH[DPH[SHFWV\RXWRO HDQG FRG DQ UEH FOLHQWLQWHUIDFHR \RX QJV WKL RXW DE FHV UHQ PDNHLQIH RI DOO QRZ GRQ¶WVHH


&KDSWHU

WKHFOLHQWYLHZ

*]\MVW]OPIJW]\\PMPWUMTM\¼[\ITSIJW]\ \PM-2*WJRMK\
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
WLPHH[FHSWLRQV LQRWKHUZRUGVWKH\PXVWEHFRPSLOHUFKHFNHGH[FHSWLRQV² VXEFODVVHVRI([FHSWLRQEXWQRWVXEFODVVHVRI5XQWLPH([FHSWLRQ 

\RXDUHKHUH



WKH&RPSRQHQWLQWHUIDFH

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

LQWHUIDFH!! 5HPRWH

LQWHUIDFH!! (-%2EMHFW ZKDWPHWKRGV DUHLQKHUH" FOLHQWFDQFDOO WKHVHPHWKRGV

LQWHUIDFH!! $GYLFH

JHW$GYLFH



&KDSWHU

Just as with interface, thethcle EJBHome in EJBObject ient sees everything All of these methods are ex! po through the bean sed to the client interface (Advice Õs component ). Any class that implements the Advice must implement ALL D methods from both Advice AN EJBObject.

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!! $GYLFH

LQWHUIDFH!! $GYLFH

JHW$GYLFH JHW3ULPDU\.H\ JHW(-%+RPH JHW+DQGOH UHPRYH LV,GHQWLFDO

JHW$GYLFH

(-%2EMHFW WKH EHDQ·VERG\JXDUG IRUEXVLQHVV PHWKRGV

5HPHPEHUWKHFRQWDLQHU LPSOHPHQWV\RXUFRPSRQHQW LQWHUIDFHDQGPDWFKLQJVWXE 7KHFRQWDLQHUPXVWLPSOHPHQW (9(5<7+,1*IURP$GYLFHDQG (-%2EMHFW


QRZDOO 7KHH[DPH[SHFWV\RXWRN EMHFW -%2 LQ( GV ¿YHRIWKHPHWKR UH H\¶ WWK WKD QRZ WRN


&KDSWHU

$GYLFH,PSO

JHW$GYLFH JHW3ULPDU\.H\ JHW(-%+RPH JHW+DQGOH UHPRYH LV,GHQWLFDO

the class of the actual Remote EJB object

$GYLFH,PSOBVWXE

JHW$GYLFH JHW3ULPDU\.H\ JHW(-%+RPH JHW+DQGOH UHPRYH LV,GHQWLFDO

the class EJB objecof the t stub

WKHFOLHQWYLHZ

,I\RX·UHDFOLHQWDQG\RXZDQWWR  JHWWKHSULPDU\NH\RIDQHQWLW\EHDQ :HZRQ¶WJRLQWRWKLVQRZVLQFHZHKDYHPLOOLRQSDJHVRQHQWLW\EHDQV FRPLQJXS-XVWNQRZWKDWWKLVGRHVQRWDSSO\WRVHVVLRQEHDQVZKLFKGRQ¶W KDYHDXQLTXHLGHQWLW\H[SRVHGWRWKHFOLHQW%XWLIWKHFOLHQWVRPHKRZJHWV DUHIHUHQFHWRDQHQWLW\EHDQ PD\EHE\VHDUFKLQJRQDFXVWRPHU¶VQDPH  DQGZDQWVWKHDFWXDOSULPDU\NH\WKLVLVWKHPHWKRGWRFDOO7U\LWRQD VHVVLRQEHDQDQG\RX¶OOJHWDELJIDW5HPRWH([FHSWLRQ RU(-%([FHSWLRQLI WKHFOLHQWLVORFDO 

 JHWWKHEHDQ·VKRPH ,PDJLQH\RX¶YHJRWDEHDQEXW\RXGRQ¶WKDYHWKHEHDQ¶VKRPH$QGQRZ \RXZDQWWRPDNHPRUHEHDQVRIWKDWW\SH:KDWGR\RXGR"
 VDYHDUHIHUHQFHWRWKH(-%2EMHFW
 WHOOWKHEHDQ\RX·UHGRQHZLWKLW :KHQ\RX¶UH¿QLVKHGZLWKWKHEHDQLW¶VJRRGPDQQHUVWRWHOOLW\RX¶UHGRQH VRWKHFRQWDLQHUFDQIUHHXSDQ\UHVRXUFHVLWPLJKWEHNHHSLQJRQ\RXU EHKDOI'$1*(5:H¶UHWDONLQJRQO\DERXWVHVVLRQEHDQVKHUH$OWKRXJK \RXFDQFDOOUHPRYH RQDQHQWLW\EHDQUHPHPEHULWKDVDYHU\GLIIHUHQW PHDQLQJ ZH¶OOVHHWKDWLQWKHHQWLW\EHDQFKDSWHUV 

FDOOWKLVPHWKRG LQWHUIDFH!!

(-%2EMHFW

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

LQWHUIDFH!!

(-%2EMHFW

2EMHFWJHW3ULPDU\.H\

(-%+RPHJHW(-%+RPH +DQGOHJHW+DQGOH YRLGUHPRYH ERROHDQLV,GHQWLFDO 2EMHFWR

LQWHUIDFH!!

(-%2EMHFW

2EMHFWJHW3ULPDU\.H\ (-%+RPHJHW(-%+RPH

+DQGOHJHW+DQGOH YRLGUHPRYH ERROHDQLV,GHQWLFDO 2EMHFWR

LQWHUIDFH!!

(-%2EMHFW

2EMHFWJHW3ULPDU\.H\ (-%+RPHJHW(-%+RPH +DQGOHJHW+DQGOH

YRLGUHPRYH ERROHDQLV,GHQWLFDO 2EMHFWR

 FRPSDUHWZR(-%REMHFWUHIHUHQFHVWRVHHLIWKH\ UHIHUHQFHWKHVDPHEHDQ
LQWHUIDFH!!

(-%2EMHFW

2EMHFWJHW3ULPDU\.H\ (-%+RPHJHW(-%+RPH +DQGOHJHW+DQGOH YRLGUHPRYH

ERROHDQLV,GHQWLFDO 2EMHFWR

\RXDUHKHUH



WKHJHW+DQGOH PHWKRG

9OURESHOPPING)TSTOUGH BECAUSEYOUCANTDECIDEWHETHER YOUREASPRINGORASUMMER 9OUDONTWANTTOBERUSHED BUT YOUVEALREADYGOTABUNCHOF STUFFINYOURCARTWHENYOUREALIZE YOURElVEMINUTESLATEFORWORK

7VTQVM[PWXXQVO[PW]TLVW\JMZ][PML

9OUDLOVETOCONTINUEWITHYOUR SHOPPINGONCEYOUGETTOWORK 7HATDOYOUDO)FITWERE !MAZON YOURSHOPPINGCART WOULDSTILLBETHEREWHENYOU LOG INFROMTHE7EB"UTTHISISA PROPRIETARY3WING BASEDSHOPPING CLIENTAPPYOUREUSING(OWCAN YOUGETYOUR%*"OBJECTSTUBFROM YOURHOMEMACHINETOYOURWORK MACHINE 9OUCOULDTRYSERIALIZINGTHESTUB 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

+PPPP\QH[WGRRU QHLJKERUVD\VFRZER\ERRWV DUHVH[\%XWWKHVDQGDOVZLOOPDNH PHORRNPRUHVHQVLWLYH7KHQDJDLQ JLUOVOLNHWKDWUXJJHGORRNVRPD\EH ,VKRXOGJRZLWKWKHKLNLQJERRWV 6KRSSLQJLVVRWLPHFRQVXPLQJ

WKHFOLHQWYLHZ


handle

handle handle

LQWHUIDFH!! +DQGOH

JHW(-%2EMHFW

no handle

!HANDLECANRESCUEYOURSHOPPINGEXPERIENCE!SK THEBEANVIATHE%*"/BJECTINTERFACE FORAHANDLE

+DQGOHP\+DQGOH P\&DUWJHW+DQGOH  SERIALIZEIT EMAILITTOYOURSELF THENDESERIALIZEONYOUR WORKMACHINEANDYOUREBACKINBUSINESS 4HEHANDLEISA3ERIALIZABLETHINGTHATKNOWSHOWTO GETBACKTOTHESTUB)THASASINGLEMETHOD

SXEOLF(-%2EMHFWJHW(-%2EMHFW 3OWHENYOUCALLIT YOUHAVETOCASTANDNARROWTHE STUBTHATCOMESBACK2EMEMBER YOUALWAYSHAVETO CASTANDNARROWASTUBUNLESSTHEMETHODTHATRETURNS ITHASTHEACTUAL2EMOTEINTERFACEASITSDECLAREDRETURN TYPE3INCETHEHANDLESMETHODHASNOFRICKINCLUE WHATYOURCOMPONENTINTERFACEISSAY 3HOPPING#ART YOUREFACEDWITHTHESAMESCENARIOYOUHADWITHTHE HOMESTUBYOUGOTFROMTHE*.$)LOOKUP METHOD #ASTANDNARROW#ASTANDNARROW#ASTANDNARROW

$KDQGOHLVD6HULDOL]DEOH REMHFWWKDWNQRZVKRZWRJHW EDFNWRWKHRULJLQDO5HPRWH (-%REMHFW,W·VQRWDVWXE EXWLWFDQ*(7WKHVWXE ,WKDVMXVWRQHPHWKRG JHW(-%2EMHFW WKDWUHWXUQV W\SH2EMHFW 6R\RXKDYHWRQDUURZDQG FDVWWKHVWXE\RXJHWEDFN

)NYOURCLIENTCODE YOULLHAVESOMETHINGLIKE \RXUFRGHWRJHWWKHVHULDOL]HGKDQGOH\RXVDYHGHDUOLHU +DQGOHK WKLVUHVWRUH7KH+DQGOH  QRZXVHLWWRJHWWKH(-%2EMHFWVWXE 2EMHFWR KJHW(-%2EMHFW  6KRSSLQJFDUW  6KRSSLQJ 3RUWDEOH5HPRWH2EMHFWQDUURZ R6KRSSLQJFODVV 

\RXDUHKHUH



(-%+DQGOHV

:DLWDPLQXWHLVQ·WDKDQGOHDELJ VHFXULW\SUREOHP"
'RQ·WZRUU\
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

These twins ar theyÕre stateLEe identical if can each do the SS, since they clients wonÕt knowsame thing and the difference. But if theyÕr they are alwayes stateFUL, then twins cannot be distinct. Stateful they can hold identical, because to their own uniniqformation speciÞc ue client.

2EMHFWJHW3ULPDU\.H\ (-%+RPHJHW(-%+RPH +DQGOHJHW+DQGOH YRLGUHPRYH

ERROHDQLV,GHQWLFDO 2EMHFWR

)FYOUVEGOTTWOSTUBS ANDYOUWANTTOKNOWIFTHEYREFER TOTHESAMEBEAN YOUCALLIS)DENTICALONONEREFERENCE PASSINGINTHEREFERENCEYOUWANTTOCOMPAREITAGAINST *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

EHDQ

EHDQ EHDQ

LV,GHQWLFDO DOZD\VUHWXUQVWUXH HYHQIRUGLIIHUHQWEHDQV

7KHLV,GHQWLFDO PHWKRGLV OLNHFDOOLQJD5HPRWHHTXDOV  PHWKRGH[FHSW\RX·UHQRW DVNLQJLIWZRREMHFWVRQ\RXU KHDSDUHPHDQLQJIXOO\HTXLYDOHQW \RX·UHDVNLQJLIWZR5HPRWH REMHFWVDUHPHDQLQJIXOO\ HTXLYDOHQWRQWKHVHUYHU

6WDWHIXO EHDQV

(QWLW\ EHDQV

These beans are NEVER identical. Your cart is different from mine. EHDQ EHDQ

EHDQ

LV,GHQWLFDO DOZD\VUHWXUQVIDOVH IRUGLIIHUHQWEHDQVHYHQLIWKH EHDQVDUHIURPWKHVDPHKRPH

These two are identical

EHDQ





EHDQ

EHDQ



LV,GHQWLFDO UHWXUQVWUXHIRUEHDQV  WKDWUHIHUHQFHWKHVDPHHQWLW\ LQ 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 INSTEADOFIS)DENTICAL )SNTTHATWHATEQUALS ISFOR

A:

2EMEMBER WERETALKINGABOUT2EMOTEOBJECTS 4HEEQUALS METHODCOMPARESTWOOBJECTSONTHE SAME(%!0 WHEREIS)DENTICAL COMPARESTWO2EMOTE OBJECTSONTHE3%26%2

Q:

)STILLDONTSEEWHYTHEYCOULDNTHAVEJUST IMPLEMENTEDTHEEQUALS METHODONTHESTUBTODO THESAMETHING

A:

4HEEQUALS METHODISNOTAREMOTEMETHOD FORONETHING9OUCANALWAYSCALLEQUALS ONASTUB BECAUSEYOUCANCALLITONANYOBJECTONYOURHEAP "UTITSNOTPARTOFTHEREMOTEINTERFACE SOITCANTBE AREMOTEMETHODFOREXAMPLE ITDOESNTDECLAREA 2EMOTE%XCEPTION ETC

!NDREMEMBER THEEQUALS METHODISUSEDTOSEEIF TWOOBJECTSONTHEHEAPAREMEANINGFULLYEQUIVALENT 4HEVENDORCANIMPLEMENTTHEEQUALS METHODON THESTUBANYWAYITLIKES BUTTHATSTILLDOESNTTELLYOU ANYTHINGABOUTWHATSGOINGONBACKATTHESERVER END*USTBECAUSETWOSTUBSDONTPASSTHEEQUALS TEST DOESNTMEANTHESERVERDOESNTCONSIDERTHETWO%*" OBJECTSTOBEIDENTICALORREFERENCINGIDENTICALBEANS  9OURSERVERMAYBEUSING2-)STUBS FOREXAMPLE THAT HAVENOLOGICFORHOWTHEIRCOMPARISONSRELATETO MEANINGFULCOMPARISONSOFTWO%*"OBJECTSONTHE SERVER2-)STUBSKNOWABOUT2EMOTEOBJECTS BUTTHEY DONTKNOWWHATTHOSE2EMOTEOBJECTSREPRESENT

Q:

(OWCOMETHERESAMETHODINTHE%*"/BJECT INTERFACEFORGETTINGTHEBEANSHOME)FYOUDONT (!6%THEHOME THENHOWDIDYOUGETTHEBEANINTHE lRSTPLACE

A:

4HEREAREOTHERWAYSTOGETAREFERENCETOAN%*" OBJECT)TSTRUETHATYOUCANTUSE*.$)TOLOOKUPTHE %*"OBJECTONLYTHEHOMEISREGISTERED "54THERESNOTHINGTOSTOPYOUFROMPASSINGAN%*" OBJECTREFERENCEASANARGUMENTORRETURNVALUE9OU MIGHTHAVEABUSINESSMETHODINONEBEAN WHOSESOLE JOBISTOHANDYOUBACKAREFERENCETOAN%*"OBJECTFORA DIFFERENTBEAN .OWSUPPOSEYOUHAVETHIS%*"OBJECTREFERENCE TOA BEANWHOSEHOMEYOUNEVERHAD ANDNOWYOUWANTTO MAKEMOREOFTHOSEBEANSFORYOURSELF9OUCANDOTHAT BYASKINGFORTHEBEANSHOMEUSINGGET%*"(OME  !NDEVENIFYOUDOHAVEENOUGHINFORMATIONTODOA LOOKUPIN*.$)FORTHATBEANSHOME *.$)LOOKUPSARE EXPENSIVE9OULLSAVESOMEOVERHEADIFYOUJUSTGETTHE HOMEREFERENCEFROMTHEBEANDIRECTLY

Q:

7HYCANTYOUSERIALIZETHESTUB7HYDOWE NEEDHANDLES

A:

7EDIDNTSAYTHESTUBWASNT3ERIALIZABLE"UT EVENIFYOUCANSERIALIZEIT THATDOESNTMEANITSGOT ENOUGHINFORMATIONTOGETYOUBACKTOTHESAMEOR MEANINGFULLYIDENTICAL %*"OBJECT7HENTHESTUBCOMES OVERFROMTHESERVER ITSALREADYKNOWLEDGEABLEABOUT HOWTOCONTACTAPARTICULAR2EMOTEOBJECT7HENTHAT STUBISRECREATED THATEXACT2EMOTEOBJECTMIGHTNOT EVENEXISTANYLONGER

Q: A:

4HENHOWWOULDTHEHANDLEBEANYBETTER

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



WKH5HPRWHLQWHUIDFHV

:MDD=LHGAFLK

ƒ


  

OME TATELESSH )NYOURS MORE EANDNO WRITEON SEE LIENTWILL BUTTHEC R IONALFOU ANADDIT S= ;METHOD

AREALIVE HENTHEY W D E R TSFIVE 2OSESARE CLIENTGE E H T T C JE /B &ROM%*" S= D O ;METH

,Q(-%WKHUH ·V FDQDQGWKHU H·V FDQ 2QWKHH[DPV RPHIRONVDUHF RQIXVHGE\ WKHZRUG³FDQ´ DVLQ³&DQDVHV VLRQEHDQ FOLHQWFDOOJHW3U LPDU\.H\ RQWK H(-% REMHFWVWXE"´

:DWFKLW

'HSHQGVRQKRZ \RXGH¿QH³FDQ ´$QG IRUWKHH[DPWKH DQVZHUZRXOGE H12 ,QRWKHUZRUGVM XVWEHFDXVHVRP HWKLQJ LVOHJDOO\H[SRV HGWRWKHFDOOHU ZKLFK PHDQVWKHFDOOH UFDQ&203,/( ZLWKWKH PHWKRGFDOOLIWK HVSHFVD\V\R XFDQ¶W WKHQ\RXFDQ¶W6 RMXVWEHFDXVH\ RXFDQ FRPSLOH GRHVQ ¶WPHDQ\RXFD Q DFFRUG LQJWRWKHVSHF  5HPHPEHUWKHU H¶VFRP SLOHUODZDQGWK HQWKHUH¶V(-% VSHFODZ 2QWKHH[DPZ H¶UHORRNLQJIRU( -%ODZ,I WKHTXHVWLRQ'2 (6LQYROYHFRP SLODWLRQ \RX¶OONQRZIURP WKHZRUGLQJ



&KDSWHU

7KHFOLHQWJHWVDUHIHUHQFHWRWKHEHDQ·V(-%2EMHFW E\FDOOLQJDPHWKRGRQWKHEHDQ·VKRPHLQWHUIDFH 5HIHUHQFHVWRERWKVWDWHOHVVDQGVWDWHIXOVHVVLRQ EHDQVDUHUHWULHYHGIURPWKHKRPH·VFUHDWH  PHWKRGV )URPWKH(-%2EMHFWLQWHUIDFHWKHFOLHQWVHHVILYH DGGLWLRQDOPHWKRGVJHW(-%+RPH JHW+DQGOH  UHPRYH LV,GHQWLFDO DQGJHW3ULPDU\.H\  2QO\HQWLW\EHDQFOLHQWVDUHDOORZHGWRFDOO JHW3ULPDU\.H\ RQWKHEHDQ·VFRPSRQHQW LQWHUIDFH6HVVLRQEHDQFOLHQWVZLOOJHWD 5HPRWH([FHSWLRQ  7KHJHW(-%+RPH PHWKRGUHWXUQVDUHIHUHQFHWR WKHEHDQ·VKRPHLQWHUIDFHVRWKDWWKHFOLHQWGRHVQ·W KDYHWRJRWKURXJKD-1',ORRNXSLIWKH\ZDQWWR PDNHPRUHEHDQVRIWKDWW\SH

ƒ 7KHJHW+DQGOH PHWKRGUHWXUQVD6HULDOL]DEOH REMHFWWKDWFDQEHXVHGODWHUWRUHHVWDEOLVKFRQWDFW ZLWKWKHVHUYHUDQGJHWEDFNWKHVWXEWRWKH FRPSRQHQWLQWHUIDFHWKDWWKHFOLHQWXVHGWRJHWWKH KDQGOH

ƒ 7KHKDQGOHKDVRQHPHWKRGJHW(-%2EMHFW WKDW UHWXUQVWKH5HPRWHVWXEDVW\SH(-%2EMHFW7KDW PHDQVWKHVWXEPXVWEHFDVWDQGQDUURZHGMXVWDV \RXPXVWGRZLWKWKHKRPHVWXEWKDW\RXJHWIURPD -1',ORRNXS

ƒ 7KHLV,GHQWLFDO PHWKRGLVNLQGRIOLNHGRLQJDQ HTXDOV PHWKRGRQWKHVHUYHU,WUHWXUQVWUXHIRU WZRGLIIHUHQWVWDWHOHVVEHDQVIURPWKHVDPHKRPH IDOVHIRUWZRGLIIHUHQWVWDWHIXOEHDQVIURPWKHVDPH KRPHDQGWUXHIRUUHIHUHQFHVWRHQWLWLHVZLWKWKH VDPHSULPDU\NH\

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

LQWHUIDFH!! 5HPRWH

LQWHUIDFH!! 5HPRWH

LQWHUIDFH!! (-%+RPH PHWKRGV

LQWHUIDFH!! (-%2EMHFW PHWKRGV

LQWHUIDFH!! $GYLFH+RPH

LQWHUIDFH!! $GYLFH

FUHDWH

JHW$GYLFH

/RFDOFOLHQWYLHZ

LQWHUIDFH!! (-%/RFDO+RPH PHWKRGV

LQWHUIDFH!! (-%/RFDO2EMHFW PHWKRGV

LQWHUIDFH!! $GYLFH+RPH/RFDO

LQWHUIDFH!! $GYLFH/RFDO

JHW$GYLFH

FUHDWH

The local interfaces do NOT extend java.rmi.Remote n is (and our naming conventio d nee you not required... but it sh gui tin dis to SOMETHING s) ace erf int te mo Re r from you

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



5HPRWHYVORFDOFOLHQWYLHZ

FOLHQWKHDS

VWXE

VHUYLFHV

&RPSRQHQWLQWHUIDFH

(-% REMHFW

EHDQ HV VHUYLF

VWXE

+RPHLQWHUIDFH

FOLHQW

+RPHLQWHUIDFH

&RPSRQHQWLQWHUIDFH

5(027(FOLHQWYLHZ

+RPH REMHFW

VHUYHUKHDS



&KDSWHU

(-% REMHFW

EHDQ

+RPH REMHFW

VHUYHUKHDS

HV VHUYLF

FOLHQW

VHUYLFHV

No stubs!!

+RPHLQWHUIDFH

The client still canÕt get to the bean directly, because the server still needs a place to intercept the call to the bean (so the server can add services). But this time, the client has a local reference to the home and component interface objects.

&RPSRQHQWLQWHUIDFH

/2&$/FOLHQWYLHZ

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\ (-%+RPHJHW(-%+RPH +DQGOHJHW+DQGOH YRLGUHPRYH ERROHDQLV,GHQWLFDO (-%2EMHFWR

1 2 3 4

BBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBB

\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

A local client Java referencehatos a plain old or component inte the home thereÕs no need rface, so for handles.

no stubs, no handles

VHUYLFHV

/2&$/FOLHQWYLHZ

(-% REMHFW

EHDQ

+RPH REMHFW

HV VHUYLF

FOLHQW

?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

FOLHQW

(-% REMHFW

VWXE

VHUYLFHV

LV,GHQWLFDO

LV,GHQWLFDO

EHDQ

A Remote clie has to make a R method call, isnt emote Id 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



&KDSWHU

HTXDOV

FOLHQW LV,GHQWLFDO

(-% REMHFW

VHUYLFHV

ical() on () and isIdent Calling equals object reference are e a local EJBteed to give you the sam not guaran still need isIdentical() result. You e if two EJB object to determinare to the same Session references object.

EHDQ

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 +RPH+DQGOHJHW+RPH+DQGOH YRLGUHPRYH +DQGOHK YRLGUHPRYH 2EMHFWNH\

2EMHFWJHW3ULPDU\.H\ (-%+RPHJHW(-%+RPH +DQGOHJHW+DQGOH

YRLGUHPRYH ERROHDQLV,GHQWLFDO 2EMHFWR

ainer es tell the contthat These two remov iÞc bean from to remove a spechave to say WHICH home, but you er the handle (session bean using eith s), or primary key or entity beanonly). (entity beans

This version tells the container to remove the be an EJBObject you on whose invoked remove().

\RXDUHKHUH



UHPRYHPHWKRGV

:K\WKHUH·VQRWDQRDUJUHPRYH PHWKRGLQWKHKRPH +H\KRPLH,·G OLNHWRUHPRYHRQHRIWKH EHDQV\RXMXVWJDYHPH 7KDQNV

5RJHUWKDW 0U&OLHQW,·OOWHOOWKH FRQWDLQHUULJKWQRZ





:KLFKEHDQ"""
&RQWDLQHUSOHDVH UHPRYHDEHDQRQ EHKDOIRIWKLVFOLHQW





&KDSWHU



WKHFOLHQWYLHZ

0W_KIVaW]][MIZMUW^M\PI\\ISM[I PIVLTM_PMVaW]LWV¼\PI^MIPIVLTM' 4WKITKTQMV\[LWV¼\PI^MPIVLTM[[WTWKITPWUM[ LWV¼\PI^MIZMUW^M\PI\\ISM[IPIVLTM


)FLOCALHOMEINTERFACESDONTHAVEHANDLES THEN THERESNOWAYYOUCOULDHAVEAREMOVEMETHODTHAT TAKESAHANDLE"ECAUSEINORDERTOPASSAHANDLETO THEHOME THATUNIQUELYIDENTIlESTHEBEANYOURE TRYINGTOREMOVE YOUDHAVETOlRSTGETTHEBEANS HANDLE!NDSINCELOCALLY EXPOSEDBEANSDONTHAVE HANDLESYOUSEETHEPROBLEM


WKHUH DUH QR

'XPE 4XHVWLRQV

Q:

7HATIFYOUHAVEALOCALHOME BUTYOUHAVEA 2EMOTE%*"OBJECTREFERENCE#ANTYOUPASSTHE2EMOTE BEANSHANDLETOTHELOCALHOME

A:

./"ECAUSEYOUCANTMIXLOCALAND2EMOTE INTERFACESTOGETHER/NLYALOCALBEANCOMESFROMALOCAL HOME ANDVICE VERSA3OITWILL.%6%2BEPOSSIBLETOHAVE A2EMOTEBEANSHANDLE TOGIVETOTHATSAME2EMOTE BEANSHOME UNLESSTHATHOMEISALSO2EMOTE 7EDIDNTSAYTHATVERYWELL DIDWE/+HOWABOUT THISˆA2EMOTEHOMEWILLHANDOUTONLY2EMOTEREFERENCES TOTHECOMPONENT%*"/BJECT INTERFACEFORTHATBEANTYPE ANDALOCALHOMEWILLONLYRETURNLOCALREFERENCESTOTHE COMPONENT%*",OCAL/BJECT INTERFACE

Q: A:

4ELLMEAGAINWHYYOUCANTREMOVETHEHOME

4HERESNEVERAREASONTOREMOVETHEHOMEIN OTHERWORDS TOTELLTHECONTAINERYOUREDONEWITHIT BECAUSETHECONTAINERMUSTKEEPTHEHOMEAROUNDWITH ORWITHOUTYOURINTEREST3OIFYOUWEREABLETOSAYREMOVE TOTHEHOME THECONTAINERWOULDSAY h'EEDONTFLATTER YOURSELFBUDDY7HAT)DOHEREONTHESERVERISNOT!"/54 YOU)COULDCARELESSWHENYOUREDONEWITHYOURHOME REFERENCEv

$EHDQIURPWKDWKRPHW\SH 7KDWPHDQV\RXPXVW XQLTXHO\LGHQWLI\WKHEHDQ \RXZDQWUHPRYHGZKHQ \RXFDOODKRPHUHPRYH PHWKRG)RUHQWLW\EHDQV XVHWKHSULPDU\NH\RUD KDQGOHDQGIRUVHVVLRQ EHDQVXVHDKDQGOH %XWKDQGOHVRQO\ZRUNIRU 5HPRWHKRPHFOLHQWV

\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

(-%0HWD'DWDJHW(-%0HWD'DWD

(-%0HWD'DWDJHW(-%0HWD'DWD

+RPH+DQGOHJHW+RPH+DQGOH

+RPH+DQGOHJHW+RPH+DQGOH

YRLGUHPRYH +DQGOHK

YRLGUHPRYH +DQGOHK

YRLGUHPRYH 2EMHFWNH\

YRLGUHPRYH 2EMHFWNH\

LQWHUIDFH!!

(-%2EMHFW

LQWHUIDFH!!

(-%/RFDO2EMHFW

2EMHFWJHW3ULPDU\.H\

2EMHFWJHW3ULPDU\.H\

(-%+RPHJHW(-%+RPH

(-%/RFDO+RPHJHW(-%/RFDO+RPH

+DQGOHJHW+DQGOH

+DQGOHJHW+DQGOH

YRLGUHPRYH

YRLGUHPRYH

ERROHDQLV,GHQWLFDO (-%2EMHFWR

ERROHDQLV,GHQWLFDO 2EMHFWR



&KDSWHU

Local clients can use reßection they donÕt need EJBMetaData., so No need for a ha ndle with a local clientÑthereÕs no stub! locally-accessed handles, so you cabeans donÕt have nÕt use a handle remove one. to

changes from Remote to local l clients No handles in loca

WKHFOLHQWYLHZ

6KDUSHQ \RXU SHQFLO %DVHGRQZKDW\RXQRZNQRZDERXWWKHGLIIHUHQFHEHWZHHQORFDO DQG5HPRWHFOLHQWLQWHUIDFHVGHFLGHLIWKHIROORZLQJVWDWHPHQWV DUHWUXHRUIDOVH
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

ocalObject extend EJBLJBObject instead of E

&RPSRQHQWLQWHUIDFH SDFNDJHKHDG¿UVW LPSRUWMDYD[HME 

SXEOLFLQWHUIDFH$GYLFH/RFDOH[WHQGV(-%/RFDO2EMHFW^ SXEOLF6WULQJJHW$GYLFH  `

this return type doesnÕt need to be RMIIIOP compliant (although it certainly can be, of course, like String)

No RemoteExce

ption!!

+RPHLQWHUIDFH

ocalHome extend EJBLJBHome instead of E

SDFNDJHKHDG¿UVW LPSRUWMDYD[HME 

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 




&KDSWHU

WKHFOLHQWYLHZ

AW]KIVPI^MJW\PI:MUW\M IVLTWKITKTQMV\^QM_NWZIJMIV J]\aW]XZWJIJTa_WV¼\ 7EMENTIONEDEARLIERTHATLOCALINTERFACESARE AVERYSPECIALCASEFORACLIENTVIEW4HEYWERE INTRODUCEDWITHVERSIONOFTHE%*"SPECWHICH THISBOOKISBASEDON ANDTHEORIGINALINTENTWAS TOSUPPORTCONTAINER MANAGEDRELATIONSHIPSIN ENTITYBEANS"UTENOUGHCUSTOMERSANDVENDORS ASKEDFORTHEABILITYTOHAVENON 2EMOTEINTERFACES FORBEANS SOTHE*%%TEAMDECIDEDTOMAKEIT AVAILABLEFORSESSIONBEANSASWELLASENTITYBEANS "UTREGARDLESSOFWHICHYOUCHOOSE ITSVERY UNLIKELYYOULLHAVEADESIGNTHATREQUIRESBOTH ALOCALAND2EMOTECLIENTVIEW)FYOURBEANISIN ACONTAINER MANAGEDRELATIONSHIPWITHANOTHER ENTITYBEANYOULLLEARNALLABOUTTHISINTHEENTITY CHAPTERS YOUHAVENOCHOICE4HEBEANMUST EXPOSEITSELFLOCALLY!NDINTHATCASE ITSALMOST IMPOSSIBLETOTHINKOFAREASONTOALSOHAVETHAT SAMEBEANEXPOSEDTO2EMOTECLIENTSFOROTHER PURPOSES *USTKNOWTHATITISLEGALTOHAVEBOTH "UTYOUCANNEVER EVER EVERMIXANDMATCH !2EMOTEHOMEINTERFACECANGIVEOUTONLY2EMOTE 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

&5($7(PHWKRGV

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

MDYD[HME&UHDWH([FHSWLRQ

5(029(PHWKRGV

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

MDYD[HME5HPRYH([FHSWLRQ

MDYD[HME(-%([FHSWLRQ

MDYD[HME(-%([FHSWLRQ

MDYD[HME(-%([FHSWLRQ

\RXDUHKHUH



ORFDOFOLHQWV

4WKITKTQMV\KWLM #OMPARETHISTOTHECODEMODIlCATIONSYOUMADEONTHEPREVIOUSSHARPEN 4OHELPSHOWTHATTHECALLSTOTHEHOMEANDCOMPONENTINTERFACEARENO LONGER2EMOTE WEVEMADETHEEXCEPTIONHANDLINGMORElNE GRAINED.OTICE THATWERENOTCATCHINGA2EMOTE%XCEPTION LPSRUWMDYD[QDPLQJ  LPSRUWKHDG¿UVW  LPSRUWMDYD[HME 

we got rid of javax.rmi and java.rmi imports

SXEOLFFODVV$GYLFH/RFDO&OLHQW^ SXEOLFVWDWLFYRLGPDLQ 6WULQJ>@DUJV ^ QHZ$GYLFH/RFDO&OLHQW JR  ` SXEOLFYRLGJR ^ 2EMHFWR QXOO WU\^ &RQWH[WLF QHZ,QLWLDO&RQWH[W  R LFORRNXS ³$GYLVRU/RFDO´ 

okup the and do the loa real I, D N J h ug to go thro ference to You still have ly this time you get a cere of EJBLocalHome), usual way, onon the heap (an instan Home object.. Java object a stub to a Remote EJB instead of

`FDWFK 1DPLQJ([FHSWLRQQH[ ^ QH[SULQW6WDFN7UDFH  `  $GYLFH+RPH/RFDOKRPH  $GYLFH+RPH/RFDO R $GYLFH/RFDODGYLVRU QXOO WU\^ DGYLVRU KRPHFUHDWH  `FDWFK &UHDWH([FHSWLRQFH[ ^ FH[SULQW6WDFN7UDFH  `

od still declares a ception The create() methbu not a RemoteEx CreateException, t

6\VWHPRXWSULQWOQ DGYLVRUJHW$GYLFH   ` `



&KDSWHU

HereÕs a big ch ge! No narrowing! old cast (we stan Just a pl ill return type of lo have to cast because the ain have to narrow it okup is Object, but we donÕt since it isnÕt a st ub.)

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

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 REMHFW

'RJ¿GR QHZ'RJ 

WKLVWUDLQ3HW ¿GR  ^a\g

a copy of the reference (the remote control) not the Dog object

'RJ

%()25(GRJ UHIHUHQFH

YRLGWUDLQ3HW 'RJDUJ ^`

'RJ REMHFW

r and the ÔÞdoÕ Now the ÔargÕ paramel te pies. Both variable are identicaDco object. reference the same og

Yj_ ^a\g 'RJ

%()25(GRJ UHIHUHQFHV

'RJ

5(027(PHWKRGFDOO 'RJ¿GR QHZ'RJ  UHPRWH6WXEWUDLQ3HW ¿GR 

'RJ REMHFW

! NOT the reference value ItÕs a serialized copyctof the actual Dog obje

'RJ REMHFW ^a\g 'RJ

%()25(GRJ UHIHUHQFH

py The server Dog is a co og D t en of the cli

YRLGWUDLQ3HW 'RJDUJ ^`

'RJ REMHFW

'RJ REMHFW

^a\g 'RJ

Yj_

&OLHQW

$)7(5GRJV UHIHUHQFHV

'RJ

6HUYHU \RXDUHKHUH



5HPRWHYVORFDO

WKHUH DUH QR

'XPE 4XHVWLRQV

Q:

3O )MSTILLNOTCLEARIFTHE BEAN-534ALWAYSKNOWIFTHECLIENT IS2EMOTEORLOCAL

A:

)TSNOTTHATTHEBEANMUST BUTRATHERTHATTHEBEANMIGHTHAVE TOKNOW)FITMATTERSTHATTHEBEAN ISWORKINGONATHECALLERSOBJECT VIAACOPYOFTHECALLERSREFERENCE ASOPPOSEDTOACOPYOFTHECALLERS OBJECT YOURBEANCODEMIGHTHAVE TOCHANGE!NDTHATGOESFORRETURN VALUESTOO)FITMATTERSTHATTHECALLING METHODGETSBACKACOPYOFAREFER ENCEVSACOPYOFANOBJECT THEBEAN CODEMIGHTHAVETOCHANGE

Q:

"UT)THOUGHTTHATCHOOSINGTO DEPLOYABEANWITHLOCALVS2EMOTE CLIENTVIEWSWASJUSTAMATTEROF SWITCHINGASWITCHATDEPLOYTIME

A:

./././,ETSIMAGINETHAT YOUDIDWRITETWOSETSOFINTERFACES ONEFORALOCALCLIENTVIEWANDONE FORA2EMOTECLIENTVIEW)TISTRUE THATATDEPLOYMENTYOUCOULDDECIDE WHICHOFTHETWOVIEWSYOUWANTEDTO EXPOSEORBOTH "UTTHATWORKSONLY IFTHEBEANCODEDOESNTCAREWHERE THECLIENTIS!BEANMETHODWITHNO ARGUMENTSORRETURNVALUESMIGHTBE SAFEREGARDLESSOFHOWTHECLIENTIS ACCESSINGIT /NESOLUTIONMIGHTBETOWRITETHE BEANCODEASSUMINGTHEBEANIS ALWAYSGETTINGACOPY ANDTHENIFTHE CLIENTISLOCAL HAVETHECLIENTMAKE ACOPYCLONE OFTHEOBJECTBEFORE PASSINGIT/R FORRETURNVALUES YOU MIGHTALWAYSHAVETHEBEANMAKEA COPYBEFOREHANDINGITBACK4HATWAY



&KDSWHU

THEBEANNEVERHASTOWORRYTHATA LOCALCLIENTMIGHTBEMODIFYINGTHE BEANSOBJECT

!NDALOCALCLIENTWONTHAVECODE TOHANDLETHE2EMOTE%XCEPTIONSOR NARROWTHESTUBS

Q:

4HEBOTTOMLINEISTHATDEPLOYINGA BEANWITHA2EMOTEVSLOCALCLIENT VIEWISA"IG$EAL)TSACOMMITMENT 4HECLIENTHASTOKNOWINADVANCE

4HENITSJUSTABOUT ARGUMENTSANDRETURNVALUES)S THEREANYOTHERREASONYOUCOULDNT DEPLOYABEANANDMAKETHE DECISIONFOR2EMOTEVSLOCALVIEWAT DEPLOYTIME

A:

4HEREISANOTHERREASON4HE CLIENTCODE%VENIFTHEBEANDOESNT NEEDTOKNOWHOWITSCLIENTIS ACCESSINGIT THECLIENTMUSTKNOW! CLIENTWRITTENTOACCESSABEANLOCALLY WOULDNTWORKIFTHEBEANS2EMOTE CLIENTINTERFACES ANDVICE VERSA

Q: A:

7HYNOT

4HECLIENTMUSTKNOWIN ADVANCEWHETHERITSACCESSINGA BEANS2EMOTEORLOCALCLIENTVIEW BECAUSETHEINTERFACESTHEMSELVES AREDIFFERENT0OLYMORPHICALLY YOU CANTUSETHE2EMOTEANDLOCAL VIEWSINTERCHANGEABLY BECAUSETHE INTERFACESTHEMSELVESAREDIFFERENT 4HERESNOWAYTHECLIENTCANBE KEPTBLISSFULLYIGNORANT BECAUSE THEBEHAVIOROFTHEBEANISDIFFERENT 2EMEMBER A2EMOTECLIENTMUST HANDLE2EMOTE%XCEPTIONS AND NARROWTHE2EMOTESTUBCOMINGBACK FROMTHELOOKUP!NDA2EMOTECLIENT ISEXPOSEDTOMETHODSINTHEBEANS CLIENTINTERFACESˆMETHODSTHAT DONTEXISTINTHELOCALINTERFACES3OA 2EMOTECLIENTMIGHT FOREXAMPLE TRY TOCALLAGET(ANDLE METHODONTHE LOCALCOMPONENTINTERFACE AMETHOD CALLTHATWOULDNEVERWORK

Q:

#ANYOUGETAROUNDTHISBY DECLARINGYOUR2EMOTE%XCEPTIONS ONYOURLOCALINTERFACE!NDCOULD YOUMAKEANINTERFACETHATISBOTH 2EMOTEANDLOCALBYHAVING YOURCOMPONENTINTERFACELIKE !DVICE EXTENDBOTH2EMOTEAND %*",OCAL/BJECT7HATSTHEHARM IFTHECLIENTSIMPLYALWAYSHANDLES 2EMOTE%XCEPTIONS ANDALWAYSDOES THENARROW 4HATWAYTHECLIENT SHOULDNTHAVETOKNOW

A:

3TILLWONTWORK&ORONETHING ACCORDINGTOBEANLAW YOURENOT ALLOWEDTODECLARE2EMOTE%XCEPTIONS ONLOCALMETHODS3OTHERESNO GUARANTEETHATYOURSERVERWOULD EVENLETYOUDEPLOYABEANWITH ALOCALINTERFACETHATDECLARES 2EMOTE%XCEPTIONS!NDTHEREISNO GUARANTEETHATTHENARROW METHOD WOULDNOTCAUSEPROBLEMS!NDTHEN THEREAREHANDLESANDALLTHATOTHER STUFF9OUNEEDTOJUSTLETTHISGO

WKHFOLHQWYLHZ

%(WKH&RQWDLQHU (DFKRIWKHFRGHVQLSSHWVRQWKLVSDJHUHSUHVHQWVFRGHIURPHLWKHU DQLQWHUIDFHRUDFOLHQW
([HUFLVH

%,QD5HPRWHFOLHQW

$,QDORFDOFOLHQW SXEOLFYRLGJR ^ 2EMHFWR QXOO WU\^

SXEOLFYRLGJR ^ WU\^ ORRNXSWKH$GYLFHEHDQDVVLJQLW WRDGYLVRU &RQWH[WLF QHZ,QLWLDO&RQWH[W  `FDWFK ([FHSWLRQH[ ^ H[SULQW6WDFN7UDFH  R LFORRNXS ³$GYLVRU/RFDO´  ` 6\VWHPRXWSULQWOQ DGYLVRUJHW$GYLFH  `FDWFK 1DPLQJ([FHSWLRQQH[ ^ ` 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

ƒ
ƒ 0HWKRGVLQORFDOFOLHQWLQWHUIDFHVGR127GHFODUH 5HPRWH([FHSWLRQ

ƒ 6RPHRIWKHLQWHUIDFHPHWKRGVH[SRVHGWR5HPRWHFOLHQWVDUHQRW H[SRVHGWRORFDOFOLHQWV

ƒ /RFDOFOLHQWVFDQQRWJHWKDQGOHVVLQFHKDQGOHVDUHXVHGWRUH HVWDEOLVKDFRQQHFWLRQWRWKH5HPRWHREMHFW

ƒ (-%0HWD'DWDLVQRWXVHGZLWKORFDOFOLHQWVVLQFHDORFDOFOLHQWFDQ XVHUHIOHFWLRQWRLQWHUURJDWHWKH(-%REMHFWDQG+RPHREMHFW

ƒ /RFDOKRPHLQWHUIDFHVKDYHRQO\RQHUHPRYH PHWKRG³WKHRQH WKDWWDNHVDSULPDU\NH\7KHUHPRYH WKDWWDNHVD+DQGOHGRHVQ·W H[LVWLQWKHORFDOKRPHLQWHUIDFHVLQFH+DQGOHVDUHQ·WXVHGZLWKD ORFDOFOLHQWYLHZ

ƒ %HFDXVHWKHRQO\UHPRYH LQWKHORFDOKRPHLQWHUIDFHUHTXLUHVD SULPDU\NH\DUJXPHQWORFDOVHVVLRQEHDQFOLHQWVFDQQRWUHPRYH DEHDQXVLQJWKHEHDQ·VKRPHWKH\FDQFDOOUHPRYH RQO\RQWKH EHDQ·VFRPSRQHQWLQWHUIDFH

ƒ (-%/RFDO+RPHKDVRQO\RQHPHWKRGUHPRYH WKDWWDNHVD SULPDU\NH\EHFDXVHWKHJHW+RPH+DQGOH JHW(-%0HWD'DWD  DQGUHPRYH +DQGOH PHWKRGVWKDWDUHLQ(-%+RPHGRQ·WDSSO\WRD ORFDOFOLHQWYLHZ

ƒ 7KHRQO\PHWKRGLQ(-%2EMHFWWKDWLVQRWDOVRLQ(-%/RFDO2EMHFWLV 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

:DWFKLW


QFRGH %HSUHSDUHGWRORRNDWEHD HDQG FRG FH HUID LQW RU RGH FOLHQWF WD JD NLQ ORR NQRZZKHWKHU\RX¶UH  LHZ QWY FOLH FDO 5HPRWHRUOR $QGLWPLJKWEHVXEWOH HWKH )RUH[DPSOH\RXPLJKWVH RGFDOO HWK VP QHV XVL DE FOLHQWPDNH G WKR PH DQGWKHDUJXPHQWWRWKH H LQF W6 MHF RE EOH LVDQRQ6HULDOL]D G WKR PH KH DWW HWK XP DVV \RXDUHWR  2: .1 LVOHJDODQGFRUUHFW\RX WHUIDFH² WKDWWKLVPXVWEHDORFDOLQ OL]DEOH HULD Q6 QR VD SDV \RXFDQ¶W UQ UHWX RU REMHFWDVDQDUJXPHQW RG HWK WHP PR 5H PD YDOXHWRRUIUR  \RX HOO WRW DV WFK JR KHU IRW 6RPHR H U5 DOR ZKHWKHUWKHEHDQLVORF PRWHLQFOXGH KH+RPH &OLHQWGRHVQ¶WQDUURZW Q\ OHD &OLHQWGRHVQ¶WKDQG XVLQHVV DE RQ QV SWLR FKHFNHGH[FH DOO GF WKR PH QGOH RQ &OLHQWFDOOVUHPRYH +D H RP DEHDQ¶VK

WKHFOLHQWYLHZ

%(WKH&RQWDLQHU

([HUFLVH 6ROXWLRQV

%,QD5HPRWHFOLHQW

$,QDORFDOFOLHQW SXEOLFYRLGJR ^ 2EMHFWR QXOO WU\^

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

emote dvice() is a r A t e g ! r o r r Compiler e t it isnÕt handling the e last line method, bu eption. If we moved th ork. RemoteExce try block, it would w INSIDE th

A is Þne. Because itÕs local, it does not need to narrow the Ho me reference. Only a cast is needed .

&,QDEHDQ·VKRPHLQWHUIDFH SDFNDJHKHDG¿UVW LPSRUWMDYD[HME 

Container error! EJBHome is a Remote interface, and the rule is that you must declare RemoteException on each method in the interface. The compiler doesnÕt care, but the Container will. At some point in the deploy process, this will fail.

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 component interfdeclare any doesnÕt need to e business exceptions on th methods.

SDFNDJHKHDG¿UVW LPSRUWMDYD[HME  SXEOLFLQWHUIDFH$GYLFH/RFDOH[WHQGV(-%/RFDO2EMHFW^ SXEOLF6WULQJJHW$GYLFH 

OK, needs no exceptions declared

` \RXDUHKHUH



FRIIHHFUDPPRFNH[DP

0RFN([DP 1

7HICHCAPABILITIESAREPROVIDEDBYBOTHREMOTEANDLOCALHOMEINTERFACESFOR SESSIONBEANS#HOOSEALLTHATAPPLY

R! #REATINGASESSIONOBJECT R" 2EMOVINGASESSIONOBJECT R# 'ETTINGASESSIONOBJECTS%*"-ETA$ATA R$ 'ETTINGASESSIONOBJECTSHANDLE

2

7HENLOCATINGASESSIONBEANSREMOTEHOMEINTERFACE WHICHARESTEPSTHAT MUSTOCCURTOCREATEAVALIDHOMEINTERFACEREFERENCE#HOOSEALLTHAT APPLY

R! 4HESESSIONCONTEXTMUSTBENARROWED ANDTHENARROWEDRESULTCAST R" 4HERESULTOFTHE*.$)LOOKUPMUSTBENARROWED ANDTHENARROWED RESULTCAST

R# 4HEINITIALCONTEXTMUSTBENARROWED ANDTHENARROWEDRESULTCAST R$4HERESULTOFTHE*.$)LOOKUPMUSTBECASTTOANINITIALCONTEXT AND THENNARROWED

3

'IVENAREMOTECLIENT@2 THATHASVALIDREFERENCESTOSESSIONBEANS@!AND@" ANDGIVENTHAT!ISALOCALCLIENTTO" WHICHSTATEMENTSARETRUE#HOOSEALL THATAPPLY

R! 2CANNOTPASSHISREFERENCEFOR! TO" R" !CANNOTPASSHISREFERENCEFOR" TO2 R# !CANNOTINVOKEMETHODSON" R$"CANNOTINVOKEMETHODSON2



&KDSWHU

WKHFOLHQWYLHZ

4

7HENCOMPARINGTWOSESSIONOBJECTS WHATISTRUE#HOOSEALLTHATAPPLY

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

5

7HICHSTATEMENTS ABOUTSESSIONBEANSARETRUE#HOOSEALLTHATAPPLY

R! 4HEBEANPROVIDERMUSTWRITETHEMETHODPUBLICVOIDREMOVE IN BOTHSTATELESSANDSTATEFULSESSIONCLASSES

R" ,OCALCLIENTSCANREMOVESESSIONBEANSBYCALLINGAMETHODONTHE BEANSHOME

R# 4HEREMOVE METHODINTHECOMPONENTINTERFACECANBEUSEDONLYBY REMOTECLIENTS

R$ 4OASKTHE%*"(OMETOREMOVEASESSIONBEAN THECLIENTMUSTPROVIDE THEBEANSHANDLE

\RXDUHKHUH



FRIIHHFUDPPRFNH[DP

0RFN([DP$QVZHUV 1

2

7HICHCAPABILITIESAREPROVIDEDBYBOTHREMOTEANDLOCALHOMEINTERFACESFOR SESSIONBEANS#HOOSEALLTHATAPPLY nÕt be removed here

session beanlos cacal home interface becausye ket y R! #REATINGASESSIONOBJECT through a ove() that takes a primar a rem R" 2EMOVINGASESSIONOBJECT - only R# 'ETTINGASESSIONOBJECTS%*"-ETA$ATA - not in a local home R$ 'ETTINGASESSIONOBJECTSHANDLE - not in a local home

7HENLOCATINGASESSIONBEANSREMOTEHOMEINTERFACE WHICHARESTEPSTHAT MUSTOCCURTOCREATEAVALIDHOMEINTERFACEREFERENCE#HOOSEALLTHAT APPLY

is

(spec: 57)

R! 4HESESSIONCONTEXTMUSTBENARROWED ANDTHENARROWEDRESULTCAST R" 4HERESULTOFTHE*.$)LOOKUPMUSTBENARROWED ANDTHENARROWED RESULTCAST

R# 4HEINITIALCONTEXTMUSTBENARROWED ANDTHENARROWEDRESULTCAST R$4HERESULTOFTHE*.$)LOOKUPMUSTBECASTTOANINITIALCONTEXT AND THENNARROWED

3

'IVENAREMOTECLIENT@2 THATHASVALIDREFERENCESTOSESSIONBEANS@!AND@" ANDGIVENTHAT!ISALOCALCLIENTTO" WHICHSTATEMENTSARETRUE#HOOSEALL THATAPPLY

R! 2CANNOTPASSHISREFERENCEFOR! TO" R" !CANNOTPASSHISREFERENCEFOR" TO2 R# !CANNOTINVOKEMETHODSON" R$"CANNOTINVOKEMETHODSON2



&KDSWHU

l mote clienta alolocacal re a ve gi t nÕ ca You B through reference, A sees reference

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 R$ 5SINGTHEEQUALS METHOD STATELESSSESSIONBEANSFROMTHESAMEHOME The behavior iÞed

equals()

is not spec

AREGUARANTEEDTORETURNTRUE

R% 5SINGTHEEQUALS METHOD STATEFULSESSIONBEANSFROMTHESAMEHOME AREGUARANTEEDTORETURNTRUE

5

7HICHSTATEMENTS ABOUTSESSIONBEANSARETRUE#HOOSEALLTHATAPPLY

)

e( ove(), not remov

R! 4HEBEANPROVIDERMUSTWRITETHEMETHODPUBLICVOIDREMOVE IN- itÕs ejbRem BOTHSTATELESSANDSTATEFULSESSIONCLASSES

- local homes have only a remove() that takes a BEANSHOME primary key R# 4HEREMOVE METHODINTHECOMPONENTINTERFACECANBEUSEDONLYBY - no, only for local REMOTECLIENTS R" ,OCALCLIENTSCANREMOVESESSIONBEANSBYCALLINGAMETHODONTHE

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  ,GHQWLI\FRUUHFWDQGLQFRUUHFWVWDWHPHQWVRU H[DPSOHVDERXWVHVVLRQEHDQVLQFOXGLQJ FRQYHUVDWLRQDOVWDWHWKH6HVVLRQ%HDQ LQWHUIDFHDQGFUHDWHPHWKRGV

 ,GHQWLI\WKHXVHRIDQGWKHEHKDYLRURIWKH HME3DVVLYDWHPHWKRGLQDVHVVLRQEHDQ LQFOXGLQJWKHUHVSRQVLELOLWLHVRIERWKWKH FRQWDLQHUDQGWKHEHDQSURYLGHU

 ,GHQWLI\WKHLQWHUIDFHDQGPHWKRGIRU

:KDWLWUHDOO\PHDQV 7KLVREMHFWLYHFDQKLW\RXRQDQ\WKLQJUHODWHGWR VHVVLRQEHDQVVR\RXSUHWW\PXFKKDYHWRNQRZLW DOOLQFOXGLQJWKHGHWDLOVRIERWKVWDWHOHVVDQGVWDWHIXO EHDQOLIHF\FOHVWKHFRQWDLQHUFDOOEDFNPHWKRGV RI6HVVLRQ%HDQZKDW\RXPXVWZULWHLQDEHDQ FODVVDQGZKDWDEHDQFDQJHWIURPLWV(-%&RQWH[W $Q\WKLQJFRYHUHGE\WKHRWKHUVHVVLRQEHDQREMHFWLYHV LVIDLUJDPH )LUVW\RXKDYHWRNQRZWKDWSDVVLYDWLRQLVIRURQO\ VWDWHIXOVHVVLRQEHDQV6WDWHOHVVEHDQVJREDFNWR WKHEHDQSRROZLWKRXWJRLQJWKURXJKSDVVLYDWLRQ6R HME3DVVLYDWH ZLOOQHYHUEHFDOOHGRQDVWDWHOHVV EHDQ



&KDSWHU

VHVVLRQEHDQOLIHF\FOH

2EMHFWLYH

6HVVLRQ%HDQV

2IILFLDO

:KDWLWUHDOO\PHDQV

 0DWFKFRUUHFWGHVFULSWLRQVDERXWSXUSRVH
DQGVWDWHIXOEHDQVLQFOXGLQJZKHQ\RX¶GFKRRVHRQH RYHUWKHRWKHU
 *LYHQDOLVWRIUHVSRQVLELOLWLHVUHODWHGWR


VHVVLRQEHDQVLQGHQWLI\WKRVHZKLFKDUH WKHUHVSRQVLELOLW\RIWKHVHVVLRQEHDQ SURYLGHUDQGWKRVHZKLFKDUHWKH UHVSRQVLELOLW\RIWKH(-%FRQWDLQHU SURYLGHU

 *LYHQDOLVWRIUHTXLUHPHQWVLGHQWLI\ WKRVHZKLFKDUHWKHUHTXLUHPHQWVIRUD VHVVLRQEHDQFODVVUHPRWHFRPSRQHQW LQWHUIDFHUHPRWHKRPHLQWHUIDFHFUHDWH PHWKRGVEXVLQHVVPHWKRGVORFDO FRPSRQHQWLQWHUIDFHUHPRWHFRPSRQHQW LQWHUIDFH

7KLVLVDERXWNQRZLQJEHDQODZ²WKHUXOHV\RXKDYHWR IROORZDFFRUGLQJWRWKHVSHFHYHQLQWKHFDVHVZKHUH FRPSLOHUZRQ¶WFDUHLI\RXGRQ¶W)RUH[DPSOH\RXPXVW KDYHDPDWFKLQJHME&UHDWH PHWKRGIRUHDFKFUHDWH PHWKRGLQWKHKRPHEXWWKHFRPSLOHUZRQ¶WVWRS\RXLI \RXOHDYHLWRXW$QG\RXPXVWNQRZWKDWORFDOLQWHUIDFH 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 *MIV8ZW^QLMZ

+TQMV\

*MIV

*RDOFDOOEXVLQHVV PHWKRGVRQDEHDQ



&KDSWHU

*RDOXQGHUVWDQGWKH WUXHPHDQLQJRILWVOLIH :KHUHLWFDPHIURP ZKDWLWVSXUSRVHLV KRZZLOOLWDOOHQG

*RDOZULWHGHSOR\DEOH ZHOOEHKDYHGEHDQV .QRZWKHEHDQ$3,ZHOO HQRXJKWRSXWWKHULJKW FRGHLQWKHULJKWSODFH

*RDOEHWKHEHDQ JRG0DQDJHWKHOLIH DQGGHDWKRIEHDQV LQWHUFHSWLQJDOORIWKH EHDQ·VPHWKRGFDOOV

VHVVLRQEHDQOLIHF\FOH

,FUHDWHXVHDQGUHPRYH EHDQVE\FDOOLQJPHWKRGVRQWKH KRPHDQGFRPSRQHQWLQWHUIDFHVWXEV 6RPHGD\,ZLOONLOOWKH%HDQ3URYLGHU ZLWKP\EDUHKDQGVIRUQHYHUJLYLQJ PHWKHULJKWVWXEV

+TQMV\

,·PDQREMHFWDQG,UXQ EXVLQHVVPHWKRGVEXW,·PDOVR DEHDQ$VDEHDQ,SD\DWWHQWLRQWRNH\ PLOHVWRQHVLQP\OLIHOLNHFRQVWUXFWLRQ ERULQJ EHDQ FUHDWLRQ YHU\LPSRUWDQW SDVVLYDWLRQ JRLQJWR VOHHS DFWLYDWLRQ ZDNLQJXS DQGUHPRYDO GHDWK QRWJRRGLI\RX·UHPH 7KHFRQWDLQHUWHOOVPH HYHU\WLPHRQHRIWKHVHVSHFLDOPRPHQWVRFFXUV 0RVWKDSSHQMXVWRQFH FRQVWUXFWLRQFUHDWLRQ UHPRYDO EXWDFWLYDWLRQSDVVLYDWLRQDQG EXVLQHVVPHWKRGVFDQKDSSHQRYHU DQGRYHUDJDLQ

*MIV ,ZULWHWKHEHDQFRGH%HVLGHVWKH EXVLQHVVPHWKRGV,KDYHWRLPSOHPHQW WKHFRQWDLQHUFDOOEDFNV WKHRQHVWKH FRQWDLQHUFDOOVZKHQVRPHWKLQJKDSSHQVLQWKH EHDQ·VOLIH ,DOVRKDYHWRZULWHWKHHME&UHDWH  PHWKRGVWRPDWFKWKHKRPHFUHDWH PHWKRGV $QG,·PXQGHUSDLGDQGWKH\VWLOOKDYHQ·W JLYHQPHRQHRIWKRVH$HURQŒFKDLUV

*MIV8ZW^QLMZ

,FRQVWUXFWWKHEHDQ, JLYHWKHEHDQLWVEHDQQHVV VSHFLDOEHDQFDSDELOLWLHV DQG,FDOOFUHDWH RQWKHEHDQSDVVLQJLQFOLHQWDUJXPHQWVLI LW·VDVWDWHIXOEHDQ,GHFLGHLIDQGZKHQWKH EHDQVKRXOGVOHHSDQGZDNHXSDQG,·PWKH RQO\RQHWKDWFDQNLOO UHPRYH DEHDQ, GHFLGHKRZDQGLIDEXVLQHVVPHWKRGLV FDOOHGRQDEHDQIDFWRULQJLQWKLQJV OLNHVHFXULW\DQGWUDQVDFWLRQV 7RDEHDQ,·PDJRG

+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

(-% REMHFW

VWXE

XUQ VWX E

FOLHQW FU  HD WH

VWXE

 NH PD

+RPH REMHFW



HV YLF VHU



 UHW

PDNH

EHDQ

H FUHDW

86( EXVLQHVVPHWKRGFDOO



VWXE

JHW$GYLFH

VHUYLFHV

 LFH Y G W$ JH

(-% REMHFW

JHW$GYLFH

 EHDQ

FOLHQW +RPH REMHFW

\RXDUHKHUH



VHVVLRQEHDQV


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



6HVVLRQ%HDQLQWHUIDFH MDYD[HME6HVVLRQ%HDQ

LQWHUIDFH!! $GYLFH+RPH

FUHDWH 6WULQJFOLHQW1DPH

for eve the homry create() in a match e, there must in the b ing ejbCreate( be ean )

$GYLFH%HDQ

LQWHUIDFH!! 6HVVLRQ%HDQ

VHW6HVVLRQ&RQWH[W 6HVVLRQ&RQWH[WVF

VHW6HVVLRQ&RQWH[W 6HVVLRQ&RQWH[WVF

HME$FWLYDWH

HME$FWLYDWH

HME3DVVLYDWH

HME3DVVLYDWH HME5HPRYH

HME5HPRYH HME&UHDWH 6WULQJFOLHQW1DPH JHW$GYLFH

e d from toht a o h t e m s s Busine nt interface, n compone r callback containe





you must always implement these FOUR container callba methods in your session bean ck class

&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 SDFNDJHKHDG¿UVW LPSRUWMDYD[HME 

ent SessionBean

You MUST implem

SXEOLFFODVV$GYLFH%HDQLPSOHPHQWV6HVVLRQ%HDQ^  instance variable to hold the context we SULYDWH6HVVLRQ&RQWH[WFRQWH[W get from a container callback method. SULYDWH6WULQJQDPH   SXEOLFYRLGHME$FWLYDWH ^  ` ethods

of SessionBean the four m implement that you must

SXEOLFYRLGHME3DVVLYDWH ^  ` SXEOLFYRLGHME5HPRYH ^ `

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

SXEOLFYRLGHME&UHDWH 6WULQJFOLHQW1DPH ^ QDPH FOLHQW1DPH ` business meth

This must match the from the home interfacrceeate method

od from the component interface... not a contain er callback

SXEOLF6WULQJJHW$GYLFH ^ UHWXUQ³$GYLFHIRU³QDPH³WKHUHLVQRVSRRQ´ ` `

\RXDUHKHUH



FRQWDLQHUFDOOEDFNV

:KHQDUHFRQWDLQHUFDOOEDFNVLQYRNHG" )RUVWDWHIXOVHVVLRQEHDQVZKHQWKHEHDQWUDQVLWLRQV IURPRQHVWDWHWRDQRWKHU

EHDQWKURZVV\VWHPH[FHSWLRQ XQFKHFNHGXQFDXJKW

GRHVQRWH[LVW

FRQVWUXFWRU VHW6HVVLRQ&RQWH[W HME&UHDWH

HME5HPRYH RUWLPHRXW

WLPHRXW

===

===

HME3DVVLYDWH SDVVLYDWHG

PHWKRGUHDG\

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

0RYLQJIURPGRHVQRWH[LVW WRPHWKRGUHDG\

EHDQWKURZVV\VWHPH[FHSWLRQ XQFKHFNHGXQFDXJKW

GRHVQRWH[LVW

FRQVWUXFWRU

FRQVWUXFWRU

VHW6HVVLRQ&RQWH[W  HME&UHDWH

HME5HPRYH RUWLPHRXW

WLPHRXW

VHW6HVVLRQ&RQWH[W  HME&UHDWH

HME3DVVLYDWH PHWKRGUHDG\

SDVVLYDWHG HME$FWLYDWH

0RYLQJIURPPHWKRGUHDG\ WRSDVVLYDWHGDQGYLFHYHUVD

EHDQWKURZVV\VWHPH[FHSWLRQ XQFKHFNHGXQFDXJKW

GRHVQRWH[LVW

FRQVWUXFWRU

HME3DVVLYDWH

VHW6HVVLRQ&RQWH[W  HME&UHDWH

HME5HPRYH RUWLPHRXW

HME$FWLYDWH

WLPHRXW

HME3DVVLYDWH

PHWKRGUHDG\

SDVVLYDWHG HME$FWLYDWH

0RYLQJIURPSDVVLYDWHGRU PHWKRGUHDG\WRGRHVQRWH[LVW

EHDQWKURZVV\VWHPH[FHSWLRQ XQFKHFNHGXQFDXJKW

GRHVQRWH[LVW

FRQVWUXFWRU

WLPHRXWV\VWHPH[FHSWLRQ

VHW6HVVLRQ&RQWH[W  HME&UHDWH

HME5HPRYH RUWLPHRXW

WLPHRXW

RU HME5HPRYH

HME3DVVLYDWH PHWKRGUHDG\

SDVVLYDWHG HME$FWLYDWH

\RXDUHKHUH



VHVVLRQEHDQV

WKHUH DUH QR

Q:

'XPE 4XHVWLRQV

)FITSSOCOMMONTOLEAVETHEMETHODSEMPTY WHYDONT THEYHAVEADAPTERCLASSESLIKETHEYHAVEFOREVENTHANDLERSˆTHAT IMPLEMENTALLTHEMETHODSFROMTHEINTERFACE)STHEREANYREASON WHYYOURBEANCLASSCANTEXTENDACLASSTHATIMPLEMENTSTHE 3ESSION"EANINTERFACE

A:

4HE!0)DOESNTHAVEADAPTERCLASSESFOR3ESSION"EAN IMPLEMENTATIONSIEACLASSTHATIMPLEMENTSALLOFTHEMETHODS "UT THERESNOREASONYOUCANTMAKEONEYOURSELF+EEPINMIND THOUGH THATWITHREAL WORLDBEANSYOUPROBABLYWILLHAVECODEINONEORMORE OFTHEMETHODS!NDYOUMIGHTEVENBEWORKINGWITHABEAN AWARE)$% THATPUTSTHEMETHODSINFORYOUANYWAY 3TILL ITMIGHTBEHANDYTOMAKEYOURSELFAGENERICBEANTHATYOU TYPICALLYEXTENDFROM THATHASALLOFTHEMETHODSFROM3ESSION"EAN 7ITHSTATELESSBEANS ESPECIALLY YOUHAVETOIMPLEMENTEJB!CTIVATE AND EJB0ASSIVATE EVENTHOUGHTHEYLLNEVERBECALLED3TATELESSBEANSARE NEVERPASSIVATEDYOULLSEEMOREONTHATLATERINTHECHAPTER

Q:

)JUSTREMEMBEREDTHAT)READSOMEWHERETHATENTERPRISEBEANS DONTSUPPORTINHERITANCE7HATSTHATABOUT

A:

!HACOMMONMISCONCEPTION7ELL SORTOF%*"SUPPORTSREGULAR *AVACLASSINHERITANCE BUTHASNOCONCEPTOFBEANINHERITANCE!NDNOW YOUREASKING h7HATTHEHECKISTHEDIFFERENCEv9OUALREADYKNOWWHAT CLASSINHERITANCEIS ITSTHETHINGYOUDOIN*AVAWHENONECLASSEXTENDS ANOTHER!NDYOUCANDOTHATWITHABEAN JUSTLIKEANYOTHERCLASS "UTBEANINHERITANCEIFITWERESUPPORTED WOULDMEANTHATABEAN CLASSCOULDEXTENDANOTHERBEANCLASSANDINHERITNOTJUSTTHECLASS INHERITABLEMEMBERS BUTALSOITSBEANNESS7HATKINDOFBEANNESS MIGHTBEINHERITABLE*USTINCASETHEYDODECIDETOSUPPORTTHISIN THEFUTURE WHICHISAPOSSIBILITY2EGULAROLDNON ENTERPRISEBEANSDO SUPPORTBEANINHERITANCE /NEIDEAMIGHTBETOHAVEYOURBEANSUBCLASSINHERITSOMEOFTHE DEPLOYMENTDESCRIPTORSETTINGSOFITSSUPERCLASS ANDTHENOVERRIDETHE ONESITWANTSTOCHANGEWITHAMUCHSMALLER INCOMPLETEDEPLOYMENT DESCRIPTOR4HATMIGHTBECOOLWERENOTSURE"UTRIGHTNOW ITSJUSTOUR LITTLEFANTASY )NTHEMEANTIME GOAHEADANDLETYOURBEANEXTENDANOTHERCLASS IFIT MAKESSENSEFORYOUR//DESIGN

6KDUSHQ \RXU SHQFLO )RUWKHH[DP\RXKDYHWRNQRZH[DFWO\ ZKLFKPHWKRGVDUHLQWKH6HVVLRQ%HDQ LQWHUIDFHVRQRZLVDJRRGWLPHWRVWDUW PHPRUL]LQJWKHP6HHLI\RXFDQUHPHPEHU WKHQDPHRIWKHPHWKRGWKDWPDWFKHVWKH EHKDYLRUGHVFULEHG:H·YHLQFOXGHGVRPH SUHWW\ELJKLQWVKHUHEHFDXVHLW·V\RXUILUVW WLPHEXWWKHPRFNH[DPTXHVWLRQVZLOOEH PXFKOHVVREYLRXV

7KLVPHWKRGLVFDOOHGZKHQWKHFOLHQWWHOOV WKH&RQWDLQHUWKDWKH·VGRQHXVLQJDVWDWHIXO VHVVLRQEHDQ7KHEHDQLV127KDSS\ BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB

7KLVPHWKRGLVFDOOHGZKHQWKHEHDQ LVSXWWRVOHHSWRWHPSRUDULO\FRQVHUYH UHVRXUFHV BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB

7KLVPHWKRGLVFDOOHGZKHQWKHSUHYLRXVO\ VOHHSLQJEHDQLVFDOOHGEDFNWRDFWLYHGXW\ WRVHUYLFHDEXVLQHVVPHWKRG BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB

7KLVPHWKRGLVFDOOHGQHDUWKHEHJLQQLQJ RIWKHEHDQ·VOLIHZKHQWKH&RQWDLQHUKDQGV WKHEHDQDUHIHUHQFHWRWKHEHDQ·VVSHFLDO OLQNWRWKH&RQWDLQHU BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB



&KDSWHU

VHVVLRQEHDQOLIHF\FOH

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

GRHVQRWH[LVW

EHDQWKURZVV\VWHPH[FHSWLRQ XQFKHFNHGXQFDXJKW

RUWLPHRXW

===

WLPHRXW

PHWKRGUHDG\

===

SDVVLYDWHG

PHWKRGFDOOV


WKDQN ,I\RXWDNHWKHH[DP\RX¶OO XVH HFD KE HDW XVIRUEHDWLQJLWWRG UGV ZD DFN LWE RZ NQ XVW \RXUHDOO\P DQGIRUZDUG RSHUWKLV %XWHYHQDVDEHDQGHYHO J\RXU LWLQ ZU OWR QWD PH LVVRIXQGD WR DQW EHDQFRGHWKDW\RX'2Z Q¶W LVLV 7K HG KDYHWKLVPHPRUL] DWLRQ RUL] HP ,P $3 RVH IWK OLNHRQHR Q¶W ³,V LQN TXHVWLRQVZKHUH\RXWK "´ WKDWZKDWWKHGRFVDUHIRU DWSXWV (WK ,' DQ DYH XK \R (YHQLI RXU R\ LQW WKHFRQWDLQHUFDOOEDFNV WR YH KD VWLOO RX FRGHIRU\RX\ GZKDW NQRZZKDWWKH\PHDQDQ RLQ RWG \RXVKRXOGRUVKRXOGQ HDFKRQH

\RXDUHKHUH



EHDQFUHDWLRQ

GRHVQRWH[LVW

FRQVWUXFWRU

*MIV+ZMI\QWV" _PMVIVWJRMK\JMKWUM[IJMIV

VHW6HVVLRQ&RQWH[W HME&UHDWH

PHWKRGUHDG\

ejbCreate()life, d n a () t x e t n Õs setSessionCoonce in a session beayn to do ly r n t o n Õt on happe is too w it ! And d so donÕt blosoon... the constructor things too o any bean things. early to d

7KHSURXGHVWPRPHQWRIP\OLIH LVZKHQWKH*UDQG0DVWHU&RQWDLQHU PDNHVPHDEHDQE\JLYLQJPHDFRQWH[WDQG FDOOLQJP\FUHDWH %HIRUHWKDW,·PMXVWDQ RUGLQDU\REMHFW%XWDVDEHDQ,KDYHVSHFLDO SULYLOHJHV EHVLGHVWKHVHFUHWKDQGVKDNH  OLNHWKHDELOLW\WRJHWVHFXULW\ RUWUDQVDFWLRQLQIR

!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 EHDQJRHVIURPWKLV

WRWKLV"

card-carrying bean

object



!BEANSCONTEXTSOMETIMESCALLED%*"#ONTEXT REFERRINGTOTHESUPERINTERFACEOF3ESSION#ONTEXT ISTHEBEANSONLYLIFELINETOTHE#ONTAINER ANDIT LETSTHEBEANDOTHINGSLIKEGETSECURITYINFORMATION ABOUTTHECALLINGCLIENT FORCEATRANSACTIONTO ROLLBACK GETAREFERENCETOTHEBEANSOWNHOMEOR %*"OBJECT ANDMORE

'RQ·WFRQIXVH DEHDQFRQWH[W ZLWKD-1', FRQWH[W

DVDOOVR -XVWZKHQ\RXWKRXJKWLWZ WKDWWKH UURU UKR \RX FOHDU\RX¿QGWR G DGH HUOR RY W´LV WH[ FRQ ZRUG³ LRQ&RQWH[W $EHDQ¶VFRQWH[WOLNH6HVV JH'ULYHQ RU(QWLW\&RQWH[WRU0HVVD DOUHIHU HFL VS &RQWH[W LVWKHEHDQ¶V H[W IRU RQW %& (QGV [WH HQFH ZKLFKH U LQH JHWWLQJLQIRIURPWKH&RQWD



$VSHFLDO-1',&RQWH[W %VERYBEANGETSITSVERYOWN*.$)CONTEXT WHERE ITCANlNDTHINGSINCLUDINGRESOURCEMANAGER CONNECTIONFACTORIESOBJECTSTHATGIVEYOU CONNECTIONSTORESOURCESLIKEADATABASE OTHER BEANS ANDDEPLOY TIMECONSTANTVALUESTHATYOUCAN USETOCUSTOMIZEYOURBEANSVARIABLES9OULLLEARNA LOTMOREABOUTTHATIN#HAPTER WHEREWELOOKAT THEENTERPRISEBEANENVIRONMENTTHATSWHATTHESPEC CALLSTHEBEANSSPECIAL*.$)CONTEXT 

ZLWKD-1', 7KLVKDV127+,1*WRGR PHPEHULV FRQWH[W$-1',FRQWH[WUH ',YLUWXDO -1 QD DSDUWLFXODU³QRGH´R [WLVWKH QWH &R WLDO ,QL $Q UHH GLUHFWRU\W RXUHQWU\ V\ -1',FRQWH[WWKDWVHUYHVD RWKHU ,Q WXUH WUXF HV SRLQWLQWRWKHWUH XVWDUW \R LFK ZK RP HIU ODF HS ZRUGVWK HH QDYLJDWLQJWKURXJKWKHWU UG³FRQWH[W´ :KHQHYHU\RXVHHWKHZR QWH[WRIWKH FR ORRNFORVHO\DWWKHXP KFRQWH[W KLF RZ XWW UHR TXHVWLRQWR¿JX (-% Q¶V WKHTXHVWLRQUHIHUV²WKHEHD VK KHH W6 WH[ &RQWH[WRU-1',FRQ

$6HVVLRQ&RQWH[WUHIHUHQFH



$FFHVVWREHDQVDQGUHVRXUFHV *USTBECAUSEYOUGOTACONNECTIONTOADATABASE DOESNTMEANYOUCANALWAYSUSEIT0ARTOFBEINGA BEANISTHEABILITYTOACCESSARESOURCELIKEADATABASE ORCALLMETHODSONANOTHERENTERPRISEBEAN

\RXDUHKHUH



VSHFLDOEHDQWKLQJV

6SHFLDO%HDQ7KLQJV



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

ƒ ƒ ƒ ƒ ƒ ƒ

(-%&RQWH[W



JHWDUHIHUHQFHWR\RXUKRPH JHWDUHIHUHQFHWR\RXU(-%REMHFW 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 FRQQHFWLRQ

0\3ULYDWH3ODFH %DU

ƒ GHSOR\WLPHFRQVWDQWYDOXHV NLQGRIOLNHSURSHUWLHV IRUWKHEHDQ YDOXHVVHWE\WKHGHSOR\HUWKDWWKHEHDQFDQORRNXSDQGXVH DVYDULDEOHVDWUXQWLPH 

a beanÕs special JNDI reference

ƒ DUHIHUHQFHWRDQ´DGPLQLVWHUHGREMHFWµUHVRXUFH ZKLFKXVXDOO\ PHDQVD-06GHVWLQDWLRQ 

'%



&KDSWHU

$FFHVVWR

ƒ DQRWKHUEHDQ ƒ DUHVRXUFHPDQDJHU OLNHDGDWDEDVH

VHVVLRQEHDQOLIHF\FOH



VFHQDULR %HSUHSDUHGIRUFRGHRUD DVNV DQG RG HWK DP WKDWVKRZV\RX DU%HDQ FXO DUWL DS GR FDQ RX HU\ ZKHWK WKH HQ JLY RG 7KLQJIURPWKDWPHWK V FLUFXPVWDQFH VKRZQ )RUH[DPSOH\RXPLJKWEH HWKRGRID P H[W WKHVHW6HVVLRQ&RQW OORZHGWR UHD RX¶ LI\ HG EHDQDQGDVN EDVH  DWD DFFHVVDUHVRXUFH OLNHDG RX W< QR X¶UH IURPWKDWPHWKRG
&OREXAMPLE IFYOUREASTATEFULSESSIONBEAN YOUR CREATIONISADIRECTRESULTOFTHECLIENTCALLINGCREATE ON YOURHOME)FYOUREASTATEFULBEAN ANDYOUREINYOUR EJB#REATE METHOD THERECANBEONLYONEREASONACLIENT HASASKEDFORYOUTOBECREATED!NDTHATMEANSYOUCANlND OUTWHOTHECLIENTIS BYASKINGYOUR%*"#ONTEXTLIKE 3ESSION#ONTEXT FORCLIENTSECURITYINFORMATION "UTIFYOUREASTATELESSBEAN YOURCREATIONISNTTIEDTOANY PARTICULARCLIENTSREQUESTYOULLLEARNALLABOUTTHISINA FEWMOREPAGES )NFACT IFTHE#ONTAINERWANTSTO ITCAN CREATEABUNCHOFSTATELESSBEANSFORTHEPOOLBEFORETHERE AREANYCLIENTS!NDTHATMEANSASTATELESSBEANCANNOTGET SECURITYINFORMATIONABOUTTHECLIENTDURINGEJB#REATE  "ECAUSETHERESNOCLIENT4HERESONLYTHE#ONTAINER INVOKINGACONTAINERCALLBACKTHATSNOTPARTOFACLIENT CALL ANDWEDONTCONSIDERTHE#ONTAINERTOBEACLIENT 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 REMHFW

VWXE 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

VH W6 H HM VVLR E& Q& UH RQ DW WH H [W

EHDQ

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 REMHFW

(-% REMHFW

FUHDWH QHZ

QHZ QHZ EHDQ·VFRQVWUXFWRUUXQV

VHW6HVVLRQ&RQWH[W HME&UHDWH

ETO NTHAV SS O D U O A 9 -,TOP KNOW5  M THEEXA UTO

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



&KDSWHU

6HVVLRQ &RQWH[W

EHDQ

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



you

VHW6HVVLRQ&RQWH[W 6HVVLRQ&RQWH[WVF 6DYH\RXUFRQWH[W
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 ably belongs in ejbCreate().



HME&UHDWH 3XWDOO\RXULQLWLDOL]DWLRQFRGHKHUH,ILW·VDVWDWHIXOEHDQDQGWKHFUHDWH  PHWKRGKDVDUJXPHQWVWKH&RQWDLQHUZLOOSDVVWKRVHDUJXPHQWVLQWR\RXU PDWFKLQJHME&UHDWH PHWKRG
YouÕre a full member of the bean society now, so this is where youÕll usually put ALL 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\RXU(-%REMHFW ‰ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW ‰ IRUFHDWUDQVDFWLRQWRUROOEDFN &07

‰ JHWDUHIHUHQFHWR\RXUKRPH ‰ JHWDUHIHUHQFHWR\RXU(-%REMHFW ‰ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW ‰ IRUFHDWUDQVDFWLRQWRUROOEDFN &07

ItÕs too early to DO anything ! YouÕre an object, but not yet a bean.

EHDQV

EHDQV

‰ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\

‰ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\

EHHQVHWWRUROOEDFN &07EHDQV

EHHQVHWWRUROOEDFN &07EHDQV

‰ JHWDWUDQVDFWLRQUHIHUHQFHDQGFDOO

‰ JHWDWUDQVDFWLRQUHIHUHQFHDQGFDOO

PHWKRGVRQLW %07EHDQV

PHWKRGVRQLW %07EHDQV

$FFHVV

$FFHVV

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

‰ \RXUVSHFLDO-1',HQYLURQPHQW ‰ DQRWKHUEHDQ·VPHWKRGV ‰ 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


&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

PHWKRGUHDG\

he ady state, tness e r d o h t e m In the her running a busi bean is eit waiting for the method or all one... client to c

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

7KHRQO\UHDVRQ,FDOOHG FUHDWH RQWKHKRPHLVVR,FRXOG JHWDUHIHUHQFHWRDEHDQ·VFRPSRQHQW LQWHUIDFHDQGGRZKDW,5($//<ZDQW FDOODEXVLQHVVPHWKRG)DUDV,·P FRQFHUQHGWKDW·VWKH21/<UHDVRQ WKHEHDQ·VDOLYH7RVHUYLFH 0(VR,FDQVKRS

$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 ZH·UHGRQH



7KDWFOLHQWGRHVQ·WVHHPWREH 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

===

 

tied directly e r a s n a e b StateFUL , remember, so until ut to a client iner decides to timeoas the Conta(because the client w n the bean ay too long), the bea inactive w sed for anything (or canÕt be u e. anyone) els nÕt have thlis o d s n a e b S StateLES hey go back to a poo a problem, tach method call, since between e tied to a client. bean isnÕt 

&KDSWHU

7HENTHE#ONTAINERDECIDESASTATEFULBEANISWASTING RESOURCES ITLLCALLTHEBEANSEJB0ASSIVATE METHODAND THENSAVETHEBEANINTOTEMPORARYSTORAGE

7HYDOYOUCAREABOUTPASSIVATIONDETAILS "ECAUSETHE#ONTAINERUSESASPECIALSETOFRULESNEARLY IDENTICALTO3ERIALIZATION TOPASSIVATEYOURBEAN ANDITS YOURJOBTOMAKESUREYOURINSTANCEVARIABLESAREINASTATE THATWORKSFORPASSIVATION!NDITSJUSTATINYBITMORESUBTLE THANSIMPLYMAKINGNON 3ERIALIZABLEVALUESTRANSIENT

===

VHVVLRQEHDQOLIHF\FOH

/LIHF\FOHRYHUYLHZEHDQSDVVLYDWLRQDFWLYDWLRQ  &OLHQWGRHVQ·WFDOODQ\PHWKRGV IRUDZKLOHVRFRQWDLQHUFDOOV HME3DVVLYDWH RQWKHEHDQ

(-% REMHFW

FOLHQW

VWXE

EHDQ

WH VLYD V D 3 HME

 &RQWDLQHUFDOOVHME3DVVLYDWH RQ WKHEHDQWKHQVDYHVWKHEHDQWR WHPSRUDU\VWRUDJH HLWKHUWKURXJK VHULDOL]DWLRQRUVRPHWKLQJOLNHLW 

===

===

EHDQ

(-% REMHFW

FOLHQW VWXE

EHDQLVDVOHHS SDVVLYDWHGDQG WHPSRUDULO\VDYHG

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

JHW$GYLFH



JHW$GYLFH FOLHQW



VWXE

H GYLF $ W JH  (-% REMHFW

WH WLYD F $ HME 

EHDQ

\RXDUHKHUH



EHDQSDVVLYDWLRQ

WKHUH DUH QR

'XPE 4XHVWLRQV

Q:

(OWDOESTHE#ONTAINER KNOWWHENTOPASSIVATEABEAN

A:

4HE#ONTAINERLOOKSFORINAC TIVITY)FTHECLIENTHASNTBEENDOING ANYTHINGFORSOMEPERIODOFTIME THE#ONTAINERCANCHOOSETOPASSIV ATETHEBEAN)FITNEEDSTO

Q:

'EECANYOUBEANYMORE NON COMMITTAL(OWLONGIS hSOMEPERIODOFTIMEvANDWHAT DETERMINESWHETHERTHE#ONTAINER @NEEDSTOPASSIVATETHEBEAN

A:

4HEREISNOTHINGINTHESPEC THATSAYSYOUREALLOWEDTOTUNE THEPARAMETERSFORTHE#ONTAINERS PASSIVATIONDECISIONS"UTMANY CONTAINERSDOGIVEYOUAWAYTO SETAVARIETYOFVALUES4HEDECISION MIGHTBEBASEDONAVAILABILITYOFRE SOURCES LIKE hPASSIVATESTATEFULSES SIONBEANSONLYWHENAVAILABLE2!- HITSTHISLEVELvOR hPASSIVATEBEANS ONLYWHENTHENUMBEROFACTIVE STATEFULSESSIONBEANSREACHESv !NDYOUMIGHTBEABLETOSETTHE INACTIVITYVALUEFORTHEAMOUNTOF ELAPSEDTIMEATWHICHTHE#ONTAINER SHOULDPASSIVATE



&KDSWHU

Q:

7HATIFTHECLIENTCRASHES #ANTHESERVERTELL)STHEREANY KINDOFDISTRIBUTEDGARBAGECOL LECTIONORLEASINGLIKETHEREISWITH 2-)/RISTHESERVERREALLYJUST BASINGEVERYTHINGONINACTIVITY

A:

!CCORDINGTOTHESPEC THERE ISNOGUARANTEEOFDISTRIBUTEDGAR BAGECOLLECTION WHICHMEANSYOU SHOULDASSUMETHATITISNTHAPPEN ING0ARTOFTHEREASONISBECAUSEAN %*"CLIENTCOULDATLEASTINTHEORY BEA#/2"!CLIENTRATHERTHANA*AVA 2-)CLIENT3OTHEWHOLECONCEPTOF 2-)SDISTRIBUTEDGARBAGECOLLECTION WOULDNTAPPLY !NDJUSTAQUICKOFF PATHHERE DISTRIBUTEDGARBAGECOLLECTIONDGC ORDISTRIBUTEDLEASINGAREWAYSIN WHICHASERVERCANFIGUREOUTIF ACLIENTHASWITHDGC NULLEDOUT THEIRREFERENCETOTHESTUB ORWITH LEASING IFTHECLIENTHASSIMPLYGONE AWAY EITHERBYSHUTTINGDOWNTHE APP CRASHING ORDISCONNECTINGFROM THENETWORK 4HEBOTTOMLINEISTHATYOUHAVETO ASSUMETHATTHE%*"SERVERDOESNT SUPPORTTHIS SOYOURESTUCKWITH INACTIVITYANDPERHAPSSOMEKINDOF ,25,EAST2ECENTLY5SED ALGO RITHMSFORSELECTINGWHOSHOULD BEPASSIVATEDIFRESOURCESBECOME SCARCEANDTHE#ONTAINERNEEDSTO BRINGDOWNSOMEBEANS

7KHUH¶VQRWKLQJRQWKH H[DPDERXWYHQGRU VSHFL¿FSDVVLYDWLRQ VHWWLQJVRUEHKDYLRU 7KHRQO\WKLQJRQWKHH[DPDERXW SDVVLYDWLRQLVZKDW\RX¶UHUHVSRQVLEOH IRUDVD%HDQ3URYLGHU²JHWWLQJ \RXULQVWDQFHYDULDEOHYDOXHVLQD SDVVLYDWDEOHVWDWH ZH¶OOWDONDERXW WKDWQH[W 1RWKLQJDERXWSDVVLYDWLRQ JRHVLQWRWKHGHSOR\PHQWGHVFULSWRU VR\RXGRQ¶WQHHGWRNQRZKRZ SDVVLYDWLRQSDUDPHWHUVDUHVHWIRU DQ\SDUWLFXODUVHUYHU

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 FDUHRIQRPDWWHUZKDW

:KHQHME3DVVLYDWH FRPSOHWHVHYHU\QRQWUDQVLHQWLQVWDQFH 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


\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 again. Notice that the DataSource did not have to beonrest ored itÕs one of the things on the ContainerÕs Òapp , because (Because itÕs a resource manager connection roved listÓ. factory, and the Container is required to passivate it.)



&KDSWHU

VHVVLRQEHDQOLIHF\FOH

WKHUH DUH QR

'XPE 4XHVWLRQV

Q:

#ANTYOUJUSTMARKYOURNON 3ERIALIZABLEVARIABLES TRANSIENT)SNTTHATWHATTRANSIENTISFOR

A:

9OUCOULD YES BECAUSETHE#ONTAINERISREQUIREDTO FOLLOWTHERULESFOR3ERIALIZATIONWHENITPASSIVATESABEAN EVENIFTHE#ONTAINERCHOOSESTOUSESOMETHINGOTHERTHAN SERIALIZATIONTOGETTHEJOBDONE  "UTTHERESALITTLETEENYCOMMENTINTHESPECWHICH SAYSTHATTHERESANEXCEPTIONTOTHERULETHATPASSIVATION BEHAVEJUSTLIKESERIALIZATION4HEEXCEPTIONISTHATWHILE SERIALIZATIONISREQUIREDTOBRINGBACKTRANSIENTFIELDSWITH DEFAULTVALUES PASSIVATIONDOESNTGUARANTEETHAT 7HATDOESTHISMEAN4HINKABOUTIT)TMEANSYOUCANT RELYONTRANSIENTTOGIVEYOUBACKYOURDEFAULTS SOAFTER ACTIVATION YOUCOULDENDUPWITH WELL ANYTHINGINA VARIABLETHATSMARKEDTRANSIENT 3O YOUAREFREETOUSETRANSIENT ANDITCANMAKEPASSIVATION MOREEFFICIENT BUTTHEIMPLICATIONISˆRESETYOURTRANSIENT VARIABLESYOURSELF INEJB!CTIVATE 

Q:

7HATIF)HAVEANON 3ERIALIZABLEVALUETHAT)REALLY NEEDTOMAINTAINDURINGPASSIVATION)F)CANTSAVEIT HOW WILL)KNOWWHATTOSETITBACKTOINEJB!CTIVATE 

A:

4HISISACLASSICSERIALIZATIONISSUE NOTSPECIFICTO PASSIVATION4HEUSUALTRICKISTOINTERROGATETHENON 3ERIALIZABLEOBJECTTOGETALLTHEIMPORTANTSTATEOUTOF IT ANDSTICKTHATSTATEINTOINSTANCEVARIABLESTHATARE 3ERIALIZABLE4HENDURINGEJB!CTIVATE USETHEVALUESYOU WEREABLETOSAVETORECONSTRUCTTHENON 3ERIALIZABLEOBJECT SOTHATITSIDENTICALTOTHEONEYOUHADBEFOREPASSIVATION &OREXAMPLE IMAGINEYOUHAVEA$OGBEANWITHA#OLLAR VARIABLE ANDTHE#OLLARISNT3ERIALIZABLE)NEJB0ASSIVATE CALLGETTERSONTHE#OLLARTORETRIEVETHEVALUESTHATMATTER LIKEGET#OLOR GET3IZE ETC 3AVETHOSEVALUESININSTANCE VARIABLESINTHEBEAN THENINEJB!CTIVATE INSTANTIATEANEW #OLLARANDUSETHE#OLLARATTRIBUTESYOUSAVEDASARGUMENTS TOSETTERSONTHENEW#OLLAROBJECT

6KDUSHQ \RXU SHQFLO
‰ UHIHUHQFHWRDMDYDQHW6RFNHWREMHFW ‰ UHIHUHQFHWRDMDYD[VTO'DWD6RXUFH ‰ UHIHUHQFHWRDEHDQ·V5HPRWHFRPSRQHQW LQWHUIDFH

‰ UHIHUHQFHWRDEHDQ·V-1',FRQWH[W ‰ UHIHUHQFHWRDMDYDVTO&RQQHFWLRQ ‰ UHIHUHQFHWRDMDYD[HME6HVVLRQ&RQWH[W REMHFW

‰ DWUDQVLHQWYDULDEOHZLWKDQXOOYDOXH ‰ DQRQWUDQVLHQW6HULDOL]DEOHYDULDEOHZLWK DQXOOYDOXH

‰ DWUDQVLHQWYDULDEOHZLWKDQRQQXOOYDOXH ‰ DQRQWUDQVLHQWQRQ6HULDOL]DEOHYDULDEOH ZLWKDQXOOYDOXH

‰ DQRQWUDQVLHQWQRQ6HULDOL]DEOHYDULDEOH ZLWKDQRQQXOOYDOXH

:HZHUHJRLQJIRUDSHUVRQDOEHVW 3% LQWKH 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\RXU(-%REMHFW ‰ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW ‰ IRUFHDWUDQVDFWLRQWRUROOEDFN &07

‰ JHWDUHIHUHQFHWR\RXUKRPH ‰ JHWDUHIHUHQFHWR\RXU(-%REMHFW ‰ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW ‰ IRUFHDWUDQVDFWLRQWRUROOEDFN &07

EHDQV

EHDQV

‰ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\

‰ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\

EHHQVHWWRUROOEDFN &07EHDQV

EHHQVHWWRUROOEDFN &07EHDQV

‰ JHWDWUDQVDFWLRQUHIHUHQFHDQGFDOO

‰ JHWDWUDQVDFWLRQUHIHUHQFHDQGFDOO

PHWKRGVRQLW %07EHDQV

PHWKRGVRQLW %07EHDQV

$FFHVV

$FFHVV

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

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

\RXDUHKHUH



EHDQUHPRYDO

*MIV:MUW^IT" _PMVJMIV[LQM

$VDVWDWHIXOEHDQ ,·PDSHUVRQDOVODYHWR WKHFOLHQWDQGZKHQVKH·VGRQH ZLWKPH,·PWRVVHGRXWOLNH VRPDQ\$2/GLVNV6RPHWLPHV WKH\GRQ·WHYHQOHWPHVD\ JRRGE\H

GRHVQRWH[LVW

EHDQWKURZVV\VWHPH[FHSWLRQ XQFKHFNHGXQFDXJKW

HME5HPRYH RUWLPHRXW

PHWKRGUHDG\

WLPHRXW

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 

FOLHQW

UHPRYH

UHPRYH

EHDQ

(-% REMHFW

VWXE

 &RQWDLQHUFDOOVHME5HPRYH  RQWKHEHDQ

FOLHQW

(-% REMHFW

VWXE

EHDQ

YH HPR 5 E 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

(-% REMHFW

FOLHQW

VWXE

 &RQWDLQHU´NLOOVµWKHEHDQDQG(-%

REMHFW DVVXPHWKH\·UHQRZHOLJLEOH IRUJDUEDJHFROOHFWLRQ 7KHFOLHQW ZLOOJHWDQH[FHSWLRQLIVKHWULHVWR XVHWKHVWXEDJDLQ

FOLHQW

PLJKWVWLOOEHKHU HEXW ZLOOQRORQJHUZRU N



&KDSWHU

EHDQ

RYH P H 5 HME

VHVVLRQEHDQOLIHF\FOH

/LIHF\FOHRYHUYLHZUHPRYLQJDVWDWHIXOEHDQ %HDQWLPHVRXWZKLOHSDVVLYDWHG

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

===

===

EHDQ

FOLHQW

(-% REMHFW

VWXE

1RDFWLYLW\

 &RQWDLQHUGHFLGHVWRNLOOWKHEHDQ EXWGRHV127FDOOHME5HPRYH 

===

FOLHQW

(-% REMHFW

VWXE

===

EHDQ

RJF GW VHQ

HYHU EHDQQ H K  W  6 YH FDOO <,.( ME5HPR H Q D V W 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 H[HFXWLQJDPHWKRG

([FHSWLRQ

EHDQ

(-% REMHFW

FOLHQW

VWXE

 &RQWDLQHUGHFLGHVWRNLOOWKHEHDQ EXWGRHV127FDOOHME5HPRYH 

(-% REMHFW

FOLHQW

VWXE

 &RQWDLQHU´NLOOVµWKHEHDQDQG(-%

REMHFW DVVXPHWKH\·UHQRZHOLJLEOH IRUJDUEDJHFROOHFWLRQ 7KHFOLHQW ZLOOJHWDQH[FHSWLRQLIVKHWULHVWR XVHWKHVWXEDJDLQ

FOLHQW

PLJKWVWLOOEHKHU HEXW ZLOOQRORQJHUZRU N



&KDSWHU

RJF GW VHQ

EHDQ

VHVVLRQEHDQOLIHF\FOH

+WUXTIQV\[IJW]\JMIVZMUW^IT :K\ZRXOG\RX JHWULGRIP\EHDQ ZLWKRXWZDLWLQJIRUPH WRFDOOUHPRYH "7KDW LVVRUXGH

,GRQ·WVHHZK\ \RX FDQ·WFDOOHME5HPRYH  RQDEHDQZKHQ\RX·UHJRLQJWR NLOOLWUHJDUGOHVVRIWKHUHDVRQ :KDWJRRGLVHME5HPRYH IRU SXWWLQJLQFOHDQXSFRGHLILW PLJKWQRWEHFDOOHG"

+RZDP,VXSSRVHGWR NQRZ\RX·UHFRPLQJEDFN",I, GRQ·WXVHWLPHRXWVEHIRUHORQJ,·OOEH )8//RIUXVW\ROGDEDQGRQHGVKRSSLQJ FDUWV6RRQHURUODWHU,KDYHWR DVVXPHWKDW\RX·UHQHYHUFRPLQJ EDFN6RUU\EXW,UHDOO\ KDYHQRFKRLFH

)LUVWRIDOO\RXKRQHVWO\H[SHFWPHWREULQJ DEHDQ287RISDVVLYDWLRQMXVWWRNLOOLW"7DON DERXWDZDVWHRIRYHUKHDG6KHHVK\RXVKRXOG NQRZEHWWHULI\RXFDUHDERXWSHUIRUPDQFH$QG LW·VQRWWKDWELJRIDGHDOMXVWSXW\RXUFOHDQXSFRGHLQ ERWKHME5HPRYH $1'HME3DVVLYDWH DQG\RX·UHVDIH $QGZLWKH[FHSWLRQVWKLQNDERXWLWGR\RXUHDOO\ZDQW 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 ^ WU\^ P\5HVRXUFHFORVH  `FDWFK ([FHSWLRQH[ ^` `

ces ly close resour ul f ce a r g o t if you wantill open, do it here ! 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  ` SXEOLFYRLGHME3DVVLYDWH ^ WKLVFOHDQ8S  ` SULYDWHYRLGFOHDQ8S ^ WU\^ P\5HVRXUFHFORVH  `FDWFK ([FHSWLRQH[ ^` `



&KDSWHU

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

VHVVLRQEHDQOLIHF\FOH

0LVVHGHME5HPRYH FDOOV :DLWDPLQXWHWKHUH·V VWLOOVRPHWKLQJZURQJKHUH :KDWKDSSHQVLIWKHEHDQWKURZV DQH[FHSWLRQ"7KHQ,VWLOOZRQ·W JHWP\FOHDQXSFRGHWRUXQ :RQ·W,VWLOOJHWLQWRWURXEOH"

:HOOXP\HV

\RXDUHKHUH



HME5HPRYH EHDQWKLQJV

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

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



&KDSWHU

7KHEHDQWKLQJV\RXFDQ GRLQHME5HPRYH DUH H[DFWO\WKHVDPHDVWKH EHDQWKLQJV\RXFDQGRLQ 

‡HME&UHDWH



‡HME3DVVLYDWH



‡HME$FWLYDWH

VHVVLRQEHDQOLIHF\FOH

1UXTMUMV\QVO\PM)L^QKM*MIVI[I[\I\M.=4JMIV 3OFAR THE!DVICE"EANWEVEWRITTENHASNT NEEDEDTOBESTATEFUL)TDOESNTKEEPORUSE ANYCLIENT SPECIlCSTATE SOITDOESNTNEEDA CREATE METHODWITHARGUMENTS"UTWHATIF WEDIDWANTTOMAKEITASTATEFULBEAN7HATIF THEBUSINESSLOGICNEEDEDTO SAY KEEPARECORD OFTHECONVERSATIONITSHAVINGSOTHATITNEVER GIVESOUTTHESAMEADVICEMORETHANONCEINA SESSION%VENIFTHECHOICEOFANADVICESTRINGIS PURELYRANDOM IFYOUWANTTOENSURETHEADVICE ISNTREPEATEDDURINGASESSION YOULLHAVETO KEEPTRACKOFITINANINSTANCEVARIABLE !NDYOUMIGHTHAVEOTHERCHANGES TOO LIKE MAKINGTHECREATEMETHODSTAKEARGUMENTSTHAT CONTAINTHETYPEOFADVICETHECLIENTISLOOKING FOR ORSOMEOTHERKINDOFPREFERENCE)NTHAT CASE EACHTIMETHECLIENTMADEAMETHODCALL YOUDWANTTOCHECKTHESTATUSOFTHATCLIENT SUPPLIEDCREATIONINITIALIZATIONPREFERENCE ANDTAILORYOURADVICEBASEDONTHEVALUESET DURINGTHEBEANSEJB#REATE ,ATERINTHE BOOK WELLLOOKATAMOREELABORATEVERSIONOF THIS!DVICE"EAN BUTFORNOW WELLMAKEJUSTA SUBTLECHANGETOMAKETHEBEANSTATEFUL

YiX`e gfn\i




7KHFUHDWHPHWKRGFDQKDYHDUJXPHQWV



7KHEHDQFDQEHSDVVLYDWHGVR\RX FDQZULWHFRGHLQHME3DVVLYDWH DQG HME$FWLYDWH 

WKHUH DUH QR

'XPE 4XHVWLRQV

Q:

7HATHAPPENSIFYOUPUTCODEINEJB0ASSIVATE OR EJB!CTIVATE ANDTHEBEANISSTATE,%337ILLITCOMPILE 7ILLITDEPLOY

A:

9OUCANCERTAINLYPUTCODEINEJB!CTIVATE OR EJB0ASSIVATE REGARDLESSOFWHETHERTHEBEANISSTATELESS ORSTATEFUL EVENTHOUGHITWILLNEVERBECALLEDIFTHEBEAN ISSTATELESS 4HINKABOUTIT,OOKATTHE3ESSION"EANINTERFACE.OTICE THATTHEREISNTASEPARATE3TATEFUL3ESSION"EANINTERFACE AND3TATELESS3ESSION"EANINTERFACE4HERESJUST3ESSION "EAN ANDBOTHSTATELESSANDSTATEFULBEANSIMPLEMENTIT 3OTHERESNOTHINGINYOURCLASSTHATSPECIFICALLYSAYSYOUR BEANISSTATELESS)TSONLYATDEPLOY TIME WHENYOUTELL THEDEPLOYMENTDESCRIPTORTHATTHEBEANISSTATELESSOR STATEFUL THATITACTUALLYMATTERS )NFACT YOUCOULDWRITEABEANTHATHASONLYANO ARGCRE ATE ANDKEEPSNOCLIENTSTATE ANDYOUCANDEPLOYITWITH 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 We still implem

SessionBean

SULYDWH6WULQJXVHU1DPH

This time, we can keep client-speciÞc state (in this case, the argument the client sends to the create method)  SXEOLFYRLGHME$FWLYDWH ^ ` SXEOLFYRLGHME3DVVLYDWH ^ ` SXEOLFYRLGHME5HPRYH ^ `

of the four SessionBean ta iner callbacks, the only thing weÕre doing is savingcon th e con this version of the class weÕre text, even though in the context because we want not using it. WeÕre saving your context, because in most YOU to get used to saving 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[ `  SXEOLFYRLGHME&UHDWH 6WULQJQDPH ^ XVHU1DPH QDPH `

se UL bean, becau eF at st a Y L This can be OnÕNs must NOT have anything stateless bea -arg create() method. except the no

SXEOLF6WULQJJHW$GYLFH ^ UHWXUQXVHU1DPH³P\DGYLFHLV³$GYLVRUJHW$GYLFH  `

In the busi speciÞc stantess method, weÕre usi parameter. e, that we saved fr ng the clientstateless be This must be a stat om the create ef ans arenÕt t ied to a sinul bean, because gle client.

`



&KDSWHU

static helper assume this is claass, Advisor, method on a Õt see here. WeÕll that you done that one. let you writ

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  LPSRUWMDYD[HME  SXEOLFFODVV$GYLFH6WDWHIXO&OLHQW^ SXEOLFVWDWLFYRLGPDLQ 6WULQJ>@DUJV ^ QHZ$GYLFH6WDWHIXO&OLHQW JR  `


SXEOLFYRLGJR ^ WU\^ &RQWH[WLF QHZ,QLWLDO&RQWH[W  2EMHFWR LFORRNXS ³6WDWHIXO$GYLVRU´   $GYLFH6WDWHIXO+RPHKRPH  $GYLFH6WDWHIXO+RPH 3RUWDEOH5HPRWH2EMHFWQDUURZ R $GYLFH6WDWHIXO+RPHFODVV   $GYLFH6WDWHIXODGYLVRU KRPHFUHDWH ³FORYHU´  because

bean, t be a statefwulith arguments! us m is h T 6\VWHPRXWSULQWOQ DGYLVRUJHW$GYLFH  eate weÕre calling cr DGYLVRUUHPRYH  weÕre calling remove(), to tell the tain er weÕre `FDWFK ([FHSWLRQH[ ^ done with the bean (so the ContainCon 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 !DVICEBEANANDTHESTATELESSVERSIONBESIDESTHE lLENAMESAND*.$)NAME ISINTHEDEPLOYMENT DESCRIPTORSETTINGTHATDElNESWHETHERTHEBEAN ISSTATELESSORSTATEFUL5SINGTHE2)DEPLOYTOOL REMEMBER YOUSETTHISUSINGTHEDEPLOYTOOLS.EW %NTERPRISE"EAN7IZARDˆTHETHINGTHATWALKSYOU THROUGHTHESETTINGSTHATITTHENUSESTOOUTPUTTHE 8-,DEPLOYMENTDESCRIPTOR

ƒ $VD%HDQ3URYLGHU\RX·UHUHVSRQVLEOHIRULPSOHPHQW LQJWKHFRQWDLQHUFDOOEDFNVLQ\RXUEHDQFODVV

ƒ &RQWDLQHUFDOOEDFNVFRPHIURPWZRSODFHVWKH 6HVVLRQ%HDQLQWHUIDFHDQGWKHKRPHLQWHUIDFH7KH FRPSLOHUIRUFHV\RXWRLPSOHPHQWWKH6HVVLRQ%HDQ LQWHUIDFHEXWWKHFDOOEDFNVUHODWHGWRWKHKRPHDUH\RXU UHVSRQVLELOLW\DQGWKHFRPSLOHUZRQ·WNQRZVLQFH\RXU EHDQFODVVGRHVQ·WLPSOHPHQW\RXUKRPHLQWHUIDFH

ƒ $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

YouÕll have to change this to State

ful !!

DU\VWRUDJHSRVVLEO\WKURXJKVHULDOL]DWLRQ
ƒ 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 XQFKHFNHGXQFDXJKW

GRHVQRWH[LVW

FRQVWUXFWRU VHW6HVVLRQ&RQWH[W HME&UHDWH

HME5HPRYH RUWLPHRXW

WLPHRXW

===

===

HME3DVVLYDWH PHWKRGUHDG\

SDVVLYDWHG HME$FWLYDWH

PHWKRGFDOOV

6WDWHOHVV

GRHVQRWH[LVW

FRQVWUXFWRU VHW6HVVLRQ&RQWH[W HME&UHDWH

EHDQWKURZVV\VWHPH[FHSWLRQ XQFKHFNHGXQFDXJKW

HME5HPRYH

PHWKRGUHDG\

PHWKRGFDOOV

\RXDUHKHUH



VWDWHOHVVEHDQV

&OLHQWFDOOVFUHDWHRQDVWDWHOHVVVHVVLRQEHDQKRPH

 &OLHQWFDOOVFUHDWHRQWKHKRPH

FOLHQW +RPH REMHFW

VWXE FUHDWH FUHDWH

 &RQWDLQHUPDNHVWKH(-%REMHFW

(-% REMHFW

 &RQWDLQHUVHQGVWKHFOLHQWDVWXE WRWKH(-%REMHFW

VWXE



&KDSWHU

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

VHVVLRQEHDQOLIHF\FOH

6HVVLRQEHDQFUHDWLRQLVQRW UHODWHGWRWKHFOLHQW  &RQWDLQHUFRQVWUXFWVWKH 6HVVLRQ&RQWH[WREMHFWDQG WKHEHDQLQVWDQFHWKHQFDOOV VHW6HVVLRQ&RQWH[W RQWKHEHDQ EHDQ

VH W6 HV VLR Q& RQ WH [W

&RQWH[W

 &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

EHDQ

&RQWH[W

%HDQ3RRO

 &RQWDLQHULQYRNHVEXVLQHVVPHWKRG RQWKHEHDQ  WKHEHDQUHWXUQV IURPWKHPHWKRG  WKHQ&RQWDLQHU VHQGVEHDQEDFNWRWKHSRRO  

 JR



 EHDQ

%HDQ3RRO



&KDSWHU

VHVVLRQEHDQOLIHF\FOH

2EMHFW,QWHUDFWLRQ'LDJUDP 2,' IRUEHDQFUHDWLRQ VWDWHOHVVVHVVLRQEHDQ

:KHQWKHFOLHQWFDOOVFUHDWH FOLHQW +RPH REMHFW

(-% REMHFW

6HVVLRQ &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

ƒ QRWKLQJ

VHW6HVVLRQ&RQWH[W

EXVLQHVVPHWKRG

8VH\RXU6HVVLRQ&RQWH[WWR

8VH\RXU6HVVLRQ&RQWH[WWR

‰ JHWDUHIHUHQFHWR\RXUKRPH ‰ JHWDUHIHUHQFHWR\RXU(-%REMHFW ‰ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW ‰ IRUFHDWUDQVDFWLRQWRUROOEDFN &07

‰ JHWDUHIHUHQFHWR\RXUKRPH ‰ JHWDUHIHUHQFHWR\RXU(-%REMHFW ‰ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW ‰ IRUFHDWUDQVDFWLRQWRUROOEDFN &07

EHDQV

EHDQV

‰ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\

‰ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\

EHHQVHWWRUROOEDFN &07EHDQV

EHHQVHWWRUROOEDFN &07EHDQV

‰ JHWDWUDQVDFWLRQUHIHUHQFHDQGFDOO

‰ JHWDWUDQVDFWLRQUHIHUHQFHDQGFDOO

PHWKRGVRQLW %07EHDQV

PHWKRGVRQLW %07EHDQV

$FFHVV

$FFHVV

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

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

HME&UHDWH HME5HPRYH 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 

&KDSWHU

teLESS Unlike stateFUL beans, a sta info in bean canÕt get caller security no client ejbCreate(), because thereessIS bea nÕs associated with the statel Container creation. Remember, itÕs thebean, and that decides to create the its not tied to any client.

VHVVLRQEHDQOLIHF\FOH

+RZFRPH HME3DVVLYDWH DQG HME$FWLYDWH DUHQ·WFDOOHG ZKHQWKHEHDQJRHVLQDQG RXWRIWKHSRRO"



7KHUH·VQRQHHG%HDQVVWD\ 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 6HVVLRQ%HDQPHWKRGV




+20(WKLQJVHME&UHDWH PHWKRGV :ULWHDQHME&UHDWH PHWKRGLQWKHEHDQWRPDWFKHDFK FUHDWH PHWKRGLQWKHKRPHLQWHUIDFH

FUHDWH

LQWHUIDFH!! $GYLFH



JHW$GYLFH

LQWHUIDFH!! 6HVVLRQ%HDQ

VHW6HVVLRQ&RQWH[W HME3DVVLYDWH HME$FWLYDWH HME5HPRYH

&20321(17WKLQJVEXVLQHVVPHWKRGV :ULWHDEXVLQHVVPHWKRGLQWKHEHDQWRPDWFKHDFK PHWKRGLQ\RXUEHDQ¶VFRPSRQHQWLQWHUIDFH



6(66,21%($1WKLQJVFRQWDLQHUFDOOEDFNV IURPWKH6HVVLRQ%HDQLQWHUIDFH ,PSOHPHQWHDFKRIWKHIRXUPHWKRGVIURPWKH 6HVVLRQ%HDQLQWHUIDFHZKLFK\RXUEHDQPXVWLPSOHPHQW LQWKHRI¿FLDO-DYDZD\ LHXVLQJWKHLPSOHPHQWV 6HVVLRQ%HDQGHFODUDWLRQHLWKHULQ\RXUEHDQFODVVRURQH RILWVVXSHUFODVVHV

6KDUSHQ \RXU SHQFLO 2IWKHWKUHHW\SHVRIPHWKRGV\RX SXWLQ\RXUEHDQFKHFNRIIWKHRQHV WKHFRPSLOHUFDUHVDERXW



&KDSWHU

&RPSLOHUFKHFNHG"

‰ 0HWKRGVWRPDWFKWKH+RPHLQWHUIDFH ‰ 0HWKRGVWRPDWFKWKH&RPSRQHQWLQWHUIDFH ‰ 0HWKRGVIURPWKH6HVVLRQ%HDQLQWHUIDFH

VHVVLRQEHDQOLIHF\FOH

6KDUSHQ \RXU SHQFLO

*LYHQWKHIROORZLQJLQWHUIDFHVZULWHWKHEHDQFODVVFRGH \RXFDQOHDYH 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

\RXDUHKHUH



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

KRPHLQWHUIDFH

5XOHVIRUWKH+20(PHWKRGVKRPHLQWHUIDFH



/RFDOKRPHLQWHUIDFHVPXVWUHWXUQWKHORFDOFRPSRQHQWLQWHUIDFHDQG 5HPRWHKRPHLQWHUIDFHVPXVWUHWXUQWKH5HPRWHFRPSRQHQWLQWHUIDFH SXEOLFLQWHUIDFH$GYLFH/RFDO+RPHH[WHQGV(-%/RFDO+RPH^ SXEOLF$GYLFH/RFDOFUHDWH WKURZV&UHDWH([FHSWLRQ ` SXEOLFLQWHUIDFH$GYLFH+RPHH[WHQGV(-%+RPH^ SXEOLF$GYLFHFUHDWH WKURZV&UHDWH([FHSWLRQ 5HPRWH([FHSWLRQ `



(YHU\FUHDWHPHWKRGLQWKHKRPHLQWHUIDFHPXVWGHFODUHD &UHDWH([FHSWLRQUHJDUGOHVVRIZKHWKHUWKHLQWHUIDFHLVORFDORU5HPRWH


/RFDOKRPHLQWHUIDFHVPXVWH[WHQG(-%/RFDO+RPHDQGPXVW127 GHFODUH5HPRWH([FHSWLRQV SXEOLFLQWHUIDFH$GYLFH/RFDO+RPHH[WHQGV(-%/RFDO+RPH^ SXEOLF$GYLFH/RFDOFUHDWH WKURZV&UHDWH([FHSWLRQ `



5HPRWHKRPHLQWHUIDFHVPXVWH[WHQG(-%+RPHDQGPXVWGHFODUH 5HPRWH([FHSWLRQVRQHYHU\PHWKRG

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

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

The return type of a home create method must ALWAYS be the component interface type. LQWHUIDFH!! .HQQHO+RPH

.HQQHOFUHDWH 6WULQJLG

This must be the component interface type. Remote homes must return Remote component interface references, local homes must return local component interface references.

VHVVLRQEHDQOLIHF\FOH

5XOHVIRUWKH+20(PHWKRGVEHDQFODVV



(YHU\FUHDWHPHWKRGLQWKHKRPHPXVWKDYHDPDWFKLQJHME&UHDWH PHWKRGLQWKHEHDQFODVV7KHHME&UHDWHPHWKRGVLQWKHEHDQPXVW KDYHDYRLGUHWXUQW\SH SXEOLFYRLGHME&UHDWH ^`



7KHHME&UHDWHPHWKRGVPXVWEHSXEOLFDQGPXVW127EHPDUNHG ¿QDORUVWDWLF









6WDWHOHVVEHDQVPXVWKDYHRQO\RQHHME&UHDWH DQGLWPXVWKDYHQR DUJXPHQWV

Every create in the home must have a matching ejbCreate in the bean class (void return type). .HQQHO%HDQ

YRLGHME&UHDWH 6WULQJLG

The bean home methods must match the home interface methods, except you preÞx the bean class methods with ÔejbÕ, and capitalize the ÔÔcÕ in create 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 5HPRWHRUDQDUUD\RUFROOHFWLRQRIDQ\RIWKRVH DVORQJDVWKHFROOHFWLRQ LPSOHPHQWDWLRQFODVVLVLWVHOI6HULDOL]DEOH  SXEOLF6WULQJJHW$GYLFH WKURZV5HPRWH([FHSWLRQ 6WULQJLV6HULDOL]DEOHVRWKLVPHWKRGFRXOGEH LQD5HPRWHFRPSRQHQWLQWHUIDFH SXEOLF6RFNHWJHW7KH6RFNHW  6RFNHWLV1276HULDOL]DEOHVRWKLVPHWKRGPXVW 127EHLQD5HPRWHLQWHUIDFH ORFDOZRXOGEH2.

Remote component interface methods must have RMI-IIOP types as arguments and return types. 6WULQJGR6RPHWKLQJ LQWL



/RFDOFRPSRQHQWLQWHUIDFHVPXVWH[WHQG(-%/RFDO2EMHFWDQGPXVW127 GHFODUH5HPRWH([FHSWLRQV

SXEOLFLQWHUIDFH$GYLFH/RFDOH[WHQGV(-%/RFDO2EMHFW^ SXEOLF6WULQJJHW$GYLFH  `



5HPRWHFRPSRQHQWLQWHUIDFHVPXVWH[WHQG(-%2EMHFWDQGPXVW GHFODUH5HPRWH([FHSWLRQVRQHYHU\PHWKRG SXEOLFLQWHUIDFH$GYLFHH[WHQGV(-%2EMHFW^ SXEOLF6WULQJJHW$GYLFH WKURZV5HPRWH([FHSWLRQ `






&KDSWHU

This method would be legal in either a Remote or local interface, because the argument and return type are legal RMI-IIOP types.

VHVVLRQEHDQOLIHF\FOH

5XOHVIRUWKH%86,1(66PHWKRGVEHDQFODVV



%XVLQHVVPHWKRGVPXVWEHGHFODUHGDVSXEOLFDQGPXVW127EH GHFODUHGDV¿QDORUVWDWLF SXEOLFYRLGGR%LJ7KLQJV ^`



0HWKRGQDPHVPXVWQRWEHJLQZLWKWKHVWULQJ³HME´






$UJXPHQWVDQGUHWXUQW\SHVIRU5HPRWHFRPSRQHQWLQWHUIDFHPHWKRGV PXVWEHOHJDO50,,,23W\SHV7KDWPHDQV6HULDOL]DEOHSULPLWLYH 5HPRWHRUDQDUUD\RUFROOHFWLRQRIDQ\RIWKRVH DVORQJDVWKHFROOHFWLRQ LPSOHPHQWDWLRQFODVVLVLWVHOI6HULDOL]DEOH  SXEOLF6WULQJJHW$GYLFH ^` 6WULQJLV6HULDOL]DEOHVRWKLVPHWKRGFRXOGEH LQD5HPRWHFRPSRQHQWLQWHUIDFH SXEOLF6RFNHWJHW7KH6RFNHW ^` 6RFNHWLV1276HULDOL]DEOHVRWKLVPHWKRGPXVW 127EHLQD5HPRWHLQWHUIDFH ORFDOZRXOGEH2.






Business methods must not throw application (checked) exceptions that arenÕt declared in the component interface.

6HVVLRQ%HDQ H[WHQGV (QWHU SULVH%HDQ %87 7KHUH¶VQRWKLQJLQWKHUH EOH L]D ULDO 6H QLV %HD ULVH HUS (QW LV DQ EH 6RWKDWPHDQV\RXU ZLWKRXW DXWRPDWLFDOO\6HULDOL]DEOH \RXUKDYLQJVDLGVR HUH\RX ,I\RXKDYHDVFHQDULRZK LV DQ EH LID L]H RJQ QHHGWRUHF XJK WKR HQ HY 7,6 H, DEO LDOL] 6HU VVVD\ \RXGRQ¶WVHHWKHEHDQFOD ´ EOH L]D ULDO 6H QWV ³LPSOHPH


\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






7KHFODVVLVQRWUHTXLUHGWR EXWLVDOORZHGWR LPSOHPHQWWKHEHDQ¶V FRPSRQHQWLQWHUIDFH :HWDONHGHDUOLHUUHPHPEHUDERXWZK\\RX SUREDEO\GRQ¶WZDQWWR³RI¿FLDOO\´LPSOHPHQW\RXUFRPSRQHQWLQWHUIDFH






,IWKHEHDQLVVWDWHIXOLWFDQRSWLRQDOO\LPSOHPHQWWKH 6HVVLRQ6\QFKURQL]DWLRQLQWHUIDFH 7KLVLQWHUIDFHJLYHVWKHEHDQ WKUHHPRUHFDOOEDFNVUHODWHGWRWUDQVDFWLRQVZKLFKZH¶OOORRNDWLQWKH WUDQVDFWLRQVFKDSWHU






&KDSWHU


VHVVLRQEHDQOLIHF\FOH

7KHGLIIHUHQFHEHWZHHQFUHDWHDQGHME&UHDWH

KRPH LQWHUIDFH

the client needs to get back the component interface

SXEOLF.HQQHOFUHDWH WKURZV&UHDWH([FHSWLRQ5HPRWH([FHSWLRQ3HW([FHSWLRQ

EHDQ FODVV

donÕt forget the name differences!

ce declares an just because the interanfa YOU must. If exception doesnÕt medonÕt declare it. you donÕt throw it,

SXEOLFYRLGHME&UHDWH WKURZV3HW([FHSWLRQ^`

but the container doesnÕt need anything from the bean

7KH&RQWDLQHU PLJKWQRWQHHG DQ\WKLQJIURPWKHEHDQEXW WKHKRPHGDPQZHOOEHWWHU JLYH0(WKHFRPSRQHQW LQWHUIDFH7KDW·VWKHRQO\ UHDVRQ,·PKHUH

,·PQRWVXUH, XQGHUVWDQGZK\WKH UHWXUQW\SHVDUHGLIIHUHQW EHWZHHQWKHEHDQDQG WKHLQWHUIDFH :KHQ,FDOOWKH EHDQ·VHME&UHDWHPHWKRG, GRQ·W1(('DQ\WKLQJIURPWKH EHDQWKDQN\RXYHU\PXFKVRXVH YRLGIRUWKHUHWXUQW\SH 7KLVZLOODOO FKDQJHZLWKHQWLWLHVWKRXJKVR EHSUHSDUHG

\RXDUHKHUH



VHVVLRQEHDQZDWFKLWV



3D\DWWHQWLRQWR WKH ´HMEµDVLQHME5H PRYH YVMXVWUHPRYH DQG HME&UHDWHYVF UHDWH 7UXHRUIDOVHWKH& RQWDLQHUFDOOVDEH DQ¶V UHPRYH PHWKRGL IWKHVWDWHIXOEHDQW LPHV RXWZKLOHDFWLYH )$/6(7KHEHDQ GRHVQ¶W+$9(D UHPRYH PHWKRG RQO\DQHME5HPRY H  PHWKRG :DWFKIRUWKLQJVOLNH ³7KH%HDQ3URYLG HULV UHVSRQVLEOHIRUSX WWLQJWKHFUHDWH P HWKRG LQWKHEHDQ´1RWWU XHEHFDXVHWKHUH, 6 QRFUHDWH PHWKRG LQWKHEHDQRQO\ DQ HME&UHDWH  %HVXUHWREXUQLW LQWR\RXUKHDGWKD W DQ\WKLQJVWDUWLQJZ LWKWKHOHWWHUVµHME¶LV LQ WKHEHDQ2IFRXUVH LWZRXOGEHHDV\LI WKDW ZHUHWKH21/<UX OHOLNHLIHYHU\WKLQJ LQ WKHEHDQVWDUWVZL WK³HME´DQGQRWKLQJ LQWKH LQWHUIDFHVVWDUWVZL WKµ³HME´EXWRIFR XUVH WKDW¶VQRWWUXH %XVLQHVVPHWKRGVD UHLGHQWLFDOO\QDPHG LQ ERWKWKHFRPSRQHQ WLQWHUIDFHDQGWKHE HDQ FODVVDQGWKH\GR Q¶WHYHUVWDUWZLWK³H ME´LQ HLWKHUWKHLQWHUIDFH RUWKHEHDQFODVV


&KDSWHU


FFHVV 2QO\21(FOLHQWFDQD H WLP WD QD HD QE DVHVVLR UWKHEHDQ WKH KH IZ VR OHV DUG UHJ O LVVWDWHOHVVRUVWDWHIX QRQH 5EHDFFHVVHGE\PRUHWKD 6HVVLRQEHDQVPXVW1(9( KHU QRW GD WDQ OLHQ DF E\ XVH LQ FOLHQW,IDEHDQLVFXUUHQWO\ WJHWV WKHEHDQWKDWVHFRQGFOLHQ FOLHQWLQYRNHVDPHWKRGRQ W WKD SHF HV QWK QWL HLVDFRPPH DQH[FHSWLRQ%87WKHU HDQVDV 6E (6 WH/ VWD HQW OHP PS WRL VD\VWKH&RQWDLQHULVIUHH KHQUXQV HDQZKLFKWKH&RQWDLQHUW DVLQJOHLQVWDQFHRIWKHE WLPH WKHFOLHQWVWKURXJKRQHDWD U RUFDUHKRZWKH&RQWDLQH QRZ WRN HG SRV VXS Q¶W
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[[ QUXTMUMV\QVO\PM0IVLTMKTI[[ QV^WSQVOIJ][QVM[[UM\PWL WV\PMKWUXWVMV\QV\MZNIKM

KZMI\QVO\PMPWUMQV\MZNIKM QV^WSQVOKZMI\M QUXTMUMV\QVO;M[[QWV*MIV

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


8POHW·VJHWWKLVVWUDLJKW³ \RX·UHKHUHWRVHUYH0(6R\RXEHWWHU JHWXVHGWRKHDULQJ´2K&RQWH[W%R\JHW PHDWUDQVDFWLRQµ´2K&RQWH[W%R\JHWPH WKHFOLHQW·VVHFXULW\LQIRµ$QG,DOPRVW IRUJRW,WDNHRQHVXJDUDQGQRFUHDP LQP\FRIIHH

%HDQ 6HVVLRQ&RQWH[W

0HPRUL]HWKH 6HVVLRQ&RQWH[W LQWHUIDFH WDOLVWRI


&KDSWHU

VHVVLRQEHDQOLIHF\FOH

7KLQJV\RXFDQGRZLWK\RXU6HVVLRQ&RQWH[W PHWKRGVFDWHJRULHV

ƒ JHWDUHIHUHQFHWR\RXUKRPH JHW(-%+RPH JHW(-%/RFDO+RPH

KRPHUHI

LQWHUIDFH!! (-%&RQWH[W

JHW&DOOHU3ULQFLSDO LV&DOOHU,Q5ROH 6WULQJV  JHW(-%+RPH JHW(-%/RFDO+RPH

ƒ JHWDUHIHUHQFHWR\RXU(-%REMHFW JHW(-%2EMHFW JHW(-%/RFDO2EMHFW

(-%REMHFWUHI

ƒ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW FOLHQWVHFXULW\

JHW&DOOHU3ULQFLSDO LV&DOOHU,Q5ROH 6WULQJV

JHW5ROOEDFN2QO\ JHW8VHU7UDQVDFWLRQ VHW5ROOEDFN2QO\

LQWHUIDFH!! 6HVVLRQ&RQWH[W

JHW(-%/RFDO2EMHFW JHW(-%2EMHFW

ƒ IRUFHDWUDQVDFWLRQWRUROOEDFN &07RQO\ WUDQVDFWLRQV

VHW5ROOEDFN2QO\ ERROHDQE

ƒ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\EHHQ VHWWRUROOEDFN &07RQO\ JHW5ROOEDFN2QO\

ƒ JHWDWUDQVDFWLRQUHIHUHQFHDQGVWDUW\RXU RZQWUDQVDFWLRQ %07RQO\ JHW8VHU7UDQVDFWLRQ


LV&DOOHU,Q5ROH ,GHQWLW\LG JHW&DOOHU,GHQWLW\ JHW(QYLURQPHQW

\RXDUHKHUH



7LNLEHDQ/RXQJH

6WDWHOHVVEHDQ,GRQ·WVHHKRZ\RXFDQVWDQG LWEHLQJDVWDWHIXOEHDQ
6WDWHIXOEHDQ:KLFKLVDOVRZK\\RX·UHQRWXVHGIRU DQ\WKLQJELJRUVHULRXV

6WDWHOHVVEHDQ$QGWKDWZRXOGEHZURQJEHFDXVH

6WDWHOHVVEHDQ1RZZDLWMXVWDPLQXWHKHUH³WKDWLV 62QRWWUXH,QIDFWLI\RXZDQWWRWDONSHUIRUPDQFH EXGG\,·PZD\PRUHVFDODEOHWKDQ\RX$QGEHIRUH \RXVWDUWDUJXLQJGRQ·WHYHQJLYHPHWKDWQRQVHQVH DERXWSDVVLYDWLRQ,·YHKHDUGDOOWKHDUJXPHQWV%XW SDVVLYDWLRQZLOO1(9(5PDNH\RXDVVFDODEOHDVPH

6WDWHIXOEHDQ,W·VDSHUVRQDOLQWLPDWHUHODWLRQVKLS$ UHODWLRQVKLSWKDW\RXFRXOGQ·WSRVVLEO\FRPSUHKHQG

6WDWHIXOEHDQ2.PD\EH,·PQRWTXLWH$6VFDODEOH EXWWKHUHDUHPRUHLPSRUWDQWWKLQJVLQOLIHWRFRQVLGHU

6WDWHOHVVEHDQ:KDWLV7+$7VXSSRVHGWRPHDQ"

6WDWHOHVVEHDQ)RUH[DPSOH"

6WDWHIXOEHDQ%HFDXVH\RXUUHODWLRQVKLSVDUHVR WUDQVLHQW
6WDWHIXOEHDQ:HOO,·PHDV\WRXVH(DV\DQGTXLFN WREXLOG0D\EHWKDW·VPRUHLPSRUWDQWWRWKHGHYHORSHU $QGLQVRPHFDVHV,·PVWLOOJRQQDSHUIRUPEHWWHUZKHQ \RXUHDOO\GRQHHGFOLHQWFRQYHUVDWLRQDOVWDWH7KH RSWLRQVFDQUHDOO\VXFNVRPHWLPHVKDYLQJWRVWRUH WKHVWDWHLQDGDWDEDVHZLWKHDFKFDOO DQGWKHQJRDQG ORRNLWDOOXSDJDLQZLWKWKHYHU\1(;7FDOO ",NQRZ VRPHWLPHV\RXKDYHWRGRWKDWEXWVWLOO2UVXUH\RX FRXOGMXVWNHHSVHQGLQJWKHFRQYHUVDWLRQDOVWDWHEDFNWR WKHFOLHQWVRWKDWWKH\FDQWXUQDURXQGDQGVHQGLWEDFN WR<28ZLWKHDFKFDOODQG³

6WDWHIXOEHDQ,·PQRWVXUH,OLNHWKHZD\\RXSKUDVH WKDW´VHUYLFLQJRQHFOLHQWµ0DNHVLWVRXQGOLNH,·PD SHUVRQDOVODYHRUVRPHWKLQJ

6WDWHOHVVEHDQ7KHUH·VQRWKLQJZURQJZLWKWKDW,·P DSHRSOHSHUVRQ,OLNHEHLQJLQWKHSRROZLWKWKHRWKHU EHDQVWKHQFRQVWDQWO\PHHWLQJQHZFOLHQWV,W·VQHYHU ERULQJDQG,EDUHO\HYHUVHHWKHVDPHFOLHQWWZLFH DQG³ 6WDWHIXOEHDQ0\SRLQWH[DFWO\


&KDSWHU

6WDWHOHVVEHDQ:KDW·VZURQJZLWKWKDW" 6WDWHIXOEHDQ+HUH·VDQHZZRUGIRU\RXU YRFDEXODU\´EDQGZLGWKµ3URQRXQFHLWZLWKPH ´EDDDQGZLLLLGWKµ'R\RXUHDOO\ZDQWDOOWKDWJRLQJEDFN DQGIRUWK" 6WDWHOHVVEHDQ2N\HDKJRWLW%XWWHOOPHKRZ LVWKLVZRUVHIRUSHUIRUPDQFHWKDQWKHKLWIURP SDVVLYDWLRQDFWLYDWLRQ"$QGZKLOHZH·UHDWLW³ZDLWGLG \RXKHDUWKDW",WKLQN,KHDU\RXUFOLHQWFDOOLQJ$QG LWVRXQGOLNHQRZDLW\HV,·PDIUDLGLWVRXQGVOLNH KH·VFDOOLQJUHPRYH ,W·VEHHQQLFHWDONLQJWR\RX,·OO EHWKLQNLQJDERXW\RXZKLOH,·PRXWDWWKHSRRO)ORDWLQJ RQDLUPDWWUHVV*HWWLQJDWDQ'ULQNLQJPDUJDULWDVZLWK VKDYHGLFH:RZ,/29(EHLQJPH

VHVVLRQEHDQOLIHF\FOH

WhatÕs allowed?

3XWDFKHFNQH[WWRWKHPHWKRGVWKDW\RXFDQFDOORQ\RXU6HVVLRQ&RQWH[WLILW·VDOORZHGIURPWKH PHWKRGVLQWKHOHIWFROXPQ)RUH[DPSOHLQHME&UHDWH \RXFDQJHWDUHIHUHQFHWR\RXUKRPHIRUERWK VWDWHOHVVDQGVWDWHIXOVHVVLRQEHDQVVR\RXFDQSXWDFKHFNLQWKHWRSER[LQERWKFROXPQV$OORIWKH DQVZHUVDUHLQWKLVFKDSWHUEXWWU\WRPDNH\RXUEHVWJXHVVEHIRUHJRLQJEDFNIRUWKHDQVZHUV
%HDQPHWKRGV

HME&UHDWH HME5HPRYH

6WDWHIXO

6WDWHOHVV

8VH\RXU6HVVLRQ&RQWH[WWR

8VH\RXU6HVVLRQ&RQWH[WWR

‰ JHWDUHIHUHQFHWR\RXUKRPH ‰ JHWDUHIHUHQFHWR\RXU(-%REMHFW ‰ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW ‰ IRUFHDWUDQVDFWLRQWRUROOEDFN &07

‰ JHWDUHIHUHQFHWR\RXUKRPH ‰ JHWDUHIHUHQFHWR\RXU(-%REMHFW ‰ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW ‰ IRUFHDWUDQVDFWLRQWRUROOEDFN &07

EHDQV

EHDQV

‰ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\ ‰ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\ EHHQVHWWRUROOEDFN &07EHDQV

EHHQVHWWRUROOEDFN &07EHDQV

‰ JHWDWUDQVDFWLRQUHIHUHQFHDQGFDOO

‰ JHWDWUDQVDFWLRQUHIHUHQFHDQGFDOO

PHWKRGVRQLW %07EHDQV

PHWKRGVRQLW %07EHDQV

8VH\RXU6HVVLRQ&RQWH[WWR HME3DVVLYDWH HME$FWLYDWH

‰ JHWDUHIHUHQFHWR\RXUKRPH ‰ JHWDUHIHUHQFHWR\RXU(-%REMHFW ‰ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW ‰ IRUFHDWUDQVDFWLRQWRUROOEDFN &07

'RHVQRWDSSO\ VWDWHOHVVEHDQVDUH QHYHUSDVVLYDWHG

EHDQV

‰ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\ EHHQVHWWRUROOEDFN &07EHDQV

‰ JHWDWUDQVDFWLRQUHIHUHQFHDQGFDOO PHWKRGVRQLW %07EHDQV

EXVLQHVV PHWKRGV

8VH\RXU6HVVLRQ&RQWH[WWR

8VH\RXU6HVVLRQ&RQWH[WWR

‰ JHWDUHIHUHQFHWR\RXUKRPH ‰ JHWDUHIHUHQFHWR\RXU(-%REMHFW ‰ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW ‰ IRUFHDWUDQVDFWLRQWRUROOEDFN &07

‰ JHWDUHIHUHQFHWR\RXUKRPH ‰ JHWDUHIHUHQFHWR\RXU(-%REMHFW ‰ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW ‰ IRUFHDWUDQVDFWLRQWRUROOEDFN &07

EHDQV

EHDQV

‰ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\

‰ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\

EHHQVHWWRUROOEDFN &07EHDQV

EHHQVHWWRUROOEDFN &07EHDQV

‰ JHWDWUDQVDFWLRQUHIHUHQFHDQGFDOO

‰ JHWDWUDQVDFWLRQUHIHUHQFHDQGFDOO

PHWKRGVRQLW %07EHDQV

PHWKRGVRQLW %07EHDQV \RXDUHKHUH



FRIIHHFUDPPRFNH[DP

0RFN([DP 1

7HICHSTATEMENTSABOUTSESSIONBEANSARETRUE#HOOSEALLTHATAPPLY

R! !STATEFULSESSIONBEANISTYPICALLYUSEDTOREPRESENTAROWINADATABASE R" 4HECLIENTMUSTCALLTHEEJB!CTIVATEMETHODBEFORECALLINGANYBUSINESS METHODS

R# !STATEFULSESSIONBEANSlELDSCANCONTAINCLIENTCONVERSATIONALSTATE R$ 4HEYARETYPICALLYUSEDASASYNCHRONOUSMESSAGECONSUMERS

2

7HICHLISTS CORRECTLYSEQUENCESOMEOFTHESTEPSINASESSIONBEANSLIFECYCLE #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 REACTIVATED#HOOSEALLTHATAPPLY

R! !REFERENCETOTHEREMOTEHOMEINTERFACE R" !REFERENCETOTHE5SER4RANSACTIONINTERFACE R# !REFERENCETOADATABASECURSOR R$ !REFERENCETOTHE3ESSION#ONTEXTOBJECT R% !REFERENCETOASOCKET



&KDSWHU

VHVVLRQEHDQOLIHF\FOH

4

7HICHAREVALIDREMOTECOMPONENTINTERFACESFORASESSIONBEAN#HOOSEALL 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

`

5

)FACLIENTMAKESACALLTOASESSIONOBJECTTHATHASBEENREMOVEDBYTHE CONTAINER WHICHEXCEPTIONSCANBETHROWN#HOOSEALLTHATAPPLY

R! MDYDUPL5HPRWH([FHSWLRQ R" MDYD[HME5HPRYH([FHSWLRQ R# MDYDUPL1R6XFK2EMHFW([FHSWLRQ R$ MDYD[HME1R6XFK(QWLW\([FHSWLRQ R%MDYD[HME2EMHFW1RW)RXQG([FHSWLRQ

6

'IVEN 0\%HDQFUHDWH 6WULQJQDPH WKURZV&UHDWH([FHSWLRQ  5HPRWH([FHSWLRQ 7HICHSESSIONBEANINTERFACECANCONTAINTHISMETHOD

R! /NLYSTATEFULSESSIONBEANS R" /NLYSTATELESSSESSIONBEANS R# "OTHSTATEFULANDSTATELESSSESSIONBEANS R$ .EITHERSTATEFULNORSTATELESSSESSIONBEANS

\RXDUHKHUH



FRIIHHFUDPPRFNH[DP

7

7HATISTRUEABOUTASESSIONBEANSLIFECYCLE#HOOSEALLTHATAPPLY

R! )FABUSINESSMETHODTHROWSASYSTEMEXCEPTIONTHEBEANWILLBE PASSIVATED

R" !PASSIVATEDBEANMUSTBEACTIVATEDBEFOREITCANBEREMOVED R# !STATELESSSESSIONBEANSREMOVALMUSTBEINITIATEDBYTHECLIENTNOTTHE CONTAINER

R$ 3TATELESSSESSIONBEANSCANNOTIMPLEMENTTHE3ESSION3YNCHRONIZATION INTERFACE

8

7HICHAREREQUIREDOFTHEBEANPROVIDERTOENSURETHATASESSIONBEANIS SUCCESSFULLYPASSIVATED#HOOSEALLTHATAPPLY

R! 4HEPROVIDERMUSTCALLHME3DVVLYDWH  R" 4HEPROVIDERMUSTALWAYSADDBUSINESSLOGICTOTHEHME3DVVLYDWH  METHOD IFTHEBEANISSTATEFUL

R# 4HEPROVIDERMUSTCLOSEANYDATABASECONNECTIONSBEFORE HME3DVVLYDWH COMPLETES

R$ 4HEPROVIDERMUSTASSUMETHATANYSTATESTOREDININSTANCElELDSMARKED TRANSIENTWILLBELOST

R% 4HEPROVIDERMUSTASSUMETHATANYREFERENCETOTHE3ESSION#ONTEXT OBJECTWILLBENOTSURVIVEPASSIVATIONIFTHE3ESSION#ONTEXTOBJECTISNOT SERIALIZABLE

9

'IVENASTATELESSSESSIONBEANWITHCONTAINER MANAGEDTRANSACTION DEMARCATION FROMWHICHMETHODS CANYOUACCESSANOTHERBEAN#HOOSE ALLTHATAPPLY

R! HME&UHDWH R" HME5HPRYH  R# ABUSINESSMETHOD R$ VHW6HVVLRQ&RQWH[W



&KDSWHU

VHVVLRQEHDQOLIHF\FOH

10

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



"GET5SER4RANSACTION





3ESSION3YNCHRONIZATION





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

12

7HICHOFTHEFOLLOWINGMETHODSARECONTAINERCALLBACKMETHODS#HOOSEALL THATAPPLY

R! HME3DVVLYDWH R" VHW5ROOEDFN2QO\ R# VHW6HVVLRQ&RQWH[W R$ JHW5ROOEDFN2QO\ R%JHW8VHU7UDQVDFWLRQ

\RXDUHKHUH



FRIIHHFUDPPRFNH[DP

13

)NWHATCASES WILLTHECONTAINERFAILTOCALLEJB2EMOVE ONASESSIONBEAN #HOOSEALLTHATAPPLY

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

14

7HICHMETHODS ALLOWBOTHSTATEFULANDSTATELESSSESSIONBEANSWITHBEAN MANAGEDTRANSACTIONDEMARCATIONTOACCESS5SER4RANSACTIONMETHODS #HOOSEALLTHATAPPLY

R! HME&UHDWH R" HME5HPRYH R# ABUSINESSMETHOD R$ VHW6HVVLRQ&RQWH[W

15

&ORWHICHTYPEOFBEANCANTHECONTAINERPASSIVATEANINSTANCETHATISINA TRANSACTION

R! ONLYSTATEFULSESSIONBEANS R" ONLYSTATELESSSESSIONBEANS R# BOTHSTATEFULANDSTATELESSSESSIONBEANS R$ NEITHERSTATEFULNORSTATELESSSESSIONBEANS

16

&ORSESSIONBEANS WHICHARETHERESPONSIBILITYOFTHE#ONTAINER#HOOSEALL THATAPPLY

R! )NVOKINGTHELOCALINTERFACEFUHDWH METHOD R" )NVOKINGTHEJHW6HVVLRQ&RQWH[W METHOD R# )NVOKINGTHEHME&UHDWH METHOD R$ %NSURINGTHATTHEHME5HPRYH METHODISALWAYSINVOKED



&KDSWHU

VHVVLRQEHDQOLIHF\FOH

17

&ORTHISDRAGANDDROPTYPEQUESTION YOUCANUSEEACHELEMENTONLYONCE 7HICHINTERFACESHOULDBEMATCHEDWITHWHICHFACT SOTHATALLFOURMATCHES ARECORRECT REMOTECOMPONENTA(ASAJHW+RPH+DQGOH METHOD



REMOTEHOMEBEXTENDSµMDYD[HME(-%2EMHFW¶ LOCALCOMPONENTCMETHODSMUST./4THROW 

 







µMDYDUPL5HPRWH([FHSWLRQ¶

LOCALHOMEDCANBEUSEDTORETRIEVEAN%*",OCAL/BJECT

18

7HICHCANBECALLEDBYTHECONTAINERDURINGTHELIFECYCLEOFASESSIONBEAN #HOOSEALLTHATAPPLY

R! FUHDWH R" BEANCONSTRUCTOR R# VHW5ROOEDFN2QO\ R$ JHW8VHU7UDQVDFWLRQ R%HME5HPRYH

19

20

7HICHSTATEMENTSABOUTASESSIONBEANCLASSARETRUE#HOOSEALLTHATAPPLY

R! 4HEYCANBEMARKED@lNAL R" 4HEYDONOTNEEDANO ARGUMENTCONSTRUCTOR R# 4HEIRCOMPONENTINTERFACEMETHODSCANBE@PRIVATE R$ 4HEIRBUSINESSMETHODNAMESMUSTSTARTWITHhEJBv R%4HEIR@EJB#REATEMETHODSMUSTNOTBEDECLAREDAS@lNAL &ORWHICHTYPEOFBEANCANTHE3ESSION3YNCHRONIZATIONINTERFACEBE IMPLEMENTED

R!ONLYSTATEFULSESSIONBEANS R"ONLYSTATELESSSESSIONBEANS R# BOTHSTATEFULANDSTATELESSSESSIONBEANS R$ NEITHERSTATEFULNORSTATELESSSESSIONBEANS

\RXDUHKHUH



FRIIHHFUDPPRFNH[DP

21

7HICHSTATEMENTSARETRUEFORSTATELESSSESSIONBEANINSTANCES#HOOSEALL THATAPPLY

R!!NYINSTANCECANBEUSEDFORANYCLIENT R"#ONVERSATIONALSTATEMUSTBERETAINEDACROSSMETHODS R##ONVERSATIONALSTATEMUSTBERETAINEDACROSSTRANSACTIONS R$ 4HEYCANBEPASSIVATED R%4HEYDONOTSUPPORTTRANSACTIONS



&KDSWHU

VHVVLRQEHDQOLIHF\FOH

0RFN([DP$QVZHUV (spec: 71)

1

7HICHSTATEMENTSABOUTSESSIONBEANSARETRUE#HOOSEALLTHATAPPLY

what entity

R! !STATEFULSESSIONBEANISTYPICALLYUSEDTOREPRESENTAROWINADATABASE -thatsÕsdo bean R" 4HECLIENTMUSTCALLTHEEJB!CTIVATEMETHODBEFORECALLINGANYBUSINESS - only the container calls

ejbActivate()

METHODS

R# !STATEFULSESSIONBEANSlELDSCANCONTAINCLIENTCONVERSATIONALSTATE R$ 4HEYARETYPICALLYUSEDASASYNCHRONOUSMESSAGECONSUMERS

2

(spec: 77)

7HICHLISTS CORRECTLYSEQUENCESOMEOFTHESTEPSINASESSIONBEANSLIFECYCLE #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 REACTIVATED#HOOSEALLTHATAPPLY

(spec: 71)

R! !REFERENCETOTHEREMOTEHOMEINTERFACE R" !REFERENCETOTHE5SER4RANSACTIONINTERFACE ization n could be serial io at iv ss pa r, be R# !REFERENCETOADATABASECURSOR - remem R$ !REFERENCETOTHE3ESSION#ONTEXTOBJECT R% !REFERENCETOASOCKET - remember, passivation cou

ld be serialization

\RXDUHKHUH



PRFNH[DPDQVZHUV

4

7HICHAREVALIDREMOTECOMPONENTINTERFACESFORASESSIONBEAN#HOOSEALL THATAPPLY

(spec: 97)

R! SXEOLFLQWHUIDFH0\%HDQH[WHQGVMDYD[HME(-%2EMHFW^ 

 YRLGP\0HWKRG  -

`

needs RemoteException

R"SXEOLFLQWHUIDFH0\%HDQH[WHQGVMDYD[HME(-%2EMHFW WKURZV5HPRWH([FHSWLRQ^  YRLGP\0HWKRG 

- illegal Java !

`

ect

R# SXEOLFLQWHUIDFH0\%HDQH[WHQGV - nope, gotta be EJBObj MDYD[HME(-%+RPH2EMHFW^

YRLGP\0HWKRG WKURZV5HPRWH([FHSWLRQ `

R$SXEOLFLQWHUIDFH0\%HDQH[WHQGVMDYD[HME(-%2EMHFW^ 

 YRLGP\0HWKRG WKURZV5HPRWH([FHSWLRQ

`

5

(spec: 79)

)FACLIENTMAKESACALLTOASESSIONOBJECTTHATHASBEENREMOVEDBYTHE CONTAINER WHICHEXCEPTIONSCANBETHROWN#HOOSEALLTHATAPPLY

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

ders

6

(spec: 98)

'IVEN 0\%HDQFUHDWH 6WULQJQDPH WKURZV&UHDWH([FHSWLRQ 5HPRWH([FHSWLRQ 7HICHSESSIONBEANINTERFACECANCONTAINTHISMETHOD

R! /NLYSTATEFULSESSIONBEANS R" /NLYSTATELESSSESSIONBEANS R# "OTHSTATEFULANDSTATELESSSESSIONBEANS R$ .EITHERSTATEFULNORSTATELESSSESSIONBEANS



&KDSWHU

must have Stateless bearangusment create only a no-

VHVVLRQEHDQOLIHF\FOH

7

7HATISTRUEABOUTASESSIONBEANSLIFECYCLE#HOOSEALLTHATAPPLY

R! )FABUSINESSMETHODTHROWSASYSTEMEXCEPTIONTHEBEANWILLBE

(spec: 79, 88) killed - no, the bean is

PASSIVATED

R" !PASSIVATEDBEANMUSTBEACTIVATEDBEFOREITCANBEREMOVED - nope R# !STATELESSSESSIONBEANSREMOVALMUSTBEINITIATEDBYTHECLIENTNOTTHE CONTAINER

R$ 3TATELESSSESSIONBEANSCANNOTIMPLEMENTTHE3ESSION3YNCHRONIZATION INTERFACE

8

7HICHAREREQUIREDOFTHEBEANPROVIDERTOENSURETHATASESSIONBEANIS SUCCESSFULLYPASSIVATED#HOOSEALLTHATAPPLY

(spec: 71-72)

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

9

'IVENASTATELESSSESSIONBEANWITHCONTAINER MANAGEDTRANSACTION DEMARCATION FROMWHICHMETHODS CANYOUACCESSANOTHERBEAN#HOOSE ALLTHATAPPLY

(spec: 90)

R! HME&UHDWH R" HME5HPRYH  R# ABUSINESSMETHOD - also true for stateless BMT beans R$ VHW6HVVLRQ&RQWH[W

\RXDUHKHUH



PRFNH[DPDQVZHUV

10

(API docs)

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





"GET5SER4RANSACTION 2





3ESSION#ONTEXT

#AFTER"EGIN

1





3ESSION"EAN

$IS#ALLER)N2OLE

2





5SER4RANSACTION

%GET2OLL"ACK/NLY

2 3 2,4

!AFTER#OMPLETION

&SET3ESSION#ONTEXT 'SET2OLLBACK/NLY

11

3ESSION3YNCHRONIZATION

(spec: 70)

7HATISTRUEABOUTASESSIONBEANSLIFECYCLE#HOOSEALLTHATAPPLY

R! 4HECONTAINERWILLALWAYSCREATEANEWSESSIONBEANINSTANCEWHEN THECLIENTINVOKESTHEFUHDWH METHODONTHEHOMEINTERFACEOFA STATELESSBEAN - Container makes stateless beans whenever it wants

R" 4HECONTAINERWILLALWAYSCALLHME5HPRYH WHENTHECLIENTINVOKES - Container remove THEUHPRYH METHODONASTATELESSBEANSHOMEINTERFACE

s stateless bean ONLYa when it wants to shrink the pool

R# !SESSIONBEANCANNOTBEPASSIVATEDWHILEITISINATRANSACTION R$ 4HEVHW6HVVLRQ&RQWH[W METHODISNOTINVOKEDDURINGASTATELESS BEANSLIFECYCLE

12

7HICHOFTHEFOLLOWINGMETHODSARECONTAINERCALLBACKMETHODS#HOOSEALL THATAPPLY

R! HME3DVVLYDWH R" VHW5ROOEDFN2QO\ R# VHW6HVVLRQ&RQWH[W R$ JHW5ROOEDFN2QO\ R%JHW8VHU7UDQVDFWLRQ



&KDSWHU

(spec: 73)

VHVVLRQEHDQOLIHF\FOH

13

)NWHATCASES WILLTHECONTAINERFAILTOCALLEJB2EMOVE ONASESSIONBEAN #HOOSEALLTHATAPPLY

(spec: 82)

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

14

7HICHMETHODS ALLOWBOTHSTATEFULANDSTATELESSSESSIONBEANSWITHBEAN MANAGEDTRANSACTIONDEMARCATIONTOACCESS5SER4RANSACTIONMETHODS #HOOSEALLTHATAPPLY

(spec: 80, 90)

R! HME&UHDWH r stateful only - fo R" HME5HPRYH R# ABUSINESSMETHOD R$ VHW6HVVLRQ&RQWH[W

15

&ORWHICHTYPEOFBEANCANTHECONTAINERPASSIVATEANINSTANCETHATISINA TRANSACTION

(spec: 70)

R! ONLYSTATEFULSESSIONBEANS R" ONLYSTATELESSSESSIONBEANS R# BOTHSTATEFULANDSTATELESSSESSIONBEANS R$ NEITHERSTATEFULNORSTATELESSSESSIONBEANS

16

&ORSESSIONBEANS WHICHARETHERESPONSIBILITYOFTHE#ONTAINER#HOOSEALL 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 runtime exception

\RXDUHKHUH



PRFNH[DPDQVZHUV

17

&ORTHISDRAGANDDROPTYPEQUESTION YOUCANUSEEACHELEMENTONLYONCE 7HICHINTERFACESHOULDBEMATCHEDWITHWHICHFACT SOTHATALLFOURMATCHES ARECORRECT

b REMOTECOMPONENTA(ASAJHW+RPH+DQGOH METHOD



REMOTEHOMEBEXTENDSµMDYD[HME(-%2EMHFW¶ a LOCALCOMPONENTCMETHODSMUST./4THROW c 

 







µMDYDUPL5HPRWH([FHSWLRQ¶

LOCALHOMEDCANBEUSEDTORETRIEVEAN%*",OCAL/BJECT d

18

7HICHCANBECALLEDBYTHECONTAINERDURINGTHELIFECYCLEOFASESSIONBEAN #HOOSEALLTHATAPPLY

(spec: 90, 97)

R! FUHDWH - client calls R" BEANCONSTRUCTOR R# VHW5ROOEDFN2QO\ - bean calls these R$ JHW8VHU7UDQVDFWLRQ R%HME5HPRYH

19

20

7HICHSTATEMENTSABOUTASESSIONBEANCLASSARETRUE#HOOSEALLTHATAPPLY

R! 4HEYCANBEMARKED@lNAL R" 4HEYDONOTNEEDANO ARGUMENTCONSTRUCTOR R# 4HEIRCOMPONENTINTERFACEMETHODSCANBE@PRIVATE R$ 4HEIRBUSINESSMETHODNAMESMUSTSTARTWITHhEJBv R%4HEIR@EJB#REATEMETHODSMUSTNOTBEDECLAREDAS@lNAL &ORWHICHTYPEOFBEANCANTHE3ESSION3YNCHRONIZATIONINTERFACEBE IMPLEMENTED

R!ONLYSTATEFULSESSIONBEANS R"ONLYSTATELESSSESSIONBEANS R# BOTHSTATEFULANDSTATELESSSESSIONBEANS R$ NEITHERSTATEFULNORSTATELESSSESSIONBEANS



(spec: 95)

&KDSWHU

(spec: 75)

VHVVLRQEHDQOLIHF\FOH

21

7HICHSTATEMENTSARETRUEFORSTATELESSSESSIONBEANINSTANCES#HOOSEALL THATAPPLY

(spec: 88)

R!!NYINSTANCECANBEUSEDFORANYCLIENT R"#ONVERSATIONALSTATEMUSTBERETAINEDACROSSMETHODS R##ONVERSATIONALSTATEMUSTBERETAINEDACROSSTRANSACTIONS R$ 4HEYCANBEPASSIVATED R%4HEYDONOTSUPPORTTRANSACTIONS

\RXDUHKHUH



entity bean intro

5

4

4 (QWLWLHVDUH3HUVLVWHQW DQGWKHQ,VDLG´
(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  ,GHQWLI\FRUUHFWDQGLQFRUUHFWVWDWHPHQWVRU H[DPSOHVDERXWWKHFOLHQWYLHZRIDQHQWLW\ EHDQ¶VORFDODQG5HPRWHKRPHLQWHUIDFH LQFOXGLQJWKHFRGHXVHGWRORFDWHDQHQWLW\ EHDQ¶VKRPHLQWHUIDFHDQGWKHKRPH LQWHUIDFHPHWKRGVSURYLGHGWRWKHFOLHQW

 ,GHQWLI\FRUUHFWDQGLQFRUUHFWVWDWHPHQWV  RUH[DPSOHVDERXWWKHFOLHQWYLHZRIDQ

HQWLW\EHDQ¶VORFDOFRPSRQHQWLQWHUIDFH (-%/RFDO2EMHFW DQG5HPRWHFRPSRQHQW LQWHUIDFH (-%2EMHFW ,GHQWLI\WKHXVHV\QWD[DQGEHKDYLRURIWKH  IROORZLQJHQWLW\EHDQKRPHPHWKRGW\SHV IRU&03¿QGHUPHWKRGVFUHDWHPHWKRGV UHPRYHPHWKRGVDQGKRPHEXVLQHVV PHWKRGV



&KDSWHU

:KDWLWUHDOO\PHDQV
HQWLW\EHDQLQWUR

?PI\¼[IVMV\Q\aJMIV' /DVW'DUNR )LUVW'RQQ\

&86720(57$%/( /DVW )LUVW ,' 'DUNR

'RQQ\



-RQHV

,QGLH



/LQ

7DP



,'

Q &XV WRPHU%HD /DVW-RQHV )LUVW,QGLH ,'

e. in a persistent stor ta da t en es pr re s bean obEntity bean means that entity (a lthough it ws That almost always base ro ta da al on ti la re ce to jects map than just one instan ex pl m co e or m t lo can be a maps to one row...)

Q &XV WRPHU%HD /DVW/LQ )LUVW7DP ,'

Q &XV 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 IFTHEENTITYBEANDIES ASANINSTANCEONTHEHEAP IT DOESNTKILLTHEREALENTITYINTHEDATABASE"YTHEWAY WERENOWGOINGTOSAY@DATABASEINSTEADOF@UNDERLYING PERSISTENTSTORE BUTYOUAND)BOTHKNOWTHATTHESETWO ARENOTNECESSARILYSYNONYMOUS ANDTHATTHE@UNDERLYING PERSISTENTSTORENEEDNOTBEˆBUTUSUALLYISˆADATABASE 4HERE WEVESAIDIT 3OYOUWONTHAVETHERIGHTPERSPECTIVEIFYOUTHINKOF THEENTITYBEANASSOMEDATAOBJECTTHATHAPPENSTOBE 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

+L,·OOEHSOD\LQJ\RX IRUWKLVWUDQVDFWLRQVR,·G OLNHWRNQRZDOLWWOHPRUH DERXW\RX 'DUNR

'RQQ\

entity entity b

ean



HQWLW\EHDQLQWUR

WKHUH DUH QR

'XPE 4XHVWLRQV

Q:

*USTSO)VEGOTTHISSTRAIGHT YOURENTIREDATABASEDOESNTGET LOADEDINASENTITYBEANS RIGHT) MEAN THATWOULDBEINSANE

(QWLW\EHDQVDUHDQ22ZD\RI ORRNLQJDWGDWDLQDSHUVLVWHQWVWRUH

A:

$QHQWLW\LVDUHDOXQLTXHO\ LGHQWLILDEOHWKLQJWKDWH[LVWV VRPHZKHUHRXWVLGHRI(-%DQG WKHHQWLW\EHDQ·VMRELVVLPSO\WR %(&20(DQ22YLHZRIWKDWUHDO SHUVLVWHQWHQWLW\

9OURERIGHT ATLEASTABOUTTHE FIRSTPART.O YOURENTIREDATABASE IS./4LOADEDINASENTITYBEANS 4HINKOFENTITYBEANSASJUST IN TIME REPRESENTATIONSOFONLYTHEENTITIESIN THEDATABASETHATAREACTIVELYNEEDED BYCLIENTBUSINESSPROCESSES "UTDOESTHATMEANITWOULDBEINSANE TOLOADTHEMALLIN.OTNECESSARILY 7HILEITWOULDCERTAINLYUPYOUR RESOURCEREQUIREMENTS ESPECIALLYIF THEDATAINTHEUNDERLYINGDATABASE CONTINUESTOGROW JUSTTHINKOFHOW &!34ITWOULDBE !LTHOUGHTHEREISNOTHINGINTHE SPECTHATREQUIRESTHIS AVENDORCAN CHOOSETOLETYOUCONFIGURETHEAPP INSUCHAWAYTHATITDOESPRE LOAD ALLTHEENTITIESINTHEDATABASEINTO BEANS4HATGIVESYOU ESSENTIALLY A LIGHTENING FASTIN MEMORYDATABASE THATSTILLSYNCHRONIZESITSELFWITHTHE REALUNDERLYINGSTOREYOULLSEEHOWIN AMOMENT  !NDTOTAKEITASTEPFURTHER IFYOUR SERVERGIVESYOUAWAYTOTELLITTHAT YOURENTITYBEANSAREYOURONLYACCESS TOTHEDATABASE THENTHESERVERCAN EVENELIMINATETHESYNCHRONIZATION ANDJUSTKEEPTHEDATABASEINMEMORY SAVINGONLYWHATITNEEDSASABACKUP INCASEOFACRASH

7KHHQWLW\EHDQFDQQRWH[LVW ZLWKRXWWKHUHDOHQWLW\EXWWKHUHDO HQWLW\FDQH[LVWZLWKRXWWKHEHDQ $QHQWLW\EHDQLV127WKHUHDO HQWLW\LW·VMXVWDUHSUHVHQWDWLRQRU ´UHDOL]DWLRQµRIWKHHQWLW\

\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 )FYOUUSEENTITYBEANSINSTEADOFDIRECTCALLSTO THEDATABASE YOUGETTOTAKEADVANTAGEOFALLTHE #ONTAINERSSERVICES INCLUDINGTHEABILITYTOWRAP SEVERALDATABASETRIPSINONETRANSACTION"UTASYOULL SEE ONEOFTHEBIGGESTBENEFITSOFUSINGENTITYBEANS ISTHATTHE#ONTAINERAUTOMATICALLYSYNCHRONIZES BETWEENTHEDATABASEANDTHEENTITYBEAN "UTTHESINGLEMOSTCOMPELLINGREASONFORENTITY BEANSISTHATTHEYTAKEYOUFROMTHERELATIONALWORLD TOTHEOBJECTWORLD)NOTHERWORDS YOUGETTOSTAY WITHOBJECTSALLTHEWAYDOWN INYOURAPP RATHER THANMAPPINGBACKANDFORTHINYOURCODE!NDIF YOUREUSING#-0 WHICHYOUALMOSTCERTAINLYWILLBE FORREASONSTHATWILLBECOMEOBVIOUSALITTLELATER YOUWONTHAVEASHREDOF31,INYOURBEANCODE)N FACT WITH#-0ENTITYBEANS YOUGETTOPRETENDTHAT YOURENTIREDATABASEEXISTSSOLELYASOBJECTSONTHE HEAP 3URE MAYBEYOURECOMFORTABLEWITH*$"# BUTWHAT ABOUTTHERESTOFTHETEAM!NDLETSFACEITˆTHINK INGIN//MAKESALOTMORESENSETHANHAVINGTO SHIFTBETWEEN//ANDENTITYCODE



&KDSWHU

QRZ QHHGWRN ¶W Q R G X R < H[DP %&IRUWKH 64/RU-'

WRNQRZ X'2QHHG R <  / UW D S HPRVW LPLODUWR64 :HOOIRUWK PHZD\VV R V W LQ X R LV E K KLF KLQJD (-%4/Z NQRZDQ\W U Q¶WQHHGWR R RHVQ¶WFRYH G G X P \R W [D X H E H K W LOH K  EHDQ $QGZ QRZWKDWD 64/LWVHOI 2QHHGWRN UFHIURPZKLFK ' X \R  & -'% WD6RX LRQ
HQWLW\EHDQLQWUR

-V\Q\aJMIV[NZWU\PMKTQMV\¼[XWQV\WN^QM_

:LWKWKHFXVWRPHUEHDQ ,ZDQWWR LQSXWQHZFXVWRPHUVUHPRYHFXVWRPHUV DQGXSGDWHFXVWRPHULQIRUPDWLRQ,DOVR ZDQWWRGRTXHULHVWRVHOHFWFXVWRPHUV EDVHGRQVRPHFULWHULD$QG,·PVRUU\EXW ,MXVW5()86(WRWKLQNLQ64/
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



ÀQ G% \3 ULP  DU \. H\ ´ µ

+RPH REMHFW VWXE



´µ U\.H\ D LP U \3 ÀQG%

OWR KHSRR DQLQW H[LVWV H E D  DVN WKDW YHULI\

FRQWH[W

%HDQ3RRO

'%

 $IWHUGRLQJD-1',ORRNXSRQWKHHQWLW\EHDQKRPHDQGJHWWLQJDKRPHLQWHUIDFHUHIHUHQFH WKHFOLHQWFDOOVILQG%\3ULPDU\.H\ ´µ RQWKHKRPHVWXE

 7KHILQG%\3ULPDU\.H\ ´µ PHWKRGLQYRFDWLRQLVSDVVHGWRWKHKRPHREMHFW  7KH&RQWDLQHUDVNVDEHDQLQWKHSRROWRYHULI\WKDWH[LVWVLQWKHGDWDEDVH

 VWXE 

(-% REMHFW 

 UHWX UQ(%RE MHFW VWXE

 +RPH REMHFW

LVWVµ H[    V ´
EHDQ FRQWH[W

%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

FU HD  WH ´% LOO\ % RE µ

+RPH REMHFW VWXE





O SRR URP I  Q EHD JHW

%REµ %LOO\ ´ H W FUHD

%HDQ3RRO

'%

 $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 H WK 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 EntityBeeassionBean) e h t t n e implem instead of S SXEOLFFODVV&XVWRPHU%HDQLPSOHPHQWV(QWLW\%HDQ^ interface ( map to es the Þelds that ca SULYDWH6WULQJODVW1DPH y beanÕs state includba tit se-en e is Th th in , ble ta ta se SULYDWH6WULQJ¿UVW1DPH da r me sto Cu e th in ns lum co ID (primary key) SULYDWH6WULQJSULPDU\.H\ Þrst name, last name, and youÕre even MORE imposiortn anbetanwhen SULYDWH(QWLW\&RQWH[WFRQWH[W Your context is ins a ses  an entity bean tead of

SDFNDJHDQGLPSRUWVKHUH

SXEOLF6WULQJHME&UHDWH 6WULQJODVW6WULQJ¿UVW ^ entÕs ructor? We take thene tclith ODVW1DPH ODVW nst co a e lik lot a e k loo is th res DoesnÕt ¿UVW1DPH ¿UVW nce variables that rep ta ins to em th ). ign ble ta ass d se an ba args e data SULPDU\.H\ WKLVJHW3.  te (i.e. columns in th-donÕt worry about entityÕs persistent sta y ke y '%,16(57 ar im pr e th ns ur ret e() eat The ejbCr UHWXUQSULPDU\.H\ it right now. ` SXEOLF6WULQJJHW/DVW1DPH ^ UHWXUQODVW1DPH ` SXEOLFYRLGVHW/DVW1DPH 6WULQJQDPH ^ ODVW1DPH QDPH ` SXEOLF6WULQJJHW)LUVW1DPH ^ UHWXUQODVW1DPH ` SXEOLFYRLGVHW)LUVW1DPH 6WULQJQDPH ^ ¿UVW1DPH QDPH ` SXEOLFYRLGHME$FWLYDWH ^` SXEOLFYRLGHME3DVVLYDWH ^` SXEOLFYRLGHME5HPRYH ^'(/(7(`

Plain old Java getters setters for the persistent Þelds. The maand gic , minute, is that the result of astheyouÕll see in a ultimately lead to a database updse setters will ate !

ean, that were Three container callbacks from EntityBVER VERY also in SessionBean. Except... they have thisYchapter. 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 session beans.

than it is for ally WAY more important usu SXEOLFYRLGXQVHW(QWLW\&RQWH[W ^` these are three NEW container cal SXEOLFYRLGHME/RDG ^6(/(&7` lbacks from the EntityB SXEOLFYRLGHME6WRUH ^83'$7(` interface (not found in Session Bean). TheyÕre IMPORTANT!ean SULYDWH6WULQJJHW3. ^ use clientUHWXUQ³´ LQW  0DWKUDQGRP    WorldÕs worst primary key algorithm.Normally weÕd ted key. genera ` supplied info or perhaps the databaseÕs auto(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

YiX`e gfn\i

MDYD[HME  LPSRUWMDYD UPL5HPRWH([ FHSWLRQ

KRPH

MDYD[HME  LPSRUWMDYD UPL5HPRWH([ FHSWLRQ

MDYD[HME  LPSRUWMDYD UPL5HPRWH([ FHSWLRQ

0DNHDQHZFXVWRPHU

FRPSRQHQW

MDYD[HME  LPSRUWMDYD UPL5HPRWH([ FHSWLRQ

KRPH

FRPSRQHQW

LPSRUWMDYD UPL5HPRWH([ FHSWLRQ

LPSRUWMDYD UPL5HPRWH([ FHSWLRQ

KRPH

FRPSRQHQW

MDYD[HME  LPSRUWMDYD UPL5HPRWH([ FHSWLRQ

7KLQNDERXWWKHIROORZLQJRSHUDWLRQVDQGILJXUHRXWZKLFKRI WKHWZRFOLHQWLQWHUIDFHV FRPSRQHQWRUKRPH LVEHWWHUVXLWHG IRUHDFKRSHUDWLRQ.HHSLQPLQGWKDWWKHUXOHVIRUHQWLW\EHDQ LQWHUIDFHVPLJKWEHGLIIHUHQWIURPVHVVLRQEHDQLQWHUIDFHV,I \RXWKLQNERWKLQWHUIDFHVDUHDSSURSULDWHFKHFNWKHPERWK :H·YHGRQHWKHILUVWRQHIRU\RX

MDYD[HME  LPSRUWMDYD UPL5HPRWH([ FHSWLRQ

KRPH

FRPSRQHQW

LPSRUWMDYD UPL5HPRWH([ FHSWLRQ

LPSRUWMDYD UPL5HPRWH([ FHSWLRQ

KRPH

FRPSRQHQW

MDYD[HME  LPSRUWMDYD UPL5HPRWH([ FHSWLRQ

MDYD[HME  LPSRUWMDYD UPL5HPRWH([ FHSWLRQ

KRPH

FRPSRQHQW

&KDQJHDQH[LVWLQJFXVWRPHU¶VSKRQHQXPEHU

)LQGDOOWKHFXVWRPHUVLQ3OHDVDQWYLOOH

'HOHWHDOOFXVWRPHUVSUHYLRXVO\GHFODUHGµLQDFWLYH¶

'HOHWHDVSHFL¿FFXVWRPHU

*HWWKHVWUHHWDGGUHVVRIDVSHFL¿FFXVWRPHU \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 LQWHUIDFH!! &XVWRPHU

LQWHUIDFH!! &XVWRPHU

JHW/DVW1DPH VHW/DVW1DPH 6WULQJV

JHW/DVW1DPH VHW/DVW1DPH 6WULQJV

JHW)LUVW1DPH VHW)LUVW1DPH 6WULQJV

JHW)LUVW1DPH VHW)LUVW1DPH 6WULQJV

LQWHUIDFH!! 5HPRWH

Remember the actual hierarchy for Remote component interfacesthe component interface extends EJBObject, and EJBObject extends Remote



&KDSWHU

:KDWWKH&/,(17VHHV

LQWHUIDFH!! (-%2EMHFW

LQWHUIDFH!! &XVWRPHU

JHW3ULPDU\.H\ JHW(-%+RPH JHW+DQGOH UHPRYH LV,GHQWLFDO

n ods that sessroiom h et m e m sa e h These are t see, because they come f bean clients .EJBObject interface! the javax.ejb the nt can access r Customer ie cl e h t , er b you Remem you declare in methods thatLUS the Þve methods from interface, P BObject. javax.ejb.EJ

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
127EHUXQWLPHH[FHSWLRQV LQRWKHUZRUGVWKH\PXVWEHFRPSLOHU FKHFNHGH[FHSWLRQV²VXEFODVVHVRI([FHSWLRQEXWQRWVXEFODVVHVRI 5XQWLPH([FHSWLRQ

4



&KDSWHU

0HWKRGVFDQKDYHDUELWUDU\QDPHVDVORQJDVWKH\GRQ¶WEHJLQZLWK³HME´

HQWLW\EHDQLQWUR

-V\Q\aJMIV:MUW\MPWUMQV\MZNIKM 0W_Q\¼[LQNNMZMV\NZWUI[M[[QWVJMIVPWUMQV\MZNIKM" 
!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 
3INCESESSIONBEANSREPRESENTPROCESS ITDOESNTMAKESENSETO SAY GETMULTIPLE INSTANCESOFTHESAMEPROCESS"UTWITHENTITYBEANS YOUMIGHTWANTTODOTHE SAMETHINGSYOUDDOONADATABASETABLE LIKElNDALLTHECUSTOMERSWHOLIVEIN (ELSINKIANDENJOYSURlNG

:KDW<28ZULWH

:KDWWKH&/,(17VHHV

LQWHUIDFH!! &XVWRPHU+RPH

LQWHUIDFH!! &XVWRPHU+RPH

FUHDWH 6WULQJODVW6WULQJILUVW ILQG%\3ULPDU\.H\ 6WULQJNH\ ILQG%\&LW\ 6WULQJFLW\

FUHDWH 6WULQJODVW6WULQJILUVW ILQG%\3ULPDU\.H\ 6WULQJNH\ ILQG%\&LW\ 6WULQJFLW\

the client can see An entity beaetnhods a session bean 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

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

\RXDUHKHUH



HQWLW\KRPHLQWHUIDFH

?PI\LWM[\PMKTQMV\ZMITTa_IV\ NZWUIVMV\Q\aJMIVPWUM ' give ByPrimaryKeyhe nd Þ nd a e t ea cr ference to t back a single treerface. component in -row Þnder But a multipllleection of references returns a co

LQWHUIDFH!! &XVWRPHU+RPH

&XVWRPHUFUHDWH 6WULQJODVW6WULQJILUVW &XVWRPHUILQG%\3ULPDU\.H\ 6WULQJNH\ &ROOHFWLRQILQG%\&LW\ 6WULQJFLW\

7ITHSESSIONBEANS THATWASEASYˆAREFERENCETOTHE COMPONENTINTERFACE!NDTHATSEXACTLYWHATTHECREATE METHODSHAVETOGIVEBACK 7ITHENTITYBEANS ITSTHESAMEFORCREATE METHODSˆTHEY MUSTGIVEBACKAREFERENCETOTHECOMPONENTINTERFACE INTHIS CASETHECOMPONENTINTERFACEFORTHEENTITYJUSTCREATED "UTWHATIFYOUWANTTOlNDANEXISTINGENTITYBEAN INSTEADOFMAKINGANEWONE4HATSWHATTHEMANDATORY lND"Y0RIMARY+EY METHODISFOR ANDIT TOO MUSTGIVEBACK AREFERENCETOTHECOMPONENTINTERFACEFORTHEBEANMATCHING THATKEY "UTWHATIFTHEREISNTAMATCHINGENTITY)FTHERESNOENTITY WITHTHATKEYINTHEDATABASE THECLIENTGETSAJAVAXEJB/BJECT .OT&OUND%XCEPTION3OTHERETURNTYPEOFlND"Y0RIMARY+EY ISALWAYSTHESAMEASITISFORCREATE THECOMPONENTINTERFACE FORTHATBEANTYPE!NDOFCOURSE THERULESFORSESSIONBEAN CLIENTINTERFACESAPPLIESHEREASWELLˆA2EMOTEHOMEINTERFACE MUSTGIVEBACKTHE2EMOTECOMPONENTINTERFACE ANDTHELOCAL HOMEINTERFACEMUSTGIVEBACKTHELOCALCOMPONENTINTERFACE 4HISSTILLLEAVESUSWITHAMETHODTHATCANNOTRETURNTHE COMPONENTINTERFACEAMULTIPLE ENTITYlNDER LIKEOUR lND"Y#ITY METHOD7ELL THECLIENTSGOALDOESNTCHANGE WITHMULTIPLE ENTITYlNDERSTHECLIENTSTILLWANTSAREFERENCE TOTHECOMPONENTINTERFACE ONLYTHISTIMEITMIGHTBEAWHOLE COLLECTIONOFTHEM/NEFOREVERYCUSTOMERENTITYINTHECITY NAMEDINTHEMETHODSARGUMENT .OTEACLIENTWILLNOTGETANEXCEPTIONIFAMULTI ENTITYlNDER CANTlNDANYMATCHES)NSTEAD THECLIENTWILLSTILLGETA #OLLECTION BUTITWILLSIMPLYBEEMPTY!#OLLECTIONWITHNO ELEMENTS/NLYSINGLE ENTITYlNDERSTHROWEXCEPTIONSWHEN NOTHINGMATCHESTHElNDCRITERIA 

&KDSWHU

7KHFUHDWHDQGILQGHU PHWKRGVLQDQHQWLW\EHDQ KRPHDOZD\VJLYHEDFN WKHEHDQ·VFRPSRQHQW LQWHUIDFH )RUFUHDWH DQG ILQG%\3ULPDU\.H\ WKH FOLHQWJHWVDUHIHUHQFHWR RQH(-%REMHFW )RUPXOWLSOHHQWLW\ ILQGHUVWKHFOLHQWPLJKW JHWDZKROH3,/(RI UHIHUHQFHVWR(-%REMHFWV³ RQHIRUHDFKEHDQWKDW PDWFKHVWKHTXHU\

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 WITHTHEONERESTRICTION OFCOURSE THAT2EMOTEHOME METHODSRETURNVALUESTHATARE2-) ))/0COMPLIANT  (OMEBUSINESSMETHODSAREGREATFORBATCHOPERATIONS ORFORQUERYMETHODSWHERETHECLIENTDOESNTNEEDˆOR WANTˆ%*"OBJECTREFERENCES BUTSIMPLYWANTSTHE ENTITYSDATAINOTHERWORDS THEDATAFORONEORMORE OFTHEENTITYSPERSISTENTlELDS &OREXAMPLE WEMIGHT PUTAHOMEBUSINESSMETHODINTHE#USTOMERBEAN LIKE GET!LL#USTOMER)NFO THATRETURNSACOLLECTIONOF 3TRINGS WITHWHATEVERPIECESOFDATAYOUVEDECIDEDMAKE UPTHECUSTOMERSINFO"ETTERYET YOUCANSENDBACKA COLLECTIONOF#USTOMER)NFOOBJECTS WHERE#USTOMER)NFO ISACLASSTHATSIMPLYHOLDSTHEDATAANDGETTERS FORTHE #USTOMERSPERSISTENTSTATE4HATWAY THECLIENTCANMAKE LOCALCALLSTOGETTHEDATAITNEEDSOUTOFTHE#USTOMER)NFO OBJECTS WITHOUTHAVINGTHOSECALLSBEREMOTECALLSONTHE COMPONENTINTERFACE !#USTOMER)NFOCLASSISANEXAMPLEOFA6ALUE/BJECTCLASS WHICHIS INANUTSHELL JUSTACLASSWITHGETTERSANDPOSSIBLY SETTERS DEPENDINGONTHEDESIGN REPRESENTINGTHEENTITYS PERSISTENTlELDS !NDIT TOO HASADARKSIDEˆTHEDATA STARTSTOBECOMESTALETHEMOMENTAFTERTHE6ALUE/BJECTIS CREATED 7ECOULDTELLYOUNOW BUTTHENWEDBEROBBINGYOUOF SUCHAVALUABLEOPPORTUNITYTOAPPLYALITTLENEURALEFFORT 3OFORNOW WHYDONTYOUTHINKOFWHYSENDINGBACK #USTOMER)NFOOBJECTS THATTHECLIENTCOULDTHENINTERROGATE IECALLMETHODSON ATITSLEISURE COULDHAVEADOWNSIDE 7ELLUSE6ALUE/BJECTSALOT BUTYOUHAVETOBEAWAREOF THETRADEOFFSWHENCHOOSINGBETWEENUSINGAHOMElNDER METHODTHATRETURNS%*"OBJECTREFERENCESESPECIALLYWHEN THEREFERENCESARE2EMOTE VSAHOMEBUSINESSMETHODTHAT RETURNS6ALUE/BJECTS



&KDSWHU

+RPHEXVLQHVVPHWKRGV FDQUHWXUQVRPHWKLQJ RWKHUWKDQ(-%REMHFW UHIHUHQFHV7KH\·UH SHUIHFWIRUTXHULHVZKHUH WKHFOLHQWMXVWZDQWVWKH HQWLW\GDWDQRWUHIHUHQFHV WRWKHHQWLWLHVWKHPVHOYHV 7KH\·UHDOVRJUHDWIRU EDWFKRSHUDWLRQVRU DQ\WKLQJHOVH\RXPLJKW ZDQWWRGRZLWKPRUH WKDQRQHVSHFLILFHQWLW\ ZKHQ\RXGRQ·WZDQWWR UHWXUQUHIHUHQFHVWRWKH FRPSRQHQWLQWHUIDFH

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
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!! &XVWRPHU+RPH

FUHDWH 6WULQJODVW6WULQJILUVW ILQG%\3ULPDU\.H\ 6WULQJNH\ ILQG%\&LW\ 6WULQJFLW\ JHW(-%0HWD'DWD JHW+RPH+DQGOH UHPRYH +DQGOHK UHPRYH 2EMHFWNH\



&KDSWHU

LQWHUIDFH!! &XVWRPHU

JHW/DVW1DPH VHW/DVW1DPH 6WULQJV JHW)LUVW1DPH VHW)LUVW1DPH 6WULQJV JHW3ULPDU\.H\ JHW(-%+RPH JHW+DQGOH UHPRYH LV,GHQWLFDO

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

   (QWLW\EHDQFUHDWH

ƒ &OLHQWFDOOVLWWRLQVHUWDQHZURZLQWKHGDWDEDVH  $OWKRXJKWKHHQGUHVXOWIRUWKHFOLHQWLVVWLOODQ(-%REMHFW UHIHUHQFH LQWKLVFDVHWRWKHQHZO\FUHDWHGHQWLW\ 

ƒ ,WZLOOYLUWXDOO\DOZD\VKDYHDUJXPHQWV DOWKRXJKWKH\ DUHQ·WPDQGDWRU\EXWLW·VNLQGDKDUGWRLPDJLQHDFUH DWH ZLWKRXWWKHPOLNH´+H\GDWDEDVHFUHDWHDQHZ FXVWRPHUQR,GRQ·WKDYHDQ\QDPHRU,'RUDQ\WKLQJ MXVWPDNHVRPHVWXIIXSµ 

RED 2OSESARE ATE DFORAD ANDGOO E WISMAD ANEWRO ATE HNEWCRE WITHEAC T *"OBJEC R W NEW% E O B R JECT W M B E E O N M " 2E EW%* N REATE N C  A S E N B A E NEW ENTITYB REATE OBJECT BEANSC NEW%*"   TE STATEFUL A RE C  S N BEA STATELESS

ƒ 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 6RLI\RX·YHJRWDQ\ODVWZRUGV\RX EHWWHUGRLWLQ\RXUHME5HPRYH 

UHPRYH RQDVHVVLRQEHDQ PHDQVWKHFOLHQWLVGRQHZLWK WKHEHDQ UHPRYH RQDQHQWLW\EHDQ PHDQV(9(5<21(LVGRQHZLWK WKHEHDQ

1R3OHDVH1R ,·OOJLYH\RXZKDWHYHU \RXZDQWMXVWGRQ·W FDOOUHPRYH 

\RXDUHKHUH



HQWLW\UHPRYDO

&XW 

/RRNVOLNHVRPHERG\ GLGQ·WUHDGWKHVFULSW


&KDSWHU

%XW,QHYHUJHWWRGRDGHDWK VFHQH,NQRZLW·VRQO\WKHGDWDEDVH HQWLW\WKDWJHWVGHOHWHGEXW,MXVW ZDQWHGVRPHWKLQJDELWPRUHGUDPDWLF IRUDFKDQJH,NQRZ,·OOGLHLI,WKURZDQ XQFKHFNHGH[FHSWLRQEXWWKDWFRXOGWDNH IRUHYHUDQG,ZDVKRSLQJWRJHWD SDUWLQ´/RUGRIWKH%HDQVµDQG

HQWLW\EHDQLQWUR

-V\Q\aJMIVQV[\IVKMLMI\P 3OWEALLKNOWTHATANENTITYBEANISAREPRESENTATIONOF SOMEREALENTITYINANUNDERLYINGPERSISTENTSTOREUSUALLYAS AROWINADATABASE BLAH BLAH BLAH "UTTHERESSTILLSOME CONFUSIONABOUTWHATDISTINGUISHESANENTITYFROMANENTITY BEANFROMANENTITYBEANINSTANCE

%NTITY 4HEREALTHINGINTHEUNDERLYINGPERSISTENTSTORE4HEROWIN THEDATABASEALTHOUGHITCANBEMORECOMPLEX !NENTITY DIESWHENITSROWISDELETEDFROMTHEUNDERLYINGSTORE EITHER THROUGHADIRECTDATABASEDELETELIKE SOMEONEUSINGA DATABASEADMINTOOL ORBECAUSESOMEONECALLSREMOVE ON THEBEANSHOMEORCOMPONENTINTERFACE

%NTITYBEAN 4HECOMPONENTTHATREPRESENTSTHEUNDERLYINGREALENTITY "UTTHISONESTRICKYISITTHECLASS)SITTHEINTERFACE)SIT THEINSTANCEOFTHEBEANCLASS$URINGDEVELOPMENTAND DEPLOYMENT THEENTITYBEANISTHEWHOLECOMPONENTTHE TWOINTERFACES $$ ANDBEANCLASS "UTATRUNTIME ITCAN GETALITTLEFUZZY3OMETIMESWEUSEhENTITYBEANvTODESCRIBE THEPOSSIBILITYOFREPRESENTINGAPARTICULARENTITYASABEAN )NOTHERWORDS IFTHERESANENTITYFOR"O2ODGERSINTHE DATABASE THENWECANSAYTHATTHEREISA"O2ODGERSENTITY BEAN EVENIFTHERESNOBEANINSTANCECURRENTLYREPRESENTING THATENTITY)FANENTITYEXISTSFORAPARTICULARBEANTYPELIKE #USTOMER&RED&OO THEENTITYBEANFORTHATENTITYISSAIDTO EXIST!NENTITYBEANISSAIDTODIEWHENITSUNDERLYINGENTITY ISDELETED ASIN h4HERESNO&RED&OOENTITYBEANv"UTTHAT DOESNTMEANTHEINSTANCEONTHEHEAPDIES

%NTITYBEANINSTANCE 4HEINSTANCEOFTHEBEANCLASSONTHEHEAP"EANDEATHIS INTIMATELYTIEDTOTHEDATABASE BUTBEANINSTANCEDEATHAS IN hYOUREHEADINFORGARBAGECOLLECTION PALv ISTIEDTOTHE WHIMSOFTHE#ONTAINER ORASERVERCRASH 9ES ITREALLYISTHATCONFUSING9OUHAVETOKNOWTHECONTEXTTO KNOWHOWTHEWORD@BEANISBEINGUSED)FITMEANSTHEBEAN REPRESENTING THE ENTITY THENTHATBEANWILLDIEWHENTHEENTITY DIES ANDTHE%*"OBJECTFORTHATENTITYGOESAWAY"UTˆAND HERESWHEREITGETSWEIRDˆTHEENTITYBEANINSTANCEDOESNT DIEITJUSTGOESBACKTOTHEPOOL4HINKOFTHEPHRASEhENTITY BEANvASMORECONCEPTUALTHANPHYSICAL)NMOSTCASES WE WONTHAVETODISTINGUISHBETWEENTHEBEANANDITSINSTANCE ORTHEDISTINCTIONWILLBESOOBVIOUSTHATITSNOTANISSUE

$FOLHQWFDQNLOODQHQWLW\ E\FDOOLQJUHPRYH RQD EHDQRUGHOHWLQJWKHGDWD IURPWKHGDWDEDVHGLUHFWO\ %XWRQO\WKH&RQWDLQHURUD VHUYHUFUDVKFDQNLOODEHDQ LQVWDQFH ,IZHVD\´HQWLW\EHDQ ZDVNLOOHGµWKHXQGHUO\LQJ HQWLW\LVJRQHDQGWKH(-% REMHFWIRULVJRQHEXW WKHEHDQLQVWDQFHWKDWKDG EHHQSOD\LQJVXUYLYHV :HOOLW·VEHHQJUHDW SOD\LQJ\RXUHDOO\EXWQRZ LW·VWLPHIRU\RXWRJRWRDEHWWHU SODFH,·OOWKLQNDERXW\RXZKLOH,·P ÁRDWLQJRQRQHRIWKRVHOLWWOH LQÁDWDEOHPDWWUHVV WKLQJV 'DUNR

bean in LIVES stance if the e even it plays ntity removed is .

'RQQ\



entity DIES when a client calls remove()

\RXDUHKHUH



HQWLW\UHPRYDO

&OLHQWFDOOVUHPRYH

FRQWH[W

UHPRYH 

 RYH UHP

 VWXE

(-% REMHFW 

EHDQ



FOLHQW

EHDQ H  RY P 5H HME

FRQWH[W





%HDQ3RRO

'%

 &OLHQWFDOOVUHPRYH RQWKH(-%REMHFWVWXEIRUHQWLW\  7KHUHPRYH PHWKRGLQYRFDWLRQLVSDVVHGWRWKH(-%REMHFW  7KH&RQWDLQHUFDOOVHME5HPRYH RQWKHEHDQ

FRQWH[W

(-% REMHFW 

EHDQ

 EHDQ FRQWH[W





%HDQ3RRO

GHO SULP HWHUR Z DU\ 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 SHUVLVWHQWVWRUHDQGDQHQWLW\EHDQLVDQ22UHSUH VHQWDWLRQRUUHDOL]DWLRQRIDQHQWLW\

ƒ &OLHQWVXVHHQWLW\EHDQVWRGRGDWDEDVHRSHUDWLRQVLQ DQ22ZD\2SHUDWLRQVLQFOXGHFUHDWLQJQHZHQWL WLHV GDWDEDVHLQVHUWV GHOHWLQJHQWLWLHV GDWDEDVH GHOHWHV XSGDWLQJHQWLW\VWDWH GDWDEDVHXSGDWHV DQG VHDUFKLQJIRURQHQWLWLHV GDWDEDVHVHOHFWV 

ƒ $QHQWLW\EHDQ5HPRWHFRPSRQHQWLQWHUIDFHH[WHQGV (-%2EMHFW7KHUH·VQRWDVHSDUDWHLQWHUIDFHIRUVHV VLRQEHDQVDQGHQWLW\EHDQV7KDWPHDQVWKDWWKH FOLHQWZLOOVHHDOORIWKHPHWKRGVLQ\RXUFRPSRQHQW LQWHUIDFHSOXVWKHILYHDGGLWLRQDOPHWKRGVIURP(- %2EMHFW

ƒ (QWLW\EHDQFRPSRQHQWLQWHUIDFHVXVXDOO\FRQWDLQ JHWWHUVDQGVHWWHUVIRUILHOGYDOXHVWKDWFRUUHVSRQGWR FROXPQVLQDGDWDEDVHWDEOHVXFKDVJHW/DVW1DPH  JHW+RPH3KRQH VHW)LUVW1DPH HWF

ƒ (QWLW\EHDQFRPSRQHQWLQWHUIDFHPHWKRGVDUHXVXDOO\ PHDQWWREHUXQE\DVSHFLILFXQLTXHO\LGHQWLILDEOH HQWLW\)RUH[DPSOHFDOOLQJJHW/DVW1DPH RQWKH HQWLW\ZLWKSULPDU\NH\UHWXUQVWKHODVWQDPHRI WKHHQWLW\LQWKHGDWDEDVHZLWKWKHSULPDU\NH\ 'DQ'RRI

ƒ 7KHUXOHVIRUKRZ\RXZULWHDQHQWLW\EHDQ5HPRWH FRPSRQHQWLQWHUIDFHDUHWKHVDPHDVWKHUXOHVIRU VHVVLRQEHDQVLQFOXGLQJH[WHQG(-%2EMHFWGHFODUH 5HPRWH([FHSWLRQVRQDOOPHWKRGVXVHRQO\50,,,23 W\SHVIRUDUJXPHQWVDQGUHWXUQYDOXHVGRQ·WEHJLQ PHWKRGQDPHVZLWKWKHSUHIL[´HMEµHWF

ƒ $QHQWLW\EHDQKRPHLQWHUIDFHLVVXEVWDQWLDOO\GLIIHUHQW IURPWKDWRIDVHVVLRQEHDQEHFDXVHHQWLW\EHDQVDUH W\SLFDOO\IRXQGUDWKHUWKDQFUHDWHG,QRWKHUZRUGVWKH FOLHQWLVPRUHOLNHO\WRWU\WRDFFHVVDQH[LVWLQJHQWLW\ DVRSSRVHGWRPDNLQJDQHZHQWLW\ ZKLFKPHDQVD QHZURZLQWKHGDWDEDVH

ƒ ,QDQHQWLW\KRPHDFUHDWH PHWKRGLVQRWUHTXLUHG VLQFHFUHDWH PHWKRGLQHQWLW\EHDQVDUHIRULQVHUWLQJ QHZHQWLWLHVLQWRWKHGDWDEDVHDQG\RX·UHQRWUHTXLUHG WRDOORZ\RXUFOLHQWVWRGRWKDW

ƒ (QWLW\EHDQKRPHLQWHUIDFHVFDQKDYHVLQJOHURZRU PXOWLURZILQGHUPHWKRGV%RWKFUHDWHDQGILQGHUPHWK RGVUHWXUQWKHFRPSRQHQWLQWHUIDFHRIDEHDQDOWKRXJK PXOWLHQWLW\ILQGHUVUHWXUQD&ROOHFWLRQRIFRPSRQHQW LQWHUIDFHUHIHUHQFHV

ƒ (YHU\HQWLW\EHDQKRPHLVUHTXLUHGWRKDYHDWOHDVW RQHPHWKRG³WKHILQG%\3ULPDU\.H\ PHWKRGWKDW VHDUFKHVIRUDSDUWLFXODUHQWLW\DQGUHWXUQVLWVFRP SRQHQWLQWHUIDFH LHDUHIHUHQFHWRWKDWHQWLW\·V(-% REMHFW RUWKURZVDQH[FHSWLRQ

ƒ 0XOWLSOHHQWLW\ILQGHUVGRQRWWKURZDQH[FHSWLRQLIQR PDWFKLQJHQWLWLHVDUHIRXQG7KH\VLPSO\UHWXUQDQ HPSW\FROOHFWLRQ

ƒ (QWLW\KRPHLQWHUIDFHFDQDOVRKDYHKRPHEXVLQHVV PHWKRGVIRURSHUDWLRQVWKDWDSSO\WRPRUHWKDQRQH HQWLW\DVRSSRVHGWRRQHVSHFLILFHQWLW\%DWFKXSGDWHV ZRXOGEHDJRRGXVHIRUDKRPHEXVLQHVVPHWKRG

ƒ 7KHUHDOEHQHILWRIKRPHEXVLQHVVPHWKRGVLV WKDW³XQOLNHFUHDWHDQGILQGHUPHWKRGV³KRPHEXVL QHVVPHWKRGVFDQUHWXUQVRPHWKLQJRWKHUWKDQDQ(-% REMHFWUHIHUHQFH,IWKHFOLHQWZDQWVRQO\GDWDVD\D &ROOHFWLRQRI6WULQJVUHSUHVHQWLQJWKHQDPHDQGSKRQH QXPEHURIHDFKFXVWRPHUDKRPHEXVLQHVVPHWKRG FDQGRWKDWZKLOHDILQGHUFDQQRW

ƒ $QHQWLW\EHDQFUHDWH LVYHU\GLIIHUHQWIURPDVHVVLRQ EHDQFUHDWH EHFDXVHDQHQWLW\EHDQFUHDWH LQVHUWV DQHZHQWLW\LQWRWKHXQGHUO\LQJSHUVLVWHQWVWRUH LH QHZURZLQWKHGDWDEDVH 

ƒ $QHQWLW\EHDQUHPRYH LVGUDPDWLFDOO\GLIIHUHQWIURPD VHVVLRQEHDQUHPRYH :KHQDFOLHQWFDOOVUHPRYH  RQDQHQWLW\EHDQLW·VWRGHOHWHWKHHQWLW\IURPWKHGDWD EDVH7KDWPHDQVHYHU\ERG\LVGRQHZLWKWKHEHDQ

\RXDUHKHUH



FRIIHHFUDPPRFNH[DP

0RFN([DP 1

7HATISTRUECONCERNINGLOCATINGANENTITYBEANSHOMEINTERFACE

R! 4HEQDUURZ METHODSHOULDBEUSEDFORALOCALHOMEINTERFACE R" 4HEQDUURZ METHODSHOULDBEUSEDFORAREMOTEHOMEINTERFACE R# 4HEQDUURZ METHODSHOULDBEUSEDFORBOTHLOCALANDREMOTE HOMEINTERFACES

R$ 4HEQDUURZ METHODSHOULDBEUSEDFORNEITHERLOCALNORREMOTE HOMEINTERFACES

2

7HICHCAPABILITIESAREFOUNDINANENTITYBEANSREMOTECOMPONENTINTERFACE #HOOSEALLTHATAPPLY

R! CREATINGNEWENTITYOBJECTS R" lNDINGEXISTINGENTITYOBJECTS R# REMOVINGEXISTINGENTITYOBJECTS R$ EXECUTINGAHOMEBUSINESSMETHOD R% RETRIEVINGTHE%*"-ETA$ATAINTERFACE

3

7HICHAREWAYSINWHICHACLIENTCANGETAREFERENCETOANEXISTINGENTITY OBJECTSLOCALCOMPONENTINTERFACE#HOOSEALLTHATAPPLY

R! #ALLHME&UHDWH R" #ALLJHW6HVVLRQ&RQWH[W R# /BTAINTHEREFERENCEFROMTHEHANDLE R$ 2ECEIVETHEREFERENCEASAPARAMETERINAMETHODCALL R% 5SEAlNDERMETHODDElNEDINTHELOCALHOMEINTERFACE



&KDSWHU

HQWLW\EHDQLQWUR

4

(OWMANYCREATEMETHODSCANBEDElNEDINANENTITYBEANSLOCALHOME INTERFACE

R!  R" /NLY R# TO R$ TOMANY R% TOMANY

5

7HICHAREWAYSINWHICHACLIENTCANGETAREFERENCETOANEXISTINGENTITY OBJECTSREMOTECOMPONENTINTERFACE#HOOSEALLTHATAPPLY

R! #ALLHME&UHDWH  R" /BTAINTHEREFERENCEFROMTHEHANDLE R# #ALLAMETHODONTHEENTITYOBJECTSPRIMARYKEY R$ 2ECEIVETHEREFERENCEASAPARAMETERINAMETHODCALL R% 5SEAlNDERMETHODDElNEDINTHEREMOTEHOMEINTERFACE

6

7HICHAPPROACHES CANBEUSEDONAPRIMARYKEYCLASSTODETERMINEIFTWO KEYSREFERTOTHESAMEENTITY#HOOSEALLTHATAPPLY

R! 5SINGTHEOPERATOR R" 5SINGTHEHTXDOV METHOD R# 5SINGTHELV,GHQWLFDO METHOD R$ NONEOFTHEABOVE

7

7HICHAPPROACHES CANDETERMINEWHETHERTWOENTITY%*"OBJECTREFERENCES REFERTOTHESAMEENTITYOBJECT#HOOSEALLTHATAPPLY

R! 5SINGTHEOPERATOR R" 5SINGTHEHTXDOV METHOD R# 5SINGTHELV,GHQWLFDO METHOD R$ NONEOFTHEABOVE

\RXDUHKHUH



FRIIHHFUDPPRFNH[DP

8

7HATSTRUEABOUTTHECLIENTSVIEWOFANENTITYBEANSREMOTECOMPONENT INTERFACE#HOOSEALLTHATAPPLY

R! -ULTIPLECLIENTSCANACCESSTHESAMEENTITYOBJECTCONCURRENTLY R" .EWENTITYBEANSCANBECREATEDUSINGAMETHODINTHISINTERFACE R# %NTITYBEANSMAYNOTSURVIVEACRASHOFTHECONTAINER R$ "USINESSMETHODSCANNOTRETURNAREFERENCETOTHEENTITYOBJECT

9

(OWMANYlNDERMETHODSCANBEDECLAREDWITHINANENTITYBEANSLOCALHOME INTERFACE

R!  R" /NLY R# TO R$ TOMANY R% TOMANY

10

7HICHISALEGALDECLARATIONFORALOCALHOMEINTERFACESCREATE METHOD #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

11`

7HICHISALEGALNAMEFORANENTITYBEANHOMEBUSINESSMETHOD#HOOSEALL THATAPPLY

R! CREATE R" CREATE#UST R# REMOVE!LL R$ lND#UST R%SELECT#UST



&KDSWHU

HQWLW\EHDQLQWUR

0RFN([DP$QVZHUV 1

7HATISTRUECONCERNINGLOCATINGANENTITYBEANSHOMEINTERFACE

(spec: 110)

R! 4HEQDUURZ METHODSHOULDBEUSEDFORALOCALHOMEINTERFACE R" 4HEQDUURZ METHODSHOULDBEUSEDFORAREMOTEHOMEINTERFACE R# 4HEQDUURZ METHODSHOULDBEUSEDFORBOTHLOCALANDREMOTE HOMEINTERFACES

R$ 4HEQDUURZ METHODSHOULDBEUSEDFORNEITHERLOCALNORREMOTE HOMEINTERFACES

2

7HICHCAPABILITIESAREFOUNDINANENTITYBEANSREMOTECOMPONENTINTERFACE #HOOSEALLTHATAPPLY

R! CREATINGNEWENTITYOBJECTS - home methods R" lNDINGEXISTINGENTITYOBJECTS R# REMOVINGEXISTINGENTITYOBJECTS R$ EXECUTINGAHOMEBUSINESSMETHOD - home methods R% RETRIEVINGTHE%*"-ETA$ATAINTERFACE

3

7HICHAREWAYSINWHICHACLIENTCANGETAREFERENCETOANEXISTINGENTITY OBJECTSLOCALCOMPONENTINTERFACE#HOOSEALLTHATAPPLY

(spec: 119)

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

R!  R" /NLY R# TO R$ TOMANY R% TOMANY

5

(spec: 115)

(OWMANYCREATEMETHODSCANBEDElNEDINANENTITYBEANSLOCALHOME INTERFACE

to allow - You donÕtcrhaeavete new entities clients to

(spec: 119)

7HICHAREWAYSINWHICHACLIENTCANGETAREFERENCETOANEXISTINGENTITY OBJECTSREMOTECOMPONENTINTERFACE#HOOSEALLTHATAPPLY

R! #ALLHME&UHDWH  - we said EXISTING R" /BTAINTHEREFERENCEFROMTHEHANDLE R# #ALLAMETHODONTHEENTITYOBJECTSPRIMARYKEY R$ 2ECEIVETHEREFERENCEASAPARAMETERINAMETHODCALL R% 5SEAlNDERMETHODDElNEDINTHEREMOTEHOMEINTERFACE

6

7HICHAPPROACHES CANBEUSEDONAPRIMARYKEYCLASSTODETERMINEIFTWO KEYSREFERTOTHESAMEENTITY#HOOSEALLTHATAPPLY

(spec: 120-121)

heyÕre

R! 5SINGTHEOPERATOR equals() testm,etentity. he t ss pa ys ke o - if tw eans the sa R" 5SINGTHEHTXDOV METHOD the same key ! Which m R# 5SINGTHELV,GHQWLFDO METHOD - isIdentical() is for paring component interfacecom R$ NONEOFTHEABOVE references

7

7HICHAPPROACHES CANDETERMINEWHETHERTWOENTITY%*"OBJECTREFERENCES REFERTOTHESAMEENTITYOBJECT#HOOSEALLTHATAPPLY

R! 5SINGTHEOPERATOR ring is for compa - equals() pr ys ke y ar R" 5SINGTHEHTXDOV METHOD entityÕs im R# 5SINGTHELV,GHQWLFDO METHOD R$ NONEOFTHEABOVE



&KDSWHU

(spec: 120-121)

HQWLW\EHDQLQWUR

8

7HATSTRUEABOUTTHECLIENTSVIEWOFANENTITYBEANSREMOTECOMPONENT INTERFACE#HOOSEALLTHATAPPLY

(spec: 108)

R! -ULTIPLECLIENTSCANACCESSTHESAMEENTITYOBJECTCONCURRENTLY R" .EWENTITYBEANSCANBECREATEDUSINGAMETHODINTHISINTERFACE R# %NTITYBEANSMAYNOTSURVIVEACRASHOFTHECONTAINER R$ "USINESSMETHODSCANNOTRETURNAREFERENCETOTHEENTITYOBJECT

9

(OWMANYlNDERMETHODSCANBEDECLAREDWITHINANENTITYBEANSLOCALHOME INTERFACE

(spec: 116)

R!  R" /NLY R# TO R$ TOMANY ired aryKey() is requ R% TOMANY - ÞndByPrim

10

7HICHISALEGALDECLARATIONFORALOCALHOMEINTERFACESCREATE METHOD #HOOSEALLTHATAPPLY

(spec: 115)

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

11

- local interface canÕt throw RemoteException

7HICHISALEGALNAMEFORANENTITYBEANHOMEBUSINESSMETHOD#HOOSEALL THATAPPLY

R! CREATE R" CREATE#UST R# REMOVE!LL R$ lND#UST R%SELECT#UST

(spec: 114)

ÒÞndÓ & ÒcreateÓ ÒremoveÓ ed preÞxes are reserv

\RXDUHKHUH



bean/entity synchronization

5

4 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  ,GHQWLI\FRUUHFWDQGLQFRUUHFWVWDWHPHQWV RUH[DPSOHVDERXWWKH%HDQ3URYLGHU¶V YLHZDQGSURJUDPPLQJFRQWUDFWIRU&03 LQFOXGLQJWKHUHTXLUHPHQWVIRUD&03 HQWLW\EHDQ

 ,GHQWLI\WKHLQWHUIDFH V DQGPHWKRGV D&03HQWLW\EHDQPXVWDQGPXVWQRW LPSOHPHQW

 ,GHQWLI\FRUUHFWDQGLQFRUUHFWVWDWHPHQWV RUH[DPSOHVDERXWWKHOLIHF\FOHRID&03 HQWLW\EHDQ

 )URPDOLVWLGHQWLI\WKHSXUSRVHEHKDYLRU

:KDWLWUHDOO\PHDQV 7KLVREMHFWLYHFDQKLW\RXRQDOPRVWDQ\WKLQJUHODWHG WRHQWLW\EHDQVVR\RXSUHWW\PXFKKDYHWRNQRZLW DOOLQFOXGLQJWKHGHWDLOVRID&03HQWLW\EHDQOLIHF\FOH WKHFRQWDLQHUFDOOEDFNPHWKRGVRIMDYD[HME(QWLW\%HDQ ZKDW\RXPXVWZULWHLQDEHDQFODVVDQGZKDWDEHDQ FDQJHWIURPLWV(-%&RQWH[W
DQGUHVSRQVLELOLWLHVRIWKH%HDQ3URYLGHU IRUD&03HQWLW\EHDQLQFOXGLQJEXWQRW


&KDSWHU

HQWLW\EHDQV\QFKURQL]DWLRQ

(QWLW\%HDQ/LIHF\FOH

2IILFLDO

:KDWLWUHDOO\PHDQV

 )URPDOLVWRIEHKDYLRUVPDWFKWKHPZLWK
 ,GHQWLI\FRUUHFWDQGLQFRUUHFWVWDWHPHQWV DERXWDQHQWLW\EHDQ¶VSULPDU\NH\DQG REMHFWLGHQWLW\

DVWKHFLUFXPVWDQFHVXQGHUZKLFK\RXFDQFDOOWKRVH PHWKRGV)RUH[DPSOH\RXVKRXOGNQRZWKDWLI\RX¶UH UXQQLQJLQWKHVHW(QWLW\&RQWH[W PHWKRG\RXFDQXVH \RXUVSHFLDO-1',QDPHVSDFHWRORRNXSDUHIHUHQFHWR D'DWD6RXUFHEXWWKDW\RX¶UHQRWDOORZHGWRDFFHVVWKH XQGHUO\LQJGDWDEDVHIURPWKDWPHWKRG WKHUH¶VQRPHDQ LQJIXOWUDQVDFWLRQVRWKH&RQWDLQHUZRQ¶WOHW\RXGRLW
\RXDUHKHUH



HQWLW\EHDQV\QFKURQL]DWLRQ


7KH&RQWDLQHUDOZD\VNQRZVZKHQWKH EHDQDQGWKHGDWDEDVH WKHXQGHUO\LQJ HQWLW\ PXVWEHV\QFKURQL]HGVRWKDW QHLWKHURQHKDVµVWDOH¶GDWD

2. ,KDYH WKHEHDQIRU&KULV 0DUWLQDQGQRZ,ZDQWWR FKDQJHKLVDGGUHVVWR &ORFN6WUHHW6R,·OO FDOOVHW$GGUHVV RQ WKHEHDQ &RRO,·YH XSGDWHGP\EHDQ VWDWHZLWKWKHQHZ DGGUHVV

&OREXAMPLE YOUR#USTOMERDATABASEMIGHTBEUSED BYABUNCHOFAPPSINYOURCOMPANY INCLUDINGSOME THATWORKDIRECTLYWITHTHEDATABASEANDSOMETHATGO THROUGHTHE#USTOMERBEANINAN%*"APPLICATION )FACLIENTHASAREFERENCETOABEAN THECLIENTMIGHT CHANGETHEBEANSSTATEBY SAY CALLINGASETTERMETHOD )FTHATSETTERMETHODCORRESPONDSTOONEOFTHEBEANS PERSISTENTlELDSINOTHERWORDS ACOLUMNINTHE TABLELIKEADDRESS THEBEANANDTHEDATABASEWILLBE TEMPORARILYOUTOFSYNC4HEDATABASEWONTHAVETHE CURRENTADDRESSUNTILTHEBEANUPDATESTHEDATABASE .OWTHINKWHATADISASTERITWOULDBEIFTHEBEANCACHES THENEWDATAFORTHEENTITY WITHOUTTELLINGTHEDATABASE )FSOMEONECOMESALONGWITHANOTHERAPPLICATIONAND ASKSFORTHAT#USTOMERSADDRESSFROMTHEDATABASE 4HAT 7OULD"E"AD !NDTHEOPPOSITESCENARIOISBADASWELLIFSOMEONE UPDATESTHEDATABASE THEBEANNEEDSTOKNOW/THERWISE THEBEANISOUTTHEREINTHE%*"APP REPRESENTINGTHE ENTITYINTHEDATABASE BUTTHEBEANISNTATRUEREmECTION OFTHEENTITYSSTATE)NOTHERWORDS THEBEANISSTALE 7HICHMEANS PERHAPS USELESS



&KDSWHU

EHDQFXUUHQWO\ SOD\LQJ

+(//2([FXVHPH ,·PJODG\RX·UHDOOKDYLQJD QLFHFKDWDERXWLWEXWGRQ·W\RX WKLQNWKHGDWDEDVHPLJKWOLNH WRNQRZDERXWWKDWDGGUHVV FKDQJH""

""

'%

HQWLW\EHDQV\QFKURQL]DWLRQ

2KQR 7KHHQWLW\EHDQDQGWKHHQWLW\LW UHSUHVHQWVKDYHGLIIHUHQWGDWD )LUVW&KULV /DVW0DUWLQ .H\ $GGUHVV&ORFNVW 3KRQH

Someone changed the bean state, but not the databa se !

)LUVW

/DVW

.H\

$GGUHVV

3KRQH

&KULV )UDQ %HOD

0DUWLQ +HDO\ )OHFN

  

)RRVW %DUUG 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\

3RO\

0RUSKLVP



'HZH\

&KHDWHP



&RQWDLQHUORDGVWKHEHDQ ZLWKWKHHQWLW\VWDWHIURPWKH GDWDEDVH1RZQRERG\FDQ 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


TIMETOGOTOTHEDATABASEv /NTHEOTHERHAND IFTHE#ONTAINERWRITESTHEDATABASECODE YOUSAVEYOURSELFALOTOFCODINGTIMEANDEFFORT ANDYOULL ALMOSTALWAYSGETBETTERPERFORMANCE



&KDSWHU

&RQWDLQHU0DQDJHG 3HUVLVWHQFH &03 PHDQVWKH &RQWDLQHUWDNHVFDUHRIDOO WKHGDWDEDVHDFFHVVFRGHIRU V\QFKURQL]DWLRQLQFOXGLQJ DGGLQJDQGGHOHWLQJHQWLWLHV UHFRUGVURZVLQWKH GDWDEDVH  %HDQ0DQDJHG3HUVLVWHQFH %03 PHDQV<28ZULWHWKH GDWDEDVHDFFHVVFRGH WKH -'%&VWDWHPHQWV IRUZKHQ WKH&RQWDLQHUWHOOV\RXLWV WLPHWRJRWRWKHGDWDEDVH ,Q(-%\RXVKRXOG XVH&03,WVDYHV\RXD ORWRIZRUNDQGYLUWXDOO\ DOZD\VJLYHV\RXEHWWHU SHUIRUPDQFH

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 RWKHUPHDQVWRJHWWRWKHGDWDEDVH WKH\·OOVHHWKHFXUUHQWVWDWH RIWKHHQWLW\7KH&RQWDLQHUPDNHVWKHGHFLVLRQVRQKRZWRNHHS WKHEHDQDQGWKHUHDOHQWLW\V\QFKURQL]HGEDVHGRQWKHVWDWHRI WUDQVDFWLRQV 0RUHRQWKDWODWHU 

ƒ 7KH%HDQ3URYLGHUZULWHV(-%4/WRWHOOWKH&RQWDLQHUKRZWRGR

'%

7KH&RQWDLQHUJRHVWRWKHGDWDEDVH ZKHQLWQHHGVWRLQVHUWDQHZHQWLW\ GHOHWHDQGHQWLW\XSGDWHWKHGDWDEDVH ZLWKQHZHQWLW\VWDWH LHRQHRUPRUH FROXPQVLQWKHHQWLW\URZKDYHFKDQJHG WKURXJKWKHEHDQ 

VHOHFWV(-%4/LVOLNHDVXEVHWRI64/EXWZLWKVRPH22IHDWXUHV (-%4/KHOSVEULGJHWKH22ZRUOGRI\RXUEHDQWRWKHUHODWLRQDOZRUOG RI\RXUUHDOHQWLW\

ƒ 8VLQJLQIRUPDWLRQLQWKHGHSOR\PHQWGHVFULSWRUWKH&RQWDLQHUZULWHV WKHDFWXDOLPSOHPHQWDWLRQRIWKH&03EHDQLQFOXGLQJLPSOHPHQWLQJ WKHILQGHUDQGVHOHFWPHWKRGVDQGDOORIWKHGDWDEDVHDFFHVVFRGH ,QRWKHUZRUGVLI\RX·UHD%HDQ3URYLGHUZULWLQJD&03EHDQ\RXGR QRWORRNXSDUHVRXUFHFRQQHFWLRQIDFWRU\IRUWKH'DWD6RXUFHJHW DQ64/&RQQHFWLRQRUZULWHDQ\-'%&FRGH1RWRQO\LVWKHGDWD DFFHVVFRGHWDNHQFDUHRIE\WKH&RQWDLQHUEXW\RXFDQWUXVWWKDWWKH &RQWDLQHUNQRZVH[DFWO\ZKHQWRJRWRWKHGDWDEDVH

%HDQPDQDJHGSHUVLVWHQFH %03

%03

'%

ƒ %HDQ3URYLGHUZULWHVWKHGDWDEDVHDFFHVVFRGHLQFOXGLQJORRNLQJXS D'DWD6RXUFHJHWWLQJD&RQQHFWLRQDQGVHQGLQJ-'%&VWDWHPHQWV WRWKHGDWDEDVH,W·VVWLOOEHWWHUWKDQLI\RXGLGQ·WXVHHQWLW\EHDQVDW DOOEHFDXVHWKH&RQWDLQHUZLOODWOHDVWWHOOD%03EHDQZKHQWRJR WRWKHGDWDEDVHVRZLWK%03\RXGRQ·WKDYHWRSXWLQORJLFWRNHHS WKHEHDQDQGWKHGDWDEDVHLQV\QF:KHQWKH&RQWDLQHUWHOOV\RXWR XSGDWHWKHGDWDEDVH\RXMXVWGRLW

7KH&RQWDLQHULQYRNHVDFRQWDLQHUFDOO EDFNRQWKHEHDQZKHQWKHEHDQQHHGV WRGRVRPHWKLQJZLWKWKHGDWDEDVHDQG WKHEHDQFRGHGRHVWKHDFWXDO-'%& ZRUN

\RXDUHKHUH



HQWLW\EHDQV\QFKURQL]DWLRQ

WKHUH DUH QR

'XPE 4XHVWLRQV

Q:

$OESNTTHE#ONTAINERSTILLHAVE TOGIVEYOUTHEDATABASE#ONNECTION )SNTTHATTHEWHOLEPOINTOFLOOKINGUP A$ATA3OURCEUSINGRESOURCEFACTORY REFERENCES)FTHATSTRUE THENHOWCAN YOUDOBEAN MANAGEDPERSISTENCE /RIS"-0AWAYTOBYPASSALLTHAT IN WHICHCASEYOUDBEBYPASSINGTHE #ONTAINERSERVICESFORCONNECTIONPOOL INGAND

A:

2ELAX2EALLY7ITH"-0YOU STILLGETYOURDATABASECONNECTION FROMTHE#ONTAINER BYLOOKINGUP AS YOUSAID ARESOURCEFACTORYREFERENCE JAVAXSQL$ATA3OURCE'EE YOUMUST HAVEBEENREADINGAHEADTOTHECHAPTER ONTHE%*"ENVIRONMENT "ECAUSEYOURE RIGHT YOUNEEDTOGETACONNECTION FROMACONNECTIONPOOLMANAGEDBYTHE #ONTAINER"UTONCEYOUGETTHECONNEC TION FORA"-0BEAN YOUREONYOUROWN FORSENDINGITSTATEMENTSTODO).3%24 $%,%4% 50$!4% 3%,%#4OPERATIONS !NDWHILEWEREHERE REMEMBERTHATDA TABASEACCESSISNOTJUSTFORENTITYBEANS !.9BEANCANGOTOTHEDATABASEASPART OFITSBUSINESSLOGIC3ESSIONBEANSAND MESSAGE DRIVENBEANSMIGHTFINDPLENTY OFREASONSTOLOOKSOMETHINGUPORSTORE SOMETHINGINADATABASE4HEDIFFERENCE BETWEENENTITYBEANSANDTHEOTHERTWO BEANTYPESISTHATENTITYBEANSEXISTONLY BECAUSETHERESSOMETHINGINADATA BASE3OMETHINGTHEBEANREPRESENTS 3OENTITYBEANSARE BYDEFINITION TIEDTO SOMETHINGINAPERSISTENTSTORE -ESSAGE DRIVENANDSESSIONBEANSDO NOTREPRESENTSOMETHINGINADATABASE ALTHOUGHTHEYMAYNEEDTOUSESOME THINGINADATABASEASPARTOFTHEIRBUSI NESSLOGIC



&KDSWHU

Q:

)TSEEMSLIKEPERFORMANCEWOULD BEBETTERˆNOTWORSEˆWITH"-0 $OESNT"-0GIVEYOUMORECONTROL

A:

9OUHAVEMOREFLEXIBILITYWITH "-0 BUTNOTNECESSARILYMORECONTROL !NDACCORDINGTONEARLYALLBENCHMARKS AGAINSTTHEMAJOR*%%SERVERS NOT BETTERPERFORMANCE4HATMIGHTSOUND COUNTERINTUITIVE BUTREMEMBERTHATTHE #ONTAINERCANDOTHINGSTHATYOUCANT DOFROMWITHINBEANCODE4HINGSLIKE GANGINGMULTIPLECALLSTOTHEDATABASE USINGNATIVECODETOGETINANOUTOF THEDATABASEFASTERTHANYOUCOULD LAZY LOADING DIRTYDETECTIONNEITHEROFWHICH AREGUARANTEEDBYTHESPEC OFCOURSE ANDDOZENSOFOTHERTRICKS 7EKNOWITGOESAGAINSTTHE CONVENTIONALWISDOMTHATSAYSIFYOU WANTITDONERIGHT DOITYOURSELF BUT KEEPINMINDTHATTHESERVERVENDORSARE COMPETINGFORYOURBUSINESS4HEYKNOW PERFORMANCEMATTERSTOYOU4HE SPECADDEDˆANDCHANGEDˆALOTOFTHE #-0SPECIFICATIONFORTHESOLEPURPOSE OFGIVINGTHEVENDORSMOREROOMFOR OPTIMIZING#-0

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 ALTHOUGHMANYVENDORSWEREABLETOOVERCOMEMANYOFTHEPROBLEMS WITH#-0 THESOLUTIONSWEREOUTSIDETHESPECIlCATION SOYOURCHOICE ASBEANDEVELOPERWASTOUSESTANDARD#-0BUTKEEPYOURPORTABILITY ORSTEPOUTSIDETHESPECREDUCINGYOURPORTABILITY BUTGETBETTER PERFORMANCEANDFEATURES 7HENTHE%*"SPECWASCREATED THETEAMSPENTAGREATDEALOFTIME ANDEFFORTTALKINGTOBOTHEND USERCUSTOMERSBEANDEVELOPERS AND CONTAINERVENDORS ALLOFWHOMWEREVERYHAPPYTODESCRIBETHEPROBLEMS WITH#-0)NGRAPHICDETAIL COMPLETEWITHSUGGESTIONSFOR3UNON h)LL TELLYOUWHATYOUCAN$/WITHYOUR#-0BEANSPECv 4HE%*"SPECTEAMLISTENED!NDDESIGNED!NDLISTENED!NDDESIGNED !NDINTHEEND THEYCAMEUPWITHSOMETHINGAWFUL!SOLUTIONTHATWAS ANEQUAL OPPORTUNITYPISSER OFFER6ENDORSHATEDIT$EVELOPERSHATEDIT 0EOPLELIKEUSWHOHADTOEXPLAINTHENEWTECHNOLOGYTOCUSTOMERSREALLY HATEDIT3OWITHTHEDEADLINEUPONTHEM THETEAMSCRAPPEDMUCHOF WHATTHEYDDONEWITH#-0ANDCAMEUPWITHAMUCHCLEANERSOLUTION 7ITHTHENEW%*"SPEC #-0ISLIGHTYEARSAHEADOFWHEREITWASIN%*" ORINTHElRST TERRIBLEVERSIONOFTHEPRE RELEASE%*"SPEC !ND NOW MOSTDEVELOPERSUSINGENTITYBEANSWILLUSE#-0)NFACT THEEXAM DOESNTCOVER"-0ATALL SINCEITSTHEREMOREFORLEGACYSUPPORTORVERY SPECIALCASESMORETHANANYTHINGELSE "ECAUSEOFTHEHEAVYSHIFTTO#-0FORREASONSWELLEXPLORE WE WONTCOVER"-0INTHISBOOK3OFROMTHISPOINTFORWARD WEREGOING TOASSUMETHATWERETALKINGABOUT#-04HEDIFFERENCESBETWEEN THELIFECYCLE ANDTHEDEVELOPERSRESPONSIBILITY FOR#-0VS"-0ARE DRAMATIC SODONTFORGETTHATEVERYTHINGWETALKABOUTNOWWILLBEFROM THEPERSPECTIVEOFA#-0BEAN EVENIFWEDONTEXPLICITLYSAYTHATWERE REFERRINGTO#-0

7KHH[DP GRHVQ·WFRYHU WKHKLVWRU\JRVVLSRUVFDQGDOV RIWKH(-%VSHFLILFDWLRQ $OWKRXJKLWZRXOGKDYHPDGH WKHERRNPXFKVSLFLHULILWGLG $KZHOOZH¶OOMXVWKDYHWRPDNH GRZLWKWKHWHFKQLFDOFRQWHQW 6WLOOZHWKLQNWKHZD\D VSHF DQ\VSHF HYROYHVLV LQWHUHVWLQJ6XQZRUNVKDUG WRZDONWKH¿QHOLQHEHWZHHQ KDYLQJDPHDQLQJIXOVSHF ZLWKVWURQJJXDUDQWHHVIRU WKHSURJUDPPHUDQGRQH WKDW¶VYDJXHHQRXJKRQ LPSOHPHQWDWLRQGHWDLOVWR OHWWKHYHQGRUVFRPSHWH RQWKHSHUIRUPDQFHRIWKHLU LPSOHPHQWDWLRQV 5HJDUGOHVVWKHUH¶VQRWKLQJRQ WKHH[DPDERXWWKHGLIIHUHQW YHUVLRQVRIWKHVSHF$VORQJDV \RXNQRZZKDW¶VLQWKHVSHF \RX¶UHVDIH+RZHYHULQWKH UHDOZRUOG\RX¶UHOLNHO\WRFRPH DFURVV(-%DSSOLFDWLRQV VREHSUHSDUHGWROHDUQWKH GLIIHUHQFHV(VSHFLDOO\LI\RX¶UH WKHOXFN\RQHLQFKDUJHRI PLJUDWLQJWKHDSSWRD FRPSOLDQWVHUYHU

\RXDUHKHUH



HQWLW\EHDQV

+RZDEHDQDFWRUEHFRPHVDEHDQHQWLW\ 6FHQDULRFOLHQWZDQWVWRJHWWKHDGGUHVVRID VSHFL¿F&03&XVWRPHUHQWLW\SULPDU\NH\

:KHUHWKH #LV QXPEHU"7KHFOLHQWLVFDOOLQJ DQG,GRQ·WVHHDQ\ERG\ SOD\LQJQXPEHU



JHW$GGUHVV

VV GUH G $ JHW

 VWXE 

FRQWH[W

(-% REMHFW 

EHDQ

 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\ PRWLYDWLRQ"

FRQWH[W

(-% REMHFW 

EHDQ

 HME$FWLYDWH

%HDQ3RRO

G /RD HME 

'%

  FW O VH H

 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 6WDWHIXOVHVVLRQEHDQ

(QWLW\EHDQ

alive on

6WDWHOHVVVHVVLRQEHDQ

the hea

p ===

===

ap...

(QWLW\%HDQ 3RRO

4&DOOHGZKHQWKHEHDQKDV ILQLVKHGDEXVLQHVVPHWKRG RWKHU WKDQUHPRYH DQGLVDERXW WRJREDFNWRWKHSRRO,QWKH SDVVLYDWHGVWDWHWKHEHDQKDVQR LGHQWLW\³LW·VQRWUHSUHVHQWLQJDQ\ HQWLW\IURPWKHGDWDEDVH

48VHLWWRUHOHDVHUHVRXUFHVWKDW \RXGRQ·WZDQWWRZDVWHZKLOH WKHEHDQLVVLWWLQJLQWKHSRRO QRWUXQQLQJDEXVLQHVVPHWKRG 7\SLFDOO\WKHPHWKRGLVHPSW\

47KHEHDQLV127SDVVLYDWHG LQWKHVHVVLRQEHDQVHQVH,Q RWKHUZRUGVWKHEHDQLVQRW VHULDOL]HGRUVDYHGVRWKHUHLV 12UHTXLUHPHQWWKDW\RXQXOORXW UHIHUHQFHVWRQRQ6HULDOL]DEOH REMHFWV

47KH&RQWDLQHUFDOOVWKHEHDQ·V

he he e on tized v i l a NOT bly serial possi

4&DOOHGZKHQWKH&RQWDLQHU GHFLGHVWRFRQVHUYHUHVRXUFHV EHWZHHQEXVLQHVVPHWKRG LQYRFDWLRQVIURPWKHFOLHQW

48VHLWWRUHOHDVHUHVRXUFHVDQG

doesnÕt apply... st beans are never paatsseless ivated

4'RHVQ·WDSSO\6WDWHOHVVEHDQV KDYHDSRROEXWDFWLYDWLRQDQG SDVVLYDWLRQGRQ·WSOD\DQ\SDUW LQLW5HPHPEHUVWDWHOHVV VHVVLRQEHDQVZLOO1(9(5JHWDQ HME$FWLYDWH RUHME3DVVLYDWH FDOO

WRSUHSDUHWKHEHDQ·VVWDWHIRU ZKDWPLJKWEHVHULDOL]DWLRQ QXOO RXWQRQ6HULDOL]DEOHUHIHUHQFHV HWF 

47KHEHDQLV´SXWWRVOHHSµDQGLV QRORQJHUWDNLQJXSVSDFHRQWKH KHDS

47KH&RQWDLQHUFDOOVWKHEHDQ·V HME$FWLYDWH PHWKRGZKHQD FOLHQWFDOOVDEXVLQHVVPHWKRG RQWKH(-%REMHFW7KHEHDQ UXQVHME$FWLYDWH EHIRUHLW UXQVWKHEXVLQHVVPHWKRGWKDW WULJJHUHGWKHDFWLYDWLRQ

HME$FWLYDWH PHWKRGZKHQD EHDQLVQHHGHGWRVHUYLFHD EXVLQHVVPHWKRGIURPDFOLHQW 7KHEHDQUXQVHME$FWLYDWH  EHIRUHLWUXQVWKHEXVLQHVV PHWKRGWKDWWULJJHUHGWKH DFWLYDWLRQ 7KLVPHWKRGLVXVXDOO\ HPSW\DVZHOO  \RXDUHKHUH



HQWLW\EHDQFDOOEDFNV


LQWHUIDFH!! 6HVVLRQ%HDQ

LQWHUIDFH!! (QWLW\%HDQ

VHW6HVVLRQ&RQWH[W 6HVVLRQ&RQWH[WVF

VHW (QWLW\&RQWH[W (QWLW\&RQWH[WHF

HME3DVVLYDWH

HME3DVVLYDWH

HME$FWLYDWH

HME$FWLYDWH

HME5HPRYH

HME5HPRYH

EntityCont of SessionCoext instead ntext

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  &RQWDLQHUJLYHVWKHEHDQDUHIHUHQFHWRLWVFRQWH[W

VHW(QWLW\&RQWH[W (QWLW\&RQWH[WHF  &RQWDLQHUJLYHVWKHEHDQDUHIHUHQFHWRLWVFRQWH[W

HME3DVVLYDWH  &DOOHGRQDVWDWHIXOVHVVLRQEHDQZKHQWKHEHDQ

HME3DVVLYDWH  &DOOHGZKHQWKHEHDQLVDERXWWRUHWXUQWRWKH





LVDERXWWREHVHULDOL]HG RUVRPHWKLQJOLNHLW 

SRROIROORZLQJDWUDQVDFWLRQ

HME$FWLYDWH  &DOOHGRQDVWDWHIXOVHVVLRQEHDQZKHQWKHEHDQ

HME$FWLYDWH  &DOOHGZKHQWKHEHDQLVWDNHQRXWRIWKHSRROWR

 



LVUHDFWLYDWHGIROORZLQJSDVVLYDWLRQ PLJKWEH GHVHULDOL]DWLRQ 

HME5HPRYH

HME5HPRYH   

VHUYLFHDFOLHQW·VEXVLQHVVPHWKRGFDOO

&DOOHGRQDVWDWHIXOEHDQZKHQWKHFOLHQWFDOOV UHPRYH &DOOHGRQDVWDWHOHVVEHDQZKHQWKH &RQWDLQHUZDQWVWRUHGXFHWKHVL]HRIWKHSRRO

nBean and io s s e S h t o t are in bter method behaves a h t s d o h t ivate, t set ur me Of the feoan, only the contexbean, activate, passsession bean EntityB way ! In an entity different from a the same ve are completely and remo

 

&DOOHGZKHQWKHFOLHQWFDOOVUHPRYH DQGZDQWV WRGHOHWHWKLVHQWLW\IURPWKHGDWDEDVH

XQVHW(QWLW\&RQWH[W  &DOOHGZKHQWKH&RQWDLQHUZDQWVWRUHGXFHWKH 

VL]HRIWKHSRRO

HME/RDG  &DOOHGZKHQWKHEHDQKDVEHHQUHIUHVKHGZLWK 

GDWDIURPWKHXQGHUO\LQJSHUVLVWHQWVWRUH

E6WRUH (QWLW\&RQWH[WDGGV JHW3ULPDU\.H\

&DOOHGZKHQWKH&RQWDLQHULVDERXWWRXSGDWHWKH GDWDEDVHWRUHIOHFWWKHVWDWHRIWKHEHDQ

RQWH[W (QWLW\&RQWH[WH[WHQG(-%& %RWK6HVVLRQ&RQWH[WDQG  H[W RQW Q& VVLR HPHWKRGWKDW6H (QWLW\&RQWH[WKDVRQO\RQ HUH¶V HWK DXV EHF N\ WULF LV .H\ 7KLV GRHVQ¶WKDYH²JHW3ULPDU\ MHFW O2E RFD KH(-%2EMHFWDQG(-%/ DJHW3ULPDU\.H\ LQERWKW Q EHD LW\ HQW QG QD %27+VHVVLR LQWHUIDFHVWKDW¶VH[SRVHGWR Q DQFOLHQWZLOOJHWDQH[FHSWLR EH LRQ HVV DV XJK FOLHQWV DOWKR  LV H\ U\. H[WYHUVLRQRIJHW3ULPD IRUFDOOLQJLW %XWWKHFRQW QV H[SRVHGRQO\WRHQWLW\EHD \RXDUHKHUH



HQWLW\EHDQFDOOEDFNV

*]\_IQ\\PMZM¼[UWZM -V\Q\aJMIV[PI^MVM_ PWUMKWV\IQVMZKITTJIKS[\WW 




(QWLW\%HDQLQWHUIDFH MDYD[HME(QWLW\%HDQ

LQWHUIDFH!! &XVWRPHU+RPH FUHDWH 6WULQJODVW6WULQJILUVW6WULQJDGGU

&XVWRPHU%HDQ HME&UHDWH 6WULQJODVW6WULQJILUVW6WULQJDGGU

ILQG%\3ULPDU\.H\ 6WULQJNH\

HME3RVW&UHDWH 6WULQJODVW6WULQJILUVW6WULQJDGGU

ILQG%\&LW\ 6WULQJFLW\

HME)LQG%\3ULPDU\.H\ 6WULQJNH\

XSGDWH$OO 6WULQJFPG

HME)LQG%\&LW\ 6WULQJFLW\ HME+RPH8SGDWH$OO 6WULQJFPG

ery create() in You must match evt one but TWO the home with noate(), like with methods: ejbCre d a new thingÑ session beans, an ejbPostCreate(). ery home You must match evwith an d business metho ame>. ejbHome
LQWHUIDFH!! (QWLW\%HDQ VHW(QWLW\&RQWH[W (QWLW\&RQWH[WHF HME$FWLYDWH

VHW(QWLW\&RQWH[W (QWLW\&RQWH[WHF  HME$FWLYDWH HME3DVVLYDWH

HME3DVVLYDWH HME5HPRYH XQVHW(QWLW\&RQWH[W

HME5HPRYH

HME/RDG

XQVHW(QWLW\&RQWH[W HME/RDG HME6WRUH

HME6WRUH

EXVLQHVVPHWKRGVIURPWKH FRPSRQHQWLQWHUIDFH

you must always implement th ese SEVEN container callback me in your bean class. EntityBeanthods adds three new methods at SessionBean interface didth 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 LPSOHPHQWVP\ÀQGHUVP\JHWWHUV P\VHWWHUVP\VHOHFWPHWKRGVDQGLWZULWHV DOOWKHGDWDEDVHDFFHVVFRGHIRUWKHFUHDWH UHPRYHORDGDQGVWRUHPHWKRGVMXVWWKLQN KRZPDQ\ÁDVKPREV,FDQDWWHQGQRZ WKDW,GRQ·WKDYHWRZULWHDOOWKLVEHDQ FRGH

2KVXUH\RXJHWWRJRKDYHIXQZKLOH ,  GRDOOWKHUHDOZRUN+RZFRPHZLWKHDFKUHY RIWKH(-%VSHF , HQGXSGRLQJPRUHZRUN DQG\RXHQGXSGRLQJOHVV"7KDWEORZV:LOO\RX DWOHDVWWDNHVRPHSLFWXUHVRIWKHÁDVKPREQH[W ZHHNDW%DUQHVDQG1REOH"$WH[DFWO\30HYHU\RQH VKRZVXS$WHYHU\RQHUXQVLQDQGVWDUWVEUHDWKLQJ 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 DPDWFKLQJHME&UHDWH DQGHME3RVW&UHDWH PHWKRG LQWKHEHDQFODVV

ƒ )RUHDFKEXVLQHVVPHWKRGLQWKHKRPH\RXPXVW KDYHDPDWFKLQJHME+RPHPHWKRG!LQWKHEHDQ FODVV

LQWHUIDFH!! &XVWRPHU+RPH FUHDWH 6WULQJODVW6WULQJILUVW6WULQJDGGUHVV ILQG%\3ULPDU\.H\ 6WULQJNH\ ILQG%\&LW\ 6WULQJFLW\ XSGDWH$OO 6WULQJFPG

ƒ )RU&03EHDQV\RXZLOO127ZULWHPDWFKLQJILQGHU PHWKRGV7KH&RQWDLQHUZLOOZULWHWKHPIRU\RXEDVHG RQLQIR\RXSXWLQWKHGHSOR\PHQWGHVFULSWRU :H·OOJR RYHUDOOWKDWLQWKHQH[WFKDSWHU

 7KLQJVIURPWKHFRPSRQHQWLQWHUIDFH

LQWHUIDFH!! &XVWRPHU

ƒ )RUHDFKPHWKRGLQWKHFRPSRQHQWLQWHUIDFH\RX PXVWKDYHDPDWFKLQJFRQFUHWHLPSOHPHQWDWLRQLQWKH EHDQFODVV

JHW)LUVW1DPH VHW)LUVW1DPH 6WULQJQDPH JHW/DVW1DPH VHW/DVW1DPH 6WULQJQDPH JHW$GGUHVV VHW$GGUHVV 6WULQJDGGU

 7KLQJVIURPWKH(QWLW\%HDQLQWHUIDFH

LQWHUIDFH!! (QWLW\%HDQ

ƒ
VHW(QWLW\&RQWH[W (QWLW\&RQWH[WHF HME$FWLYDWH 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 Last, PK (primary ker First, y), and Address

)LUVW-RKQ /DVW0D\HU 3. $GGUHVV'HUODQG6W

)LUVW

/DVW

3.

$GGUHVV

-RKQ )UDQ %HOD

0D\HU +HDO\ )OHFN

  

'HUODQG6W %DU6W 3LFN/DQH

\RXDUHKHUH



YLUWXDO¿HOGV

>QZ\]ITNQMTL[IZM67<QV[\IVKM^IZQIJTM[ SXEOLFDEVWUDFWFODVV&XVWRPHU%HDQ&03LPSOHPHQWV(QWLW\%HDQ^ SULYDWH(QWLW\&RQWH[WFRQWH[W

note: the only inst

ance variable is for

SXEOLF6WULQJHME&UHDWH 6WULQJODVW6WULQJ¿UVW6WULQJDGGU ^ WKLVVHW/DVW ODVW  WKLVVHW)LUVW ¿UVW  WKLVVHW3. PDNH3.  WKLVVHW$GGUHVV DGGU  UHWXUQQXOO `

SXEOLFDEVWUDFW6WULQJJHW/DVW  SXEOLFDEVWUDFWYRLGVHW/DVW 6WULQJODVW  SXEOLFDEVWUDFW6WULQJJHW)LUVW  SXEOLFDEVWUDFWYRLGVHW)LUVW 6WULQJ¿UVW  SXEOLFDEVWUDFW6WULQJJHW&XVW$GGUHVV  SXEOLFDEVWUDFWYRLGVHW&XVW$GGUHVV 6WULQJDGGU  SXEOLFDEVWUDFW6WULQJJHW3.  SXEOLFDEVWUDFWYRLGVHW3. 6WULQJSN  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  ` PRUHPHWKRGVIURP(QWLW\%HDQ DQGWKHKRPHLQWHUIDFH `



&KDSWHU

the EntityContext!

. ual persistent Þelds These are the virt than abstract ore TheyÕre nothing m that map to the s er getters and sett base, representing columns in the data t state. The en the entityÕs persist with the entity ! ved things that get sa

These are methods fr om interface, that are ex the component posed to the client. We know what youÕre thinking... why do you ha a SECOND set of ge tters and setters, wh ve en you can just expose th e abstract ones in your component interface? Well, you COULD expo se good idea. Think abou them, but itÕs not a t it.... hereÕs a hint: imagine that versions had more code the non-abstract than what you see here . bigger hint: imagine th at methods had VALIDAT the non-abstract ION code... ridiculously big hint: th ink about encapsulation .

HQWLW\EHDQV\QFKURQL]DWLRQ

6KDUSHQ \RXU SHQFLO 8VLQJWKHLQWHUIDFHVEHORZZULWHDOHJDOEHDQFODVV
LQWHUIDFH!! (QWLW\%HDQ

LQWHUIDFH!! 3URGXFW

LQWHUIDFH!! 3URGXFW+RPH 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 ZRUU\DERXWLPSRUWVWDWHPHQWV

HME6WRUH

\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 ^` SXEOLFYRLGHME/RDG ^` SXEOLFYRLGHME6WRUH ^` SXEOLFYRLGHME$FWLYDWH ^` SXEOLFYRLGHME3DVVLYDWH ^` SXEOLFYRLGHME5HPRYH ^` SULYDWH6WULQJPDNH3. ^ LQWUDQG  LQW  0DWKUDQGRP    UHWXUQ³´UDQG ` `

imary ldÕs stupidesthpr or w e h t always is is at h remember: t r. (Well, we suppose one t etty lame, key generatoe same number would be prprimary keys returned th ldnÕt work anyway, since JVM will but that wouique or... guess what... the But as we MUST be unce DuplicateKeyException. ther use a give you a ni in the Real World, youÕd ei, or a REAL were saying, d arg as the primary key sort, or client-suppliegeneration engine of some abase autoprimary 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

GRHVQRWH[LVW

FRQVWUXFWRU VHW(QWLW\&RQWH[W

HME6WRUH

HME)LQGPHWKRG!

SRROHG

HME6HOHFWPHWKRG!  FRYHUHG LQWKHQH[WFKDSWHU HME$FWLYDWH

HME&UHDWHPHWKRG! HME3RVW&UHDWHPHWKRG!

XQVHW(QWLW\&RQWH[W

HME3DVVLYDWH

HME+RPHPHWKRG! KRPHEXVLQHVVPHWKRGV

LQVWDQFHWKURZVV\VWHPH[FHSWLRQ XQFKHFNHGXQFDXJKW

HME5HPRYH

PHWKRGUHDG\

EXVLQHVVPHWKRG FRPSRQHQWLQWHUIDFH

HME/RDG

HME6HOHFWPHWKRG! FDOOHGIURPDEXVLQHVVPHWKRG

/HW·VVHHKHUHE\P\ FDOFXODWLRQVLWVKRXOGWDNHPH DSSUR[LPDWHO\\HDUVWRPHPRUL]H WKLVOLIHF\FOHGLDJUDPVRWKDWZRXOG PHDQ,FDQVFKHGXOHWKHH[DPIRU VRPHWLPHLQWKH\HDU

e whole when you see th ly on d ba s ok of lo d It 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

0RYLQJIURPGRHVQRWH[LVW WRSRROHG

GRHVQRWH[LVW

FRQVWUXFWRU VHW(QWLW\&RQWH[W

HME+RPHPHWKRG! KRPHEXVLQHVVPHWKRGV

VHW(QWLW\&RQWH[W 

HME&UHDWHPHWKRG! HME3RVW&UHDWHPHWKRG!

QRWHQRFUHDWH  HME6WRUH

SRROHG

HME$FWLYDWH

FRQVWUXFWRU

PHWKRGUHDG\

EXVLQHVVPHWKRG FRPSRQHQWLQWHUIDFH

0RYLQJIURPSRROHGWR PHWKRGUHDG\ HME&UHDWH HME3RVW&UHDWH

25

HME)LQGPHWKRG! HME6HOHFWPHWKRG! 

HME5HPRYH

HME/RDG

HME6HOHFWPHWKRG! FDOOHGIURPDEXVLQHVVPHWKRG

GRHVQRWH[LVW

FRQVWUXFWRU VHW(QWLW\&RQWH[W

LQVWDQFHWKURZVV\VWHPH[FHSWLRQ XQFKHFNHGXQFDXJKW

XQVHW(QWLW\&RQWH[W

HME3DVVLYDWH

orize this all DonÕt try to eÕmllemspend most of right now ! W is chapter looking the rest of th at this stuff.

LQVWDQFHWKURZVV\VWHPH[FHSWLRQ XQFKHFNHGXQFDXJKW

XQVHW(QWLW\&RQWH[W

HME$FWLYDWH

HME3DVVLYDWH

HME&UHDWHPHWKRG! HME3RVW&UHDWHPHWKRG!

HME6WRUH

SRROHG

HME$FWLYDWH

0RYLQJIURPPHWKRGUHDG\ WRSRROHG

HME+RPHPHWKRG! KRPHEXVLQHVVPHWKRGV

HME3DVVLYDWH

7KH&RQWDLQHUGRHV127FDOO HME$FWLYDWH LILWFDOOVHME&UHDWH

PHWKRGUHDG\

HME)LQGPHWKRG! HME6HOHFWPHWKRG! 

HME5HPRYH

HME/RDG

25 HME5HPRYH 1HYHUERWK$EHDQGRLQJDQ HME5HPRYH ZLOO127EHSDVVLYDWHG EHIRUHJRLQJEDFNWRWKHSRRO

EXVLQHVVPHWKRG FRPSRQHQWLQWHUIDFH

HME6HOHFWPHWKRG! FDOOHGIURPDEXVLQHVVPHWKRG

\RXDUHKHUH



HQWLW\VWDWHWUDQVLWLRQV

(QWLW\EHDQLQVWDQFHWUDQVLWLRQV

GRHVQRWH[LVW

FRQVWUXFWRU VHW(QWLW\&RQWH[W

LQVWDQFHWKURZVV\VWHPH[FHSWLRQ XQFKHFNHGXQFDXJKW

XQVHW(QWLW\&RQWH[W

0RYLQJWRGRHVQRWH[LVW

LQVWDQFHWKURZVDV\VWHPH[FHSWLRQ

HME&UHDWHPHWKRG! HME3RVW&UHDWHPHWKRG!

HME6WRUH

HME$FWLYDWH

25

SRROHG

HME3DVVLYDWH

XQVHW(QWLW\&RQWH[W

HME+RPHPHWKRG! KRPHEXVLQHVVPHWKRGV

PHWKRGUHDG\

EXVLQHVVPHWKRG FRPSRQHQWLQWHUIDFH

HME)LQGPHWKRG! HME6HOHFWPHWKRG! 

HME5HPRYH

HME/RDG

HME6HOHFWPHWKRG! FDOOHGIURPDEXVLQHVVPHWKRG

WKHUH DUH QR

'XPE 4XHVWLRQV

Q:

(OWCOMETHEREISALABELFOR EJB3ELECTMETHODWHATEVER4(!4IS INBOTHTHE POOLEDSTATEANDTHEMETHOD READYSTATE(OWCAN YOURUNTHOSEMETHODSINBOTH

A:

7ELLGETTOEJB3ELECTMETHODSABITLATER BUT FORNOW THINKOFTHEMASPRIVATEMETHODSINTHEBEAN INOTHERWORDS CALLEDNOTBYTHECLIENT BUTONLY BYTHEBEANSOWNMETHODS THATDOSELECTSONTHE DATABASE4HEYREUSEDONLYFOR#-0BEANS ANDCAN BEAHUGECONVENIENCE SINCETHEYREIMPLEMENTEDFOR YOUBYTHE#ONTAINER4HEREASONTHEYREINBOTH



&KDSWHU

PLACESISBECAUSEITDEPENDSONWHICHINTERFACETHE CLIENTUSESTOCALLTHEMETHODTHATINTURNCALLSASELECT METHOD3O IFACLIENTCALLSAHOMEBUSINESSMETHOD ANDTHEHOMEMETHODCALLSANEJB3ELECTMETHOD THEBEANSTAYSINTHEPOOLTORUNTHEMETHOD"UT IFTHESELECTMETHODISCALLEDFROMAMETHODINTHE BEANSCOMPONENTINTERFACE THATMEANSTHEMETHOD ISRUNNINGONASPECIFICENTITY SAY &RANK&OOF SO THEBEANISINTHEMETHOD READYSTATE

HQWLW\EHDQV\QFKURQL]DWLRQ

WKHUH DUH QR

'XPE 4XHVWLRQV

Q:

)TLOOKSLIKETHEREARE47/WAYSTOMOVE TOTHEMETHOD READYSTATEEITHERTHECLIENT CALLSACREATE METHODORTHE#ONTAINERCALLS EJB!CTIVATE 3ODOESTHISMEANTHATYOUCANT COUNTONEJB!CTIVATE BEINGCALLEDEACHTIMEYOU LEAVETHEPOOL

A:

4HATSRIGHT!BEANCANMOVETOTHEMETHOD READYSTATEBY/.,9THOSETWOPATHSCREATIONOR ACTIVATION BUTNEVERBOTHATTHESAMETIME3O IFYOU HAVEADESIGNTHATACQUIRESRESOURCESINEJB!CTIVATE SOTHATTHEYLLALWAYSBEAVAILABLEWHILETHEBEANIS SERVICINGABUSINESSMETHOD YOUBETTERGRABTHEM INEJB#REATE OREJB0OST#REATE ˆYOULLSEETHE DIFFERENCEINAFEWMINUTES  )NTHEREALWORLD ITSMUCHLESSCOMMONIN%*" TOUSEEJB!CTIVATE FORMUCHOFANYTHING7ELLTALK MOREABOUTTHISBOTHINTHISCHAPTERANDTHELAST CHAPTERPATTERNSANDPERFORMANCE BUTTHESHORT VERSIONISTHISITSUSUALLYMOREEFFICIENTTOACQUIRE ANDRELEASESCARCERESOURCESJUSTWITHINTHEBUSINESS METHODSTHATNEEDTHEM4HATWAY YOURENOT HANGINGONTOTHEMPREVENTINGOTHERBEANSFROM HAVINGACCESS WHILEYOURBEANISACTIVEIENOTIN THEPOOL BUTNOTACTIVELYRUNNINGAMETHOD9ES THAT MEANSYOUHAVESOMEADDITIONALOVERHEADINEACH BUSINESSMETHOD ASOPPOSEDTOGRABBINGTHETHING ONCEINEJB!CTIVATE BUTINMANYCASESTHEOVERHEAD OFGRABBINGTHERESOURCEISMINORCOMPAREDTOTHE SCALABILITYCOSTOFHOLDINGRESOURCESWERETHINKING DATABASECONNECTIONSFROMTHEPOOL OPENLONGER THANYOUNEEDTOACCESSTHOSERESOURCES "OTTOMLINE9OULLPROBABLYFINDYOURSELFLEAVING EJB!CTIVATE EMPTY INSOYOUWONTHAVETOWORRY ABOUTMISSINGITWHENYOUCOMEOUTOFTHEPOOLVIA ANEJB#REATE CALL

6KDUSHQ \RXU SHQFLO )RUWKHH[DP\RXKDYHWRNQRZH[DFWO\ ZKLFKFRQWDLQHUFDOOEDFNPHWKRGVDUHLQWKH (QWLW\%HDQLQWHUIDFHVR\RXQHHGWRPHPRUL]H WKHVH7KHWULFN\SDUWLVWKDWVRPHRIWKHP KDYHWKHVDPHQDPHVEXWFRPSOHWHO\GLIIHUHQW EHKDYLRUWKDQWKHLUVHVVLRQEHDQFRXQWHUSDUWVLQ WKH6HVVLRQ%HDQLQWHUIDFH'2127/22.21 7+(23326,7(3$*( 7KHFOLHQWFDOOVWKLVPHWKRGWRWHOOWKH &RQWDLQHUWKDWKH WKHFOLHQW LVGRQHXVLQJWKH EHDQ·V(-%REMHFWUHIHUHQFH BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB

7KLVPHWKRGLVFDOOHGZKHQWKHEHDQJRHV EDFNWRWKHSRRODIWHUDQHQWLW\LVGHOHWHGIURP WKHGDWDEDVH BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB

7KLVPHWKRGLVFDOOHGLPPHGLDWHO\DIWHUWKH EHDQ·VFRQVWUXFWRUUXQV BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB

7KLVPHWKRGLVFDOOHGRQWKHEHDQZKHQWKH 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

GRHVQRWH[LVW

LQVWDQFHWKURZVV\VWHPH[FHSWLRQ XQFKHFNHGXQFDXJKW

FRQVWUXFWRU

SRROHG

HME+RPHPHWKRG! KRPHEXVLQHVVPHWKRGV

HME$FWLYDWH

HME&UHDWHPHWKRG!

HME3DVVLYDWH

HME6HOHFWPHWKRG!  FRYHUHGLQWKHQH[WFKDSWHU

PHWKRGUHDG\

HME6WRUH

HME6HOHFWPHWKRG! FRPSRQHQWLQWHUIDFH

FDOOHGIURPDEXVLQHVVPHWKRG

FOH U\GHWDLORIWKLVOLIHF\


&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

GRHVQRWH[LVW

FRQVWUXFWRU VHW(QWLW\&RQWH[W

SRROHG

Before the client can use a bean for ANYTHING -- creation, Þnders, business methods, etc., the Container has to make a new bean instance for the pool. Bean CONSTRUCTION isnÕt tied to entity bean CREATION. 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

 &RQWDLQHUPDNHVDQHZLQVWDQFHRIWKH

EHDQ



EHDQ REMHFW

QHZ

EHDQFODVV EHDQ·VFRQVWUXFWRUUXQV

%HDQ3RRO

FRQWH[W

 &RQWDLQHUFDOOVVHW(QWLW\&RQWH[W RQWKH EHDQ7KLVLVWKH21/<WLPHLQDEHDQ LQVWDQFH·VOLIHWKDWLWZLOOJHWWKLVFDOO

 &RQWDLQHUSXWVWKHEHDQ ZKLFKQRZKDVD FRQWH[W LQWKHSRRO 1RWLFHFUHDWH ZDVQHYHUFDOOHG$FUHDWH  PHWKRGLVRQO\IRULQVHUWLQJDQHZHQWLW\LQWR WKHGDWDEDVHDQGKDVQRWKLQJWRGRZLWKWKH EHDQLQVWDQFH·VFUHDWLRQ



&KDSWHU

 VH

W

RQWH[

W\& W(QWL

EHDQ



EHDQ

FRQWH[W

EHDQ FRQWH[W

%HDQ3RRO %HDQ3RRO

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\RXU(-%REMHFW ‰ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW ‰ IRUFHDWUDQVDFWLRQWRUROOEDFN &07 G

‰ JHWDUHIHUHQFHWR\RXUKRPH ‰ JHWDUHIHUHQFHWR\RXU(-%REMHFW ‰ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW ‰ IRUFHDWUDQVDFWLRQWRUROOEDFN &07

You ‰ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\

‰ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\

EHHQVHWWRUROOEDFN &07EHDQV

EHHQVHWWRUROOEDFN &07EHDQV

‰ JHWDWUDQVDFWLRQUHIHUHQFHDQGFDOO

‰ JHWDWUDQVDFWLRQUHIHUHQFHDQGFDOO

EHDQV

THIN

o ANY canÕt d

PHWKRGVRQLW %07EHDQV

EHDQV

PHWKRGVRQLW %07EHDQV

$FFHVV

$FFHVV

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

‰ \RXUVSHFLDO-1',HQYLURQPHQW ‰ DQRWKHUEHDQ·VPHWKRGV ‰ 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


&03EHDQFUHDWLRQ

&03(QWLW\EHDQFUHDWLRQ 6FHQDULRFOLHQWZDQWVWRFUHDWHDQHZHQWLW\LQWKHGDWDEDVH UHPHPEHUWKH &RQWDLQHUPDGHWKHEHDQLQVWDQFHDQGWKHFRQWH[WHDUOLHUDQGSXWWKHPLQWKHSRRO

FRQWH[W

EHDQ



%REµ WH ´%LOO\ HME&UHD

EHDQ

FOLHQW

FRQWH[W

FU HD  WH ´% LOO\ % RE µ

   

+RPH REMHFW





RRO RPS QIU D H E JHW

Eµ OO\%R H ´%L W D H U F

VWXE

%HDQ3RRO

'%

&OLHQWFDOOVFUHDWH ´%LOO\%REµ RQWKHKRPHVWXE 7KHFUHDWH ´%LOO\%REµ PHWKRGLQYRFDWLRQLVSDVVHGWRWKHKRPHREMHFW

$EHDQLVSXOOHGRXWRIWKHSRROWRGRWKHFUHDWLRQ &RQWDLQHUFDOOVHME&UHDWH ´%LOO\%REµ RQWKHEHDQLQVWDQFH

(-% REMHFW $ 

VWXE





EHDQ Eµ FRQWH[W R %   +RPH OO\ L ´% REMHFW WH D %  UH W& RV 3 E HM ,QVHUWDQHZ URZLQWKHG DWDEDVH ZLWKDQHZSU %HDQ3RRO LPDU\NH\

  &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 an instance creation, but entibe ty The Container inst creation. the bean object ea antiated rlier

FOLHQW +RPH REMHFW

(-% REMHFW

'%

EHDQ

tance, wÕ on the bean ins th see.. thereÕs no Ône en wh happened the epool... because it already the bean in Container Þrst put

FUHDWH

HME&UHDWH GDWDEDVHLQVHUW QHZ

HME3RVW&UHDWH

EXVLQHVVPHWKRG EXVLQHVVPHWKRG

7HOA4HISISQUITEDIFFERENTFROMSESSION BEANCREATION 4HE#ONTAINERCALLSEJB#REATE ONASESSIONBEAN INSTANCEONLYONCE ATTHEBEGINNINGOFTHEBEANS LIFE4HATSONEBIGDIFFERENCEBETWEENSESSIONAND ENTITYBEANSˆENTITYBEANSCANRUNEJB#REATE OVERANDOVER LIKEABUSINESSMETHOD)NFACT THATSTHEBESTWAYTOTHINKOFITASJUSTANOTHER HOMEBUSINESSMETHOD ASTHOUGHITWERENAMED EJB)NSERT WHICH INOURHUMBLEOPINION IT SHOULDHAVEBEENNAMED BUTONCEAGAIN THEY FORGOTTOASKUS 

"UTTHESECONDDIFFERENCEBETWEENENTITYAND SESSIONBEANEJB#REATE METHODSISTHEORDERIN WHICHTHE%*"OBJECTISCREATED7HENANENTITY BEANRUNSEJB#REATE THERESNO%*"OBJECT 9IKES4HATMEANSTHEBEANHASNOWAYTOGETA REFERENCETOITSBODYGUARD)NOTHERWORDS AN ENTITYBEANCANNOTUSETHEEJB#REATE METHODTO SAY GETAREFERENCETOITSOWN%*"OBJECTANDPASS THATREFERENCETOSOMEONEELSE2EMEMBER ABEAN CANTPASSAREFERENCETOITSELF EVER7HENABEAN WANTSTOPASSAREFERENCETOITSELF ITMUSTPASSA REFERENCETOITSOWN%*"OBJECT"UTITCANTDOTHAT INEJB#REATE BECAUSEITSTOOEARLY \RXDUHKHUH



&03EHDQFUHDWLRQ

&03(QWLW\EHDQFUHDWLRQ





+H\EHDQUXQ \RXUHME&UHDWH  PHWKRGDQGKHUHDUH WKHFOLHQWDUJV



2.LQP\HME&UHDWH  PHWKRG,·OOXVHWKRVHDUJV IURPWKHFOLHQWWRVHWP\RZQ SHUVLVWHQWVWDWH ODVWQDPHÀUVW QDPHSULPDU\NH\HWF

*UHDW1RZ,FDQ ORRNDW\RXUSHUVLVWHQWÀHOG VWDWHDQGXVHWKHGDWDWR FUHDWHWKHQHZFXVWRPHULQ WKHGDWDEDVH



1RZWKDW,KDYHD SULPDU\NH\,FDQPDNH WKH(-%REMHFW DQGWHOO WKH(QWLW\&RQWH[W

LQVHUW

'%

%HIRUH /DVW

)LUVW

3.H\

/DVW

)UDQNLH )RRI



)UDQNLH )RRI



%U\DQ



%U\DQ

%RRI



%LOO\

%RE



%RRI





)LUVW

2.EHDQLI\RXQHHG WRÀQLVKXS\RXUFUHDWLRQ ,·PGRQHLQVHUWLQJWKHURZDQG PDNLQJWKH(-%REMHFWVRUXQ\RXU HME3RVW&UHDWH DQGKHUH·VWKH RULJLQDOFUHDWHDUJVMXVWLQ FDVH\RXIRUJRW

&KDSWHU

(-% REMHFW 

$IWHU 3.H\



7KDQNV1RZWKDW ,·PLQHME3RVW&UHDWH ,NQRZ WKDWP\(-%REMHFWLVUHDG\DQG ,FDQJHWDUHIHUHQFHWRLWIURPP\ FRQWH[W,QHHGWRSDVVDUHIHUHQFHWR P\VHOI ZKLFKPHDQVDUHIHUHQFHWR P\ERG\JXDUG RXWWRDQRWKHUEHDQ VR,5($//<QHHGHGDVHFRQG FKDQFHWRÀQLVKP\FUHDWLRQ

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
y key! pe of your primar ty e th be g is a t in us m us This ary key weÕre type (and im pr e th , se ca is In th ust be the return String, so that ism in the DD) weÕll declare th SXEOLF6WULQJHME&UHDWH 6WULQJODVW6WULQJ¿UVW ^ DVVLJQDUJVWRSHUVLVWHQW¿HOGV Once ejbCreate() completes, WKLVVHW/DVW1DPH ODVW  WKLVVHW)LUVW1DPH ¿UVW  Container will use th VHWDSULPDU\NH\ WKLVVHW3ULPDU\.H\ WKLVPDNH.H\  UHWXUQQXOO ` ret

e val set to make the new row.ues you

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 ZK\GR,KDYHWRFRPH XSZLWKWKHNH\"

,·PQRWJRQQDGRLW<28 KDYHWRFRPHXSZLWKWKH SULPDU\NH\,GRQ·WNQRZZKDW \RXUEXVLQHVVORJLFLVDQG,·P QRWJRQQDEHDSULPDU\NH\ JHQHUDWRUIRU\RX

$QGGRQ·WH[SHFWPHWR GRLWHLWKHULI\RX·UHXVLQJ &03
'%

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

ƒ
ƒ 7KHPHWKRGQDPHPXVWEHJLQZLWKWKHSUHIL[´HME&UHDWHµ ƒ 7KHPHWKRGPXVWEHGHFODUHGSXEOLFDQGPXVWQRWEHGHFODUHGVWDWLF RUILQDO

ƒ 7KHGHFODUHGUHWXUQW\SHPXVWEHWKHHQWLW\EHDQ·VSULPDU\NH\W\SH HYHQWKRXJK\RXZLOOUHWXUQQXOOIURPWKHPHWKRG

ƒ 7KHPHWKRGDUJXPHQWVPXVWEHWKHVDPHDVWKHDUJXPHQWVRIWKH PDWFKLQJFUHDWHPHWKRG!

ƒ
5XOHVIRU3ULPDU\.H\V

ƒ $SULPDU\NH\FODVVPXVWEH6HULDOL]DEOHDQGSXEOLF ƒ
ƒ ,I\RXQHHGWZRRUPRUHSHUVLVWHQWILHOGVWRXQLTXHO\LGHQWLI\\RXU HQWLW\PDNHDFXVWRPFRPSRXQGSULPDU\NH\FODVV

%\WKHHQGRIHME&UHDWH  \RX0867KDYHDYDOLG SULPDU\NH\DVVLJQHGWRWKH &03ILHOGWKDW\RX·YHWKH WROGWKH&RQWDLQHULV\RXU SULPDU\NH\ILHOG ,I\RXXVHDFRPSRXQGNH\ WKHQ$//WKHILHOGVWKDW PDNHXSWKDWNH\PXVWKDYH YDOLGYDOXHV ,IDWWKHHQGRIHME&UHDWH  \RXUSULPDU\NH\LVQXOO WKH&RQWDLQHUZRQ·WGRWKH FUHDWH

ƒ $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

ƒ
ƒ 7KHPHWKRGQDPHPXVWEHJLQZLWKWKHSUHIL[´HME3RVW&UHDWHµ ƒ 7KHPHWKRGPXVWEHGHFODUHGSXEOLFDQGPXVWQRWEHGHFODUHGVWDWLFRUILQDO ƒ 7KHGHFODUHGUHWXUQW\SHPXVWEHYRLG ƒ 7KHPHWKRGDUJXPHQWVPXVWEHWKHVDPHDVWKHPDWFKLQJHME&UHDWHPHWKRG! ƒ


&KDSWHU

HQWLW\EHDQV\QFKURQL]DWLRQ

$OOWKUHHKDYHWKHVDPHDUJV EXWGLIIHUHQWUHWXUQW\SHV

+RPHLQWHUIDFH FUHDWHPHWKRG! SXEOLF&XVWRPHUFUHDWH 6WULQJODVW6WULQJ¿UVW WKURZV       &UHDWH([FHSWLRQ5HPRWH([FHSWLRQ  %HDQFODVV HME&UHDWHPHWKRG!

differences

notice the name

SXEOLF6WULQJHME&UHDWH 6WULQJODVW6WULQJ¿UVW ^` %HDQFODVV HME3RVW&UHDWHPHWKRG!

another differe

nce

SXEOLFYRLGHME3RVW&UHDWH 6WULQJODVW6WULQJ¿UVW ^`

the same have to declarend you Õt sn oe d s as cl (A the bean it throws them. 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 EHDQ"



&KDSWHU

7KLQNDERXWLWFROOHJHER\ )LUVWRIILW·VDJDLQVW%HDQ/DZ7KH (-%VSHFIRUELGVSDVVLQJ¶WKLV·DV DQDUJXPHQWIURPEHDQFRGH12%2'< LVVXSSRVHGWRJHWDGLUHFWUHIHUHQFHWR WKHEHDQH[FHSWWKHFRQWDLQHU*HH]LI VRPHERG\','JHWDUHIHUHQFHWRWKH EHDQWKH\FRXOGMXVWFDOOPHWKRGVRQ LWDQGVNLSDOOP\VHUYLFHV

HQWLW\EHDQV\QFKURQL]DWLRQ

,I\RXZDQWWKHEHDQ\RX JRWWDJRWKURXJKPH$QG\RX GR127ZDQWWRPHVVZLWKPH,·YH ZDWFKHGWKH0DWUL[OLNHWLPHV DQG,·YHEHHQWDNLQJ3LODWHVIRU OLNH\HDUV

2K,JHWLWLI,ZDQW WRSDVVDUHIHUHQFHWRWKH EHDQ,SDVVDUHIHUHQFHWRWKH EHDQ·VERG\JXDUGLQVWHDG/LNH SDVVLQJWKH(-%REMHFW·V EXVLQHVVFDUGLQVWHDGRIWKH EHDQ·V5LJKW"

,W·VOLNHWKLVLI,·PDEHDQ, VD\WRDPHWKRGRIVRPHRQH HOVH´+HUH·VDFDUG\RXFDQXVH WRUHDFKPH%XWGRQ·WFDOOPHFDOO P\ERG\JXDUGDQGKHUH·VKLV FRQWDFWLQIRUPDWLRQµ

,QVWHDGRI

EHDQ

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\RXU(-%REMHFW ‰ JHW\RXUSULPDU\NH\ ‰ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW ‰ IRUFHDWUDQVDFWLRQWRUROOEDFN &07

‰ JHWDUHIHUHQFHWR\RXUKRPH ‰ JHWDUHIHUHQFHWR\RXU(-%REMHFW ‰ JHW\RXUSULPDU\NH\ ‰ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW ‰ IRUFHDWUDQVDFWLRQWRUROOEDFN &07

EHDQV

EHDQV

‰ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\

‰ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\

EHHQVHWWRUROOEDFN &07EHDQV

EHHQVHWWRUROOEDFN &07EHDQV

‰ JHWDWUDQVDFWLRQUHIHUHQFHDQGFDOO

‰ JHWDWUDQVDFWLRQUHIHUHQFHDQGFDOO

PHWKRGVRQLW %07EHDQVRQO\VR HQWLWLHVFDQ·WXVHWKLV

PHWKRGVRQLW %07EHDQVRQO\VR HQWLWLHVFDQ·WXVHWKLV

$FFHVV

$FFHVV

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

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

itÕs too early get a reference object or primto to your ar y still waiting for key, because the contaiEJB Once you retur you to Þnish your ejbCre ner is will look in yourn from ejbCreate(), the coate(). youÕve made as bean and see what state ntainer did based on t a result of the initializatiochanges he client-supplie n can the containe d args. Only Tyou r Þ HEN gu re out what yo key is (by lookin ur pr im g ar in y yo ur prim it needs that to make an EJBaroby key Þeld!), and ject. 

&KDSWHU

Create(), uÕre in ejbPoristmary key o y e im t e h t By knows your p the containere (or found) the EJB and has madthis key. object for

HQWLW\EHDQV\QFKURQL]DWLRQ

&03(QWLW\ILQGHU 6FHQDULRFOLHQWZDQWVWRJHWDUHIHUHQFHWRDQH[LVWLQJHQWLW\EHDQ

FRQWH[W

EHDQ

FOLHQW



ÀQ G% \3 ULP  DU \. H\ ´ µ

+RPH REMHFW

VWXE

EHDQ

.H\ ´µ \3ULPDU\ HME)LQG%





FRQWH[W

%HDQ3RRO

´µ U\.H\ D LP U \3 ÀQG%

'%

 &OLHQWFDOOVILQG%\3ULPDU\.H\ ´µ RQWKHKRPHUHIHUHQFH  7KHILQGHUPHWKRGLVSDVVHGWRWKHKRPHREMHFW  $EHDQLVVHOHFWHGIURPWKHSRROWRUXQWKHHME)LQG%\3ULPDU\.H\ ´µ PHWKRG  7KHEHDQGRHVDVHOHFWRQWKHGDWDEDVHWRYHULI\WKDWDQHQWLW\ZLWKSULPDU\NH\H[LVWV

FRQWH[W

 (-% REMHFW

EHDQ



VWXE 



 UHWXU QVWXE

+RPH REMHFW

EHDQ

µ UHWXUQ´

FRQWH[W

%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

ves the The bean neverr lea ods! me pool for Þnde th

ÀQGPHWKRG! DUJV

HME)LQGPHWKRG! DUJV GDWDEDVHVHDUFK QHZ

EXVLQHVVPHWKRG EXVLQHVVPHWKRG



&KDSWHU

'%

HQWLW\EHDQV\QFKURQL]DWLRQ

&03(QWLW\EHDQILQGHUV





+H\EHDQ UXQWKLVHME)LQG PHWKRGDQGKHUHLV WKHFOLHQWDUJ´µ



5HOD[$QG\RX·UHULJKW,·P WKHRQHWKDWLPSOHPHQWHGWKH&03 ÀQGHUPHWKRGVVRZH·OOVKRZLWWKLVZD\ HYHQWKRXJKLWLV\RXWKDWFRQFHSWXDOO\ GRHVWKHZRUN,JXHVVLQWKHHQG LWGRHVQ·WPDWWHUDVORQJDVLW KDSSHQV

8PDUHQ·W\RXIRUJHWWLQJWKDW,·PD &03EHDQ",GRQ·WKDYHWKHVHPHWKRGV LQP\EHDQFODVV$OWKRXJKFRPHWRWKLQN RILW,·PDFRQFUHWHLPSOHPHQWDWLRQWKDW WKH&RQWDLQHU³,PHDQ<28³PDGHIURP P\DEVWUDFWFODVVVRPD\EH,'2KDYHWKH PHWKRGVDIWHUDOOEXW,MXVWGLGQ·W UHDOL]HLWDQG



1RZWKDW,KDYH YHULÀHGWKDWWKLVHQWLW\ H[LVWV,FDQPDNHWKH (-%REMHFWLILWGRHVQ·W DOUHDG\H[LVW

VHDUFKIRUSN

'%

/DVW

)LUVW

3.H\

3RO\

0RUSKLVP



'HZH\

&KHDWHP



(-% REMHFW 

 

2.FOLHQWKHUH·V \RXU(-%REMHFW UHIHUHQFHIRU
7KDQNV,UHDOO\ QHHGWRFKDQJH 3RO\·VODVWQDPHWR (VWKHU

 ,JXHVV,MXVW JHWWRVWD\LQWKH SRRODQGIRUJHW WKHZKROHWKLQJ

\RXDUHKHUH



HQWLW\EHDQ¿QGHUV

<28GRQ·WLPSOHPHQWWKH)LQGHUPHWKRGV

LQWHUIDFH!! &XVWRPHU+RPH


FUHDWH 6WULQJODVW6WULQJILUVW XSGDWH$OO 6WULQJFPG ILQG%\3ULPDU\.H\ 6WULQJNH\ ILQG%\&LW\ 6WULQJFLW\

*USTDONTWRITE@EM&ORA#-0BEAN DONTPUT ANYTHINGINYOURCLASSABOUTTHElNDERMETHODS 9OUWILLIMPLEMENTYOURCREATEANDHOME BUSINESSMETHODS BUTASFARASYOUROWNBEAN CLASSˆTHEONETHATYOUWRITEˆGOES THEREARENO lNDERMETHODS 9OUDODECLARETHEMINTHEHOMEINTERFACE OFCOURSE INCLUDINGTHEMANDATORY lND"Y0RIMARY+EY BUTYOUDONTWRITEANY OTHER*AVACODERELATEDTOYOURlNDERS 4HE#ONTAINERLOOKSINYOURHOMEINTERFACEAND YOURDEPLOYMENTDESCRIPTORTOlGUREOUTWHATTO DOWITHTHElNDERMETHODS ANDTHE#ONTAINER WRITESALLTHECODEFORTHEM9OULLNEVERSEEIT

'RQ·WSXWDQ\WKLQJLQ \RXUEHDQFODVVDERXWWKH ILQGHUV7KH&RQWDLQHU LPSOHPHQWV\RXUILQGHU PHWKRGVXVLQJWKHKRPH LQWHUIDFHDQG\RXU GHSOR\PHQWGHVFULSWRUWR ILJXUHRXWZKDWWRGR
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 """

,KHDUZKDW\RX·UHVD\LQJEXW FRPHRQDUHQ·WWKHFKDQFHV SUHWW\JRRGWKDWWKHFOLHQW,6 JRQQDFDOODEXVLQHVVPHWKRG RQWKHEHDQ"7KH\ZHQWWRWKH WURXEOHRIÀQGLQJLW

:K\VKRXOG,ZDVWHDEHDQ·V WLPHE\ORDGLQJLWXSZLWKWKH GDWDZKHQWKHFOLHQWPLJKWQRW HYHUFDOODEXVLQHVVPHWKRGRQ WKDW(-%REMHFWUHIHUHQFH"


\RXDUHKHUH



HQWLW\EHDQ¿QGHUV

,·PQRWIROORZLQJ ZKDWGR\RXPHDQE\ VWDOH"+RZFDQWKHEHDQEHFRPH VWDOHLIQRERG\HOVHFDQJHW WRWKHEHDQ·VGDWD"+RZ FRXOGDQ\ERG\FKDQJHWKH HQWLW\"

2NQRZ,JHWLWLIWKHEHDQZHUH WREHORDGHGXSZLWKGDWDGXULQJWKH ÀQGHUPHWKRGWKHQE\WKHWLPHWKH FOLHQWFDOOVDEXVLQHVVPHWKRGRQLWWKH XQGHUO\LQJHQWLW\GDWDLQWKHGDWDEDVH PLJKWKDYHFKDQJHG



&KDSWHU

7KLQNDERXWLW7KHHQWLW\3RO\0RUSKLVP OLYHVLQWKHGDWDEDVH DURZLQDWDEOH 6XUH ZHFDQKDQGRXWUHIHUHQFHVWRWKH(-%REMHFW IRUWKLVHQWLW\%87WKHHQWLW\%($1LVQ·WWKH RQO\ZD\WRJHWWRWKHGDWDEDVH6RZKLOHWKHFOLHQWLV ZDLWLQJWRFDOODPHWKRGIRUDOOZHNQRZVRPHRQHHOVH FRXOGKDYHXSGDWHG3RO\·VUHFRUGLQWKHGDWDEDVH ,IWKDWZHUHWRKDSSHQWKHQZKHQWKHFOLHQWFDOOV DPHWKRGRQWKH3RO\HQWLW\EHDQWKHEHDQ UHWXUQVROGZURQJLQIRUPDWLRQ


HQWLW\EHDQV\QFKURQL]DWLRQ

&03+RPH%XVLQHVV0HWKRGV 6FHQDULRFOLHQWZDQWVWRFDOODEXVLQHVVPHWKRGLQWKHKRPH

FRQWH[W

EHDQ

FOLHQW

 +RPH REMHFW

 XS GD WH $O O

VWXE

EHDQ

WH$OO HME8SGD



FRQWH[W

%HDQ3RRO

H$OO XSGDW

'%

 &OLHQWFDOOVXSGDWH$OO RQKRPHUHIHUHQFH  7KHXSGDWH$OO PHWKRGLVSDVVHGWRWKHKRPHREMHFW  $EHDQLVVHOHFWHGIURPWKHSRROWRUXQWKHHME8SGDWH$OO PHWKRG

FRQWH[W

EHDQ

FOLHQW



 UHWXUQ GDWD

+RPH REMHFW

EHDQ

DWD UHWXUQG



FRQWH[W

%HDQ3RRO

'%

 :LWKRXWOHDYLQJWKHSRROWKHEHDQUXQVWKHKRPHPHWKRGSUREDEO\FDOOLQJRQD&RQWDLQHU LPSOHPHQWHGVHOHFWPHWKRG!WRDFFHVVWKHGDWDEDVH

 7KHEHDQUHWXUQVIURPWKHPHWKRG SRVVLEO\UHWXUQLQJGDWD   7KH&RQWDLQHUSDVVHVWKHUHWXUQYDOXHEDFNWRWKHFOLHQW \RXDUHKHUH



KRPHEXVLQHVVPHWKRGV

&OLHQWLQYRNHVD+RPH%XVLQHVV0HWKRG &03HQWLW\EHDQ

FOLHQW +RPH REMHFW

EHDQ

'%

ves the pool The bean nevereslea thods me s sin bu for home

KRPHEXVLQHVVPHWKRG KRPHEXVLQHVVPHWKRG

No EJB obje

ct is involved

!

GDWDEDVHDFFHVVYLDD &RQWDLQHULPSOHPHQWHG 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

ƒ
ƒ 7KHPHWKRGPXVWEHGHFODUHGSXEOLFDQG127VWDWLF ƒ ,IWKHKRPHLQWHUIDFHLV5HPRWHWKHDUJXPHQWVDQGUHWXUQYDOXHVPXVWEHOHJDOW\SHVIRU50,,,23 ƒ
ƒ (YHQLI\RXUOLIHGHSHQGVRQLW\RXPXVW127GHFODUHD5HPRWH([FHSWLRQ 

&KDSWHU

HQWLW\EHDQV\QFKURQL]DWLRQ

*MIV\PQVO[aW]KIVLWQVPWUMJ][QVM[[UM\PWL[

8VH\RXU(QWLW\&RQWH[WWR

‰ JHWDUHIHUHQFHWR\RXUKRPH ‰ JHWDUHIHUHQFHWR\RXU(-%REMHFW ‰ JHW\RXUSULPDU\NH\ ‰ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW ‰ IRUFHDWUDQVDFWLRQWRUROOEDFN &07 EHDQV

‰ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\

e the canÕt do becaus two things youING an entity! The bean isnÕt BE pool acting on behalf bean is in the entities of this type, of ALL the e particular entity. So but not any onno EJB object and of the bean has imary key. 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

HVV GGU $ W JH

 VWXE 



FRQWH[W

(-% REMHFW 

+(/3

FOLHQW

EHDQ

 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



 7KH&RQWDLQHUWHOOVWKHGDWDEDVHWRORFNHQWLW\LQWKHGDWDEDVH7KH

7HOOGDWDEDVH WRORFNURZ

&RQWDLQHUWKHQGRHVD6(/(&7RQWKHHQWLW\·VGDWD

 7KH&RQWDLQHUSRSXODWHVWKHHQWLW\EHDQ·VSHUVLVWHQWILHOGVZLWKWKHUHDOHQWLW\GDWD

 7KH&RQWDLQHUFDOOVHME/RDG RQWKHEHDQWRWHOOWKHEHDQ´
&KDSWHU

'%

HQWLW\EHDQV\QFKURQL]DWLRQ

&RPSOHWLQJDEXVLQHVVPHWKRG DQGDWUDQVDFWLRQ 6FHQDULREHDQFRPSOHWHVDEXVLQHVVPHWKRGWKDWHQGVDWUDQVDFWLRQ

UHWXUQ

 XUQ UHW



VWXE 

FRQWH[W

(-% REMHFW

EHDQ

JHW$GGUHVV



FOLHQW





UHWXUQ

EHDQ FRQWH[W

'%



7KHJHW$GGUHVV PHWKRGLVSDVVHGWRWKHEHDQ ILQDOO\



7KHEHDQUHWXUQVIURPWKHPHWKRG

7KH(-%REMHFWVHQGVWKHUHWXUQEDFNWRWKHFOLHQW

EHDQ



FRQWH[W

HME6WRUH

   7KH&RQWDLQHUFDOOVHME6WRUH WRWHOOWKHEHDQ´,·PDERXWWRWDNH\RXUSHUVLVWHQW

83'$7(

7UDQVDFWLRQ(QGV XQORFNURZ

'%

ILHOGVWDWHDQGXSGDWHWKHGDWDEDVHVREHVXUH\RXUVWDWHLVUHDG\µ

 7KHUHDOHQWLW\LVXSGDWHGLQWKHGDWDEDVH

 7KH&RQWDLQHUFRPPLWVWKHWUDQVDFWLRQDQGWHOOVWKHGDWDEDVHWRXQORFNWKHHQWLW\ \RXDUHKHUH



EHLQJDQHQWLW\EHDQ

%HLQJ-RKQ(QWLW\%HDQ ,WDOOVWDUWVZKHQWKH FOLHQWFDOOVDEXVLQHVV PHWKRGRQDQ(-%REMHFW IRU-RKQ0DOFRP7KH(-% REMHFWIUHDNVRXWEHFDXVH WKHUH·VDFDOOEXWQRHQWLW\ EHDQWRUXQWKHPHWKRG







,PLJKWQRWEH FRPSOHWHO\UHDG\ZKHQ,FRPH RXWRIWKHSRROVRWKH&RQWDLQHU FDOOVP\HME$FWLYDWH PHWKRG,W·V DFWXDOO\DSUHWW\XVHOHVVPHWKRGVR ,DOPRVWQHYHUGRDQ\WKLQJWKHUH%XW, VXSSRVH,PLJKWUHDFTXLUHD6RFNHWRU VRPHWKLQJ,GRQ·WZDQWWRKDQJRQWR ZKLOH¶EHWZHHQSURMHFWV·%XWLW·VKDUG IRUPHWRLPDJLQHDQ\WKLQJ,ZRXOGGR LQHME$FWLYDWH WKDW,ZRXOGQ·W UDWKHUGRLQVRPHRWKHU PHWKRG

&KDSWHU

6RWKH &RQWDLQHUSKRQHV EDFNWRWKHSRRO DQGVD\V´:HQHHG DEHDQRXWKHUH WRVHUYLFHDFOLHQW PHWKRGµ



%XWDIWHUWKDW,VWLOOQHHG WRDVN´:KRDP,VXSSRVHG WREH"µDQGWKDW·VZKHQ,JHWWKH ´%HLQJ-RKQ0DOFRPµVFULSWZLWKDOORIP\ FKDUDFWHU·VLPSRUWDQWGDWD7KH&RQWDLQHU FDOOVP\HME/RDG PHWKRGWRWHOOPHWKDW ,KDYHHYHU\WKLQJ,QHHGWRSOD\WKH UROHRI-RKQ0DOFRP$IWHUWKDW,·P LQFKDUDFWHUDQGUHDG\IRUDFWLRQ



HQWLW\EHDQV\QFKURQL]DWLRQ

6KRZWLPH7KHFOLHQW·VEXVLQHVV PHWKRGFDOOLVÀQDOO\SDVVHGWRPH +H\ZLOOVRPHERG\WHOOP\SV\FKR ERG\JXDUGWRUHOD[LW·VQRWHDV\ EHLQJEULOOLDQW\RXNQRZ 



$IWHUP\VWXQQLQJSHUIRUPDQFHDV -RKQ0DOFRPWKH&RQWDLQHU ZKR 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 GDWDµ WKH\DOODFWOLNHLW·VOLWHUDOO\ WKHHQGRIWKHZRUOGRYHUKHUHLIWKH GDWDEDVHGRHVQ·WNQRZHYHU\OLWWOH WKLQJWKDWKDSSHQVWRP\ FKDUDFWHU 



7KHQLW·VRYHUDQG ,·PEDFNWRWKHSRRO %XWÀUVWWKH&RQWDLQHUFDOOV P\HME3DVVLYDWH PHWKRGWRWHOOPH WKDW,·PGRQHEHLQJ-RKQ0DOFRP 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\RXU(-%REMHFW ‰ JHW\RXUSULPDU\NH\ ‰ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW ‰ IRUFHDWUDQVDFWLRQWRUROOEDFN &07

‰ JHWDUHIHUHQFHWR\RXUKRPH ‰ JHWDUHIHUHQFHWR\RXU(-%REMHFW ‰ JHW\RXUSULPDU\NH\ ‰ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW ‰ IRUFHDWUDQVDFWLRQWRUROOEDFN &07

EHDQV

EHDQV

‰ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\

‰ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\

EHHQVHWWRUROOEDFN &07EHDQV

EHHQVHWWRUROOEDFN &07EHDQV

‰ JHWDWUDQVDFWLRQUHIHUHQFHDQGFDOO

‰ JHWDWUDQVDFWLRQUHIHUHQFHDQGFDOO

PHWKRGVRQLW %07EHDQVRQO\VR HQWLWLHVFDQ·WXVHWKLV

PHWKRGVRQLW %07EHDQVRQO\VR HQWLWLHVFDQ·WXVHWKLV

$FFHVV

$FFHVV

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

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

that efers (no, makebean pr r ne ai t on C he a T if you access INSISTS) thatmanager, you must be in or a resource transaction contextÕ, so a Ômeaningful is too early. But once you ejbActivate() d(), youÕre IN a transaction get to ejbLoatold the Container NOT (unless youÕve nsaction... which is for very to use a tra ly). special cases on



&KDSWHU

Now we can d entity bean CAo Neverything that an we can do in a bu do... the same things think of this as siness method. You can business method. the beginning of the

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\RXU(-%REMHFW ‰ JHW\RXUSULPDU\NH\ ‰ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW ‰ IRUFHDWUDQVDFWLRQWRUROOEDFN &07

‰ JHWDUHIHUHQFHWR\RXUKRPH ‰ JHWDUHIHUHQFHWR\RXU(-%REMHFW ‰ JHW\RXUSULPDU\NH\ ‰ JHWVHFXULW\LQIRUPDWLRQDERXWWKHFOLHQW ‰ IRUFHDWUDQVDFWLRQWRUROOEDFN &07

EHDQV

EHDQV

‰ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\

‰ ILQGRXWLIWKHWUDQVDFWLRQKDVDOUHDG\

EHHQVHWWRUROOEDFN &07EHDQV

EHHQVHWWRUROOEDFN &07EHDQV

‰ JHWDWUDQVDFWLRQUHIHUHQFHDQGFDOO

‰ JHWDWUDQVDFWLRQUHIHUHQFHDQGFDOO

PHWKRGVRQLW %07EHDQVRQO\VR HQWLWLHVFDQ·WXVHWKLV

PHWKRGVRQLW %07EHDQVRQO\VR HQWLWLHVFDQ·WXVHWKLV

$FFHVV

$FFHVV

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

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

By the time the Container starts to passivate you, youÕre no longer associated with a client or a transaction ainer ate(), the Conttion iv ct bA ej h it w Just as it was you in a Ômeaningful transac a no longer has her words, you canÕt be in t a contextÕ (in ot this point), so you canÕt ge . The 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

FYI -- this page is EXAC Y the same as the previous one onTL act ivat and loading. (except for the not ion made). The rules for whatÕs allo es we activation are the same for pas wed during and the rules for loading are idesivation, ntical to the rules for storing.

\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 ZLWKGDWDEXW127LQDWUDQVDFWLRQ7KH&RQWDLQHUNHHSVWKH HQWLW\ORFNHGVRWKDWQRERG\FDQFKDQJHWKHEHDQ·VVWDWH :KHQDFOLHQWFDOOVDEXVLQHVVPHWKRGRQWKLVHQWLW\EHDQ·V (-%REMHFWWKH&RQWDLQHUGRHV127GRDQHME$FWLYDWH RU HME/RDG DQGDVVXPHVWKHEHDQ·VGDWDLVVWLOOLQV\QFZLWK WKHXQGHUO\LQJSHUVLVWHQWVWRUH

$ %HDQVWD\VFRQQHFWHGDQGLQV\QF :KHQWKHQH[WEXVLQHVVPHWKRGFDOO FRPHVLQWRWKHEHDQLWMXVWUXQV1R HME$FWLYDWH QRHME/RDG  (-% REMHFW

'DUNR

EHDQ



(-% REMHFW

&RPPLWRSWLRQ& 7KHEHDQLVSDVVLYDWHGDQGSXWEDFNLQWRWKHSRRO7KH QH[WWLPHDFOLHQWFDOOVDEXVLQHVVPHWKRGRQWKLVHQWLW\ HYHU\WKLQJZH·YHVHHQLQWKLVFKDSWHUKDSSHQV³DEHDQ FRPHVRXWRIWKHSRROLVDFWLYDWHGWKHORDGHGDQG ILQDOO\WKHEXVLQHVVPHWKRGLWSDVVHGWRWKHEHDQ

'DUNR

(-% REMHFW

EHDQ

&KDSWHU

'RQQ\



bean lock is released, butthe pool doesnÕt go back to &

322/



ys locked

entity sta

%HDQVWD\VFRQQHFWHGEXWQRWLQV\QF :KHQWKHQH[WEXVLQHVVPHWKRGFDOO FRPHVLQWRWKHEHDQHME/RDG LV FDOOHG %XWQRHME$FWLYDWH

EHDQ





%

&RPPLWRSWLRQ% 7KHEHDQVWD\VDWWDFKHGWRWKH(-%REMHFWORDGHGZLWK GDWDEXWWKHEHDQ·VVWDWHLVPDUNHGDV¶LQYDOLG·,QRWKHU ZRUGVWKH&RQWDLQHUNQRZVWKDWWKHEHDQPLJKWEHFRPH VWDOHEHWZHHQQRZDQGWKHQH[WWLPHDFOLHQWLQYRNHV DPHWKRGRQWKLVEHDQVRWKH&RQWDLQHUZLOOGRDQ HME/RDG ZKHQDQHZEXVLQHVVPHWKRGFRPHVLQIRUWKLV HQWLW\ %XWQRHME$FWLYDWH 

'RQQ\

%HDQLVGLVFRQQHFWHGIURPWKH(-% REMHFWDQGJRHVEDFNWRWKHSRRO:LWK WKHQH[WEXVLQHVVPHWKRGFDOOWRWKLV EHDQWKH&RQWDLQHUSXOOVDEHDQRXWRI WKHSRROWKHQFDOOVHME$FWLYDWH DQG HME/RDG 'DUNR 'RQQ\ 

goes lock is released, bean back to the pool

HQWLW\EHDQV\QFKURQL]DWLRQ

there are no

Dumb Questions

Q:

(OWDOESTHESECOMMIT OPTIONSAFFECTME$O)NEEDTO KNOWWHICHONEMY#ONTAINERIS CHOOSING$O)GETACHOICE

CREATEDTHATTHENSTAYSSTUCKTO THE%*"OBJECT!RENTPOOLSMORE EFlCIENTBECAUSEYOUNEEDONLY ENOUGHBEANSTOSERVICETHEACTUAL IN PROGRESSMETHODS

A:

A:

!CCORDINGTOTHESPECIFICATION YOURVENDORISFREETOUSEANYOFTHE THREEOPTIONS9OURCONTAINERMIGHTLET YOUCHOOSEORTUNE THEOPTION BUT DONTALWAYSCOUNTONIT"UTDOYOU NEEDTOKNOWWHICHISBEINGUSED 9OUCANSEEWHERETHETRADE OFFSARE OFCOURSEˆIFYOUKEEPTHEENTITY LOCKEDINTHEDATABASE NOOTHER APPLICATIONSCANUSETHATENTITYS DATA4HATSFINEIFTHE%*"ISTHEONLY APPLICATIONTHATNEEDSTHATDATABASE !NDTHATOPTIONCOMMITOPTION ! GIVESYOUTHEBESTPERFORMANCE WHENABUSINESSMETHODCALLCOMES INFORTHEENTITY BECAUSETHERES NOEJB!CTIVATE THEBEANNEVER WENTBACKTOTHEPOOL ANDMORE SIGNIFICANTLYˆTHERESNOTRIPTOTHE DATABASEORANEJB,OAD 

Q:

"UTCOULDNTOPTION!REALLY KILLME IF)WANTTOKEEPTHEENTITIES UNLOCKEDINTHEDATABASEWHEN THEYRENOTBEINGUSEDBYTHEBEAN

A:

&ORTHISREASON MOSTVENDORS WONTUSEOPTION!ASADEFAULT THEYALLOWITONLYIFTHEDEPLOYEROR ADMINCHOOSESITASSUMINGITSEVEN SUPPORTEDATALL 

Q:

)SEEANOTHER POSSIBLYEVEN 7/23%PROBLEMWITHOPTION! DOESNTTHISMEANACONTINUALLY GROWINGHEAPFULLOFOBJECTS,IKE EACHTIMESOMEONEUSESAPARTICULAR ENTITY ANENTITYBEANINSTANCEIS

.OCONTAINERWORTH CONFIGURINGWOULDLEAVEYOUSTUCK WITHACONSTANTLY ENDLESSLYGROWING ACCUMULATIONOFOBJECTS%VENA CONTAINERTHATDOESUSEOPTION! CANUSESOMETHINGLIKEA,25,EAST 2ECENTLY5SED ALGORITHMTOSAYTO ITSELF h(MMMNOBODYHASCALLEDA METHODONENTITYFORALONGTIME SO)LLPASSIVATETHATBEANANDPUTHIM BACKINTHEPOOLANDUNLOCKTHEROW v "UT WITHATLEASTTHEOPTIONOFUSING OPTION! ACONTAINERCANSAYTOITSELF h4HISENTITYISREALLYPOPULAR )TSABIGPAINTOKEEPGOINGTOTHE DATABASEANDDOINGTHEWHOLELOAD STOREACTIVATEPASSIVATECYCLEEACH TIME SO)LLJUSTKEEPHIMLOADEDAND READY EVENBETWEENTRANSACTIONSv

Q:

/HMAN )JUSTTHOUGHTOF SOMETHING2%!,,9BADWITHTHIS ARCHITECTUREEVENIFYOUDO./4 KEEPACCUMULATINGENTITYBEANS WHATABOUTTHE%*"OBJECTS$ONT THEYJUSTKEEPGROWINGANDGROWING SOTHATEACHTIMEACLIENTDOESAlND ANDGETSBACKASTUB AN%*"OBJECT ISCREATEDFORTHATENTITY ANDITJUST STAYSAROUNDUNTILTHEENTITYITSELF ISREMOVED!TANYGIVENTIME )WILL HAVEALLTHE%*"OBJECTSONTHEHEAP THATREPRESENTEVERYENTITYANYONE HASEVERACCESSEDUPTOTHATPOINT

A:

!HNOWWECOMETOTHE DIFFERENCEBETWEENTHEhCONCEPTUALv VIEWOFTHEARCHITECTURE ANDTHE hACTUALvIMPLEMENTATION !CCORDINGTOTHESPEC YOURE

SUPPOSEDTOASSUMETHATTHISIS INDEEDHOWITWORKSWHENACLIENT WANTSANENTITYBEAN EITHERTHROUGH ACREATEORFIND THE#ONTAINERMAKES AN%*"OBJECTFORTHATENTITYhHERES THE%*"OBJECTFOR HERESTHE %*"OBJECTFORv ETC !NDASA "EAN0ROVIDERASOPPOSEDTO SAY A CONTAINERSERVERPROVIDER YOUARETO PROGRAMASIFTHATSREALLYTHEWAYIT WORKS "UTINTERNALLY THE#ONTAINERMIGHT BEDOINGSOMETHINGQUITEDIFFERENT FROMTHECONCEPTUALARCHITECTURAL VIEW)MAGINETHAT9/5WEREA CONTAINERDEVELOPERˆHOWWOULDYOU IMPLEMENTTHINGS /NEIDEAMIGHTBETOPUTTHEBURDEN ONTHECLIENTS BYKEEPINGALLTHE INFORMATIONINTHESTUBS&OREXAMPLE WHENTHECLIENTGETSASTUBTOAN %*"OBJECT YOUCANMAKESURETHAT THESTUBKNOWSTHEUNIQUE)$FOR THEENTITYIETHEPRIMARYKEY "UT THE%*"OBJECTSMIGHTBEGENERIC INSUCHAWAYTHATWHENTHECLIENT CALLSAMETHODONASTUB THATSTUBIS CONNECTEDNOTTOAN%*"OBJECTJUST FORTHATENTITY BUTRATHERAONE %*" OBJECT FITS ALLTHATKNOWSHOWTOMAKE SURETHEMETHODENDSUPATTHERIGHT ENTITY4HATWAY WHENACLIENTISNT USINGAN%*"OBJECT THAT%*"OBJECT ISNTSITTINGAROUNDWASTINGSPACE 4HATSJUSTONEIDEA

Q:

4HATMIGHTBElNEFORSTUBS BUTWHATIFTHECLIENTISLOCAL4HEN THEYHAVEAREALREFERENCETOTHE %*"OBJECT SOTHAT%*"OBJECTWOULD (!6%TOBEENTITY SPECIlC

A:

9ES THATSTRUE"UTWITH LOCALCLIENTS NORMAL*AVAGARBAGE COLLECTIONWORKS7HENTHEREARENO CLIENTSWITHREFERENCESTOAPARTICULAR %*"OBJECT THEINSTANCEWILLDIE \RXDUHKHUH



FRPPLWRSWLRQV

there are no

Dumb Questions

Q:

7HICHOFTHETHREECOMMIT OPTIONSDOYOUTHINKISMOSTUSED

A:

7ELLWECANTREALLYANSWER THAT BUTIFWEWEREINABETTINGMOOD OURMONEYWOULDBEONOPTION"! @SMARTOPTION" THATKNOWSWHENIT MAKESSENSETOHANGONTOABEAN ANDWHENITDOESNT"UTAVOIDINGTHE EJB!CTIVATE WHICHISUSUALLYUSELESS ANYWAY ISA'OOD4HING

Q:

"UTISNTTHEHITTOTHE DATABASEˆTHELOADˆAMUCHBIGGER HITTHANJUSTONEMOREMETHODCALL ONTHESTACK

A:

&IRSTOFALL ACTIVATIONIS PROBABLYALITTLEMORETHANJUST ONEMOREMETHODCALLONTHESTACK BECAUSETHERESOVERHEADJUSTIN MAINTAININGTHEORGANIZATIONOFTHE POOLITSELF"UTYES YOURERIGHTABOUT THEDATABASEHITBEINGABIGGERDEAL "UTTHERESALLSORTSOFWAYSTHE #ONTAINERCANOPTIMIZE ANDWHATS THEALTERNATIVE4HEONLYALTERNATIVE OPTION! KEEPSTHEDATABASELOCKED WHICHISTYPICALLYNOTWHATYOUWANT

Q:

"UTWHATIFMY%*"APP)3THE ONLYTHINGTHATUSESTHATDATABASE

A:

)THINKWEMENTIONEDTHIS EARLIERIFYOUKNOWABSOLUTELY POSITIVELYNOQUESTIONTHATYOUR%*" APPISTHEONLYTHINGTOUCHINGTHAT DATABASE THENYES IFYOURVENDOR SUPPORTSIT YOULLHAVEBETTER PERFORMANCEWITHOPTION!/FCOURSE CACHINGTHINGSINMEMORYIS



&KDSWHU

STILLDANGEROUS BECAUSEENTITIESARE PERSISTENT3OTHEVENDORSTILLMUST IMPLEMENTSOMETHINGTHATSAVESTHE STATEOFTHEENTITIESTOTHEDATABASE IFTHEYCHANGE3OTHEREWILLSTILLBE STORING IFNOTLOADING 4HEREARESTILLOTHERPOTENTIALPROB LEMSWITHOPTION! THOUGH&OR EXAMPLE YOUMIGHTHAVEASERVER THATSUPPORTSCLUSTERING ANDTHE SERVERWILLHAVETOBECERTAINTHATALL INSTANCESOFTHATENTITYBEANINSYNC NOTJUSTWITHTHEDATABASE BUTWITH ONEANOTHER"UTTHATSANOTHERISSUE 9OULLLEARNMOREINTHEPATTERNSAND PERFORMANCECHAPTER

Q:

3OISTHEREALPOINTOFALLTHIS THEFACTTHATASLONGASYOUREINA TRANSACTION YOUWONTHAVEALLTHESE LOADSTOREACTIVATEPASSIVATECALLS

A:

9ES ABIGPARTOFTHEPOINT ANYWAY

Q:

4HENSHOULDNTYOURGOALBE TOHAVETHELONGESTTRANSACTIONS

A:

9OUARENTBEINGSERIOUS RIGHT *USTFORFUN WELLPRETENDYOUARE AND SAY ././././4HINKABOUTYOUR CONCURRENCY!GOODRULEOFTHUMB WITHAZILLIONEXCEPTIONS OFCOURSESO ALLRULE OF THUMBDISCLAIMERSAPPLY IS THATTRANSACTIONSSHOULDBENOLONGER THANABSOLUTELYNECESSARY4HELONGER YOURBEANISINATRANSACTION THEMORE LIKELYITISTHATOTHERSAREWAITINGIN LINETOGETTOTHATENTITY/FCOURSE ITSALSOPOSSIBLETOHAVETRANSACTIONS WHICHARETOOSHORT WHICHMEANS

YOUREDOINGMORELOADSSTORESTHAN YOUNEEDTO SOTHEKEYISTOHAVEYOUR TRANSACTIONSBEASLONGASYOUNEED ANDNOLONGER

Q:

/NEMORETHINGDOESNT THISMEANTHATEJB0ASSIVATEAND EJB!CTIVATEMIGHTNOTEVERBECALLED ONABEAN IFTHECONTAINERUSES OPTION!OR"!NDDOESNTTHISMEAN THAT)SHOULDNTRELYONEJB!CTIVATE OREJB0ASSIVATEINMYDESIGN

A:

9%34HATS%8!#4,9WHATIT MEANS)TSUSUALLYALOUSYSTRATEGY"UT YOUCANIMAGINEHOWITMIGHTSOUND LIKEAGOODIDEA

8PUHPHPEHUKRZ, WROG\RXLWZRXOGEHPRUH HIÀFLHQWWRJHWUHVRXUFHV LQHME$FWLYDWHDQGUHOHDVHWKHP LQHME3DVVLYDWH"&DQZHMXVW SUHWHQGWKDW,QHYHUVDLG WKDW"

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 ZLWKDFWLYDWLRQ SDVVLYDWLRQ

([HUFLVH

7KLVWLPH\RX·UHJRQQDGUDZWKHDUURZV\RXUVHOI$VVXPHWKDWWKHEHDQLVLQWKHSRRODWWKH WLPHWKHFOLHQWFDOOVDEXVLQHVVPHWKRG ZKLFKDOVRPHDQVWKHEHDQLVQRWLQDWUDQVDFWLRQ  'UDZDUURZVDQGODEHOWKHPZLWKWKHDFWLRQVWKDWRFFXUWKURXJKWKHFRPSOHWLRQRIWKH EXVLQHVVPHWKRG6KRZZKDWKDSSHQVZKHQWKHEHDQUHWXUQVWRWKHSRRO :KHQZHGLGLWWKHUHZHUHHLJKWPRUHDUURZVEXW\RXPLJKWKDYHPRUHRUOHVVGHSHQGLQJ RQKRZ\RXZDQWWRGRLW'R127IOLSEDFNWKURXJKWKHPRVWUHFHQWSDJHV
FOLHQW

&RQWDLQHU (-% REMHFW

EXVLQHVVPHWKRG



&KDSWHU

EHDQ

'%

HQWLW\EHDQV\QFKURQL]DWLRQ

([HUFLVH

)LOOLQWKH3URGXFW%HDQ80/LVKER[ZLWKWKHPHWKRGVWKDW<28PXVWZULWH LQ\RXUEHDQFODVVJLYHQWKHFRPSRQHQWDQGKRPHLQWHUIDFHV'RQ·WIRUJHW WKHFRQWDLQHUFDOOEDFNVIURP(QWLW\%HDQDOWKRXJKZH·YHVKRZQ\RXRQO\ 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 1

7HATSTRUEFORABEANPROVIDERWHENCREATINGANENTITYBEANUSINGCONTAINER MANAGEDPERSISTENCE#HOOSEALLTHATAPPLY

R! #ONTAINER MANAGEDPERSISTENTlELDSMUSTBEDElNEDINTHEENTITYBEAN CLASS

R" #ONTAINER MANAGEDRELATIONSHIPlELDSMUSTBEDElNEDINTHEENTITY BEANCLASS

R# 7HENIMPLEMENTINGAONE TO MANYRELATIONSHIP THEJAVAUTIL,IST INTERFACEMUSTNOTBEUSED

R$ !CCESSORMETHODSFORCONTAINER MANAGEDRELATIONSHIPlELDSMUSTBE EXPOSEDINTHEBEANSREMOTECOMPONENTINTERFACE

2

7HICHOFTHEFOLLOWINGISALEGALACCESSORMETHODFORAPERSISTENTlELDINAN ENTITYBEANWITHCONTAINER MANAGEDPERSISTENCE#HOOSEALLTHATAPPLY

R! SXEOLFJHW&XVWRPHU1XP  R" SXEOLFYRLGJHW&XVWRPHU1XP  R# DEVWUDFWYRLGJHW&XVWRPHU1XP  R$ SXEOLFDEVWUDFWLQWJHW&XVWRPHU1XP 

3

7HICHOFTHEFOLLOWINGARELEGALACCESSORMETHODS INANENTITYBEANWITH CONTAINER MANAGEDPERSISTENCE#HOOSEALLTHATAPPLY

R! SXEOLFDEVWUDFWLQW*HW&XVWRPHU1XP  R" SXEOLFDEVWUDFWLQWJHWFXVWRPHU1XP  R# SXEOLFDEVWUDFWLQWJHW&XVWRPHU1XP  R$ SXEOLFDEVWUDFWLQWJHW&XVWRPHU1XP ^`



&KDSWHU

HQWLW\EHDQV\QFKURQL]DWLRQ

4

7HICHAREREQUIREMENTSFORA#-0ENTITYBEANCLASS#HOOSEALLTHATAPPLY

R! 4HECLASSMUSTDElNEA¿QDOL]H METHOD R" 4HESOURCElLEMUSTDElNEATLEASTONECONSTRUCTOR R# 4HECLASSMUSTBEDECLAREDPUBLICANDABSTRACT R$ 4HECLASSMUSTIMPLEMENT DIRECTLYORINDIRECTLY THE MDYD[HME(QWHUSULVH%HDQINTERFACE

R% !LLGETTERANDSETTERMETHODSFORTHEBEANSABSTRACTPERSISTENCE SCHEMAMUSTBEABSTRACT

5

7HICHARELEGALDECLARATIONSFORA#-0BEANSEJB#REATEMETHODS#HOOSE 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

6

7HICHARELEGALDECLARATIONSFORAMETHODINA#-0BEAN#HOOSEALLTHAT 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

7

7HICHMETHODS FROMTHE%NTITY#ONTEXTINTERFACECANBEINVOKEDFROM WITHINTHESET%NTITY#ONTEXTMETHOD#HOOSEALLTHATAPPLY

R! JHW(-%2EMHFW R" JHW(-%/RFDO+RPH R# JHW&DOOHU,GHQWLW\ R$ JHW&DOOHU3ULQFLSDO R% VHW5ROOEDFN2QO\

8

7HICHCANBECALLEDONA#-0BEANTOTRANSITIONITFROMTHEREADYSTATETOTHE POOLEDSTATE#HOOSEALLTHATAPPLY

R! HME6WRUH R" HME&UHDWH R# HME6HOHFW R$ HME5HPRYH R% HME3DVVLYDWH

9

7HICHMETHODS FROMTHE%NTITY#ONTEXTINTERFACECANBEINVOKEDFROM WITHINTHEEJB#REATEMETHOD#HOOSEALLTHATAPPLY

R! JHW(-%+RPH R" JHW(-%2EMHFW R# JHW&DOOHU3ULQFLSDO R$ JHW8VHU7UDQVDFWLRQ R% VHW5ROOEDFN2QO\

10



7HATISTRUEFORA#-0BEANINTHEREADYSTATE

R! )TSHME/RDG CANBECALLEDDIRECTLYAFTEREJB3TORE R" )TSHME6WRUH CANBECALLEDDIRECTLYAFTERABUSINESSMETHOD R# /NEOFITSBUSINESSMETHODSCANBECALLEDDIRECTLYAFTEREJB3TORE R$ .ONEOFTHEABOVE

&KDSWHU

HQWLW\EHDQV\QFKURQL]DWLRQ

11

7HICHMETHODS FROMTHE%NTITY#ONTEXTINTERFACEMUST./4BEINVOKED FROMWITHINTHEEJB,OADMETHOD#HOOSEALLTHATAPPLY

R! JHW(-%+RPH R" JHW(-%2EMHFW R# JHW&DOOHU3ULQFLSDO R$ JHW8VHU7UDQVDFWLRQ R% VHW5ROOEDFN2QO\

12

7HICHMETHOD CALLEDONA#-0BEAN IS!,7!93ASSOCIATEDWITHASTATE CHANGEINTHEBEAN#HOOSEALLTHATAPPLY

R! HME/RDG R" HME)LQG R# HME5HPRYH R$ HME$FWLYDWH R% XQVHW(QWLW\&RQWH[W

13

7HATSTRUEABOUTAN#-0ENTITYBEANSPRIMARYKEY#HOOSEALLTHATAPPLY

R! 4HEBEANSPRIMARYKEYCLASSMUSTPROVIDEASUITABLEIMPLEMENTATIONOF THEHASH#ODEANDEQUALSMETHODS

R" 7HENSPECIFYINGTHEPRIMARYKEYINTHEDEPLOYMENTDESCRIPTOR ONLY THElELDNAMEMUSTBEDECLARED

R# !LLlELDSINTHEPRIMARYKEYCLASSMUSTBEDECLAREDPUBLIC R$ !LLlELDSUSEDINTHEPRIMARYKEYMUSTBECONTAINER MANAGEDlELDS

14

(OWMANYEJB#REATEMETHODSCANA#-0ENTITYBEANHAVE

R!  R"  R# OR R$ TOMANY R% TOMANY

\RXDUHKHUH



FRIIHHFUDPPRFNH[DP

15

7HICHMETHODS AREALWAYSINVOKEDINDIRECTRESPONSETOACLIENTOPERATION #HOOSEALLTHATAPPLY

R! HME/RDG R" HME&UHDWH R# HME5HPRYH R$HME$FWLYDWH R% HME3DVVLYDWH R&VHW(QWLW\&RQWH[W

16

7HICHADDITIONALMETHODS MIGHTTHECONTAINERCALLWHENINVOKING EJB2EMOVE#HOOSEALLTHATAPPLY

R! HME)LQG R" HME/RDG R# HME6WRUH R$ HME$FWLYDWH R% HME3DVVLYDWH

17

!TWHATPOINTS MUSTTHECONTAINERESTABLISHA#-0BEANSPRIMARYKEY #HOOSEALLTHATAPPLY

R!BEFORECALLINGQHZ,QVWDQFH R"BEFORECALLINGVHW(QWLW\&RQWH[W R# BEFORECALLINGHME&UHDWH R$ BEFORECALLINGHME3RVW&UHDWH

18

7HICHMETHODS RUNINTHETRANSACTIONCONTEXTOFTHEMETHODTHATCAUSES 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 1

7HATSTRUEFORABEANPROVIDERWHENCREATINGANENTITYBEANUSINGCONTAINER MANAGEDPERSISTENCE#HOOSEALLTHATAPPLY

R! #ONTAINER MANAGEDPERSISTENTlELDSMUSTBEDElNEDINTHEENTITYBEAN CLASS

R" #ONTAINER MANAGEDRELATIONSHIPlELDSMUSTBEDElNEDINTHEENTITY BEANCLASS

Collection

R# 7HENIMPLEMENTINGAONE TO MANYRELATIONSHIP THEJAVAUTIL,IST - OnlySet can be used

or

INTERFACEMUSTNOTBEUSED

R$ !CCESSORMETHODSFORCONTAINER MANAGEDRELATIONSHIPlELDSMUSTBE EXPOSEDINTHEBEANSREMOTECOMPONENTINTERFACE

2

7HICHOFTHEFOLLOWINGISALEGALACCESSORMETHODFORAPERSISTENTlELDINAN ENTITYBEANWITHCONTAINER MANAGEDPERSISTENCE#HOOSEALLTHATAPPLY

R! SXEOLFJHW&XVWRPHU1XP  R" SXEOLFYRLGJHW&XVWRPHU1XP  R# DEVWUDFWYRLGJHW&XVWRPHU1XP  R$ SXEOLFDEVWUDFWLQWJHW&XVWRPHU1XP 

3

lic abstracttÓ ub Òp be t us m It value of wha and return eltdheis... it IS after ever the ÞTER. all, a GET

7HICHOFTHEFOLLOWINGARELEGALACCESSORMETHODS INANENTITYBEANWITH CONTAINER MANAGEDPERSISTENCE#HOOSEALLTHATAPPLY

R! SXEOLFDEVWUDFWLQW*HW&XVWRPHU1XP  - you have to follow the Java naming convention R" SXEOLFDEVWUDFWLQWJHWFXVWRPHU1XP  R# SXEOLFDEVWUDFWLQWJHW&XVWRPHU1XP  R$ SXEOLFDEVWUDFWLQWJHW&XVWRPHU1XP ^`

- not legal Ja

va

\RXDUHKHUH



PRFNH[DPDQVZHUV

4

7HICHAREREQUIREMENTSFORA#-0ENTITYBEANCLASS#HOOSEALLTHATAPPLY

(spec: 190)

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

5

7HICHARELEGALDECLARATIONSFORA#-0BEANSEJB#REATEMETHODS#HOOSE ALLTHATAPPLY

(spec: 192)

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

- it canÕt be: - static - void - Þnal must return tprheimary type of the key

MDYD[HME&UHDWH([FHSWLRQ

R% SXEOLF¿QDO6WULQJHME&UHDWH  MDYD[HME&UHDWH([FHSWLRQ

6

7HICHARELEGALDECLARATIONSFORAMETHODINA#-0BEAN#HOOSEALLTHAT 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



&KDSWHU

(spec: 192-193)

- must be: abstract void ca - nÕt be static

HQWLW\EHDQV\QFKURQL]DWLRQ

7

7HICHMETHODS FROMTHE%NTITY#ONTEXTINTERFACECANBEINVOKEDFROM WITHINTHESET%NTITY#ONTEXTMETHOD#HOOSEALLTHATAPPLY

(spec: 179)

R! JHW(-%2EMHFW R" JHW(-%/RFDO+RPH last early for thecaseller tx. R# JHW&DOOHU,GHQWLW\ - just too he a t three. T reÕs no st means a R$ JHW&DOOHU3ULQFLSDO setEntityContext jupo going in the ol is an be R% VHW5ROOEDFN2QO\

8

7HICHCANBECALLEDONA#-0BEANTOTRANSITIONITFROMTHEREADYSTATETOTHE POOLEDSTATE#HOOSEALLTHATAPPLY

(spec: 168-169)

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 ejbPassivate() R% HME3DVVLYDWH 

9

7HICHMETHODS FROMTHE%NTITY#ONTEXTINTERFACECANBEINVOKEDFROM 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

10

7HATISTRUEFORA#-0BEANINTHEREADYSTATE

R! )TSHME/RDG CANBECALLEDDIRECTLYAFTEREJB3TORE R" )TSHME6WRUH CANBECALLEDDIRECTLYAFTERABUSINESSMETHOD R# /NEOFITSBUSINESSMETHODSCANBECALLEDDIRECTLYAFTEREJB3TORE R$ .ONEOFTHEABOVE

(spec: 179)

(spec: 169) - The poinet anis:d load, stor hods business metd by the can be callein any Container order

\RXDUHKHUH



PRFNH[DPDQVZHUV

11

7HICHMETHODS FROMTHE%NTITY#ONTEXTINTERFACEMUST./4BEINVOKED FROMWITHINTHEEJB,OADMETHOD#HOOSEALLTHATAPPLY

(spec: 180)

R! JHW(-%+RPH R" JHW(-%2EMHFW R# JHW&DOOHU3ULQFLSDO R$ JHW8VHU7UDQVDFWLRQ - for BMT only R% VHW5ROOEDFN2QO\

12

7HICHMETHOD CALLEDONA#-0BEAN IS!,7!93ASSOCIATEDWITHASTATE CHANGEINTHEBEAN#HOOSEALLTHATAPPLY

R! HME/RDG - not always! R" HME)LQG ck to the pool R# HME5HPRYH - bean goes ba R$ HME$FWLYDWH - bean comes out of the pool R% XQVHW(QWLW\&RQWH[W - bean goes from the pool to dea

th

13

7HATSTRUEABOUTAN#-0ENTITYBEANSPRIMARYKEY#HOOSEALLTHATAPPLY

(spec: 168-169)

)

(spec: 203, 275

R! 4HEBEANSPRIMARYKEYCLASSMUSTPROVIDEASUITABLEIMPLEMENTATIONOF THEHASH#ODEANDEQUALSMETHODS

R" 7HENSPECIFYINGTHEPRIMARYKEYINTHEDEPLOYMENTDESCRIPTOR ONLY THElELDNAMEMUSTBEDECLARED

- no, you need the type

R# !LLlELDSINTHEPRIMARYKEYCLASSMUSTBEDECLAREDPUBLIC R$ !LLlELDSUSEDINTHEPRIMARYKEYMUSTBECONTAINER MANAGEDlELDS

14



(OWMANYEJB#REATEMETHODSCANA#-0ENTITYBEANHAVE

R!  R"  R# OR R$ TOMANY R% TOMANY

&KDSWHU

let You donÕt hatvee betoans clients crea

(spec: 171)

HQWLW\EHDQV\QFKURQL]DWLRQ

15

7HICHMETHODS AREALWAYSINVOKEDINDIRECTRESPONSETOACLIENTOPERATION (spec: #HOOSEALLTHATAPPLY

R! HME/RDG R" HME&UHDWH R# HME5HPRYH R$HME$FWLYDWH R% HME3DVVLYDWH R&VHW(QWLW\&RQWH[W

16

17

ate, and Load, Passivon t setEntityC d tbyex the lle can be ca when it Container wants to

7HICHADDITIONALMETHODS MIGHTTHECONTAINERCALLWHENINVOKING EJB2EMOVE#HOOSEALLTHATAPPLY

R! HME)LQG R" HME/RDG R# HME6WRUH R$ HME$FWLYDWH R% HME3DVVLYDWH

171-172)

(spec: 176)

a bean has to be ready and loaded before it can do a remove - it may have cascading deletes to take care of

!TWHATPOINTS MUSTTHECONTAINERESTABLISHA#-0BEANSPRIMARYKEY #HOOSEALLTHATAPPLY

(spec: 175)

R!BEFORECALLINGQHZ,QVWDQFH R"BEFORECALLINGVHW(QWLW\&RQWH[W u set in the values yo es us r ne R# BEFORECALLINGHME&UHDWH ai t on re C C t the bPos ate the ej in t ha t so e R$ BEFORECALLINGHME3RVW&UHDWH ejbCreatready to use its key

bean is

18

7HICHMETHODS RUNINTHETRANSACTIONCONTEXTOFTHEMETHODTHATCAUSES THEIRINVOCATION#HOOSEALLTHATAPPLY

(spec: 174-178)

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 PD\EHZHFRXOGWU\ WKDW

2KUHDOO\"7RREDG\RXGRQ·W KDYHD&RQWDLQHUWRPDQDJH\RXU 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  ,GHQWLI\FRUUHFWDQGLQFRUUHFW VWDWHPHQWVRUH[DPSOHVDERXW SHUVLVWHQWUHODWLRQVKLSVUHPRYH SURWRFROVDQGDERXWWKHDEVWUDFW VFKHPDW\SHRID&03HQWLW\EHDQ

 ,GHQWLI\FRUUHFWDQGLQFRUUHFW VWDWHPHQWVRUH[DPSOHVDERXW UXOHVDQGVHPDQWLFVIRUUHODWLRQVKLS DVVLJQPHQWXSGDWLQJLQD&03EHDQ

 0DWFKWKHQDPHZLWKDGHVFULSWLRQRI SXUSRVHRUIXQFWLRQDOLW\IRUHDFKRI WKHIROORZLQJHMEQDPH!DEVWUDFW VFKHPDQDPH!HMEUHODWLRQVKLSUROH! FPU¿HOG!FPU¿HOGW\SH!DQG UHODWLRQVKLSUROHVRXUFH!

 ,GHQWLI\FRUUHFWO\LPSOHPHQWHG GHSOR\PHQWGHVFULSWRUHOHPHQWVIRU D&03EHDQ LQFOXGLQJFRQWDLQHU PDQDJHGUHODWLRQVKLSV 

 ,GHQWLI\FRUUHFWDQGLQFRUUHFWV\QWD[ IRUDQ(-%4/TXHU\LQFOXGLQJWKH 6(/(&7)520DQG:+(5(FODXVH

 ,GHQWLI\FRUUHFWDQGLQFRUUHFW VWDWHPHQWVRUH[DPSOHVDERXWWKH SXUSRVHDQGXVHRI(-%4/

 ,GHQWLI\FRUUHFWDQGLQFRUUHFW FRQGLWLRQDOH[SUHVVLRQVEHWZHHQ H[SUHVVLRQVOLNHH[SUHVVLRQVDQG FRPSDULVRQH[SUHVVLRQV 

&KDSWHU

:KDWLWUHDOO\PHDQV
HQWLW\EHDQUHODWLRQVKLSV

*MIVQNaQVOaW]ZUW^QMLI\IJI[M )MAGINEYOUHAVEAMOVIEAPPLICATIONITISNTMAKINGTHE FOLKSATIMDBCOMNERVOUS BUTITWORKSFORYOU 

,ZDQWWRVHHDOOWKH PRYLHVZLWKGLUHFWRUVZKR DUHQRPRUHWKDQGHJUHHV DZD\IURP.HYLQ%DFRQDQGWKH JHQUHLV´URPDQWLFKRUURUµ

9OUCANUSEITTOLOOKUPAMOVIE /NCEYOUHAVEAMOVIE YOUCANUSEITTOLAUNCHTHEMOVIE TRAILER 9OUCANDOALLKINDSOFSEARCHESTO SAY lNDALLSCI lMOVIES ORlNDALLACTIONMOVIESBYASPECIlCDIRECTOR 7ECANMAKEBEANSFOR-OVIE 4RAILER AND$IRECTOR"UT HOWDOTHEYMAPTOTHEDATABASE!NDHOWDOTHEYRELATE TOONEANOTHER

$IWHU

a foreign key Director tab into the le

0RYLH7DEOH 0RYLH,'

7LWOH

*HQUH

'LUHFWRU,'




&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


&URXFKLQJ3L[HOV+LGGHQ0RXVH7UDLOHU



)$/6(



-HVVLFD6DQW



7KH)LIWK$UUD\(OHPHQW7UDLOHU



)$/6(



6N\OHU6DIIRUG



7KH5HWXUQRIWKH%HDQ4XHHQ7UDLOHU



)$/6(



-RKQ'DZVRQ



/RUGRIWKH/RRSV7UDLOHU

Director doesnÕt have a reference to his movies.

The trailerÕs prim ary key always matches th e MovieID \RXDUHKHUH



HQWLW\EHDQUHODWLRQVKLSV

*]\_MLWV¼\_IV\\W\PQVSQV<)*4-; ?M_IV\\W\PQVSQV+4);;-; 7EKNOWWECANMAPTABLESTOBEANCLASSES NOPROBLEM !LLTHECOLUMNSBECOMEPERSISTENTlELDSINTHEBEANCLASS REPRESENTEDBYABSTRACTGETTERSANDSETTERS ANDWERE GOODTOGO%XCEPTIFTHISWEREACLASSANDNOTATABLE WE WOULDNTHAVEDESIGNEDITTHATWAY7EDPROBABLYMAKE THEMOVIECLASSALOTMOREFRIENDLYANDUSEFUL FOREXAMPLE SOTHATACLIENTCOULDWORKWITHJUSTTHEMOVIEBEAN RATHER THANHAVINGTOGETREFERENCESTOALLTHREEBEANS

0RYLH,'

7LWOH

*HQUH

'LUHFWRU,'




&URXFKLQJ3L[HOV+LGGHQ0RXVH

$FWLRQ







7KH)LIWK$UUD\(OHPHQW

$FWLRQ







7KH5HWXUQRIWKH%HDQ4XHHQ

)DQWDV\







/RUGRIWKH/RRSV

6FL¿





But this doe Look what thsne Õt look very client-friendly reference to al client would have to do... . a reference to l three tables! If the clie get a directorID fro a movie, they have to getnt has get a referencem the movie, then use that the to a Director. to

0RYLH

7UDLOHU,'

)LOH1DPH

'LUHFWRU,'

2VFDU:LQQHU

'HJUHHV 1DPH



&URXFKLQJ3L[HOV+LGGHQ0RXVH7UDLOHU



758(



-LP


7KH)LIWK$UUD\(OHPHQW7UDLOHU



)$/6(



-HVVLFD6DQW



7KH5HWXUQRIWKH%HDQ4XHHQ7UDLOHU



)$/6(



6N\OHU6DIIRUG



/RUGRIWKH/RRSV7UDLOHU



)$/6(



-RKQ'DZVRQ

a straight mapping from tables to classes



&KDSWHU

7UDLOHU JHW7UDLOHU,' JHW)LOH1DPH

JHW0RYLH,' JHW7LWOH 'LUHFWRU JHW*HQUH JHW'LUHFWRU,' JHW'LUHFWRU,' JHW
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

0RYLH

0RYLH

JHW0RYLH,' JHW7LWOH JHW*HQUH JHW'LUHFWRU,' JHW
we donÕt want to keep just the DirectorÕs foreign key

JHW0RYLH,' JHW7LWOH JHW*HQUH

We want reference at Director en o a tity BEAN

JHW'LUHFWRU

'LUHFWRU

JHW
JHW'LUHFWRU,' JHW2VFDU:LQQHU JHW'HJUHHV JHW1DPH

0RYLH+RPH FUHDWH ILQG%\3ULPDU\.H\ ILQG%\*HQUH OLVW$OO0RYLHV OLVW0RYLHV%\'LUHFWRU$QG*HQUH ILQG0RYLHV%\.HYLQ'HJUHHV

JHW0RYLHV

r have WeÕll let the Direcovtoie beans. a Collection of M

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 /.,9INOBJECTSEXCEPTDURINGDEPLOYMENT WHENYOU DOHAVETOMAPFROMYOURBEANSTOYOURTABLES !NDYOU GETALLTHEBENElTSOFCONTAINER MANAGEDPERSISTENCEAND SYNCHRONIZATION)MAGINEIFSOMEONECALLSASETTERMETHOD TOCHANGETHEDIRECTORSOSCARWINNINGSTATUS)FYOURE MANAGINGTHIS YOUDHAVETOGETA*$"#CONNECTIONAND SYNCHRONIZETHEDATABASEYOURSELF!NDOFCOURSE YOUDHAVE TOKNOWWHENISTHERIGHTTIME ETC"UTIFITSDIRECTORISALSOA BEAN YOUCALLASET7INNER METHOD ANDYOUREDONE /H ANDTHERESANOTHERCOOLTHING9OUMIGHTDECIDE FOR EXAMPLE TOBANISHASPECIlCDIRECTORFROMYOURDATABASE BECAUSEYOUTHINKHISMOVIESSUCKINANUNRECOVERABLEWAY .OPROBLEMDELETINGTHATDIRECTOR OBVIOUSLY"UTTHENWHAT HAPPENSTOTHEMOVIES(OWCANYOUHAVEMOVIESINTHE DATABASETHATDONTHAVEADIRECTOR7HATISTHEDATABASEIS ALREADYSETUPINSUCHAWAYTHATYOUARENTALLOWEDTOHAVEA NULLVALUEFORTHEDIRECTORCOLUMN)NOTHERWORDS WHATIFA MOVIECANNOTEXISTINTHEDATABASEWITHOUTADIRECTOR 9OUCANHANDLETHISBRAINLESSLY BYSETTINGUPTHE-OVIE TO $IRECTORBEANRELATIONSHIPINSUCHAWAYTHATWHENYOU DELETEADIRECTORFROMTHEDATABASE ALLOFHISMOVIESARE AUTOMATICALLYDELETED9OUDOTHISWITHONESIMPLETAGINTHE DEPLOYMENTDESCRIPTORAND0//&3OMEBODYCALLSREMOVE ONADIRECTORBEAN ANDREMOVE WILLAUTOMATICALLYBECALLED ONALLOFTHEMOVIEENTITYBEANSTHATHAVEAREFERENCETOTHIS DIRECTORASTHEVALUEOFTHEIRDIRECTORPERSISTENTlELD 

,IERWKWKH'LUHFWRUDQG WKH0RYLHDUHHQWLW\EHDQV \RXQHYHUKDYHWRZRUU\ DERXWV\QFKURQL]LQJDQ\ RIWKH0RYLH·VUHODWHG GDWDLIVRPHERG\XVHV WKH0RYLHEHDQWRFKDQJH VRPHWKLQJDERXWWKH'LUHFWRU HYHU\WKLQJ·VWDNHQFDUHRIE\ WKH&RQWDLQHU
\RXDUHKHUH



UHODWLRQVKLSPXOWLSOLFLW\

:MTI\QWV[PQX[IVLU]T\QXTQKQ\a $

7VM\W7VM

(DFK0RYLH 2QH0RYLH

%

PI[

2QH7UDLOHU (DFK7UDLOHU

7VM\W5IVa

2QH'LUHFWRU 2QH'LUHFWRU



PI[

PI[ PI[

0DQ\0RYLHV (DFK0RYLH

5IVa\W5IVa

$Q$FWRU 0DQ\$FWRUV



&KDSWHU

PI[UILM PI[

0DQ\0RYLHV $0RYLH

HQWLW\EHDQUHODWLRQVKLSV

5]T\QXTQKQ\aQV*MIV+TI[[M[ (ERESHOWITWORKSWITHOURBEANCODE4HISMULTIPLICITYNOTATION ISTHEONLY5-, LIKETHINGYOUHAVETOKNOWONTHEEXAM

7UDLOHU JHW7UDLOHU,' JHW)LOH1DPH

JHW0RYLH

(DFK0RYLH KDVH[DFWO\ RQH7UDLOHU

(DFK7UDLOHU KDVH[DFWO\ RQH0RYLH





0RYLH JHW0RYLH,' JHW7LWOH JHW*HQUH

(DFK$FWRU KDV]HURRU PRUH0RYLHV



JHW'LUHFWRU JHW7UDLOHU

(DFK'LUHFWRU KDV]HURRU PRUH0RYLHV

$FWRU

(DFK0RYLH KDVKDVRQHRU JHW$FWRU,' PRUH$FWRUV JHW1DPH  JHW$JHQW JHW7DOHQW

JHW0RYLHV

 'LUHFWRU

 (DFK0RYLH KDVH[DFWO\ RQH'LUHFWRU

JHW'LUHFWRU,' JHW2VFDU:LQQHU JHW'HJUHHV JHW1DPH

JHW0RYLHV

4OREADTHIS YOUHAVETOFOLLOWTHEARROWTOITSDESTINATION)N THE0ERSONTO0ETSRELATIONSHIP 0ERSONHASAMULTIPLICITYOF/.% BUT0ETSHASAMULTIPLICITYOF-!.9WHICHCOULDBEZERO 4O lNDOUTHOWMANY0ETSA0ERSONCANHAVE YOUHAVETOFOLLOW THEARROWOUTOF0ERSONANDINTO0ETS4HENUMBERCLOSESTTOTHE CLASSISTHEMULTIPLICITYOFTHATCLASSTOOTHERS)NOTHERWORDS HOW MANYOFTHATTYPEDOESTHEOTHERTYPEHAVE

3HUVRQ JHW3HWV

this number says how many PERSON objects does each PET have 

this numberany says how m each 3HWV PETS does ave h N PERSO 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\ PDQ\

0XOWLSOLFLW\ RQH 'LUHFWRU

0RYLH

&ROOHFWLRQJHW0RYLHV

'LUHFWRUJHW'LUHFWRU





)NTHE-OVIE TO $IRECTORRELATIONSHIP THEMULTIPLICITYOF -OVIEISMANYANDTHEMULTIPLICITYOF$IRECTORISONE !MULTIPLICITYOFONEMEANSTHEOBJECTYOURERELATEDTO HOLDSJUSTONEOFYOU $IRECTORHASAMULTIPLICITYOFONE SOTHE-OVIEOBJECTRELATED TO$IRECTORRETURNSJUSTASINGLE$IRECTORBEAN/+ TECHNICALLY THECOMPONENTINTERFACEOF$IRECTOR BUTYOUKNOWWHATWE MEANBYNOW  !MULTIPLICITYOFMANYMEANSTHEOBJECTYOURERELATEDTO HOLDSA#OLLECTIONOFYOU -OVIEHASAMULTIPLICITYOFMANY SOTHE$IRECTOROBJECT RELATEDTO-OVIERETURNSA#OLLECTIONOF-OVIEBEANS



&KDSWHU

Movie has a multiplicity of ÒmanyÓ in its relationship with Director. That does NOT mean that Movie has ÒmanyÓ Directors... it means that 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 Movie will return just one Director.

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 HOLDREFERENCESTOTHEENTITYBEAN4HERESTRICTIONSFOR#-2lELDSARE THATTHEYCANREFERONLYTOTHELOCALCOMPONENTINTERFACEOFTHEENTITY BEAN ANDTHATIFTHEMETHODRETURNSA#OLLECTION THEDECLAREDTYPE CANBEONLY#OLLECTIONOR3ETNOT-AP ,IST ETC 4HETERMINOLOGYISALITTLECONFUSINGBECAUSEBOTH#-0AND#-2 lELDSARECONTAINER MANAGEDPERSISTENTlELDS4HEYMIGHTHAVE CALLEDIT#-0#$CONTAINER MANAGEDPERSISTENTCOLUMNDATA lELDS AND#-02CONTAINER MANAGEDPERSISTENTRELATIONSHIP lELDS/F COURSE PERSISTENCEISNTRESTRICTEDTOJUSTRELATIONALDATABASE SOWERE USINGTHETERMhCOLUMNvALITTLELOOSELY"UTIN%*" ALLCONTAINER MANAGEDPERSISTENTlELDSWERE#-0lELDS BECAUSETHEREWASNO CONCEPTOFPERSISTENTRELATIONSHIPSIN%*"#-0

AW]VMMLIXIQZWNIJ[\ZIK\OM\\MZ[IVL[M\\MZ[NWZ MIKP+58NQMTLKWT]UV^IT]M[IVLMIKP+5:NQMTL ZMTI\QWV[PQX_Q\PIVW\PMZMV\Q\a 

$&05ILHOGLVDOZD\V DQRWKHUHQWLW\EHDQ·V ORFDOLQWHUIDFHW\SHRUD &ROOHFWLRQRIWKHP ,ILW·VD&ROOHFWLRQ LWPXVWEHHLWKHU MDYDXWLO&ROOHFWLRQRU MDYDXWLO6HW

<

&03ÀHOG

SXEOLFDEVWUDFW6WULQJJHW7LWOH  SXEOLFDEVWUDFWYRLGVHW7LWOH 6WULQJJ 



7KHRQO\GLIIHUHQFH EHWZHHQD&03ILHOGDQG D&05ILHOGLVWKH7<3(

make sure the and return typeargument match

&05 UHODWLRQVKLS ÀHOG

SXEOLFDEVWUDFW'LUHFWRUJHW'LUHFWRU  SXEOLFDEVWUDFWYRLGVHW'LUHFWRU 'LUHFWRUG 

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

Director must be the local component interface for the Director bean.

\RXDUHKHUH



WKHDEVWUDFWSHUVLVWHQFHVFKHPD

,MNQVQVOaW]Z¹IJ[\ZIK\XMZ[Q[\MVKM [KPMUIº^QZ\]ITNQMTL[IZMV¼\MVW]OP 4ODElNEPERSISTENTlELDSANDRELATIONSHIPS YOUNEEDTO CREATEANABSTRACTPERSISTENCESCHEMA$ElNINGTHEVIRTUAL lELDSISNTENOUGH9OURABSTRACTPERSISTENCESCHEMAISA COMBINATIONOFYOURVIRTUALlELDSINYOURBEANCLASS PLUS SOMETHINGSYOUWRITEINTHEDEPLOYMENTDESCRIPTOR 4HEWAYYOUDESCRIBE#-0lELDSINTHE$$ISSIMPLEAND STRAIGHTFORWARD7ITH#-2 YOULLHAVETODOALITTLEMORE TOSETTHINGSUP INCLUDINGDESCRIBINGTHEMULTIPLICITYFOR EACHOFTHETWOPARTICIPANTSINARELATIONSHIP "UTWELLGETTO#-2lELDSINJUSTAMINUTE&ORNOW WELL STARTWITHJUST#-0lELDS


,QWKH''

$QDEVWUDFWSHUVLVWHQWVFKHPD LVDFRPELQDWLRQRIVRPHVWXII \RXSXWLQWKHGHSOR\PHQW GHVFULSWRUSOXV\RXUDEVWUDFW JHWWHUVDQGVHWWHUV 7RJHWKHUWKH\WHOOWKH &RQWDLQHUKRZWRPDQDJH\RXU EHDQ·VSHUVLVWHQFHLQFOXGLQJ ERWKSHUVLVWHQW),(/'6 FDOOHG&03ILHOGV DQG SHUVLVWHQW5(/$7,216+,36 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!  fully-qualiÞed class SULPNH\FODVV!MDYDODQJ6WULQJSULPNH\FODVV! na me for the Þeld UHHQWUDQW!)DOVHUHHQWUDQW! th at represents the FPSYHUVLRQ![FPSYHUVLRQ! primary key DEVWUDFWVFKHPDQDPH!0RYLH6FKHPDDEVWUDFWVFKHPDQDPH! FPS¿HOG! hat ¿HOGQDPH!JHQUH¿HOGQDPH! hema so yt type it c s r u o y Name w which entit ust be FPS¿HOG! you kno nts. This name m FPS¿HOG! represe the DD!! ¿HOGQDPH!PRYLH,'¿HOGQDPH! unique in FPS¿HOG! FPS¿HOG! ¿HOGQDPH!\HDU¿HOGQDPH! ner told the Contitaiwhich FPS¿HOG! l Now that youÕve el manage, t One... FPS¿HOG! WHICH Þeldsdto the Special is ¿HOGQDPH!WLWOH¿HOGQDPH! of those Þel s y Þeld. FPS¿HOG! the primary ke SULPNH\¿HOG!PRYLH,'SULPNH\¿HOG!  HQWLW\!

7KHQDPLQJ FRQYHQWLRQLV 5(48,5(' EVWUDFW
WKHUH DUH QR

'XPE 4XHVWLRQV

Q:

(OWDOESTHE#ONTAINERKNOWTHETYPE OFTHEPERSISTENTlELD)SEEADElNITIONFORTHE PRIMARYKEYTYPEPRIM KEY CLASS BUT)DONT SEEANYTHINGFORTHEOTHER#-0lELDS

A:

4HE#ONTAINERFIGURESITOUTBASEDONTHE RETURNTYPEANDARGUMENTOFTHEABSTRACTGETTERS ANDSETTERSINTHEBEANCLASS!NDTHEYHADBETTER MATCH)FYOUHAVEAGET,IMIT.UM THATRETURNS ANINT YOUBETTERHAVEASET,IMIT.UMINTI THAT TAKESANINT

\RXDUHKHUH



HQWLW\EHDQUHODWLRQVKLSV

=[QVOZMTI\QWV[PQX[QVaW]ZKWLM )NYOURBEANCODE YOUUSEYOURVIRTUALRELATIONSHIPlELDSJUST ASYOUWOULDANYOTHERGETTERANDSETTER4HEONLYDIFFERENCE BETWEENUSINGAREALlELDIEANINSTANCEVARIABLEDECLAREDIN YOURCLASS ANDAVIRTUALlELDISTHATYOUCANACCESSYOURVIRTUAL lELDSONLYBYCALLINGTHEABSTRACTGETTERSANDSETTERSWHICHTHE #ONTAINERIMPLEMENTSATDEPLOY TIME  4HEONLYNEWRESTRICTIONISTHATARELATIONSHIPlELDCANBE ONLYALOCALCOMPONENTINTERFACETYPE9OUCANTHAVEA#-2 RELATIONSHIPlELDTHATUSESABEANS2EMOTEINTERFACE

9LUWXDOÀHOGLQWKHEHDQFODVV SXEOLFDEVWUDFW'LUHFWRUJHW'LUHFWRU  SXEOLFDEVWUDFWYRLGVHW'LUHFWRU 'LUHFWRUG 


type of a The argument and return ays another CMR Òvirtual ÞeldÓ is alwMUST be a Entity bean type, and itÕt have a virtual local interface!! You can te interface. Þeld to the entityÕs Remo

7KHW\SHRIDUHODWLRQVKLS ILHOG0867EHWKHORFDO FRPSRQHQWLQWHUIDFHRI WKHHQWLW\

([SRVHGEXVLQHVVPHWKRGLQWKHEHDQFODVV  SXEOLF'LUHFWRUJHW0RYLH'LUHFWRU ^ UHWXUQJHW'LUHFWRU  `

$&05ILHOGZLOO $/:$<6EHDORFDO FRPSRQHQWLQWHUIDFHW\SH

tor to a Now we can return the Direc getter. act str client, by calling the ab

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 Every relawto beans. exactly t

'HÀQHDQHMEUHODWLRQEHWZHHQWZREHDQV $

'HÀQHDQHMEUHODWLRQVKLSUROHIRURQHEHDQ    

. how many of Multiplicity of this bean (i.e ticipant have) par R PXOWLSOLFLW\IRUWKLVEHDQ this type will the OTHE g about? VRXUFHIRUWKLVEHDQ Which bean are we really talkin in the bean class FPUÀHOGIRUWKLVEHDQ Must match the Òvirtual ÞeldÓ

FDVFDGHGHOHWHIRUWKLVEHDQ

Only if THIS bean wa s to be deleted when its partner is dent leted. $

'HÀQHDQHMEUHODWLRQVKLSUROHIRUWKHVHFRQGEHDQ 

PXOWLSOLFLW\IRUWKLVEHDQ



VRXUFHIRUWKLVEHDQ



FPUÀHOGIRUWKLVEHDQ



FDVFDGHGHOHWHIRUWKLVEHDQ

for the Same stuffrticipant in second paionship the relat

\RXDUHKHUH



UHODWLRQVKLSVLQWKHGHSOR\PHQWGHVFULSWRU

5HODWLRQVKLSGHÀQLWLRQIRUWKH 'LUHFWRUWR0RYLHUHODWLRQVKLS

'LUHFWRU

0RYLH

&ROOHFWLRQJHW0RYLHV

'LUHFWRUJHW'LUHFWRU







'HÀQHDQHMEUHODWLRQEHWZHHQWZREHDQV Each descr HMEUHODWLRQ!  They REALLY should ha ibes one pair of beans... one relationship. ve named this $

'HÀQHDQHMEUHODWLRQVKLSUROHIRURQHEHDQ HMEUHODWLRQVKLSUROH!   HMEUHODWLRQVKLSUROHQDPH!'LUHFWRU%HDQHMEUHODWLRQVKLSUROHQDPH!



PXOWLSOLFLW\IRUWKLVEHDQ PXOWLSOLFLW\!2QHPXOWLSOLFLW\! 



VRXUFHIRUWKLVEHDQ

This is a made-up name! ItÕ choose to call the ROLE. s simply what you it ÒDirectorRoleÓ or anyt We could have called participant weÕre talking hing that tells us which about. Remember, this does NOT say how man y of the other participant the Director bean will hav e... many of THIS bean the OTHER partne it says how Movie will have only ONE Director. r will have.

UHODWLRQVKLSUROHVRXUFH! HMEQDPH!'LUHFWRU%HDQHMEQDPH! UHODWLRQVKLSUROHVRXUFH!



We can use any role-name we want, but sooner or later the Container must know EXACTLY which bean weÕre talking about. Put the beanÕs which is just a label telling the Container where to Þnd this beanÕs real deÞnition in the section of the DD. This MUST match an 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!



FDVFDGHGHOHWHIRUWKLVEHDQ QRWVSHFL¿HGIRUWKLVEHDQ

HMEUHODWLRQVKLSUROH! 



&KDSWHU

Use ONLY if other partner has a MANY relationshipthe to this bean, which means you will hold more tha n one, so you need a Collection. You can also say java.util.Set (your only two choices )

HQWLW\EHDQUHODWLRQVKLSV

$

'HÀQHDQHMEUHODWLRQVKLSUROHIRUWKHVHFRQGEHDQ HMEUHODWLRQVKLSUROH! HMEUHODWLRQVKLSUROHQDPH!0RYLH%HDQHMEUHODWLRQVKLSUROHQDPH!



PXOWLSOLFLW\IRUWKLVEHDQ PXOWLSOLFLW\!0DQ\PXOWLSOLFLW\!



VRXUFHIRUWKLVEHDQ UHODWLRQVKLSUROHVRXUFH! HMEQDPH!0RYLH%HDQHMEQDPH! UHODWLRQVKLSUROHVRXUFH!



Remember, this is just a name for your own (or the App Assembler or a toolÕs) use. It means nothing in your Java code. 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 e rather than a single Movie This MUST match the for where you deÞned the Movie entity bean in the section of the DD.

FPUÀHOGIRUWKLVEHDQ FPU¿HOG! FPU¿HOGQDPH!GLUHFWRUFPU¿HOGQDPH! FPU¿HOG!



FDVFDGHGHOHWHIRUWKLVEHDQ FDVFDGHGHOHWH!

HMEUHODWLRQVKLSUROH!

nÕt have a Look... no type! Webedocause it isnÕt a , the only reason Collection. In facteld-type> tag is thereÕs a

Put this in if you want THIS bean to be deleted whenever its partner is deleted.

HMEUHODWLRQ! \RXDUHKHUH



HQWLW\EHDQUHODWLRQVKLSV

6KDUSHQ \RXU SHQFLO (ERESTHERELATIONSHIP$$FOR$IRECTOR TO -OVIE BUTWEVELEFTAFEWTHINGSOUT3EEIF YOUCANlLLTHEMINCORRECTLYWITHOUTLOOKING ONTHEPREVIOUSPAGES

'LUHFWRU

0RYLH

&ROOHFWLRQJHW0RYLHV

'LUHFWRUJHW'LUHFWRU





, 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"

7UDLOHU

0RYLH

QRUHIHUHQFHWR0RYLH

7UDLOHUJHW7UDLOHU



: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! Leave the cmr-Þeld out of a FPU¿HOGQDPH!FPU¿HOGQDPH! FPU¿HOG! relationship role if you donÕt want HMEUHODWLRQVKLSUROH! this bean to hav

partner bean.

e a reference to its

\RXDUHKHUH



GLUHFWLRQDOLW\LQUHODWLRQVKLSV



1RZH·UHQRW

1RZH·UHQRW

7UDLOHU

0RYLH

$UH

'RQ·W\RXWKLQN,·G NQRZLI,ZHUHLQD UHODWLRQVKLS",GRQ·W HYHQOLNH\RX

$UH 1RW

0RYLH

7UDLOHU

0RYLH

7UDLOHU

7UDLOHU

0RYLH


7KDW·VQRWHYHQWKH %(67SDUW\RX·UHVHW WRFDVFDGHGHOHWHVRWKDW ZKHQ,GLH\RXGLH6R\RX EHWWHUWDNHJRRGFDUH RIPH

0RYLH 7UDLOHU



&KDSWHU

0RYLH

7UDLOHU

HQWLW\EHDQUHODWLRQVKLSV

+I[KILMLMTM\MKIVXZWXIOI\M

0RYLH

'LUHFWRU

7UDLOHU

,QZMK\WZ\W5W^QM ZMTI\QWV[PQX

5W^QM\W
'LUHFWRU FDQ·WFDVFDGHGHOHWH

0RYLH FRXOGFDVFDGHGHOHWHEXWGRHVQ·W ZDQWWR

0RYLHFDVFDGHGHOHWH! 7UDLOHUFDVFDGHGHOHWH!
%HFDXVHWKLVLVDRQHWRRQHUHODWLRQVKLSERWK SDUWQHUVFRXOGVHWDFDVFDGHGHOHWH%XWZH ZDQWLWWRJRLQRQO\RQHGLUHFWLRQZKHUH GHOHWLQJWKH0RYLHGHOHWHVWKH7UDLOHUEXW QRWWKHUHYHUVH-XVWEHFDXVHWKH7UDLOHU LVGHOHWHGGRHVQRWPHDQZHZDQWWKH0RYLH GHOHWHGEXWWKDW·VGHWHUPLQHGE\RXUEXVLQHVV ORJLFDQGQRW(-%UXOHV

D'LUHFWRUUHPRYH 'LUHFWRU

7UDLOHU

0RYLH

D0RYLHUHPRYH 'LUHFWRU

0RYLH

7UDLOHU

D7UDLOHUUHPRYH 'LUHFWRU

0RYLH

7UDLOHU

\RXDUHKHUH



UHODWLRQVKLSVLQWKHGHSOR\PHQWGHVFULSWRU


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! The abstract schema for persiste ¿HOGQDPH!JHQUH¿HOGQDPH! FPS¿HOG! Þelds is deÞned HERE in the FPS¿HOG! element under ,tity whe re ¿HOGQDPH!PRYLH,'¿HOGQDPH! all beans are described. FPS¿HOG! FPS¿HOG! missing!! There ¿HOGQDPH!\HDU¿HOGQDPH! WHOA! Notice whatfoÕs r Director. You FPS¿HOG! is NO eld> elements inside FPS¿HOG! donÕt list sect tionships> section FPS¿HOG! ONLY in the


&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\!

HQWHUSULVHEHDQV! UHODWLRQVKLSV! HMEUHODWLRQ!

ise-beans> section AFTER the section that uses have the eleme > section
HMEUHODWLRQVKLSUROH! HMEUHODWLRQVKLSUROHQDPH!'LUHFWRU%HDQHMEUHODWLRQVKLSUROHQDPH! PXOWLSOLFLW\!2QHPXOWLSOLFLW\! UHODWLRQVKLSUROHVRXUFH! This name MUST match someth HMEQDPH!'LUHFWRU%HDQHMEQDPH! DD, described in an eleing in this UHODWLRQVKLSUROHVRXUFH! ment in the section FPU¿HOG! FPU¿HOGQDPH!PRYLHVFPU¿HOGQDPH! FPU¿HOGW\SH!MDYDXWLO&ROOHFWLRQFPU¿HOGW\SH! FPU¿HOG! is only when your partner (not HMEUHODWLRQVKLSUROH! necessari

ly YOU) has a mu licity of Ma ny. This can be ONLY Collection or Setltip(NO T List, Map, etc.)

 HMEUHODWLRQVKLSUROH! HMEUHODWLRQVKLSUROHQDPH!0RYLH%HDQHMEUHODWLRQVKLSUROHQDPH! PXOWLSOLFLW\!0DQ\PXOWLSOLFLW\! FDVFDGHGHOHWH! MovieBean says, ÒYou can delete UHODWLRQVKLSUROHVRXUFH! me when you delete my Director HMEQDPH!0RYLH%HDQHMEQDPH! Ó UHODWLRQVKLSUROHVRXUFH! FPU¿HOG! FPU¿HOGQDPH!GLUHFWRUFPU¿HOGQDPH! FPU¿HOG! HMEUHODWLRQVKLSUROH! ause the Director has a HMEUHODWLRQ!

UHODWLRQVKLSV!

No bec tionship, so we return multiplicity of One in this rela n of Directors. 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^ VHW0RYLH,' PRYLH,'  VHW7LWOH WLWOH  VHW
r t Þelds, by calling ourence en ist rs pe r ou t se we refe Here e must NOT try toTha t has to abstract setters. WRE . PS HI ATIONS L t en ist rs pe n happens ow at our en inserted, and th be ve ha E W l ti un it wa 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[  Now itÕs safe to assign our persistent relationship ^KDQGOHH[FHSWLRQ` Þ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 ^ for the clien the d o h t e m ss e 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  uses a select methodturns a at th ZKLOH LWDKDV1H[W ^ re all movies. This selecaltMovie objects, 0RYLHPRYLH  0RYLH LWDQH[W  tu ac Collection of OLVW ³³PRYLHJHW0RYLH7LWOH  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 ^ Two exposed business methods from UHWXUQJHW7LWOH  the component interface... `  SXEOLF6WULQJJHW0RYLH'LUHFWRU1DPH ^ UHWXUQJHW'LUHFWRU JHW'LUHFWRU1DPH  ` SXEOLFDEVWUDFW6WULQJJHW0RYLH,'  SXEOLFDEVWUDFWYRLGVHW0RYLH,' 6WULQJL   SXEOLFDEVWUDFW6WULQJJHW7LWOH  SXEOLFDEVWUDFWYRLGVHW7LWOH 6WULQJW   SXEOLFDEVWUDFWLQWJHW
We have FIVE virtual Þelds: four CMP Þelds and one CMR Þeld for Director.

SXEOLFDEVWUDFW&ROOHFWLRQHME6HOHFW*HW$OO0RYLHV WKURZV)LQGHU([FHSWLRQ SXEOLFDEVWUDFW&ROOHFWLRQHME6HOHFW*HW0RYLHV%\'LUHFWRU$QG*HQUH 6WULQJGLU6WULQJ JHQUH WKURZV)LQGHU([FHSWLRQ  SXEOLFYRLGXQVHW(QWLW\&RQWH[W ^` SXEOLFYRLGHME/RDG ^` SXEOLFYRLGHME6WRUH ^` SXEOLFYRLGHME$FWLYDWH ^` SXEOLFYRLGHME3DVVLYDWH ^` SXEOLFYRLGHME5HPRYH ^`

The two select methods are declared as abstract methods. The Collection doesnÕt say WHAT the methods will return... but weÕll tell the Container that one will return a Collection of Movies and one a Collection of Strings.

The rest are regular old callback SXEOLFYRLGVHW(QWLW\&RQWH[W (QWLW\&RQWH[WFW[ ^ metho ds. FRQWH[W FW[

` `  \RXDUHKHUH



WKH0RYLH+RPH5HPRWHLQWHUIDFH


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 me ANYTHING about Þnde thods--you donÕt put rs You put them ONLY in in your bean class code. the home. (well, thatÕs not complet ely true...somewhere yo u have to tell the Contai ner HOW to implement the Þnders, which brings us to the next page...)



&KDSWHU

start with ll a s d o h t e m ss ne The home busi omeÓ when theyÕre in the H jb the preÞx Òe e home, they donÕt have h bean class. In t that preÞx.

HQWLW\EHDQUHODWLRQVKLSV

+RZWKHKHFN GRHVWKH&RQWDLQHU NQRZKRZWRLPSOHPHQW WKHVHOHFWPHWKRGV"

$QG ZKDW DERXWWKH)LQGHU PHWKRGV",FDQXQGHUVWDQG 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! ¿HOGQDPH!JHQUH¿HOGQDPH! FPS¿HOG! FPS¿HOG! ¿HOGQDPH!PRYLH,'¿HOGQDPH! FPS¿HOG! FPS¿HOG! ¿HOGQDPH!\HDU¿HOGQDPH! FPS¿HOG! FPS¿HOG! ¿HOGQDPH!WLWOH¿HOGQDPH! FPS¿HOG! SULPNH\¿HOG!PRYLH,'SULPNH\¿HOG!



Notice that weÕre not ma column (the one that ke pping the Director ID ep the Director table) be s the foreign key into caus persistent CMP Þeld fo e we donÕt HAVE a r that, when we can have the Director ID. Why do th entity bean, instead? T e real Director, as an ha comes in, but we donÕt tÕs where our CMR Þeld map that to a database . Relationships happen by matching up two BEANS the part in of the DD.

0RYLH,'

7LWOH

*HQUH

'LUHFWRU,'




&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, NQRZWKHKDSSLHU,DP:LWK (-%4/,GRQ·WKDYHWRNQRZ DQ\WKLQJDERXWWKHUHDOGDWDEDVH ZKHUHP\EHDQZLOOHQGXS UXQQLQJ

%*" 1,ISAPORTABLEQUERYLANGUAGETHATLETSYOU WRITE31, LIKESTATEMENTSWRITEINTOTHEDEPLOYMENT DESCRIPTOR9OUPUTTHEMINTHE8-,ANDWITHOUT HAVINGTOKNOWANYTHINGABOUTTHEREALDATABASE !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,

,QWKHEHDQFODVV

eturns a The method r ovie objects M Collection of

SXEOLFDEVWUDFW&ROOHFWLRQHME6HOHFW*HW$OO0RYLHV WKURZV)LQGHU([FHSWLRQ

,QWKHWKHGHSOR\PHQWGHVFULSWRU 6(/(&72%-(&7 P )5200RYLH6FKHPDP

This says ÒReturn what ever representing.Ó In this ex ÔmÕ is am to represent MovieSch ple, ÔmÕ is said ema which really means the Movie entity be Þrst part says, ÒGive me an type. So this Movie beansÓ.

:KDWLWUHDOO\VD\V ³*LYHPHDOOWKH0RYLHEHDQV´



&KDSWHU

ÔmÕ riable... ÒLet vie va a g in r la c e d o e This is just lik bstract schema from the M , ÒLet a e k represent the an REALLY think of it li type. c bean. But you e Movie component interface means, Y th ÔmÕ represent Movie beans. So it REALL s, d In other wor nt a Movie bean. se ÒLet ÔmÕ repre

HQWLW\EHDQUHODWLRQVKLSV

=[QVOIVWX\QWVIT?0-:-KTI][M 4HISEXAMPLECONSTRAINSTHEOBJECTSRETURNEDFROMTHESEARCH BYADDINGA7(%2% CLAUSETHATSAYSWHATEXTRACRITERIATHEOBJECTSHAVETOMEETBEFORETHEYQUALIFYFOR hTHINGSTHATCANBERETURNEDFROMTHEQUERYv4HE7(%2%CLAUSEISYOURWAYOF SAYING h$ONTJUSTGIVEME!.9OLD-OVIE)WANT/.,9THEMOVIESTHATv

,QWKHEHDQFODVV

eturns a The method fr Movie objects Collection o

SXEOLFDEVWUDFW&ROOHFWLRQHME6HOHFW*HW$OO0RYLHV WKURZV)LQGHU([FHSWLRQ

,QWKHWKHGHSOR\PHQWGHVFULSWRU

the e CMP Þeld in can b t us m Ó re en u Òg hich means yo Movie bean, w re() / setGenre() Þnd a getGen the bean class method pair in

this means the Þrst parameter to the method e h t This says we want the t n Let ÔmÕ reprteysepe rned to only u t e type of whatever ÔmÕ tubean r s e vi o n M a e e rns Movie b restrict th out to be... Þeld ÒgenreÓ P M C e h t e r e he those wh arameter of t rst p st r Þ e h t s e he Þ match he Ò1Ó means t he dot T d o h t e m t c st sele e Òm.genreÓ use ÒpathÓ h T . r e t e m a r a p a rator to make navigation ope an object-oriented in that navigates the left hand operand :KDWLWUHDOO\VD\V Ñ way. ItÕs simple he right hand is a ³*LYHPHDOOWKH0RYLHEHDQVWKDWDUHLQWKH a type, and t hat type. ItÕs almost is JHQUHPDWFKLQJWKH¿UVWSDUDPHWHUWRWKH ft member Þeld o g regular Java syntax to HME6HOHFW*HW$OO0RYLHVPHWKRG´ n exactly like usi enreÓ, where genre is an .g e say, ÒmyMovi (in this case, a virtual le instance variab .) persistent Þeld

6(/(&72%-(&7 P )5200RYLH6FKHPDP:+(5(PJHQUH "

\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

,QWKHWKHGHSOR\PHQWGHVFULSWRU

ns Òthe m.director mea ectorÕ in CMR Þeld ÔdirnÓ the Movie bea

ÒdegreesÓ is persistent Þa the Directo eld in r bean.

6(/(&72%-(&7 P )5200RYLH6FKHPDP:+(5(PGLUHFWRUGHJUHHV "

This says that we want objects returned wh is whatever ÔmÕ turnsosoue type t to be representing...

o you know? ... and what dthat ÔmÕ It turns out ovie bean means the M

restrict the Movies returned to only those where the MovieÕs Director has a CMP Ò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´



&KDSWHU

6L[GHJUHHVIURP.HYLQ%DFRQLVDSRSXODUJDPH ZKHUH\RXWU\WRWDNHD+ROO\ZRRGW\SHDQGVHH KRZPDQ\FRQQHFWLRQVLWWDNHVWRJHWWKDWSHUVRQ OLQNHGWR.HYLQ%DFRQµ

HQWLW\EHDQUHODWLRQVKLSV

;MTMK\QVOI^IT]MZI\PMZ\PIV\PM_PWTMJMIV 4HISEXAMPLEISFORAHOMEBUSINESSMETHODTHATTAKESTWOPARAMETERS ANDRETURNSNOT-OVIES BUT3TRINGS

,QWKHKRPH LQWHUIDFH

String, with all le ng si a ns ur t 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 6(/(&7PWLWOH)5200RYLH6FKHPDP

the ÒgenreÓ m.genre means the Movie bean CMP Þeld in

:+(5(PGLUHFWRUGLUHFWRU,' "$1'PJHQUH "

This restricts the matc Movies with a Director hes to only those equal to the Þrst para who has an ID meter to the method

AND whose Movie genre value equals the second parameter to the method

: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! 

terms (and in a B J E al m r o f In abstract schem the spec) the ECT variable type as a SELNGE variable, 25 is called a RA ges over the because it ran bean type. entire entity DFPSÀHOG!VLQJOHYDOXHW\SHIRUDQHQWLW\EHDQ 6(/(&72%-(&7 P )5200RYLH6FKHPDP



FPS¿HOG! ¿HOGQDPH!WLWOH¿HOGQDPH! FPS¿HOG!

6(/(&7PWLWOH)5200RYLH6FKHPDP

WLRQWR
UH2. $VD6(/(&7W\SHWKHVHD PWLWOHRUPJHQUH %XWWKLVLV1272. PGLUHFWRU WQRWD&05¿HOGZLWK


&KDSWHU

When you use a instead of a range variable, we call this a single-valued path expression. NOTE: weÕre deviating from standard spec naming conventions in our abstract schema name, because we want it to be OBVIOUS that weÕre using the schema name and not, say, the bean name. In the spec, the abstract schema name is the same as the component interface name.

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

to navigate a , t o d e h t g in 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
7KH0RYLH6FKHPDDEVWUDFWVFKHPDQDPH UHSUHVHQWVWKHEHDQW\SH $VLIE\PDJLFWKH&RQWDLQHUNQRZVZKLFK LQWHUIDFHYLHZWRUHWXUQORFDORU5HPRWH GHSHQGLQJRQZKHWKHUWKHLQYRFDWLRQRIWKH TXHU\FDPHIURPDKRPHRU5HPRWHLQWHUIDFH

0RYLH/RFDO

You never have to worry aboutype whether the t ote is local or Rem

JHW0RYLH,' JHW7LWOH JHW*HQUH JHW'LUHFWRU JHW7UDLOHU

:KHQ\RXVHHWKLV 0RYLH6FKHPDP

7KLQNWKLV P WKHFRPSRQHQWLQWHUIDFH DQGZH¶OOOHWWKH&RQWDLQHUVRUWRXWWKH 5HPRWHYVORFDOLVVXH



&KDSWHU

0RYLH5HPRWH JHW0RYLH,' JHW7LWOH JHW*HQUH JHW'LUHFWRU JHW7UDLOHU

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 DISTINCT mea Ó Òno duplicates

in the FROM, we declare identiÞcation variable Òm the 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  )5200RYLH6FKHPDP'LUHFWRU6FKHPDG

We declared two differe 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

?

(-%4/UHVHUYHGZRUGV 6(/(&7

25

)520

%(7:((1

:+(5(

/,.(

',67,1&7

,1

2%-(&7

$6

18//

81.12:1

758(

(037<

)$/6(

0(0%(5

127

2)

$1'

,6

DPH!PXVW 5HPHPEHUWKDWDQHMEQ WKHHMEMDU QLQ EHD FK EHXQLTXHIRUHD HFRPSOHWH ZKLFKPHDQVXQLTXHIRURQ HDEVWUDFW UWK ''7KHVDPHLVWUXHIR LTXHLQ XQ EH XVW LWP H! VFKHPDQDP WKH'' XFDQ¶WXVHDQ
 6(/(&72%-(&7 PRYLH LH RY )5200RYLHP

QRWXVHGLQWKHFXUUHQWYHUVLRQLW¶VIXWXUHXVHLVXQNQRZQ



&KDSWHU

:DWFKRXWIRU TXHVWLRQVZLWK QDPHFRQÁLFWV

In EJB-QL, ÒMovieÓ is the same as ÒmovieÓ, and you canÕt have conßicting names.

HQWLW\EHDQUHODWLRQVKLSV


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

0RYLH 0RYLH 0RYLH 0RYLH 0RYLH 0RYLH 0RYLH 0RYLH

(QWLWLHVUHWXUQHG IURPWKHTXHU\

0RYLH 0RYLH 0RYLH

movies e get only the their w , E R E H W g n in Usi value ÒHorrorÓ that have the reÓ. (In other words, CMP Þeld Ògenhose getGenre() method those movies wÒHorrorÓ.) would return

0RYLH

\RXDUHKHUH



WKH:+(5(FODXVH




%XW\RXEHWWHUFRPSDUHDSSOHVWRDSSOHV :+(5(PGLUHFWRU

or pare a Direct m co Õt n ca u o Y eric type! bean to a num



&KDSWHU

6W

HQWLW\EHDQUHODWLRQVKLSV


glance,

Þrst 6(/(&72%-(&7 G  Looks good on UT! This is )520'LUHFWRU6FKHPDG but WATCH O :+(5(GPRYLHVJHQUH µ+RUURU¶ NOT LEGAL.

'RJ

7HYCANTYOUDOTHIS ,ETSBACKUPANDIMAGINETHISIS*AVACODE(OWDOYOUNORMALLY USETHEDOTOPERATORIN*AVA9OUMIGHTDOSOMETHINGLIKE

2ZQHUR QHZ2ZQHU  RJHW'RJ EDUN 

method of Ow

ner method of Dog

YRLGEDUN

e can go This is Þne.he.. Owwner, get its through t call bark() on the Dog, and og. OwnerÕs d

2ZQHU 'RJD'RJ 'RJJHW'RJ

4HE/WNERHASAGET$OG METHOD ANDTHE$OGHASABARK  .OPROBLEM "UTWHATIFWECHANGEDTHE/WNERTOALLOWONE/WNERTOHAVE MULTIPLE$OGOBJECTS4HENWHATHAPPENS

2ZQHUR QHZ2ZQHU  RJHW'RJV EDUN 

method of Owner

really ho are weA Dog? w w o N !! S YIKE this method on? calling llection... Or a Co

2ZQHU &ROOHFWLRQGRJV &ROOHFWLRQJHW'RJV

\RXDUHKHUH



XVLQJFROOHFWLRQVLQDSDWK

+WTTMK\QWV[LWV¼\JIZS GXK

9OUCANTUSETHEDOTNAVIGATIONWHENSOMETHINGYOUREUSING INTHEPATHISA#OLLECTION&OREXAMPLEYOUCANTDOTHIS

2ZQHUR QHZ2ZQHU  RJHW'RJV EDUN 

2ZQHU &ROOHFWLRQGRJV &ROOHFWLRQJHW'RJV

you ollection. Aecntdion! C a s n ur t re 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



!NDSINCEhMOVIESvANDhGENREvAREVIRTUALlELDS WITHACCESSORS YOUCANTHINKOFITJUSTLIKETHIS

GJHW0RYLHV JHW*HQUH  µ+RUURU¶

'LUHFWRU JHW'LUHFWRU,' JHW2VFDU:LQQHU JHW'HJUHHV JHW1DPH

JHW0RYLHV



&KDSWHU

0RYLH JHW0RYLH,' JHW7LWOH JHW*HQUH JHW'LUHFWRU JHW7UDLOHU

6W

7KLQNDERXWLWZKDWZRXOG\RX EHWU\LQJWRVD\KHUH"7KDWWKH ZKROHFROOHFWLRQKDVDJHQUH"1R DFROOHFWLRQGRHVQ·WKDYHDJHW*HQUH  ,W·VWKHPRYLHVLQWKHFROOHFWLRQWKDW KDYHDJHW*HQUH 6RWKLVV\QWD[ GRHVQ·WPDNHVHQVH

HQWLW\EHDQUHODWLRQVKLSV


6(/(&7',67,1&72%-(&7 G  )520'LUHFWRU6FKHPDG,1 GPRYLHV P :+(5(PJHQUH µ+RUURU¶

Now ÒmÓ represents an individual Movie IN the movies Collection (a CMR Þeld of Director)

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Ó of Directors

an individual Let ÒmÓ represenllet ct n. So, ÒmÓ Movie IN the Co ent iothe Collection does NOT repres the Movie type, but ratherthe Collection is type (the type holding.)

7KH,1RSHUDWRULV / RYHUORDGHGLQ(-%4

20FODXVHLVGLIIHU 7KH,1RSHUDWRULQWKH)5 QRSHUDWRUXVHGLQD LVR SDU FRP HQWIURPWKH,1 :+(5(FODXVH XFDQVD\ ,QWKH:+(5(FODXVH\R DV\¶  GJHQUH,1 µ+RUURU¶µ)DQW D\LQJ RUV XWI RUWF VK DQGLWLVMXVWD HQUH µ)DQWDV\¶ GJ 25 RU¶ RUU µ+ H HQU GJ KWKH,1RSHUDWRU %XWLWKDVQRWKLQJWRGRZLW HVLJQDWHLQGLYLGXDO XVHGLQD)520FODXVHWRG VWUHPHPEHU RMX Q6 FWLR ROOH PHPEHUV,1D& RNDWWKHLQGLYLGXDO )520FODXVH,1VD\V³/R GUDWKHUWKDQXVLQJ REMHFWVLQWKH&ROOHFWLRQDQ VHWKHW\SHRIWKH WKH&ROOHFWLRQDVWKHW\SHX ´ LWHPV,1WKH&ROOHFWLRQ ³6HHLIWKH¿HOG :+(5(FODXVH,1VD\V OLWHUDOVLQWKLVVHW´ WKH YDOXHPDWFKHVRQHRI

\RXDUHKHUH



(-%4/%(7:((1


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'

clusive at BETWEEN is IN th ce ti no e pl am ed), In this ex 79 WILL be includ 19 d an 60 19 s ar (i.e. the ye ive TWEEN is EXclus E B T O N at th d an



&KDSWHU

,I,·P%(7:((1 DURFNDQGDKDUGSODFH ERWKWKHURFNDQGWKHKDUG SODFHDUH,1&/8'(', EHW\RXNQRZWKHIHHOLQJ

HQWLW\EHDQUHODWLRQVKLSV


6(/(&7',67,1&72%-(&7 P  )5200RYLH6FKHPDP :+(5(PJHQUH,1 µKRUURU¶µP\VWHU\¶

e ose movies whose genrlets th ly on rn tu re d ul wo of IN This query ÒmysteryÓ. This ßavored list. or rÓ ro or Òh r he eit at is g akin to an enumer you created somethin !NDTHERESALWAYS./4).FORTHOSETIMESWHEN YOUNEEDSOMEACTION

6(/(&7',67,1&72%-(&7 P  )5200RYLH6FKHPDP :+(5(PJHQUH127,1 µURPDQFH¶µFRPHG\¶

This query would return only those movies whose genre is NOT ÒromanceÓ or ÒcomedyÓ

´ µLV127WKH VDPHDV´!µ

D :KHQFRPSDULQJYDOXHVLQ V³QRW HDQ !´P :+(5(FODXVH³ GRI WHD LQV $7 7+ XVH HTXDOV´
6WULQJO LWH DUHLQ6 UDOV ,1*/( TXRWHV  :KLOHZH ¶UHRQWKH WRSLFRI VLVWHQFLH LQFRQ VEHWZHH Q-DYDV DQG(-% \QWD[ 4/GRQ ¶WEHWULFN D6WULQJL HGE\ QG :521* RXEOHTXRWHV7K  LQ(-%4 LVLV / :+(5( PIRR,1   ³E ,WPXVWE H µEDU¶µE DU´³ED]´ D]¶

\RXDUHKHUH



,6(037<


6(/(&7',67,1&72%-(&7 G  )520'LUHFWRU6FKHPDG :+(5(GPRYLHV,6(037<

those directors ly on ns ur t re y This quer made any movies. have not

who


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


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 es for movies whose Þlm codes arseearinchth e 7Xmm family.

l is a wildcard The Ò_Ó sylembo acter for a sing char


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 HQWLW\EHDQV

ƒ $FRQWDLQHUPDQDJHGUHODWLRQVKLS &05 ILHOGLVGHILQHG LQWKHEHDQFODVVMXVWDVD&03ILHOGLV³ZLWKDSDLURI DEVWUDFWJHWWHUVDQGVHWWHUVWKDWUHWXUQHLWKHUWKHORFDO FRPSRQHQWLQWHUIDFHRIWKHEHDQRUD&ROOHFWLRQ

ƒ ,IWKHYLUWXDOILHOGLVD&ROOHFWLRQLWPXVWEHGHFODUHGDV HLWKHUMDYDXWLO&ROOHFWLRQRUMDYDXWLO6HW1RRWKHU&ROOHF WLRQW\SHLVDOORZHGDVWKHGHFODUHGUHWXUQW\SHRID&05 ILHOG

ƒ 5HODWLRQVKLSVKDYHPXOWLSOLFLWLHV³WKH\FDQEHRQHWR RQHRQHWRPDQ\RUPDQ\WRPDQ\ 0DQ\WRRQHZRUNV LQWKHVDPHZD\WKDWRQHWRPDQ\ZRUNVLWMXVWGHSHQGV RQZKRVHSRLQWRIYLHZ\RX·UHXVLQJ

ƒ )RUH[DPSOHD0RYLHEHDQKDVDPDQ\WRRQHUHODWLRQ VKLSZLWKD'LUHFWRUEHDQ(DFK0RYLHKDVRQO\RQH 'LUHFWRUEXWD'LUHFWRUFDQKDYHPDQ\0RYLHV

ƒ 0XOWLSOLFLW\DIIHFWVWKHUHWXUQW\SHRIWKHYLUWXDOILHOG 0RYLHKDVRQO\RQH'LUHFWRUVRWKH&05ILHOGLQWKH EHDQLVJHW'LUHFWRU WKDWUHWXUQVDUHIHUHQFHWRD 'LUHFWRU·VORFDOFRPSRQHQWLQWHUIDFH%XWD'LUHFWRUKDV PDQ\PRYLHVVRD'LUHFWRU·VYLUWXDOILHOGLVJHW0RYLHV  ZKLFKUHWXUQVD&ROOHFWLRQ

ƒ $&03EHDQPXVWGHILQHDQ´DEVWUDFWSHUVLVWHQFHVFKH PDLQWKH''WKDWOLVWVHDFKRIWKHEHDQ·V&03ILHOGV DQGDOVRLGHQWLILHVZKLFKRIWKHILHOGVLVWKHSULPDU\NH\ XQOHVVLW·VDFRPSRXQGSULPDU\NH\ 7KH''PXVW DOZD\VGHILQHWKHW\SHRIWKHSULPDU\NH\HYHQLIWKH SULPDU\NH\LVQRWDILHOGRIWKHEHDQ 5HPHPEHULIWKH SULPDU\NH\LVQRWDILHOGRIWKHEHDQLWPXVWEHDSUL PDU\NH\FODVVFRPSRVHGRI&03ILHOGVIURPWKHEHDQ ƒ 5HODWLRQVKLS &05 ILHOGVDUHQRWGHILQHGLQWKHHQWHU SULVHEHDQ!SRUWLRQRIWKH'' ZKHUH\RXGHILQH\RXU &03ILHOGV EXWDUHLQVWHDGGHILQHGLQWKHUHODWLRQ VKLSV!VHFWLRQRIWKH'' ƒ (DFKUHODWLRQVKLSPXVWKDYHWZRSDUWQHUVZLWKHDFK SDUWQHUGHVFULEHGLQDQHMEUHODWLRQVKLSUROH!HOHPHQW WKDWLQFOXGHVWKH&05ILHOGQDPHWKHVRXUFH HME QDPH! IRUWKHSDUWQHUWKHPXOWLSOLFLW\ LHKRZPDQ\RI 

&KDSWHU

WKLVEHDQZLOOWKHRWKHUSDUWQHUKDYH DQGDQRSWLRQDO FDVFDGHGHOHWH! ZKLFKVD\V´'HOHWHPHLIP\SDUWQHU LVGHOHWHGµ ƒ 5HODWLRQVKLSVFDQEHRQHZD\ XQLGLUHFWLRQDO RU WZRZD\ ELGLUHFWLRQDO $XQLGLUHFWLRQDOUHODWLRQVKLSLV GHVFULEHGLQWKH''LQWKHVDPHZD\DVDELGLUHFWLRQDO UHODWLRQVKLSH[FHSWWKDWRQO\RQHRIWKHWZRSDUWQHUV KDVD&05ILHOG7KLVPHDQVEHDQ$KDVDUHIHUHQFHWR EHDQ% WKH\·UHLQDUHODWLRQVKLS EXWEHDQ%GRHVQRW KDYHDUHIHUHQFHEDFNWR$'LUHFWLRQDOLW\GRHVQRWDIIHFW PXOWLSOLFLW\RUFDVFDGHGHOHWHLWMXVWPHDQVWKDWRQO\RQH RIWKHWZRSDUWQHUVKDVDUHIHUHQFHWRWKHRWKHU7RWKH &RQWDLQHUWKH\·UHVWLOOLQDUHODWLRQVKLS

ƒ &DVFDGHGHOHWHVWHOOWKH&RQWDLQHUWRGHOHWHWKHEHDQ ZLWKWKHFDVFDGHGHOHWH!WDJZKHQWKHEHDQ·VSDUWQHU LVGHOHWHG7KLVZRUNVRQO\LIWKHEHDQKDVDPXOWLSOLF LW\RIRQH
ƒ $EHDQFDQQRWDFFHVVLWV&05ILHOGVLQHME&UHDWH LW PXVWZDLWXQWLOHME3RVW&UHDWH EHIRUHVD\DVVLJQLQJ WKH&05YLUWXDOILHOGDQDFWXDOYDOXH,QRWKHUZRUGV\RX FDQ·WXVH\RXUDEVWUDFWJHWWHUVDQGVHWWHUVIRU\RXU&05 ILHOGVXQWLODIWHUHME&UHDWH FRPSOHWHV

ƒ (-%4/LVDSRUWDEOHTXHU\ODQJXDJH\RXFDQXVHWR VSHFLI\\RXUTXHULHVIRUERWKILQGHUDQGVHOHFWPHWKRGV

ƒ ,QDQ(-%4/TXHU\WKH6(/(&7DQG)520FODXVHV DUHUHTXLUHGWKH:+(5(FODXVHLVRSWLRQDO

ƒ $6(/(&7FDQUHWXUQHLWKHUDQDEVWUDFWVFKHPDW\SH! ZKLFKUHDOO\PHDQVWKHEHDQ·VORFDOFRPSRQHQWLQWHU IDFHW\SH RUDVLQJOHYDOXHILHOG

ƒ ,I\RXXVHWKHGRWQRWDWLRQIRUQDYLJDWLQJDSDWK IRUH[ DPSOHPJHQUH \RXFDQ·WXVHD&ROOHFWLRQW\SHDVSDUW RIWKHSDWK7RXVHD&ROOHFWLRQW\SHDVSDUWRID)520 FODXVH\RXPXVWHQFORVHLWXVLQJWKH,1 GPRYLHV  RSHUDWRU

HQWLW\EHDQUHODWLRQVKLSV

: MTI\QWV[PQXI[[QOVUMV\[ !-OVIECANHAVEONLYONE$IRECTOR)FYOUSETA -OVIES$IRECTORlELDTO$IRECTOR THE-OVIE WILLBEIN$IRECTORSCOLLECTIONOF-OVIES BUT INNOOTHER$IRECTORSCOLLECTION)FYOULATER REASSIGNTHE-OVIES$IRECTORlELDSOTHATTHE -OVIEHASADIFFERENT$IRECTORˆ$IRECTORˆTHE PREVIOUS$IRECTOR$IRECTOR WILLNOLONGER HAVETHAT-OVIEINITS#OLLECTION

1RWKDWPRYLH VKRXOGEH0,1(,I D0RYLHFDQKDYHRQO\ RQH'LUHFWRUWKHQ ,·PLW

,GLUHFWHGWKDW PRYLH7KDWPRYLH LV0,1(,WEHORQJVLQ 0<&ROOHFWLRQ

4HISALLHAPPENSAUTOMATICALLY4OMAINTAINTHE INTEGRITYOFTHEDATABASE THE#ONTAINERMANAGES BOTHSIDESOFTHERELATIONSHIPATALLTIMES

'LUHFWRU

'LUHFWRU

%HIRUH 0RYLH%

0RYLH'

0RYLH$ 0RYLH& 'LUHFWRU

7KUHH0RYLHVLQ'LUHFWRU ·V0RYLH&ROOHFWLRQ,I\RX FDOOJHW'LUHFWRU RQDQ\RI WKHVH0RYLHVWKH\ZLOOUHWXUQ 'LUHFWRU

7KHUHLVRQO\RQH0RYLH LQ'LUHFWRU·V&ROOHFWLRQ ,W·VWKHRQO\0RYLHWKDW ZLOOUHWXUQ'LUHFWRULI 'LUHFWRU \RXFDOOJHW'LUHFWRU RQ WKH0RYLH

PRYLH$VHW'LUHFWRU PRYLH'JHW'LUHFWRU 

ie AÕs this says, ÒsetbeMwovhatever the Director to r Movie D.Ó Director is fo

$IWHU

0RYLH%

0RYLH$

0RYLH'

0RYLH&

'LUHFWRU

0RYLH$FDQKDYHRQO\RQH'LUHFWRUVRZKHQ ZHUHDVVLJQHGWKH'LUHFWRUIRU0RYLH$WR EH'LUHFWRU0RYLH$ZDVDXWRPDWLFDOO\ 5(029('IURP'LUHFWRU·V&ROOHFWLRQRI 0RYLHV5HPHPEHUWKH&RQWDLQHUPDQDJHV ERWKVLGHVRIWKHUHODWLRQVKLS

:KHQZHUHDVVLJQHGWKH 'LUHFWRURI0RYLH$WKDW0RYLH DXWRPDWLFDOO\PRYHGLQWR'LUHFWRU 'LUHFWRU ·V&ROOHFWLRQRI0RYLHV

\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

%HFDXVHWKH'LUHFWRUWR0RYLHUHODWLRQVKLSLV2QHWR0DQ\D 0RYLHFDQ1(9(5H[LVWLQPRUHWKDQRQH'LUHFWRU·V&ROOHFWLRQ,I \RXFKDQJHD0RYLH·V'LUHFWRUWKH0RYLHLVQRWFRSLHG,WLVPRYHG WRWKHQHZ'LUHFWRU·V&ROOHFWLRQ

'LUHFWRU

7KH',5(&725UHIHUHQFHZDV&23,('IURPRQH0RYLHWRDQRWKHU

0RYLH$ 0RYLH' 'LUHFWRU



&KDSWHU

'LUHFWRU

0RYLH'

Movie DÕs reference wasoved. copied, not m

HQWLW\EHDQUHODWLRQVKLSV

0XOWLSOLFLW\DQG$VVLJQPHQWV

([HUFLVH *LYHQWKLVUHODWLRQVKLS HMEUHODWLRQVKLSUROHQDPH!0RYLH%HDQHMEUHODWLRQVKLSUROHQDPH! PXOWLSOLFLW\!2QHPXOWLSOLFLW\! HMEUHODWLRQVKLSUROHQDPH!7UDLOHU%HDQHMEUHODWLRQVKLSUROHQDPH! PXOWLSOLFLW\!2QHPXOWLSOLFLW\!

$QGWKLVFXUUHQWVFHQDULR

7UDLOHU%

0RYLH

7UDLOHU$

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%

0RYLH

7UDLOHU$

0RYLH

'UDZZKDWWKHSLFWXUHZLOOORRNOLNHDIWHU\RXUXQ PRYLHVHW7UDLOHU PRYLHJHW7UDLOHU 

null 7UDLOHU% 7UDLOHU$

0RYLH

0RYLH

$QVZHUWKHVHTXHVWLRQV PRYLHJHW7UDLOHU PRYLHJHW7UDLOHU WUDLOHU$JHW0RYLH WUDLOHU%JHW0RYLH 

&KDSWHU

null

returns trailerB so a Trailer can have returns null! Movie has a multiplicity of One, Movie 1 and Movie 2 both only ONE Movie. A Trailer canÕt be with of One, so there can also returns null... Trailer has a multiplicity went to Movie 1, lerB Trai n Whe be only one Trailer per Movie. relationship. the from ted nnec TrailerA was kicked out, disco

returns Movie1, not that it has been assigned to Movie1, the Container updates the Þeld returned from the TrailerÕs getMovie().

HQWLW\EHDQUHODWLRQVKLSV

0RFN([DP 1

7HATSTRUEFORANENTITYBEANPROVIDERUSINGCONTAINER MANAGEDPERSISTENCE TOCREATEPERSISTENTRELATIONSHIPS#HOOSEALLTHATAPPLY

R! !LOCALINTERFACEISREQUIREDFORSUCHABEANTOHAVEABIDIRECTIONAL RELATIONSHIPWITHANOTHERENTITYBEAN

R" 3UCHABEANCANHAVERELATIONSHIPSWITHONLYSESSIONBEANS R# 2ELATIONSHIPSCANBEONLYONE TO ONEORONE TO MANY R$ !GETTERMETHODRETURNTYPECANBEJAVAUTIL,IST

2

7HATSTRUEFORANENTITYBEANPROVIDERUSINGCONTAINER MANAGEDPERSISTENCE TOCREATEPERSISTENTRELATIONSHIPS#HOOSEALLTHATAPPLY

R! !REMOTEINTERFACEISREQUIREDFORSUCHABEANTOHAVEABIDIRECTIONAL RELATIONSHIPWITHANOTHERENTITYBEAN

R" 3UCHABEANCANHAVERELATIONSHIPSWITHONLYMESSAGE DRIVENBEANS R# !GETMETHODRETURNTYPECANUSEJAVAUTIL-AP R$ 2ELATIONSHIPSCANBEONE TO ONE ONE TO MANY ORMANY TO MANY

3

7HENAREMOTECLIENTINVOKESAMETHODONANENTITYBEANUSINGCONTAINER 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

4

'IVENTHECONTAINER MANAGEDUNIDIRECTIONALRELATIONSHIP &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

5

)FANENTITYBEAN!HASBEENREMOVEDFROMARELATIONSHIPWITHBEAN" IN WHICHCASES WILLBEAN!SACCESSORMETHODFORBEAN"RETURNANON NULL VALUE#HOOSEALLTHATAPPLY

R! ONE TO ONE R" MANY TO ONE R# MANY TO MANY R$ ALLOFTHEABOVE R% NONEOFTHEABOVE

6

7HICHDEPLOYMENTDESCRIPTORELEMENTSVALUES MUSTBEATYPEOFCOLLECTION #HOOSEALLTHATAPPLY

R! HMEQDPH! R" FPU¿HOG! R# FPU¿HOGW\SH! R$ HMEUHODWLRQ! 

&KDSWHU

HQWLW\EHDQUHODWLRQVKLSV

7

7HICHDEPLOYMENTDESCRIPTORELEMENTS MUSTHAVEEXACTLYTWODECLARATIONS OFANOTHERDEPLOYMENTDESCRIPTORELEMENT#HOOSEALLTHATAPPLY

R! HMEQDPH! R" FPU¿HOG! R# FPU¿HOGW\SH! R$ HMEUHODWLRQ! R% HMEUHODWLRQVKLSUROH!

8

7HICHSETS OFELEMENTSAREMANDATORYWITHINANEJB RELATIONSHIP ROLE ELEMENT#HOOSEALLTHATAPPLY

R! FPU¿HOG!PXOWLSOLFLW\! R" FPU¿HOG!UHODWLRQVKLSUROHVRXUFH! R# PXOWLSOLFLW\!UHODWLRQVKLSUROHQDPH! R$ PXOWLSOLFLW\!UHODWLRQVKLSUROHVRXUFH! R% UHODWLRQVKLSUROHQDPH!UHODWLRQVKLSUROHVRXUFH!

9

10

7HICHAREVALIDVALUESFORACMR lELD TYPEELEMENT#HOOSEALLTHATAPPLY

R! 3TRING R" )NTEGER R# MDYDXWLO6HW R$ MDYDXWLO/LVW R% MDYDXWLO&ROOHFWLRQ 7HICHSETS OFELEMENTSAREMANDATORYWITHINANEJB RELATIONELEMENT

R! HMEUHODWLRQQDPH!HMEUHODWLRQVKLSUROH! R" HMEUHODWLRQVKLSUROH!HMEUHODWLRQVKLSUROH! R# GHVFULSWLRQ!HMEUHODWLRQQDPH! HMEUHODWLRQVKLSUROH!

R$ HMEUHODWLRQQDPH!HMEUHODWLRQVKLSUROH! HMEUHODWLRQVKLSUROH!

\RXDUHKHUH



FRIIHHFUDPPRFNH[DP

11

'IVEN#-0BEANS#USTOMER"EAN /RDER"EAN AND,INE)TEMS"EANWITHTHE 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

12

'IVEN#-0BEANS#USTOMER"EAN /RDER"EAN AND,INE)TEMS"EANWITHTHE 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



&KDSWHU



&2/-/RDERO

HQWLW\EHDQUHODWLRQVKLSV

13

7HATSTRUEABOUT%*"1,PATHEXPRESSIONS#HOOSEALLTHATAPPLY

R! )NAPATHEXPRESSIONTHE  ISCONSIDEREDTHENAVIGATIONOPERATOR R" 0ATHEXPRESSIONSCANTERMINATEWITHEITHERFPU¿HOGORFPS¿HOG R# !PATHEXPRESSIONTHATENDSINAFPU¿HOGCANNOTBEFURTHER COMPOSED

R$ !PATHEXPRESSIONCANENDWITHASINGLEVALUEORACOLLECTIONVALUE

14

7HATSTRUEABOUT%*"1,QUERIES#HOOSEALLTHATAPPLY

R! /FTHETHREECLAUSETYPES 3%,%#4 &2/- AND7(%2% ONLYTHE 3%,%#4CLAUSEISREQUIRED

R" 4HE3%,%#4CLAUSEDESIGNATESQUERYDOMAIN R# 4HE7(%2%CLAUSEDETERMINESTHETYPESOFOBJECTSTOBESELECTED R$ !N%*"1,QUERYMAYHAVEPARAMETERS

15

7HATSTRUEABOUT%*"1,7(%2%CLAUSES#HOOSEALLTHATAPPLY

R! )DENTIlCATIONVARIABLESUSEDINA7(%2%CLAUSECANBEDElNEDONLYIN THE&2/-CLAUSE

R" )DENTIlCATIONVARIABLESCANREPRESENTASINGLEVALUEORACOLLECTION R# 4HENUMBEROFINPUTPARAMETERSMUSTEQUALTHENUMBEROF PARAMETERSFORTHElNDERORSELECTORMETHOD

R$ )NPUTCLAUSESCANONLYBEUSEDIN7(%2%CLAUSES

16

'IVENTHE%*"1,EXPRESSION S GLVFRXQW%(7:((1$1' 7HICHEXPRESSIONISEQUIVALENT

R! SGLVFRXQW!$1'SGLVFRXQW R" SGLVFRXQW! $1'SGLVFRXQW R# SGLVFRXQW!DQGSGLVFRXQW  R$ SGLVFRXQW! DQGSGLVFRXQW 

\RXDUHKHUH



FRIIHHFUDPPRFNH[DP

17

7HATSTRUEABOUT%*"1, ).EXPRESSIONS#HOOSEALLTHATAPPLY

18

'IVENTHE%*"1,EXPRESSION

R! 4HEVLQJOHBYDOXHGBSDWKBH[SUHVVLRQMUSTHAVEA3TRINGVALUE R" 4HE./4LOGICALOPERATORCANBEUSEDINAN).EXPRESSION R# 4HESTRINGLITERALLISTCANBEEMPTY R$ 4HEFOLLOWINGEXPRESSIONISLEGALRFRXQWU\).h5+v h53v

PRODUCTCODE,)+%@&?S 7HICHVALUES WOULDRESULTINATRUECOMPARISON#HOOSEALLTHATAPPLY

R! &S R" &S R# &8S R$ &S R%&ITS



&KDSWHU

HQWLW\EHDQUHODWLRQVKLSV

0RFN([DP$QVZHUV 1

7HATSTRUEFORANENTITYBEANPROVIDERUSINGCONTAINER MANAGEDPERSISTENCE TOCREATEPERSISTENTRELATIONSHIPS#HOOSEALLTHATAPPLY

R! !LOCALINTERFACEISREQUIREDFORSUCHABEANTOHAVEABIDIRECTIONAL RELATIONSHIPWITHANOTHERENTITYBEAN

R" 3UCHABEANCANHAVERELATIONSHIPSWITHONLYSESSIONBEANS R# 2ELATIONSHIPSCANBEONLYONE TO ONEORONE TO MANY ion or Set R$ !GETTERMETHODRETURNTYPECANBEJAVAUTIL,IST - must be Collect

2

7HATSTRUEFORANENTITYBEANPROVIDERUSINGCONTAINER MANAGEDPERSISTENCE 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 MANAGEDPERSISTENCE ANDTHATBEANHASALREADYBEENREMOVED WHAT EXCEPTIONWILLBETHROWN

(spec: 132)

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

4

'IVENTHECONTAINER MANAGEDUNIDIRECTIONALRELATIONSHIP

(spec: 138)

&OO 

"AR  !NDTHEOBJECTRELATIONS F 

B F

B

7HATWILLBETRUEAFTERTHEFOLLOWINGCODERUNS #HOOSEALLTHATAPPLY I VHW%DU IJHW%DU 

R! IJHW%DU  QXOO R" EJHW)RR  QXOO R# EJHW)RR  QXOO R$ NONEOFTHEABOVE

5

The setBar() method ÒbreaksÓ both of the existing object relationships and creates a single new one.

)FANENTITYBEAN!HASBEENREMOVEDFROMARELATIONSHIPWITHBEAN" IN WHICHCASES WILLBEAN!SACCESSORMETHODFORBEAN"RETURNANON NULL VALUE#HOOSEALLTHATAPPLY

(spec: 132)

R! ONE TO ONE R" MANY TO ONE R# MANY TO MANY R$ ALLOFTHEABOVE R% NONEOFTHEABOVE

6

7HICHDEPLOYMENTDESCRIPTORELEMENTSVALUES MUSTBEATYPEOFCOLLECTION #HOOSEALLTHATAPPLY

R! HMEQDPH! R" FPU¿HOG! R# FPU¿HOGW\SH! - Collection or Set. R$ HMEUHODWLRQ!



&KDSWHU

)

(spec: 463-464

HQWLW\EHDQUHODWLRQVKLSV

7

7HICHDEPLOYMENTDESCRIPTORELEMENTS MUSTHAVEEXACTLYTWODECLARATIONS OFANOTHERDEPLOYMENTDESCRIPTORELEMENT#HOOSEALLTHATAPPLY

)

(spec: 467-468

R! HMEQDPH! R" FPU¿HOG! R# FPU¿HOGW\SH! ve two its gotta ha sub elements R$ HMEUHODWLRQ! R% HMEUHODWLRQVKLSUROH!

8

7HICHSETS OFELEMENTSAREMANDATORYWITHINANEJB RELATIONSHIP ROLE ELEMENT#HOOSEALLTHATAPPLY

(spec: 468)

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!

9

10

7HICHAREVALIDVALUESFORACMR lELD TYPEELEMENT#HOOSEALLTHATAPPLY

R! 3TRING R" )NTEGER R# MDYDXWLO6HW R$ MDYDXWLO/LVW R% MDYDXWLO&ROOHFWLRQ

(spec: 464)

terface Either a loCcaoll leinction or type, or a local interSet of the face type

7HICHSETS OFELEMENTSAREMANDATORYWITHINANEJB RELATIONELEMENT

)

(spec: 467-468

R! HMEUHODWLRQQDPH!HMEUHODWLRQVKLSUROH! R" HMEUHODWLRQVKLSUROH!HMEUHODWLRQVKLSUROH! gotta have two partners R# GHVFULSWLRQ!HMEUHODWLRQQDPH! HMEUHODWLRQVKLSUROH!

R$ HMEUHODWLRQQDPH!HMEUHODWLRQVKLSUROH! HMEUHODWLRQVKLSUROH!

\RXDUHKHUH



PRFNH[DPDQVZHUV

11

'IVEN#-0BEANS#USTOMER"EAN /RDER"EAN AND,INE)TEMS"EANWITHTHE FOLLOWINGRELATIONSHIPS

(spec: 233)

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

12

ause The SELECt Tthecl query ha speciÞes t n Customer must retur objects.

'IVEN#-0BEANS#USTOMER"EAN /RDER"EAN AND,INE)TEMS"EANWITHTHE 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

(spec: 236)

HQWLW\EHDQUHODWLRQVKLSV

13

7HATSTRUEABOUT%*"1,PATHEXPRESSIONS#HOOSEALLTHATAPPLY

(spec: 225-226)

R! )NAPATHEXPRESSIONTHE  ISCONSIDEREDTHENAVIGATIONOPERATOR R" 0ATHEXPRESSIONSCANTERMINATEWITHEITHERFPU¿HOGORFPS¿HOG R# !PATHEXPRESSIONTHATENDSINAFPU¿HOGCANNOTBEFURTHER COMPOSED

R$ !PATHEXPRESSIONCANENDWITHASINGLEVALUEORACOLLECTIONVALUE

14

7HATSTRUEABOUT%*"1,QUERIES#HOOSEALLTHATAPPLY

(spec: 218-219)

R! /FTHETHREECLAUSETYPES 3%,%#4 &2/- AND7(%2% ONLYTHE 3%,%#4CLAUSEISREQUIRED

R" 4HE3%,%#4CLAUSEDESIGNATESQUERYDOMAIN R# 4HE7(%2%CLAUSEDETERMINESTHETYPESOFOBJECTSTOBESELECTED R$ !N%*"1,QUERYMAYHAVEPARAMETERS

15

7HATSTRUEABOUT%*"1,7(%2%CLAUSES#HOOSEALLTHATAPPLY

)

(spec: 227-228

R! )DENTIlCATIONVARIABLESUSEDINA7(%2%CLAUSECANBEDElNEDONLYIN THE&2/-CLAUSE

R" )DENTIlCATIONVARIABLESCANREPRESENTASINGLEVALUEORACOLLECTION R# 4HENUMBEROFINPUTPARAMETERSMUSTEQUALTHENUMBEROF PARAMETERSFORTHElNDERORSELECTORMETHOD

R$ )NPUTCLAUSESCANONLYBEUSEDIN7(%2%CLAUSES

16

'IVENTHE%*"1,EXPRESSION

(spec: 229)

S GLVFRXQW%(7:((1$1' 7HICHEXPRESSIONISEQUIVALENT

R! SGLVFRXQW!$1'SGLVFRXQW R" SGLVFRXQW! $1'SGLVFRXQW R# SGLVFRXQW!DQGSGLVFRXQW  R$ SGLVFRXQW! DQGSGLVFRXQW 

\RXDUHKHUH



PRFNH[DPDQVZHUV

17

)

(spec: 229-230

7HATSTRUEABOUT%*"1, ).EXPRESSIONS#HOOSEALLTHATAPPLY

R! 4HEVLQJOHBYDOXHGBSDWKBH[SUHVVLRQMUSTHAVEA3TRINGVALUE R" 4HE./4LOGICALOPERATORCANBEUSEDINAN).EXPRESSION R# 4HESTRINGLITERALLISTCANBEEMPTY t for R$ 4HEFOLLOWINGEXPRESSIONISLEGALRFRXQWU\).h5+v h53v watche ouquotes!

doubl

18

(spec: 230)

'IVENTHE%*"1,EXPRESSION PRODUCTCODE,)+%@&?S 7HICHVALUES WOULDRESULTINATRUECOMPARISON#HOOSEALLTHATAPPLY

R! &S R" &S R# &8S R$ &S R%&ITS



&KDSWHU

ter is a The % charac r a sequence is wildcard foter The _ of charac fos.r a single a wildcard character

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  ,GHQWLI\FRUUHFWDQGLQFRUUHFWVWDWHPHQWV RUH[DPSOHVDERXWWKHFOLHQWYLHZDQG OLIHF\FOHRIDPHVVDJHGULYHQEHDQ

 ,GHQWLI\WKHLQWHUIDFH V DQGPHWKRGVD PHVVDJHGULYHQEHDQPXVWLPSOHPHQW

 ,GHQWLI\WKHXVHDQGEHKDYLRURIWKH 0HVVDJH'ULYHQ&RQWH[WLQWHUIDFHPHWKRGV

 )URPDOLVWLGHQWLI\WKHUHVSRQVLELOLW\RIWKH %HDQ3URYLGHUDQGWKHUHVSRQVLELOLW\RIWKH &RQWDLQHUSURYLGHUIRUDPHVVDJHGULYHQ EHDQ 

&KDSWHU

:KDWLWUHDOO\PHDQV
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, WROG\RXQHYHUWRFDOOPH KHUH

7HOOKLPWRFKLOO:H·OO JHWWRLWDQGLW·VQRW OLNHKH·VJRWDQ\WKLQJ EHWWHUWRGR

;MZ ^MZ

+TQMV\ JMNWZMUM[[IOMLZQ^MVJMIV[


IN\MZUM[[IOMLZQ^MVJMIV[

7ITHMESSAGING THE0RODUCERSENDSAMESSAGEAND THENGOESABOUTHISBUSINESS(EDOESNTHAVETO WAITFORTHE#ONSUMERTOEVENGETTHEMESSAGE LET ALONEPROCESSIT 7HENTHE#ONSUMERGETSAMESSAGE HEPROCESSES IT)NTHEMEANTIME THECLIENTCANSTILLHAVEALIFE

\RXDUHKHUH



PHVVDJHGULYHQEHDQV

0HVVDJHGULYHQEHDQRYHUYLHZ  &OLHQW 3URGXFHU VHQGDPHVVDJHWR WKHPHVVDJLQJVHUYLFH

PHVVDJLQJVHUYLFH JH VVD H P

EHDQ EHDQ EHDQ

FOLHQW

0HVVDJHGULYHQ %HDQ3RRO

3URGXFHU

 0HVVDJHLVGHOLYHUHGWRWKH

&RQWDLQHU&OLHQWLVGRLQJRWKHU FOLHQWWKLQJV

PHVVDJLQJVHUYLFH

PHV VDJ H

EHDQ EHDQ EHDQ

WRVRP HRWK VHUYHU HU 

0HVVDJHGULYHQ %HDQ3RRO

FOLHQW 3URGXFHU

 &RQWDLQHUDFNQRZOHGJHVWKH

PHVVDJHWRWKHVHUYLFHDQG H DQUHPRY SXOOVDEHDQRXWRIWKHSRROWR LW\RXF H X 2.JRW H KHTX SURFHVVWKHPHVVDJH LWIURPW PHVVDJLQJVHUYLFH

EHDQ EHDQ FOLHQW EHDQ 3URGXFHU



&KDSWHU

0HVVDJHGULYHQ %HDQ3RRO

PHVVDJHGULYHQEHDQV

 &RQWDLQHULQYRNHVWKHEHDQV

RQ0HVVDJH PHWKRGZLWKWKH PHVVDJHDVWKHDUJXPHQW PHVVDJLQJVHUYLFH

RQ0 HVV DJH PV J

FOLHQW

EHDQ EHDQ

EHDQ

0HVVDJHGULYHQ %HDQ3RRO

3URGXFHU

 7KHEHDQ·VWUDQVDFWLRQFRPPLWV DQGWKH&RQWDLQHUVHQGVWKHEHDQ EDFNWRWKHSRRO PHVVDJLQJVHUYLFH ,IWKHEHDQ·VWUDQVDFWLRQLQ RQ0HVVDJHKDGUROOHGEDFN WKH&RQWDLQHUZRXOGKDYHWROGWKH PHVVDJLQJVHUYLFHWRSXWWKH PHVVDJHEDFNRQWKHTXHXH

EHDQ EHDQ

EHDQ

0HVVDJHGULYHQ %HDQ3RRO

%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 VDJH V H RQ0

PHVVDJLQJVHUYLFH

EHDQ

VJ P JH VVD 0H RQ

RQ0 :HOFRPH%HDQ HVV DJH PV J

EHDQ

EHDQ :HOFRPH%HDQ

:HOFRPH%HDQ 0'% %HDQ3RRO

EHDQ :HOFRPH%HDQ

%XWWKHFRQWDLQHUZLOOPDNHVXUH WKDWHDFKEHDQLVWKUHDGVDIH

&DQ·W\RXVHH,·P %86<",·YHDOUHDG\JRWD PHVVDJHJRLQJ'RQ·WJHWPH VWDUWHGRQDQRWKHURQH

:HOFRPH%HDQ



&KDSWHU

1RSUREOHP,·OO PDNHVXUHQRRWKHU WKUHDGVERWKHU\RXXQWLO \RX·UHGRQHZLWKWKLVRQH

&RQWDLQHU

PHVVDJHGULYHQEHDQV

7KHOLIHF\FOHRIPHVVDJHGULYHQEHDQV ORRNVMXVWOLNHVWDWHOHVVVHVVLRQEHDQV 0HVVDJHGULYHQ EHDQ GRHVQRWH[LVW

FRQVWUXFWRU VHW0HVVDJH'ULYHQ&RQWH[W HME&UHDWH

EHDQWKURZVV\VWHPH[FHSWLRQ XQFKHFNHGXQFDXJKW

HME5HPRYH

PHWKRGUHDG\

n passivatio note: noivation or act

RQ0HVVDJH

nly this is the obetween difference ssion stateless send MDB lifecycle a lifecycle.

message-driven beans have only ONE business methodÑ onMessage().

SXEOLFYRLGRQ0HVVDJH 0HVVDJHPVJ ^ RSHQWKHPHVVDJHDQGGRVRPHWKLQJZLWKLW `

logic thing a mesth-er ss ne si bu ly on he T n do (o ThatÕs it ! 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 LPSRUWMDYD[HME  LPSRUWMDYD[MPV 

rt: a new impo.jms package the javax

!

s to implement

TWO interface

SXEOLFFODVV:HOFRPH%HDQLPSOHPHQWV0HVVDJH'ULYHQ%HDQ0HVVDJH/LVWHQHU^

javax.ejb.MessageDriv enBean (with the cont er callbacks) javax.jm ains.M 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

 SXEOLFYRLGRQ0HVVDJH 0HVVDJHPVJ ^ SURFHVVWKHPHVVDJH WU\^

FINALLY! A real business method. This is the only method de Þn MessageListener interface ed in the .

LI PVJLQVWDQFHRI7H[W0HVVDJH ^ 7H[W0HVVDJHPHVVDJH  7H[W0HVVDJH PVJ

e, but it might TextMessage is-a Messdagof message like have been another kin essage, ObjectMesBytesMessage, MapM e. So we test it sage or StreamMessag the cast. with instanceof before

6\VWHPRXWSULQWOQ PHVVDJHJHW7H[W  ` `FDWFK -06([FHSWLRQH[ ^ H[SULQW6WDFN7UDFH  ` 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 PDWFKDQ\WKLQJIURPWKHKRPH RUFRPSRQHQWLQWHUIDFHV 7KH\GRQ·WH[LVW-XVWOLNHPH


%HDQ/DZHME&UHDWH PHWKRG :ULWHDVLQJOHQRDUJXPHQWHME&UHDWH PHWKRGLQWKH EHDQ,WGRHVQ¶WPDWFKDQ\WKLQJRUFRPHIURPDQ\LQWHU IDFH,W¶VWKHUHEHFDXVHLW0867EH

LQWHUIDFH!! 0HVVDJH/LVWHQHU



RQ0HVVDJH

0HVVDJH/LVWHQHULPSOHPHQWDWLRQ RQ0HVVDJH

7KLVLV\RXUEXVLQHVVPHWKRG
LQWHUIDFH!! 0HVVDJH'ULYHQ%HDQ

HME5HPRYH VHW0HVVDJH'ULYHQ&RQWH[W



0HVVDJH'ULYHQ%HDQLPSOHPHQWDWLRQ FRQWDLQHUFDOOEDFNV ,PSOHPHQWERWKRIWKHPHWKRGVIURPWKH 0HVVDJH'ULYHQ%HDQLQWHUIDFHZKLFK\RXUEHDQPXVW LPSOHPHQWLQWKHRI¿FLDO-DYDZD\ LHXVLQJWKH µLPSOHPHQWV0HVVDJH'ULYHQ%HDQ¶GHFODUDWLRQHLWKHULQ \RXUEHDQFODVVRURQHRILWVVXSHUFODVVHV

6KDUSHQ \RXU SHQFLO 2IWKHWKUHHW\SHVRIPHWKRGV\RX SXWLQ\RXUEHDQFKHFNRIIWKHRQHV WKHFRPSLOHUFDUHVDERXW

&RPSLOHUFKHFNHG"

‰ HME&UHDWH ‰ RQ0HVVDJH ‰ 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 SXEOLF:HOFRPH%HDQ ^`



tructor. in the default conÕnst put any t pu r le pi m co e th do t If you can, justhaleve one, be SURE itÕs no-arg, and do u yo But if 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 

7KHFODVVPXVWGH¿QHWKHRQ0HVVDJH PHWKRGIURPWKH 0HVVDJH/LVWHQHULQWHUIDFH,WPXVWEHSXEOLFQRW¿QDOQRWVWDWLF ZLWKDYRLGUHWXUQW\SHDQGLWWDNHVDVLQJOHDUJXPHQWRIW\SH MDYD[MPV0HVVDJH SXEOLFYRLGRQ0HVVDJH 0HVVDJHPVJ ^`

The REAL business method. You

r logic goes here...







1RPHWKRGVLQWKHFODVVDUHDOORZHGWRWKURZDSSOLFDWLRQH[FHSWLRQV $QGWKH\ VKRXOGQ¶WEHGHFODULQJUXQWLPHH[FHSWLRQVHLWKHUDOWKRXJKLW¶VWHFKQLFDOO\OHJDO



&KDSWHU

0HVVDJHGULYHQ EHDQVFDQ·W GHFODUHFKHFNHG H[FHSWLRQV

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! HMEQDPH!:HOFRPH1HZ&XVWRPHUHMEQDPH! KRPH!KHDG¿UVW&XVWRPHU+RPHKRPH! UHPRWH!KHDG¿UVW&XVWRPHUUHPRWH!

%HDQ3RRO Remote al view, noin the c lo o N ! w client vie donÕt put ThereÕs noview at all. So youent interface. view. No home and compon tags for

HMEFODVV!KHDG¿UVW:HOFRPH%HDQHMEFODVV! WUDQVDFWLRQW\SH!&RQWDLQHUWUDQVDFWLRQW\SH! PHVVDJHGULYHQGHVWLQDWLRQ! GHVWLQDWLRQW\SH!MDYD[MPV7RSLFGHVWLQDWLRQW\SH! PHVVDJHGULYHQGHVWLQDWLRQ! PHVVDJHGULYHQ! HQWHUSULVHEHDQV!

(WeÕll look at an optional tag in a few pages)

\RXDUHKHUH



WRSLFVDQGTXHXHV




&KDSWHU

(QWHUSULVHV\VWHPVWHQGWR XVHHLWKHUTXHXHVRUGXUDEOH WRSLFVXEVFULSWLRQV$QRQ GXUDEOHWRSLFVXEVFULSWLRQ PLJKWEHDSSURSULDWH VRPHWLPHVEXWLI,·PD PHVVDJHFRQVXPHULW·VUHDOO\ OLNHVD\LQJ´,GRQ·WFDUH PXFKDERXWZKHWKHU,JHW WKHVHPHVVDJHVµ

PHVVDJHGULYHQEHDQV

4XHXHRQHWRRQH SRLQWWRSRLQW ,·PDQHQWLW\EHDQ FXUUHQWO\SOD\LQJWKHEULOOLDQWO\ GDVKLQJ7KRPDV3DXODQG,KDYHD SULYDWHPDWWHUWKDW,ZDQWVRPHRQH GLVFUHHWWRWDNHFDUHRIULJKWDZD\ EXW,GRQ·WZDQWWRZDLW,KDYHDQ DXGLWLRQFRPLQJXS

nsumer (in Only one message co-d riven bean) ge this case, a messa gets the message. :H·OOÀQGD EHDQWRKDQGOH WKDWIRU\RX

2.WKDQNVIRU WKHPHVVDJH1RQHHG WRJLYHLWWRDQ\RQH HOVH

-06 0HVVDJLQJ 6HUYLFH

7RSLFRQHWRPDQ\ SXEOLVKVXEVFULEH

ans This time, ALL beHi vents e subscribed to th pE ge. ssa me e th topic will get

1RZ,KDYHDSDUW\ 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 THIS!NDIF)HAVEAMESSAGE DRIVEN BEAN WHEREDO)GETTHEMESSAGING SERVICE

A:

*-3ISTHE*AVA-ESSAGING 3ERVICE!0)THATSREQUIREDBY%*" 4HATMEANSYOUR%*"CONTAINERMUST HAVESOMEKINDOFMESSAGINGSERVICE INCLUDED ALTHOUGHMANYVENDORS CANWORKWITHMULTIPLEMESSAGING SERVICESASLONGASTHOSESERVICES SUPPORTTHE*-3!0) 4HE*-3!0)WORKSMUCHLIKE*$"#ˆ YOUHAVEADRIVERTHATKNOWSHOW TOTAKEYOURSTANDARD*-3!0)CALLS ANDTRANSLATETHEMINTOSOMETHING THEUNDERLYINGMESSAGINGSYSTEM UNDERSTANDS

Q:

#AN)GETMESSAGESFROMNON *-3MESSAGINGSERVICES

A:

.OTRIGHTNOW IN%*" BUT THEYTHEINFAMOUS*%%TEAM HOPE TOADDTHATCAPABILITYSOMEDAY



&KDSWHU

Q:

7HYDOESNTTHE -ESSAGE$RIVEN"EANJUSTEXTEND THE-ESSAGE,ISTENERINTERFACE 4HATWAYYOUWOULDNTHAVETO IMPLEMENTBOTHINTERFACES

A:

3EEYOURPREVIOUSQUESTION 4HE*%%TEAMDIDNTWANTTOLOCK ALLMESSAGE DRIVENBEANSINTOBEING *-3LISTENERS/NEDAY THEREMIGHTBE MANYKINDSOFLISTENERINTERFACESFOR DIFFERENTMESSAGINGTYPES

Q:

!REMESSAGESGUARANTEEDTO COMEINORDER7ILL)ALWAYSGETTHE lRSTONElRST

A:

.O9OUBETTERNOTDEPENDON ITOR"AD4HINGS-IGHT(APPEN&OR EXAMPLE YOUMIGHTGETTHEh#ANCEL THE/RDERvMESSAGEBEFOREYOUGET THEh0LACETHE/RDERvMESSAGE$ESIGN YOURSYSTEMANDCODEYOURBEANON THEASSUMPTIONTHATMESSAGEORDERIS NOTSTRICTLYGUARANTEED

Q:

)FITSATOPIC DOESTHATMEAN ALLBEANSINAPARTICULARSUBSCRIBER POOLWILLGETTHEMESSAGE

A:

.O2EMEMBER ONEBEANCAN STANDINFORALLTHEOTHERBEANS4HE #ONTAINERWILLDELIVERTHEMESSAGETO JUST/.%BEANINTHEPOOL5NLESSNO NEVERMIND

Q: A:

5NLESSWHAT4ELLME

/+ /+"UTTHISISNTONTHE EXAM SORELAX,ETSSAYYOURSERVERIS RUNNINGASACLUSTEREDCONFIGURATION WHEREYOUCOULDHAVEMULTIPLE INSTANCESOFYOURSERVERRUNNING)N THATCASE THEREISNOGUARANTEEABOUT HOWTHE#ONTAINERWILLREPRESENTITSELF TOTHEMESSAGINGSERVICE 4HEQUESTIONBECOMES DOESTHE MESSAGINGSERVICESEETHEWHOLE CLUSTERAS/.%VERSIONOFYOUR APPLICATION NOMATTERHOWMANY *6-SITSRUNNINGON ORDOESTHE MESSAGINGSERVICESEEEACHCLUSTER WITHITSOWNDUPLICATEDPOOLFOREACH BEANTYPE ASASEPARATELISTENER

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 "UTIFTHEREAREMULTIPLEBEANTYPESSUBSCRIBED TOTHATTOPIC ONEBEANFROMEACHOFTHOSEPOOLS WILLALSOGETTHEMESSAGE)NTHISPICTURE BOTH THE7ELCOME"EANANDTHE.EW3ALES"EANARE SUBSCRIBERSTOTHE.EW#USTOMERTOPIC SOTHE #ONTAINERSELECTSONEBEANFROMEACHPOOLTOGET THEMESSAGE

bscriber Only one bean per sussa ge. NOT me e th pool will get ! every bean in the pool 1HZ&XVWRPHU 7RSLFVXEVFULEHU

EHDQ EHDQ PVJ

PVJ 1HZ&XVWRPHU 7RSLFPHVVDJH

EHDQ

:HOFRPH%HDQ 3RRO

-06 0HVVDJLQJ 6HUYLFH PVJ 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 MEANSTHERESNOWAYTOKNOWHOWTHEMESSAGES MIGHTBEDISTRIBUTEDAMONGTHEDIFFERENTQUEUE CONSUMERS-AYBETHEMESSAGINGSERVICEWILLJUST PICKONEATRANDOM"UTMAYBEITWONT-AYBE ITLLJUSTPICKTHElRSTONEINAPROPERTIESlLEAND SENDEVERYTHINGTHERE3O JUSTDONTDOIT

ol will Only one bean in the Tpoevery get the message. NO bean in the pool ! 3URFHVV&XVWRPHU TXHXHOLVWHQHU

EHDQ EHDQ PVJ

PVJ 3URFHVV&XVWRPHU TXHXHPHVVDJH



&KDSWHU

-06 0HVVDJLQJ 6HUYLFH

EHDQ

&XVW3URFHVV%HDQ 3RRO

PHVVDJHGULYHQEHDQV

5M[[IOM,ZQ^MV+WV\M`\ 4HESERVERMAKESMESSAGE DRIVENBEANSVIRTUALLY THESAMEWAYINWHICHITMAKESSTATELESSSESSION BEANS #ALLTHEBEANSCONSTRUCTORMUSTBENO ARG  #ALLTHEBEANSCONTEXTSETTER #ALLTHEBEANSEJB#REATE METHOD )NFACT THElRSTTWOSTEPSARETHESAMEFORALL BEANTYPES4HECONTEXTSETTERALWAYSCOMES IMMEDIATELYAFTERTHEBEANSCONSTRUCTOR ANDAT SOMEPOINTBEFOREEJB#REATE !NDOFCOURSE ANENTITYBEANMIGHTNEVERGETANEJB#REATE CALL IFTHEREARENTANYCLIENTSTRYINGTOINSERTNEW ENTITIESINTOTHEDATABASE 3O WHATCANAMESSAGE DRIVENBEANDOWITHITS CONTEXT7ETHINKITSTIMEFORYOUTOlGURETHAT OUT7ECANGUARANTEETHEREWILLBEQUESTIONS ONTHEEXAMRELATEDTOWHATAMESSAGE DRIVEN BEANCANANDCANNOTDOWITHITSCONTEXT)NFACT YOULLlNDTHESEQUESTIONSSCATTEREDTHROUGHOUT THEOBJECTIVES NOTJUSTINTHEMESSAGE DRIVEN BEANOBJECTIVESn 1UESTIONSFROMTHE TRANSACTIONS EXCEPTIONS ANDSECURITYOBJECTIVES MIGHTINVOLVEAMESSAGE DRIVENBEANANDITS CONTEXT

6KDUSHQ \RXU SHQFLO 7KLQNDERXWZKLFKPHWKRGVDPHVVDJHGULYHQEHDQ FRXOGFDOORQLWVFRQWH[W )URPWKHOLVWRIPHWKRGVLQ(-%&RQWH[WFURVV RXWWKRVHPHWKRGVWKDWGRQRWPDNHVHQVHIRUD PHVVDJHGULYHQEHDQ DQGE\³GRQRWPDNHVHQVH´ ZHPHDQ³ZLOOFDXVHDKRUULEOHUXQWLPHH[FHSWLRQ ZLWKGHYDVWDWLQJDQGSRWHQWLDOO\FDUHHUHQGLQJ FRQVHTXHQFHV´  2KDQGEHSUHSDUHGWRGHIHQG\RXUDQVZHUV ,PDJLQHXVVLWWLQJULJKWEHKLQG\RXVFDULO\ GHPDQGLQJMXVWL¿FDWLRQIRU\RXUFKRLFHV

LQWHUIDFH!! (-%&RQWH[W

JHW&DOOHU3ULQFLSDO JHW(-%+RPH LV&DOOHU,Q5ROH 6WULQJV  JHW5ROOEDFN2QO\ JHW(-%/RFDO+RPH JHW8VHU7UDQVDFWLRQ VHW5ROOEDFN2QO\

4HISISJUSTOURWAYOFSAYINGDOTHEDAMNEXERCISE 9OUDONTWANTTOHAVETOMEMORIZETHISSTUFF BUT IFYOUJUSTSPENDAFEWMOMENTSTHINKINGABOUT IT YOULLlGUREITOUT 4HEANSWERSAREONTHENEXTPAGE THOUGH SO DONTTURNUNTILYOUREDONE

LQWHUIDFH!! 0HVVDJH'ULYHQ&RQWH[W

WKLVLQWHUIDFHDGGVQR QHZPHWKRGV

\RXDUHKHUH



0HVVDJH'ULYHQ&RQWH[W

5M[[IOM,ZQ^MV+WV\M`\

LQWHUIDFH!! (-%&RQWH[W

JHW&DOOHU3ULQFLSDO JHW(-%+RPH LV&DOOHU,Q5ROH 6WULQJ V JHW5ROOEDFN2QO\ JHW(-%/RFDO+RPH HW( JHW8VHU7UDQVDFWLRQ VHW5ROOEDFN2QO\

LQWHUIDFH!! 0HVVDJH'ULYHQ&RQWH[W

WKLVLQWHUIDFHDGGVQR QHZPHWKRGV

al() and getCallerPrincip) give you isCallerInRole(about the security info u donÕt client. But yo . HAVE a client

0\OLIHLVVDG,KDYH QRKRPH,KDYHQRFDOOHUV H[FHSWWKHVWXSLG&RQWDLQHU DQGWKDW·VOLNHVD\LQJWKHRQO\ IULHQGV\RXKDYHDUH\RXU SDUHQWV 2KZHOODWOHDVW ,JHWDSRRO

,W·VVLPSOH0HVVDJHGULYHQ EHDQVGRQ·WKDYHFOLHQWV7KDW PHDQVWKH\GRQ·WKDYHDFOLHQW 9,(:VRWKHUH·VQRKRPH LQWHUIDFH $QGVLQFHWKHUH·VQRFOLHQW WKHUH·VQRFOLHQWVHFXULW\ LQIRUPDWLRQ 6R\RXFDQ·WFDOOWKHWZR PHWKRGVIRUJHWWLQJWKHKRPH VLQFH\RX+$9(QRKRPH RU WKHWZRPHWKRGVIRUJHWWLQJ LQIRDERXWWKHFDOOHU·VVHFXULW\ WKHUH DUH QR

Q:

'XPE 4XHVWLRQV

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 EHDQWRKDQGOH WKDWIRU\RX

2.WKDQNVIRU WKHPHVVDJH1RQHHG 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


1RSUREOHP ZH·OOMXVWSXOODQRWKHU EHDQRXWRIWKH SRRO

2.WKDQNVIRU WKHPHVVDJH1RQHHG WRJLYHLWWRDQ\RQH HOVH

-06 0HVVDJLQJ 6HUYLFH

-06 0HVVDJLQJ 6HUYLFH

%HDQ$DOLYH

+HUH·VDPHVVDJH IURPWKHTXHXH,·PVXUH \RX·OOGREHWWHUWKDQ WKDW/$67JX\

%HDQ$GHDG

:KDWLV LWZLWKWKHVHJX\V" 2KZHOOOHW·VJRSXOO DQRWKHURQHRXWRI WKHSRRO

2KGHÀQLWHO\ 7KHUH·VQRWKLQJ, FDQ·WKDQGOH

-06 0HVVDJLQJ 6HUYLFH

-06 0HVVDJLQJ 6HUYLFH

%HDQ%DOLYH %HDQ%GHDG

+HUH·VDPHVVDJH IURPWKHTXHXH/HW·V KRSH<28FDQGRWKLV RQH

8PGR\RXWKLQN PD\EHWKHUH·VVRPHWKLQJ ZURQJZLWKWKH PHVVDJH"

7KRVHRWKHU EHDQVZHUHZHDN

-06 0HVVDJLQJ 6HUYLFH

-06 0HVVDJLQJ 6HUYLFH

%HDQ&DOLYH

%HDQ&GHDG

\RXDUHKHUH



PHVVDJHDFNQRZOHGJHPHQW


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 1

7HATSTRUEABOUTMESSAGE DRIVENBEANS#HOOSEALLTHATAPPLY

R! !MESSAGE DRIVENBEANHASAHOMEINTERFACEBUTNOCOMPONENT INTERFACE

R" !CLIENTNEVERKNOWSAMESSAGE DRIVENBEANSIDENTITY R# !CLIENTSEESAMESSAGE DRIVENBEANASA*AVA-AILMESSAGECONSUMER R$ 4HELIFETIMEOFAMESSAGE DRIVENBEANISCONTROLLEDBYTHECONTAINER

2

7HICHINTERFACESMUSTBEIMPLEMENTEDINAMESSAGE DRIVENBEANCLASSORIN ONEOFITSSUPERCLASSES#HOOSEALLTHATAPPLY

R! MDYD[MPV0HVVDJH R" MDYD[MPV0HVVDJH/LVWHQHU R# MDYD[MPV0HVVDJH&RQVXPHU R$ MDYD[HME0HVVDJH'ULYHQ%HDQ R% MDYD[HME0HVVDJH'ULYHQ&RQWH[W

3

7HICHLISTPROPERLYSEQUENCESTHEMETHODSCALLEDINTHELIFECYCLEOFAMESSAGE 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

4

7HICHAREVALIDSIGNATURES FORMETHODSINAMESSAGE DRIVENBEAN#HOOSE ALLTHATAPPLY

R! SXEOLFYRLGRQ0HVVDJH R" SXEOLFYRLGHME&UHDWH R# SXEOLFVWDWLFYRLGRQ0HVVDJH R$ SXEOLFYRLGHME&UHDWH MDYD[MPV0HVVDJHP R% SXEOLFYRLGRQ0HVVDJH MDYD[MPV0HVVDJHP R&SXEOLFYRLGRQ0HVVDJH MDYD[MPV0HVVDJHP WKURZV MDYDUPL5HPRWH([FHSWLRQ

5

7HENISAMESSAGE DRIVENBEANABLETOACCESSJAVACOMPENVVIA*.$)

6

7HICHMESSAGE DRIVENBEANMETHODSTAKEANARGUMENT#HOOSEALLTHAT APPLY

R! HME&UHDWH R" HME5HPRYH R# VHW0HVVDJH'ULYHQ&RQWH[W R$ .ONEOFTHEABOVE

R! HME&UHDWH R"HME5HPRYH R# RQ0HVVDJH R$ VHW0HVVDJH'ULYHQ&RQWH[W

7



7HENISAMESSAGE DRIVENBEANABLETOACCESSOTHERENTERPRISEBEANS

R! HME&UHDWH R" HME5HPRYH R# RQ0HVVDJH R$ VHW0HVVDJH'ULYHQ&RQWH[W R% .ONEOFTHEABOVE

&KDSWHU

PHVVDJHGULYHQEHDQV

8

7HATSTRUEABOUT#ONTAINERSUPPORTFORMESSAGE DRIVENBEANS#HOOSEALL THATAPPLY

R! 4HE#ONTAINERMUSTSUPPORTTHEDEPLOYMENTOFAMESSAGE DRIVENBEAN ASTHECONSUMEROFA*AVA-AILQUEUE

R" 4HE#ONTAINERIS./4REQUIREDTOSUPPORTTRANSACTIONSCOPINGFOR MESSAGE DRIVENBEANS

R# 4HE#ONTAINERGUARANTEESlRST IN lRSTDELIVEREDMESSAGEPROCESSING R$ 4HE#ONTAINERMUSTENSURETHATTHEBEANINSTANCESARENON REENTRANT

9

7HENISAMESSAGE DRIVENBEANWITH"-4DEMARCATIONABLETOACCESSRESOURCE MANAGERS

R! HME&UHDWH R" HME5HPRYH R# RQ0HVVDJH R$ VHW0HVVDJH'ULYHQ&RQWH[W R% .ONEOFTHEABOVE

10

7HATSTRUEABOUTMESSAGEACKNOWLEDGMENTFORMESSAGE DRIVENBEANS #HOOSEALLTHATAPPLY

R! -ESSAGEACKNOWLEDGEMENTMODESCANNOTBEDElNEDDECLARATIVELY R" 4HE*-3!0)SHOULDBEUSEDFORMESSAGEACKNOWLEDGMENT R# &OR"-4BEANS THE#ONTAINERUSESTHEACKNOWLEDGE MODEDEPLOYMENT DESCRIPTORELEMENT

R$ &OR#-4BEANS THE#ONTAINERUSESTHEACKNOWLEDGE MODE DEPLOYMENTDESCRIPTORELEMENT

11

7HATSTRUEABOUTTHEDEPLOYMENTDESCRIPTORFORMESSAGE DRIVENBEANS #HOOSEALLTHATAPPLY

R! 4HEBEANPROVIDERMUSTGUARANTEETHATTHEBEANISASSOCIATEDWITHA SPECIlCQUEUEORTOPIC

R" 4HEDEPLOYMENTDESCRIPTORCANINDICATEWHETHERABEANISINTENDEDFOR ATOPICORAQUEUE

R# )TCANINDICATEWHETHERA1UEUETYPEBEANSHOULDSUPPORTDURABLE SUBSCRIPTIONORNOT

R$ )TISAPPROPRIATETOASSOCIATEMULTIPLEBEANSWITHTHESAME*-3QUEUE \RXDUHKHUH



PRFNH[DPDQVZHUV

0RFN([DP$QVZHUV 1

(spec: 311-312)

7HATSTRUEABOUTMESSAGE DRIVENBEANS#HOOSEALLTHATAPPLY

R! !MESSAGE DRIVENBEANHASAHOMEINTERFACEBUTNOCOMPONENT INTERFACE

- MDBs have NO client view

R" !CLIENTNEVERKNOWSAMESSAGE DRIVENBEANSIDENTITY R# !CLIENTSEESAMESSAGE DRIVENBEANASA*AVA-AILMESSAGECONSUMER R$ 4HELIFETIMEOFAMESSAGE DRIVENBEANISCONTROLLEDBYTHECONTAINER

2

7HICHINTERFACESMUSTBEIMPLEMENTEDINAMESSAGE DRIVENBEANCLASSORIN ONEOFITSSUPERCLASSES#HOOSEALLTHATAPPLY

(spec: 314-315)

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

3

7HICHLISTPROPERLYSEQUENCESTHEMETHODSCALLEDINTHELIFECYCLEOFAMESSAGE DRIVENBEAN#HOOSEALLTHATAPPLY

(spec: 319)

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

4

7HICHAREVALIDSIGNATURES FORMETHODSINAMESSAGE DRIVENBEAN#HOOSE 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

5

6

- you must never declare a RemoteException (spec: 320) 7HENISAMESSAGE DRIVENBEANABLETOACCESSJAVACOMPENVVIA*.$) R! HME&UHDWH R" HME5HPRYH R# VHW0HVVDJH'ULYHQ&RQWH[W R$ .ONEOFTHEABOVE 7HICHMESSAGE DRIVENBEANMETHODSTAKEANARGUMENT#HOOSEALLTHAT APPLY

(spec: 319, 324)

R! HME&UHDWH R"HME5HPRYH sage R# RQ0HVVDJH - takes a mes R$ VHW0HVVDJH'ULYHQ&RQWH[W - takes a context

7

7HENISAMESSAGE DRIVENBEANABLETOACCESSOTHERENTERPRISEBEANS

(spec: 320)

R! HME&UHDWH ful R" HME5HPRYH d with a Ômeaning ho et m a in ly on R# RQ0HVVDJH -transaction contextÕ R$ VHW0HVVDJH'ULYHQ&RQWH[W R% .ONEOFTHEABOVE

\RXDUHKHUH



PRFNH[DPDQVZHUV

8

(spec: 325-326)

7HATSTRUEABOUT#ONTAINERSUPPORTFORMESSAGE DRIVENBEANS#HOOSEALL THATAPPLY

R! 4HE#ONTAINERMUSTSUPPORTTHEDEPLOYMENTOFAMESSAGE DRIVENBEAN ASTHECONSUMEROFA*AVA-AILQUEUE

R" 4HE#ONTAINERIS./4REQUIREDTOSUPPORTTRANSACTIONSCOPINGFOR MESSAGE DRIVENBEANS

R# 4HE#ONTAINERGUARANTEESlRST IN lRSTDELIVEREDMESSAGEPROCESSING R$ 4HE#ONTAINERMUSTENSURETHATTHEBEANINSTANCESARENON REENTRANT

9

7HENISAMESSAGE DRIVENBEANWITH"-4DEMARCATIONABLETOACCESSRESOURCE MANAGERS

(spec: 320)

R! HME&UHDWH R" HME5HPRYH R# RQ0HVVDJH - when there is a Ômeaningful transaction contextÕ R$ VHW0HVVDJH'ULYHQ&RQWH[W R% .ONEOFTHEABOVE

10

(spec: 317)

7HATSTRUEABOUTMESSAGEACKNOWLEDGMENTFORMESSAGE DRIVENBEANS #HOOSEALLTHATAPPLY

R! -ESSAGEACKNOWLEDGEMENTMODESCANNOTBEDElNEDDECLARATIVELY R" 4HE*-3!0)SHOULDBEUSEDFORMESSAGEACKNOWLEDGMENT R#&OR"-4BEANS THE#ONTAINERUSESTHEACKNOWLEDGE MODEDEPLOYMENT DESCRIPTORELEMENT

R$ &OR#-4BEANS THE#ONTAINERUSESTHEACKNOWLEDGE MODE

- can be Auto-acknowledge or Dups-ok-acknowledge

DEPLOYMENTDESCRIPTORELEMENT

11

(spec: 317)

7HATSTRUEABOUTTHEDEPLOYMENTDESCRIPTORFORMESSAGE DRIVENBEANS #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 7KH$WRPLF$JH

4 ,WZDVDORQJ WUDQVDFWLRQEXWVKHÀQDOO\ FRPPLWWHG6KHKDGSOHQW\ RIWLPHWRUROOEDFNEXW, MXVWNHSWFDWFKLQJDOOWKH H[FHSWLRQVVRLWDOOZRUNHG RXWLQWKHHQG

7UDQVDFWLRQVSURWHFW\RX:LWKWUDQVDFWLRQV\RXFDQWDNHDULVN


H[DPREMHFWLYHV

(QWHUSULVH-DYDEHDQV7UDQVDFWLRQV

2IILFLDO  ,GHQWLI\FRUUHFWDQGLQFRUUHFW VWDWHPHQWVRUH[DPSOHVDERXW (-%WUDQVDFWLRQVLQFOXGLQJEHDQ PDQDJHGWUDQVDFWLRQGHPDUFDWLRQ DQGFRQWDLQHUPDQDJHGWUDQVDFWLRQ GHPDUFDWLRQ

 ,GHQWLI\FRUUHFWDQGLQFRUUHFW VWDWHPHQWVDERXWWKH$SSOLFDWLRQ $VVHPEOHU¶VUHVSRQVLELOLWLHVLQFOXGLQJ WKHXVHRIGHSOR\PHQWGHVFULSWRU HOHPHQWVUHODWHGWRWUDQVDFWLRQVDQG WKHLGHQWL¿FDWLRQRIWKHPHWKRGVRI DSDUWLFXODUEHDQW\SHIRUZKLFKD WUDQVDFWLRQDWWULEXWHPXVWEHVSHFL¿HG

 *LYHQDOLVWRIWUDQVDFWLRQEHKDYLRUV PDWFKWKHPZLWKWKHDSSURSULDWH WUDQVDFWLRQDWWULEXWH

 *LYHQDOLVWRIUHVSRQVLELOLWLHVLGHQWLI\ WKRVHZKLFKDUHWKHFRQWDLQHU¶VZLWK UHVSHFWWRWUDQVDFWLRQVLQFOXGLQJ WKHKDQGOLQJRIJHW5ROOEDFN2QO\ VHW5ROOEDFN2QO\JHW8VHU7UDQVDFWLRQ 6HVVLRQ6\QFKURQL]DWLRQFDOOEDFNVIRU ERWKFRQWDLQHUDQGEHDQPDQDJHG WUDQVDFWLRQGHPDUFDWLRQ 1RWHZHFRYHUWKHSDUWRIWKDW GHDOVZLWK6HVVLRQ6\QFKURQL]DWLRQLQ WKH6HVVLRQ%HDQFKDSWHU

:KDWLWUHDOO\PHDQV


&KDSWHU

(-%WUDQVDFWLRQV

,

$Q(-%WUDQVDFWLRQLVDQDWRPLFXQLWRIZRUN !TRANSACTIONMEANSYOUVEWRAPPEDSOMEWORKSTATEMENTS METHODCALLS WHOLEMETHODS ACCESSTOADATABASE ETC INTOASINGLEUNITINSUCHAWAY THATEITHEREVERYTHINGSUCCEEDS OREVERYTHINGREVERTSTOITSPREVIOUSSTATE

)NOTHERWORDS YOUEITHERCOMMITORROLLBACKTHEWHOLEATOMICUNIT %ITHERITALLWORKS ORWEJUSTFORGETTHEWHOLETHINGEVERHAPPENED 6KRSSLQJFDUWFKHFNRXW DTXLQWHVVHQWLDO(-%WUDQVDFWLRQH[DPSOH )MAGINEYOUHAVEANONLINESHOPPINGCARTSYSTEM7HENITCOMESTIME TOCHECKOUT WHATNEEDSTOHAPPEN!TTHEVERYLEAST ƒ +DYHXVHUFRQILUPRUGHU ƒ 9DOLGDWHDQGGHELWXVHU·VFUHGLWFDUG ƒ 5HPRYHSXUFKDVHGLWHPVIURPLQYHQWRU\ ƒ &UHDWHDQGVXEPLWDVKLSSLQJRUGHU

one unitÑ if These must all happend,asALL of it ANY of this goes ba gh none of this should rollback as thou ever happened...

9OUDONTWANTTODEBITTHEINVENTORYIFTHECREDITCARDISNTVALID!ND YOUDONTWANTTOSUBMITASHIPPINGORDERIFTHEITEMSARENTYETINSTOCK !NDYOUDONTWANTANYOFITTOHAPPENIFTHEUSERDOESNTCONlRMTHE ORDER)FANYOFTHESETHINGSGOWRONG YOUWANTYOURTRANSACTIONTOEND WITHAROLLBACK RATHERTHANACOMMIT4HINKOFTHEHORRORYOUDGO THROUGHIFYOUCOULDNTDOATRANSACTIONROLLBACK)MAGINETHATYOUWENT THROUGHTHElRSTTHREEOUTOFTHEFOURSTEPSONLYTOlNDTHEUSERDOESNT CONlRMTHEORDER9OUWOULDHAVETOGOBACKANDADDMONEYTOTHE USERSCREDITCARD CANCELTHEORDER ANDPUTTHEITEMSBACKININVENTORY




WKH$&,'WHVW


$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 

3KDVH7:2

3KDVH21( %HIRUH,WHOO HYHU\RQHWRFRPPLW ,KDYHWRPDNHVXUH WKDWHYHU\ERG\LV UHDG\WRGRLW

,WORRNVOLNH HYHU\ERG\FDQGR LWVRQRZ,WHOOWKHP DOOWRFRPPLW "

G\

HD

U RX

\ UH

J

D

WR

W

UL

R RI

R

J

G RR

OHP

RE

U RS

J

Q

7UDQVDFWLRQ 3DUWLFLSDQW

7UDQVDFWLRQ 3DUWLFLSDQW DUH\R

JRIRU

XUHDG

LW

JRRG

\"

QRS

WRJ

DUH

\R

JR

7UDQVDFWLRQ 0DQDJHU

JR

XU

HP

IRU

HDG

RG

UREO

R

\"

WR

JR



7UDQVDFWLRQ 3DUWLFLSDQW

QR

SU

LW

7UDQVDFWLRQ 3DUWLFLSDQW

RE

OHP

7UDQVDFWLRQ 0DQDJHU

7UDQVDFWLRQ 3DUWLFLSDQW

7UDQVDFWLRQ 3DUWLFLSDQW

\RXDUHKHUH



WUDQVDFWLRQSURSRJDWLRQ

0W_Q\_WZS[QV-2*
$ 7KHWUDQVDFWLRQVWDUWHGLQWKH¿UVWPHWKRGSURSDJDWHVWRDOORWKHU PHWKRGVLQWKHFDOOVWDFN$OOFDOOHGPHWKRGVUXQZLWKLQWKHVDPH WUDQVDFWLRQ ,QWKLVERRNZH¶OODEEUHYLDWH³WUDQVDFWLRQ´WR³W[´ EDU

IRR

JR







%HDQ

%HDQ

%HDQ·VJR PHWKRGVWDUWV DWUDQVDFWLRQ W[$ 

%HDQ·VIRR PHWKRGUXQVLQ WKHWUDQVDFWLRQIURP%HDQ W[$ DQGFDOOVPHWKRGEDU  RQ%HDQ7KHWUDQVDFWLRQ W[$ LVSURSDJDWHGLQWRWKH PHWKRGFDOORQ%HDQ

%HDQFDOOVPHWKRG IRR RQ%HDQDQGWKH WUDQVDFWLRQLVSURSDJDWHG LQWRWKHPHWKRGFDOORQ %HDQ

JR

W[$

%HDQ

%HDQ·VEDU PHWKRGUXQV LQWKHWUDQVDFWLRQ W[$  SURSDJDWHGIURP%HDQ ,IDV\VWHPH[FHSWLRQ OLNH (-%([FHSWLRQ KDSSHQVLQDQ\ RIWKHPHWKRGVLQW[$WKH ZKROHWUDQVDFWLRQUROOVEDFN

EDU

W[$

IRR

W[$

IRR

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




%HDQ

%HDQ

IRR JR

JR

W[$

QRW[

ily is temporasrwithout A n io t c sa n n Tra nd foo() ru suspended taion. a transac

W[$ VXVSHQGHG

& 7KH¿UVWWUDQVDFWLRQLVVXVSHQGHGDQGWKHVHFRQGPHWKRG UXQVZLWKLQDQHZWUDQVDFWLRQ IRR

JR





%HDQ

%HDQ

JR

W[$

IRR

W[%

JR

W[$

arily A is tempourns in its n io t c sa n a r T nd foo() r suspended aransaction (tx B). own new t

\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  :ULWHWUDQVDFWLRQFRGHLQ\RXUEHDQ

that youÕre tell the DrDe of transactions taking ca

WUDQVDFWLRQW\SH!%HDQWUDQVDFWLRQW\SH!

%HDQPDQDJHG WUDQVDFWLRQV %07 

LPSRUW MDYD[HME  LPSRUWMDYD UPL5HPRWH([ FHSWLRQ

MDYD

8VHU7UDQVDFWLRQXW FRQWH[WJHW8VHU7UDQVDFWLRQ  XWEHJLQ  WUDQVDFWLRQDOFRGH ically XWFRPPLW  programmat

25 

'HFODUHWUDQVDFWLRQVLQWKH'' WUDQVDFWLRQW\SH!&RQWDLQHUWUDQVDFWLRQW\SH!

&RQWDLQHUPDQDJHG WUDQVDFWLRQV &07 

´87)´"! '2&7<3( HMEMDU 38%,QF

[PO

PHWKRG! HMEQDPH!0\%HDQHMEQDPH! declaratively PHWKRGQDPH!EDUPHWKRGQDPH! PHWKRG! WUDQVDWWULEXWH!5HTXLUHGWUDQVDWWULEXWH!

WKH


&KDSWHU

(-%WUDQVDFWLRQV


(YHU\WKLQJLQWKH8VHU7UDQVDFWLRQ LQWHUIDFHLVIRUEHDQVXVLQJEHDQ PDQDJHGWUDQVDFWLRQV %07  %HDQVZLWKFRQWDLQHUPDQDJHG WUDQVDFWLRQV &07 DUHQ·WDOORZHGWR FDOO$1<7+,1*LQWKLVLQWHUIDFH

MDYD[WUDQVDFWLRQ8VHU7UDQVDFWLRQ

(-%&RQWH[W JHW8VHU7UDQVDFWLRQ

JHW&DOOHU3ULQFLSDO JHW(-%+RPH JHW(-%/RFDO+RPH LV&DOOHU,Q5ROH

(-%&RQWH[WKDVPHWKRGVIRUERWK%07 DQG&07EHDQV )RU%07EHDQVRQO\ JHW8VHU7UDQVDFWLRQ

)RUERWK%07DQG&07 DOOQRQWUDQVDFWLRQUHODWHGPHWKRGV

VHW5ROOEDFN2QO\ JHW5ROOEDFN2QO\

)RU&07EHDQVRQO\ JHW5ROOEDFN2QO\ VHW5ROOEDFN2QO\

MDYD[HME(-%&RQWH[W 6XSHUFODVVRI6HVVLRQ&RQWH[W(QWLW\&RQWH[WDQG0HVVDJH'ULYHQ&RQWH[W 

YiX`e gfn\i

7KLQNDERXWWKHGLIIHUHQFHVEHWZHHQ&07DQG%07 ,IWLHGXSDQGIRUFHGWRSLFNRQHRYHUWKHRWKHUZKLFK ZRXOG\RXSLFN" %07 &07  

‰

‰

:K\":KDWDUHWKHSURVDQGFRQV"

\RXDUHKHUH



%07WUDQVDFWLRQV

5ISQVOI*5<\ZIV[IK\QWV  *HWD8VHU7UDQVDFWLRQUHIHUHQFHIURP\RXU(-%&RQWH[W FRQWH[WJHW8VHU7UDQVDFWLRQ  6WDUWWKHWUDQVDFWLRQ XWEHJLQ

g o somethin t e c n e r e f e Get a r lements the (WeÕll look at the actual that imp saction interface b)y on exceptions later when we get UserTran tUserTransaction( to the Exceptions chapter). calling ge Context. the EJB

 (QGWKHWUDQVDFWLRQ FRPPLWRUUROOEDFN 

XWFRPPLW XWUROOEDFN

SXEOLFYRLGFKHFN2XW WKURZV([FHSWLRQ^ 8VHU7UDQVDFWLRQXW FRQWH[WJHW8VHU7UDQVDFWLRQ 

XWEHJLQ 

this says, ÒStart a new transaction now.Ó

e methods s e h t e m u s e as ht methods; rwansaction (they mig r e h t o e m o call s nder this new t ter.) will run u weÕll get to that la not, but

DQRWKHU%HDQYDOLGDWH&UHGLW FXVWRPHU1XP  FKHFN,QYHQWRU\ 

XWFRPPLW 

now weÕre ending th container, ÒGo aheade transaction by telling the happened in this tran and commit everything that saction.Ó

RUXWUROOEDFN 

(or, we could end it with a rollback)

GR1RQ7[6WXII  `



&KDSWHU

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.

(-%WUDQVDFWLRQV

+ITT[\IKSWN\PMKPMKS7]\UM\PWL  UTBEGIN ISCALLED ANDTHE TRANSACTIONSTARTS

XWEHJLQ



W[$

FKHFN2XW

FKHFN2XW

 VALIDATE#REDIT COMPLETES

POPSOFFTHESTACK ANDTHE CHECK/UT METHODISSTILL RUNNINGINTX!

FKHFN2XW FKHFN2XW

UTBEGIN COMPLETES ANDNOWTHECHECKOUT METHODISRUNNINGINA TRANSACTIONTX! 



 COMMIT ISCALLED WHICH ENDSTHETRANSACTION

FRPPLW

W[$

FKHFN2XW

W[$

CHECK)NVENTORY ISCALLED ANDRUNSINTHESAME TRANSACTIONTX! 

W[$

FKHFN2XW

W[$



COMMIT COMPLETES AND NOWCHECK/UT ISRUNNING WITHOUTATRANSACTION

FKHFN2XW

RUNSINTHESAMETRANSACTION ASCHECK/UT 

YDOLGDWH&UHGLW

W[$

FKHFN2XW

W[$

W[$

FKHFN,QYHQWRU\ W[$

 VALIDATE#REDIT ISCALLEDAND

QRW[



CHECK)NVENTORY COMPLETES ANDPOPSOFFTHESTACK4HE TRANSACTIONTX! ISSTILL OPEN

FKHFN2XW



W[$

DO.ON4X3TUFF ISCALLED WITHOUTATRANSACTION

GR1RQ7[6WXII

QRW[

FKHFN2XW

QRW[

\RXDUHKHUH



%07WUDQVDFWLRQV

6KDUSHQ \RXU SHQFLO

 SXEOLFYRLGWHVW WKURZV([FHSWLRQ^ EOXH  8VHU7UDQVDFWLRQXW FW[JHW8VHU7UDQVDFWLRQ  8VLQJWKLVFRGHOLVWLQJPDUNWKH JUHHQ  PDWFKLQJFDOOVWDFNIUDPHVZLWKD XWEHJLQ  FKHFNPDUNLIWKDWIUDPHLVFXUUHQWO\ SXUSOH  LQDWUDQVDFWLRQ:HGLGRQHLQWKH XWFRPPLW  UHG  PLGGOHIRU\RX ` YRLGEOXH ^JUHHQ ` YRLGJUHHQ ^` YRLGSXUSOH ^UHG ` YRLGUHG ^` 

JUHHQ VWDUW WHVW

EOXH

EOXH

EOXH

WHVW

WHVW

WHVW

JHW8VHU7UDQV

WHVW

WHVW

UHG

WHVW

JUHHQ

EHJLQ

WHVW

WHVW

SXUSOH WHVW



&KDSWHU

WHVW

WHVW

WHVW

SXUSOH

WHVW

WHVW

HQG

UHG

FRPPLW WHVW

SXUSOH

WHVW

WHVW

WHVW

(-%WUDQVDFWLRQV


$%07EHDQPXVW127VWDUWDWUDQVDFWLRQ EHIRUHHQGLQJWKHFXUUHQWWUDQVDFWLRQ SXEOLFYRLGJR ^ 8VHU7UDQVDFWLRQXW FRQWH[WJHW8VHU7UDQVDFWLRQ 

out ction withthe a s n a r t a ) art or rollback O! CanÕt st NO! NO! Ng (through a commitdo that, it would completinone. If you COULD transactionsÓ. previous could have Ònested u

XWEHJLQ  GR6WXII  XWEHJLQ 

YiX`e gfn\i ,PDJLQHWKHLPSOLFDWLRQV RIVWDUWLQJDQHZ WUDQVDFWLRQEHIRUHHQGLQJ WKHFXUUHQWRQH:KDW PLJKWKDSSHQLI\RXZHUH DOORZHGWRGRWKLV"

`



1HVWHGWUDQVDFWLRQV DUHQRWDOORZHGLQ(-% DWWKH
$%07VWDWHOHVVVHVVLRQRUPHVVDJHGULYHQEHDQ PXVW127FRPSOHWHDWUDQVDFWLRQDOPHWKRG ZLWKRXWHQGLQJWKHWUDQVDFWLRQ SXEOLFYRLGJR ^

YiX`e gfn\i :K\DUHVWDWHIXOVHVVLRQ

8VHU7UDQVDFWLRQXW FRQWH[WJHW8VHU7UDQVDFWLRQ  EHDQVDOORZHGWRHQGD XWEHJLQ  GR0RUH  `

hod eÕre ending the met This is a problem! eWtransaction we started. In without ending thereÕs no commit() or rollback(). other words, th

2QO\67$7( )8/VHVVLR Q EHDQVFDQO HDYHD WUDQVDFWLRQ RSHQDWWK H HQGRIDPH WKRG

PHWKRGZLWKRXWHQGLQJWKH WUDQVDFWLRQ" )RUDVWDWHIXOEHDQFDQ \RXWKLQNRIDVFHQDULR KHUH\RXPLJKWZDQW RGRWKLV OHDYHWKH UDQVDFWLRQRSHQ " :KDWPLJKWJRZURQJLI RXGRWKLV"

\RXDUHKHUH



%07WUDQVDFWLRQV

*5<\ZIV[IK\QWV[IZMWVM_Ia" \PMaKIVXZWXIOI\MW]\\WI+5< JMIVJ]\VWW\PMZ\ZIV[IK\QWV KIVXZWXIOI\MQV\WI*5<JMIV ,·PD&07EHDQ DQGWKDWPHDQV,·P SURPLVFXRXVZKHQLWFRPHV WRWUDQVDFWLRQV,·OOXVH DQ\RQH·V

%RWK%07DQG&07EHDQ WUDQVDFWLRQVSURSDJDWH LQWRD&07EHDQ

&07EHDQ

W[FR P &07 LQJIUR PD EHD Q

D

%07EHDQ

IURP PLQJ W[FR EHDQ  %07

&07EHDQ

$&07EHDQFDQUXQLQ WUDQVDFWLRQVFRPLQJIURP ERWK&07DQG%07EHDQV 7RWKHFDOOHG&07EHDQLW PDNHVQRGLIIHUHQFHKRZ RU E\ZKRP WKHWUDQVDFWLRQ ZDVVWDUWHG

$%07EHDQZLOO1(9(5XVHDQ\ RWKHUEHDQ·VWUDQVDFWLRQ7KHFDOOHU·V WUDQVDFWLRQZLOOEHVXVSHQGHG

&07EHDQ

ns are Transactiod when they suspende BMP bean! get to a

WUDQ V IURP DFWLRQV F D& 07E RPLQJ HDQ

,SUDFWLFH VDIHW[7KHRQO\ WUDQVDFWLRQV,UXQLQ DUHP\RZQ,IDFDOOHU·V WUDQVDFWLRQFRPHVLQ, MXVWVD\´VXVSHQGµ

%07EHDQ %07EHDQ



&KDSWHU

J RPLQ QVF Q R L W F D D H WUDQV %07E D P R U I

7KHRQO\WUDQVDFWLRQD%07 EHDQZLOOUXQLQLVRQHWKDWWKH EHDQLWVHOIFUHDWHV

(-%WUDQVDFWLRQV

?PI\LWM[Q\UMIV\W[][XMVL I\ZIV[IK\QWV' )FATRANSACTIONISINPROGRESSWHENAMETHODONA"-4 BEANISCALLED THETRANSACTIONISSUSPENDED4EMPORARILY 4HETRANSACTIONJUSTSITSTHEREWAITINGFORTHE"-4BEAN TOCOMPLETEITSWORK7ORKTHATSNOTPARTOFTHECALLERS ORIGINALTRANSACTION/NCETHE"-4METHODlNISHESAND ISPOPPEDOFFTHESTACK THEORIGINALTRANSACTIONKICKS BACKIN RIGHTWHEREITLEFTOFF )MAGINETHISSCENARIOA#-4BEAN BEANONE ISRUNNING AMETHODFOO INATRANSACTIONTX! WHENITCALLSA METHODBAR ONBEANTWOA"-4BEAN /NCEBAR COMPLETESANDPOPSOFFTHESTACK METHODFOO INVOKES ANOTHERMETHOD BEE BUTTHISTIMETHECALLEDBEANIS ANOTHER#-4BEANBEANTHREE 

&07EHDQLQ W[$

DU

DOOVE  F

 FDOO VE HH



 PHWKRGIRR  VWDUWV

%07EHDQ VXVSHQGVW[$DQG UXQVEDU LQDQHZ WUDQVDFWLRQW[%

&07EHDQJHWVWKH WUDQVDFWLRQDQGUXQV EHH LQW[$

EDU IRR 

W[$

-ETHODFOO OFA#-4BEAN ISRUNNINGINTRANSACTION! -ETHODFOO THENINVOKES METHODBAR ONA"-4BEAN

:KHQDWUDQVDFWLRQLV VXVSHQGHGLWZDLWVXQWLOLW FDQSLFNXSZKHUHLWOHIW RII%XWWKLVPHDQVWKDWWKH WKLQJVWKDWKDSSHQZKLOHWKH WUDQVDFWLRQLVVXVSHQGHGDUH 127SDUWRIWKHVDPHDWRPLF XQLW,QRWKHUZRUGVWKH WKLQJVWKDWKDSSHQZKLOHWKH WUDQVDFWLRQLVVXVSHQGHGZRQ·W EHUROOHGEDFNLIWKHVXVSHQGHG WUDQVDFWLRQ DIWHULWFRPHV EDFNWROLIH IDLOVWRFRPPLW

IRR  -ETHODBAR SUSPENDS

W[%

EHH

W[$

W[$

IRR

W[$

VXVSHQGHG

TRANSACTION! ANDSTARTSA NEWTRANSACTION "-ETHOD BAR RUNSINTHENEW TRANSACTION" THENCOMPLETES



7HENMETHODBAR COM PLETES FOO RESUMESAND PICKSUPTRANSACTION!AGAIN )TTHENCALLSMETHODBEE ONBEANTHREEA#-4BEAN  -ETHODBEE RUNSINFOO S EXISTINGTRANSACTION! 

\RXDUHKHUH



WKH8VHU7UDQVDFWLRQLQWHUIDFH


6KDUSHQ \RXU SHQFLO 4HE5SER4RANSACTIONINTERFACEHASSIXMETHODSFOR THETHINGSA"-4BEANMIGHTWANTTODO4RYTOFIGURE OUTTHEMETHODNAMES BASEDONTHEDESCRIPTIONOF WHATYOUWANTTODO4HEANSWERSAREATTHEBOTTOM UPSIDEDOWN SODONTLOOKDOWNTHERE



%HJLQDWUDQVDFWLRQ XWBBBBBBBBBBBBBBBBBBBBBB



(QGDWUDQVDFWLRQ

XWBBBBBBBBBBBBBBBBBBBBBB

RU XWBBBBBBBBBBBBBBBBBBBBBB



0DUNDWUDQVDFWLRQIRUUROOEDFN

8VHU7UDQ VDFWLRQL V IRU%07E HDQVRQO\  $&07EH DQ VXSSRVHG LVQHYHU WRJHW R UWU \ WRXVH D UHIHUHQF HWRD 8VHU7UDQ VDFWLRQ

XWBBBBBBBBBBBBBBBBBBBBBB



)LQGRXWWKHVWDWXVRIWKHWUDQVDFWLRQ XWBBBBBBBBBBBBBBBBBBBBBB



6HWWKHWUDQVDFWLRQWLPHRXW

7 FWLRQLV12 8VHU7UDQVD  H F LQ 6 V Q D H IRUHQWLW\E  7 V086 HQWLW\EHDQ XVHH \R I L 7 EH&0 Q WLRQFRGHL F 8VHU7UDQVD Z R Q N X HDQ\R DQHQWLW\E O D J OH W R WKHFRGH·VQ

XWBBBBBBBBBBBBBBBBBBBBBB

7KHUH¶VQRWKLQJDERXWWUDQVDFWLRQ WLPHRXWRQWKHH[DP



&KDSWHU

EHJLQ FRPPLW RUUROOEDFN VHW5ROOEDFN2QO\  JHW6WDWXV VHW7UDQVDFWLRQ7LPHRXW

$OOWUDQVDFWLRQVKDYHVRPHGHIDXOWWLPHRXWYDOXH EXW\RXFDQFKDQJHWKDWZLWK VHW7UDQVDFWLRQ7LPHRXW DQ,QW9DOXH $VDEHDQGHYHORSHU \RX¶OOSUREDEO\QHYHUXVHDQ\WKLQJEXWWKHGHIDXOWWLPHRXW YDOXHVRZHGRQ¶WWHVWIRULWRQWKHH[DP

(-%WUDQVDFWLRQV

[M\:WTTJIKS7VTa 
,W·VWUDJLF :KHQ\RXFDOOWKH VHW5ROOEDFN2QO\ PHWKRG \RXVHWDÁDJWKDWFDQ WHOORWKHUEHDQVWKDWWKH WUDQVDFWLRQZLOOHQGRQO\ RQHZD\KRUULEO\ ,I\RXNQRZLQ\RXUFRGH WKDWWKLQJVDUHQ·WJRLQJWR ZRUNFDOOWKLVPHWKRG ,IWKHWUDQVDFWLRQLVJRLQJ WRGLHLW·VSUREDEO\IRUWKH EHVW,WZDVPHDQWWREH ,W·VJRLQJWRDEHWWHUSODFH

3O WHENDOESATRANSACTIONEND!SSUMINGNO3YSTEM %XCEPTIONSARETHROWN ATRANSACTIONENDSWHENTHE #-4METHODTHATSTARTEDTHETRANSACTIONCOMPLETES OR FORA"-4BEAN WHENTHEBEANSCODECALLSCOMMIT OR ROLLBACK 

%HDQ$ VWDUWVW[=

DPHWKRGLQ %HDQ%LVFDOOHG DQGUXQVLQW[=

call nsaction can ra ra t is h t in n re t nsaction su Any bea e k a m o t () y setRollbackOmnlits. m co r Z neve nly(), it s setRollbackOdoes -- the ll ca B n ea B If be what Bean C wonÕt matterl code in Bean C will nevern C ea na if B DPHWKRGLQ transactio nÕt it be nice Bean C does %HDQ&LVFDOOHG committed. Would E R O out BEF hat in a minute. 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"


f : at the endolloback le p m a ex al c pi A ty n, commit or r the transactmioe conditions. 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
(-%&RQWH[W JHW&DOOHU3ULQFLSDO JHW(-%+RPH JHW(-%/RFDO+RPH JHW5ROOEDFN2QO\ JHW8VHU7UDQVDFWLRQ LV&DOOHU,Q5ROH VHW5ROOEDFN2QO\

(YHU\WKLQJLQ8VHU7UDQVDFWLRQ LVIRU%07EHDQV21/< VHW5ROOEDFN2QO\ LQ(-%&RQWH[W LVIRU&07EHDQV21/<

4HEMETHODSINTHE5SER4RANSACTIONINTERFACEARE FOR"-4BEANSONLY#-4BEANSCANTUSEANYTHINGIN 5SER4RANSACTION 4HE%*"#ONTEXTINTERFACE ONTHEOTHERHAND IS FORBOTH"-4AND#-4BEANS EXCEPTFORTHETWO TRANSACTIONMETHODS 4HESET2OLLBACK/NLY ANDGET2OLLBACK/NLY METHODSIN%*"#ONTEXTAREOFF LIMITSTO"-4BEANS "OTTOMLINE"-4BEANSCALLSET2OLLBACK/NLY ONA 5SER4RANSACTION#-4BEANSCALLSET2OLLBACK/NLY ONAN%*"#ONTEXT O\  EDFN2Q VHW5ROO V OO D F W KD Q $EHDQW QDWUDQVDFWLR HL E 7 21/< 6 8 0 07EHDQ % D P LQ UR I 2QO\ RQO\ZLWK W5ROOEDFN HUZRUGV LW RU H V WK OO R D ,Q F  Q Q


%H685(\ RX NQRZWKHU XOHV IRU%27+R IWKH VHW5ROOEDF N2QO\  PHWKRGV

%HUHDG\IRUW KHH[DPWRWH VW\RXRQ WKHXVHRIVHW 5ROOEDFN2QO\ IRUERWK %07DQG&0 7EHDQV (-%&RQWH[WV HW5ROOEDFN2QO \ 8VHU7UDQVDF WLRQVHW5ROOEDF N2QO\ 5HPHPEHUQR VLQJOHEHDQF DQHYHU XVH%27+RIW KHVH &07EHDQVFD QXVHRQO\WK H (-%&RQWH[WV HW5ROOEDFN2QO \ %07EHDQVFD QXVHRQO\WK H 8VHU7UDQVDF WLRQVHW5ROOEDF N2QO\ ([SHFWWRVHH FRGHH[DPSOHV Z \RX¶OOQHHGWR ¿JXUHRXWLIWKH KHUH EHDQLV %07RU&07 E\ORRNLQJDWWK HFRGH $QGLWZRQ¶WEH DVREYLRXVDV DFDOO WRJHW8VHU7UD QVDFWLRQ ,I\R XVHHD FDOOWR(-%&RQ WH[WVHW5ROOEDF N2 IRUH[DPSOH\ RXNQRZWKDWWK QO\  LVPXVW EHD&07EH DQ6RLIWKDWV DPHEHDQ ODWHUVWDUWVD8 VHU7UDQVDFWLR Q\RX NQRZWKHFRGH LVLOOHJDO

\RXDUHKHUH



JHW5ROOEDFN2QO\ PHWKRG

OM\:WTTJIKS7VTa  *MKI][MTQNM¼[\WW[PWZ\NWZIJMIV\W_I[\M\QUM /NCEABEANHASCALLEDSET2OLLBACK/NLY THETRANSACTION ISSENTENCEDTODEATH)TWILLNEVERCOMMIT"UTTHE TRANSACTIONMIGHTSTILLHAVEALONGWAYTOGO WITHPLENTYOF OTHERMETHODSINOTHERBEANS ANDWITHLOTSOFHEAVYCODE )MAGINEYOUREABEAN(OWWOULDYOUFEELIFTHE TRANSACTIONWEREALREADYDOOMEDBEFOREYOURMETHODS WERECALLED BUTNOBODYTOLDYOU 2K OLNH,GRQ·WKDYH %(77(5WKLQJVWRGRWKDQ UXQP\OLQHVRIFRGH ZKHQLW·VDOUHDG\D'HDG 7UDQVDFWLRQ:DONLQJ"

&07EHDQVFDOO JHW5ROOEDFN2QO\ WR ILQGRXWLIWKHWUDQVDFWLRQ WKH\·UHLQLVDOUHDG\ GRRPHG,IWKHWUDQVDFWLRQ LVQHYHUJRLQJWRFRPPLW ZK\VKRXOGWKHEHDQZDVWH WLPHZLWKORWVRIFRGH"

)FYOUREA#-4BEAN YOUCANCALLGET2OLLBACK/NLY TOlND OUTIFYOURTRANSACTIONHASALREADYBEENSENTENCEDTODEATH )FITHAS WHYBOTHERDOINGANYWORK

LI JHW5ROOEDFN2QO\ ^ VDYH:RUOG  `HOVH^ DEDQGRQ$OO+RSH  `



&KDSWHU

JHW5ROOED FN2QO\  LV127IR U%07 EHDQV2 QO\&07 EHDQVFD QFDOO JHW5ROOED FN2QO\

(-%WUDQVDFWLRQV

*5<JMIV[][MOM\;\I\][QV[\MILWNOM\:WTTJIKS7VTa 8VHU7UDQVDFWLRQ EHJLQ FRPPLW JHW6WDWXV UROOEDFN VHW5ROOEDFN2QO\ VHW7UDQVDFWLRQ7LPHRXW

(-%&RQWH[W JHW&DOOHU3ULQFLSDO JHW(-%+RPH JHW(-%/RFDO+RPH JHW5ROOEDFN2QO\ 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


\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

ƒ 0DQGDWRU\

JHW)RR

ƒ 6XSSRUWV

GR%DU

ƒ 1RW6XSSRUWHG

GR%LJ7KLQJ

Required Supports Required RequiresNew

ƒ 1HYHU



:KHQWKHPHWKRGLVFDOOHGWKH FRQWDLQHUXVHVWKHDWWULEXWHWRGR RQHRIÀYHWKLQJV

ƒ 5XQWKHPHWKRGLQWKHFDOOHU·V WUDQVDFWLRQ

YRLGJR ^ D)RR%HDQVHW)RR  `

25

ƒ 6XVSHQGWKHFDOOHU·VWUDQVDFWLRQDQG VWDUWDQHZWUDQVDFWLRQ 25

ƒ 6XVSHQGWKHFDOOHU·VWUDQVDFWLRQDQGUXQ WKHPHWKRGZLWKRXWDWUDQVDFWLRQ 25

ƒ 7KURZDQH[FHSWLRQEHFDXVHWKHFDOOHU GRHVQRWKDYHDWUDQVDFWLRQ 25

ƒ 7KURZDQH[FHSWLRQEHFDXVHWKHFDOOHU GRHVKDYHDWUDQVDFWLRQ



&KDSWHU

/HW·VVHHWKH JR PHWKRGLVDOUHDG\LQD WUDQVDFWLRQZKHQLWFDOOVVHW)RR  DQGVHW)RR KDVD5HTXLUHGW[ DWWULEXWHVR,ZLOOUXQVHW)RR LQ WKHVDPHWUDQVDFWLRQDVJR

(-%WUDQVDFWLRQV

$VDQ$SSOLFDWLRQ $VVHPEOHU,KDYHWR NQRZP\DWWULEXWHVVRWKDW, FDQJHWWKHEHKDYLRU,GHVLUH IURPP\EHDQV

3VW_aW]ZI\\ZQJ]\M[ +RZDQDWWULEXWHDIIHFWVEHKDYLRUGHSHQGVRQ RQHWKLQJ

,VWKHFDOOLQJPHWKRGLQDWUDQVDFWLRQ"

SXEOLFYRLGIRR ^ D%HDQEDU  ` 

-ETHODFOO ISINATRANSACTIONTX! 

IRR



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 the container wou en in a transaction, transaction for bald have started a new r() to run in.

(tx A) foo() is in a transactioann ot her on when it calls bar() is od th bean. The bar() me marked as Required.

W[$

-ETHODBAR ISMARKEDWITHTHE2EQUIRED TRANSACTIONATTRIBUTE PHWKRG! HMEQDPH!0\%HDQHMEQDPH! PHWKRGQDPH!EDUPHWKRGQDPH! PHWKRG! WUDQVDWWULEXWH!5HTXLUHGWUDQVDWWULEXWH!

 4HEBAR METHODRUNSINTHECALLERSTRANSACTIONTX! 

EDU

W[$

IRR

W[$ \RXDUHKHUH



DWWULEXWHVWKDWUHTXLUHDWUDQVDFWLRQ

7UDQVDFWLRQDWWULEXWHVWKDW UHTXLUHDWUDQVDFWLRQ

$WWULEXWHIRUEDU

5HTXLUHG

IRR WUDQVDFWLRQVWDWXV

,

,IWKHPHWKRGLVFDOOHG ZLWKDQH[LVWLQJ WUDQVDFWLRQFRQWH[WWKH PHWKRGUXQVLQWKDW H[LVWLQJWUDQVDFWLRQ,I WKHUHLVQ¶WDWUDQVDFWLRQ WKHFRQWDLQHUZLOOVWDUWD QHZRQH

5HTXLUHV1HZ

'DQJHU0DQGDWRU\ UHDOO\PHDQV ³5HTXLUHV([LVWLQJ´,IWKH PHWKRGLVFDOOHGZLWKRXW DQH[LVWLQJWUDQVDFWLRQ FRQWH[WWKHFRQWDLQHU WKURZVDQH[FHSWLRQ

IRR

&KDSWHU

BBB

,

IRR

°

,

IRR

W[$

°

EDU

W[$ BBBB

, ,

BBB

EDU IRR

W[% W[$

FRQWDLQHUVXVSHQGVW[$DQGVWDUWV DQHZWUDQVDFWLRQ W[% IRUEDU

°

,

EDU IRR

W[$ BBBB

FRQWDLQHUVWDUWVDQHZWUDQVDFWLRQ W[$ IRUEDU

W[$

°

BBB

, ,

EDU IRR

W[$ W[$

EDU UXQVLQW[$

LQWUDQVDFWLRQ$ W[$

IRR

W[$ W[$

FRQWDLQHUVWDUWVDQHZWUDQVDFWLRQ W[$ IRUEDU

QRWUDQVDFWLRQ

,

IRR

IRR

LQWUDQVDFWLRQ$ W[$

IRR

EDU

EDU UXQVLQW[$

QRWUDQVDFWLRQ

QRWUDQVDFWLRQ



°

, ,

LQWUDQVDFWLRQ$ W[$

7KHPHWKRGZLOO DOZD\VUXQZLWKDQHZ WUDQVDFWLRQ,IWKH PHWKRGLVFDOOHGZLWK DQH[LVWLQJWUDQVDFWLRQ FRQWH[WWKHFDOOHU¶V WUDQVDFWLRQLVVXVSHQGHG XQWLOWKLVPHWKRG FRPSOHWHV

0DQGDWRU\

IRR

W[$

UHVXOW

°

- `K M X \ Q W

V

(-%WUDQVDFWLRQV

7UDQVDFWLRQDWWULEXWHVWKDWGR QRWUHTXLUHDWUDQVDFWLRQ

$WWULEXWHIRUEDU

6XSSRUWV

IRR WUDQVDFWLRQVWDWXV

,

,IWKHPHWKRGLVFDOOHG ZLWKDQH[LVWLQJ WUDQVDFWLRQFRQWH[WWKH PHWKRGUXQVLQWKDW WUDQVDFWLRQ,IWKHUHLVQ¶W DWUDQVDFWLRQWKHPHWKRG UXQVZLWKDQ³XQVSHFL¿HG WUDQVDFWLRQFRQWH[W´

1RW6XSSRUWHG

1HYHUPHDQV³1R3UH ([LVWLQJ´,IWKHPHWKRG LVFDOOHGZLWKDQH[LVWLQJ WUDQVDFWLRQFRQWH[WWKH FRQWDLQHUWKURZVDQ H[FHSWLRQ,IWKHUHLVQ¶WD WUDQVDFWLRQWKHPHWKRG UXQVZLWKDQ³XQVSHFL¿HG WUDQVDFWLRQFRQWH[W´

°

, ,

W[$ W[$

EDU IRR EDU UXQVLQW[$

LQWUDQVDFWLRQ$ W[$

BBBB BBBB

EDU IRR

BBB

°

IRR

QRWUDQVDFWLRQ

,

,IWKHPHWKRGLVFDOOHGZLWK DQH[LVWLQJWUDQVDFWLRQ FRQWH[WWKHFDOOHU¶V WUDQVDFWLRQLVVXVSHQGHG 5HJDUGOHVVRIZKHWKHU WKHUHLVDQH[LVWLQJ WUDQVDFWLRQWKHPHWKRG ZLOOUXQLQDQ³XQVSHFL¿HG WUDQVDFWLRQFRQWH[W´

1HYHU

IRR

W[$

UHVXOW

IRR

EDU UXQVZLWKDQ³XQVSHFL¿HG WUDQVDFWLRQFRQWH[W´

W[$

°

,

EDU 

BBBB

IRR

W[$

FRQWDLQHUVXVSHQGVW[$EDU UXQV ZLWKDQ³XQVSHFL¿HGWUDQVDFWLRQ FRQWH[W´

LQWUDQVDFWLRQ$ W[$

BBBB BBBB

EDU IRR

BBB

°

QRWUDQVDFWLRQ

,

IRR

IRR

EDU UXQVZLWKDQ³XQVSHFL¿HG WUDQVDFWLRQFRQWH[W´

W[$

°

- `K M X \ Q W

V

LQWUDQVDFWLRQ$ W[$

IRR QRWUDQVDFWLRQ

BBB

°

EDU IRR

BBBB BBBB

EDU UXQVZLWKDQ³XQVSHFL¿HG 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


(-%2EMHFW

ƒ %XVLQHVVPHWKRGVLQWKHFRPSRQHQWLQWHUIDFH ƒ 121(RIWKHRWKHUPHWKRGVWKHFOLHQWVHHVLQ WKHFRPSRQHQWLQWHUIDFH IURP(-%2EMHFWRU (-%/RFDO2EMHFW

JHW(-%+RPH JHW+DQGOH UHPRYH LV,GHQWLFDO (-%2EMHFWR JHU3ULPDU\.H\

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

ƒ 121(RIWKHPHWKRGVLQWKHKRPHLQWHUIDFH LQFOXGLQJWKRVHZULWWHQE\WKH%HDQ3URYLGHUDV ZHOODVWKRVHIURP(-%+RPHRU(-%/RFDO+RPH

s ly method n o e h t e r e these a e to mark in th you hav ent descriptor deploym (QWLW\EHDQV ƒ %XVLQHVVPHWKRGVLQWKHFRPSRQHQWLQWHUIDFH ƒ 121(RIWKHRWKHUPHWKRGVWKHFOLHQWVHHVLQ WKHFRPSRQHQWLQWHUIDFH IURP(-%2EMHFWRU (-%/RFDO2EMHFW H[FHSWUHPRYH

$GYLFH JHW$GYLFH LJQRUH$GYLFH

(-%2EMHFW JHW(-%+RPH JHW+DQGOH UHPRYH LV,GHQWLFDO (-%2EMHFWR JHW3ULPDU\.H\

$GYLFH+RPH FUHDWH

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

ƒ $//RIWKHKRPHLQWHUIDFHPHWKRGVZULWWHQE\WKH %HDQ3URYLGHUDVZHOODVWKHUHPRYH PHWKRGV IURP(-%+RPHRU(-%/RFDO+RPH

h more methods wit You have to emwarhek n you use entity beans r, an attribut with session beans..Remembe than you do remove() are a Big Deal to create() and ert and delete!). an entity (ins 0HVVDJHGULYHQEHDQV ƒ RQ0HVVDJH 

&KDSWHU

&XVWRPHU JHW1DPH VHW1DPH JHW,'

&XVWRPHU+RPH FUHDWH ILQG%\3ULPDU\.H\ JHW&XVWRPHU/LVW

A message-driven bean doesnÕt have any client interfaces. RQ0HVVDJH

(-%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
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

LQWLV 7KHSR 2: 1·7.1 <28'2

W127 \RXPXV W D K W V L UH  SRLQWKH HKDYLRUIURPWKH  7KHNH\ RZ FWE Q D N [ ¶W H Q \ R Q G UHO\RQD HFDXVH\RXMXVW  O\ E D UE SURE FRQWDLQH HU\RX¶OO S LV OR WK H U Y H H Y R QG W¶VVOHHS Q $VDEHD H Q¶W P V R L HDP LVDQG QHYHUORV GWRNQRZZKDW HH %XW\RXQ  G H WH Q UD D JX :HWKLQNEHLQJDVQRZERDUGLQVWUXFWRULVEHWWHU WKDQWHDFKLQJVXUILQJ-XVWDVIXQEXWZLWKRXWDOO WKDWQHRSUHQH2UVKDUNV

ƒ &07PHVVDJHGULYHQEHDQPHWKRGVHME&UHDWH DQG HME5HPRYH  5HPHPEHUIRUDPHVVDJHGULYHQEHDQHME&UHDWH DQG HME5HPRYH DUHFDOOHGE\WKHFRQWDLQHUZKHQLWZDQWVWRDGGRU UHPRYHEHDQVIURPWKHSRRO7KHUH·VQRFDOOLQJFOLHQWWUDQVDFWLRQ EHFDXVHDPHVVDJHGULYHQEHDQGRHVQ·WKDYHDUHDOFOLHQW 3O ISTHEREATRANSACTIONORNOT7HYISIThUNSPECIlEDv 7HYISNTITJUSThDElNITELYNOTRANSACTIONv 4HESPECLETSTHE#ONTAINERDOWHATEVERITWANTS4HE SPECSUGGESTSSEVERALOPTIONS INCLUDINGEVERYTHINGFROM EXECUTINGWITHOUTANYTRANSACTIONATALLTOMERGING MULTIPLECALLSTOARESOURCEMANAGERTOGETHERINTOONE TRANSACTION \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 IURPDEHDQLQD WUDQVDFWLRQ

WJHW5ROOEDFN2QO\ 
5HTXLUHV



0HVVDJHG ULYHQEHDQ V FDQXVHRQ O\7:2 DWWULEXWHV 5HTXLUHV DQG1RW6X SSRUWHG 7KLQNDERXWLW $PHVVDJH GULYHQEHDQ KDYHDFDOOLQ GRHVQ¶W JFOLHQW7KH FRQWDLQHUFDO 0HVVDJH P OVWKHRQ HWKRGVRLWGR HV WRXVHWKHRW KHURQHV5HT Q¶WPDNHDQ\VHQVH XLUHV1HZ"7 XVHOHVVEHFD KDW¶V XVHWKHUHZLOO QHYHUEHDSU LQJWUDQVDFWLR HH[LVW Q0DQGDWRU\ "7KDWZRXOG XSHYHU\WLP EORZ H E\³EORZX S´ZHPHDQ H[FHSWLRQ E WKURZDQ HFDXVH0DQ GDWRU\PHDQV 3UH([LVWLQJ´ ³5HTXLUHV 1HYHU":HO OWKDWLVDOZD\ FDVHDQ\ZD\ VWKH DQG6XSSRUWV LVVLOO\WRR< RXFDQ

5HPHPE HURQO\6 <67(0 H[FHSWLR QVFDXVH DQ DXWRPDWL FUROOEDF N :H¶OOFRYHU WKLVLQGHWD LO LQWKH([FH EXWIRUQRZ SWLRQVFKDS EHDZDUHW WH KDWDSSOLFD 127DXWRP WLRQH[FHSWLR U DWLFDOO\FDX QVGR VHDUROOEDFN H[FHSWLRQLV $QDSSOLFD DQ WLRQ RQDEHDQLQ \FKHFNHGH[FHSWLRQW KDWLVGHFOD WHUIDFHXQOH UHG VVLW¶VD5H 5HPRWH([F PRWH([FHS HSWLRQLVLQ WLRQ DVSHFLDOF DWHJRU\  /HW¶VVD\\R XVHHVRPH FRGHRQWK VKRZVWKHE HH[DPWKD HDQWKURZLQ W JDQDSSOLF VD\D)LQG DWLRQH[FHS HU([FHSWLRQ WLRQ 'R127V DFWLRQZLOOE D\WKDWWKHW HUROOHGEDFN UDQV ,I<28 % GHFLGHLQ\ HDQ3URYLG RXUORJLFWK HU  D W WKHVLWXDWLR DOORZWKHWUD QLVWRREOH QVDFWLRQWR DNWR FRQWLQXHWK VHW5ROOEDFN HQ<28PX 2QO\ 7KH VWFDOO FRQWDLQHUG UROOEDFN21 RHVDQDXWR /<IRUV\VWH PDWLF PH[FHSWLR FHSWLRQRUD QV OLNH(-% Q\RWKHUUX ([ QWLPHH[FH SWLRQ 



&KDSWHU

(-%WUDQVDFWLRQV

(We caught a BMT bean and a CMT bean arguing at the bar.) %07AW][]KS &077P\PI\¼[[WKTM^MZ?PI\I_Ia_Q\P_WZL[)VL_PI\LW aW]UMIVJa\PI\')VLQ[Q\R][\UMXMZ[WVITTaWZITT+5<JMIV[ QVOMVMZIT' %07)TTWN aW]?MMVQM[AW]¼ZMVW\JMIVMVW]OP\WPIVLTM aW]ZW_V\ZIV[IK\QWV[[WaW]TMI^MQ\ITT]X\W\PMKWV\IQVMZ AW]¼ZMXZWJIJTaINZIQLWN \PMOIZJIOMKWTTMK\WZ\WW &07?MMVQM',WV¼\\MTTUMaW]IK\]ITTaJMTQM^M\PI\aW]¼ZMUIV IOQVOaW]ZW_V\ZIV[IK\QWV['
%07AW]ZMITTaPI^M\WI[S\PI\73TM\UMJZMISQ\LW_V [W\PI\M^MVaW]KIV]VLMZ[\IVL"\ZIV[IK\QWV[P]Z\KWVK]ZZMVKa
&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

&07AM[1LW?PI\LWaW]\PQVS[M\:WTTJIKS7VTaQ[NWZ'

&077PaMIPTQSM\PI\¼[VW\OWVVISQTTaW]ZXMZNWZUIVKM' ,WV¼\aW]SVW_PW_U]KP\PI\P]Z\[aW]Z[KITIJQTQ\a'
%07AW]KIV¼\KITT\PI\
%07AMIPJ]\QN [WUMWVMVMML[\WLW\PI\*5<Q[\PMWVTa _Ia\WLWQ\

&071KIV¼\JMTQM^M\PMaTM\aW]JMIJMIVAW]SVW_\PI\-2* +WV\M`\PI[I[M\:WTTJIKS7VTaUM\PWLR][\NWZ+5<JMIV[

&07-`KMX\ITUW[\VWJWLaM^MZVMML[\WLW\PI\ 7Z[PW]TL 73aM[1¼TTIOZMM\PI\QN QV\PM]VJMTQM^IJTaIVLQVKZMLQJTa]V TQSMTaM^MV\\PI\ILM^MTWXMZVMML[\WLW\PI\aW]¼ZM\PMWVTa_Ia

%07=PaW]¼ZMNWZOM\\QVO\PI\1PI^M\PMXW_MZ\WZWTTJIKS &07;WLW1 %076WaW]LWV¼\

%077P1NWZOW\IJW]\\PI\*]\[W_PI\'AW][\QTTIZMV¼\QV KWV\ZWTWN aW]Z\ZIV[IK\QWVJW]VLIZQM[ &07*]\_PI\LWM[\PI\UI\\MZ'5aUM\PWL[IZMITTUIZSML _Q\PPW_1_IV\\ZIV[IK\QWV[\WJMIXXTQML[WPW_Q[\PI\LQNNMZ MV\NZWUKWV\ZWTTQVO\PMJW]VLIZQM[WN I\ZIV[IK\QWV' %070-447 AW]Z\ZIV[IK\QWV[U][\JMI\TMI[\I[TWVOI[I _PWTMUM\PWL 1KIV[KWXMUa\ZIV[IK\QWV[\W[WUM\PQVOUWZM OZIV]TIZ\PIV\PM_PWTMLIZVUM\PWL &07*]\_Pa_W]TLaW]M^MZ_IV\\W'

*]\\PMZM¼[VWW\PMZZMI[WV1KIV[MM\W][M*5<M[XMKQITTa[QVKM *5<LMNMI\[\PM_PWTMZM][IJTMKWUXWVMV\\PQVO0W_IZZWOIV\ KIVaW]JM'AW]KIVVM^MZZ]VQVIVaJWLaMT[M¼[\ZIV[IK\QWV[  7VTaaW]ZW_V


WUDQVDFWLRQVLQWKHGHSOR\PHQWGHVFULSWRU

5IZSQVO\ZIV[IK\QWV[QV\PM,, !LLBEANSMUSTSAYWHETHERTHEYREUSINGBEAN ORCONTAINER MANAGED TRANSACTIONS&OR"-4BEANS THATSITFORTHE$$ "UTFOR#-4BEANSTHATSJUSTTHEBEGINNING

+H\FRQWDLQHU,ZDQW\RXWR WDNHFDUHRIHYHU\WKLQJVR,·OOVD\ WUDQVDFWLRQW\SH!&RQWDLQHU WUDQVDFWLRQW\SH!LQWKH''

6XUH,·OOPDQDJH \RXUWUDQVDFWLRQVEXW \RXKDYHWRWHOOPH+2:6LQFH \RXVDLG´FRQWDLQHUµLQWKH''IRU WUDQVDFWLRQW\SH,QHHGWRNQRZWKH WUDQVDFWLRQDWWULEXWHVIRU\RXU PHWKRGV

7UDQVDFWLRQUHODWHG''LQIROLYHVLQWZRSODFHV  )RUERWK&07DQG%07EHDQV 4HETRANSACTION TYPEELEMENTINTHEENTERPRISE BEANSSECTION HQWHUSULVHEHDQV! VHVVLRQ!  WUDQVDFWLRQW\SH!&RQWDLQHUWUDQVDFWLRQW\SH! VHVVLRQ! HQWHUSULVHEHDQV!

pe is Bean

the ty for BMT,

 )RU&07EHDQVRQO\ 4HECONTAINER TRANSACTIONELEMENTINTHEASSEMBLY DESCRIPTORSECTION ,FRXOGPDQDJHP\RZQ WUDQVDFWLRQVLI,ZDQWHGWR1RUHDOO\ ,MXVWGRQ·WZDQWWR%XWWKDWGRHV127 PDNHPHDZHHQLH



&KDSWHU

DVVHPEO\GHVFULSWRU! FRQWDLQHUWUDQVDFWLRQ! PHWKRG! HMEQDPH!0\%HDQHMEQDPH! PHWKRGQDPH!EDUPHWKRGQDPH! PHWKRG! WUDQVDWWULEXWH!5HTXLUHGWUDQVDWWULEXWH! FRQWDLQHUWUDQVDFWLRQ! DVVHPEO\GHVFULSWRU!

(-%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! VHVVLRQW\SH!6WDWHOHVVVHVVLRQW\SH! WUDQVDFWLRQW\SH!&RQWDLQHUWUDQVDFWLRQW\SH! VHFXULW\LGHQWLW\! XVHFDOOHULGHQWLW\!XVHFDOOHULGHQWLW\! VHFXULW\LGHQWLW\! VHVVLRQ!

y (surpriser!)Ó sa Õd u o y T for BM ead of ÒContaine ÒBeanÓ inst

HQWHUSULVHEHDQV!

,QWKHDVVHPEO\GHVFULSWRU!HOHPHQW DVVHPEO\GHVFULSWRU! FRQWDLQHUWUDQVDFWLRQ! PHWKRG! there are a few va riations of the HMEQDPH!0\2WKHU%HDQHMEQDPH! elemen t (w PHWKRGQDPH!IRRPHWKRGQDPH! 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 ATTRIBUTEINTHETRANS ATTRIBUTETAG

e bean nama e h t g in e iv yg e us method bame. But here, wmethods a y if c e p n S s ÒALL method and thed (*) which meanesNew attribute.Ó wildcar ean have Requir of BigB

FRQWDLQHUWUDQVDFWLRQ! PHWKRG! HMEQDPH!%LJ%HDQHMEQDPH! PHWKRGQDPH! PHWKRGQDPH! PHWKRG! WUDQVDWWULEXWH!5HTXLUHV1HZWUDQVDWWULEXWH! FRQWDLQHUWUDQVDFWLRQ!

2SWLRQ,QGLYLGXDOO\QDPHGPHWKRGV 3PECIFYEACHMETHODOFEACH#-4BEANINTHEEJB JARUNLESSYOUUSE THEWILDCARDTOINDICATEALLMETHODSOFTHESPECIlEDBEANCLASSHAVETHE SPECIlEDATTRIBUTE  FRQWDLQHUWUDQVDFWLRQ! PHWKRG! Here we have three differ HMEQDPH!%LJ%HDQHMEQDPH! methods, in two different beans, that ent PHWKRGQDPH!IRRPHWKRGQDPH! all hav e the RequiresNew attribute. PHWKRG! PHWKRG! HMEQDPH!7LQ\%HDQHMEQDPH! PHWKRGQDPH!JRPHWKRGQDPH! PHWKRG! PHWKRG! HMEQDPH!0\%HDQHMEQDPH! PHWKRGQDPH!EDUPHWKRGQDPH! PHWKRG! e WUDQVDWWULEXWH!5HTXLUHV1HZWUDQVDWWULEXWH! n attributhod io t c a s n a r FRQWDLQHUWUDQVDFWLRQ! the met ifferent t 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! previous < WUDQVDWWULEXWH!5HTXLUHGWUDQVDWWULEXWH! 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! , PHWKRG! d o h t e m d ade lo r e v o WUDQVDWWULEXWH!5HTXLUHV1HZWUDQVDWWULEXWH! n a e s Here we hawvhere one version takte her FRQWDLQHUWUDQVDFWLRQ! 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 a PHWKRGSDUDPV! PHWKRG! The optio param> tags give you WUDQVDWWULEXWH!5HTXLUHVWUDQVDWWULEXWH! d
way to d

\RXDUHKHUH



WUDQVDFWLRQDWWULEXWHVLQWKH''

7UDQVDFWLRQDWWULEXWHVDUH SDUWRIDSSOLFDWLRQDVVHPEO\ 127EHDQGHYHORSPHQW


7KDWPHDQVWKHDWWULEXWHVDUH VSHFLILHGLQWKHDVVHPEO\SDUW RIWKH''UDWKHUWKDQLQWKH EHDQSDUW

PRUL]H
7KHRQO\WKLQJ\RXVD\DERXW WUDQVDFWLRQVLQWKHEHDQSDUW LVZKHWKHUWKHEHDQLVXVLQJ &RQWDLQHURU%HDQPDQDJHG WUDQVDFWLRQV

Q:

#AN)COMBINETHEWILDCARDWITHSPECIlCMETHODNAMES) MEAN WHATHAPPENSIF)WANTTOHAVEALLTHEBEANSMETHODS EXCEPT ONEUSE2EQUIRES.EW ANDJUSTONEMETHODTOUSE.OT3UPPORTED

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

6HVVLRQEHDQ

JHW(-%+RPH JHW+DQGOH UHPRYH LV,GHQWLFDO (-%2EMHFWR JHW3ULPDU\.H\

$GYLFH JHW$GYLFH LJQRUH$GYLFH

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

$GYLFH+RPH FUHDWH

ch HereÕs a suggestion--foreseea method, ask yourself th questions: thod * Is there a reason thistiome Is n? sac an MUST be in a tr be t gh mi at th g it doing anythin n? tio sac an tr a in t risky if itÕs no * Is there any reason thinis a method should NOT be transaction?

(-%2EMHFW

(QWLW\EHDQ

JHW(-%+RPH JHW+DQGOH UHPRYH LV,GHQWLFDO (-%2EMHFWR JHW3ULPDU\.H\

&XVWRPHU JHW1DPH VHW1DPH JHW,'

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

the * Is there any reason thratthis transaction behavior foletely up method should be comp use it to the Container... becawhat the has no connection with clientÕs trying to do?

&XVWRPHU+RPH FUHDWH ILQG%\3ULPDU\.H\ JHW&XVWRPHU/LVW

\RXDUHKHUH



;]UUIZaWN*MIVUIVIOMLLMUIZKI\QWV

%HDQPDQDJHG %07

ƒ 8VHGE\VWDWHOHVVDQGVWDWHIXOVHVVLRQEHDQV ƒ 8VHGE\PHVVDJHGULYHQEHDQV ƒ 0XVW127EHXVHGE\HQWLW\EHDQV ƒ &DQEHXVHGWRUHGXFHWKHVFRSHRIDWUDQVDFWLRQ ZKLFKFDQKHOSSHUIRUPDQFH

ƒ &DQEHXVHGWRNHHSDWUDQVDFWLRQRSHQDFURVV PXOWLSOHLQYRFDWLRQVWRDVWDWHIXOPHWKRGEHDQ

ƒ &DQEHXVHGE\DPHVVDJHGULYHQEHDQWR

ƒ 7KH8VHU7UDQVDFWLRQLQWHUIDFHGRHV127KDYH DJHW5ROOEDFN2QO\ PHWKRGEXW%07EHDQV FDQFDOOJHW6WDWXV WRILQGRXWLIVRPHRQHLQWKH WUDQVDFWLRQKDVFDOOHGVHW5ROOEDFN2QO\ 

ƒ 7KHJHW6WDWXV PHWKRGUHWXUQVDQLQWUHSUHVHQWLQJ DFRQVWDQWRQHRIZKLFKLV67$786B0$5.('B 52//%$&.

ƒ 6HVVLRQEHDQVXVLQJ%07PXVWQRWLPSOHPHQW 6HVVLRQ6\QFKURQL]DWLRQ

DFNQRZOHGJHDPHWKRGHYHQWKRXJKWKHWUDQVDFWLRQ HQGVLQDUROOEDFN

ƒ 0HVVDJHGULYHQEHDQVPXVWFRPSOHWHDWUDQVDFWLRQ E\WKHHQGRIRQ0HVVDJH 

ƒ 6WDWHOHVVVHVVLRQEHDQVPXVWFRPSOHWHD WUDQVDFWLRQE\WKHHQGRIWKHEXVLQHVVPHWKRGLQ ZKLFKWKHWUDQVDFWLRQZDVVWDUWHG

ƒ 7KH%07EHDQPXVWQRWVWDUWDWUDQVDFWLRQZLWKRXW ILUVWHQGLQJWKHSUHYLRXVWUDQVDFWLRQ 5HPHPEHU QRQHVWHGWUDQVDFWLRQVLQ(-%

ƒ 7KH%07EHDQPXVWQRWXVHWKHJHW5ROOEDFN2QO\  DQGVHW5ROOEDFN2QO\ PHWKRGVRI(-%&RQWH[W

ƒ 7KH%07EHDQFDQFDOOWKHVHW5ROOEDFN2QO\  PHWKRGRQWKH8VHU7UDQVDFWLRQ

ƒ 7KHEHDQJHWVD8VHU7UDQVDFWLRQIURPWKHEHDQ·V (-%&RQWH[W

ƒ 3URSDJDWLRQRIWUDQVDFWLRQVLQD%07EHDQDUH RQHZD\DEHDQVWDUWHGWUDQVDFWLRQFDQSURSDJDWH RXWWRRWKHUEHDQVEXWQRWUDQVDFWLRQFDQHYHUEH SURSDJDWHGLQWRDEHDQXVLQJ%07 

&KDSWHU

  #-4BEANSRU N TRANSACTIONS UNKNOWN WHILE"-4BE ANS USEONLYTHEI ROWN /+ NOTOURB ESTWORK WEKN OW3OWHY DONTYOUTR Y IT-EMOR YDE VICESCAN HELP BUTTHEY WORKMUCHBE TTERWHEN YOUCREATETH EMYOURSELF

(-%WUDQVDFWLRQV

&RQWDLQHUPDQDJHG &07

ƒ 8VHGE\DOOEHDQW\SHV ƒ &RPSXOVRU\IRUHQWLW\EHDQV ƒ 7UDQVDFWLRQDWWULEXWHVDUHVSHFLILHGLQWKH GHSOR\PHQWGHVFULSWRU

ƒ 7KHVL[WUDQVDFWLRQDWWULEXWHVDUH5HTXLUHG 5HTXLUHV1HZ6XSSRUWV0DQGDWRU\1HYHU1RW 6XSSRUWHG

ƒ 7UDQVDFWLRQVFDQEHSURSDJDWHGLQWRDQGRXWRID &07EHDQ

ƒ 7KH&07EHDQPXVWQRWDWWHPSWWRXVH%07 LQFOXGLQJJHWWLQJD8VHU7UDQVDFWLRQUHIHUHQFH

ƒ 7KH&07EHDQPXVWQRWXVHWKHVHW5ROOEDFN2QO\ PHWKRGRI8VHU7UDQVDFWLRQ *XHVV\RXFRXOG ILJXUHWKDWRXWIURPWKHSUHYLRXVEXOOHWSRLQW

ƒ 7KH&07EHDQFDQXVHWKHJHW5ROOEDFN2QO\DQG VHW5ROOEDFN2QO\PHWKRGVRI(-%&RQWH[W

ƒ &07WUDQVDFWLRQVFDQQRWVWD\RSHQDFURVVPXOWLSOH PHWKRGLQYRFDWLRQVIURPDVWDWHIXOVHVVLRQFOLHQW %07WUDQVDFWLRQVFDQ 

ƒ $&07EHDQWKDWFDOOVVHW5ROOEDFN2QO\ RU JHW5ROOEDFN2QO\ 0867KDYHDQDWWULEXWHRI 5HTXLUHG5HTXLUHV1HZRU0DQGDWRU\

ƒ $&07VHVVLRQEHDQPXVWVSHFLI\DWWULEXWHVIRU DOOEXVLQHVVPHWKRGVLQWKHFRPSRQHQWLQWHUIDFH QRQHRIWKHPHWKRGVLQWKHKRPHDQGQRQHRIWKH PHWKRGVIURP(-%2EMHFW RU(-%/RFDO2EMHFW 

ƒ $OOHQWLW\EHDQVPXVWVSHFLI\DWWULEXWHVIRUDOO EXVLQHVVPHWKRGVLQWKHFRPSRQHQWLQWHUIDFH DOOWKHPHWKRGVGHFODUHGE\WKH%HDQ3URYLGHULQ WKHKRPHLQWHUIDFHDQGDQ\UHPRYH PHWKRG WKDWWKHFOLHQWFDQDFFHVV LHWKHRQHVGHILQHG LQ(-%+RPH(-%/RFDO+RPHRU(-%2EMHFWDQG (-%/RFDO2EMHFW

ƒ
ƒ $PHVVDJHGULYHQEHDQFDQXVHRQO\WZRDWWULEXWHV 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





PLW

L HZ/

1

VHW

&OLHQWFDOOVPHWKRGVRQ WKHEHDQWKDWFKDQJHWKH EHDQ·VLQWHUQDOVWDWH

EXPPHU

%HDQKDVDSUREOHPDQGFDQ·WFRP PLWWKHWUDQVDFWLRQ%XWQRZWKDW OHDYHVWKHEHDQRXWRIV\QFZLWK WKHGDWDEDVH7KHEHDQ·VOLPLW VWDWHLVEXWWKHOLPLWLQWKH GDWDEDVHLVH[DFWO\ZKHUHLW ZDVEHIRUHWKHWUDQVDFWLRQEHJDQ





&RQWDLQHUVLPSO\GRHVDQHZ ORDGRQWKHEHDQWRUHIUHVK LWZLWKWKHRULJLQDOGDWDIURP WKHGDWDEDVH

HFW

'%

VHO

HM

E/

RD

G

1RZHYHU\WKLQJLVMXVW OLNHLWZDVEHIRUH$VLI QRWKLQJHYHUKDSSHQHG







&KDSWHU

%HDQLVKDSS\DQGQRZDOORILWV SHUVLVWHQWVWDWHPDWFKHVWKH HQWLW\·VGDWDLQWKHGDWDEDVH

(-%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!! 6HVVLRQ6\QFKURQL]DWLRQ

LQWHUIDFH!! 6HVVLRQ%HDQ 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 HME3DVVLYDWH HME5HPRYH DIWHU%HJLQ

A session bean can implement BOTH the SessionBean and SessionSynchronization interfaces, for a total of 7 methods to implement.

EHIRUH&RPSOHWLRQ DIWHU&RPSOHWLRQ ERROHDQFRPPLWWHG EXVLQHVVDQGFUHDWHPHWKRGV

\RXDUHKHUH



6HVVLRQ6\QFKURQL]DWLRQFDOOEDFNV

;M[[QWV;aVKPZWVQbI\QWV¹[XMKQITUWUMV\[º 025(VSHFLDO PRPHQWV"

stateful CMT bean DIWHU%HJLQ

:KHQLW·VFDOOHG

:KLFKHQWLW\EHDQ PHWKRGLW·VPRVWOLNH

:KDWWRGRZKHQ \RX·UHLQLW

%HDQWKLQJV\RXFDQ GRZKLOH\RX·UHLQLW

&KDSWHU

DIWHU&RPSOHWLRQ

$WWKHEHJLQQLQJRIDVWDWHIXO EHDQ·VWUDQVDFWLRQ%()25( WKHEXVLQHVVPHWKRGWKDW·V JRLQJWRUXQLQWKHWUDQVDFWLRQ LVFDOOHG

-XVWEHIRUHWKHWUDQVDFWLRQ HQGV$)7(5WKHEXVLQHVV PHWKRGFRPSOHWHV

$IWHUWKHWUDQVDFWLRQKDVHQGHG HLWKHULQDFRPPLWRUUROOEDFN 7KHPHWKRGSDVVHVDERROHDQ DUJXPHQWWRWHOO\RXZKHWKHU WKHWUDQVDFWLRQFRPPLWWHG

HME/RDG

HME6WRUH

1RWKLQJLQWKHHQWLW\EHDQ OLIHF\FOHFRUUHVSRQGVWRWKLV %HFDXVHWKHUH·VQRQHHG

/RDGLQGDWDIURPWKHGDWDEDVH NQRZLQJWKDWWKHGDWDEDVH UHVRXUFHLVQRZSDUWRIWKH WUDQVDFWLRQVR\RXFDQFDFKH WKHGDWDLQWKHEHDQIRUWKHUHVW RIWKHWUDQVDFWLRQ

/DVWFKDQFHWRXSGDWHWKH GDWDEDVHEHIRUHWKHWUDQVDF WLRQFRPPLWVDQGWKHORFNVRQ WKHGDWDEDVHDUHUHOHDVHG

)LQGRXWKRZWKHWUDQVDFWLRQ ZHQWDQGGRZKDWHYHU\RXKDYH WRGRWRVWD\V\QFHGZLWKWKH GDWDEDVH)RUH[DPSOHLI\RX ZHUHFDFKLQJQHZO\FKDQJHG GDWDLQWHPSRUDU\YDULDEOHV\RX FDQQRZDVVLJQWKHWHPSRUDU\ YDOXHVWR\RXUSHUPDQHQWVWDWH YDULDEOHV2ULIWKHWUDQVDFWLRQ UROOHGEDFN\RXPLJKWKDYHWR UHVHWVRPHYDOXHVZLWKGDWD IURPWKHGDWDEDVH

&DOOPHWKRGVRQ\RXU 6HVVLRQ&RQWH[WJHW\RXU KRPHJHW\RXU(-%REMHFWJHW FDOOHUVHFXULW\LQIRIRUFHWKH WUDQVDFWLRQWRUROOEDFNFKHFN WKHUROOEDFNVWDWXV


&DOOPHWKRGVRQ\RXU 6HVVLRQ&RQWH[WJHW\RXU KRPHJHW\RXU(-%REMHFWJHW FDOOHUVHFXULW\LQIR
$FFHVV\RXUVSHFLDO-1', FRQWH[WUHVRXUFHPDQDJHUV DQGRWKHUEHDQV


EHIRUH&RPSOHWLRQ

(-%WUDQVDFWLRQV

6WDWHOHVVVHVVLRQ W EHDQVFDQ·WLPSOHPHQ RQ 6HVVLRQ6\QFKURQL]DWL

DQVFDQLPSOHPHQW 2QO\VWDWH)8/VHVVLRQEH FDXVHVWDWHOHVV 6HVVLRQ6\QFKURQL]DWLRQEH WRPDLQWDLQD HG OORZ ¶WD VHVVLRQEHDQ¶VDUHQ HQGHG KDV RG HWK DP FH WUDQVDFWLRQRQ

6HVVLRQ6\QFK URQL]DWLRQ LVIRU&07EH DQV21/< 'RHVLWPDNHVH QVHIRUD%07EH DQWRXVH 6HVVLRQ6\QFKUR QL]DWLRQ"1R5 HPHPEHUWKH SRLQWRI6HVVLRQ6 \QFKURQL]DWLRQLV WRJLYHWKH EHDQWKUHHPRUH ³VSHFLDOPRPHQ W´FDOOEDFN PHWKRGVVRWKDW WKHEHDQFDQ¿Q GRXWZKHQ DWUDQVDFWLRQVWDU WVDQGHQGVDQG DOVRKRZLW HQGV %XWWKLQNDERXWLW D%07EHDQN QRZV (;$&7/<ZKHQ DWUDQVDFWLRQVW DUWVDQGHQGV EHFDXVHWKHEH DQLVWKHRQHGH PDUFDWLQJWKH WUDQVDFWLRQERXQ GDULHV ,W¶VWKHEHDQWK DWVD\VZKHQWK HWUDQVDFWLRQ VWDUWVDQGHQG V 1RERG\FDQHQG WKDWWUDQVDFWLRQ H[FHSWWKH EHDQWKDWVWDUWH GLWVRWKHUHDUHQ ¶WDQ\VXUSULVHV WKHEHDQQHHGV WREH³WROG´DER XW

WKHUH DUH QR

'XPE 4XHVWLRQV

Q:

)FYOUWANTSYNCHRONIZATIONSO BADLY WHYNOTJUSTUSEANENTITYBEAN

A:

"ECAUSEYOURBEANMIGHT REPRESENTAPROCESS ANDNOTANENTITY .OTEVERYTHINGTHATINVOLVESDATABASE DATAISANENTITY)FYOURSESSIONBEAN REPRESENTSAPROCESS LIKEASHOPPING SESSION BUTITSTILLUSESADATABASE YOU MIGHTWANTTOWAITUNTILTHETRANSACTION ISCOMPLETEBEFOREUPDATINGINFORMATION INTHEDATABASE /NTHEOTHERHAND USINGASESSIONBEAN ASASAhPOOR MANSENTITYBEANv JUSTFOR THESAKEOFAVOIDINGENTITYBEANS ISSILLY )FYOUNEEDANENTITY MAKEITANENTITY BEANANDGETALLTHEADVANTAGESTHE #ONTAINERHASTOOFFER LIKEAUTOMATIC SYNCHRONIZATIONWITHTHEPERSISTENT STORE"UTIFYOURBEANISAPROCESS BUT STILLNEEDSTOSTAYONTOPOFHOWTHE TRANSACTIONISGOING YOUVEGOTTHE OPTIONWITH3ESSION3YNCHRONIZATIONAS LONGASITSASTATEFUL #-4BEAN

\RXDUHKHUH



WUDQVDFWLRQVSX]]OH

VOIDBMT-ETHOD7ITH4RANSACTIONS [ ??????????????????

3RRO3X]]OH 9OURJOBISTOTAKECODESNIPPETSFROMTHE POOLANDPLACETHEMINTOTHEBLANK LINESINTHECODE9OUWILLUSEEACH SNIPPETEXACTLYONCE

CCMT2EQUIRES.EW 

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 

CCMT2EQUIRES.EW  CCMT2EQUIRED  UTCOMMIT 



&KDSWHU

CCMT-ANDATORY  UTBEGIN  CCMT.OT3UPPORTED 

\RXDUHKHUH



VOIDBMT-ETHOD7ITH4RANSACTIONS [ ut.begin(); tx 1 ??????????????????

still no tx

c.cmtNever(); ??????????????????

still no tx

c.cmtNotSupported(); ??????????????????

now thereÕs no tx

ut.commit(); ??????????????????

tx 1 (tx 2 ended when the previous method completed) tx 3, suspend tx 1 (thatÕs the second and Þnal transaction suspension.)

c.cmtRequiresNew(); ??????????????????

c.cmtMandatory); ??????????????????

tx 2, suspend tx 1

CCMT2EQUIRES.EW 

c.cmtRequired();

??????????????????

ut.begin();

??????????????????

c.cmtSupports();

??????????????????

c.cmtMandatory());

??????????????????

ut.commit();

?????????????????? ]

tx 4 tx 5 (tx 4 ended when the previous method completed) tx 5 tx 5 Done

7HICHOFCOURSEYOUWONTBELOOKINGATUNTIL YOUVECOMPLETEDTHEPUZZLEONTHEPREVIOUSPAGE

3RRO3X]]OH6ROXWLRQ (-%WUDQVDFWLRQV

FRIIHHFUDPPRFNH[DP

0RFN([DP 1

7HICHARETRUEABOUTTRANSACTIONSIN%*"#HOOSEALLTHATAPPLY

R! %*"CONTAINERSMUSTSUPPORTBOTH*4!AND*43 R" %*"SUPPORTSNESTEDTRANSACTIONS R# 4HEMDYD[WUDQVDFWLRQ8VHU7UDQVDFWLRQ!0)ALLOWSYOUTOSET ISOLATIONLEVELS

R$ !BEANINSTANCECANRUNMULTIPLETRANSACTIONSINPARALLEL R% !MESSAGE DRIVENBEANINSTANCEMUSTCOMPLETEATRANSACTIONBEFORETHE @ON-ESSAGEMETHODRETURNS

2

7HENUSING"-4DEMARCATION WHICHOFTHEFOLLOWINGMUSTCOMMITA TRANSACTIONBEFORETHEMETHODTHATINITIATEDTHETRANSACTIONRETURNS#HOOSE ALLTHATAPPLY

R! MESSAGE DRIVENBEANS R" STATEFULSESSIONBEANS R# STATELESSSESSIONBEANS R$ NONEOFTHEABOVE

3

7HICHTWOARETRUEABOUTCONTAINER MANAGEDTRANSACTIONSIN%*" #HOOSEALLTHATAPPLY

R! $IFFERENTIATINGBETWEENOVERLOADEDMETHODSISPOSSIBLEINTHEBEANS DEPLOYMENTDESCRIPTOR

R" %VERYBUSINESSMETHODINTHEBEANCLASSMUSTHAVEATRANSACTION ATTRIBUTE

R# )FANON-ESSAGE METHODRETURNSBEFORECOMMITTINGATRANSACTIONTHE CONTAINERWILLTHROWANEXCEPTION

R$ !MESSAGE DRIVENBEANWITH#-4DEMARCATIONMUSTNOTINVOKETHE %*"#ONTEXTGET5SER4RANSACTION METHOD



&KDSWHU

(-%WUDQVDFWLRQV

4

7HATSTRUEWHENSPECIFYINGTRANSACTIONATTRIBUTESINTHEDEPLOYMENT DESCRIPTOR#HOOSEALLTHATAPPLY

R! &ORSESSIONBEANS TRANSACTIONATTRIBUTESCANBEAPPLIEDONLYTO METHODSINTHEBEANSCOMPONENTINTERFACE

R" 4HEMETHOD NAMETAGCANTAKEAWILDCARD R# !SINGLEMETHODCANHAVEMULTIPLETRANSACTIONATTRIBUTESSPECIlEDIN THEDEPLOYMENTDESCRIPTOR

R$ 4RANSACTIONATTRIBUTESMUST./4BESPECIlEDFORMETHODSINANENTITY BEANSHOMEINTERFACE

5

7HICHTRANSACTIONATTRIBUTESCANCAUSEANIN PROGRESSTRANSACTIONTOBE SUSPENDED#HOOSEALLTHATAPPLY

R! .OT3UPPORTED R" 2EQUIRED R# 3UPPORTS R$ 2EQUIRES.EW R% -ANDATORY R&.EVER

6

4HEUSEOFWHICHTRANSACTIONATTRIBUTECANCAUSEA MDYD[WUDQVDFWLRQ7UDQVDFWLRQ5HTXLUHG([FHSWLRQEXCEPTIONTOBE THROWN

R! .OT3UPPORTED R" 2EQUIRED R# 3UPPORTS R$ 2EQUIRES.EW R% -ANDATORY R&.EVER

\RXDUHKHUH



FRIIHHFUDPPRFNH[DP

7

)FASETOF#-4BEANMETHODSHASTHEFOLLOWINGTRANSACTIONATTRIBUTES -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

8

7HICHMETHODSOFASESSIONBEAN WITHCONTAINER MANAGEDTRANSACTION DEMARCATION RUNINANUNSPECIlEDTRANSACTIONCONTEXT#HOOSEALLTHAT APPLY

R! HME$FWLYDWH R" HME3DVVLYDWH R# "USINESSMETHODMARKEDµ1RW6XSSRUWHG¶ R$ HME5HPRYH R% "USINESSMETHODMARKED@2EQUIRES.EW

9

)FASESSIONBEANSBUSINESSMETHODINVOKES (-%&RQWH[WVHW5ROOEDFN2QO\ WHICHTRANSACTIONATTRIBUTESETTINGSCAN CAUSETHECONTAINERTOTHROWTHEMDYDODQJ,OOHJDO6WDWH([FHSWLRQ #HOOSEALLTHATAPPLY

R! .OT3UPPORTED R" 2EQUIRED R# 3UPPORTS R$ 2EQUIRES.EW R% -ANDATORY R&.EVER 

&KDSWHU

(-%WUDQVDFWLRQV

10

7HICHMETHODCANBECALLEDSUCCESSFULLYBYABEANUSINGBEAN MANAGED TRANSACTIONDEMARCATION

R! JHW8VHU7UDQVDFWLRQ R" DIWHU%HJLQ R# DIWHU&RPSOHWLRQ R$ JHW5ROOEDFN2QO\

\RXDUHKHUH



PRFNH[DPDQVZHUV

0RFN([DP$QVZHUV 1

7HICHARETRUEABOUTTRANSACTIONSIN%*"#HOOSEALLTHATAPPLY

(spec: 340-341)

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 -

2

Yes!

(spec: 7HENUSING"-4DEMARCATION WHICHOFTHEFOLLOWINGMUSTCOMMITA TRANSACTIONBEFORETHEMETHODTHATINITIATEDTHETRANSACTIONRETURNS#HOOSE ALLTHATAPPLY

340-341)

R! MESSAGE DRIVENBEANS R" STATEFULSESSIONBEANS R# STATELESSSESSIONBEANS R$ NONEOFTHEABOVE

3

7HICHTWOARETRUEABOUTCONTAINER MANAGEDTRANSACTIONSIN%*" #HOOSEALLTHATAPPLY

(spec: 353-356)

R! $IFFERENTIATINGBETWEENOVERLOADEDMETHODSISPOSSIBLEINTHEBEANS DEPLOYMENTDESCRIPTOR

R" %VERYBUSINESSMETHODINTHEBEANCLASSMUSTHAVEATRANSACTION ATTRIBUTE

R# )FANON-ESSAGE METHODRETURNSBEFORECOMMITTINGATRANSACTIONTHE CONTAINERWILLTHROWANEXCEPTION

R$ !MESSAGE DRIVENBEANWITH#-4DEMARCATIONMUSTNOTINVOKETHE %*"#ONTEXTGET5SER4RANSACTION METHOD



&KDSWHU

- No

(-%WUDQVDFWLRQV

4

7HATSTRUEWHENSPECIFYINGTRANSACTIONATTRIBUTESINTHEDEPLOYMENT DESCRIPTOR#HOOSEALLTHATAPPLY

(spec: 351-354)

R! &ORSESSIONBEANS TRANSACTIONATTRIBUTESCANBEAPPLIEDONLYTO METHODSINTHEBEANSCOMPONENTINTERFACE

R" 4HEMETHOD NAMETAGCANTAKEAWILDCARD R# !SINGLEMETHODCANHAVEMULTIPLETRANSACTIONATTRIBUTESSPECIlEDIN THEDEPLOYMENTDESCRIPTOR

R$ 4RANSACTIONATTRIBUTESMUST./4BESPECIlEDFORMETHODSINANENTITY BEANSHOMEINTERFACE

5

- they must be speciÞed

7HICHTRANSACTIONATTRIBUTESCANCAUSEANIN PROGRESSTRANSACTIONTOBE SUSPENDED#HOOSEALLTHATAPPLY

(spec: 357-359)

R! .OT3UPPORTED R" 2EQUIRED R# 3UPPORTS R$ 2EQUIRES.EW R% -ANDATORY R&.EVER

6

4HEUSEOFWHICHTRANSACTIONATTRIBUTECANCAUSEA MDYD[WUDQVDFWLRQ7UDQVDFWLRQ5HTXLUHG([FHSWLRQEXCEPTIONTOBE THROWN

(spec: 357-359)

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

8

7HICHMETHODSOFASESSIONBEAN WITHCONTAINER MANAGEDTRANSACTION DEMARCATION RUNINANUNSPECIlEDTRANSACTIONCONTEXT#HOOSEALLTHAT APPLY

(spec: 363-364,

376)

R! HME$FWLYDWH R" HME3DVVLYDWH R# "USINESSMETHODMARKEDµ1RW6XSSRUWHG¶ R$ HME5HPRYH R% "USINESSMETHODMARKED@2EQUIRES.EW

9

)FASESSIONBEANSBUSINESSMETHODINVOKES (-%&RQWH[WVHW5ROOEDFN2QO\ WHICHTRANSACTIONATTRIBUTESETTINGSCAN CAUSETHECONTAINERTOTHROWTHEMDYDODQJ,OOHJDO6WDWH([FHSWLRQ #HOOSEALLTHATAPPLY

R! .OT3UPPORTED R" 2EQUIRED R# 3UPPORTS R$ 2EQUIRES.EW R% -ANDATORY R&.EVER 

&KDSWHU

(spec: 360-361)

(-%WUDQVDFWLRQV

10

7HICHMETHODCANBECALLEDSUCCESSFULLYBYABEANUSINGBEAN MANAGED (spec: TRANSACTIONDEMARCATION

361)

R! JHW8VHU7UDQVDFWLRQ acks from R" DIWHU%HJLQ } These areyncachllbronization onS R# DIWHU&RPSOHWLRQ } Sessi 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


H[DPREMHFWLYHV

([FHSWLRQV

2IILFLDO  ,GHQWLI\FRUUHFWDQGLQFRUUHFWVWDWHPHQWV RUH[DPSOHVDERXWH[FHSWLRQKDQGOLQJLQ (-%

 *LYHQDOLVWRIUHVSRQVLELOLWLHVUHODWHGWR H[FHSWLRQVLGHQWLI\WKRVHZKLFKDUHWKH %HDQ3URYLGHU¶VDQGWKRVHZKLFKDUH WKHUHVSRQVLELOLW\RIWKH&RQWDLQHU%H SUHSDUHGWRUHFRJQL]HUHVSRQVLELOLWLHVIRU ZKLFKQHLWKHUWKHEHDQRU&RQWDLQHUDUH UHVSRQVLEOH

 

,GHQWLI\FRUUHFWDQGLQFRUUHFWVWDWHPHQWVRU H[DPSOHVDERXWDSSOLFDWLRQH[FHSWLRQVDQG V\VWHPH[FHSWLRQVLQHQWLW\EHDQVVHVVLRQ EHDQVDQGPHVVDJHGULYHQEHDQV *LYHQDSDUWLFXODUPHWKRGFRQGLWLRQLGHQWLI\ WKHIROORZLQJZKHWKHUDQH[FHSWLRQZLOOEH WKURZQWKHW\SHRIH[FHSWLRQWKURZQWKH &RQWDLQHU¶VDFWLRQDQGWKHFOLHQW¶VYLHZ



&KDSWHU

:KDWLWUHDOO\PHDQV
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

(UURU

2XW2I0HPRU\(UURU

(UURU

Although you COULD catch an error... what the heck would you DO with it? If you get, say, a VirtualMachineError, youÕre pretty much screwed. 99% of the time, youÕll catch only checked Exceptions, and NOT errors or runtime exceptions.

([FHSWLRQ

)LOH,2([FHSWLRQ

Checked exceptions are subclasses of Exception, as long as they arenÕt subcla of RuntimeException sses 5XQWLPH([FHSWLRQ

&KHFNHGH[FHSWLRQV 1XOO3RLQWHU([FHSWLRQ

ions MUST Checked except le or declare follow the hand piler forces rule--the comledge when you you to acknowd that declares call a metho ... one of these

8QFKHFNHG UXQWLPH H[FHSWLRQV

Exceptions that extend RuntimeException are Ôexem from the handle or declare ptÕ 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 WORKSCORRECTLY9OUHOPETHATYOUDONTGETARUNTIME EXCEPTION"UTYOUTAKERISKS3OYOUEXPECTTHATSOME THINGSWILLGOWRONG4HEKEYISINKNOWINGWHATTHOSE THINGSARE ANDWHATYOUCANDOTORECOVER -OSTOFTHETIME THETHINGSTHATCANGOWRONGARE PRETTYOBVIOUS9OUDOA*.$)LOOKUP BUTTHEOBJECT ISNTTHERE9OUTRYTOCONNECTTOANAMINGSERVICE AND CANT9OUTRYTOCONNECTTOTHEDATABASEANDCANT 9OUTRYTOCREATEANEWENTITYBEAN ANDTHEINSERT FAILSBECAUSEYOUHAVEADUPLICATEPRIMARYKEY!ND FOREACHOFTHOSE YOUCANWRITEACATCHBLOCKTHAT NOWSHOWTODEALWITHTHESPECIlCPROBLEMYOUHAVE #ANTCONNECTTOTHENAMINGSERVICE-AYBEYOUHAVE ASECONDNAMINGSERVICETOTRY#ANTCONNECTTOTHE DATABASE-AYBEYOUCANTRYUSINGALOCALCACHEFOR NOW UNTILYOUCANRE ESTABLISHYOURCONNECTION#ANT DOTHEINSERT4RYAGAIN USINGADIFFERENTPRIMARYKEY 7HENYOUPROVIDEACATCHBLOCKFORARISKYMETHOD CALL YOURESAYINGTHATYOUEXPECTSOMETHINGSPECIlC MIGHTGOWRONG!LMOSTEVERYEXCEPTIONFORWHICHYOU PROVIDEACATCHBLOCKISANEXCEPTIONTHATYOUEXPECT 3OYOUMIGHT FOREXAMPLE EXPECTA.AMING%XCEPTION ORA&INDER%XCEPTIONORA#REATE%XCEPTION

:UDSSLQJDULVN\PHWKRGFDOOLQD WU\FDWFKWHOOVWKHFRPSLOHU DQG \RXUGHVLJQ WKDW\RXH[SHFWWKDW FHUWDLQWKLQJVPLJKWJRZURQJ
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 H[SHFWKDVKDSSHQHGµ

´7HOOFOLHQWWKDWVRPHWKLQJ VKHH[SHFWVKDVKDSSHQHGµ

exception object



%HDQWKURZVVRPHWKLQJWKHFOLHQWGRHV127H[SHFW ´6RUU\FOLHQWEXWVRPHWKLQJ WHUULEOHKDVKDSSHQHGµ



´7HOOFOLHQWWKDWVRPHWKLQJ 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µ

rectly Bean doesnÕt dilem . ob pr e th e caus



7KHVWXEWKURZVVRPHWKLQJWKHFOLHQWH[SHFWV ´6RPHWKLQJ\RXH[SHFW KDVKDSSHQHGµ VWXE

Both the n and the Containbea er 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

2KVK

$V\VWHP H[FHSWLRQ1RWKLQJ,FDQ GRDERXWLW7KHUHJRHVP\ VWDWHIXOEHDQ,·OOKDYHWR VWDUWRYHU



&KDSWHU

*RWWDORYHDSSOLFDWLRQ H[FHSWLRQV,FDQ UHFRYHUIURPWKLVLI,SXW LQDGLIIHUHQWYDOXHIRUWKH DUJXPHQWWRWKHFUHDWH  PHWKRG

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 WUDQVDFWLRQFRQWLQXH HYHQWKRXJK,·PJRQQD WKURZWKLVWRWKH FOLHQW

$FFRXQW%DODQFH([FHSWLRQ

,·OOWKURZWKHH[FHSWLRQVR WKH&RQWDLQHUFDQWHOOWKH FOLHQWEXWWKHWUDQVDFWLRQLV VWLOOVDIHWRFRQWLQXHVR,ZRQ·W DVNLWWRUROOEDFN,IWKLQJVJHW EDGODWHU,FDQDOZD\VFDOO VHW5ROOEDFN2QO\

 VSDUHWKHEHDQ·VOLIH ,·OOOHWWKHEHDQ OLYHVLQFHDQDSSOLFDWLRQ H[FHSWLRQGRHVQ·WQHFHVVDULO\ PHDQWKHEHDQLVFRUUXSW

:KHZ7KDQNP\OXFN\ HOHFWURQVLWZDVDQDSSOLFDWLRQ H[FHSWLRQDQGQRWDV\VWHP 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 LGHDZKDWZHQW ZURQJ

5HPRWH([FHSWLRQ

1XOO3RLQWHU([FHSWLRQ

remotte clien

 DOZD\VFDXVHDWUDQVDFWLRQUROOEDFN 7KLVLVEDG$OO KRSHLVORVWIRUWKLV WUDQVDFWLRQVR,·PUROOLQ· LWEDFNEDE\

1XOO3RLQWHU([FHSWLRQ

7KHUH·V12ZD\WKLV WUDQVDFWLRQLVVDIH QRZ 1RWWKDW,·PJRLQJ WRFDUH

 NLOOWKHEHDQDQGORJWKHH[FHSWLRQ 7KLVEHDQLVKLVWRU\:KR .12:6ZKDWVWDWHLWVYDULDEOHV DUHLQQRZ,KDYHWRDVVXPHLW·V FRUUXSWDQGNLOOLW,·OOORJLWIRU WKHV\VDGPLQ

/2*



&KDSWHU

e bean dies, it this time, wheann th STANCE is r means the bed mIN e eligible fo ad discarded an ction. If itÕs an garbage colle the real entity is entity bean, d can be reloaded still alive, an an instance. into a new be

H[FHSWLRQVLQ(-%

$SSOLFDWLRQ([FHSWLRQV FOLHQWFDQWU\WR UHFRYHU

6\VWHP([FHSWLRQV FOLHQWFDQ·W UHFRYHU

&OLHQWUHFRYHU\

7UDQVDFWLRQVWDWXV WUDQVDFWLRQSURFHHGV XQOHVV EHDQFDOOVVHW5ROOEDFN2QO\

DXWRPDWLFUROOEDFN

%HDQLQVWDQFH LQVWDQFHOLYHV

/RJJLQJ

/2*

127ORJJHG

([DPSOHV

&UHDWH([FHSWLRQ 5HPRYH([FHSWLRQ )LQGHU([FHSWLRQ 2EMHFW1RW)RXQG([FHSWLRQ 'XSOLFDWH.H\([FHSWLRQ $FFRXQW%DODQFH([FHSWLRQ %DG4XHU\$UJV([FHSWLRQ %RRN0DSSLQJ([FHSWLRQ ([FHSWLRQ

&RPSLOHUFKHFNLQJ DQGRWKHUUXOHV

$OODSSOLFDWLRQH[FHSWLRQV0867 EHFKHFNHGH[FHSWLRQVDQGPXVW 127H[WHQG5HPRWH([FHSWLRQ

LQVWDQFHGLHV

/2*

H[FHSWLRQORJJHG

5HPRWH([FHSWLRQ UHPRWHFOLHQW (-%([FHSWLRQ ORFDOFOLHQW ,OOHJDO6WDWH([FHSWLRQ 7UDQVDFWLRQ5HTXLUHG([FHSWLRQ 1R6XFK2EMHFW([FHSWLRQ $UUD\,QGH[2XW2I%RXQGV([FHSWLRQ 1XOO3RLQWHU([FHSWLRQ 5XQWLPH([FHSWLRQ

7KHRQO\V\VWHPH[FHSWLRQWKDWLV FKHFNHGLV5HPRWH([FHSWLRQ$OO 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 !NYDIRECTSUBCLASSOF%XCEPTIONISEXPECTED!SUBCLASSOF 2UNTIME%XCEPTIONISNOT!CHECKEDEXCEPTIONMUSTBEHANDLED !NUNCHECKEDEXCEPTIONUSUALLYWONTBE "UTTHERESONEBIGEXCEPTIONTOTHEWHOLEEXCEPTIONSAND EXPECTATIONSTHINGˆJAVARMI2EMOTE%XCEPTION 2EMOTE%XCEPTIONISACHECKEDEXCEPTION OFCOURSE SOTHECLIENT ISFORCEDTOACKNOWLEDGEA2EMOTE%XCEPTIONBYHANDLINGITWITH ATRYCATCH"UTUNLIKETHEOTHERCHECKEDEXCEPTIONSACLIENT SEESINABEANSINTERFACE 2EMOTE%XCEPTIONISSTILLCONSIDERED UNEXPECTED/+ NOTEXACTLYUNEXPECTEDBUTUNEXPECTED &ROMTHECLIENTSPOINTOFVIEW THINKOF2EMOTE%XCEPTIONAKIND OFRUNTIMEEXCEPTIONONTHEREMOTEPARTOFTHEAPPLICATION "ECAUSETHATSOFTENWHATITMEANS!.ULL0OINTER%XCEPTION ONTHESERVERMEANSA2EMOTE%XCEPTIONTOTHECLIENT! $IVIDE"Y:ERO%XCEPTIONONTHESERVERMEANSA2EMOTE%XCEPTION TOTHECLIENT!#LASS#AST%XCEPTIONONTHESERVERMEANSA 2EMOTE%XCEPTIONTOTHECLIENT4HOSEAREALLUNCHECKED EXCEPTIONSONTHESERVER BUTTHEYPROPAGATEBACKTOTHECLIENT ASACHECKED2EMOTE%XCEPTION)NOTHERWORDS THECLIENTHASTO EXPECTTHATTHESERVERCANTHROWSOMETHINGUNEXPECTED $OESTHISMEANTHATEVERY2EMOTE%XCEPTIONONTHECLIENTWAS ORIGINALLYTRIGGEREDBYABEANGETTINGARUNTIMEEXCEPTION.O !BEANMIGHT FOREXAMPLE CATCHACHECKEDEXCEPTIONASPARTOF ITSBUSINESSLOGIC ANDTHENREALIZEITCANTRECOVER!TTHATPOINT THEBEANTURNSWHATWASORIGINALLYACHECKEDEXCEPTIONFROM THEBEANSPERSPECTIVE TOANUNCHECKEDSYSTEM EXCEPTIONBY WRAPPINGANDRETHROWINGITASAN%*"%XCEPTION WHICHULTIMATELY SHOWSUPASA2EMOTE%XCEPTIONONTHEREMOTECLIENT

$SSOLFDWLRQH[FHSWLRQVDUH DOZD\VFRPSLOHUFKHFNHG H[FHSWLRQVH[FHSWIRU 5HPRWH([FHSWLRQ 7KLQNRI5HPRWH([FHSWLRQ DV´DUXQWLPHH[FHSWLRQRQ WKHVHUYHUµHYHQWKRXJK 5HPRWH([FHSWLRQLVD FKHFNHGH[FHSWLRQWRWKH FOLHQW ,QRWKHUZRUGVDUHPRWH FOLHQWPXVW(;3(&7 WKDWWKHVHUYHUFDQWKURZ VRPHWKLQJ81(;3(&7('

)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 LPSRUWMDYDXWLO&ROOHFWLRQ

system exception

applicationn exceptio

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 `

something the client ects, and can potentially recoveexp application exception) r from (an

ed something unexpee ct er, so rv se happened on th ver. co re t nÕ the client ca

)TWKITMV\Q\aJMIVPWUMQV\MZNIKMLMKTIZM[WVTa IXXTQKI\QWVM`KMX\QWV[ SDFNDJHKHDG¿UVW

application exception

LPSRUWMDYD[HME  LPSRUWMDYDXWLO&ROOHFWLRQ 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 t p exce 

&KDSWHU

H[FHSWLRQVLQ(-%

:MUW\M-`KMX\QWVOWM[\WZMUW\MKTQMV\[ -2*-`KMX\QWVOWM[\WTWKITKTQMV\[ 7HENSOMETHINGUNEXPECTEDHAPPENSONTHESERVER THE#ONTAINER TELLSTHECLIENTBYTHROWINGEITHERA2EMOTE%XCEPTIONORAN %*"%XCEPTION 2EMOTE%XCEPTIONISFORREMOTECLIENTSONLY ANDEVENTHOUGHITISA CHECKEDEXCEPTION ITSTELLINGTHECLIENTTHATSOMETHINGUNEXPECTED HAPPENED3OMETHINGFROMWHICHTHECLIENTCANTRECOVER %*"%XCEPTIONISFORLOCALCLIENTSONLY ANDITSUNCHECKED)NOTHER WORDS %*"%XCEPTIONISASUBCLASSOF2UNTIME%XCEPTION4OTHE CLIENT GETTINGAN%*"%XCEPTIONISNTMUCHDIFFERENTFROMGETTING SAY AN!RRAY)NDEX/UT/F"OUNDS%XCEPTION)TMEANSSOMETHING UNEXPECTEDWENTWRONG ANDTHERESNOTHINGYOUCANDOTO RECOVER4HEONLYDIFFERENCEISTHATTHECLIENTDOESHAVETOCATCHTHE 2EMOTE%XCEPTION BUTONCEHECATCHESIT THECLIENTUSUALLYWONT BEABLETOTELLWHATHAPPENEDATLEASTNOTINANYRECOVERABLEWAY 

:KHQVRPHWKLQJ XQH[SHFWHGKDSSHQVRQ WKHVHUYHUDORFDOFOLHQW JHWVD5XQWLPH([FHSWLRQ (-%([FHSWLRQ EXW DUHPRWHFOLHQWJHWV DFRPSLOHUFKHFNHG 5HPRWH([FHSWLRQ

5HPRWHFOLHQW ,FDXJKWWKH 5HPRWH([FHSWLRQEXW, KDYHQRLGHDZKDWZHQW ZURQJ

5HPRWH([FHSWLRQ

1XOO3RLQWHU([FHSWLRQ

VHUYHUKHDS

FOLHQWKHDS

/RFDOFOLHQW
(-%([FHSWLRQ

1XOO3RLQWHU([FHSWLRQ

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

IDSSOLFDWLRQ ,W·VWHPSWLQJWRWKLQNR FHSWLRQVDVVLPSO\ H[ WHP V\V H[FHSWLRQVYV G FKHFNHGYVXQFKHFNH PH[FHSWLRQV SHUVSHFWLYHWKHRQO\V\VWH $QGLQIDFWIURPWKHFOLHQW¶V RWH([FHSWLRQV HP UH5 VD WLRQ FHS XQWLPH H[ WKDWDUH127XQFKHFNHG U GH[FHSWLRQV FNH VWHPH[FHSWLRQVDUHXQFKH SWLRQVDUH 6RIRUORFDOFOLHQWV$//V\ [FH QH DWLR SOLF HSWLRQ ZKLOHDOODS VXEFODVVHVRI5XQWLPH([F LRQ HSW )RU HSWLRQEXWQRW5XQWLPH([F FKHFNHG VXEFODVVHVRI([F WWKHUHLVDOVR EX HG QH[FHSWLRQVDUHFKHFN Q)URP UHPRWHFOLHQWVDOODSSOLFDWLR SWLR [FH PH VWH V\ W¶VFRQVLGHUHGD RQHFKHFNHGH[FHSWLRQWKD DV HSWLRQ EHLQJ XFDQWKLQNRI5HPRWH([F WKHFOLHQW¶VSRLQWRIYLHZ\R HQVRQWKH DSS DWK GUXQWLPHH[FHSWLRQWK DZUDSSHUIRUDQXQFKHFNH H[FHSWLRQ QDO ULJL HR WK LHZ EHDQ¶VSRLQWRIY NQHZLW VHUYHU $OWKRXJKIURPWKH HDQ HE 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,

you intend to th

if SXEOLFYRLGVRPH%XVLQHVV0HWKRG WKURZV)LQGHU([FHSWLRQ^ re it (just you have to adlaecwla) &XVWRPHU+RPHKRPH QXOO regular Jav WU\^ ,QLWLDO&RQWH[WLF QHZ,QLWLDO&RQWH[W  2EMHFWR LFORRNXS ³&XVWRPHUV´  KRPH  &XVWRPHU+RPH 3RUWDEOH5HPRWH2EMHFWQDUURZ R&XVWRPHU+RPHFODVV  `FDWFK 1DPLQJ([FHSWLRQQH ^ GHDOZLWK1DPLQJ([FHSWLRQ ` We catc WU\^ and Remohta NamingException &XVWRPHUFXVW KRPH¿QG%\3ULPDU\.H\ ³´  the Finder eException, but N PRUHVWXII FinderExceException, so the OT `FDWFK 5HPRWH([FHSWLRQUH ^ the Containption propagates GHDOZLWK5HPRWH([FHSWLRQ ba er automat ically ck to ` ` /RCATCHINGITANDRETHROWINGITAS AS

to declare

still have SXEOLFYRLGVRPH2WKHU%XVLQHVV0HWKRG WKURZV)LQGHU([FHSWLRQ^ it, of course &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 ^ r, if we canÕt recove LI UHFRYHUDEOH ^ e caught it, buextactly as we got it W 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 We caught it,vebur AND we canÕt LI UHFRYHUDEOH ^ we canÕt recosaction commit!! FRQWH[WVHW5ROOEDFN2QO\  let the tran WKURZIH `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 LQIRUPDWLRQ"µ,5($//<GLGQ·W QHHGWRNQRZWKDWDERXW\RX8P LQWKHIXWXUH,VXJJHVWWKDW \RXGR127H[SRVH\RXUSULYDWH SUREOHPVWRWKHZRUOG

SXEOLFLQWHUIDFH%DG6HUYLFHH[WHQG(-%/RFDO2EMHFW^ SXEOLFYRLGVRPH0HWKRG WKURZV64/([FHSWLRQ `

e Do you really think th at th OW KN uld sho t clien 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 n is a WU\^ runtimeceexpce donÕt have toption, so GRVWXII declare `FDWFK 64/([FHSWLRQVH ^ LIZHFDQ¶WUHFRYHU WKURZQHZ(-%([FHSWLRQ VH  ` `

you it.

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 U\ WU\^   FDWFK ([FHSWLR FK `FDWFK ([FHSWLRQH[ ^` `

catch all Exceptions Really stupid idea. DonÕt Throwables!) Catch only (or even worse -- all ur siness logic, and let 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 SXEOLFYRLGZLWKGUDZ GRXEOHG WKURZV$FFRXQW%DODQFH([FHSWLRQ^ LI EDODQFHG  ^ WKURZQHZ$FFRXQW%DODQFH([FHSWLRQ RYHUGUDZQ0VJ  `HOVH^ EDODQFH G ` ` `

You have to declare it, if you might throw it.

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

Q:

'XPE 4XHVWLRQV

Q:

)JUSTREALIZEDSOMETHINGTHECONTAINER CALLBACKSDECLAREDINTHE3ESSION"EANAND%NTITY"EAN INTERFACESDONTDECLARECHECKEDEXCEPTIONS RIGHT3O DOESNTTHISMEANTHATYOUCANTTHROWANAPPLICATION EXCEPTIONFROM SAY EJB!CTIVATE 

9OUSAIDTHEINTERFACESDONTDECLAREANY CHECKEDEXCEPTIONS4(!49/5#!.53%7HATDOES THATMEAN7HATSANEXAMPLEOFADECLAREDCHECKED EXCEPTIONTHATYOUCANTUSE

A:

)FYOUGOTOTHE*%%!0)WELLWAIT WHILEYOUDO THATSTILLWAITINGWAITINGWAITING YOUCANSEETHAT ALLOFTHEMETHODSDECLAREA2EMOTE%XCEPTION9ES A"IG &AT#HECKEDEXCEPTION4HEYALSODECLARE%*"%XCEPTION ASANICEGESTURE BUTNOTAREQUIREMENTSINCE %*"%XCEPTIONISASUBCLASSOF2UNTIME%XCEPTION $OES THISMEANYOUCANTHROWA2EMOTE%XCEPTIONYOURSELF ,IKE IFYOUCAUGHTONEWHILEYOURBEANISBEINGACLIENT TOANOTHERBEAN FOREXAMPLE././!TIMES./

4HATSRIGHT9OUCANTHROWONLYUNCHECKED EXCEPTIONSFROMACONTAINERCALLBACKTHATISNOTPARTOF YOURCLIENTVIEW4HISISJUSTPLAINOLD*AVAYOUCANT THROWACHECKEDEXCEPTIONFROMAMETHODTHATDOESNT DECLARETHEEXCEPTION ANDSINCETHOSEINTERFACESDONT DECLAREANYCHECKEDEXCEPTIONSTHATYOUCANUSE YOURE STUCKWITHRUNTIMEEXCEPTIONS4HEONLYTHINGYOU SHOULDTHROWFROMONEOFTHECONTAINERCALLBACKSOF 3ESSION"EAN %NTITY"EAN OR-ESSAGE$RIVEN"EAN ISAN %*"%XCEPTION

A:

)NTHEDAYSOFSTEAM DRIVENCONTAINERS THE%*"SPEC ALLOWEDYOUTOTHROW2EMOTE%XCEPTIONS FROMYOUR BEAN4HOSEDAYSAREOVER AND%*"DOESNTALLOWIT 3OUNLESSYOUREAPOORSOULTASKEDWITHLEGACYBEAN MAINTENANCE YOUSHOULDAVERTYOURGAZEWHENYOU LOOKATTHE!0)DOCS ANDPRETENDYOUNEVERSAWTHAT 2EMOTE%XCEPTION \RXDUHKHUH



7KH&RQWDLQHUDQGH[FHSWLRQV


WKHFOLHQW(;$&7/<DVLWZDVWKURZQDQGGR127UROOEDFNWKH WUDQVDFWLRQ )FTHEBEANTHROWSA#REATE%XCEPTION SENDTHATEXCEPTIONTOTHECLIENT)FTHEBEAN THROWSA&INDER%XCEPTION SENDTHATEXCEPTIONTOTHECLIENT)FTHEBEANTHROWSAN !CCOUNT"ALANCE%XCEPTION SENDTHATEXCEPTIONTOTHECLIENT )TMAKESNODIFFERENCEWHETHERTHEEXCEPTIONISONEOFTHESTANDARD%*"EXCEPTIONS FROMTHEJAVAEJBPACKAGE ORONETHATTHE"EAN0ROVIDERDElNED ,ZDV UHDG\IRUDQ $FFRXQW%DODQFH H[FHSWLRQ

$FFRXQW%DODQFH([FHSWLRQ

$FFRXQW%DODQFH([FHSWLRQ

 ,IWKHEHDQWKURZVDV\VWHPH[FHSWLRQ LQFOXGLQJ(-%([FHSWLRQ

RUDQ\UXQWLPHH[FHSWLRQ ƒ 7KURZD5HPRWH([FHSWLRQLIWKHFOLHQWLV5HPRWH ƒ 7KURZDQ(-%([FHSWLRQLIWKHFOLHQWLVORFDO ƒ /RJWKHH[FHSWLRQ ƒ 5ROOEDFNWKHWUDQVDFWLRQ ƒ 'LVFDUGWKHEHDQLQVWDQFH DVVXPHLW·VWRDVW :HOOWKDWVXFNV, JRWD5XQWLPH([FHSWLRQ

(-%([FHSWLRQ

1XOO3RLQWHU([FHSWLRQ

/2*

ORFDOFOLHQW



&KDSWHU

H[FHSWLRQVLQ(-%

6KDUSHQ \RXU SHQFLO

YiX`e gfn\i 7KLQNDERXWWKHFOLHQWIRUDPRPHQW,IWKHFOL HQWJHWVD5HPRWH([FHSWLRQGRHVWKHFOLHQW NQRZIRUFHUWDLQWKDWWKHEXVLQHVVPHWKRG FRPSOHWHG" 'RHVWKHFOLHQWNQRZIRUFHUWDLQWKDWWKH WUDQVDFWLRQZDVUROOHGEDFN" ,VWKHUHDQ\ZD\WKHFOLHQWPLJKWEHDEOHWR ¿QGRXW" :KDWLIWKHFOLHQWLVDQRWKHUEHDQ"

)URPWKHOLVWRISRVVLEOHRSWLRQVVHOHFWZKDW \RXDVD%HDQ3URYLGHUVKRXOGGRLQHDFK RIWKHIROORZLQJVFHQDULRV$VVXPHWKDWWKH\ DOOWDNHSODFHZLWKLQDEXVLQHVVPHWKRGRID VHVVLRQEHDQ 2SWLRQV \RXPD\XVHDQRSWLRQPRUHWKDQRQFH $7KURZDQ(-%([FHSWLRQ %7KURZD5HPRWH([FHSWLRQ &,QYRNHVHW5ROOEDFN2QO\ '$OORZWKHH[FHSWLRQWRSURSDJDWH LQ RWKHUZRUGVGXFNLW 

QWKHH[DP 7KHUH¶VQRWKLQJR LHQWVWUDWHJLHV DERXWQRQ-((FO DQVDFWLRQIDLOXUHV IRUFRSLQJZLWKWU

ERXWZKDWPLJKW \RXQHHGWRWKLQND %XWDVDGHYHORSHU LWXDWLRQVLQ UV QWVLGHHVSHFLDOO\IR KDSSHQRQWKHFOLH RQVXFFHHGHG FWL VD UDQ ZZKHWKHUDW ZKLFK\RXGRQ¶WNQR I\RXU-(( QRUDQRWKHUSDUWR ,I\RXUFOLHQWLVDEHD ((FOLHQW - QJRRGVKDSH7KH DSSOLFDWLRQ\RX¶UHL FWLRQ%XWD VD UDQ HW WK WWKHVWDWXVRI FDQXVXDOO\¿QGRX KD HF QLVPRUDW QHHGVRPHRWKHUP QRQ-((FOLHQWZLOO SWVWKHVDPH WHP QWHHWKDWLIKHDW OHDVWDZD\WRJXDUD GHG EXWKH HH FF VX G\ WHULWDOUHD WUDQVDFWLRQDJDLQDI \VXEVHTXHQW  WWKHVHFRQG RUDQ GRHVQ¶WNQRZ WKD RXKDYHDQ Q\ HSUREOHPV:KH DWWHPSWZRQ¶WFDXV WWHPSWHGDIWHU ID VL OHP RE ¶WFDXVHSU RSHUDWLRQWKDWZRQ RSHUDWLRQLV GWKDWPHDQV\RXU LWVDOUHDG\VXFFHHGH HWKHVRXQGRI OLN Q¶W GR KRXJKZHUHDOO\ GW $Q W¶ WHQ SR HP µLG JULW\RI\RXUDSS HFULWLFDOWRWKHLQWH WKDWZRUGLWPLJKWE

6FHQDULRV
\RXDUHKHUH



$SSOLFDWLRQH[FHSWLRQV


([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(-%


"

&UHDWH([FHSWLRQ 4HECLIENTDOESNOTKNOWFORCERTAINWHETHERTHEBEANWAS ACTUALLYCREATED4HE#ONTAINERMIGHTHAVEHADAPROBLEMAFTER THETRANSACTIONCOMMITTED

*RWLW

'XSOLFDWH.H\([FHSWLRQ )FTHECLIENTCATCHESA$UPLICATE+EY%XCEPTION SHECANBE CERTAINTHATTHEBEANWASNOTCREATED

)LQGHU([FHSWLRQ

"

*RWLW

4HECLIENTDOESNOTKNOWWHETHERAMATCHINGENTITYOR ENTITIES FORMULTIPLE ENTITYlNDERS EXISTSINTHEDATABASE 4HE#ONTAINERMIGHTTHROWA&INDER%XCEPTIONBECAUSEOF SOMETHINGTHATWENTWRONGBEFOREITWASABLETOLOOKINTHE DATBASE 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 HDQ FOLHQWVZLOO1(9(5JH WD 5HPRYH([FHSWLRQ ,I\RXVHHDVFHQDULRZK HUHWKHFOLHQWJHWVD 5HPRYH([FHSWLRQ\RXFDQ UXOHRXWVWDWHOHVV VHVVLRQEHDQV7KLQNDERX WLWDVWDWHOHVVVHV VLRQEHDQ¶VUHPRYDOLV1( 9(5WLHGWRDFOLHQWVR WKHUH¶VQRERG\WRJLYHWK HH[FHSWLRQWR
7KHFOLHQWPLJKW 127JHWWKH PRVWVSHFLÀF H[FHSWLRQ

HWWLQJWKH 'RQ¶WFRXQWRQ$/:$<6J HFOLHQW QWK PRVWVSHFL¿FH[FHSWLRQR UGLQJ FFR WD WQR 7KH&RQWDLQHUPLJK  QWD FOLH WKH HQG FV WRWKHVSH HQLIWKDWLV 'XSOLFDWH.H\([FHSWLRQHY WKHSUREOHP FOLHQW" :KDWGRHVWKLVPHDQWRWKH K DWF DF ,IWKHFOLHQW¶VFRGHKDV GD DQ WLRQ FHS H([ IRUERWKD&UHDW W OLHQ HF WK LRQ HSW ([F .H\ 'XSOLFDWH I DWL QWK UWDL FDQ¶WEHFRPSOHWHO\FH SWLRQWKH VKHFDWFKHVD&UHDWH([FH H\LVVXH WHN LFD XSO DG 27 V1 PL SUREOH SOHWKH [DP RUH 7KLVZRXOGEHEDGLII DWH  FUH JWR U\LQ SWW WNH FOLHQWFRGHMXV ´, LQJ LQN VHQGLQJLQWKHVDPHNH\WK QVR SWLR [FH H\( WH. GLGQ¶WJHWD'XSOLFD ´ OHP URE HS HWK ¶WE FDQ ,NQRZ7+$7 Q ,I\RXJHWD&UHDWH([FHSWLR RQWKHFOLHQWDQG127D XZRQ¶W 'XSOLFDWH.H\([FHSWLRQ\R \LVR.,W¶V NH NQRZIRUFHUWDLQWKDWWKH LWJLYHV KHU KHW UZ XSWRWKH&RQWDLQH Q SWLR [FH FH L¿ SHF UHV \RXWKHPR



&KDSWHU

Q:

)FA2EMOVE%XCEPTIONMAKESNOSENSE FORASTATELESSSESSIONBEAN WHYAREYOU ALLOWEDTOTHROWITASSUMINGYOUDECLAREIT ONYOURBEANSREMOVE METHOD 

A:

2EMEMBER THERESNOTHINGINTHEBEAN CLASSTHATCANTELLYOUWHETHERTHEBEANIS DEFINITELYSTATELESS9OUCANTELLIFABEANIS STATEFUL OFCOURSE BECAUSEANYBEANWITH OVERLOADEDCREATESORITSONLYCREATEHASARGS MUSTBESTATEFUL"UTEVENIFASESSIONBEANHAS ONLYASINGLENO ARGCREATEMETHOD YOUSTILL DONTKNOWWHETHERTHATBEANISGOINGTOBE MARKEDSTATELESSORSTATEFULATDEPLOYTIME 4HISWOULDALLBEDIFFERENTIFTHEREWEREA SEPARATEINTERFACEFOR3TATELESS3ESSION"EAN AND3TATEFUL3ESSION"EAN THATYOURBEANHAD TOIMPLEMENTINSTEADOFJUST3ESSION"EAN BUT THATSNOTHOWITWORKS

Q:

)FTHE"EAN0ROVIDERDOESNTWANTTOLET ENTITYBEANCLIENTSREMOVEABEAN WHYDOES HEHAVEAREMOVEMETHOD

A:

!RENTYOUFORGETTINGSOMETHINGOBVIOUS HERE7HEREDOTHEREMOVE METHODSLIVE (OWARETHEYEXPOSEDTOTHECLIENT4HATSRIGHT )NTHECLIENTINTERFACES2EMEMBER THEREARE THREEREMOVE METHODSAVAILABLETOAREMOTE ENTITYBEANCLIENTTHENO ARGINTHE%*"/BJECT INTERFACE ANDTHEREMOVETHATTAKESAKEYAND THEREMOVETHATTAKESAHANDLEINTHE%*"(OME INTERFACE !LOCALENTITYBEANCLIENTHASTWO REMOVEMETHODSˆTHEONEIN%*"/BJECT AND THEONEINTHEHOMETHATTAKESAPRIMARYKEY3O THERESNOTHINGYOUCANDOTOHIDETHEREMOVE METHODSFROMACLIENT BUTIFYOUDONTSUPPORT ITFROMYOURBEAN THROWA2EMOVE%XCEPTION FROMYOURBEANSEJB2EMOVE METHOD ANDTHE #ONTAINERWONTGOTHROUGHWITHTHEREMOVE 4HISISYOURWAYOFTELLINGTHE#ONTAINER h$ONT DOIT)DONTCAREWHATTHECLIENTSAYS DONTYOU DAREGOTHROUGHWITHTHEREMOVEv

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

1R6XFK2EMHFW/RFDO([FHSWLRQ

,OOHJDO6WDWH([FHSWLRQ

(-%([FHSWLRQ

1R6XFK(QWLW\([FHSWLRQ

2QO\5HPRWHFOLHQWVZLOOJHWWKHVH FKHFNHG

MDYDUPLSDFNDJH

1R6XFK2EMHFW([FHSWLRQ

5HPRWH([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(-%


checked

T in the only one thatÕs NO It means . mi a.r jav in is b javax.ej the bu b, the client has a stugone. t is t Remote objec

MDYDUPL1R6XFK2EMHFW([FHSWLRQ

not checked MDYD[HME1R6XFK2EMHFW/RFDO([FHSWLRQ

checked

MDYD[HME2EMHFW1RW)RXQG([FHSWLRQ

not checked MDYD[HME1R6XFK(QWLW\([FHSWLRQ

this was added to B when local interfaceEJ came in version 2.0. It meas ns the client has an invalid EJB object reference.

this is ONLY for Þnder ders) methods! (single-entity Þn

clients will never see th youÕll probably never useis,it.and just donÕt confuse it with .. any of the others!

/+ 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

$UH\RXVXUH\RX ORRNHGHYHU\ZKHUH" $QG\RXVWLOOGLGQ·WÀQG DQ\UHFRUGRI3DXO :KHDWRQ"

,WULHGWRÀQGKLPEXWDQ H[RWLFGDQFHUQDPHG3DXO :KHDWRQZDV1RW)RXQG DQ\ZKHUHLQWKHUHFRUGV0D\EHLI ZHXSJUDGHGWRDGDWDEDVHWKDW·VLQ FRORU,FRXOGDFWXDOO\JHWVRPHWKLQJ GRQHDURXQGKHUH

,·PVRUU\EXWWKHUH·V1R6XFK SHUVRQKHUH
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 &KHFNHGH[FHSWLRQVH[WHQGMDYDODQJ([FHSWLRQ EXWQRWMDYDODQJ5XQWLPH([FHSWLRQ

ƒ ([FHSWLRQVLQ(-%FDQEHWKURZQIURPWKHEHDQWR WKH&RQWDLQHUDQGIURPWKH&RQWDLQHUWRWKHEHDQ

ƒ (-%H[FHSWLRQVFRPHLQWZRW\SHVDSSOLFDWLRQDQG V\VWHP

ƒ $SSOLFDWLRQH[FHSWLRQVDUHFKHFNHGH[FHSWLRQVWKDW WKHFOLHQWLVH[SHFWLQJDQGPLJKWEHDEOHWRUHFRYHU IURP7KLVLQFOXGHVDOOFKHFNHGH[FHSWLRQVH[FHSW MDYDUPL5HPRWH([FHSWLRQDQGLWVVXEFODVVHV

ƒ 6\VWHPH[FHSWLRQVDUHDOORWKHUH[FHSWLRQV DQGLQFOXGHDOOUXQWLPHH[FHSWLRQVSOXV 5HPRWH([FHSWLRQ

ƒ )RUWKHFOLHQWD5HPRWH([FHSWLRQFDQEHWUHDWHG DVWKRXJKDUXQWLPHH[FHSWLRQ LHVRPHWKLQJ XQH[SHFWHG KDSSHQHGRQWKHVHUYHU

ƒ :KHQWKH&RQWDLQHUJHWVDV\VWHPH[FHSWLRQLW ZLOOUROOEDFNWKHWUDQVDFWLRQORJWKHH[FHSWLRQDQG WKURZDZD\WKHEHDQ

ƒ :KHQWKH&RQWDLQHUJHWVDQDSSOLFDWLRQH[FHSWLRQ LWZLOOVHQGLWWRWKHFOLHQWH[DFWO\DVLWZDVUHFHLYHG 7KHWUDQVDFWLRQZLOOQRWDXWRPDWLFDOO\UROOEDFNDQG WKHEHDQ·VOLIHZLOOEHVSDUHG

ƒ ,IWKH%HDQ3URYLGHUFDWFKHVDQH[FHSWLRQIURP ZKLFKWKHEHDQFDQQRWUHFRYHUKHVKRXOGZUDS DQGUHWKURZWKHH[FHSWLRQDVDQ(-%([FHSWLRQ D UXQWLPHH[FHSWLRQVRKHGLGQ·WQHHGWRGHFODUHLW 

ƒ 7KHUHDUHILYHVWDQGDUG(-%DSSOLFDWLRQH[FHSWLRQV &UHDWH([FHSWLRQ'XSOLFDWH.H\([FHSWLRQ H[WHQGV&UHDWH([FHSWLRQ )LQGHU([FHSWLRQ 2EMHFW1RW)RXQG([FHSWLRQ H[WHQGV )LQGHU([FHSWLRQ DQG5HPRYH([FHSWLRQ

ƒ &RPPRQV\VWHPH[FHSWLRQVLQFOXGH(-%([FHSWLRQ ,OOHJDO6WDWH([FHSWLRQ7UDQVDFWLRQ5HTXLUHG/RFDO([ FHSWLRQDQG1R6XFK2EMHFW/RFDO([FHSWLRQ

ƒ 2EMHFW1RW)RXQG([FHSWLRQLVIRUZKHQVLQJOH HQWLW\ILQGHUPHWKRGVFDQQRWILQGDQHQWLW\LQWKH SHUVLVWHQWVWRUHWKDWPDWFKHVWKHSULPDU\NH\ DUJXPHQWWRWKHILQGHUPHWKRG

ƒ 1R6XFK2EMHFW([FHSWLRQLVDQ50,H[FHSWLRQIRU ZKHQD5HPRWHFOLHQWKDVDVWXEWRD5HPRWH REMHFWWKDW·VEHHQUHPRYHGRULVLQYDOLGIRUVRPH RWKHUUHDVRQ

ƒ 1R6XFK2EMHFW/RFDO([FHSWLRQLVDUXQWLPH H[FHSWLRQIRUZKHQDORFDOFOLHQWKDVDUHIHUHQFH WRDQ(-%REMHFWWKDW·VQRORQJHUYDOLG PRVWOLNHO\ EHFDXVHWKHEHDQKDVDOUHDG\EHHQUHPRYHG 

ƒ 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 WUDQVDFWLRQ

&UHDWH([FHSWLRQ

$VHVVLRQEHDQFDOOVJHW3ULPDU\.H\ RQLWVFRQWH[W $&07EHDQFDOOVJHW5ROOEDFN2QO\ IURPDPHWKRGPDUNHG 1RW6XSSRUWHG &OLHQWFDOOVDPHWKRGRQD5HPRWH&07EHDQDQGWKH PHWKRGLVPDUNHG0DQGDWRU\7KHFDOOHUGRHVQRWKDYHD WUDQVDFWLRQFRQWH[WLQSODFHZKHQWKHFDOOFRPHVLQ $PHVVDJHGULYHQEHDQFDOOVLV&DOOHU,Q5ROH RQLWVFRQWH[W IURPZLWKLQWKHRQ0HVVDJH PHWKRG &OLHQWFDOOVWKHKRPHUHPRYHPHWKRGRQWKH/2&$/KRPH LQWHUIDFHRIDVHVVLRQEHDQ $VWDWHOHVVVHVVLRQEHDQFDOOVJHW&DOOHU3ULQFLSDO RQLWV FRQWH[WGXULQJWKHVHW6HVVLRQ&RQWH[WPHWKRG &OLHQW)RRFDOOVDPHWKRGRQDUHPRWHVWDWHIXOEHDQZKLOH WKDWVDPHEHDQLVDOUHDG\H[HFXWLQJDPHWKRGIRUFOLHQW%DU

5HPRYH([FHSWLRQ 2EMHFW1RW)RXQG([FHSWLRQ 1R6XFK2EMHFW([FHSWLRQ 5HPRWH([FHSWLRQ 7UDQVDFWLRQ5HTXLUHG([FHSWLRQ 1RW6XSSRUWHG([FHSWLRQ 5XQWLPH([FHSWLRQ 1R6XFK2EMHFW/RFDO([FHSWLRQ 'XSOLFDWH.H\([FHSWLRQ 6\VWHP([FHSWLRQ 1R6XFK(QWLW\([FHSWLRQ

&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
&KDSWHU

H[FHSWLRQVLQ(-%

;KMVIZQW;]UUIZa &OLHQW6FHQDULRV &OLHQWFDOOVUHPRYH RQDEHDQWKDW¶VDOUHDG\EHHQUHPRYHG
\RXDUHKHUH



H[FHSWLRQVFHQDULRV

;KMVIZQW;]UUIZa %HDQ6FHQDULRV $VHVVLRQEHDQFDOOVJHW3ULPDU\.H\ RQLWVFRQWH[W 7KHEHDQJHWVDQ,OOHJDO6WDWH([FHSWLRQ


&KDSWHU

H[FHSWLRQVLQ(-%

([HUFLVH

)LOOWKLVFKDUWLQWRGHVFULEHWKHGLIIHUHQFHVEHWZHHQ UHPRWHDQGORFDOFOLHQWV
Some things might be the same for both remote and local clients, but we arenÕt telling.

5HPRWHFOLHQWV

/RFDOFOLHQWV

+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"
([HUFLVH $SSOLFDWLRQ([FHSWLRQV

&OLHQWUHFRYHU\

7UDQVDFWLRQVWDWXV

%HDQLQVWDQFH

/RJJLQJ

([DPSOHV

&RPSLOHUFKHFNLQJ DQGRWKHUUXOHV



&KDSWHU

6\VWHP([FHSWLRQV

H[FHSWLRQVLQ(-%

0RFN([DP 1

7HATISTRUEWHENANENTITYBEANSCLIENTRECEIVESAJAVAXEJB%*"%XCEPTION #HOOSEALLTHATAPPLY

R! 4HECLIENTMUSTBEREMOTE R" 4HECLIENTMUSTBELOCAL R# !CLIENTWILLNEVERRECEIVETHISEXCEPTION R$ 4HECLIENTMUSTHANDLEORDECLARETHISEXCEPTION R% 4HISEXCEPTIONCANONLYOCCURIFTHECLIENTISINATRANSACTION

2

7HICHSCENARIOWILLCAUSEAJAVARMI.O3UCH/BJECT%XCEPTIONTOBETHROWN #HOOSEALLTHATAPPLY

R! !REMOTECLIENTINVOKESAMETHODONASTATEFULSESSIONBEANWHICHHAS BEENREMOVED

R" !REMOTECLIENTINVOKESAMETHODONANENTITYBEANWHICHHASBEEN REMOVED

R# !REMOTECLIENTINVOKESAlNDERMETHODWITHINVALIDARGUMENTS R$ 4HECONTAINERINVOKESANEJB0ASSIVATE METHODONABEANTHATISNOT READYTOBESERIALIZED

3

7HICHISASUBCLASSOFJAVALANG2UNTIME%XCEPTION#HOOSEALLTHATAPPLY

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

4

7HICHOFTHEFOLLOWINGARE%*"SPECIlCATIONGUIDELINESREGARDINGSYSTEM EXCEPTIONS#HOOSEALLTHATAPPLY

R! "EANMETHODSSHOULDCATCH2UNTIME%XCEPTIONEXCEPTIONS R" "EANMETHODSSHOULDWRAPUNRECOVERABLECHECKEDEXCEPTIONSINA MDYD[HME(-%([FHSWLRQEXCEPTION

R# &ORREMOTECLIENTS BEANMETHODSSHOULDWRAPUNRECOVERABLECHECKED EXCEPTIONSINAMDYDUPL5HPRWH([FHSWLRQ

R$ )FA#-4BEANTHROWSASYSTEMEXCEPTION THETRANSACTIONWILLSTILL COMMITUNLESSTHEBEANINVOKESVHW5ROOEDFN2QO\

5

)FABUSINESSMETHODOFA#-4DEMARCATEDBEANTHROWSASYSTEMEXCEPTION IN WHICHCASEWILLTHECONTAINERALWAYSTHROWA MDYD[WUDQVDFWLRQ7UDQVDFWLRQ5ROOHGEDFN([FHSWLRQ#HOOSEALL THATAPPLY

R! )FTHEMETHODSTRANSACTIONATTRIBUTEISMARKED@2EQUIRES.EW R" )FTHEMETHODSTRANSACTIONATTRIBUTEISMARKED@-ANDATORY R# )FTHEMETHODSTRANSACTIONATTRIBUTEISMARKED@.EVER R$ )FTHEMETHODSTRANSACTIONATTRIBUTEISMARKED@.OT3UPPORTED

6

7HICHISASUBCLASSOFJAVAXEJB&INDER%XCEPTION#HOOSEALLTHATAPPLY

7

&ROMWHICHMETHODSCAN-$"SWITH#-4DEMARCATIONTHROWAPPLICATION EXCEPTIONS#HOOSEALLTHATAPPLY

R! #REATE%XCEPTION R" .O3UCH%NTITY%XCEPTION R# 2EMOVE%XCEPTION R$ $UPLICATE+EY%XCEPTION R% /BJECT.OT&OUND%XCEPTION

R! RQ0HVVDJH R" HME&UHDWH R# HME5HPRYH R$ JHW8VHU7UDQVDFWLRQ R% VHW0HVVDJH'ULYHQ&RQWH[W R&NONEOFTHEABOVE 

&KDSWHU

H[FHSWLRQVLQ(-%

8

7HATSTRUEFORALOCALCLIENTTHATRECEIVESANEXCEPTIONFROMAN%*" INVOCATION#HOOSEALLTHATAPPLY

R! 4HEEXCEPTIONMIGHTBEFROMTHEJAVARMIPACKAGE R" 4HEEXCEPTIONMIGHTBEANAPPLICATIONEXCEPTION R# 4HEEXCEPTIONMIGHTBEASYSTEMEXCEPTION R$ .ONEOFTHEABOVE

9

7HICHACTIONS WILLTHECONTAINERTAKEIFAMESSAGE DRIVENBEANWITH"-4 DEMARCATIONTHROWSASYSTEMEXCEPTION#HOOSEALLTHATAPPLY

R! ,OGTHEEXCEPTION R" $ISCARDTHEINSTANCE R# -ARKTHETRANSACTIONFORROLLBACK R$ #OMMITTHETRANSACTIONUNLESSTHEBEANHASINVOKED VHW5ROOEDFN2QO\ 

R% .ONEOFTHEABOVE

10

&ROMWHICHTYPESOFBEANSCANCLIENTSRECEIVESYSTEMEXCEPTIONS#HOOSEALL THATAPPLY

R! 3ESSIONBEANSWITH#-4DEMARCATION R" 3ESSIONBEANSWITH"-4DEMARCATION R# -ESSAGE DRIVENBEANSWITH#-4DEMARCATION R$ -ESSAGE DRIVENBEANSWITH"-4DEMARCATION R% %NTITYBEANSWITH#-4DEMARCATION

\RXDUHKHUH



PRFNH[DPDQVZHUV

0RFN([DP$QVZHUV 1

7HATISTRUEWHENANENTITYBEANSCLIENTRECEIVESAJAVAXEJB%*"%XCEPTION #HOOSEALLTHATAPPLY

R! 4HECLIENTMUSTBEREMOTE - Remote clients get RemoteException R" 4HECLIENTMUSTBELOCAL R# !CLIENTWILLNEVERRECEIVETHISEXCEPTION R$ 4HECLIENTMUSTHANDLEORDECLARETHISEXCEPTION R% 4HISEXCEPTIONCANONLYOCCURIFTHECLIENTISINATRANSACTION

2

(spec: 374)

(spec: 374)

7HICHSCENARIOWILLCAUSEAJAVARMI.O3UCH/BJECT%XCEPTIONTOBETHROWN #HOOSEALLTHATAPPLY

R! !REMOTECLIENTINVOKESAMETHODONASTATEFULSESSIONBEANWHICHHAS BEENREMOVED

R" !REMOTECLIENTINVOKESAMETHODONANENTITYBEANWHICHHASBEEN

- client gets FinderException or R# !REMOTECLIENTINVOKESAlNDERMETHODWITHINVALIDARGUMENTS ObjectNotFoundException R$ 4HECONTAINERINVOKESANEJB0ASSIVATE METHODONABEANTHATISNOT (subclass of FinderException) READYTOBESERIALIZED REMOVED

3



7HICHISASUBCLASSOFJAVALANG2UNTIME%XCEPTION#HOOSEALLTHATAPPLY

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

&KDSWHU

(API docs)

H[FHSWLRQVLQ(-%

4

7HICHOFTHEFOLLOWINGARE%*"SPECIlCATIONGUIDELINESREGARDINGSYSTEM EXCEPTIONS#HOOSEALLTHATAPPLY

)

(spec: 373-374

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

cause a tx rollback

COMMITUNLESSTHEBEANINVOKESVHW5ROOEDFN2QO\

5

)FABUSINESSMETHODOFA#-4DEMARCATEDBEANTHROWSASYSTEMEXCEPTION IN WHICHCASEWILLTHECONTAINERALWAYSTHROWA MDYD[WUDQVDFWLRQ7UDQVDFWLRQ5ROOHGEDFN([FHSWLRQ#HOOSEALL THATAPPLY

R! )FTHEMETHODSTRANSACTIONATTRIBUTEISMARKED@2EQUIRES.EW R" )FTHEMETHODSTRANSACTIONATTRIBUTEISMARKED@-ANDATORY R# )FTHEMETHODSTRANSACTIONATTRIBUTEISMARKED@.EVER R$ )FTHEMETHODSTRANSACTIONATTRIBUTEISMARKED@.OT3UPPORTED

(spec: 375-376)

The others are wrong because they indicate that the callerÕs tx was not the active tx when the exception occurred. ThereÕs no need to tell a caller (through an exception) unless itÕs the callerÕs transaction that is rolled back!

6

7HICHISASUBCLASSOFJAVAXEJB&INDER%XCEPTION#HOOSEALLTHATAPPLY

7

&ROMWHICHMETHODSCAN-$"SWITH#-4DEMARCATIONTHROWAPPLICATION EXCEPTIONS#HOOSEALLTHATAPPLY

)

(spec: 263-264

R! #REATE%XCEPTION R" .O3UCH%NTITY%XCEPTION R# 2EMOVE%XCEPTION R$ $UPLICATE+EY%XCEPTION - subclass of CreateException R% /BJECT.OT&OUND%XCEPTION

(spec: 377)

R! RQ0HVVDJH - MDBs cannot declare / throw any application exceptions... who would catch R" HME&UHDWH them? thereÕs no client. R# HME5HPRYH R$ JHW8VHU7UDQVDFWLRQ R% VHW0HVVDJH'ULYHQ&RQWH[W R&NONEOFTHEABOVE \RXDUHKHUH



PRFNH[DPDQVZHUV

8

7HATSTRUEFORALOCALCLIENTTHATRECEIVESANEXCEPTIONFROMAN%*" INVOCATION#HOOSEALLTHATAPPLY

(spec: 381-382)

R! 4HEEXCEPTIONMIGHTBEFROMTHEJAVARMIPACKAGE R" 4HEEXCEPTIONMIGHTBEANAPPLICATIONEXCEPTION R# 4HEEXCEPTIONMIGHTBEASYSTEMEXCEPTION R$ .ONEOFTHEABOVE

9

7HICHACTIONS WILLTHECONTAINERTAKEIFAMESSAGE DRIVENBEANWITH"-4 DEMARCATIONTHROWSASYSTEMEXCEPTION#HOOSEALLTHATAPPLY

(spec: 378)

R! ,OGTHEEXCEPTION R" $ISCARDTHEINSTANCE R# -ARKTHETRANSACTIONFORROLLBACK R$ #OMMITTHETRANSACTIONUNLESSTHEBEANHASINVOKED VHW5ROOEDFN2QO\ 

R% .ONEOFTHEABOVE

10

&ROMWHICHTYPESOFBEANSCANCLIENTSRECEIVESYSTEMEXCEPTIONS#HOOSEALL THATAPPLY

R! 3ESSIONBEANSWITH#-4DEMARCATION R" 3ESSIONBEANSWITH"-4DEMARCATION R# -ESSAGE DRIVENBEANSWITH#-4DEMARCATION - MDBs have no clients! R$ -ESSAGE DRIVENBEANSWITH"-4DEMARCATION R% %NTITYBEANSWITH#-4DEMARCATION



&KDSWHU

(spec: 377)

security in EJB

5

4

4 3URWHFW
 QR ZD\
.HHS\RXUVHFUHWV6HFXULW\LVDERXWDXWKHQWLFDWLRQDQGDXWKRUL]DWLRQ)LUVW \RXKDYHWRSURYH\RXULGHQWLW\DQGWKHQZH¶OOWHOO\RXZKDW\RX¶UHDOORZHGWRGR6HFXULW\ LVHDV\LQ(-%EHFDXVH\RX¶UHRQO\GHDOLQJZLWKDXWKRUL]DWLRQ


H[DPREMHFWLYHV

6HFXULW\

2IILFLDO  ,GHQWLI\FRUUHFWDQGLQFRUUHFWVWDWHPHQWV DERXWWKH(-%VXSSRUWIRUVHFXULW\ PDQDJHPHQWLQFOXGLQJVHFXULW\UROHV VHFXULW\UROHUHIHUHQFHVDQGPHWKRG SHUPLVVLRQV

 )URPDOLVWRIUHVSRQVLELOLWLHVLGHQWLI\ ZKLFKEHORQJWRWKH$SSOLFDWLRQ$VVHPEOHU %HDQ3URYLGHU'HSOR\HU&RQWDLQHU 3URYLGHURU6\VWHP$GPLQLVWUDWRU

 

*LYHQDFRGHOLVWLQJGHWHUPLQHZKHWKHU LWLVDOHJDODQGRUDSSURSULDWHZD\WR SURJUDPPDWLFDOO\DFFHVVDFDOOHU¶V VHFXULW\FRQWH[W *LYHQDVHFXULW\UHODWHGGHSOR\PHQW GHVFULSWRUWDJLGHQWLI\FRUUHFWDQG LQFRUUHFWVWDWHPHQWVDQGRUFRGHUHODWHG WRWKDWWDJ



&KDSWHU

:KDWLWUHDOO\PHDQV
VHFXULW\LQ(-%

1UIOQVMaW]¼ZM_ZQ\QVOIXIaZWTTIXXTQKI\QWV 7KLVZLOOEHZLWKRXWDGRXEW WKHEHVWSD\UROOSURJUDPHYHU ZULWWHQ,·PJRQQD58/(WKH ,7GHSDUWPHQWZKHQWKH\VHHWKLV DSS(YHQ,DPVWLOODVWRQLVKHGE\ P\VXSHULRUFRGLQJVNLOOV

session bean to pay information update &KDQJH3D\ VHW6DODU\ JLYH%RQXV UHLQEXUVH DGMXVW3D\

e entity

employe

(PSOR\HH JHW1DPH VHW1DPH JHW6DODU\ 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
ƒ 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\MRELVHDV\0RVWRI WKHWLPH,GRQ·WHYHQKDYHWR WKLQNDERXWVHFXULW\ZKHQ,·PZULWLQJD EHDQ$QGWKDW·VJRRGEHFDXVHP\ SKLORVRSK\LV´6HFXULW\LVKDUG GRQ·WGRLWµ

0\ MRE LV PRUH LQYROYHG,GHFLGH ZKLFKUROHVPDNHVHQVHLQWKHDSSOLFDWLRQ )RU%LOO·VSD\UROOEHDQV SOXV,DGGHG VRPHRIP\RZQEHDQVWRPDNHWKHFRPSOHWH DSS ,FKRVH3D\UROO$GPLQ3D\UROO$VVLVWDQW DQG3D\UROO'LUHFWRUDVWKHUROHV7KHQ,VHW 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\


ƒ )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

'XPE 4XHVWLRQV

Q:

9OUMENTIONANEXCLUDE LIST )FNOBODYWILLBEALLOWEDTOCALLTHE METHOD THENWHYISTHEMETHOD THERE

A:

2EMEMBER BEANSAREREUSABLE COMPONENTS MEANTTOBEASSEMBLED INMULTIPLEAPPLICATIONS!METHOD THATMAKESSENSEINONEAPPLICATION MIGHTNOTMAKESENSEINANOTHER&OR EXAMPLE A0RODUCT)NVENTORYBEAN THATREPRESENTSPRODUCTSINADATABASE MIGHTHAVEMETHODSFORANINVENTORY ADMINISTRATORTOADDPRODUCTSOR CHANGEPRICES ETC BUTACLIENTCATALOG PROGRAMUSINGTHATSAMEBEANSHOULD NEVERNEEDTOSEEANYTHINGBUTTHE READ ONLYMETHODSIEJUSTTHEGETTERS 

6KDUSHQ \RXU SHQFLO /RRNDWWKHIROORZLQJDSSOLFDWLRQVDQGWU\WR FRPHXSZLWKVHFXULW\UROHVWKDWPLJKWPDNH VHQVHIRUWKHVHDSSOLFDWLRQV/DWHUZH¶OO¿JXUH RXWZKLFKPHWKRGVHDFKRIWKHUROHVVKRXOGEH DOORZHGWRFDOO

$QLQYHQWRU\V\VWHPIRUDQRQOLQHVWRUHNHHSV WUDFNRISURGXFWVVROGDQGVKLSSHGLQYHQWRU\ OHYHOVDQGSULFHV

$QDSSOLFDWLRQIRUUHVHUYLQJDQGERRNLQJGXGH UDQFKYDFDWLRQVWKURXJKDWUDYHODJHQW

Q:

)WOULDTHINKTHATTHEPERSON WRITINGTHEBEANSWOULDBETHEONE WHO2%!,,9KNOWSWHATTHEROLES SHOULDBE

A:

2EMEMBER BEANSAREREUSABLE COMPONENTS9ES WEJUSTSAIDTHATIN THEPREVIOUSQUESTION BUTITWORKS HERETOO4HE"EAN0ROVIDERSHOULD NOTKNOWEXACTLYHOWTHESEBEANS AREBEINGUSED)FHEGETSTOOSPECIFIC WHENHEDESIGNSTHECODEANDWRITES THEBEANS THENTHEBEANSPROBABLY WONTWORKWELLOUTSIDETHESPECIFIC PAYROLLAPPLICATIONTHATHEHASINMIND /NLYTHE!PPLICATION!SSEMBLERKNOWS FORSUREHOWTHEDIFFERENTPIECESOFTHE APPLICATIONRELATEDTOONEANOTHER AND WHICHROLESMAKESENSE4HEREISONE SMALLEXCEPTIONTOTHISTHATWELLTALK ABOUTLATERINTHECHAPTER WHENWE LOOKAT@PROGRAMMATICSECURITY

$UXOHEDVHGSURGXFWUHFRPPHQGDWLRQV\VWHP WKDWDVNVWKHXVHUDVHULHVRITXHVWLRQVDQGWKHQ JLYHVDSSURSULDWHDGYLFHRQZKLFKSURGXFWWKH XVHUVKRXOGSXUFKDVH

$QRQOLQHPDWFKPDNLQJSHUVRQDODGVHUYLFH

\RXDUHKHUH



GHFODUDWLYHVHFXULW\

,MNQVQVO\PMZWTM[
the only element yo mu st have in a elemeu nt is



&KDSWHU

VHFXULW\LQ(-%

,MNQVQVO\PMZWTM[IJM\\MZ_Ia
:KDW·VWKH GLIIHUHQFHEHWZHHQ 3D\UROO$GPLQDQG 'LUHFWRU":KDWZDV VKHWKLQNLQJ"""

+H·VQRWDPLQGUHDGHU DVVHPEO\GHVFULSWRU! VHFXULW\UROH! GHVFULSWLRQ! 7KLVUROHLVIRUWKHHPSOR\HHVZKRKDYHWKH H UC M it ke descriptions ma  SRZHUWRYLHZDQGFKDQJHDOOHPSOR\HHSD\UROO to r ye plo de e easier for th  LQIRUPDWLRQ ct raGHVFULSWLRQ! map the made-up abstou ps UROHQDPH!3D\UROO'LUHFWRUUROHQDPH! roles to the REAL gr e th e er wh y an VHFXULW\UROH! in the comp

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[
ion starts A method permissth says which d with a role, an beenans this role methods in which is allowed to call

this method permission client in the role of ÔPasayrys, ÒA DirectorÕ is allowed to ca oll methods in the ChangePa ll ALL client view (i.e. the home y beanÕs component interfaces) an and methods in the Employee d ALL beanÕs client view.

PHWKRGSHUPLVVLRQ! UROHQDPH!3D\UROO$GPLQUROHQDPH! PHWKRG! HMEQDPH!&KDQJH3D\HMEQDPH! PHWKRGQDPH!UHLPEXUVHPHWKRGQDPH! PHWKRG! PHWKRG! HMEQDPH!&KDQJH3D\HMEQDPH! PHWKRGQDPH!JLYH%RQXVPHWKRGQDPH! PHWKRG! PHWKRG! HMEQDPH!(PSOR\HHHMEQDPH! PHWKRGQDPH!JHW6DODU\PHWKRGQDPH! PHWKRG!  PHWKRGSHUPLVVLRQ!  DVVHPEO\GHVFULSWRU!



&KDSWHU

t in says ÒA clienÕ can n o si is m r e p in this ÔPayroll Adm the role ofimburse and giveBonus , call the re f the ChangePay bean methods o tSalary method of and the geyee bean. the Emplo

VHFXULW\LQ(-%

,MNQVQVO\PMUM\PWLXMZUQ[[QWV[


%\ZLOGFDUG IRU$//PHWKRGV PHWKRG! HMEQDPH!:RUOG'RPLQDWLRQHMEQDPH! PHWKRGQDPH! PHWKRGQDPH! PHWKRG!



an asterisk (*) is the wildcard that mea ns ALL methods beanÕs interfacesin the

%\QDPHDORQHIRUDOOPHWKRGVZLWKWKLV QDPHUHJDUGOHVVRIDUJXPHQWVRUZKHWKHU WKH\·UHLQWKHKRPHRUFRPSRQHQWLQWHUIDFH PHWKRG! HMEQDPH!:RUOG'RPLQDWLRQHMEQDPH! PHWKRGQDPH!WDNH2YHUPHWKRGQDPH! PHWKRG!



ALL this means thathods et overloaded m verÕ will be named ÔtakeO e role. accessible to th

%\QDPHDQGDUJXPHQWVWRGLVWLQJXLVKEHWZHHQ RYHUORDGHGPHWKRGV PHWKRG! HMEQDPH!:RUOG'RPLQDWLRQHMEQDPH! PHWKRGQDPH!WDNH2YHUPHWKRGQDPH! PHWKRGSDUDPV! PHWKRGSDUDP!6WULQJPHWKRGSDUDP! PHWKRGSDUDPV! PHWKRG!

this speciÞes O takeOver methoNdLY the takes a String, bu that t no other overloaded versions. \RXDUHKHUH



GHFODUDWLYHVHFXULW\

0HWKRGSHUPLVVLRQVLQWHUDFW ZLWKRQHDQRWKHUDVDXQLRQ -ETHODPERMISSIONSDONOTRELATETOONEANOTHERINTHESAMEWAYTHATTRANSACTIONATTRIBUTES DO7ITHTRANSACTIONATTRIBUTES USINGAWILDCARDSAYS h%VERYMETHODINTHISBEANWILLHAVE THISATTRIBUTEUNLESS)SAYOTHERWISE BYNAMINGASPECIlCMETHODINADIFFERENTCONTAINER TRANSACTIONTAGv)NOTHERWORDS NAMINGASPECIlCMETHODOVERRIDESTHEWILDCARDSETTING "UTWITHMETHODPERMISSIONS USINGTHEWILDCARDSAYS h!LLMETHODSINTHISBEANCANBE ACCESSEDBYTHISROLEv.OTHINGELSEYOUDOINANYOTHERMETHODPERMISSIONWILLCHANGETHAT

7UDQVDFWLRQDWWULEXWHV FRQWDLQHUWUDQVDFWLRQ! PHWKRG! HMEQDPH!%LJ%HDQHMEQDPH! PHWKRGQDPH! PHWKRGQDPH! PHWKRG! WUDQVDWWULEXWH!5HTXLUHV1HZWUDQVDWWULEXWH! FRQWDLQHUWUDQVDFWLRQ! FRQWDLQHUWUDQVDFWLRQ! PHWKRG! HMEQDPH!%LJ%HDQHMEQDPH! PHWKRGQDPH!XVH2OG'DWDEDVHPHWKRGQDPH! PHWKRG! WUDQVDWWULEXWH!1RW6XSSRUWHGWUDQVDWWULEXWH! FRQWDLQHUWUDQVDFWLRQ!

7KLVVD\VWKDWDOOPHWKRGVLQ %LJ%HDQZLOOXVHWKH5HTXLUHV1HZ DWWULEXWH(;&(37WKH XVH2OG'DWDEDVHPHWKRGZKLFKZLOO XVHWKH1RW6XSSRUWHGDWWULEXWH 7KHVHFRQGFRQWDLQHUWUDQVDFWLRQ! RYHUULGHVWKHZLOGFDUGRQHDQG WDNHVWKHXVH2OG'DWDEDVHPHWKRG RXWRIWKH5HTXLUHV1HZOLVWDQG PRYHVLWWRWKH1RW6XSSRUWHGOLVW

0HWKRGSHUPLVVLRQV PHWKRGSHUPLVVLRQ! UROHQDPH!0LQLRQUROHQDPH!

7KLVVD\VWKDWWKHUROH0LQLRQ FDQDFFHVV$//PHWKRGVRI :RUOG'RPLQDWLRQ

PHWKRG! HMEQDPH!:RUOG'RPLQDWLRQHMEQDPH! PHWKRGQDPH! PHWKRGQDPH! PHWKRG! PHWKRGSHUPLVVLRQ!

$1'WKDWWKH%RVVUROHFDQDFFHVV 21/<WKHOHDUQ3ODQPHWKRGRI :RUOG'RPLQDWLRQ 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! UROHQDPH!$FFRXQW0DQDJHUUROHQDPH!

This says that Acc ountManager is allowed to call th e method on the Acc increaseLimit() ount bean.

PHWKRG! HMEQDPH!$FFRXQWHMEQDPH! PHWKRGQDPH!LQFUHDVH/LPLWPHWKRGQDPH! PHWKRG! PHWKRGSHUPLVVLRQ

PHWKRGSHUPLVVLRQ! XQFKHFNHG!

> the
PHWKRG! HMEQDPH!$FFRXQWHMEQDPH! PHWKRGQDPH! PHWKRGQDPH! PHWKRG! PHWKRGSHUPLVVLRQ

But who cares??!! By say tha t there is a method-permissioingn for Account that says ALL me unchecked, it doesnÕt matterthowhds are else we say about the Account at methods. They are all uncheckedbeanÕs !



7KHXQFKHFNHG!HOHPHQW RYHUULGHV$//RWKHUPHWKRG SHUPLVVLRQVIRUDPHWKRG

\RXDUHKHUH



GHFODUDWLYHVHFXULW\

:DLW,MXVWWKRXJKWRI VRPHWKLQJHOVH6XSSRVH,KDYH WKHVDPHPHWKRGQDPHLQ%27+ WKHKRPHDQGFRPSRQHQWLQWHUIDFH" $QG,ZDQWWKHPWRKDYHGLIIHUHQW DFFHVVFRQWUROV"

+RZWRGHDOZLWKDEHDQWKDWKDVWZR PHWKRGVRIWKHVDPHQDPHEXWRQHLV LQWKHKRPHLQWHUIDFHDQGWKHRWKHULV LQWKHFRPSRQHQWLQWHUIDFH


&KDSWHU

VHFXULW\LQ(-%


ƒ 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\

HGWR )RUWKHH[DP\RXGRQ¶WQH HVWKLV GR \HU SOR 'H NQRZ+2:WKH WKLQJV RQO\WKDWKH0867GRWKHVH

H[SHFW\RXWRNQRZDERXW 5HPHPEHUWKHH[DPGRHVQ¶W W\%XW\RX'2KDYHWR DQ\YHQGRUVSHFL¿FIXQFWLRQDOL VSRQVLELOLW\WRGRWKLV NQRZWKDWLWLVWKH'HSOR\HU¶VUH XPDQVDQGWKH$SS DOK QUH ZHH OHYHORIPDSSLQJEHW $VVHPEOHU¶VDEVWUDFWUROHV

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 security ro ractÓ. Just know that ct term Òabst rity rolesÓ and Òabstraing. Òlogical secuolesÓ mean the same th security r

\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(-% 

7KHFOLHQWDXWKHQWLFDWHGWRWKHV\VWHPLVUHSUHVHQWHGE\DMDYDVHFXULW\3ULQFLSDOREMHFW7KLV 3ULQFLSDOLVDQDEVWUDFWUHSUHVHQWDWLRQRIVRPHWKLQJDVVRFLDWHGZLWKDQDPHEXWWKHUH·VQRJXDUDQWHH WKDWWKH3ULQFLSDOQDPHPDWFKHVWKHORJLQQDPHRIWKHFOLHQW,WDOOGHSHQGVRQKRZ\RXUV\VWHP KDQGOHVVHFXULW\DXWKHQWLFDWLRQ$QGGRQ·WEHWRRDWWDFKHGWRWKLQNLQJWKDWD3ULQFLSDOLVDOZD\VD XQLTXHLQGLYLGXDO6RPHWLPHVD3ULQFLSDOUHSUHVHQWVDODUJHUJURXSOLNHVD\6\V$GPLQ7KH3ULQFLSDO LVDVVRFLDWHGZLWKRQHRUPRUHDEVWUDFWVHFXULW\UROHVWKDWWKH$SS$VVHPEOHUGHILQHG$ERXWWKHRQO\ XVHIXOWKLQJDEHDQFDQGRZLWKD3ULQFLSDOREMHFWLVJHWLWVQDPH D3ULQFLSDOJHW1DPH EXWWKDW·V ULVN\EHFDXVH\RXZRQ·WEHDEOHWRNQRZH[DFWO\ZKDWWKDWQDPHUHSUHVHQWVXQOHVV\RXNQRZWKH H[DFWHQYLURQPHQWLQZKLFKWKHEHDQLVUXQQLQJ
DEVWUDFWDFWRULQ WKHV\VWHP XVXDOO\ PDSVWRDSHUVRQ

0DQDJHU .H\$FFRXQW &XVWRPHU 3D\UROO'LUHFWRU 6ZHGLVK7HDP 6ZLQJ'DQFHUV

3ULQFLSDO



5ROH ,Q(-%DVHFXULW\UROHLVDQDEVWUDFWUROHGHILQHGE\WKH$SS$VVHPEOHUDQGDOWKRXJKLWGRHVQ·WPDWFK DQ\WKLQJLQWKHUHDOZRUOGWKH'HSOR\HUZLOOPDSUHDOXVHUVDQGJURXSVLQWKHFRPSDQ\ZKHUHWKH DSSOLFDWLRQLVUXQQLQJWRWKHDEVWUDFWUROHV)RUH[DPSOHWKH´(PSOR\HHµDEVWUDFWUROHPLJKWPDSWR 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 3D\UROO0DQDJHU 6ZHGHQ 6DOVD'DQFHUV



&KDSWHU



*URXSV 7\SLFDOO\VHFXULW\LQIRUPDWLRQRUJDQL]HVXVHUVLQWRRQHRUPRUHJURXSVRIWHQE\GHSDUWPHQWRU ORFDWLRQ7KH'HSOR\HUFDQRIWHQPDSGLUHFWO\IURPJURXSVWRDEVWUDFWVHFXULW\UROHVEXWKHPLJKWDOVR KDYHWRPDSLQGLYLGXDOXVHUV

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 OFASPECIlCROLETHATWEDOCAREABOUT)MAGINETHATYOUHAVEA PRIVATEPRICINGMETHOD CALLEDBYONEOFYOURBUSINESSMETHODS THATCHECKSTOSEEIFTHISCUSTOMERAUTHENTICATEDASAMEMBEROF YOURSPECIAL6)0CUSTOMERGROUP)FHEIS YOUTREATHIMDIFFERENTLY THANIFHEISNT-AYBEYOUGIVEHIMADISCOUNT-AYBEYOURAISE THEPRICE7HATEVERYOURBUSINESSLOGICTELLSYOUTODO SULYDWHYRLGGHWHUPLQH3ULFH ^  LI FRQWH[WLV&DOOHU,Q5ROH ³9,3&XVWRPHU´ ^ WUHDWFXVWRPHUZHOO `HOVH^ WUHDWKLPOLNHWKHORVHUKHLV ` ` "ESIDESTHEOBVIOUSPROBLEMWITHHARD CODINGSECURITYINFORMATION CUTSDOWNYOURREUSE INCREASESTHECHANCESTHATTHINGSWONT WORKINAPORTABLEWAY ETC THERESANOTHERBIGPROBLEMˆHOW THEHECKDOESTHE"EAN0ROVIDERKNOWINADVANCEWHATROLESTHE !PP!SSEMBLERISGOINGTOASSIGN (EDOESNT/RATLEAST HEPROBABLYSHOULDNT7EKNOW WEKNOW )NREALITY THE"EAN0ROVIDERAND!PP!SSEMBLERARE IFNOTTHE SAMEPERSON CLOSELYRELATEDPROFESSIONALLY SPEAKING OFCOURSE  "UTWERESTILLPUSHINGFORACOMPONENT BASEDDEVELOPMENTMODEL HERE ANDATTHEVERYLEAST WEWANTTHE!PP!SSEMBLERTOTAKE WHATTHE"EAN0ROVIDERHASDONEANDSOMEHOWlTITINTOHEROWN APPLICATION!NDTHATMIGHTMEANINTEGRATINGTHEBEANWITHBEANS FROMOTHERPROVIDERS

:LWKLV&DOOHU,Q5ROH \RX FDQXVHVHFXULW\LQIRUPDWLRQ WRWDLORUWKHZD\DPHWKRG UXQVGHSHQGLQJRQZKLFK UROHFDOOHGWKHPHWKRG 7KLVLVXVXDOO\127DJRRG ZD\WRKDQGOHVHFXULW\7R FRQWURODFFHVVWRDPHWKRG \RX·UHPXFKEHWWHURIIXVLQJ WKHPHWKRGSHUPLVVLRQV WRVWRSDQXQDXWKRUL]HG UROHIURPHYHUFDOOLQJWKH PHWKRG %XW\RXFDQVWLOO86(WKH FDOOHU·VUROHLQIRUPDWLRQWR GRRWKHUQRQVHFXULW\WKLQJV LQ\RXUFRGH

3ONOWIMAGINETHISSCENARIO!NNIETHE!PP!SSEMBLERIS BUILDINGANEWAPPFROMFOUREXISTINGBEANS TWOOFWHICHCAME FROMDIFFERENTPROVIDERS0ROVIDERSWHODIDNTWORKFORTHESAME COMPANYORKNOWONEANOTHER(OWCOULDTHEYHAVECOMMUNICATED INADVANCE TOKNOWWHICHROLES!NNIEWASGOINGTOCHOOSEFORHER APPLICATION \RXDUHKHUH



SURJUDPPDWLFVHFXULW\


%LOOSURYLGHGEHDQ$

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"""

$QQLHQHHGVWRXVH%27+ EHDQVLQKHUDSSEXWVKH ZDQWVWRGHÀQHKHUUROH QDPHDV´.H\$FFRXQWVµ

,·OOFDOOWKHUROHIRU LPSRUWDQWDFFRXQWV ´(QOLJKWHQHG&XVWRPHUVµ

5D\6XQVKLQH SURYLGHGEHDQ%

7KH$SS$VVHPEOHUPXVWPDS EHWZHHQWKHSURJUDPPHU·V KDUGFRGHG FRPSOHWHO\IDNH  UROHQDPHDQGWKHDEVWUDFW UROHVKHZDQWVWRGHÀQHIRU WKLVDSSOLFDWLRQ DEVWUDFWUROHQDPH.H\$FFRXQWV EHDQ$UROHQDPH9,3&XVWRPHU EHDQ%UROHQDPH(QOLJKWHQHG &XVWRPHUV

ME mes for the SrAto map na nt re fe if d 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

VHFXULW\LQ(-%

SURJUDPPDWLFVHFXULW\

0DSGHFODUDWLYHVHFXULW\UROHVWRWKH SURJUDPPHU·VKDUGFRGHG IDNH UROHV 4HE!PP!SSEMBLERMAPSBETWEENSECURITYROLEREFERENCESHARD CODED ROLENAMESTHEPROGRAMMERMADEUP ANDSECURITYROLESABSTRACTROLE NAMESSHECHOSEFORTHISAPP USINGTHEUROHOLQN!ELEMENT

%HDQ3URYLGHU

2K\HDKWKH$SS $VVHPEOHUQHHGVWRNQRZWKDW ,SXWDUROHQDPHLQP\FRGH,·OO PDNHDVHFXULW\UROHUHIHUHQFH LQWKH'',PDNHIRUWKLV EHDQ

L the der has to TEL The Bean Prorvi what he did in code, by App Assemble tag putting in a

HQWHUSULVHEHDQV! VHVVLRQ! HMEQDPH!6KRSSLQJ&DUWHMEQDPH!  VHFXULW\UROHUHI! GHVFULSWLRQ! 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 WKDWWKH&RQWDLQHUZLOONQRZWKDW ´9,3&XVWRPHUµUHDOO\PHDQV ´.H\$FFRXQWVµ

The App Assembler ad what the Bean Providedsr pua to role-ref>, to map the CO t in his
VHFXULW\UROHUHI! GHVFULSWLRQ! WKLVUROHVKRXOGEHDVVLJQHGWRWKH DFFRXQWVWKDWJHWVSHFLDO9,3SULFLQJ GHVFULSWLRQ! UROHQDPH!9,3&XVWRPHUVUROHQDPH! UROHOLQN!.H\$FFRXQWVUROHOLQN! VHFXULW\UROHUHI!  \RXDUHKHUH



(-%VHFXULW\PDSSLQJ

7KHFRPSOHWHVHFXULW\PDSSLQJSLFWXUH VHFXULW\UROHUHI!

VHFXULW\UROH!

$SS$VVHPEOHUPDSVWKH SURJUDPPHU·VKDUGFRGHG VHFXULW\UROHUHIHUHQFHVWR KHUDEVWUDFWVHFXULW\UROHV XVLQJWKHUROHOLQN!HOHPHQW

XVHUVDQGJURXSV

'HSOR\HUPDSVWKH$SS $VVHPEOHU·VDEVWUDFW VHFXULW\UROHVWRXVHUVDQG JURXSVLQWKH'HSOR\HU·V FRPSDQ\XVLQJDYHQGRU VSHFLÀFPDSSLQJ FRXOGEHD SURSHUWLHVÀOH 

UHDOSHRSOH

6RPHRQHLQWKHRSHUDWLRQDO HQYLURQPHQWVHWVXSXVHUV DQGJURXSVLQWKHUHDO FRPSDQ\3UREDEO\VRPHNLQG RIV\VDGPLQUHVSRQVLEOH IRUDVVLJQLQJORJLQLQIRDQG SDVVZRUGVWRHPSOR\HHV

:KHUHDQGKRZWKHPDSSLQJKDSSHQV

,QWKH(-% 'HSOR\PHQW 'HVFULSWRU

VHFXULW\UROHUHI!

,QDYHQGRU VSHFL¿FZD\

VHFXULW\UROH!

this is the part thatÕs the part you have to kninowthe spec, and on the exam



&KDSWHU

,QDFRPSDQ\ VSHFL¿FZD\

XVHUVDQGJURXSV

UHDOSHRSOH

youÕll Þnd this out from youron way out of the scope of a bean developerÕs job vendor/product documentati

VHFXULW\LQ(-%

=[M$Z]VI[&[MK]ZQ\aQLMV\Q\a\W XZM\MVL[WUMWVMMT[MQ[KITTQVO 7HENACLIENTCALLSAMETHOD THE#ONTAINERALWAYS KNOWSTHECLIENTS0RINCIPAL WHICHINCLUDESTHEABSTRACT SECURITYROLESTHE$EPLOYERASSIGNEDTOTHAT0RINCIPAL !NDREMEMBER THECALLERSSECURITYCONTEXTISPROPAGATED THROUGHOUTTHEAPPLICATIONASTHECLIENTSORIGINALMETHOD GOESABOUTDOINGITSWORK%ACHMETHODCALLEDINTHE CONCEPTUALCALLSTACKWILLGETTHESECURITYCONTEXTALONGWITH THECALL

1RZZKHQHYHU,FDOODQRWKHUEHDQ LQWKHDSSOLFDWLRQWKDWEHDQWKLQNV ,·PVRPHRQHVSHFLDO6RPHRQHFRROHU 6RPHRQHZLWKSRZHUZKRFDQUHDOO\*2 SODFHV6RPHRQHD/27PRUHLQWHUHVWLQJ WKDQWKHFOLHQWZKRFDOOHGWKHEXVLQHVV PHWKRGWKDWVWDUWHGDOOWKLV

"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 RQHRWKHUWKDQWKHFDOOLQJFOLHQW

([SOLFLWO\VD\LQJWKDW\RXZDQWWKH FDOOLQJFOLHQW·VLGHQWLW\WREHXVHG

HQWHUSULVHEHDQV! VHVVLRQ! HMEQDPH!%HDQ$HMEQDPH!  VHFXULW\LGHQWLW\! UXQDV! UROHQDPH!6XSHU%HDQUROHQDPH! UXQDV! VHFXULW\LGHQWLW\!  ust VHVVLRQ! role-name emal abstract r a HQWHUSULVHEHDQV! match by

HQWHUSULVHEHDQV! VHVVLRQ! HMEQDPH!%HDQ$HMEQDPH!  VHFXULW\LGHQWLW\! XVHFDOOHULGHQWLW\! VHFXULW\LGHQWLW\!  VHVVLRQ! This is what you get by HQWHUSULVHEHDQV! donÕt

set up security-rossleembler the App A

default, if you put in a element at all. 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\ FRQWH[WWKDWVD\VVKH·VD PHPEHURIWKH´FXVWRPHUVµ UROH

5DWKHUWKDQSURSDJDWHWKH FOLHQW·VVHFXULW\LGHQWLW\ %HDQ$WDNHVRQWKHUROH RI¶6XSHU%HDQ·WKHQFDOOVD PHWKRGRQ%HDQ%

6WLOO%HDQ$ EXWQRZUXQQLQJ DV¶6XSHU%HDQ·

%HDQ$ &OLHQWLQWKH ¶FXVWRPHUV·UROH

PXVW127 0HVVDJHGULYHQEHDQV ! W\ QWL LGH HU DOO VD\XVHF

GRQ¶W "0HVVDJHGULYHQEHDQV :KLFKFDOOHUZRXOGWKDWEH  HQW \P DWFKRXWIRUDGHSOR +$9(DFDOOLQJFOLHQW6RZ D LWK QZ EHD HQ VVDJHGULY GHVFULSWRUWKDWVKRZVDPH YHU HFDOOHULGHQWLW\!+RZH XV \V WVD WKD LW\ HQW \LG VHFXULW  $QG LW\ HQW !LG 1KDYHDUXQDV PHVVDJHGULYHQEHDQV&$ Q EHD HQ GULY JH VVD PH UJHWWKDWD ZKLOHZH¶UHKHUHGRQ¶WIR  VVDJH'ULYHQ&RQWH[WIRUWKH 0H LWV DVN WR UWU\ HYH PXVWQ VQ¶W GRH \! QWLW LGH QWLW\$VHFXULW\ FDOOLQJFOLHQW¶VVHFXULW\LGH WKH KR UZ WKH WUD EX ,7 OLQJ LVFDO VSHFLI\ZKRWKHEHDQWKLQNV V HDQ 5E LWPDNHVFDOOVWR27+( EHDQSUHWHQGVWREHZKHQ



&KDSWHU

%HDQ%GRHVQ·WNQRZDERXWWKH RULJLQDOFOLHQWDQGWKLQNVWKH FDOOHU·VVHFXULW\LGHQWLW\LV ¶6XSHU%HDQ·8QOHVV%HDQ%KDV LWV2:1UXQDVLGHQWLW\LWZLOO SURSDJDWH¶6XSHU%HDQ·ZLWKDQ\ FDOOV%HDQ%PDNHVRQRWKHUEHDQV

%HDQ%

%HDQ$·VVHFXULW\LGHQWLW\! LVQRWDERXWZKR%HDQ$ VKRXOGVHHDVLWVFDOOHUEXW UDWKHUZKDW%HDQ%ZLOOVHH ZKHQ%HDQ$FDOOVLW ,QRWKHUZRUGVVHFXULW\ LGHQWLW\!LVQRWDERXW FKDQJLQJWKHLQFRPLQJ FOLHQWLGHQWLW\EXWDERXW FKDQJLQJZKDWWKHEHDQ 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

VHFXULW\LQ(-%

0RFN([DP 1

7HATSTRUEABOUTSECURITYFOR%*"S#HOOSEALLTHATAPPLY

R! !LLSECURITYPOLICIESMUSTBEEXPRESSEDDECLARATIVELY R" 4HEDEFAULTSECURITYPRINCIPALUNDERWHICHAMETHODINVOCATIONIS PERFORMEDISTHATOFTHECOMPONENTSCREATOR

R# 5SING%*"S METHODPERMISSIONSCANBEDECLAREDUSING%*"1,INTHE DEPLOYMENTDESCRIPTOR

R$ 3ECURITYAUTHORIZATIONCANBEBYPASSEDONAMETHODBYMETHODBASIS R% 3ECURITYAUTHORIZATIONCANBEBYPASSEDONANINSTANCEBYINSTANCEBASIS

2

7HATSTRUEABOUTMETHODSTHATSHOULDRUNWITHOUTBEINGCHECKEDFOR AUTHORIZATION#HOOSEALLTHATAPPLY

R! 4HEYCANBELISTEDINTHEEXCLUDE LISTELEMENT R" 4HEYCANBELISTEDINTHEUNCHECKEDELEMENT R# 7HENTHEUNCHECKEDELEMENTISUSED ITSHOULDBEPLACEDWHERETHE ROLE NAMEELEMENTNORMALLYOCCURSINTHEDEPLOYMENTDESCRIPTOR

R$ 7HENAMETHODPERMISSIONRELATIONSPECIlESBOTHUNCHECKEDANDA SECURITYROLE THECONTAINERWILLUSETHESECURITYROLE

3

7HICHROLES SHOULDTYPICALLYDElNETHEAPPROPRIATESECURITYPOLICIESFORAN APPLICATION#HOOSEALLTHATAPPLY

R! BEANPROVIDER R" APPLICATIONASSEMBLER R# DEPLOYER R$ SYSTEMADMINISTRATOR R% SERVERPROVIDER

\RXDUHKHUH



FRIIHHFUDPPRFNH[DP

4

)NWHICHOFTHEFOLLOWINGMETHODSCANASTATEFULSESSIONBEANINVOKETHE LV&DOOHU,Q5ROHMETHODINORDERTOPERFORMASECURITYCHECK#HOOSEALL THATAPPLY

R! HME&UHDWH R" HME$FWLYDWH R# HME3DVVLYDWH R$ .ONEOFTHEABOVE

5

7HICHARETHEBEANPROVIDERSRESPONSIBILITIESWHENMAKINGANAPPLICATION SECURE#HOOSEALLTHATAPPLY

R! !SSIGNINGTHESECURITYDOMAINTOTHEAPPLICATION R" !UTHENTICATIONOFPRINCIPALS R# -APPINGTHEPRINCIPALSUSEDBYTHECLIENTTOTHEPRINCIPALSDElNEDFOR THEBEAN

R$ .ONEOFTHEABOVE

6

)NWHICHOFTHEFOLLOWINGMETHODSCANA#-0ENTITYBEANINVOKETHE GET#ALLER0RINCIPAL METHODINORDERTOPERFORMASECURITYCHECK#HOOSE ALLTHATAPPLY

R! HME&UHDWH R" HME$FWLYDWH R# HME3DVVLYDWH R$ HME3RVW&UHDWH R% "USINESSMETHODS

7

)NWHICHOFTHEFOLLOWINGMETHODSCANA"-0ENTITYBEANINVOKETHE JHW&DOOHU3ULQFLSDO METHODINORDERTOPERFORMASECURITYCHECK #HOOSEALLTHATAPPLY

R! HME/RDG R" HME6WRUH R# HME3DVVLYDWH R$ HME3RVW&UHDWH R% "USINESSMETHODS



&KDSWHU

VHFXULW\LQ(-%

8

7HENDESCRIBINGMETHODPERMISSIONSINTHEDEPLOYMENTDESCRIPTORFORA SPECIlCBEAN WHATSTRUE#HOOSEALLTHATAPPLY

R! !WILD CARDCHARACTERCANREFERTOALLOFTHEBEANSMETHODS R" )NDIVIDUALOVERLOADEDMETHODSCANNOTBEDISTINGUISHEDFROMEACH OTHER

R# !METHODINTHEHOMEINTERFACECANNOTBEDISTINGUISHEDFROMA METHODWITHTHESAMENAMEINTHECOMPONENTINTERFACE

R$ )NDIVIDUALMETHODSCANBEREFERREDTO

9

4HEUROHQDPH!ELEMENTCANBEUSEDWITHINWHATOTHERSECURITYRELATED DEPLOYMENTDESCRIPTORELEMENTS #HOOSEALLTHATAPPLY

R! VHFXULW\UROH! R" UXQDV! R# PHWKRGQDPH! R$ H[FOXGHOLVW! R% VHFXULW\UROHUHI!

10

7HICHROLESHAVEWHATRESPONSIBILITIESWHENIMPLEMENTINGSECURITYFOR%*" APPLICATIONS#HOOSEALLTHATAPPLY

R! 4HE!PPLICATION!SSEMBLERTYPICALLYSPECIlESWHENRUN ASIDENTITY SHOULDBEUSEDINANAPPLICATION

R" 4HE"EAN0ROVIDERMAPSSECURITYROLEREFERENCESTOSECURITYROLES R# 4HE"EAN0ROVIDERISTYPICALLYRESPONSIBLEFORASSIGNINGTHESECURITY DOMAINANDPRINCIPALREALMTOTHEAPPLICATION

R$ 4HE$EPLOYERMAPSSECURITYROLEREFERENCESTOSECURITYROLES

11

7ITHINTHEVHFXULW\UROHUHI!DEPLOYMENTDESCRIPTORELEMENT WHICH SUB ELEMENTSAREOPTIONAL#HOOSEALLTHATAPPLY

R! UROHQDPH! R" UROHOLQN! R# GHVFULSWLRQ! R$ .ONEOFTHEABOVEAREOPTIONAL

\RXDUHKHUH



GHFODUDWLYHVHFXULW\

0RFN([DP$QVZHUV 1

7HATSTRUEABOUTSECURITYFOR%*"S#HOOSEALLTHATAPPLY

)

(spec: 434-435

R! !LLSECURITYPOLICIESMUSTBEEXPRESSEDDECLARATIVELY R" 4HEDEFAULTSECURITYPRINCIPALUNDERWHICHAMETHODINVOCATIONIS PERFORMEDISTHATOFTHECOMPONENTSCREATOR

R# 5SING%*"S METHODPERMISSIONSCANBEDECLAREDUSING%*"1,INTHE DEPLOYMENTDESCRIPTOR

R$ 3ECURITYAUTHORIZATIONCANBEBYPASSEDONAMETHODBYMETHODBASIS R% 3ECURITYAUTHORIZATIONCANBEBYPASSEDONANINSTANCEBYINSTANCEBASIS

2

7HATSTRUEABOUTMETHODSTHATSHOULDRUNWITHOUTBEINGCHECKEDFOR AUTHORIZATION#HOOSEALLTHATAPPLY

(spec: 443)

R! 4HEYCANBELISTEDINTHEEXCLUDE LISTELEMENT - For methods that must NEVER be called R" 4HEYCANBELISTEDINTHEUNCHECKEDELEMENT R# 7HENTHEUNCHECKEDELEMENTISUSED ITSHOULDBEPLACEDWHERETHE ROLE NAMEELEMENTNORMALLYOCCURSINTHEDEPLOYMENTDESCRIPTOR

R$ 7HENAMETHODPERMISSIONRELATIONSPECIlESBOTHUNCHECKEDANDA SECURITYROLE THECONTAINERWILLUSETHESECURITYROLE

3

7HICHROLES SHOULDTYPICALLYDElNETHEAPPROPRIATESECURITYPOLICIESFORAN APPLICATION#HOOSEALLTHATAPPLY

R! BEANPROVIDER R" APPLICATIONASSEMBLER R# DEPLOYER R$ SYSTEMADMINISTRATOR R% SERVERPROVIDER



&KDSWHU

(spec: 435-436)

VHFXULW\LQ(-%

4

)NWHICHOFTHEFOLLOWINGMETHODSCANASTATEFULSESSIONBEANINVOKETHE LV&DOOHU,Q5ROHMETHODINORDERTOPERFORMASECURITYCHECK#HOOSEALL THATAPPLY

(spec: 80)

R! HME&UHDWH R" HME$FWLYDWH R# HME3DVVLYDWH R$ .ONEOFTHEABOVE

5

7HICHARETHEBEANPROVIDERSRESPONSIBILITIESWHENMAKINGANAPPLICATION SECURE#HOOSEALLTHATAPPLY

)

(spec: 448-454

R! !SSIGNINGTHESECURITYDOMAINTOTHEAPPLICATION Typically the DeployerÕs job R" !UTHENTICATIONOFPRINCIPALS R# -APPINGTHEPRINCIPALSUSEDBYTHECLIENTTOTHEPRINCIPALSDElNEDFOR THEBEAN

R$ .ONEOFTHEABOVE

6

)NWHICHOFTHEFOLLOWINGMETHODSCANA#-0ENTITYBEANINVOKETHE GET#ALLER0RINCIPAL METHODINORDERTOPERFORMASECURITYCHECK#HOOSE ALLTHATAPPLY

(spec: 179-180)

R! HME&UHDWH R" HME$FWLYDWH client be? - who would the R# HME3DVVLYDWH R$ HME3RVW&UHDWH R% "USINESSMETHODS

7

)NWHICHOFTHEFOLLOWINGMETHODSCANA"-0ENTITYBEANINVOKETHE JHW&DOOHU3ULQFLSDO METHODINORDERTOPERFORMASECURITYCHECK #HOOSEALLTHATAPPLY

(spec: 257)

R! HME/RDG R" HME6WRUH he client be? R# HME3DVVLYDWH - who would t R$ HME3RVW&UHDWH R% "USINESSMETHODS

\RXDUHKHUH



GHFODUDWLYHVHFXULW\

8

(spec: 444)

7HENDESCRIBINGMETHODPERMISSIONSINTHEDEPLOYMENTDESCRIPTORFORA SPECIlCBEAN WHATSTRUE#HOOSEALLTHATAPPLY

R! !WILD CARDCHARACTERCANREFERTOALLOFTHEBEANSMETHODS R" )NDIVIDUALOVERLOADEDMETHODSCANNOTBEDISTINGUISHEDFROMEACH The

element does this

OTHER

R# !METHODINTHEHOMEINTERFACECANNOTBEDISTINGUISHEDFROMA METHODWITHTHESAMENAMEINTHECOMPONENTINTERFACE

R$ )NDIVIDUALMETHODSCANBEREFERREDTO

9

4HEUROHQDPH!ELEMENTCANBEUSEDWITHINWHATOTHERSECURITYRELATED DEPLOYMENTDESCRIPTORELEMENTS #HOOSEALLTHATAPPLY

7)

(spec: 444-44

R! VHFXULW\UROH! R" UXQDV! R# PHWKRGQDPH! R$ H[FOXGHOLVW! R% VHFXULW\UROHUHI!

10

7HICHROLESHAVEWHATRESPONSIBILITIESWHENIMPLEMENTINGSECURITYFOR%*" APPLICATIONS#HOOSEALLTHATAPPLY

9)

(spec: 446-44

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 SUB ELEMENTSAREOPTIONAL#HOOSEALLTHATAPPLY

R! UROHQDPH! R" UROHOLQN! Usually deÞned by the Application assembler R# GHVFULSWLRQ! R$ .ONEOFTHEABOVEAREOPTIONAL



&KDSWHU

(spec: 527)

a beanÕs environment

5

4 47KH-R\RI'HSOR\PHQW 7KDQNVWRWKH EHQHÀWVRIGHSOR\WLPH FXVWRPL]DWLRQ,KDYHH[WUD WLPHWRHQMR\PRUHORYHO\ PHDOVZLWK\RX

,KHDUG\RXU H[ZLIHVWLOOFKDQJHV VRXUFHFRGH




H[DPREMHFWLYHV

$%HDQ·V(QYLURQPHQW

2IILFLDO ,GHQWLI\FRUUHFWDQGLQFRUUHFW VWDWHPHQWVRUH[DPSOHVDERXWDQ HQWHUSULVHEHDQ¶V-1',QDPLQJ

,GHQWLI\FRUUHFWDQGLQFRUUHFW VWDWHPHQWVDERXWWKHSXUSRVHDQGRU XVHRIWKHGHSOR\PHQWGHVFULSWRU HOHPHQWVIRUHQYLURQPHQWHQWULHV (-%UHIHUHQFHVUHVRXUFHPDQDJHU FRQQHFWLRQIDFWRU\UHIHUHQFHV LQFOXGLQJZKHWKHUDJLYHQFRGHOLVWLQJ LVDSSURSULDWHDQGFRUUHFWZLWKUHVSHFW WRDSDUWLFXODU''HOHPHQW

*LYHQDOLVWRIUHVSRQVLELOLWLHVLGHQWLI\ ZKLFKEHORQJWRWKH'HSOR\HU%HDQ 3URYLGHU$SS$VVHPEOHU&RQWDLQHU 6\V$GPLQRUDQ\FRPELQDWLRQ

 *LYHQDOLVWRIWHFKQRORJ\ VSHFL¿FDWLRQVLGHQWLI\ZKLFKDUH UHTXLUHPHQWVIRUDQ(-%FRQWDLQHU

 ,GHQWLI\FRUUHFWDQGLQFRUUHFW VWDWHPHQWVRUH[DPSOHVDERXW(-% SURJUDPPLQJUHVWULFWLRQV

 0DWFK(-%UROHVZLWKWKH FRUUHVSRQGLQJGHVFULSWLRQRIWKHUROH¶V UHVSRQVLELOLWLHVZKHUHWKHGHVFULSWLRQ PD\LQFOXGHGHSOR\PHQWGHVFULSWRU LQIRUPDWLRQ

 *LYHQDOLVWLGHQWLI\ZKLFKDUH UHTXLUHPHQWVIRUDQHMEMDU¿OH 

FKDSWHU

:KDWLWUHDOO\PHDQV
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
ƒ (QWHUSULVH%HDQ5HIHUHQFHV :KHQRQHEHDQZDQWVWRORRNXSDQRWKHUEHDQ
ƒ 5HVRXUFH(QYLURQPHQW5HIHUHQFHV
\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]

REM

'XGH,ÀQDOO\ KDYHDSODFHRIP\ RZQ-XVWIRUPH

$GYLVRU

WN special This is the beanÕs beO an starts subcontext. The here when he navigating from environment to wants to use his look stuff up. REM

MDYDFRPSHQY

HME

MGEF

WD[5DWH

This bean ca value of taxRnatlook up the java:comp/env/ e using taxRate

REM REM UHIHUHQFHWR$GYLVRU

This bean ca other beans inn look up java:comp/env/ the subcontext ejb



FKDSWHU

UHIHUHQFHWRD'DWD6RXUFH IRUWKH&XVWRPHUGDWDEDVH

e up a DataSourc ok lo n ca an be This p/env/jdbc in the java:com subcontext

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'%

the priva for this btee environment an type

ouÕre the ÔthingÕ ryesource f o e m a n e h , T n this case 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 MGEF e 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

7KHGHSOR\HUJHWVUHDOO\ SLVVHGRIILI\RXGRQ·WGHFODUH \RXU-1',ORRNXSVWULQJVLQ WKHGHSOR\PHQWGHVFULSWRU$VN PHDERXWWKHÀJKWZHKDGODVW PRQWK6HULRXVO\$VNPH

'HFODUHVWKHPDGHXS-1',QDPHV LQWKH'HSOR\PHQW'HVFULSWRUIRU WKH'HSOR\HU



FKDSWHU

+HEHWWHUGHFODUHDOOKLV -1',HQYLURQPHQWUHIHUHQFHV LQWKH''VR,FDQPDSWKHPWR 5($/QDPHVWKDWRQO\,NQRZ$QG LIKHGRHVQ·W,·OOVKRZKLPZKDW WKUHH\HDUVRI3LODWHVFDQGR

0DSVWKHSURJUDPPHU·VPDGHXS IDNHQDPHVWRWKH5($/-1', QDPHVXQGHUZKLFKWKHUHVRXUFHV ZHUHGHSOR\HGRUFRQÀJXUHGLQWR WKHVHUYHU

DEHDQ¶VHQYLURQPHQW

(QYLURQPHQWHQWULHVGHSOR\WLPHFRQVWDQWV )MAGINEYOUREWRITINGASIMPLECHECKOUTBEANFORANONLINESHOPPING CARTSYSTEM9OUDONTKNOWWHERETHATBEANMIGHTENDUP%VENIFYOUDO YOUKNOWTHATTHINGSLIKETAXRATESANDDISCOUNTPOLICIESCANCHANGE EVEN WITHINTHESAMECOMPANY %NVIRONMENTENTRIESLETYOUWRITEYOURCODEUSINGAVARIABLETHATYOULLlLL INATRUNTIMEUSINGA*.$)LOOKUP2EMEMBER THE"EAN0ROVIDERCHOOSES THENAME ANDITSUPTOTHE$EPLOYERTOlLLINTHEVALUE LQDEHDQ·VEXVLQHVVPHWKRG

this is the part of the lookup that must go in the DD

,QLWLDO&RQWH[WLF QHZ,QLWLDO&RQWH[W  'RXEOHGEO  'RXEOH LFORRNXS ³MDYDFRPSHQYVPDUW&XVWRPHU'LVFRXQW´  FXVWRPHU'LVFRXQW GEOGRXEOH9DOXH  XVHWKHSULPLWLYHGRXEOHYDOXHWRFDOFXODWHWKHGLVFRXQW

LQWKH'HSOR\PHQW'HVFULSWRU HQWLW\! 

p/env/Ó ! m o :c a v a r j ut the Ò descriptor. Eve at p T O N You do he deployment Y the part th t part in , you put ONL p/env/Ó D m D In the ter the Òjava:co f if you have any comes a

HQYHQWU\!

er The programmGHVFULSWLRQ!GLVFRXQWIRUVPDUWFXVWRPHUVGHVFULSWLRQ! me na is made up th HQYHQWU\QDPH!VPDUW&XVWRPHU'LVFRXQWHQYHQWU\QDPH!

compassion at all, youÕll put in a description for the poor Deployer.

HQYHQWU\W\SH!MDYDODQJ'RXEOHHQYHQWU\W\SH! HQYHQWU\YDOXH!HQYHQWU\YDOXH!

the type must be either a String or a wrapper class

HQYHQWU\!  HQWLW\!

The value is optional for the Bean Provider, but he can use this element to supply a default. But the Deployer MUST ensure that thereÕs a valid value before the bean is deployed. Environment entries are different from the other customizations in that the Deployer doesnÕt map from the 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 . As long as the has a value when its deployed, the environment entry will be created.


SOR\HGWKHUHLV 2QFHDEHDQKDVEHHQGH HRIWKHHQYL DOX HY HWK 12:$<WRFKDQJ ZD\WRXSGDWH URQPHQWYDULDEOH7KHRQO\ GHSOR\WKH RUH LVW WKHYDOXHDEHDQVHHV ' Z' EHDQZLWKWKHQH

\RXDUHKHUH



GHSOR\WLPHFXVWRPL]DWLRQ

WKHUH DUH QR

'XPE 4XHVWLRQV

Q:

7HYCANTYOUJUSTUSE*AVAPROPERTYlLES INSTEADOFENVIRONMENTENTRIES

A:

9OURENOTALLOWEDTOUSEPROPERTIESBECAUSE YOUCANTACCESSTHEFILESYSTEMTOREADTHEMIN AND YOUDONTHAVEANYCONTROLOVERSYSTEMPROPERTIESFOR EXAMPLE YOUHAVENOWAYTOSETAPROPERTYASA*6- COMMAND LINEARGUMENT

Q:

7HYCANT)HAVEANENVIRONMENTENTRYTHATS SHAREDAMONGMULTIPLEBEANSINTHESAMEAPP/RAT LEASTWITHINTHESAMEEJB JAR

A:

"ECAUSEBECAUSEYOUCANT4HERESSIMPLY NOMECHANISMFORSHARINGTHEBEANSENVIRONMENT BECAUSETHATWOULDDEFEATTHEWHOLEPURPOSEOFTHE BEANHAVINGHISOWNPRIVATESPACE(AVINGABEANS ENVIRONMENTPREVENTSWHATWOULDBEANEXTREMELY LIKELYDISASTERNAMINGCOLLISIONSBETWEENDIFFERENT BEANS)NOTHERWORDS DIFFERENTBEANSDEPLOYEDWITH ENVIRONMENTENTRIESOROTHERREFERENCES THATUSETHE SAMENAME )FYOUHAVEASHAREDRESOURCEORENVIRONMENTENTRY YOU-534CONFIGUREITWITHEACHBEANYOUDEPLOY4HIS IS./4PER$EPLOYMENT$ESCRIPTOR BUTPEREVERYINDI VIDUALBEAN REGARDLESSOFWHERETHEBEANLIVES

(QYLURQPHQWHQWULHVPXVW EHRQHRIWKHVHW\SHV

ƒ ƒ ƒ ƒ ƒ ƒ ƒ ƒ ƒ



6WULQJ %\WH 2QO\6WULQJV 6KRUW DQGZUDSSHUV ,QWHJHU DUHDOORZHGIRU HQYLURQPHQW /RQJ HQWULHV )ORDW 'RXEOH &KDUDFWHU %RROHDQ

FKDSWHU

:DWFKLW


W
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. of the beanÕs envi

8VLQJDVXEFRQWH[W

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

REM

Note: you donÕt need to narrow anything comi ng out of JNDI lookups EXCEPT for stubs (Remote home interface references), so all you need is a plain old cast.

WD[5DWH

the In the DD for tr environment en y name, anything sh followed by a slacomes automatically be a subcontext!

ct taxRate is an objeo nf xI within the ta subcontext

&UHDWLQJDVXEFRQWH[W !SUBCONTEXTEXISTSSIMPLYBECAUSEYOUSAYITDOES)FYOUTYPEhJAVACOMP ENVFOOBARvINTOYOURLOOKUPCODE YOUVESAID h4HEREISASUBCONTEXTIN MYENVIRONMENTNAMEDhFOOv ANDITCONTAINSTHEOBJECThBARv!SLONGASYOU USETHESAMESUBCONTEXTINTHEDEPLOYMENTDESCRIPTORWHENYOUDEPLOYTHE BEAN THESUBCONTEXTWILLMAGICALLYEXIST JUSTBECAUSEYOUSAIDITDOES)NOTHER WORDS YOUDONTHAVETOGOTHROUGHAPROCESSOFSOMEHOWCREATINGANEW *.$)CONTEXTANDNAMINGIT!CTLIKEITSTHERE ANDITSTHERE$ONTYOUWISH 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 HQWLW\!  UHVRXUFHUHI!

Be SURE to leave off e java: comp/env/ part, and beth gin wit h the Þrst subcontext (jdbc)

adeProgrammerÕs mthe UHVUHIQDPH!MGEF&XVWRPEHU'%UHVUHIQDPH! up name. NOTe!. UHVW\SH!MDYD[VTO'DWD6RXUFHUHVW\SH! read DB nam

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! is optio iner Bean or the C ÒS hareableÓ. It means that otnal, and defaults to  same app, using the same re her beans in the HQWLW\! 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 D-1',ORRNXSRQD'DWD6RXUFH ZKLFKKHXVHVWRJHWDGDWDEDVH FRQQHFWLRQ +HGRHVQ·WNQRZWKH UHDO-1',QDPHRIWKHGDWDEDVH DQGKH'(),1,7(/<GRHVQ·W NQRZDFWXDOGDWDEDVHQDPH VR KHPDNHVRQHXS%XWKHWHOOV WKHGHSOR\HUZKDWKH·VGRQH E\GHFODULQJDUHVRXUFHUHI! HOHPHQWLQWKH''

'HSOR\HUPDSVWKH%HDQ 3URYLGHU·VPDGHXSUHVRXUFHUHI! QDPHWRWKHDFWXDO-1',QDPH XQGHUZKLFKWKH'DWD6RXUFHLV UHJLVWHUHG

7KH6\V$GPLQ RUVRPHRQHLQ WKHRSHUDWLRQDOHQYLURQPHQW FRQÀJXUHVWKHGDWDEDVHLQWRWKH VHUYHUDQGJLYHVLWD-1',QDPH

:KHUHDQGKRZWKHPDSSLQJKDSSHQV

,QWKH(-% 'HSOR\PHQW 'HVFULSWRU

,QDYHQGRU VSHFL¿FZD\

UHVRXUFHUHI!

this is the part thatÕs in the spec, and the part you ha ve to know on the exam



FKDSWHU

,QDYHQGRU VSHFL¿FZD\

GDWDEDVH-1', QDPH

youÕll Þnd out how to do this mapping from your vendor/ product documentation

UHDOGDWDEDVH

way out of the scope of a bean developerÕs job

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, a what the REAL name will be...

LQDEHDQ·VEXVLQHVVPHWKRG

,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 HQWLW\!  HMEUHI!

Be SURE to leave off e java: comp/env/ part, and beth gin wit h the Þrst subcontext (ejb)

adeProgrammerÕs mthe HMEUHIQDPH!HME$GYLFH*LYHUHMEUHIQDPH! T up name. NO me of this must be either real JNDI na HMEUHIW\SH!6HVVLRQHMEUHIW\SH! Session or Entity the bean. KRPH!KHDG¿UVW$GYLFH+RPHKRPH!

The fully-qualiÞed name of the home interface

UHPRWH!KHDG¿UVW$GYLFHUHPRWH! HMEUHI!  HQWLW\! 

The fullythe componqeualiÞed name of nt interface

\RXDUHKHUH



GHSOR\WLPHFXVWRPL]DWLRQ

(-%ORFDOUHIHUHQFHV 5SETHEEJB LOCAL REFTAGIFYOUWANTTOLOOKUPTHEBEANSLOCALHOME HMEORFDOUHI! HMEUHIQDPH!HME$GYLFH*LYHUHMEUHIQDPH!

e HMEUHIW\SH!6HVVLRQHMEUHIW\SH! The sub-elementsearlocal different for th -home> ORFDOKRPH!KHDG¿UVW$GYLFH+RPH/RFDOORFDOKRPH! interfaces: e> om ORFDO!KHDG¿UVW$GYLFH/RFDOORFDO! instead of ot em
WKHUH DUH QR

Q:

'XPE 4XHVWLRQV

)UNDERSTANDTHEELEMENTNAMESFORHOMEAND LOCAL HOME-AKESSENSE"UTWHATSUPWITHREMOTE ANDLOCAL3HOULDNTITBECOMPONENTANDLOCAL COMPONENT

A:

9OUCANRUNFROMYOURPAST BUTYOUCANTHIDE"EFORE %*" THEREWASNOCONCEPTOFLOCALINTERFACES3OTHE CLIENTVIEWWASALWAYSCALLED(OMEAND2EMOTE!LTHOUGH EVENTHATWASANINCONSISTENTNAMESCHEME SINCEBOTHTHE HOMEANDTHEBUSINESSMETHODINTERFACEWERE2EMOTEAS INJAVARMI2EMOTE "UTONCELOCALINTERFACESCAMEONTHE SCENE THINGSGOTABITMORECOMPLICATEDh,ETSSEEWECAN NAMETHELOCALHOMEhLOCAL HOMEvANDTHENWELLNAMETHE LOCALREMOTEhLOCAL REMOTEv3EETHEPROBLEM3OWITH%*"  WESTOPPEDCALLINGTHEBUSINESSINTERFACEhTHEREMOTE INTERFACEvANDSTARTEDCALLINGIThTHECOMPONENTINTERFACEv !NDNOWWECALLTHEMhLOCALCOMPONENTINTERFACESvAND hREMOTECOMPONENTINTERFACESv

Q:

5M YOUSTILLDIDNTANSWERMYQUESTION(OWCOME THETAGSTILLSAYShREMOTEvFORTHEREMOTECOMPONENT INTERFACEANDhLOCALvFORTHELOCALCOMPONENTINTERFACE

A:

"ECAUSEOFTHEPAST"ACKWARDCOMPATIBILITYAND ALLTHAT)N%*" THEEJB REFTAGSSAIDHOMEAND REMOTE SOTHEYSTILLDO4HENAMINGSCHEMEISBASICALLY THISh4HECOMPONENTINTERFACEISEITHERLOCALORREMOTE )FTHETAG DOESNTEXPLICITLYSAYhHOMEv THENYOURE TALKINGABOUTTHECOMPONENTINTERFACE4HESEQUIRKYLITTLE INCONSISTENCIESAREJUSTPARTOF%*"SCHARM



FKDSWHU

UHVUHI W\S 127EHD H!PXVW PHVVDJ H GULYHQE HDQ  7KHUHVU HIW\SH!H OHPHQWFD ³6HVVLRQ´ QE RU³(QWLW\´ 7KDW¶VLW+ HHLWKHU DQ\RQHOH RZFRXOG WDORQHDE HDQORRNX VDJHGULYH SDPHV QEHDQ"5 HPHPEHU GULYHQEHD PHVVDJH QVGRQ¶WK  DYHFOLHQWV KDYHKRP 7KH\GRQ HV7KHUH ¶W ¶VQRLQWHUI XSLQ-1' DFH ,6RGRQ¶W EHWULFNHG WRORRN 

H
QNWKDW\RXVKRXOG %XWLVLV62WHPSWLQJWRWKL DQGFRPSRQHQW
DEHDQ¶VHQYLURQPHQW

8VLQJHMEOLQN!ZLWK(-%UHIHUHQFHV )FTHE!PPLICATION!SSEMBLERSEESTHATONEBEANS%*"REFERENCEIT TOANOTHERBEANINTHESAMEAPPLICATION SHESHOULDUSETHEEJB LINKTOLINKTHEEJB REFTOANOTHERBEANSPECIlEDINTHEDEPLOYMENT DESCRIPTOR4HINKOFEJB LINKASAKINDOFhJUMPTOTHISLABELvTHING WHERETHEVALUEOFTHELINKMATCHESTHEVALUEOFANEJB NAME ELEMENTSOMEWHEREELSE 6RPHZKHUHLQWKH'' HQWLW\!  HMEUHI! HMEUHIQDPH!HME$GYLFH*LYHUHMEUHIQDPH! HMEUHIW\SH!6HVVLRQHMEUHIW\SH! KRPH!KHDG¿UVW$GYLFH+RPHKRPH! UHPRWH!KHDG¿UVW$GYLFHUHPRWH! HMEOLQN!$GYLFH(-%HMEOLQN! HMEUHI!  HQWLW\!

The MUST match the value of an for some other bean in this DD (or another DD in the same J2EE app).

6RPHZKHUHHOVH LQWKH''

HMEOLQN!YDOXHV0867 PDWFKWKHYDOXHRIVRPH 27+(5EHDQ·VHMEQDPH! $QGUHPHPEHUHMEQDPH! LVQRWKLQJPRUHWKDQDODEHO LQWKH'',WGRHVQ·WKDYH WRPDWFKWKHFODVVQDPH LQWHUIDFHQDPH-1',QDPH RUDQ\WKLQJHOVH,W·VMXVW WKHODEHOLQWKH''IRUD SDUWLFXODUEHDQ 1RERG\EXW\RXUFRZRUNHUV ZLOOFDUHLI\RXQDPH\RXU EHDQVDIWHUVD\\RXUSHWV

VHVVLRQ! HMEQDPH!$GYLFH(-%HMEQDPH!  VHVVLRQ!

Remember, is just a label in the DD, for 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 DSS (( RWZLWKLQDVLQJOH- DVLQJOHHMEMDU EXWQ H! XVWKDYHXQLTXHHMEQDP LQWKHVDPH-((DSSP DQV EH I DOO KR HDQ HDF QG 7P UD 12 EMD RHV %XWWKLVG LWKRQH''SHUHM DYHPXOWLSOHHMEMDU¿OHVZ OHP URE DS UH¶V WKH (1 W7+ YDOXHV$VLQJOHHDUFDQK KEX HWKHVDPHHMEQDPH!$ KLQJ WKH''¶VLQWKHDSSFDQKDY WKHFXUUHQW''IRUDPDWF XVW RWM SQ DS WLUH HQ WKH LQ RNV QDPH! KOR HME KLF DO !Z QWLF LQN LGH MEO ZLWKH WKHDSSZLWK ,I\RX'2KDYHWZR''¶VLQ QN¶V LVOL HWK KHU DUZ MEM HH RWK HMEQDPH!1RWWRZRUU\ V\QWD[WRDGGWKHSDWKW N! OLQ HME  H MDU QDW '¶V OWHU W' HD UUHQ HQWULHVXVHWK UHODWLYHWRWKHFX KHSDWK IROORZHGE\³´ LV V7 OLYH H! DP MEQ H LQJ 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

LQWKH'HSOR\PHQW'HVFULSWRU HQWLW\!  UHVRXUFHHQYUHI!

YouÕre now tired of he that you need to leave arofing java:comp/env/ part, and f the with the Þrst subcontext begin (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

Bill puts in mostly things that are related to the code in the bean classes %HDQ3URYLGHU

s Annie puts in mostly thing s an be about how two or more her in ot are related to one an etimes the application, and som info she customizes the bean ion. for a particular applicat $SSOLFDWLRQ$VVHPEOHU

ƒ EHDQQDPH

0RGLILFDWLRQVWR%HDQ3URYLGHULQIRUPDWLRQ

ƒ IXOO\TXDOLILHGQDPHRIEHDQFODVVDQG KRPHDQGFRPSRQHQWLQWHUIDFHV

ƒ YDOXHVRIHQYLURQPHQWHQWULHV

ƒ EHDQW\SH VHVVLRQHQWLW\HWF

ƒ UHODWLRQVKLSQDPHPRGLILFDWLRQV

ƒ UHHQWUDQF\ IRUHQWLW\EHDQVRQO\

ƒ PHVVDJHGULYHQEHDQPHVVDJHVHOHFWRU PD\UHVWULFWEXWQRWUHSODFH

ƒ VWDWHPDQDJHPHQWIRUVHVVLRQEHDQV VWDWHOHVVRUVWDWHIXO

ƒ GHVFULSWLRQILHOGV FKDQJHRUFUHDWH

ƒ WUDQVDFWLRQGHPDUFDWLRQW\SH EHDQRU FRQWDLQHU

$SSOLFDWLRQ$VVHPEO\LQIRUPDWLRQ DOO RSWLRQDO 

ƒ HQWLW\EHDQSHUVLVWHQFHPDQDJHPHQW EHDQRUFRQWDLQHU

ƒ ELQGLQJHQWHUSULVHEHDQUHIHUHQFHV LH OLQNLQJRQHEHDQWRDQRWKHULQWKHVDPH HMEMDURU-((DSS

ƒ SULPDU\NH\FODVV ƒ IRU&03DEVWUDFWVFKHPDQDPH&03 ILHOGV&05UHODWLRQVKLSVILQGHUDQGVHOHFW TXHULHV ƒ UHVRXUFHPDQDJHUFRQQHFWLRQIDFWRU\ UHIHUHQFHV ƒ HQYLURQPHQWHQWU\GHFODUDWLRQV ƒ (-%UHIHUHQFHV ORFDODQGUHPRWH ƒ VHFXULW\UROHUHIHUHQFHV ƒ IRUPHVVDJHGULYHQEHDQVGHVWLQDWLRQ PHVVDJHVHOHFWRUDQGDFNQRZOHGJHPHQW PRGH

ƒ VHFXULW\UROHV WKHUHFRPPHQGHGUROHVIRU FOLHQWVRIWKHEHDQV ƒ PHWKRGSHUPLVVLRQVDUHODWLRQVKLS EHWZHHQVHFXULW\UROHVDQGPHWKRGVRIWKH KRPHDQGFRPSRQHQWLQWHUIDFHRIWKHEHDQ ƒ OLQNLQJVHFXULW\UROHUHIHUHQFHVWRVHFXULW\ UROHV ƒ VHFXULW\LGHQWLW\W\SHFDOOHURUUXQDV ƒ WUDQVDFWLRQDWWULEXWHVIRUPHWKRGVRID&07 EHDQ

\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 

7KH'HSOR\HU GRHVWKLQJV XVLQJYHQGRU VSHFLÀFWRROV

DERXW


FKDSWHU

(6285&(0$1$*(5&211(&7,21)$&725,(6 ELQGLQJRIUHVRXUFHPDQDJHUFRQQHFWLRQIDFWRU\UHIHUHQFHVWRDQ DFWXDOUHVRXUFHPDQDJHUFRQQHFWLRQIDFWRU\LQWKHRSHUDWLRQDO HQYLURQPHQW FRQILJXUDWLRQVLJQRQLQIRIRUFRQWDLQHUDXWKRUL]HGUHVRXUFHDFFHVV -%5()(5(1&(6 HQVXUHWKDWDOO(-%UHIHUHQFHVDUHERXQGWRWKHKRPHVRIEHDQV WKDWH[LVWLQWKHRSHUDWLRQDOHQYLURQPHQW HQVXUHWKDWWKHWDUJHWEHDQLVW\SHFRPSDWLEOHZLWKWKHW\SHV GHFODUHGLQWKH(-%UHIHUHQFH (6285&((19,5210(175()(5(1&(6 -06WRSLFRUTXHXH HQVXUHWKDWDOOGHFODUHGUHVRXUFHUHIHUHQFHVDUHERXQGWRREMHFWV WKDWH[LVWLQWKHRSHUDWLRQDOHQYLURQPHQWDQGHQVXUHWKDWWKHWDUJHW REMHFWLVW\SHFRPSDWLEOHZLWKWKHGHFODUHGW\SH

DEHDQ¶VHQYLURQPHQW

:MUMUJMZQVO_PWLWM[_PI\ 7KLQNDERXWLW KRZFDQ,SRVVLEO\NQRZWKH QDPHVRIWKLQJVLQWKHVHUYHUZKHUH WKLVEHDQPLJKWUXQ",ZULWHFRGH ZLWKRXWNQRZLQJZKHUHWKHEHDQVZLOO HQGXS6R,KDYHWRFRGHLQJXHVVHVDERXW VHFXULW\UROHQDPHVRUWKH-1',QDPHRI DQRWKHUEHDQP\EHDQLVXVLQJ

%HDQ3URYLGHU

,·PWKHRQO\RQHZKR UHDOO\NQRZVKRZWKHVHUYHULV FRQÀJXUHGDQGZKDW-1',QDPHV HYHU\WKLQJKDV$QG,·PWKHRQO\RQH ZKRNQRZVDERXWWKHVHFXULW\GRPDLQLQ WKLVFRPSDQ\%XW,GRQ·WNQRZZKDW·VLQWKH FRGHVR,·PFRXQWLQJRQWKH%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
ƒ *XDUDQWHHGVHUYLFHV
ƒ 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
FKDSWHU

DEHDQ¶VHQYLURQPHQW

?PQKP)81[LWM[-2*O]IZIV\MM' 6XSSRUWHG$3,V

ƒ -DYD6WDQGDUG(GLWLRQY -6( ƒ -1',$3, ƒ -7$H[WHQVLRQ WKH8VHU7UDQVDFWLRQ LQWHUIDFHRQO\

ƒ -'%&H[WHQVLRQ ƒ -06H[WHQVLRQ ƒ -DYD0DLOVHQGLQJPDLORQO\ ƒ -$;3


-6(VXS SRUWLV -DYD 127  

-XVWEHFDX VHDQ$3,LV LQWKH -6(VWDQG DUGOLEUDU\I RUYHUVLRQ GRHVQ RWPHDQWK DW$3,LV JXDUDQWHHG IRU(-%7 KH(-% VSHFUHTXLU HV VRLI\R RQO\-6(YHUVLRQ XZULWHDE HDQWKDW UHOLHVRQVR PH \RXUEHDQLV WKLQJLQ-6( QRWJXDUDQ WHHGWR EHSRUWDEOH DFURVVDQ \(-% FRQWDLQHU 7KDWPHDQ VIRUH[DP SOH WKDWWKH-D YD&U\SWRJ UDSK\ ([WHQVLRQ -&( $3,VD UHQRW JXDUDQWHHG WREHVXSS RUWHGE\ (-%H YHQWKRXJK WKH\DUH QRZSDUWR IWKH-6( SODWIRUP DVRIYHUVLR Q

6KDUSHQ \RXU SHQFLO -6( :LWKRXWORRNLQJLWXSZULWH GRZQZKDWHDFKRIWKHVH $3,VGR,I\RXGRQ¶WNQRZ WDNHDJRRGJXHVVEDVHG RQZKDW\RXNQRZDERXW (-%

-1', -7$ -'%& -06

:H¶OOVWDUW\RXRIIE\JLYLQJ -DYD0DLO \RXWKHPRVWGLI¿FXOWRQH

sending mail

-$;3 \RXDUHKHUH



PHPRUL]LQJWKH$3,VLQ(-%

 

THAT APIC TURE OP RS E V LI E D AILONT SENGER -3MES APIECEOF*AVA* E H T B "O  ITH "#CANW BOXUNDERNEATH HASA*$ G IN M A N $) 0  ANDA*. CHOF*AX *AVA TOABUN T I RS GEDBYA NOW E A V LI N A M S I (EDE ELL SO ELIVERY LLGOESW LLY HISD A FU D K N N A A H 4 4! NCH ON!0)* 4RANSAC TI AKEAHOURLU LBURN T O TURESWIL M IC HEGETST P E H T H GTHEEXA STORYWIT ZINGTHIS IERTORECALLDURIN MEMORI S A E MAKEIT ITINAND

7KLVGHOLYHU\PDQDJHGE\ -DYD7UDQVDFWLRQ$3, -7$ 

Bob takes a 1.3 hour lunch (J2SE 1.3) FKDSWHU

%HFDUHIXOR I$3,VWKDW DUHQ¶W JXDUDQWHHG 6RPH$3 ,VOLNH 6HUYOHWVRU -63DUHJX DUDQWHHG E\WKH-( (VSHFEX WQRWE\ WKH(-%VS HFDQGWKH H[DP FDUHVRQO\D ERXWZKDW¶V LQWKH (-%VSHF :KDW¶VQRW SDUWRI(-% " +HUHDUHV RPHRIWKH RQHVWKDW PLJKWWULFN \RX -;7$ -76 -LQL -0; -&$ -63 6HUYOHWV

NOT guaranteed as part of EJB 2.0 !!

,·P-DFN

,·P -DFN

,·P-DFN

JavaMail

Java Messaging Service (JMS)



$3,VWKD WDUH 127LQWK H (-%VSHF

TheyÕre all Jacks (JAXP)

DEHDQ¶VHQYLURQPHQW

6RPHRIWKHNH\JXDUDQWHHG VHUYLFHVDQGEHKDYLRU

ƒ 'LVWULEXWHGWUDQVDFWLRQV ƒ 7KUHDGVDIHW\ ƒ &RQWDLQHUPDQDJHGSHUVLVWHQFHIRUHQWLW\EHDQV ƒ $VHFXULW\GRPDLQDQGRQHSULQFLSDOUHDOP PXOWLSOHUHDOPV LVQRWJXDUDQWHHG

ƒ (QIRUFHFOLHQWDFFHVVVHFXULW\SROLFLHVVSHFLILHGE\WKH GHSOR\PHQWGHVFULSWRUDQGRWKHUGHSOR\PHQWWRROV

ƒ ,PSOHPHQWDWLRQRIWKHMDYDFRPSHQYHQYLURQPHQWQDPLQJ FRQWH[WSURYLGHGWRWKHEHDQ

ƒ *HQHUDWLRQRIFODVVHVWKDWLPSOHPHQWWKHKRPHDQG FRPSRQHQWLQWHUIDFHVDQGVWXEFODVVHVIRUUHPRWHREMHFWV

ƒ ,PSOHPHQWDWLRQRIWKHUHVRXUFHPDQDJHUFRQQHFWLRQ

,XVHGWRWKLQNFOXVWHULQJ IDLORYHUDQGORDGEDODQFLQJZHUH SDUWRIWKHVSHF%XWWKH\DUHQ·W,I ,QHHGWKRVHIHDWXUHV,KDYHWRÀQG DYHQGRUWKDWVXSSRUWVWKHP0DQ\ GREXWGRQ·WEHIRROHGLQWRWKLQNLQJ WKLVLVSDUWRIWKH(-%VSHF

IDFWRU\FODVVHVIRUUHVRXUFHVFRQILJXUHGZLWKWKHVHUYHU

6RPHWKLQJV VRXQGJRRG EXWDUHQ·W JXDUDQWHHG

U (YHU\ERG\WDONVDERXWWKHL OW IDX HG DQF FOXVWHUHGORDGEDO KIDLO ZLW DK \H 2K P VWH WROHUDQWV\ WD GD WLW\ RYHUOD]\ORDGLQJRIHQ QJ FKL FD DWD DQGLQPHPRU\G

,W·VDOZD\VDERXW \RXUQHHGV

UV $OWKRXJKPRVW-((YHQGR RI RUH SURYLGHRQHRUP Q¶W WKHVHFDSDELOLWLHVWKH\DUH JXDUDQWHHGLQWKHVSHF HUHQFH %HVXUH\RXNQRZWKHGLII  HHG DQW EHWZHHQZKDWLVJXDU  WKH NLQ /RR RW DQGZKDWLVQ WOHG VSHFXQGHUWKHVHFWLRQVWL ELOLW\´ QVL VSR UUH ³&RQWDLQHU3URYLGH

\RXDUHKHUH



WKHHMEMDU

?PI\5=;<JMQVIVMRJRIZ' beans -$5 

HMEMDU

'2&7<3( HMEMDU 38%,QF

deployment descriptor

HMEMDU[PO

-$5 

HMEMDU

'2&7<3( HMEMDU 38%,QF

HMEMDU[PO

  

$GYLFHFODVV $GYLFH+RPHFODVV

  

$GYLFH%HDQFODVV

The bean class Þle ome and The beannÕst hinterfaces e compon ion and entity (for sessot message-driven) beans, n 

FKDSWHU

W7KH )LJXUHLWRXW"7KHPDQLIHV DV LUHG HTX RWU LVQ OH PDQLIHVW¿ HLQ WRQ SX $1 X& 
0(7$,1)

FRP

KHDGILUVW

  

DW¶V
867
;\Z]K\]ZMWNIVMRJRIZ

The classes MUST be in a directory structure that matches the package.


r deployment descripto d me MUST be na T ejb-jar.xml and MUS F N -I A ET be in the M directory

7KHQDPLQJ FRQYHQWLRQLV QRWUHTXLUHG

7KHQDPLQJFRQYHQWLR QIRUDEHDQ LVWRSXWWKHFRPSRQHQ WQDPHDV WKHFRPSRQHQWLQWHUIDF HQDPH WKHQDGGµKRPH¶RUµEH DQ¶WRFRPH XSZLWKWKHRWKHUWZRQ DPHV:H VWURQJO\UHFRPPHQGWK DW\RXIRO ORZLWLWPDNHVGHSOR\ PHQWPXFK HDVLHUDQGOHW¶VRWKHUV UHDG\RXU FRGH%XWLW¶VQRWDUHT XLUHPHQW

DEHDQ¶VHQYLURQPHQW

8ZWOZIUUQVOZM[\ZQK\QWV[ :KDWWRDYRLGLQ(-%LI\RXZDQWWRJXDU DQWHH\RXUEHDQFDQEHGHSOR\HGRQ$1< (-%FRPSOLDQWVHUYHU

get security get sec y policyy info inf

ServerSocket erverSocke verSo

Read/Write Read/Writ ead/ staticc ffiel ield load native oad ad a nati library ibra AWT output T for outp p or keyboard input boardd inp in Threads hread

create reate ate or ge gget a class ass loader oade java.io va.io a.io package pac pack

'RQ·WEHI RROHG E\WKLQJVW KD RQO\6((0 W EDG EXWDUHQ·W


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.



-$5 

8VLQJWKHSLHFHVEHORZ DQG21/<WKHSLHFHV EHORZ UHDVVHPEOHWKHPLQWRWKHLUFRUUHFW FRQ¿JXUDWLRQ GUDZLQJOLQHVDVQHHGHG 'UDZ \RXU¿QLVKHGVWUXFWXUHLQWKHVSDFHDWWKHULJKW DQGZULWHWKHFRUUHFWQDPHVRQWKHGLUHFWRULHV DQGQDPHWKH[PO¿OH7KHEHDQLVLQWKH FRPKHDG¿UVWSDFNDJH

HMEMDU '2&7<3( HMEMDU 38%,QF

BBBBBB[PO

     

$GYLFHFODVV   

$GYLFH%HDQFODVV



FKDSWHU

$GYLFH+RPHFODVV

Draw the structure of the JAR Þle here:

DEHDQ¶VHQYLURQPHQW

0RFN([DP 1

7HICH!0)SAREGUARANTEEDTOBESUPPORTEDBY%*"CONTAINERS#HOOSE ALLTHATAPPLY

R! *!80 R" *.$) R# *84! R$ *$"# R% *-3

2

7HATSTRUEABOUTANENTERPRISEBEANSENVIRONMENT#HOOSEALLTHATAPPLY

R! %NVIRONMENTENTRIESCANBEUNIQUEFORINSTANCESOFTHESAME ENTERPRISEBEANTYPE

R" 7ITHINASINGLE%*"CONTAINER AN%*"CANHAVEMULTIPLESETSOF ENVIRONMENTENTRIES

R# !N%*"SENVIRONMENTENTRYSVALUESCANBEMODIlEDBYTHE%*"AT RUNTIME

R$ %NVIRONMENTENTRYVALUESMAYBEPRIMITIVESORWRAPPERTYPES

3

7HICH!0)SAREGUARANTEEDTOBESUPPORTEDBY%*"CONTAINERS#HOOSE ALLTHATAPPLY

R! *3% R" *!8" R# *!82 R$ *!80

\RXDUHKHUH



FRIIHHFUDPPRFNH[DP

4

'IVENABEANNAMED@#USTOMER ANDANENVIRONMENTENTRYNAMED@LAST.AME 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 

5



 &RQWH[WH  &RQWH[W FORRNXS ³MDYDFRPSHQY´ 



 6WULQJQDPH  6WULQJ HORRNXS ³ODVW1DPH´ 

7HENPROGRAMMINGASESSIONBEANCLASSWHICHTECHNIQUES SHOULDALWAYSBE AVOIDEDTOENSUREBEANPORTABILITYACROSSALL%*"CONTAINERS#HOOSEALL THATAPPLY

R! 5SINGTHEMDYDQHW6RFNHWCLASS R" 5SINGINNERCLASSES R# 5SINGTHE@lNALMODIlERFORlELDS R$ 0ASSING@THISASANARGUMENT



FKDSWHU

DEHDQ¶VHQYLURQPHQW

6

7HICHOFTHEFOLLOWINGAREVALIDDATATYPESINAHQYHQWU\W\SH!ELEMENT INABEANSDEPLOYMENTDESCRIPTOR#HOOSEALLTHATAPPLY

R! E\WH R" VKRUW R# $UUD\/LVW R$ MDYDODQJ%RROHDQ R% MDYDODQJ&KDUDFWHU

7

7HENPROGRAMMING%*"SWHICHDECLARATIONS SHOULDBEAVOIDEDTOENSURE BEANPORTABILITYACROSSALL%*"CONTAINERS#HOOSEALLTHATAPPLY

R! ¿QDOLQW[ R" VWDWLFLQW[ R# ¿QDOVWDWLFLQW[ R$ ¿QDOWUDQVLHQWLQW[

8

7HOISTYPICALLYRESPONSIBLEFORSPECIFYINGlNDERANDSELECTQUERIESINTHE BEANSDEPLOYMENTDESCRIPTOR

R! 4HEBEANPROVIDER R" 4HEAPPLICATIONASSEMBLER R# 4HEDEPLOYER R$ 4HESYSTEMADMINISTRATOR R% 4HESERVERPROVIDER

9

7HICHDEPLOYMENTDESCRIPTORELEMENTS WOULDBEUSEDWHENOBTAININGA *$"#CONNECTION#HOOSEALLTHATAPPLY

R! HMEUHI! R" HMEOLQN! R# UROHQDPH! R$ HQYHQWU\! R% UHVRXUFHUHI!

\RXDUHKHUH



FRIIHHFUDPPRFNH[DP

10

11

7HOWILLTYPICALLYMERGEMULTIPLEEJB JARlLESINTOASINGLEEJB JARlLE

R! 4HEBEANPROVIDER R" 4HEAPPLICATIONASSEMBLER R# 4HEDEPLOYER R$ 4HESYSTEMADMINISTRATOR R% 4HESERVERPROVIDER 7HICHDEPLOYMENTDESCRIPTORELEMENTS WOULDBEUSEDBYABEANPROVIDERTO LOCATETHEHOMEINTERFACESOFOTHER%*"S#HOOSEALLTHATAPPLY

R! HMEUHI! R" UHVW\SH! R# HQYHQWU\! R$ UROHQDPH! R% UHVRXUFHUHI!

12

7HICHAREBEANPROVIDERRESPONSIBILITIESCONCERNINGRESOURCEMANAGER CONNECTIONFACTORYREFERENCES#HOOSEALLTHATAPPLY

R! #ONlGURERESOURCEMANAGERSINTHE%*"SERVER R" #ONlGURESIGN ONINFORMATIONFORTHERESOURCEMANAGER R# !SSIGNSUCHAREFERENCETOTHEDEPLOYMENTDESCRIPTOR R$ #REATINGASYMBOLICLINKTO*.$)

13

4HEEJB JARlLEISCONSIDEREDTOBEPARTOFTHECONTRACTBETWEENWHICHPAIRS #HOOSEALLTHATAPPLY

R! BEANPROVIDERANDSYSTEMADMINISTRATOR R" BEANPROVIDERANDAPPLICATIONASSEMBLER R# APPLICATIONASSEMBLERANDDEPLOYER R$ APPLICATIONASSEMBLERANDSYSTEMADMINISTRATOR R% DEPLOYERANDSYSTEMADMINISTRATOR



FKDSWHU

DEHDQ¶VHQYLURQPHQW

14

7HICHCLASSlLESMUSTBEINCLUDED EITHERDIRECTLYORBYREFERENCE INEVERYEJB JARlLE#HOOSEALLTHATAPPLY

R! 4HEENTERPRISEBEANCLASS R" 4HESTUBCLASSFORTHE%*"/BJECTINTERFACE R# 4HEENTERPRISEBEANSSUPERCLASSES R$ !NY*3%CLASSESUSEDASARGUMENTSORRETURNTYPES

15

7HICHROLEISTYPICALLYRESPONSIBLEFORDECLARINGTHERESOURCECONNECTION FACTORYREFERENCESINTHEDEPLOYMENTDESCRIPTOR

R! BEANPROVIDER R" APPLICATIONASSEMBLER R# DEPLOYER R$ CONTAINERPROVIDER R% SYSTEMADMINISTRATOR

16

7HATSTRUEABOUTALEGALEJB JARlLE#HOOSEALLTHATAPPLY

17

7HICHROLEWOULDTYPICALLYSETUPRESOURCEMANAGERSIGN ONINFORMATION

R! )TMUSTCONTAINBOTHAHOMEINTERFACEANDACOMPONENTINTERFACE R" 4HEDEPLOYMENTDESCRIPTORISOPTIONAL R# )TMUSTCONTAINANY*%%CLASSESUSEDBYTHEBEAN R$ 4HEENTERPRISEBEANCLASSISOPTIONAL

R! BEANPROVIDER R" APPLICATIONASSEMBLER R# DEPLOYER R$ CONTAINERPROVIDER R% SYSTEMADMINISTRATOR

\RXDUHKHUH



PRFNH[DPDQVZHUV

0RFN([DP$QVZHUV 1

7HICH!0)SAREGUARANTEEDTOBESUPPORTEDBY%*"CONTAINERS#HOOSE ALLTHATAPPLY

(spec: 493)

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 ALLTHATAPPLY

R! *3% R" *!8" R# *!82 R$ *!80



FKDSWHU

)

(spec: 496-497

DEHDQ¶VHQYLURQPHQW

4

'IVENABEANNAMED@#USTOMER ANDANENVIRONMENTENTRYNAMED@LAST.AME WHICHCODEFRAGMENTS INSIDEOFTHEBEANCLASSWOULDRETURNTHEVALUEOFTHE ENVIRONMENTENTRY#HOOSEALLTHATAPPLY

R! &RQWH[WF QHZ6HVVLRQ&RQWH[W 

(spec: 411-412)

- SessionContext is not the sam



 &RQWH[WH  &RQWH[W FORRNXS ³MDYDFRPSHQY´ 



 6WULQJQDPH  6WULQJ HORRNXS ³ODVW1DPH´ 

e as JNDI Context

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 

5



 &RQWH[WH  &RQWH[W FORRNXS ³MDYDFRPSHQY´ 



 6WULQJQDPH  6WULQJ HORRNXS ³ODVW1DPH´ 

7HENPROGRAMMINGASESSIONBEANCLASSWHICHTECHNIQUES SHOULDALWAYSBE AVOIDEDTOENSUREBEANPORTABILITYACROSSALL%*"CONTAINERS#HOOSEALL THATAPPLY

)

(spec: 494-495

R! 5SINGTHEMDYDQHW6RFNHWCLASS - client Sockets are , just not a ServerSocOK ket R" 5SINGINNERCLASSES R# 5SINGTHE@lNALMODIlERFORlELDS R$ 0ASSING@THISASANARGUMENT

\RXDUHKHUH



PRFNH[DPDQVZHUV

6

7HICHOFTHEFOLLOWINGAREVALIDDATATYPESINAHQYHQWU\W\SH!ELEMENT INABEANSDEPLOYMENTDESCRIPTOR#HOOSEALLTHATAPPLY

(spec: 413)

R! E\WH R" VKRUW R# $UUD\/LVW R$ MDYDODQJ%RROHDQ - only Wrappers and Strings are supported R% MDYDODQJ&KDUDFWHU

7

7HENPROGRAMMING%*"SWHICHDECLARATIONS SHOULDBEAVOIDEDTOENSURE BEANPORTABILITYACROSSALL%*"CONTAINERS#HOOSEALLTHATAPPLY

(spec: 494)

R! ¿QDOLQW[ R" VWDWLFLQW[ - statics should also be Þnal R# ¿QDOVWDWLFLQW[ R$ ¿QDOWUDQVLHQWLQW[

8

7HOISTYPICALLYRESPONSIBLEFORSPECIFYINGlNDERANDSELECTQUERIESINTHE BEANSDEPLOYMENTDESCRIPTOR

)

(spec: 456-457

R! 4HEBEANPROVIDER R" 4HEAPPLICATIONASSEMBLER R# 4HEDEPLOYER R$ 4HESYSTEMADMINISTRATOR R% 4HESERVERPROVIDER

9

7HICHDEPLOYMENTDESCRIPTORELEMENTS WOULDBEUSEDWHENOBTAININGA *$"#CONNECTION#HOOSEALLTHATAPPLY

R! HMEUHI! R" HMEOLQN! R# UROHQDPH! R$ HQYHQWU\! R% UHVRXUFHUHI!



FKDSWHU

(spec: 424)

DEHDQ¶VHQYLURQPHQW

10

11

7HOWILLTYPICALLYMERGEMULTIPLEEJB JARlLESINTOASINGLEEJB JARlLE

(spec: 458)

R! 4HEBEANPROVIDER R" 4HEAPPLICATIONASSEMBLER R# 4HEDEPLOYER R$ 4HESYSTEMADMINISTRATOR R% 4HESERVERPROVIDER 7HICHDEPLOYMENTDESCRIPTORELEMENTS WOULDBEUSEDBYABEANPROVIDERTO LOCATETHEHOMEINTERFACESOFOTHER%*"S#HOOSEALLTHATAPPLY

(spec: 416)

R! HMEUHI! R" UHVW\SH! R# HQYHQWU\! R$ UROHQDPH! R% UHVRXUFHUHI!

12

7HICHAREBEANPROVIDERRESPONSIBILITIESCONCERNINGRESOURCEMANAGER CONNECTIONFACTORYREFERENCES#HOOSEALLTHATAPPLY

(spec: 421)

R! #ONlGURERESOURCEMANAGERSINTHE%*"SERVER R" #ONlGURESIGN ONINFORMATIONFORTHERESOURCEMANAGER R# !SSIGNSUCHAREFERENCETOTHEDEPLOYMENTDESCRIPTOR R$ #REATINGASYMBOLICLINKTO*.$)

13

4HEEJB JARlLEISCONSIDEREDTOBEPARTOFTHECONTRACTBETWEENWHICHPAIRS #HOOSEALLTHATAPPLY

(spec: 487)

R! BEANPROVIDERANDSYSTEMADMINISTRATOR R" BEANPROVIDERANDAPPLICATIONASSEMBLER R# APPLICATIONASSEMBLERANDDEPLOYER R$ APPLICATIONASSEMBLERANDSYSTEMADMINISTRATOR R% DEPLOYERANDSYSTEMADMINISTRATOR

\RXDUHKHUH



PRFNH[DPDQVZHUV

14

7HICHCLASSlLESMUSTBEINCLUDED EITHERDIRECTLYORBYREFERENCE INEVERYEJB JARlLE#HOOSEALLTHATAPPLY

(spec: 488)

R! 4HEENTERPRISEBEANCLASS R" 4HESTUBCLASSFORTHE%*"/BJECTINTERFACE R# 4HEENTERPRISEBEANSSUPERCLASSES R$ !NY*3%CLASSESUSEDASARGUMENTSORRETURNTYPES - ItÕll already be there, baby!

15

7HICHROLEISTYPICALLYRESPONSIBLEFORDECLARINGTHERESOURCECONNECTION FACTORYREFERENCESINTHEDEPLOYMENTDESCRIPTOR

(spec: 423)

R! BEANPROVIDER R" APPLICATIONASSEMBLER R# DEPLOYER R$ CONTAINERPROVIDER R% SYSTEMADMINISTRATOR

16

7HATSTRUEABOUTALEGALEJB JARlLE#HOOSEALLTHATAPPLY

17

7HICHROLEWOULDTYPICALLYSETUPRESOURCEMANAGERSIGN ONINFORMATION



(spec: 488)

R! )TMUSTCONTAINBOTHAHOMEINTERFACEANDACOMPONENTINTERFACE R" 4HEDEPLOYMENTDESCRIPTORISOPTIONAL R# )TMUSTCONTAINANY*%%CLASSESUSEDBYTHEBEAN R$ 4HEENTERPRISEBEANCLASSISOPTIONAL

R! BEANPROVIDER R" APPLICATIONASSEMBLER R# DEPLOYER R$ CONTAINERPROVIDER R% SYSTEMADMINISTRATOR

FKDSWHU

(spec: 422)

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 1

7HICHAREBENElTSOF%*"#HOOSEALLTHATAPPLY

R! -$"SSURVIVESERVERCRASHES R" 2EPRESENTATIONSOFASINGLEENTITYCANBESHAREDAMONGMULTIPLECLI ENTS

R# 3UPPORTFORNESTEDTRANSACTIONS R$ $YNAMICSERVICEDISCOVERY R% $ECLARATIVEISOLATIONLEVELSETTINGS

2

7HICHMETHODSAREDIRECTLYINVOKEDBYTHECLIENT#HOOSEALLTHATAPPLY

3

7HICHMETHODS CANBEFOUNDINTHE%*"(OMEINTERFACE#HOOSEALLTHAT APPLY

R! HME3DVVLYDWH R" BUSINESSMETHODS R# VHW6HVVLRQ&RQWH[W R$ QHZ,QVWDQFH R% FUHDWH

R! REMOVE(ANDLEHANDLE R" REMOVE/BJECTPRIMARY+EY R# GET(ANDLE R$ NONEOFTHEABOVE

 DSSHQGL[$

DSSHQGL[$ILQDOPRFNH[DP

4

7HICHMETHODS CANBERUNBYA#-0BEANINTHEPOOLEDSTATE#HOOSEALL THATAPPLY

R! HME/RDG R" HME)LQG R# HME6WRUH R$ HME&UHDWH R% "USINESSMETHOD R&HME+RPH

5

7HATSTRUEABOUTMESSAGE DRIVENBEANS#HOOSEALLTHATAPPLY

R! !LLCALLSTOAMESSAGE DRIVENBEANINSTANCEMUSTBESERIALIZED R" 4HECONTAINERGUARANTEESTHATMESSAGESWILLBEPROCESSEDINTHEORDER INWHICHTHEYARERECEIVED

R# 4HEBEANSHME&UHDWH METHODMUSTTAKEASINGLEARGUMENTOFTYPE MDYD[MPV0HVVDJH

R$ 4HEBEANPROVIDERUSESTHEDEPLOYMENTDESCRIPTORTOINDICATEWHETHER INSTANCESOFTHEBEANCLASSAREINTENDEDFORTOPICSORQUEUES

6

7HATSTRUEABOUTANENTERPRISEBEANSENVIRONMENT#HOOSEALLTHATAPPLY

R! "EFOREABEANCANACCESSITSENVIRONMENTENTRIES THEBEANMUSTlRST OBTAINTHENAMINGCONTEXTUSINGA6HVVLRQ&RQWH[WOBJECT

R" /NLYTHEBEANPROVIDERCANSETANENVIRONMENTENTRYVALUE R# !BEANSENVIRONMENTENTRIESCANBESTOREDONLYIN µMDYDFRPSHQY¶ORONEOFITSSUBCONTEXTS

R$ %VERYENVIRONMENTENTRYLOOKUPINABEANSCODEMUSTHAVEAMATCHING HQYHQWU\!ELEMENTINTHEBEANSDEPLOYMENTDESCRIPTOR

7

7HATSTRUEABOUTSECURITYROLESIN%*"S#HOOSEALLTHATAPPLY

R! 3ECURITYROLESAREDElNEDINTHEDEPLOYMENTDESCRIPTORUSINGSECURITY ROLEELEMENTS

R" 3ECURITYROLESARESCOPEDTOTHEINSTANCELEVEL R# -ANYMETHODSCANBEMAPPEDTOASINGLESECURITYROLE R$ !METHODCANAPPEARINONLYONESECURITYROLE

\RXDUHKHUH



FRIIHHFUDPPRFNH[DP

8

!N%*"CONTAINERMUSTSUPPORTATLEASTASUBSETOFWHICH!0)S#HOOSEALL THATAPPLY

R! *4! R" *$"# R# *-3 R$ *!8 2#0

9

7HICHSTATEMENTSCONCERNINGSTATELESSSESSIONBEANSARETRUE#HOOSEALLTHAT APPLY

R! 4HEYCANUSEBEAN MANAGEDTRANSACTIONDEMARCATION R" 4HEYMUSTHAVEONENO ARGUMENTCREATEMETHOD R# !SINGLEINSTANCECANSUPPORTCONCURRENTCALLS R$ 4HEYMUSTEXTENDJAVAXEJB3ESSION"EAN

10

7HATCAPABILITYEXISTSIN/.,9/.%OFTHETWOBUTNOTBOTH  ANENTITYOBJECTSREMOTECOMPONENTINTERFACE ANENTITYOBJECTSLOCALCOMPONENTINTERFACE #HOOSEALLTHATAPPLY

R! 2EMOVINGTHEOBJECT R" /BTAININGTHEOBJECTSHANDLE R# )NVOKINGBUSINESSMETHODS R$ /BTAININGTHEOBJECTSPRIMARYKEY

11

7HENCREATINGA#-0ENTITYBEAN WHICHMETHODS AREOPTIONAL#HOOSEALL THATAPPLY

R! HME/RDG R" HME&UHDWH R# HME5HPRYH R$ HME6HOHFW R% HME3DVVLYDWH R&VHW(QWLW\&RQWH[W

 DSSHQGL[$

DSSHQGL[$ILQDOPRFNH[DP

12

7HICHMETHODS CANBECALLEDONABEANINTHEPOOLEDSTATE#HOOSEALL THATAPPLY

R! HME)LQG R" HME/RDG R# HME6WRUH R$ HME6HOHFW R% HME3DVVLYDWH

13

7HATSTRUEABOUTTHELIFECYCLEOFAMESSAGE DRIVENBEAN#HOOSEALLTHATAP PLY

R! 7HENTHETHEOQ0HVVDJHMETHODCOMPLETES THECONTAINERWILLTYPI CALLYCALLEJB2EMOVE

R" 4HEON0HVVDJH METHODCANTHROWAPPLICATIONEXCEPTIONS R# -ESSAGE DRIVENBEANSCANRUNONLYWITH#-4DEMARCATION R$ 4HEJHW5ROOEDFN2QO\ METHODCANBECALLEDONLYFROMTHE ON-ESSAGEMETHOD

14

7HICHSTATEMENTS CONCERNINGMESSAGE DRIVENBEANCLASSESARETRUE #HOOSEALLTHATAPPLY

R! 4HEYMUSTIMPLEMENT DIRECTLYORINDIRECTLY MDYD[MPV0HVVDJH R" 4HEYMUSTHAVEAPUBLICCONSTRUCTORTHATTAKESASINGLEARGUMENTOF TYPEMDYD[MPV0HVVDJH

R# )MPLEMENTINGTHE¿QDOL]H METHODISALLOWED R$ )MPLEMENTINGTHEHME&UHDWH METHODISOPTIONAL R% 4HECLASSMUSTNOTBEDECLARED@lNAL

15

7ITHINTHEDEPLOYMENTDESCRIPTORSHMEORFDOUHI!ELEMENT WHICHELE MENTSAREOPTIONAL#HOOSEALLTHATAPPLY

R! ORFDO! R" HMEOLQN! R# ORFDOKRPH! R$ GHVFULSWLRQ! R% HMEUHIQDPH! R&HMEUHIW\SH! \RXDUHKHUH



FRIIHHFUDPPRFNH[DP

16

7HATSTRUEABOUTRESOURCEMANAGERCONNECTIONFACTORIES#HOOSEALLTHAT APPLY

R4HEUHVVKDULQJVFRSH!DEPLOYMENTDESCRIPTORELEMENTISUSEDTO INDICATEWHETHERCONNECTIONSTOARESOURCEMANAGERARESHAREABLE ACROSSMULTIPLE%*"SINANAPPLICATION

R" 4HEUHVVKDULQJVFRSH!DEPLOYMENTDESCRIPTORELEMENTCONTAINS THEUHVRXUFHUHI!ELEMENT

R# !LLOFABEANSRESOURCEMANAGERCONNECTIONFACTORYREFERENCESARE DECLAREDINASINGLEUHVRXUFHUHI!ELEMENT USING UHVUHIQDPH!ELEMENTSTODISTINGUISHTHEM

R$ "YDEFAULT CONNECTIONSTOAGIVENRESOURCEMANAGERARESHAREABLE ACROSSMULTIPLEBEANSINANAPPLICATION

17

7HATSTRUEABOUTSECURITYROLESREFERENCEDFROMAN%*"SCODE#HOOSEALL 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

18

7HATSTRUEABOUTTHECLIENTSVIEWOFSECURITY#HOOSEALLTHATAPPLY

R! !TRANSACTIONALCLIENTCANNOTCHANGEITSPRINCIPALASSOCIATIONWITHINA TRANSACTION

R" !SESSIONBEANSCLIENTCANNOTCHANGEITSPRINCIPALASSOCIATIONFORTHE DURATIONOFTHECOMMUNICATIONWITHTHESESSIONOBJECT

R# 4RANSACTIONALREQUESTSWITHINASINGLETRANSACTIONCANNOTARRIVEFROM MULTIPLECLIENTS

R$ .ONEOFTHEABOVE

 DSSHQGL[$

DSSHQGL[$ILQDOPRFNH[DP

19

7HENPROGRAMMINGANENTITYBEANCLASSWHICHTECHNIQUES SHOULDBE !6/)$%$TOENSUREBEANPORTABILITYACROSSALL%*"CONTAINERS#HOOSEALL THATAPPLY

R! #HANGINGATHREADSPRIORITY R" 5SINGTHEREmECTION!0) R# 5SINGWRAPPERCLASSES R$ 5SINGSTATICNESTEDCLASSES

20

7HENPROGRAMMINGAMESSAGE DRIVENBEANCLASSWHICHTECHNIQUES SHOULD BEAVOIDEDTOENSUREBEANPORTABILITYACROSSALL%*"CONTAINERS#HOOSE ALLTHATAPPLY

R! 5SING3WING!0)SFORA'5) R" 5SINGTHE@TRANSIENTMODIlER R# 5SINGNATIVELIBRARIES R$ 2EADINGlLEDESCRIPTORS

21

7HATISREQUIREDOFTHECONTAINERWHENITPASSIVATESASTATEFULSESSIONBEAN

R! 4HEBEANSINSTANCESTATEWILLALWAYSUNDERGO*AVAPROGRAMMINGLAN GUAGE3ERIALIZATION

R" )TMUSTSAVEALLOFTHEBEANSINSTANCElELDSTATEREGARDLESSOFTHElELDS MODIlERS

R# )TMUSTSAVEANYREFERENCESTOTHEBEANS3ESSION#ONTEXTOBJECT R$ )TMUSTSAVEALLNON NULLTRANSIENTVARIABLES

22

7HICHCAPABILITIESAREDElNEDINTHEMDYD[HME(-%/RFDO2EMHFWINTER FACE#HOOSEALLTHATAPPLY 

R! 2EMOVEANENTITYOBJECT R" /BTAINANENTITYOBJECTSPRIMARYKEY R# /BTAINALOCALHOMEINTERFACEFORTHEENTITYOBJECT R$ /BTAINAREMOTECOMPONENTINTERFACEFORTHEENTITYOBJECT R%%XPOSETHEMETHODSOFTHEMDYD[HME(QWLW\%HDQINTERFACETOTHE CLIENT

\RXDUHKHUH



FRIIHHFUDPPRFNH[DP

23

7HATSTRUEABOUTEJB3ELECTMETHODS#HOOSEALLTHATAPPLY

R! 4HEYCANBEEXPOSEDTOTHECLIENT R" 4HEYCANRETURNONLY%*"/BJECTSOR%*",OCAL/BJECTS R# 4HEYCANBEINVOKEDONLYBYABEANINTHEREADYSTATE R$ 4HEYMUSTBEASSOCIATEDWITHAQUERYELEMENTINTHEDEPLOYMENTDE SCRIPTOR

24

7HICHMETHODSCAN.%6%2BESUCCESSFULLYINVOKEDFROMAMESSAGE DRIVEN BEAN#HOOSEALLTHATAPPLY

R! LV&DOOHU,Q5ROH R" JHW(-%+RPH R# JHW5ROOEDFN2QO\ R$ VHW5ROOEDFN2QO\ R%JHW&DOOHU3ULQFLSDO

25

7HICHROLEISTYPICALLYRESPONSIBLEFORADDINGEJB LINKELEMENTSTOAN%*"S DEPLOYMENTDESCRIPTOR

R! BEANPROVIDER R" APPLICATIONASSEMBLER R# DEPLOYER R$ CONTAINERPROVIDER R%SYSTEMADMINISTRATOR

26

)NWHICHOFTHEFOLLOWINGMETHODSCANASTATELESSSESSIONBEANINVOKETHE LV&DOOHU,Q5ROH METHODINORDERTOPERFORMASECURITYCHECK#HOOSE ALLTHATAPPLY

R! HME&UHDWH R" HME5HPRYH R# VHW6HVVLRQ&RQWH[W R$ .ONEOFTHEABOVE

 DSSHQGL[$

DSSHQGL[$ILQDOPRFNH[DP

27

7HICHTWOARETYPICALLYRESPONSIBLEFORCREATINGEJB JARlLES#HOOSETWO

28

7HICHOFTHEFOLLOWINGSTATELESSSESSIONBEANCONTAINERCALLBACKMETHODS TAKESANARGUMENT#HOOSEALLTHATAPPLY

R! 4HEBEANPROVIDER R" 4HEAPPLICATIONASSEMBLER R# 4HEDEPLOYER R$ 4HESYSTEMADMINISTRATOR

R! HME5HPRYH R" HME&UHDWH R# HME&UHDWH R$ HME3DVVLYDWH R%VHW6HVVLRQ&RQWH[W

29

7HICHOFTHESECANNEVERBECALLEDONA3ESSION#ONTEXTINTERFACE#HOOSEALL THATAPPLY

R! JHW(-%+RPH R" JHW(-%2EMHFW R# JHW(-%7UDQVDFWLRQ R$ LV&DOOHU,Q5ROH R%JHW8VHU7UDQVDFWLRQ

30

7HATSTRUEABOUTANENTITYBEANSREMOTECOMPONENTINTERFACE#HOOSEALL THATAPPLY

R! )FACLIENTATTEMPTSTOINVOKEAMETHODONANENTITYTHATDOESNOTEXIST A MDYDUPL1R6XFK5HPRWH2EMHFW([FHSWLRQWILLBETHROWN

R" )TMUSTEXTENDMDYD[HME(-%+RPH R# )TSMETHODSMUSTDECLAREMDYDUPL5HPRWH([FHSWLRQ R$ )TDElNESAUHPRYH +DQGOHKDQGOH METHOD

\RXDUHKHUH



FRIIHHFUDPPRFNH[DP

31

7HICHARETRUEABOUTlNDERMETHODSINANENTITYBEANSLOCALHOMEINTERFACE #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

32

7HICHARETRUEFORAMESSAGE DRIVENBEAN#HOOSEALLTHATAPPLY

R! 4HE$EPLOYERUSESTHEDEPLOYMENTDESCRIPTORTODETERMINEWHETHERABEAN ISINTENDEDFORA1UEUEORA4OPIC

R" 4HECLASSMUSTBEDECLAREDlNAL R# 4HECLASSMUSTDElNEONEHME5HPRYH METHOD R$ 4HECLASSCANHAVEOVERLOADEDHME&UHDWH METHODS R%4HECLASSMUSTDElNEANO ARGUMENTON-ESSAGEMETHOD

33

'IVENTHEFOLLOWINGSUBSETOFADEPLOYMENTDESCRIPTOR 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

34

7HICHAREVALIDLOCALHOMEINTERFACESFORASTATEFULSESSIONBEAN#HOOSEALL 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 `

35

7HICHMETHODSCANBECALLEDBYABEANPROVIDER#HOOSEALLTHATAPPLY

R! UHPRYH R" HME&UHDWH R# DIWHU%HJLQ R$ JHW&DOOHU3ULQFLSDO R%HME3DVVLYDWH

\RXDUHKHUH



FRIIHHFUDPPRFNH[DP

36

7HOWILLTYPICALLYSPECIFYWHETHERABEANISRE ENTRANTINTHEBEANSDEPLOY MENTDESCRIPTOR

R! 4HEBEANPROVIDER R" 4HEAPPLICATIONASSEMBLER R# 4HEDEPLOYER R$ 4HESYSTEMADMINISTRATOR

37

7HICHSTATEMENTSABOUTSTATEFULANDSTATELESSSESSIONBEANSARETRUE #HOOSEALLTHATAPPLY

R! /NLYSTATEFULSESSIONBEANSSUPPORTTRANSACTIONS R" /NLYSTATEFULSESSIONBEANSCANBEPASSIVATED R# /NLYSTATEFULSESSIONBEANSHAVEAµVHW6HVVLRQ&RQWH[W¶METHOD R$ "OTHSTATEFULANDSTATELESSSESSIONBEANSCANSUPPORTOVERLOADED µHME&UHDWH¶METHODS

R%"OTHSTATEFULANDSTATELESSSESSIONBEANSCANIMPLEMENTTHE MDYD[HME6HVVLRQ6\QFKURQL]DWLRQINTERFACE

R&"OTHSTATEFULANDSTATELESSSESSIONBEANSCANHAVEINSTANCEVARIABLESTATE

38

7HICHMUSTBEINCLUDEDINEVERYEJB JARlLE#HOOSEALLTHATAPPLY

39

7HICHMETHODS AREDECLAREDINTHEJAVAXEJB%*"(OMEINTERFACE#HOOSE ALLTHATAPPLY

R! 4HESTUBFORTHE%*"(OMEINTERFACE EITHERDIRECTLYORBYREFERENCE R" 4HE*!2-ANIFESTlLE R# !DEPLOYMENTDESCRIPTOR R$ 4HE*.$)CONTEXT R%4HE%*"SHOMEINTERFACE EITHERDIRECTLYORBYREFERENCE

R! FUHDWH R" ORRNXS R# JHW+DQGOH R$ JHW+RPH+DQGOH R%VHW6HVVLRQ&RQWH[W

 DSSHQGL[$

DSSHQGL[$ILQDOPRFNH[DP

40

(OWMANYJAVAXEJB%*",OCAL(OMEINTERFACEMETHODSCANBECALLEDWITHOUT ANEXCEPTION FROMASESSIONBEANCLIENT

R!  R"  R#  R$  R%

41

7HICHOFTHEFOLLOWING IFCALLED ALWAYSHAVETHESAMETRANSACTIONCONTEXTASA SESSIONBEANSBUSINESSMETHODS#HOOSEALLTHATAPPLY

R! CONSTRUCTOR R" VHW6HVVLRQ&RQWH[W R# DIWHU%HJLQ R$ DIWHU&RPSOHWLRQ R%EHIRUH&RPSOHWLRQ

42

'IVENASTATEFULSESSIONBEANWITHCONTAINER MANAGEDTRANSACTIONDEMARCATION FROMWHICHMETHODSCANYOUACCESSANOTHERBEAN#HOOSEALLTHATAPPLY

R! VHW6HVVLRQ&RQWH[W R" HME&UHDWH R# DIWHU%HJLQ R$ EHIRUH&RPSOHWLRQ R%DIWHU&RPSOHWLRQ

43

7HICHDEPLOYMENTDESCRIPTORELEMENTS CANOPTIONALLYSPECIFYCASCADE DELETE FUNCTIONALITY#HOOSEALLTHATAPPLY

R! HMEUHODWLRQ! R" DEVWUDFWVFKHPDQDPH! R# HMEUHODWLRQVKLSUROH! R$ UHODWLRQVKLSUROHVRXUFH!

\RXDUHKHUH



FRIIHHFUDPPRFNH[DP

44

7HATSTRUEABOUTCASCADE DELETE#HOOSEALLTHATAPPLY

R! )TISDECLAREDINTHEHME5HPRYH METHOD R" 7HENACASCADE DELETEENABLEDBEANISDELETED ITCAUSESALLOFTHE BEANSWITHRELATIONSHIPSTOITTOBEAUTOMATICALLYDELETEDTOO

R# )TCANBESPECIlEDFORONE TO ONE ONE TO MANY ORMANY TO MANYRELA TIONSHIPS

R$ !CASCADE DELETEENABLEDBEANISAUTOMATICALLYREMOVEDWHENANY hMULTIPLICITYOFONEvBEANWITHWHICHITISRELATEDISREMOVED

45

7HICHMETHODS FROMTHE%NTITY#ONTEXTINTERFACECANBEINVOKED REGARDLESS OFTRANSACTIONCONTEXT#HOOSEALLTHATAPPLY

R! JHW(-%+RPH R" JHW(-%2EMHFW R# VHW5ROOEDFN2QO\ R$ JHW5ROOEDFN2QO\

46

7HATSTRUEABOUTANENTITYBEANSPRIMARYKEY#HOOSEALLTHATAPPLY

R! 0RIMARYKEYlELDSMUSTBECMP lELDS R" 3ETTERMETHODSFORlELDSASSOCIATEDWITHAPRIMARYKEYMUSTNOTBE EXPOSEDTHROUGHACLIENTVIEW

R# )FTWOENTITYOBJECTSHAVETHESAMEHOMEANDTHESAMEPRIMARYKEY THEYARECONSIDEREDIDENTICAL

R$ 4HEJHW3ULPDU\.H\ METHODCANBEINVOKEDONREFERENCESTOONLY REMOTEHOMEINTERFACES NOTLOCALHOMEINTERFACES

47

7HICHINTERFACES AREUSEDBYTHEBEANPROVIDERTOPERFORM"-4DEMARCA TION#HOOSEALLTHATAPPLY

R! MDYD[WUDQVDFWLRQ7UDQVDFWLRQ R" MDYD[WUDQVDFWLRQ8VHU7UDQVDFWLRQ R# MDYD[WUDQVDFWLRQ6\QFKURQL]DWLRQ R$MDYD[WUDQVDFWLRQ7UDQVDFWLRQ0DQDJHU

 DSSHQGL[$

DSSHQGL[$ILQDOPRFNH[DP

48

7HICHOFTHEFOLLOWINGARELEGAL%*"1,QUERIES#HOOSEALLTHATAPPLY

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

49



&2/-#USTOMERC

7HICHARETRUEABOUTTRANSACTIONSIN%*"#HOOSEALLTHATAPPLY

R! /NLYONEDATABASECANBEUPDATEDWITHINASINGLETRANSACTION R" %NTITYBEANSWITH"-4DEMARCATIONMUSTUSETHESET3TATUSMETHOD INSTEADOFTHEVHW5ROOEDFN2QO\METHOD

R# %NTITYBEANSWITH"-4DEMARCATIONMUSTUSETHEGET3TATUSMETHOD INSTEADOFTHEJHW5ROOEDFN2QO\METHOD

R$ "-4DEMARCATIONSHOULDBEUSEDWHENBEANSACCESSRESOURCEMANAG ERSTHATDONOTSUPPORTTRANSACTIONS

R%4HE@3ESSION3YNCHRONIZATIONINTERFACECANBEUSEDONLYBYSTATEFUL SESSIONBEANS

50

4OENSUREBEANPORTABILITY WHICHTRANSACTIONATTRIBUTESSHOULDBEUSEDONTHE BUSINESSMETHODSINTHECOMPONENTINTERFACEOFANENTITYBEANUSING#-0 #HOOSEALLTHATAPPLY

R! .OT3UPPORTED R" 2EQUIRED R# 3UPPORTS R$ 2EQUIRES.EW R%-ANDATORY R&.EVER

\RXDUHKHUH



FRIIHHFUDPPRFNH[DP

51

7HICHOFTHEFOLLOWINGEXCEPTIONSWOULDCAUSEABEANTOBEDISCARDEDBYTHE 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

52

)NWHICHCASESSHOULDTHECONTAINERLOGANEXCEPTIONTHROWNBYABUSINESS METHODOFA#-4DEMARCATEDBEAN#HOOSEALLTHATAPPLY

R!)FTHEMETHODRUNSWITHANUNSPECIlEDTRANSACTIONCONTEXTANDTHROWS ASYSTEMEXCEPTION

R")FTHEMETHODRUNSWITHANUNSPECIlEDTRANSACTIONCONTEXTANDTHROWS ANAPPLICATIONEXCEPTION

R#)FTHEMETHODRUNSWITHA2EQUIRES.EWCONTEXTANDTHROWSASYSTEM EXCEPTION

R$)FTHEMETHODRUNSWITHA2EQUIREDCONTEXTANDTHROWSASYSTEMEXCEP TION

R%)FTHEMETHODRUNSWITHA2EQUIRES.EWCONTEXTANDTHROWSANAPPLICA TIONEXCEPTION

R&)FTHEMETHODRUNSWITHA2EQUIREDCONTEXTANDTHROWSANAPPLICATION EXCEPTION

53

7HICHSESSIONBEANCOMPONENTINTERFACEMETHODS CANBECALLEDSUCCESSFULLY BYALOCALCLIENT#HOOSEALLTHATAPPLY

R! UHPRYH R" JHW+DQGOH R# LV,GHQWLFDO R$ JHW(-%+RPH

 DSSHQGL[$

DSSHQGL[$ILQDOPRFNH[DP

54

)NWHATSCENARIOS CANABEANSBUSINESSMETHODCALLTHELV&DOOHU,Q5ROH METHODOFTHE3ESSION#ONTEXTINTERFACE#HOOSEALLTHATAPPLY

R! !STATEFULSESSIONBEANWITHCONTAINER MANAGEDTRANSACTIONDEMARCA TION

R" !STATELESSSESSIONBEANWITHCONTAINER MANAGEDTRANSACTIONDEMARCA TION

R# !STATEFULSESSIONBEANWITHBEAN MANAGEDTRANSACTIONDEMARCATION R$ !STATELESSSESSIONBEANWITHBEAN MANAGEDTRANSACTIONDEMARCATION R%.ONEOFTHEABOVE

55

7HENCREATINGANENTITYBEANUSINGCONTAINER MANAGEDPERSISTENCE WHICHCAN BEACCESSEDTHROUGHTHEBEANSREMOTECOMPONENTINTERFACE#HOOSEALLTHAT APPLY

R! !CCESSORMETHODSFORTHERELATIONSHIPlELDS R" 4HELOCALINTERFACEOFTHEENTITYBEAN R# 4HEBEANSBUSINESSMETHODS R$ 4HECOLLECTIONCLASSESUSEDFORCONTAINER MANAGEDRELATIONSHIPS R%!CCESSORMETHODSFORTHEPERSISTENTlELDS

56

'IVENTHECONTAINER MANAGED ONE TO ONE BIDIRECTIONALRELATIONSHIP )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

57

7HATSTRUEABOUTANENTITYBEANSIDENTITY#HOOSEALLTHATAPPLY

R! )FTWOENTITYOBJECTREFERENCESARECOMPAREDUSINGTHEOPERATOR THE CONTAINERPROVIDERISNOTREQUIREDTOPRODUCECONSISTENTRESULTS

R" )FTWOENTITYOBJECTREFERENCESARECOMPAREDUSINGTHEHTXDOV METHOD THECONTAINERWILLRETURNTRUEIFTHETWOENTITYOBJECTSHAVETHE SAMEPRIMARYKEY

R# )FTWOENTITYOBJECTREFERENCESARECOMPAREDUSINGTHELV,GHQWL FDO METHOD THECONTAINERWILLRETURNTRUEIFTHETWOENTITYOBJECTS HAVETHESAMEPRIMARYKEY

R$ .ONEOFTHEABOVESTATEMENTSARETRUE

58

'IVEN#-0BEANS#USTOMER"EAN /RDER"EAN AND,INE)TEMS"EANWITHTHE 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

59

'IVEN 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

60



 0 0DQGDWRU\



 0 6XSSRUWV



 0 6XSSRUWV

'IVENTHE%*"1,EXPRESSION SGLVFRXQW127%(7:((1$1' 7HICHEXPRESSIONISEQUIVALENT

R! SGLVFRXQW25SGLVFRXQW! R" SGLVFRXQW 25SGLVFRXQW! R# SGLVFRXQW25SGLVFRXQW!  R$ SGLVFRXQW 25SGLVFRXQW! 

\RXDUHKHUH



FRIIHHFUDPPRFNH[DP

61

7HENABUSINESSMETHODINANENTITYBEANCALLSTHEJHW5ROOEDFN2QO\ METHOD WHICHTRANSACTIONATTRIBUTESETTINGSCOULDCAUSETHECONTAINERTO THROWANEXCEPTION#HOOSEALLTHATAPPLY

R! .OT3UPPORTED R" 2EQUIRED R# 3UPPORTS R$ 2EQUIRES.EW R%-ANDATORY R&.EVER

62

7HICHOFTHEFOLLOWINGISPERFORMEDBYTHECONTAINERIFAMESSAGE DRIVENBEAN DOESNOTCOMPLETEITSTRANSACTIONBEFORETHEENDOFTHEON-ESSAGE METHOD #HOOSEALLTHATAPPLY

R! ,OGANAPPLICATIONERROR R" 2OLLBACKTHESTARTEDTRANSACTION R# $ISCARDTHEINSTANCEOFTHEBEAN R$ 4HROWANEXCEPTION

63

&ROMWHICHCLASSES CANAPPLICATIONEXCEPTIONSEXTEND#HOOSEALLTHATAP PLY

R! MDYDODQJ([FHSWLRQ R" MDYDODQJ5XQWLPH([FHSWLRQ R# MDYDUPL5HPRWH([FHSWLRQ R$ MDYD[HME&UHDWH([FHSWLRQ

64

7HATSTRUEABOUTAPPLICATIONEXCEPTIONS#HOOSEALLTHATAPPLY

R! 4HEYAREINTENDEDTOBEHANDLEDBYTHESYSTEMADMINISTRATOR R" 4HEYSHOULDREPORTSYSTEMLEVELPROBLEMS R# 4HEYCAUSEAUTOMATICMARKINGOFTRANSACTIONSFORROLLBACK R$ 4HEYMUSTNOTEXTENDMDYDODQJ5XQWLPH([FHSWLRQ R%4HEYMAYEXTENDMDYDUPL5HPRWH([FHSWLRQ

 DSSHQGL[$

DSSHQGL[$ILQDOPRFNH[DP

65

7HICHCASESCANCAUSEASESSIONBEANINSTANCETOBEDESTROYEDWITHOUTTHE CONTAINERCALLINGHME5HPRYH #HOOSEALLTHATAPPLY

R! !TRANSACTIONISROLLEDBACKONASTATEFULSESSIONBEANWITHCONTAINER MANAGEDTRANSACTIONDEMARCATION

R" !SYSTEMEXCEPTIONISTHROWNFROMABUSINESSMETHOD R# !NINACTIVECLIENTISTIMEDOUTWHILETHEBEANISINAPASSIVATEDSTATE R$ 4HECLIENTINVOKESTHEREMOVEMETHODWHILETHEBEANISINATRANSAC TION

66

7HICHDEPLOYMENTDESCRIPTORELEMENTS AREUSEDTOSPECIFYA#OLLECTION INTERFACE#HOOSEALLTHATAPPLY

R! HMEQDPH! R" FPU¿HOG! R# HMEUHODWLRQ! R$ FPU¿HOGW\SH! R% DEVWUDFWVFKHPDQDPH!

67

)FABEANCATCHESACHECKEDEXCEPTION FROMWHICHITCANNOTRECOVER WHAT SHOULDITDO#HOOSEALLTHATAPPLY

R! )FTHECLIENTISREMOTE THROWAMDYDUPL5HPRWH([FHSWLRQ R" 0RINTASTACKTRACE R# 2EGARDLESSOFTHECLIENT THROWAMDYD[HME(-%([FHSWLRQ R$ 2EGARDLESSOFTHECLIENT PROPAGATETHESAMEEXCEPTIONTOTHECONTAIN ER

68

7HICHAREREQUIREMENTSFORA#-0ENTITYBEANCLASS#HOOSEALLTHATAPPLY

R! !LLHME6HOHFW METHODSMUSTBEDECLAREDASABSTRACT R" 4HECLASSMUST./4DElNEANHME&UHDWHMETHOD R# 4HEHME3RVW&UHDWHMETHODSAREIMPLEMENTEDBYTHECONTAINER R$ (ELPERMETHODSMUST./4BEIMPLEMENTEDINTHEBEANCLASS R%-ETHODSSTARTINGWITH@HME)LQGMUSTNOTBEIMPLEMENTED

\RXDUHKHUH



FRIIHHFUDPPRFNH[DP

69

7HICHAREVALIDDEPLOYMENTDESCRIPTORSEGMENTS TODElNEACMR lELD #HOOSEALLTHATAPPLY

R! HMEUHODWLRQVKLSUROH! 

 DVVXPHPDQGDWRU\HMEUHODWLRQVKLSUROHHOHPHQWV LQVHUWHGKHUH!



 FPU¿HOG!







 FPU¿HOG!

FPU¿HOGW\SH!MDYDXWLO&ROOHFWLRQFPU¿HOGW\SH!

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¿HOG!

FPU¿HOGW\SH!MDYDXWLO&ROOHFWLRQFPU¿HOGW\SH!

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

70

7HATSTRUEABOUTAREMOTECLIENTSVIEWOFEXCEPTIONSRECEIVEDFROMANENTITY 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 1

7HICHAREBENElTSOF%*"#HOOSEALLTHATAPPLY

(spec: 108)

R! -$"SSURVIVESERVERCRASHES R" 2EPRESENTATIONSOFASINGLEENTITYCANBESHAREDAMONGMULTIPLECLI ENTS

R# 3UPPORTFORNESTEDTRANSACTIONS R$ $YNAMICSERVICEDISCOVERY - ThatÕs a Jini thing R% $ECLARATIVEISOLATIONLEVELSETTINGS

2

7HICHMETHODSAREDIRECTLYINVOKEDBYTHECLIENT#HOOSEALLTHATAPPLY

3

7HICHMETHODS CANBEFOUNDINTHE%*"(OMEINTERFACE#HOOSEALLTHAT APPLY

R! HME3DVVLYDWH - invoked by the Container R" BUSINESSMETHODS R# VHW6HVVLRQ&RQWH[W R$ QHZ,QVWDQFH - invoked by the Container R% FUHDWH

R! REMOVE(ANDLEHANDLE R" REMOVE/BJECTPRIMARY+EY R# GET(ANDLE - this is in EJBObject R$ NONEOFTHEABOVE

 DSSHQGL[$

(API docs)

DSSHQGL[$ILQDOPRFNH[DP

4

7HICHMETHODS CANBERUNBYA#-0BEANINTHEPOOLEDSTATE#HOOSEALL THATAPPLY

R! HME/RDG R" HME)LQG R# HME6WRUH R$ HME&UHDWH R% "USINESSMETHOD R&HME+RPH

5

(spec: 168)

- The bean doesnÕt leave the pool for home and Þnder methods

(spec: 314, 316,

7HATSTRUEABOUTMESSAGE DRIVENBEANS#HOOSEALLTHATAPPLY

324)

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

6

7HATSTRUEABOUTANENTERPRISEBEANSENVIRONMENT#HOOSEALLTHATAPPLY

(spec: 412-413)

R! "EFOREABEANCANACCESSITSENVIRONMENTENTRIES THEBEANMUSTlRST

the Deployer or by t se ly al ic yp t R" /NLYTHEBEANPROVIDERCANSETANENVIRONMENTENTRYVALUE Application Assembler R# !BEANSENVIRONMENTENTRIESCANBESTOREDONLYIN - donÕt confuse a JNDI context and an µMDYDFRPSHQY¶ORONEOFITSSUBCONTEXTS EJBContext (like SessionContext) OBTAINTHENAMINGCONTEXTUSINGA6HVVLRQ&RQWH[WOBJECT

R$ %VERYENVIRONMENTENTRYLOOKUPINABEANSCODEMUSTHAVEAMATCHING HQYHQWU\!ELEMENTINTHEBEANSDEPLOYMENTDESCRIPTOR

7

- otherwise the code would have nothing to look up!

7HATSTRUEABOUTSECURITYROLESIN%*"S#HOOSEALLTHATAPPLY

R! 3ECURITYROLESAREDElNEDINTHEDEPLOYMENTDESCRIPTORUSINGSECURITY

3)

(spec: 440-44

ROLEELEMENTS

R" 3ECURITYROLESARESCOPEDTOTHEINSTANCELEVEL R# -ANYMETHODSCANBEMAPPEDTOASINGLESECURITYROLE R$ !METHODCANAPPEARINONLYONESECURITYROLE

\RXDUHKHUH



PRFNH[DPDQVZHUV

8

!N%*"CONTAINERMUSTSUPPORTATLEASTASUBSETOFWHICH!0)S#HOOSEALL THATAPPLY

)

(spec: 493-493

R! *4! R" *$"# R# *-3 R$ *!8 2#0

9

7HICHSTATEMENTSCONCERNINGSTATELESSSESSIONBEANSARETRUE#HOOSEALLTHAT APPLY

(spec: 95)

R! 4HEYCANUSEBEAN MANAGEDTRANSACTIONDEMARCATION R" 4HEYMUSTHAVEONENO ARGUMENTCREATEMETHOD R# !SINGLEINSTANCECANSUPPORTCONCURRENTCALLS R$ 4HEYMUSTEXTENDJAVAXEJB3ESSION"EAN - implements : )

10

7HATCAPABILITYEXISTSIN/.,9/.%OFTHETWOBUTNOTBOTH  ANENTITYOBJECTSREMOTECOMPONENTINTERFACE ANENTITYOBJECTSLOCALCOMPONENTINTERFACE #HOOSEALLTHATAPPLY

R! 2EMOVINGTHEOBJECT R" /BTAININGTHEOBJECTSHANDLE not for local interfaces R# )NVOKINGBUSINESSMETHODS R$ /BTAININGTHEOBJECTSPRIMARYKEY

11

7HENCREATINGA#-0ENTITYBEAN WHICHMETHODS AREOPTIONAL#HOOSEALL THATAPPLY

R! HME/RDG s ve to allow client ha Õt on d u yo R" HME&UHDWH tities to insert new en R# HME5HPRYH R$ HME6HOHFW R% HME3DVVLYDWH R&VHW(QWLW\&RQWH[W

 DSSHQGL[$

(spec: 171-174)

DSSHQGL[$ILQDOPRFNH[DP

12

R! HME)LQG R" HME/RDG R# HME6WRUH R$ HME6HOHFW R% HME3DVVLYDWH

13

(spec: 168)

7HICHMETHODS CANBECALLEDONABEANINTHEPOOLEDSTATE#HOOSEALL THATAPPLY

Þnder and seenleÕtctspeciÞc methods arity to one ent

(spec: 318-320)

7HATSTRUEABOUTTHELIFECYCLEOFAMESSAGE DRIVENBEAN#HOOSEALLTHATAP PLY

R! 7HENTHETHEOQ0HVVDJHMETHODCOMPLETES THECONTAINERWILLTYPI

- bean just goes back to the pool R" 4HEON0HVVDJH METHODCANTHROWAPPLICATIONEXCEPTIONS - to whom ? CALLYCALLEJB2EMOVE

R# -ESSAGE DRIVENBEANSCANRUNONLYWITH#-4DEMARCATION R$ 4HEJHW5ROOEDFN2QO\ METHODCANBECALLEDONLYFROMTHE ON-ESSAGEMETHOD

14

7HICHSTATEMENTS CONCERNINGMESSAGE DRIVENBEANCLASSESARETRUE #HOOSEALLTHATAPPLY

(spec: 323)

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

15

7ITHINTHEDEPLOYMENTDESCRIPTORSHMEORFDOUHI!ELEMENT WHICHELE (spec: MENTSAREOPTIONAL#HOOSEALLTHATAPPLY

466)

R! ORFDO! R" HMEOLQN! R# ORFDOKRPH! R$ GHVFULSWLRQ! R% HMEUHIQDPH! R&HMEUHIW\SH! \RXDUHKHUH



PRFNH[DPDQVZHUV

16

7HATSTRUEABOUTRESOURCEMANAGERCONNECTIONFACTORIES#HOOSEALLTHAT APPLY

(spec: 423, 481)

R4HEUHVVKDULQJVFRSH!DEPLOYMENTDESCRIPTORELEMENTISUSEDTO INDICATEWHETHERCONNECTIONSTOARESOURCEMANAGERARESHAREABLE ACROSSMULTIPLE%*"SINANAPPLICATION

R" 4HEUHVVKDULQJVFRSH!DEPLOYMENTDESCRIPTORELEMENTCONTAINS - backwards THEUHVRXUFHUHI!ELEMENT

R# !LLOFABEANSRESOURCEMANAGERCONNECTIONFACTORYREFERENCESARE - each must be individually DECLAREDINASINGLEUHVRXUFHUHI!ELEMENT USING UHVUHIQDPH!ELEMENTSTODISTINGUISHTHEM

speciÞed with a

R$ "YDEFAULT CONNECTIONSTOAGIVENRESOURCEMANAGERARESHAREABLE ACROSSMULTIPLEBEANSINANAPPLICATION

17

7HATSTRUEABOUTSECURITYROLESREFERENCEDFROMAN%*"SCODE#HOOSEALL THATAPPLY

(spec: 439-441,

446)

R! )NTHEDEPLOYMENTDESCRIPTOR SUCHREFERENCESARECONTAINEDINTHE VHFXULW\UROHUHI!ELEMENT

R" 4HEVHFXULW\UROH!ELEMENTINCLUDESTHE

VHFXULW\UROHUHI!ELEMENT

is NOT the same as a real R# 7ITHINTHEVHFXULW\UROHUHI!ELEMENT THEUROHQDPH! - this role name ELEMENTSVALUEISTHESAMEASTHEARGUMENTFORTHEBEANSINVOCATION OFTHELV&DOOHU,Q5ROHMETHOD

R$ 4HEUROHOLQN!ELEMENTISUSEDTOLINKTWO - no, it links a to a VHFXULW\UROHUHI!ELEMENTS

18



7HATSTRUEABOUTTHECLIENTSVIEWOFSECURITY#HOOSEALLTHATAPPLY

R! !TRANSACTIONALCLIENTCANNOTCHANGEITSPRINCIPALASSOCIATIONWITHINA TRANSACTION

R" !SESSIONBEANSCLIENTCANNOTCHANGEITSPRINCIPALASSOCIATIONFORTHE DURATIONOFTHECOMMUNICATIONWITHTHESESSIONOBJECT

R# 4RANSACTIONALREQUESTSWITHINASINGLETRANSACTIONCANNOTARRIVEFROM MULTIPLECLIENTS

R$ .ONEOFTHEABOVE

 DSSHQGL[$

(spec: 450)

DSSHQGL[$ILQDOPRFNH[DP

19

7HENPROGRAMMINGANENTITYBEANCLASSWHICHTECHNIQUES SHOULDBE !6/)$%$TOENSUREBEANPORTABILITYACROSSALL%*"CONTAINERS#HOOSEALL THATAPPLY

)

(spec: 494-495

R! #HANGINGATHREADSPRIORITY R" 5SINGTHEREmECTION!0) R# 5SINGWRAPPERCLASSES R$ 5SINGSTATICNESTEDCLASSES

20

7HENPROGRAMMINGAMESSAGE DRIVENBEANCLASSWHICHTECHNIQUES SHOULD BEAVOIDEDTOENSUREBEANPORTABILITYACROSSALL%*"CONTAINERS#HOOSE ALLTHATAPPLY

)

(spec: 494-495

R! 5SING3WING!0)SFORA'5) R" 5SINGTHE@TRANSIENTMODIlER R# 5SINGNATIVELIBRARIES R$ 2EADINGlLEDESCRIPTORS

21

7HATISREQUIREDOFTHECONTAINERWHENITPASSIVATESASTATEFULSESSIONBEAN

(spec: 71)

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...

22

7HICHCAPABILITIESAREDElNEDINTHEMDYD[HME(-%/RFDO2EMHFWINTER FACE#HOOSEALLTHATAPPLY 

R! 2EMOVEANENTITYOBJECT R" /BTAINANENTITYOBJECTSPRIMARYKEY R# /BTAINALOCALHOMEINTERFACEFORTHEENTITYOBJECT R$ /BTAINAREMOTECOMPONENTINTERFACEFORTHEENTITYOBJECT R%%XPOSETHEMETHODSOFTHEMDYD[HME(QWLW\%HDQINTERFACETOTHE CLIENT

\RXDUHKHUH



PRFNH[DPDQVZHUV

23

7HATSTRUEABOUTEJB3ELECTMETHODS#HOOSEALLTHATAPPLY

(spec: 183)

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

24

7HICHMETHODSCAN.%6%2BESUCCESSFULLYINVOKEDFROMAMESSAGE DRIVEN BEAN#HOOSEALLTHATAPPLY

R! LV&DOOHU,Q5ROH R" JHW(-%+RPH R# JHW5ROOEDFN2QO\ R$ VHW5ROOEDFN2QO\ R%JHW&DOOHU3ULQFLSDO

25

(spec: 320-321)

ient MDBs have ynohaclve no view, so theient security home or cl n informatio

7HICHROLEISTYPICALLYRESPONSIBLEFORADDINGEJB LINKELEMENTSTOAN%*"S DEPLOYMENTDESCRIPTOR

(spec: 418)

R! BEANPROVIDER R" APPLICATIONASSEMBLER - linking one bean that refers to another R# DEPLOYER R$ CONTAINERPROVIDER R%SYSTEMADMINISTRATOR

26

)NWHICHOFTHEFOLLOWINGMETHODSCANASTATELESSSESSIONBEANINVOKETHE LV&DOOHU,Q5ROH METHODINORDERTOPERFORMASECURITYCHECK#HOOSE ALLTHATAPPLY

R! HME&UHDWH R" HME5HPRYH R# VHW6HVVLRQ&RQWH[W R$ .ONEOFTHEABOVE

 DSSHQGL[$

- isCallerInRole() can be called from business methods only

(spec: 90)

DSSHQGL[$ILQDOPRFNH[DP

27

7HICHTWOARETYPICALLYRESPONSIBLEFORCREATINGEJB JARlLES#HOOSETWO

28

7HICHOFTHEFOLLOWINGSTATELESSSESSIONBEANCONTAINERCALLBACKMETHODS TAKESANARGUMENT#HOOSEALLTHATAPPLY

(spec: 487)

R! 4HEBEANPROVIDER R" 4HEAPPLICATIONASSEMBLER R# 4HEDEPLOYER R$ 4HESYSTEMADMINISTRATOR

(spec: 77)

R! HME5HPRYH R" HME&UHDWH R# HME&UHDWH R$ HME3DVVLYDWH Context object on si es S a es ak t R%VHW6HVVLRQ&RQWH[W -

29

(spec: 74)

7HICHOFTHESECANNEVERBECALLEDONA3ESSION#ONTEXTINTERFACE#HOOSEALL THATAPPLY

R! JHW(-%+RPH R" JHW(-%2EMHFW R# JHW(-%7UDQVDFWLRQ - no such method : ) R$ LV&DOOHU,Q5ROH R%JHW8VHU7UDQVDFWLRQ

30

(spec: 190)

7HATSTRUEABOUTANENTITYBEANSREMOTECOMPONENTINTERFACE#HOOSEALL 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

31

7HICHARETRUEABOUTlNDERMETHODSINANENTITYBEANSLOCALHOMEINTERFACE #HOOSEALLTHATAPPLY

(spec: 196)

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)

32

7HICHARETRUEFORAMESSAGE DRIVENBEAN#HOOSEALLTHATAPPLY

(spec: 324-325

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

33

'IVENTHEFOLLOWINGSUBSETOFADEPLOYMENTDESCRIPTOR 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[$

(spec: 440)

DSSHQGL[$ILQDOPRFNH[DP

34

7HICHAREVALIDLOCALHOMEINTERFACESFORASTATEFULSESSIONBEAN#HOOSEALL THATAPPLY

(spec: 98)

R! SXEOLFLQWHUIDFH7HVW%HDQLPSOHPHQWV MDYD[HME(-%/RFDO+RPH^ Y RLGFUHDWH WKURZV&UHDWH([FHSWLRQ `

R" SXEOLFLQWHUIDFH7HVW%HDQH[WHQGV

Must: - throw CreateException - return local interface type - start with ÒcreateÓ - 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 `

35

7HICHMETHODSCANBECALLEDBYABEANPROVIDER#HOOSEALLTHATAPPLY

R! UHPRYH - the callback is ejbRemove R" HME&UHDWH R# DIWHU%HJLQ The others caarllbe acks Container R$ JHW&DOOHU3ULQFLSDO R%HME3DVVLYDWH

\RXDUHKHUH



PRFNH[DPDQVZHUV

36

7HOWILLTYPICALLYSPECIFYWHETHERABEANISRE ENTRANTINTHEBEANSDEPLOY MENTDESCRIPTOR

(spec: 457)

R! 4HEBEANPROVIDER R" 4HEAPPLICATIONASSEMBLER R# 4HEDEPLOYER R$ 4HESYSTEMADMINISTRATOR

37

7HICHSTATEMENTSABOUTSTATEFULANDSTATELESSSESSIONBEANSARETRUE #HOOSEALLTHATAPPLY

R! /NLYSTATEFULSESSIONBEANSSUPPORTTRANSACTIONS R" /NLYSTATEFULSESSIONBEANSCANBEPASSIVATED R# /NLYSTATEFULSESSIONBEANSHAVEAµVHW6HVVLRQ&RQWH[W¶METHOD le, s must have a sing es el at st R$ "OTHSTATEFULANDSTATELESSSESSIONBEANSCANSUPPORTOVERLOADED arg ejbCreate µHME&UHDWH¶METHODS

no-

R%"OTHSTATEFULANDSTATELESSSESSIONBEANSCANIMPLEMENTTHE- only stateful

38

ve state, - stateless iecantn -haspeciÞc R&"OTHSTATEFULANDSTATELESSSESSIONBEANSCANHAVEINSTANCEVARIABLESTATE just not cl state ) 7HICHMUSTBEINCLUDEDINEVERYEJB JARlLE#HOOSEALLTHATAPPLY (spec: 488-490

39

7HICHMETHODS AREDECLAREDINTHEJAVAXEJB%*"(OMEINTERFACE#HOOSE ALLTHATAPPLY

MDYD[HME6HVVLRQ6\QFKURQL]DWLRQINTERFACE

R! 4HESTUBFORTHE%*"(OMEINTERFACE EITHERDIRECTLYORBYREFERENCE - This is the ContainerÕs jo R" 4HE*!2-ANIFESTlLE - not n b eeded as of E J B 2 .0 R# !DEPLOYMENTDESCRIPTOR R$ 4HE*.$)CONTEXT R%4HE%*"SHOMEINTERFACE EITHERDIRECTLYORBYREFERENCE

R! FUHDWH R" ORRNXS R# JHW+DQGOH R$ JHW+RPH+DQGOH R%VHW6HVVLRQ&RQWH[W

 DSSHQGL[$

(API docs)

DSSHQGL[$ILQDOPRFNH[DP

40

(OWMANYJAVAXEJB%*",OCAL(OMEINTERFACEMETHODSCANBECALLEDWITHOUT ANEXCEPTION FROMASESSIONBEANCLIENT

R!  R"  R#  R$  R%

41

(spec: 60)

The only method in EJBLocalHome is remove that takes a primary key

7HICHOFTHEFOLLOWING IFCALLED ALWAYSHAVETHESAMETRANSACTIONCONTEXTASA SESSIONBEANSBUSINESSMETHODS#HOOSEALLTHATAPPLY

(spec: 76)

R! CONSTRUCTOR R" VHW6HVVLRQ&RQWH[W R# DIWHU%HJLQ R$ DIWHU&RPSOHWLRQ - transaction is over R%EHIRUH&RPSOHWLRQ

42

'IVENASTATEFULSESSIONBEANWITHCONTAINER MANAGEDTRANSACTIONDEMARCATION FROMWHICHMETHODSCANYOUACCESSANOTHERBEAN#HOOSEALLTHATAPPLY

R! VHW6HVVLRQ&RQWH[W R" HME&UHDWH R# DIWHU%HJLQ R$ EHIRUH&RPSOHWLRQ R%DIWHU&RPSOHWLRQ

43

(spec: 80)

setSessionContext and afterCompletion have NO meaningful tx context

7HICHDEPLOYMENTDESCRIPTORELEMENTS CANOPTIONALLYSPECIFYCASCADE DELETE FUNCTIONALITY#HOOSEALLTHATAPPLY

(spec: 468)

R! HMEUHODWLRQ! R" DEVWUDFWVFKHPDQDPH! R# HMEUHODWLRQVKLSUROH! R$ UHODWLRQVKLSUROHVRXUFH!

\RXDUHKHUH



PRFNH[DPDQVZHUV

44

7HATSTRUEABOUTCASCADE DELETE#HOOSEALLTHATAPPLY

(spec: 133)

R! )TISDECLAREDINTHEHME5HPRYH METHOD - cascade-delete says Òdelete R" 7HENACASCADE DELETEENABLEDBEANISDELETED ITCAUSESALLOFTHE ME if my partner is removedÓ BEANSWITHRELATIONSHIPSTOITTOBEAUTOMATICALLYDELETEDTOO

R# )TCANBESPECIlEDFORONE TO ONE ONE TO MANY ORMANY TO MANYRELA - not for many-to-many TIONSHIPS

R$ !CASCADE DELETEENABLEDBEANISAUTOMATICALLYREMOVEDWHENANY hMULTIPLICITYOFONEvBEANWITHWHICHITISRELATEDISREMOVED

45

7HICHMETHODS FROMTHE%NTITY#ONTEXTINTERFACECANBEINVOKED REGARDLESS OFTRANSACTIONCONTEXT#HOOSEALLTHATAPPLY

(spec: 180)

R! JHW(-%+RPH R" JHW(-%2EMHFW R# VHW5ROOEDFN2QO\ R$ JHW5ROOEDFN2QO\

46

7HATSTRUEABOUTANENTITYBEANSPRIMARYKEY#HOOSEALLTHATAPPLY

(spec: 120, 130)

R! 0RIMARYKEYlELDSMUSTBECMP lELDS - you can use a compound key R" 3ETTERMETHODSFORlELDSASSOCIATEDWITHAPRIMARYKEYMUSTNOTBE EXPOSEDTHROUGHACLIENTVIEW

R# )FTWOENTITYOBJECTSHAVETHESAMEHOMEANDTHESAMEPRIMARYKEY THEYARECONSIDEREDIDENTICAL

R$ 4HEJHW3ULPDU\.H\ METHODCANBEINVOKEDONREFERENCESTOONLY REMOTEHOMEINTERFACES NOTLOCALHOMEINTERFACES

47

7HICHINTERFACES AREUSEDBYTHEBEANPROVIDERTOPERFORM"-4DEMARCA TION#HOOSEALLTHATAPPLY

R! MDYD[WUDQVDFWLRQ7UDQVDFWLRQ R" MDYD[WUDQVDFWLRQ8VHU7UDQVDFWLRQ R# MDYD[WUDQVDFWLRQ6\QFKURQL]DWLRQ R$MDYD[WUDQVDFWLRQ7UDQVDFWLRQ0DQDJHU

 DSSHQGL[$

(spec: 332)

DSSHQGL[$ILQDOPRFNH[DP

48

7HICHOFTHEFOLLOWINGARELEGAL%*"1,QUERIES#HOOSEALLTHATAPPLY

(spec: 236)

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

R# 3%,%#4/"*%#4C



7(%2%#USTOMERC

c.name (see answers D and E)

- must have a FROM, and (c)

R$ 3%,%#4/"*%#4C



&2/-#USTOMERC

R%3%,%#4CNAME

49



&2/-#USTOMERC

7HICHARETRUEABOUTTRANSACTIONSIN%*"#HOOSEALLTHATAPPLY

(spec: 339, 348)

- This would elinimate a key R! /NLYONEDATABASECANBEUPDATEDWITHINASINGLETRANSACTION 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 BUSINESSMETHODSINTHECOMPONENTINTERFACEOFANENTITYBEANUSING#-0 #HOOSEALLTHATAPPLY

(spec: 352)

R! .OT3UPPORTED R" 2EQUIRED R# 3UPPORTS R$ 2EQUIRES.EW R%-ANDATORY R&.EVER

\RXDUHKHUH



PRFNH[DPDQVZHUV

51

7HICHOFTHEFOLLOWINGEXCEPTIONSWOULDCAUSEABEANTOBEDISCARDEDBYTHE 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

52

)

(spec: 372-374

The others are recoverable application exceptions

)NWHICHCASESSHOULDTHECONTAINERLOGANEXCEPTIONTHROWNBYABUSINESS METHODOFA#-4DEMARCATEDBEAN#HOOSEALLTHATAPPLY

(spec: 376)

R!)FTHEMETHODRUNSWITHANUNSPECIlEDTRANSACTIONCONTEXTANDTHROWS ASYSTEMEXCEPTION

R")FTHEMETHODRUNSWITHANUNSPECIlEDTRANSACTIONCONTEXTANDTHROWS ANAPPLICATIONEXCEPTION

R#)FTHEMETHODRUNSWITHA2EQUIRES.EWCONTEXTANDTHROWSASYSTEM EXCEPTION

R$)FTHEMETHODRUNSWITHA2EQUIREDCONTEXTANDTHROWSASYSTEMEXCEP TION

R%)FTHEMETHODRUNSWITHA2EQUIRES.EWCONTEXTANDTHROWSANAPPLICA TIONEXCEPTION

R&)FTHEMETHODRUNSWITHA2EQUIREDCONTEXTANDTHROWSANAPPLICATION EXCEPTION

53

7HICHSESSIONBEANCOMPONENTINTERFACEMETHODS CANBECALLEDSUCCESSFULLY 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[$

- system exceptions are always logged

DSSHQGL[$ILQDOPRFNH[DP

54

)NWHATSCENARIOS CANABEANSBUSINESSMETHODCALLTHELV&DOOHU,Q5ROH 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

55

7HENCREATINGANENTITYBEANUSINGCONTAINER MANAGEDPERSISTENCE WHICHCAN BEACCESSEDTHROUGHTHEBEANSREMOTECOMPONENTINTERFACE#HOOSEALLTHAT APPLY

(spec: 130)

R! !CCESSORMETHODSFORTHERELATIONSHIPlELDS R" 4HELOCALINTERFACEOFTHEENTITYBEAN R# 4HEBEANSBUSINESSMETHODS R$ 4HECOLLECTIONCLASSESUSEDFORCONTAINER MANAGEDRELATIONSHIPS idea... R%!CCESSORMETHODSFORTHEPERSISTENTlELDS - legal, just not a good

56

'IVENTHECONTAINER MANAGED ONE TO ONE BIDIRECTIONALRELATIONSHIP

(spec: 138)

)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

When b2 took b1Õs Foo, he replaced his own foo2 with foo1. So now, foo2 has no bar. I E IE

\RXDUHKHUH



PRFNH[DPDQVZHUV

57

7HATSTRUEABOUTANENTITYBEANSIDENTITY#HOOSEALLTHATAPPLY

R! )FTWOENTITYOBJECTREFERENCESARECOMPAREDUSINGTHEOPERATOR THE

(spec: 121)

CONTAINERPROVIDERISNOTREQUIREDTOPRODUCECONSISTENTRESULTS

R" )FTWOENTITYOBJECTREFERENCESARECOMPAREDUSINGTHEHTXDOV METHOD THECONTAINERWILLRETURNTRUEIFTHETWOENTITYOBJECTSHAVETHE SAMEPRIMARYKEY - not guaranteed

R# )FTWOENTITYOBJECTREFERENCESARECOMPAREDUSINGTHELV,GHQWLFDO METHOD THECONTAINERWILLRETURNTRUEIFTHETWOENTITYOBJECTSHAVETHE SAMEPRIMARYKEY

R$ .ONEOFTHEABOVESTATEMENTSARETRUE

58

'IVEN#-0BEANS#USTOMER"EAN /RDER"EAN AND,INE)TEMS"EANWITHTHE 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





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[$

- not a Customer type - doesnÕt guarantee you wonÕt get duplicates

(spec: 232)

DSSHQGL[$ILQDOPRFNH[DP

59

'IVEN 0 HWKRG 7[ !0HWKRG 7[ !0HWKRG 7[

(spec: 357-359)

?!0HWKRG 7[ )FTHECALLINGMETHODISONTHELEFTSIDEOFANARROW ANDTHECALLEDMETHODON THERIGHT WHICHSETOFTRANSACTIONATTRIBUTESWILLSUPPORTTHETRANSACTIONSCOPE SPECIlED#HOOSEALLTHATAPPLY

R! 0 1HYHU 

 0 6XSSRUWV



 0 5HTXLUHG



 0 5HTXLUHV1HZ

a 1 could not Nbeeviner d ho et M . R E V E as N w - Never meannsif...its transaction attribute io t ac trans

R" 0 5HTXLUHG 

 0 6XSSRUWV



 0 0DQGDWRU\



 0 5HTXLUHV1HZ

R# 0 5HTXLUHV1HZ 

 0 5HTXLUHV1HZ



 0 6XSSRUWV



 0 5HTXLUHV1HZ

R$ 0 5HTXLUHG

60



 0 0DQGDWRU\



 0 6XSSRUWV



 0 6XSSRUWV

tion, but 1Õs transacra d ho et m in g in nn t nsaction - method 2Reqis uiruresNew, it would be a new if it had

- method 4 starts a does not have Supportsnew transaction, so it obviously as an attribute

(spec: 229)

'IVENTHE%*"1,EXPRESSION SGLVFRXQW127%(7:((1$1' 7HICHEXPRESSIONISEQUIVALENT

- 10 and 15 a

re EXCLUDE

D

R! SGLVFRXQW25SGLVFRXQW! R" SGLVFRXQW 25SGLVFRXQW! R# SGLVFRXQW25SGLVFRXQW!  R$ SGLVFRXQW 25SGLVFRXQW! 

\RXDUHKHUH



PRFNH[DPDQVZHUV

61

7HENABUSINESSMETHODINANENTITYBEANCALLSTHEJHW5ROOEDFN2QO\ METHOD WHICHTRANSACTIONATTRIBUTESETTINGSCOULDCAUSETHECONTAINERTO THROWANEXCEPTION#HOOSEALLTHATAPPLY

(spec: 361)

R! .OT3UPPORTED R" 2EQUIRED R# 3UPPORTS - because there might not be one R$ 2EQUIRES.EW R%-ANDATORY R&.EVER

62

7HICHOFTHEFOLLOWINGISPERFORMEDBYTHECONTAINERIFAMESSAGE DRIVENBEAN DOESNOTCOMPLETEITSTRANSACTIONBEFORETHEENDOFTHEON-ESSAGE METHOD #HOOSEALLTHATAPPLY

(spec: 356)

R! ,OGANAPPLICATIONERROR R" 2OLLBACKTHESTARTEDTRANSACTION R# $ISCARDTHEINSTANCEOFTHEBEAN R$ 4HROWANEXCEPTION - to whom?

63

&ROMWHICHCLASSES CANAPPLICATIONEXCEPTIONSEXTEND#HOOSEALLTHATAP PLY

(spec: 373)

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

64

7HATSTRUEABOUTAPPLICATIONEXCEPTIONS#HOOSEALLTHATAPPLY

R! 4HEYAREINTENDEDTOBEHANDLEDBYTHESYSTEMADMINISTRATOR R" 4HEYSHOULDREPORTSYSTEMLEVELPROBLEMS R# 4HEYCAUSEAUTOMATICMARKINGOFTRANSACTIONSFORROLLBACK R$ 4HEYMUSTNOTEXTENDMDYDODQJ5XQWLPH([FHSWLRQ R%4HEYMAYEXTENDMDYDUPL5HPRWH([FHSWLRQ - NO

 DSSHQGL[$

(spec: 372-373) They are intended to be handled by the client

DSSHQGL[$ILQDOPRFNH[DP

65

7HICHCASESCANCAUSEASESSIONBEANINSTANCETOBEDESTROYEDWITHOUTTHE CONTAINERCALLINGHME5HPRYH #HOOSEALLTHATAPPLY

(spec: 79)

R! !TRANSACTIONISROLLEDBACKONASTATEFULSESSIONBEANWITHCONTAINER MANAGEDTRANSACTIONDEMARCATION

R" !SYSTEMEXCEPTIONISTHROWNFROMABUSINESSMETHOD R# !NINACTIVECLIENTISTIMEDOUTWHILETHEBEANISINAPASSIVATEDSTATE R$ 4HECLIENTINVOKESTHEREMOVEMETHODWHILETHEBEANISINATRANSAC TION

66

- client gets exception, bean survives

7HICHDEPLOYMENTDESCRIPTORELEMENTS AREUSEDTOSPECIFYA#OLLECTION INTERFACE#HOOSEALLTHATAPPLY

(spec: 462)

R! HMEQDPH! R" FPU¿HOG! R# HMEUHODWLRQ! multiplicity, to indicate R$ FPU¿HOGW\SH! - fororÒmanyÓ Set Collection R% DEVWUDFWVFKHPDQDPH!

67

)FABEANCATCHESACHECKEDEXCEPTION FROMWHICHITCANNOTRECOVER WHAT SHOULDITDO#HOOSEALLTHATAPPLY

(spec: 373)

R! )FTHECLIENTISREMOTE THROWAMDYDUPL5HPRWH([FHSWLRQ - a bean must NEVER throw RemoteException. Only the R" 0RINTASTACKTRACE Container can do it. R# 2EGARDLESSOFTHECLIENT THROWAMDYD[HME(-%([FHSWLRQ R$ 2EGARDLESSOFTHECLIENT PROPAGATETHESAMEEXCEPTIONTOTHECONTAIN ER

68

7HICHAREREQUIREMENTSFORA#-0ENTITYBEANCLASS#HOOSEALLTHATAPPLY

(spec: 190-191)

R! !LLHME6HOHFW METHODSMUSTBEDECLAREDASABSTRACT R" 4HECLASSMUST./4DElNEANHME&UHDWHMETHOD R# 4HEHME3RVW&UHDWHMETHODSAREIMPLEMENTEDBYTHECONTAINER R$ (ELPERMETHODSMUST./4BEIMPLEMENTEDINTHEBEANCLASS R%-ETHODSSTARTINGWITH@HME)LQGMUSTNOTBEIMPLEMENTED

\RXDUHKHUH



PRFNH[DPDQVZHUV

69

7HICHAREVALIDDEPLOYMENTDESCRIPTORSEGMENTS TODElNEACMR lELD #HOOSEALLTHATAPPLY

(spec: 162, 463)

R! HMEUHODWLRQVKLSUROH! 

 DVVXPHPDQGDWRU\HMEUHODWLRQVKLSUROHHOHPHQWV LQVHUWHGKHUH!



 FPU¿HOG!







 FPU¿HOG!

FPU¿HOGW\SH!MDYDXWLO&ROOHFWLRQFPU¿HOGW\SH!

me

-missing Þeld na

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¿HOG!

FPU¿HOGW\SH!MDYDXWLO&ROOHFWLRQFPU¿HOGW\SH!

- missing name, and in role source, as opposed to role

UHODWLRQVKLSUROHVRXUFH!

R$ UHODWLRQVKLSUROHVRXUFH! 

 DVVXPHPDQGDWRU\UHODWLRQVKLSUROHVRXUFHHOH PHQWVLQVHUWHGKHUH!



 FPU¿HOG!





FPU¿HOGQDPH!OLQH,WHPVFPU¿HOGQDPH!





FPU¿HOGW\SH!MDYDXWLO&ROOHFWLRQFPU¿HOGW\SH!



 FPU¿HOG!

UHODWLRQVKLSUROHVRXUFH!

 DSSHQGL[$

le source

-canÕt be in a ro

DSSHQGL[$ILQDOPRFNH[DP

70

(spec: 383)

7HATSTRUEABOUTAREMOTECLIENTSVIEWOFEXCEPTIONSRECEIVEDFROMANENTITY BEAN#HOOSEALLTHATAPPLY

- only if the callerÕs tion was rolled ALWAYSISSUEAMDYD[WUDQVDFWLRQ7UDQVDFWLRQ5ROOHGEDFN([FH transac opposed to (as back SWLRQEXCEPTION suspended)

R! )FTHECONTAINERMARKSATRANSACTIONFORROLLBACK THECONTAINERWILL

R" )FTHECLIENTRECEIVESAMDYD[WUDQVDFWLRQ7UDQVDFWLRQ5ROOHG

%DFN([FHSWLRQ THECONTAINERGUARANTEESTHATTHATTRANSACTIONWILL NEVERCOMMIT

the

happens with R# !MDYD[WUDQVDFWLRQ7UDQVDFWLRQ5HTXLUHG([FHSWLRQEXCEP -Mandat ory tx attribute TION INFORMSTHECLIENTTHATTHEBEANNEEDEDTOBECALLEDWITHINTHE CONTEXTOFATRANSACTION

R$ )FTHECONTAINERDISCOVERSTHATAREQUESTEDBEANNOLONGEREXISTS ITWILL ALWAYSTHROWTHEMDYD[HME1R6XFK2EMHFW(QWLW\([FHSWLRQ

- java.rmi.NoS

uchObjectExce

ption

\RXDUHKHUH



JRRGOXFN

This isnÕt goodbye 'RQ·W\RXNQRZWKHUH·VPRUHRQWKH

%ULQJ\RXUEUDLQRYHUWR ZLFNHGO\VPDUWFRP

ZLFNHGO\VPDUWFRPZHEVLWH"


$QGGRQ·WIRUJHWWRZULWHDQGWHOOXV ZKHQ\RXSDVVWKHH[DP ,NLFNHGEXWW#ZLFNHGO\VPDUWFRP :H¶OOKDYHDGULQNLQ\RXUKRQRU

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[\



Hey, is this what you had in mind by Òemphasize the Head?Ó -K&B >XPQRPDUNHWLQJ@

0MIL.QZ[

\ WasnÕt this the one we agreed on last  week? - K & B

ZK\ ZHOOVLQFHLW·VEUDLQEDVHG H+($'DQG GRQ·WZHHPSKDVL]HWK P FDOOLW+HDG)LUVW" DUNHWLQJ

PRUHIHVWLYHE(XWOHDYH LV H RQ V KL W 2: .1 ,
/]Q\IZ.QZ[\

0MIL.QZ[\

\RXDUHKHUH



Index Symbols

607 574

384, 394, 406

449

460

449

503

582

393

505

384

505, 579

388

574, 578

388

504, 579

388

388, 422

502

385

449

395

615

610, 611

614

610

613

610

613

610

613

616

388

610

388

589

388

574

607

591, 592

607

591

607

589 this is a new appendix 685

the index

574

architectural overview 63

476, 502, 504

arguments 67

476, 502

Atomic 472

574, 581

attributes. See transaction attributes authentication 572 authorization 572

A

Auto-acknowledge 460

abstract getter and setter 313

B

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

abstract 313 abstract getters and setters 315, 383

acknowledgement. See message acknowledgement actor playing an entity 350 administered object 616 Advice Guy bean 15 afterBegin() 512 afterCompletion() 512 Application 33 making a new J2EE app in the deploytool 33

bean inheritance 186 five things you do to build a bean 16 overview 98 bean creation 188, 192, 194, 196. See also entity beans bean getting shot 283 Bean Provider 26 exception responsibilities 541

Application Assembler 26

passivation responsibility for stateful session beans 203

Application Assembler’s responsibility

responsibility for the Deployment Descriptor 617

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 BETWEEN 416. See EJB-QL BMP 303 BMT 476, 478, 482, 485, 487, 490, 502, 508 getStatus() 489 restrictions 481 summary of bean-managed demarcation 508 bodyguard 94 bullet points 166 architectural overview 97 client view 131 EJB-QL 420 entity client view 287 entity relationships 420 exceptions 555 local interfaces 166 overview 14 Remote interfaces 144 RMI 76 session bean lifecycle 221 business interface 79 business methods 199, 226

C cascade-delete 387, 388 cast 120 narrow before cast 120 client 55 client Code 57, 219 client view 111 component interface 136 exceptions 159 local 145 code example 119 creating a test client 55 InitialContext 117 local client code 160 lookup 116 Client before and after message-driven beans 441 client Jar 51 client view 111, 131 EJBHome methods 129 EJBObject methods 137 entity bean 287 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 client 119

chapter 9: transactions 516 commit 471, 473

AdviceStatefulBean client 219

commit() 478

exceptions in client interfaces 538

commit options 356

CMP entity bean complete 318 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 appendix A: final mock exam 637

Container-managed transactions. See CMT 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 restrictions 627

ejbRemove() 183

chapter 3: client view 168 688

compare

index

implementing in a session bean 183 setSessionContext() 183

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

D database 301 database to entity mapping 400 DataSource 602, 610

Director talking to entity bean 284 distributed transactions 473 two-phase commit 473 DuplicateKeyException 548 Dups-ok-acknowledge 460 Durable 472 durable subscription 450

dead bean 284 entity vs. instance death 285

DELETE 265

E

deploy-time customization 602, 618

EJB

declarative security 572 declarative transactions. See CMT

Deployer 27

and RMI 81

deployment descriptor responsibilities 618

architectural overview 63

responsibilities for mapping abstract roles to people 583

EJBObject 82

deployment descriptor 615

ejb-jar 24, 620, 624 requirements 24 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 path navigation 404 reserved words 410

EJB references 613 614 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 methods 129

ejbCreate() 331, 333 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) 306

entity bean lifecycle 296

entity vs. instance death 285 finder methods 276, 339, 341 home business method 345 home interface 273, 275 lifecycle 320 mapping from abstract schema to a real database 400

entity relationships: CMP and CMR 374 exceptions 526 message-driven beans 438 security 570 session beans 174 transactions 470 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 getEJBMetaData() 129

rules 125 home object 91

getEJBObject() 241 getHandle() 137

getRollbackOnly() 241, 488, 500

I

getStatus() 489

IIOP 90

getUserTransaction() 241, 476, 477, 478

IllegalStateException 551, 552, 558, 560

getHomeHandle() 129 getPrimaryKey() 137

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 business interface 79 comparing Remote vs. local 154, 163 component interface 82, 133, 271 EJBHome 129 EJBObject 137 extending 85 home interface 91, 114, 125, 273 javax.ejb.EntityBean 182 javax.ejb.EntityContext 182 javax.ejb.MessageDrivenBean 182 javax.ejb.MessageDrivenContext 182 javax.ejb.SessionBean 182 javax.ejb.SessionContext 182 local client interfaces 145, 166 exceptions 159 Remote 78 squeamish about not implementing 86 isCallerInRole 587 isCallerInRole() 587 isCallerInRole(String s) 241 isIdentical 141 isIdentical() 142 isIdentical(Object o) 137 Isolated 472 IS EMPTY. See EJB-QL IS NOT EMPTY. See EJB-QL

J J2EE Reference Implementation (RI) Client Jar 51 deploytool 32 JNDI name 52 New Enterprise Bean Wizard 37 server 31 verifier 47 java.net.Socket 625 java:comp/env 602, 603 subcontexts 604 JavaMail 621 javax.ejb.EJBContext 477 javax.ejb.EntityBean 312. See also EntityBean javax.ejb.SessionBean 182. See also SessionBean javax.ejb.SessionSynchronization 511 javax.jms.QueueConnectionFactory 611 javax.jms.Topic 449 javax.jms.TopicConnectionFactory 611 javax.mail.Session 611 javax.transaction.UserTransaction 471, 477 JAXP 621 JDBC 621 JMS 452, 621 JNDI 92, 602 bean’s special context 189, 602 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 EJB-QL. See EJB-QL local client view 145 local interface 148, 156 exceptions 159 vs. Remote interface 154 locking (database) 301 logging 535 lookup 116

MessageListener 452 message acknowledgement 458 methods afterBegin() 512 afterCompletion() 512 beforeCompletion() 512 begin() 476 create() 128, 274 create methods 159 ejbActivate() 183, 200, 204, 207, 309, 354

M

ejbCreate() 183, 195, 331, 333

Mandatory 492

ejbPostCreate() 334

Many-to-Many 380

ejbRemove() 213, 214, 216

message-driven beans 106, 437, 442

findByPrimaryKey() 274

ejbLoad() 354 ejbPassivate() 183, 200, 204, 207, 309

BMT 460

getCallerPrincipal() 587

CMT 460, 500

getEJBHome() 137

concurrent processing 444

getEJBMetaData() 129 getHandle() 137

694

index

the index getHomeHandle() 129 getPrimaryKey() 137 getRollbackOnly() 488 getStatus() 489 getUserTransaction() 476 isIdentical(Object o) 137, 141 remove() 137, 282 remove(Handle h) 129 remove(Object key) 129 remove methods 159 setRollbackOnly() 485 setSessionContext() 183

N narrow 120 PortableRemoteObject.narrow() 121 network transparency 65, 66 Never 492, 495 NoSuchEntityException 551, 552 NoSuchObjectException 551, 553 NoSuchObjectLocalException 551, 552, 553 NotSupported 492, 495 NOT IN. See EJB-QL

setSessionContext(SessionContext sc) 195 method permissions 578 581 union 580

O

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 affects return type 382 Many-to-Many 380 One-to-Many 380 One-to-One 380

P 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 path navigation 404 persistent field 313 virtual 315 point-to-point 451. See also queue; See also topic PortableRemoteObject.narrow() 121 primary key 332, 333 Principal 584 programmatic security 586, 589 programmatic transactions. See BMT programming restrictions 625 propagation transactions 474, 482 proxy. See stub publish/subscribe 451

R relationships 378, 394 unidirectional 391 relationship assignments 421 Remote 65 arguments 67, 72 Serializable 72 business interface 79 component interface 82 home interface 125 interface 78 PortableRemoteObject.narrow() 121 RemoteException 78 return values 67, 72 Serializable 72 vs. local interface 154

Q

RemoteException 78, 133, 537, 559

queries 406. See EJB-QL

Remote interface 78, 144

Remote home interface 125, 279 EJBHome 128

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 entity vs. session bean 283

run-as 591 RuntimeException 545

remove(Handle h) 129 remove(Object key) 129 RemoveException 548, 559 remove methods 159 Required 492 RequiresNew 492 resource manager connection factory 610 resource authorization 611 return values 67 Serializable 72 RMI 63 arguments 67 how its used by EJB 81 IIOP 90 PortableRemoteObject.narrow() 121 RemoteException 78 Remote object 65 return values 67 RMI-IIOP 90 rmic 90 skeleton 65, 67 stub 64 rmic 90 Role 584 role reference 589 rollback 473

S scalable stateless session beans 103 security App Assembler 574, 576 authentication 572 authorization 572 context propagation 592 declarative security 572 Deployer 583 identity 591 instance-level security 586 isCallerInRole() 587 Principal 584 programmatic security 586 roles 574 role definition 576 security identity 592 security mapping 590 security roles 574, 576 578 SELECT 265, 402, 406 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 session beans 182

client view exercise 165 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 OID for bean creation 194

entity CMP code annotation 319 entity lifecycle activity 324

passivation/activation 207

environment 626

removal 210

exceptions 561

stateless session bean 102, 222 creation OID for bean creation 227

exception exercise 562 exception scenarios 557 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 UserTransaction 484 write an entity bean 317 skeleton 65, 67 squeamish 86 stateful session bean 178 creation 179, 194, 196 Object Interaction Diagram (OID) for bean creation 194

T The Advice Guy 15 Tikibean Lounge BMT/CMT 501 EJBObject/bean 89 session bean/bartender 14 topics 450, 453 durable subscription 450

removal 210

topics and queues 450

SessionSynchronization 512

TransactionRequiredException 551, 552

stateless session transactions in 481 stateless session bean 102, 222 business methods 226 creation 224 Object Interaction Diagram (OID) for bean creation 227

TransactionRequiredLocalException 551, 552 TransactionRolledbackException 551, 552 TransactionRolledbackLocalException 551, 552 transactions 471, 473. See also commit; See also rollback; See also setRollbackOnly() Bean-managed transactions 476 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 getRollbackOnly() 488, 500

UserTransaction 476, 477 getStatus() 489

message-driven beans 460, 500 propagation 474, 482 SessionSynchronization 512 stateful session bean passivation 206 suspension 475, 483 transaction attributes 492 two-phase commit 473 unspecified transaction context 499

V vendor lock-in 5 verifier 47 virtual persistent fields 315

transaction attributes 492, 493, 498 attributes that require a transaction 494

Never 492, 495

W

NotSupported 492, 495

WHERE 403, 411, 412

Required 492

wildcard

Mandatory 492

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 getEJBLocalObject() getEJBObject()

getEJBLocalObject() getEJBObject() getPrimaryKey()

javax.ejb.MessageDrivenContext // adds no methods

java.rmi.Remote // no methods declared

javax.ejb.EJBHome getEJBMetaData() getHomeHandle() remove(Handle h) remove(Object PK)

javax.ejb.EJBObject getEJBHome() getHandle() getPrimaryKey() isIdentical(EJBObject o) remove()

javax.ejb.EJBLocalHome

javax.ejb.EJBLocalObject

remove(Object PK)

getEJBLocalHome() getPrimaryKey() isIdentical(EJBLocalObject o)

Interface summary java.io.Serializable // no methods declared

javax.ejb.Handle

javax.ejb.EnterpriseBean // no methods declared

getEJBObject()

javax.ejb.EntityBean ejbActivate() ejbLoad() ejbPassivate() ejbRemove() ejbStore() setEntityContext (EntityContext ctx) unsetEntityContext()

javax.ejb.HomeHandle getEJBHome()

javax.ejb.MessageDrivenBean

javax.ejb.SessionBean ejbActivate() ejbPassivate() ejbRemove() setSessionContext (SessionContext ctx)

ejbRemove() setMessageDrivenContext (MessageDrivenContext ctx)

Interface summary

javax.ejb.SessionSynchronization

javax.transaction.UserTransaction begin() commit() getStatus() rollback() setRollbackOnly() setTransactionTimeout(int seconds)

am... ut() is not on thfoereexthe eo im T on ti ac ns ra tT se e elapsed time be it lets you tunedeth ansaction has timed tr e th d ci de r ne Contai rolls it back. out, and automatically

afterBegin() afterCompletion( boolean committed) beforeCompletion()

javax.jms.MessageListener onMessage(Message message)