Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin

Overview

...

float:

...

right;

...

margin-left:

...

20px;

...

INLINE

<object width="400"

...

height="250"><param

...

name="movie"

...

value="http://www.youtube.com/v/aLx2jta96xU?fs=1&amp;hl=en_US"></param><param

...

name="allowFullScreen"

...

value="true"></param><param

...

name="allowscriptaccess"

...

value="always"></param><embed

...

src="http://www.youtube.com/v/aLx2jta96xU?fs=1&amp;hl=en_US"

...

type="application/x-shockwave-flash"

...

allowscriptaccess="always"

...

allowfullscreen="true"

...

width="400"

...

height="250"></embed></object>

...

This example shows how to create a Stateless session EJB using annotations. As stated in the "JSR 220: Enterprise JavaBeansTM,Version 3.0 - EJB Core Contracts and Requirements",

...

"Stateless session beans are session beans whose instances have no conversational state. This means that all bean instances are equivalent when they are not involved in servicing a client-invoked method. The term 'stateless' signifies that an instance has no state for a specific client."

...

What this means is quite simply that stateless beans are shared. They do in fact have state as you can assign values to the variables, etc. in the bean instance. The only catch is there are a pool of identical instances and you are not guaranteed to get the exact same instance on every call. For each call, you get whatever instance happens to be available. This is identical to checking out a book from the library or renting a movie from the video store. You are essentially checking out or renting a new bean instance on each method call.

With EJB 3.0, it's now possible to write stateless session bean without specifying a deployment descriptor; you basically have to write just a remote or local business interface, which is a plain-old-java-interface,

...

annotated

...

with

...

the

...

@Remote

...

or

...

@Local

...

annotation

...

the

...

stateless

...

session

...

bean

...

implementation,

...

a

...

plain-old-java-object

...

which

...

implements

...

the

...

remote

...

or

...

the

...

local

...

business

...

interface

...

and

...

is

...

annotated

...

with

...

the

...

@Stateless

...

annotation

...

This

...

example

...

is

...

the

...

"simple-stateless"

...

example

...

located

...

in

...

the

...

openejb-examples.zip

...

available

...

on

...

the

...

download

...

page.

...

...

The Code

In this example we develop a simple EJB 3 Stateless session EJB. Every stateless session bean implementation must be annotated using the annotation @Stateless or marked that way in the ejb-jar.xml

...

file.

...

Our

...

Stateless

...

bean

...

has

...

2

...

business

...

interfaces:

...

CalculatorRemote,

...

a

...

remote

...

business

...

interface,

...

and

...

CalculatorLocal,

...

a

...

local

...

business

...

interface.

...

A

...

minimum

...

of

...

one

...

business

...

interface

...

is

...

required.

...

Bean

...

In

...

EJB

...

3.0

...

session

...

beans

...

do

...

not

...

need

...

to

...

implement

...

the

...

javax.ejb.SessionBean

...

interface.

...

You

...

can

...

simply

...

annotate

...

it

...

as

...

@Stateless

...

if

...

you

...

want

...

it

...

to

...

be

...

a

...

stateless

...

session

...

bean.

...

Users

...

of

...

EJB

...

2.x

...

may

...

notice

...

the

...

bean

...

actually

...

implements

...

the

...

business

...

interfaces!

...

In

...

the

...

prior

...

version

...

of

...

EJB

...

implementing

...

the

...

remote

...

interface

...

(which

...

derives

...

from

...

javax.ejb.EJBObject)

...

in

...

your

...

bean

...

was

...

just

...

not

...

allowed.

...

Now

...

there

...

is

...

no

...

javax.ejb.EJBObject

...

requirement,

...

so

...

implementing

...

the

...

business

...

interfaces

...

is

...

standard

...

practice

...

for

...

EJB

...

3.0.

...

Local

...

business

...

interface

...

...

Local

...

interfaces

...

in

...

EJB

...

are

...

pass-by-reference

...

interfaces.

...

Meaning

...

that

...

normal

...

java

...

semantics

...

are

...

used

...

for

...

passing

...

arguments,

...

return

...

values

...

and

...

exceptions.

...

A

...

business

...

local

...

interface

...

can

...

be

...

any

...

plain

...

java

...

interface.

...

There

...

are

...

no

...

restrictions

...

on

...

the

...

method

...

arguments,

...

return

...

types,

...

or

...

throws

...

clauses.

...

Unless

...

specified

...

otherwise,

...

every

...

interface

...

your

...

bean

...

implements

...

(and

...

it's

...

parent

...

class

...

implements

...

and

...

so

...

on)

...

is

...

considered

...

to

...

be

...

a

...

local

...

business

...

interface.

...

You

...

can

...

use

...

the

...

@Local

...

annotation

...

to

...

explicitly

...

state

...

that

...

an

...

interface

...

is

...

a

...

local

...

interface,

...

but

...

this

...

is

...

not

...

required.

...

You'll

...

notice

...

that

...

in

...

EJB

...

3.0

...

the

...

Local

...

Business

...

Interface

...

of

...

a

...

stateless

...

session

...

