faculty of information technology © copyright uts faculty of information technology 2002 – ejb...

85
© Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Faculty of Information Technology Faculty of Information Technology Advanced Java programming (Java EE) Enterprise Java Beans (EJB) Chris Wong, Ryan Heise [based on prior course notes & the Sun J2EE tutorial]

Post on 19-Dec-2015

229 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-1

Faculty of Information Technology

Faculty of Information Technology

Advanced Java programming (Java EE)

Enterprise Java Beans (EJB)

Chris Wong, Ryan Heise

[based on prior course notes & the Sun J2EE tutorial]

Page 2: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-2

Faculty of Information Technology

Faculty of Information Technology

Enterprise Java Beans

• Today we will briefly cover Introduction to EJB– EJB basics– EJB Architecture– Session Beans– EJB Clients– EJB Development Process

Page 3: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-5

Faculty of Information Technology

Faculty of Information Technology

Java EE architecture

Page 4: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-6

Faculty of Information Technology

Faculty of Information Technology

EJB Introduction

• EJB is the Java EE server-side component model

• The component software model is based on the idea of creating reusable components that “plug in” to “containers”

• It addresses some important software development goals:– reuse– high level development focus– development automation via tools– simplified deployment

• JavaBeans, EJB and ActiveX/COM are examples of component models

Page 5: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-7

Faculty of Information Technology

Faculty of Information Technology

EJB Introduction

• Component models come in two basic flavours– client-side; and– enterprise

• Client-side component models such as JavaBeans are specialised to handle presentation and user-interface issues

• Enterprise component models such as Enterprise Java Beans are specialised to provide a framework for developing, deploying and executing distributed, transaction-aware middleware components

Page 6: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-8

Faculty of Information Technology

Faculty of Information Technology

EJB Introduction

• Component developers write component “building blocks” that implement business logic

• Application developers hook up these pre-built components into finished applications (which may be components themselves)

• This building block approach facilitates off-the-shelf reuse of code packaged as components

Page 7: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-9

Faculty of Information Technology

Faculty of Information Technology

Why EJB?

• EJB containers provide:– Reusability of components – Security– Resource management– Scalability – Load Balancing, Clustering– Fault tolerance, Error handling– Deployment in other environments – Persistence, Independence from specific databases

• With web applications & RMI, we have to program this.

Page 8: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-10

Faculty of Information Technology

Faculty of Information Technology

Enterprise Java Beans

• Today we will briefly cover– Introduction to EJB EJB Basics– EJB Architecture– Session Beans– EJB Clients– EJB Development Process

Page 9: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-11

Faculty of Information Technology

Faculty of Information Technology

EJB – Types of Beans

• There are 2 types of Enterprise Java Bean:

1. Session beans• Handle a conversation between a client and the server.• Each message in the conversation is a method in the

bean.

2. Message Driven beans• Handles messages from a client• Communication is via asynchronous message passing

rather than synchronous method calls.

Page 10: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-12

Faculty of Information Technology

Faculty of Information Technology

EJB – Types of Session Beans

There are 3 types of session bean:

1. Stateless- Maintains no conversational state

2. Stateful- Maintains conversational state

3. Singleton- Has a single instance shared by all clients.

Page 11: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-13

Faculty of Information Technology

Faculty of Information Technology

EJB Basics

• EJB interfaces and classes are defined in the javax.ejb package

• EJBs are configured and deployed in a similar manner to web applications – Packaged into a jar file– Optional XML deployment descriptor(s)

• META-INF/ejb-jar.xml• weblogic-ejb-jar.xml

Page 12: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-14

Faculty of Information Technology

Faculty of Information Technology

EJB Standards Evolution

The EJB specification is an evolving API• EJB 1.0 was originally defined as a Java extension in 1998,

including definitions for Session beans and (optional) Entity beans

• EJB 1.1 is the J2EE 1.2 was defined in December 1999 as part of the first J2EE platform specification. EJB 1.1 included:– Mandatory support for entity beans– Enhancements to the deployment descriptor, including support for

