Course #3036 Enterprise Java Beans Patrick W. McMichael Pillar Technology Group, LLC.

Post on 04-Jan-2016

212 views 0 download

Transcript of Course #3036 Enterprise Java Beans Patrick W. McMichael Pillar Technology Group, LLC.

Course #3036Enterprise Java Beans

Patrick W. McMichael

Pillar Technology Group, LLC

• Who are you? Where are you from? What is your role?

• Why are you here at this tutorial?

• What business challenges are you hoping J2EE can help with?

• Who are you? Where are you from? What is your role?

• Why are you here at this tutorial?

• What business challenges are you hoping J2EE can help with?

Your Expectations

My Expectations

NO head-nodding -- if in doubt, ASK!

DON’T be shy! I’m going to need your help this afternoon!

Think about how the concepts presented might be applied in your domain.

AgendaThe role of the containerBean BasicsA Closer Look…

– Entity Beans– Session Beans– Message Driven Beans

Bean Info You Shouldn’t Leave Home Without– JNDI– JNDI ENC– Transactions– Exceptions

Coming Soon to a Container Near You! (EJB 2.1/3.0)

eFlix Online Rental System

eFlix Online Rental System

7 Primary Services (Monson-Haefel)

• Concurrent access to system resources

• Transaction management

• Persistence

• Object distribution / Location transparency

• Naming / Object binding

• Security

• Asynchronous messaging

How have your apps depended on these services?

How have your apps depended on these services?

Tell Me About It!

Approach #1 -- The MACHO Way

with vi

by candlelight

on the last ounce of laptop battery juice

barefoot

using a dial-up connection

“I coded my app…”“I coded my app…”

Approach #2: The time-to-market way

How do you configure / manage these services?

Programmatically

Declaratively

UUM Example– intranet deployment– extranet deployment

Questions

What’s the point of using a J2EE container? What does it buy you?

What’s the advantage of declarative configuration of an app’s behavior vs. programmatic configuration?

EXAMPLE:

The Rental Manager EJB

EXAMPLE:

The Rental Manager EJB

Bean Basics

Break That Bean Down!

RentalManagerHome

RentalManager

RentalManagerBean

Developer Written Code vs. Generated Code

javac vs. EJB Compiler

WHY All These Classes?

Remember the primary services?

Example: “Going on a Date

Client Calls to Session/Entity Beans

Client

Home Stub

Remote / LocalHome Interface

Object Stub

Remote / Local Interface

EJB Server

EJB Container

Remote / LocalHome Interface

Remote / Local Interface

EJB Home

EJB ObjectBean Instance

The Special Case of the MDB

Hey You!

Remote vs. Local Interfaces

The expense of RMI, Serialization, etc.

Proprietary Optimizations

Planned Localization

Remote vs. Local Interfaces --Delegated Calls

Remote vs. Local Interfaces --Session Façade w/ Entity Beans

QuestionsWhich parts of an EJB does a developer have to

create?

What’s the point of the “egg yolk/eyeball” diagram?

What’s unique about MDB’s?

What’s the difference between remote and local interfaces?

When would you use one, the other, or both?

Entity BeansEntity Beans

Bean Types

Entity BeansEncapsulate key NOUN entities in the problem domain

eFlix Entity Bean Candidates

Persistence -- CMP vs. BMP

CMR -- introduced in EJB 2.0

EJB QL -- also brought in by the 2.0 spec

* (shameless plug for 3138…)

Entity Bean ExampleTitleHome -- Local Home Interface

– create methods

– find methods

– remove

Title -- Local “Business” Interface– getters

– setters

TitleBean -- Bean Implementation Class– ejbCreate counterparts to Home Interface

– lifecycle/callback method implementation

– getters/setters and the abstract persistence schema

Entity Bean CMR Example

Entity Bean Example -- EJB QL

EJB 2.0’s EJB QL provides a non-proprietary, declarative

way of mapping custom finders (i.e. not by primary key) to

their implementation.

findUnitsForTitleByStatus method on TitleUnitHome

– SELECT OBJECT(u) FROM TitleUnit AS u WHERE u.title.productNumber = ?1 AND u.status = ?2