bean

...

does

...

not

...

need

...

to

...

extend

...

from

...

javax.ejb.EJBLocalObject

...

and

...

does

...

not

...

need

...

a

...

javax.ejb.EJBLocalHome

...

interface

...

as

...

they

...

did

...

in

...

EJB

...

2.x

...

and

...

prior.

...

Per

...

the

...

vocabulary

...

of

...

the

...

EJB

...

spec,

...

interfaces

...

that

...

implement

...

javax.ejb.EJBLocalObject

...

or

...

javax.ejb.EJBLocalHome

...

are

...

considered

...

Component

...

Interfaces

...

and

...

the

...

plain

...

java

...

interface

...

above

...

is

...

considered

...

a

...

Business

...

Interface.

...

Remote

...

business

...

interface

...

...

Remote

...

interfaces

...

are

...

pass-by-value

...

interfaces.

...

Meaning

...

that

...

all

...

method

...

parameters,

...

return

...

values,

...

and

...

exceptions

...

are

...

serialized

...

on

...

every

...

call.

...

The

...

result

...

is

...

that

...

you

...

get

...

a

...

copy

...

of

...

the

...

original

...

object

...

and

...

not

...

the

...

original

...

object.

...

The

...

advantage

...

is

...

of

...

course

...

that

...

Remote

...

interfaces

...

can

...

be

...

used

...

to

...

invoke

...

an

...

EJB

...

across

...

a

...

network

...

in

...

a

...

client-server

...

fashion.

...

There

...

are

...

no

...

restrictions

...

on

...

the

...

Remote

...

interface

...

itself,

...

but

...

there

...

are

...

on

...

the

...

data

...

passed

...

in

...

and

...

out

...

of

...

the

...

remote

...

interface.

...

The

...

values

...

passed

...

into

...

a

...

method

...

or

...

returned

...

from

...

a

...

method

...

of

...

a

...

Remote

...

interface

...

must

...

be

...

serializable

...

.

...

It

...

is

...

fine

...

for

...

the

...

method

...

signature

...

to

...

be,

...

for

...

example,

...

"public

...

Object

...

myMethod(Object

...

myParam)"

...

as

...

long

...

as

...

the

...

value

...

passed

...

in

...

and

...

returned

...

implements

...

java.io.Serializable

...

.

...

As

...

stated

...

above,

...

the

...

Remote

...

Business

...

Interface

...

of

...

a

...

bean

...

can

...

be

...

any

...

plain

...

old

...

interface.

...

It

...

does

...

not

...

need

...

to

...

extend

...

javax.ejb.EJBObject,

...

it

...

does

...

not

...

need

...

a

...

javax.ejb.EJBHome,

...

the

...

methods

...

do

...

not

...

need

...

to

...

throw

...

javax.rmi.RemoteException,

...

and

...

the

...

bean

...

class

...

can

...

implement

...

it!

...

At

...

minimum

...

the

...

interface

...

must

...

be

...

annotated

...

with

...

@Remote

...

either

...

in

...

the

...

interface

...

itself

...

or

...

in

...

the

...

bean

...

class,

...

or

...

the

...

interface

...

must

...

be

...

declared

...

via

...

<business-remote>

...

in

...

the

...

ejb-jar.xml.

...

Writing

...

a

...

unit

...

test

...

for

...

the

...

example

...

Writing

...

an

...

unit

...

test

...

for

...

the

...

stateless

...

session

...

EJb

...

is

...

quite

...

simple.

...

We

...

need

...

just

...

to

...

write

...

a

...

setup

...

method

...

to

...

create

...

and

...

initialize

...

the

...

InitialContext,

...

and

...

then

...

write

...

our

...

test

...

methods

...

setUp

...

Test

...

the

...

local

...

business

...

interface

...

...

Test

...

the

...

remote

...

business

...

interface

...

...

Note

...

that

...

JNDI

...

names

...

for

...

Java

...

SE

...

clients

...

are

...

not

...

standardized

...

by

...

the

...

EJB

...

spec.

...

This

...

is

...

unfortunate

...

and

...

something

...

being

...

addressed

...

in

...

EJB

...

3.1.

...

The

...

default

...

schema

...

that

...

OpenEJB

...

uses

...

is

...

ejbName

...

+

...

interfaceType

...

(i.e.

...

Local,

...

Remote,

...

LocalHome,

...

RemoteHome),

...

so

...

in

...

our

...

example

...

"CalculatorImpl"

...

+

...

"Local"

...

and

...

"CalculatorImpl"

...

+

...

"Remote".

...

You

...

can

...

in

...

fact

...

change

...

this

...

default

...

to

...

be

...

absolutely

...

anything

...

you

...

want

...

including

...

interface

...

class

...

name,

...

ejb

...

class

...

name,

...

and

...

more.

...

Running

Running the example is fairly simple. In the "simple-stateless"

...

directory

...

of

...

the

...

examples

...

zip

...

,

...

just

...

run:

...

$

...

mvn

...

clean

...

install

...

Which

...

should

...

create

...

output

...

like

...

the

...

following.

...

...