an XML format– Significant tightening of the specification to improve EJB-based

application portability

• EJB 2.0 is the J2EE 1.3 standard. – JMS (Java Message Service) integration with Message Driven beans– Improved support for container-managed persistence (CMP) – Support for RMI/IIOP protocol for network interoperability

• EJB 3.0 is the Java EE 5 standard (installed at UTS)– Significantly simplifed EJB development. Now use Java 5 annotations– Replaced Entity EJB with JPAEJB 3.1 is the Java EE 6 standard: pojo EJBs, singleton beans, portable JNDI

names.

Page 13: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-15

Faculty of Information Technology

Faculty of Information Technology

EJB Containers

• Containers provide services to deployed components so that component developers can concentrate on writing business logic instead of software infrastructure

• An EJB container is an environment in which Enterprise Java Beans execute. Its primary role is to serve as a buffer between EJBs and the outside world

• The container simplifies component development by providing services:– Transactions– Scalability (management of multiple instances)– Persistence– Security– Synchronisation– Distributed object invocation– Monitoring and management of EJB instances

Page 14: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-16

Faculty of Information Technology

Faculty of Information Technology

EJB Contract

• The services provided by the EJB container are defined by contracts between the container and the various kinds of EJB, for instance, the contract between a “stateless session bean” and the container.

• e.g.

- The container promises to invoke lifecycle methods on the bean at specified moments.- The stateless session bean promises not to maintain “state”.

Page 15: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-17

Faculty of Information Technology

Faculty of Information Technology

EJB and application servers

• We are using a Java EE application server

• Note that it has two different types of container:

– Web container (for servlets and JSPs)– EJB/Business-logic container (for EJBs)

• They are logically two separate "tiers"– In some cases they are implemented by two separate

products, e.g. Tomcat + JBoss– Each type of container provides different services

Page 16: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-18

Faculty of Information Technology

Faculty of Information Technology

EJB and application servers

Page 17: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-19

Faculty of Information Technology

Faculty of Information Technology

EJB Containers - services

• EJB Containers must provide the following services– Transaction management– Security services– Multiple instance support

Page 18: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-20

Faculty of Information Technology

Faculty of Information Technology

Container Services – Transactions

• Declarative transaction management:

– An application's use of transactions can be declared in the XML deployment descriptor, rather than having a programmer write code to manage transactions

– Less code to write– Less chance of programmer-generated errors– Allows container to manage resources efficiently

Page 19: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-21

Faculty of Information Technology

Faculty of Information Technology

Container Services – Security

• Declarative security management:

– An application's use of authentication (login) and confidentiality (encryption) can be declared in the XML deployment descriptor, rather than having a programmer write code to manage security

– Less code to write– Less chance of programmer-generated errors– Allows system administrator to manage user access

externally to the application code

Page 20: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-22

Faculty of Information Technology

Faculty of Information Technology

Container Services – Instances

• Management of multiple instances:

– EJBs are written as if they are single threaded classes being accessed by only one client

– A singleton bean is intended to be shared by all clients, but concurrency is still managed by the container (unless overridden).

– The EJB container must ensure that each client’s requests are serviced in a timely manner

Page 21: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-23

Faculty of Information Technology

Faculty of Information Technology

Container services - Instances

• In order to accomplish the goal of timely responses to client requests, the server may perform several tasks:

– Instance passivation – the temporary swapping of an EJB out to storage. If a container needs resources, it may choose to temporarily passivate a bean

– Instance pooling – the creation of a pool of bean instances, so that beans can be shared between multiple clients, rather than a new bean being created for every client request (not possible in the case of stateful session beans)

– Database connection pooling – the creation of a pool of database connections, so that connections can be shared between multiple beans, rather than a new connection being created every time the database is accessed

Page 22: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-24

Faculty of Information Technology

Faculty of Information Technology

Tasks containers perform (2)