Entity Bean Example -- EJB QL

SELECT OBJECT(u) FROM TitleUnit AS u WHERE

u.title.productNumber = ?1 AND u.status = ?2

– “TitleUnit” -- Abstract Schema Name

– u -- AS clause, object usage, references

– u.status -- drill down to field value

– u.title.productNumber -- carry across CMR objects

The Entity Bean Lifecycle

Entity Beans vs. Straight JDBCSimultaneous access to large volumes of entities -- POOL

EXAMPLE -- NEED MORE OR LESS WILLING VOLUNTEERS!

Simultaneous access to same data at the same time by multiple clients (potential blocking issues)

Optimistic Concurrency

DB Schema -- stable or still in flux?

Session Façade Pattern -- clients shouldn’t know or care if entity beans JDBC, JDO, Hibernate, etc. was used.

Session BeansSession Beans

Bean Types

Session BeansHandle things like...

– business logic– workflow

Come in two varieties– Stateless

– Stateful

Session Beans

Stateless Session Bean Lifecycle

Stateful Session Bean Lifecycle

Stateless Session Bean Advantages

NO Activation/Passivation

Instance Swapping between clients– fewer beans can service more clients!

Simple, Efficient Failover in a clustered environment

Session Bean ExampleTitleManager Home Interface

– create method

TitleManager Business Interface– business methods

TitleManager Bean Class

Session Façade Pattern– locateAvailableUnit method in façade -- more specific to a

business service– findUnitsForTitleByStatus method in Entity Bean Home (uses

EJB QL) -- more generalized

Message Driven BeansMessage Driven Beans

Bean Types

“First, a little background...”“First, a little background...”

Messaging Basics

JMS Messaging in Java --Point-to-Point

JMS Messaging in Java --Pub-Sub

Before MDBs...Session and Entity Beans were NOT designed to handle asynchronous processing of JMS messages.

What about synchronous processing?

– What triggers the processing? A client call?

– What type of receiving would be done?

• Endless blocking?

• Timed blocking?

• Non-blocking?

There simply were NO good options before MDBs!

MDB Message ProcessingAsynchronous -- senders/publishers of messages are decoupled from the processing of the messages.

Concurrent -- container-provided, multithreaded, concurrent message consumption

Automated -- No client trigger calls are needed because...

Client Calls to MDBs

The CONTAINER

IS

the client!

The MDB Lifecycle

Renting Out Titles --

RentalManagerBean

Renting Out Titles --

RentalManagerBean

Example 1a -- Publishing to a Topic

Renting Out Titles -- CustomerRentalWorkOrderMDB

Renting Out Titles -- CustomerRentalWorkOrderMDB

Example 1b --An Example Subscriber

onMessage -- CustomerRentalWorkOrderMDB &

CustomerRentalNotificationMDB

onMessage -- CustomerRentalWorkOrderMDB &

CustomerRentalNotificationMDB

Example 1c --Run It!

MDB Message ProcessingImplements MessageDrivenBeanImplements MessageListener

– EJB 2.1 allows other options (I.e. JAXM)

– This is why EJB 2.0 did NOT have MessageDrivenBean extend MessageListener

onMessage method (JMS)

The bean pool and MDBs

ejb-jar.xml

ejb-borland.xml

jndi-definitions.xml

QuestionsWhat are the 3 bean types?

Which was new to EJB 2.0? Why was it added?

What are the two types of session beans?

What are the peformance differences b/t stateful and stateless and why?

What’s an alternative to a Stateful session bean in a web application?

Bean Info You Shouldn’t Leave Home Without

Bean Info You Shouldn’t Leave Home Without

Does your head hurt yet?

JNDI Lookups of EJBsJava Naming and Directory Interface

– Object Binding– LDAP

Remote EJB Lookup Example -- RUN IT!– initialize method in TestRentalManager– InitialContext object– properties (parms vs. jndi.properties)– lookup(<JNDI Name>)– narrowing remote references (the joy of RMI)

JNDI ENC & Bean Resource Dependencies

JNDI ENCJNDI Environment Naming Context