– Optimised method invocations –the short-circuiting of method calls between two beans in the same container in order to avoid the overhead of a full-blown remote method call (this is done by the container, not by the EJBs themselves - not strictly true as local interfaces in EJB 2.0 achieve the same)

• Instance passivation is the only optimisation required by the EJB specification, none of the others are explicitly required

Page 23: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-25

Faculty of Information Technology

Faculty of Information Technology

Enterprise Java Beans

• Today we will briefly cover– Introduction to EJB– EJB Basics EJB Architecture– Session Beans– EJB Clients– EJB Development Process

Page 24: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-26

Faculty of Information Technology

Faculty of Information Technology

EJB Architecture

Remote/LocalInterface

business methods eg:- deposit()

- withdraw()

EJB container

client Implementation

Business logic

DBContainer servicesTransaction mgmt

securityinstance mgmt

JNDI lookup

Interceptors

filters

Page 25: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-27

Faculty of Information Technology

Faculty of Information Technology

EJB Architecture

• The client side contains:– the EJB interfaces needed to invoke business

methods on an EJB– internally generated proxy/stubs for maintaining

handles to the server-side objects

• The server side contains:– the instances of the actual EJB components– The EJB container maps calls from clients to EJB

instances (after the appropriate service management infrastructure code has been executed)

• RMI remote interface semantics are implied by the interfaces to EJBs

Page 26: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-28

Faculty of Information Technology

Faculty of Information Technology

EJB Architecture pieces (1)

• The primary application-specific elements of the EJB architecture shown in the diagram are:

• EJB Client: – Optionally use JNDI to look up home interfaces, and

use home and remote interfaces to utilise all EJB-based functionality.

– Dependency injection adds Home interface transparently

– EJB clients can also be external to the application server

Page 27: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-29

Faculty of Information Technology

Faculty of Information Technology

EJB Architecture pieces (2)

• EJB Remote interfaces (and Stubs): – EJB remote interfaces provide the business-specific

methods – Underlying stubs marshal remote interface requests

and unmarshal remote interface responses for the client

• EJB implementations: – implementations are the application components

implemented by developers to provide any application specific business logic.

– May also include lifecycle methods eg: Remove()

Page 28: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-30

Faculty of Information Technology

Faculty of Information Technology

EJB Architecture pieces (3)

• Interceptors– You can do "Aspect Oriented Programming" – Interceptor methods can override EJB business methods– Much like Servlet Filters.

• Container EJB implementations (Skeletons and Delegates): – The container manages the distributed communication

skeletons used to marshal and unmarshal data sent to and from the client.

– May also store EJB implementation instances in a pool.– May use delegates to perform service management

operations

Page 29: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-31

Faculty of Information Technology

Faculty of Information Technology

Enterprise Java Beans

• Today we will briefly cover– Introduction to EJB– EJB Basics– EJB Architecture Session Beans– EJB Clients– EJB Development Process

• Next lesson we will cover– Entity Beans– Message Driven Beans– EJB issues

Page 30: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-32

Faculty of Information Technology

Faculty of Information Technology

EJB 3.0

• Part of Java EE 5• Significantly simplifies EJB development• Use Java 5 annotations.

– Assumes common defaults for most infrastructure classes/methods

– Removes the need to develop separate Home/Remote interfaces

– You write your bean as a POJO (Plain Ol’ Java Object).– You put one of the following annotations before the

class declaration@Stateless Stateless session bean

@Stateful Stateful session bean

@Singleton Singleton session bean

@MessageDriven Message bean

Page 31: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-33

Faculty of Information Technology

Faculty of Information Technology

Session Beans

Session beans are:

• EJBs that perform actions on the enterprise system.

• Model a connection (session) with a single client

• “Controllers” for the system that are exposed to the client for manipulation

• “verbs” of the particular problem domain that they are implemented to solve

• Well suited to encapsulate coarse-grained “front line” service entry points into a system

Page 32: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-34

Faculty of Information Technology

Faculty of Information Technology