– each EJB’s own “private Idaho” namespace

– relative to “java:comp/env”

– subcontexts recommended by spec (ejb, jdbc, jms, mail, url)

Example of JNDI ENC ref’s in RentalManager– local ejb ref’s (TitleManager, Payment Manager)

– DataSource for connections used in DAO class

– JMSConnectionFactory objects and Destinations

– Differences in lookups (JNDI vs. JNDI ENC, remote vs. local)

Transactions -- Title Rental Example

Process each title the customer wants to rent– find an available unit for the title– reserve the unit– determine the rental fee and factor into the running total

Create a rental record for each title that was reserved

Charge the customer for the rentals

Publish a JMS message to the Topic for further (asynchronous) processing

Transactions -- Title Rental Example

ACID Properties– Atomic unit of work

– Consistent state (DB, JMS Destinations)

– Isolation of work from other system activity

– Durable end result

Transactions -- Title Rental Example

Possible Failure points in workflow– 2/3 titles reserved, third is unavailable

– 3 titles reserved, rental records created, but charge to customer’s credit card fails

– All work up to the JMS publish works, but the message never hits the Topic

• no notification to customer• no work order to get product out the door

Transactions -- Declarative CMT

NotSupported -- “We don’t do that here.”

Supports -- “If you got one, cool, otherwise, who cares!”

Required -- “I need one, and if you don’t provide one, I’ll take care of business myself.”

RequiresNew -- “I don’t care if you have one or not. I want

my own!”

Mandatory -- “I want one, and you better give it to me!”Never -- “I don’t want one, and don’t even think of calling me

with one!”

rentOutTitlesrentOutTitles

Example 2 --Run It!

Exceptions -- Application Exceptions

Do NOT extend java.lang.RuntimeException– or subclasses like EJBException

Do NOT extend java.rmi.RemoteException or its subclasses

Do NOT automatically trigger a rollback by the container

A rollback can be initiated in code (setRollbackOnly -- ex. charging customer)

Exceptions -- System Exceptions

Any RuntimeException(s)

java.rmi.RemoteException or its subclasses

DO automatically trigger a rollback by the container

Exceptions logged by container

EJB instance is discarded– May be more or less transparent to the user– Depends on state (or lack thereof) of the bean– Depends on vendor provisions (i.e. BES stubs make things

VERY transparent in a clustered environment)

Exceptions -- RentalManager EJB

Application Exception -- rollback only set, exception rethrown

SQLException (System) converted to EJBException and thrown

“Coming Soon to a Container Near You!”“Coming Soon to a Container Near You!”

EJB 2.1 / 3.0

What’s New in EJB 2.1Better web services support

– web services endpoints for SLSBs -- easy access for external clients

– EJBs can tap into external web services more easily– ex. .NET and J2EE interoperability

Container-managed timer service via javax.ejb.TimedObject interface and the ejbTimeout method– Polling for events to trigger business logic– CRON or Autosys job replacement potential

What’s New in EJB 2.1

EJB QL enhancements– ORDER BY (ascending or descending)– AVG, MAX, MIN, SUM, COUNT, MOD

The door has been opened for MDBs to use messaging protocols other than JMS (i.e. JAXM)

What’s New in EJB 3.0http://www.jcp.org/en/jsr/detail?id=220

“It’s all about the beans, baby!”– Bye, bye interfaces– Hello annotations

Example:@Session public class MyEJBThreeOBean { public void youCanDoIt(boolean really) { ... } }

What’s New in EJB 3.0http://www.martinfowler.com/articles/injection.html

Dependency Injection vs. JNDI lookups

Example:@Session public class MyEJBThreeOBean {

private DataSource myDS;

@Inject private void setMyDS(DataSource theDS) { myDS = theDS; } public void methodCallingMyDAO() { ... Connection c = myDS.getConnection(); ... } }

If there’s time...

Deployment Issues (JARs, EARs, etc.)

JUnit w/ EJBs

Debugging Example

Profiling Example

Questions?

Thank You

3036Enterprise Java Beans

Please fill out the speaker evaluation

You can contact me further at …pmcmichael@pillartechnology.com