Entities

Entities are:

• Objects that encapsulate some data contained by the system

• Implemented as JPA Entities

• “Nouns” of a particular problem domain that they are implemented to solve

• Subject to CRUD (create, read, update, delete) operations

Page 33: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-35

Faculty of Information Technology

Faculty of Information Technology

Session & Entity Beans

BankTeller- deposit()

- withdraw()

BankManager- openAccount()

Account - acctnum = 1234

- getBalance()- setBalance()

Account - acctnum = 2345

- getBalance()- setBalance()

Account - acctnum = 3456

- getBalance()- setBalance()

EJB container

Session Beans("actions")

Entity Beans("data")

Client(e.g.servlet)

DBMS

Page 34: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-36

Faculty of Information Technology

Faculty of Information Technology

Session Beans

• Now we focus on session beans

• Session beans exist for the duration of one interaction with the client– stateless interaction (no state)– stateful interaction (remembers previous state)

• Session beans provide the "public" business logic methods of your application

• Session beans may be modelled on UML use cases or equivalent

Page 35: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-37

Faculty of Information Technology

Faculty of Information Technology

Session Beans

Session beans can be grouped into 2 distinct classifications:

• Stateless session beans: – No conversational state kept between client and bean– Typically pooled – so 1 bean may actually service 100's of

clients– Easy to cluster, no affinity between client and physical server

• Stateful session beans: – Keeps conversational state between client and bean– 1:1 between client and bean. So if 100 clients, need 100

beans.– Need to manage lifecycle – performance improved by

container "paging out" (Passivating) and reactivating beans

• Note: Session beans persist only for the life of the connection with the client – if the server crashes, the session bean dies

Page 36: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-38

Faculty of Information Technology

Faculty of Information Technology

Session Beans

• You need to create two files:

– Remote/Local interface (declares your business logic)– implementation class (method implementations)

• Let's start with a stateless session bean– the easiest kind

Page 37: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-39

Faculty of Information Technology

Faculty of Information Technology

EJB 3.0 stateless session bean

• Just plain old Java Objects! Eg: BankTeller:

@Remotepublic interface BankTeller {

public string sayHello(String name);}

@Stateless(name=“BankTeller”)public class BankTellerBean implements BankTeller {

public string sayHello(String name) {return “Hello, “ + name;

}}

Page 38: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-40

Faculty of Information Technology

Faculty of Information Technology

Stateless Bean – code notes

• @Remote indicates that the bean can be accessed via RMI-IIOP

• @Local indicates that this is just run within the same JVM

• @Stateless can have optional attributes to override defaults– eg:name == name of bean– beanInterface == name of bean class– mappedName == JNDI name of bean

Page 39: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-41

Faculty of Information Technology

Faculty of Information Technology

Simple lifecycle

Page 40: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-42

Faculty of Information Technology

Faculty of Information Technology

Lifecycle comments

• When bean created, you can OPTIONALLY have callback method defined for initialisation@PostConstructpublic void init() {

//initialise classes? }• When bean created, you can OPTIONALLY have callback method defined for initialisation@PreDestroy

public void close() {// close databases?

}

Page 41: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-43

Faculty of Information Technology

Faculty of Information Technology

Stateful Session Beans

• Stateful session bean is basically identical to a stateless session bean

• The difference? For stateful beans:– you should define some state, i.e. instance variables– inside your business methods, you can manipulate

the state (read and change the variable values)

• 1 instance per client

• Need to deal with more complex lifecycle

Page 42: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-44

Faculty of Information Technology

Faculty of Information Technology

Stateful beans – Lifecycle

Page 43: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-45

Faculty of Information Technology

Faculty of Information Technology

Stateful Beans – differences!

• Keep state – eg: via instance variable• Lifecycle tasks still optional. Extra callback methods

• @Init– Similar to @PostConstruct, but can have more than 1

init method.

• @PrePassivate– Use this to store/save conversational information eg:

to database

• @PostActivate– Use this to retrieve conversational information eg:

read from database

• @Remove– Use this to delete the bean – eg: drop conversational

state information

Page 44: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-46

Faculty of Information Technology

Faculty of Information Technology

Stateful Beans – how not to use

• Stateful session beans do NOT represent the data in your application– data is represented by JPA entities

– stateful session beans are transient – they come and go. Data is meant to be persistent

– if a server crashes unexpectedly, a stateful session bean will be destroyed with the crash (same for stateless session beans). Data is meant to be persistent.

Page 45: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-47

Faculty of Information Technology

Faculty of Information Technology

Session Beans – modelling

• When do you use stateless beans vs. stateful beans?

– In most cases, it depends on how you choose to model your application

– Consider the bank teller examples on the next two slides – one is stateful, one is stateless

Page 46: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-48

Faculty of Information Technology

Faculty of Information Technology

Stateful Scenario

BankTeller- deposit()

- withdraw()

int account = 1234

EJB container

Client(e.g.servlet)

create(1234)

deposit($100)

Page 47: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-49

Faculty of Information Technology

Faculty of Information Technology

Teller Example 1 – stateful

• Scenario: When you walk up to a bank teller, you tell him/her your account number. You can then perform any number of deposits and withdrawals with that teller, without having to tell him/her the account number again each time – he/she remembers it

• When you create() the BankTeller EJB, you supply: the account number

• When you call deposit() and withdraw(), you pass only one parameter: the amount

• When you call deposit() or withdraw(), it uses ("remembers") the account number that you specified at creation time

Page 48: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-50

Faculty of Information Technology

Faculty of Information Technology

Stateless Scenario

BankTeller- deposit()

- withdraw()

EJB container

Client(e.g.servlet)

create()

deposit(1234,$100)

Page 49: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-51

Faculty of Information Technology

Faculty of Information Technology

Teller Example 2 – stateless

• Scenario: When you walk up to a bank teller, you don't give him/her any information. You can perform any number of deposits and withdrawals, but each time, you must specify your account number. He/she does NOT remember your account number from one transaction to the next

• When you create() the BankTeller EJB, you supply: nothing

• When you call deposit() and withdraw(), you pass two parameters every time: account number and amount

Page 50: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-52

Faculty of Information Technology

Faculty of Information Technology

Stateless vs. stateful implications

• With the stateless teller, each time you perform a transaction, you can go to any teller– The teller you go to doesn't "remember" anything

about you, so you can go to a different one each time– EJB containers create a pool of stateless session

beans, and every time a client calls a method, that method is directed to any bean in the pool

• With the stateful teller, you must go back to the same teller each time ...– ... because that teller knows your account number. If

you go to a different teller, they won't know what your account number is

– EJB containers assign one stateful session bean to every client

– There is a one-to-one correspondence between clients and stateful session beans – no pooling!

Page 51: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-53

Faculty of Information Technology

Faculty of Information Technology

Enterprise Java Beans

• Today we will briefly cover– Introduction to EJB– EJB Basics– EJB Architecture– Session Beans EJB Clients– EJB Development Process

• Next lesson we will cover– Entity Beans– Message Driven Beans– EJB issues

Page 52: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-54

Faculty of Information Technology

Faculty of Information Technology

EJB Clients

• In the EJB architecture, the client undertakes the following tasks:1. Finding the bean 2. Calling the bean’s methods (call Remote interface

methods)3. Getting rid of the bean

• A client can be local (in same JVM as bean) – Eg: another EJB, Java class or web application

component running in the same application server

• or remote– Eg: a standalone Java application or a component

running in another application server

Page 53: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-55

Faculty of Information Technology

Faculty of Information Technology

1. Finding the bean

2 techniques:

1. Use Dependency Injection – this works only with Managed beans eg: Servlets, EJB. Container looks for the bean class– Eg: servlets, ejb's, etc

@EJB BankTeller teller;

CAUTION: Only works for servlets version 2.5!!

Does NOT work for JSP. See next page

Page 54: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-56

Faculty of Information Technology

Faculty of Information Technology

1. Finding the bean (2)

For non-managed clients– eg: Java Application, Java Beans or JSP's

1. Use JNDI - looks for the advertised name of the bean's interface.

BankTeller teller = (BankTeller)new InitialContext().lookup("BankTeller");

– JNDI name is vendor specific.Use the name & mappedName attribute on the EJB to define this

– Can also use XML deployment descriptor

Page 55: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-57

Faculty of Information Technology

Faculty of Information Technology

2. Calling the bean's methods

• Now the client has a remote interface, it can invoke the methods the bean has made public

– i.e. the methods defined in the Remote interface

teller.deposit(100);

Page 56: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-58

Faculty of Information Technology

Faculty of Information Technology

3. Getting rid of the bean

• Stateless session beans are automatically removed by the container at its discretion– no problem – they don't hold any state info

• Stateful session beans should be removed explicitly by the client by calling the method annotated with @remove– Container won't remove these automatically because

they contain valuable state information – your application needs to decide when it is finished with the state info

Page 57: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-59

Faculty of Information Technology

Faculty of Information Technology

Enterprise Java Beans

• Today we will briefly cover– Introduction to EJB– EJB Basics– EJB Architecture– Session Beans– EJB Clients EJB Development Process

Page 58: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-60

Faculty of Information Technology

Faculty of Information Technology

EJB Development Process

Checkpoint!• Until now we have considered:

– what EJBs are, what the different kinds are– what containers do and why they're a "good thing"– what session beans look like and how they're used

• Now we change focus and look at the EJB development process– same process for all kinds of EJBs

Page 59: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-61

Faculty of Information Technology

Faculty of Information Technology

EJB Development Steps

• 2 streams – server side and client side development

• Server-side development of EJBs is simpler than RMI– communications, state management, resource

allocation and thread management infrastructure coding provided by the container

• Similar for EJB Clients

Page 60: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-62

Faculty of Information Technology

Faculty of Information Technology

EJB Development Steps (1)

• 9 steps involved in server-side EJB development:

1. Create the remote interface- Defines business methods

2. Create the EJB implementation class- implements the bean

3. Compile the java code

Page 61: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-63

Faculty of Information Technology

Faculty of Information Technology

EJB Development Steps (2)

4. Write the Optional EJB deployment descriptors- create an ejb-jar.xml file and maybe others

5. Package the EJB into a JAR file- EJBs get packaged in JAR files

6. Compile the EJB stubs - use an EJB compiler tool

Page 62: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-64

Faculty of Information Technology

Faculty of Information Technology

EJB Development Steps (3)

OPTIONAL STEPS:– 7. Configure the application deployment descriptor

(optional) - deployment descriptor for the whole application, not the EJB

– 8. Package the EJB JAR into an EAR file (optional)- "applications" are packaged in EAR files

– 9. Deploy the EJB JAR or J2EE application EAR- deploy to the application server

Page 63: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-65

Faculty of Information Technology

Faculty of Information Technology

Client Development Steps

• 3 steps for writing EJB clients:

1. Establish the proper EJB client libraries – make available the correct versions of appropriate libraries for the client – JNDI, EJB, RMI/IIOP and possibly JMS and JDBC if required

1. Implement client code – create your client application using the EJB client libraries and your EJB client interfaces

1. Compile / package / deploy the client – as appropriate for the client type

Page 64: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-66

Faculty of Information Technology

Faculty of Information Technology

1. Create Remote interface

package bank;

import javax.ejb.*;

@Remote

public interface BankTeller {

public string sayHello(String name);

}

•(Same as previous example)

Page 65: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-67

Faculty of Information Technology

Faculty of Information Technology

2. Create EJB implementation

import javax.ejb.*;

@stateless(name=“BankTeller”)

public class BankTellerBean implements BankTeller {

public string sayHello(String name) {

return “Hello, “ + name;

}}

•(Same as previous example)

Page 66: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-68

Faculty of Information Technology

Faculty of Information Technology

3. Compile Java code

• javac –d . *.java

Page 67: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-69

Faculty of Information Technology

Faculty of Information Technology

4. Write EJB deployment desc.

• OPTIONAL: Standard deployment descriptor(META-INF/ejb-jar.xml)– EJB name– Java class names for remote interface, home

interface and bean implementation class– Whether bean is session or entity– For session beans, whether bean is stateful or

stateless

• Container-specific deployment descriptor(META-INF/weblogic-ejb-jar.xml)– For WebLogic stateless session beans, size of pool– JNDI name (name by which the bean is advertised to

clients)

Page 68: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-70

Faculty of Information Technology

Faculty of Information Technology

4a. ejb-jar.xml<?xml version="1.0"?><ejb-jar xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" version="3.0">

<enterprise-beans><session><ejb-name>BankTellerEJB</ejb-name><home>bank.BankTellerHome</home><remote>bank.BankTeller</remote><ejb-class>bank.BankTellerBean</ejb-class><session-type>Stateless</session-type><transaction-type>Container</transaction-type>

</session></enterprise-beans><assembly-descriptor>

<container-transaction><method>

<ejb-name>BankTellerEJB</ejb-name><method-intf>Remote</method-intf><method-name>*</method-name>

</method><trans-attribute>Required</trans-attribute>

</container-transaction></assembly-descriptor>

</ejb-jar>

Page 69: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-71

Faculty of Information Technology

Faculty of Information Technology

4b. weblogic-ejb-jar.xml

<?xml version="1.0"?>

<!DOCTYPE weblogic-ejb-jar PUBLIC '-//BEA Systems, Inc.//DTD WebLogic 6.0.0 EJB//EN' 'http://www.bea.com/servers/wls600/dtd/weblogic-ejb-jar.dtd'>

<weblogic-ejb-jar>

<weblogic-enterprise-bean>

<ejb-name>BankTellerEJB</ejb-name>

<stateless-session-descriptor>

<pool>

<max-beans-in-free-pool>100</max-beans-in-free-pool>

</pool>

</stateless-session-descriptor>

<jndi-name>ejb/BankTeller</jndi-name>

</weblogic-enterprise-bean>

</weblogic-ejb-jar>

Page 70: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-72

Faculty of Information Technology

Faculty of Information Technology

5. Package EJB as a JAR file

• Same concept as for WAR files– but EJBs are packaged in JAR files

• EJB deployment descriptors stored in a sub-directory called "META-INF"

• Directory structure in JAR must mirror Java package structure (as per normal Java rules)

jar cf ../MyEJB.jar *

Page 71: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-73

Faculty of Information Technology

Faculty of Information Technology

6. Compile EJB stubs

• Run appc (weblogic EJB compiler) on the EJB JAR file- this generates and compiles stubs and skeletons

java weblogic.appc MyEJB.jar

• Different development tools may have different ways of compiling the EJB code and generating stubs/skeletons

Page 72: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-74

Faculty of Information Technology

Faculty of Information Technology

Deploy

• You can now deploy

• if your client is not in same JAR file, then you need to have a copy of the bean interfaces in the classpath– eg: WAR file can contain the BankTeller.class in

the /WEB-INF/classes directory

• You can also put multiple bean JAR files and WAR files together to make a "Java EE Application" (EAR) archive

Page 73: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-75

Faculty of Information Technology

Faculty of Information Technology

7. Configure app deployment desc.

• We'll come back to this next session(see next slide for a brief outline)

• Suffice to say that this is an optional step, and for now, we're going to leave it out!

Page 74: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-76

Faculty of Information Technology

Faculty of Information Technology

8. Package app as an EAR file

• In J2EE terms, an "application" consists of:

– one or more WAR files• containing servlets and JSPs

– one or more JAR files• containing EJBs

• A collection of WARs and JARs that comprise a single application may be packaged in an EAR file– EAR = Enterprise Application Archive

• We'll come back to this next session

Page 75: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-77

Faculty of Information Technology

Faculty of Information Technology

10. Deploy

• Deploy your JAR file into the application server

• In WebLogic, either:– copy the JAR file into your “autodeploy" subdirectory– run the command line tool to deploy the file– upload the file via the management console

• Exactly the same process as deploying WAR files

• If all goes well, in the management console you should see:– a new EJB appear under the "Deployments > EJB" menu– a new entry appear in the JNDI tree

Page 76: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-78

Faculty of Information Technology

Faculty of Information Technology

EJB Development

• There are quite a few steps, but each is simple

• You will probably find it useful to create a short shell script / batch file to run the various commands (I use “ant” to do this)– what is “ant”? - a build tool similar to makefiles on

Unix

• The most common error is ...– ... typos in the XML deployment descriptor– Running appc will pick up many errors– Use an XML editor to reduce syntax errors

Page 77: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-79

Faculty of Information Technology

Faculty of Information Technology

Summary – EJB Part 1

• Reflect on how little code was required– only 2 Java files, an Interface and Implementation– plus 2 Optional deployment descriptors

• Hard part about EJB is understanding:– the J2EE architecture and how to model the real

world– how EJBs are invoked / loaded / etc.– what the container does

Page 78: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-80

Faculty of Information Technology

Faculty of Information Technology

Questions?

?

Page 79: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-81

Faculty of Information Technology

Faculty of Information Technology

Clustering

• EJB is specifically designed in mind for clustering

• Scalability

• Availability

• Load Balancing

• Failover/Migration

Page 80: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-82

Faculty of Information Technology

Faculty of Information Technology

Definition: Clustering

– A cluster is a group of Oracle WebLogic Server instances that work in coordination.

– Clustering provides:• High availability• Load balancing• Scalability

machine machine

domain

cluster

server

server

server

server

Adminserver

DNSRoundRobin

LoadBalancer

client

client

client

ProxyServerInternet

Page 81: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-83

Faculty of Information Technology

Faculty of Information Technology

Basic Cluster Architecture

• A basic cluster architecture combines static HTTP, presentation logic, business logic, and objects into one cluster.

domain

Firewall Cluster

server 1

Webcontainer

EJBcontainer

server 2

Webcontainer

EJBcontainer

Load Balancer

Page 82: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-84

Faculty of Information Technology

Faculty of Information Technology

Multitier Cluster Architecture

• The Web tier and the business logic with services can be separated into two clusters.

domain

Firewall Cluster A

server 1

Webcontainer

server 2

Webcontainer

Cluster B

server 3

EJBcontainer

server 4

EJBcontainer

Load Balancer

Page 83: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-85

Faculty of Information Technology

Faculty of Information Technology

Basic Cluster Proxy Architecture

• This is similar to the basic cluster architecture, except that static content is hosted on nonclustered HTTP servers.

domain

Cluster

server 1

EJBcontainer

server 2

EJBcontainer

Servlet/

JSP

Servlet/

JSP

Firewall

HTTP

Server

HTTP

Server

Plug-in

Plug-in

Load Balancer

Page 84: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-86

Faculty of Information Technology

Faculty of Information Technology

Multitier Cluster Proxy Architecture

• This is similar to the multitier cluster architecture, except that static content is hosted on nonclustered HTTP servers.

Cluster A

server 1

Webcontainer

server 2

Webcontainer

Cluster B

server 3

EJBcontainer

server 4

EJBcontainer

domain

Firewall

HTTP

Server

HTTP

Server

Plug-in

Plug-in

Load Balancer

Page 85: Faculty of Information Technology © Copyright UTS Faculty of Information Technology 2002 – EJB EJB-1 Advanced Java programming (Java EE) Enterprise Java

© Copyright UTS Faculty of Information Technology 2002 – EJB

EJB-87

Faculty of Information Technology

Faculty of Information Technology