ejb

33
EJB Introduction & Session Bean Đào Anh Tuấn – [email protected]

Upload: phan-the-duy

Post on 26-Oct-2014

37 views

Category:

Documents


6 download

TRANSCRIPT

Page 1: EJB

EJBIntroduction & Session Bean

Đào Anh Tuấn – [email protected]

Page 2: EJB

EJB Introdution – Định nghĩa

•Enterprise JavaBeans (EJB) is a platform for building portable, reusable, and scalable business applications using the Java programming language.

•From a developer’s point of view, an EJB is a piece of Java code that executes in a specialized runtime environment called the EJB container, which provides a number of component services

Page 3: EJB

• Reusable: For example, you can implement the credit card–charging module as an EJB component that may be accessed by multiple applications

• Main strength: Multithreading

Page 4: EJB

Các dịch vụ EJB hỗ trợ

Page 5: EJB

Vai trò EJB trong mô hình layers

Page 6: EJB

Vị trí của EJB

Page 7: EJB

EJB Types:

•Consists of three types:▫Session Beans▫Message-Driven Beans▫Entity Beans

•Trong đó Session và Message-Driven Beans đảm nhiệm vai trò ở tầng Business, Entity Beans đảm nhiệm vai trò ở tầng Persistence

Page 8: EJB

J2EE Container• EJB chỉ có thể thực thi trong các EJB Container• J2EE container cung cấp cho người dùng nhiều dịch vụ cao cấp

khác nhau• Trong phạm vi môn học: Sử dụng server JBoss

Page 9: EJB

Bussiness Logic with Session Bean• Một ứng dụng thường bao gồm rất nhiều nghiệp vụ:

Kiểm tra tài khoản, rút tiền, xuất hóa đơn …• Session Bean đóng vai trò cài đặt các chức năng nghiệp

vụ cho ứng dụng.• Nói một cách đơn giản: Session bean bao gồm một tập

các hàm cho phép client truy xuất để hoàn thành một công việc nào đó.

• Các client có thể là một desktop application, jsp/servlet hoặc có thể là một ứng dụng .NET truy xuất theo cơ chế web service

• Các hàm của session bean có thể được truy xuất từ xa, không nhất thiết phải nằm trên máy cục bộ -> ứng dụng phân tán (distributed)

Page 10: EJB

Advantages:

Một số điểm mạnh khi dùng session bean:•concurrency and thread safety: có thể xử lý

nhiều client cùng lúc mà không cài đặt các cơ chế đặc biệt (do container quản lý)

• remote invocation: có thể được triệu gọi từ xa• transaction and security management

Page 11: EJB

Cấu trúc một session bean:

•Gồm 2 phần: Bean interfaces và bean implementation class.

•Client không được phép truy xuất trực tiếp đến implementation class mà phải truy xuất thông qua interface.

• Interface sẽ triệu gọi hàm tương ứng của implemtation class và trả kết quả cho client.

Page 12: EJB

Ví dụ

•Hình ảnh một session bean hỗ trợ người dùng tham gia đấu giá: gồm 2 phần▫ interface▫ implementation class

Page 13: EJB

Phân loại Session Bean

•Chia làm 2 loại:▫Stateless: Không lưu trữ bất kỳ thông tin nào từ

phía client▫Stateful: Lưu giữ thông tin (hay còn gọi là state)

của client

Page 14: EJB

Ví dụ minh họa

•Xây dựng một stateless session bean hỗ trợ việc cộng hai số lớp (vài trăm chữ số - lớp BigInteger trong Java)

•Hàm cung cấp cho user triệu gọi từ xa có dạngBigInteger add (BigInteger a, BigInteger b)

Page 15: EJB

Xây dựng Interface

•Có 3 loại interface:▫Local: Client và Bean nằm trên cùng một JVM▫Remote: Client có thể nằm ở xa Bean (khác máy

tính)▫Web Service: Triệu gọi theo cơ chế web service

•Khai báo các hàm “cam kết” sẽ hỗ trợ cho user

Page 16: EJB

Ví dụ về remote service

•Sử dụng annotation @Remote (nếu là local interface sẽ sử dụng @Local)

•Chỉ khai báo hàm

import java.math.BigInteger;import javax.ejb.Remote;@Remotepublic interface AdderRemote {

BigInteger add(BigInteger a, BigInteger b); }

Page 17: EJB

Local Interface:

•Cũng chỉ khai báo hàm

import java.math.BigInteger;import javax.ejb.Local;

@Localpublic interface AdderLocal {

BigInteger add(BigInteger a, BigInteger b); }

Page 18: EJB

Stateless Bean class:

•Là nơi cài đặt hàm cụ thể:

•@Stateless• Implements các

interface(s)•Một session bean

có thể chọn chỉ có remote/local interface hoặc cả 2.

import javax.ejb.Stateless;

@Statelesspublic class AdderBean implements AdderRemote, AdderLocal {

public BigInteger add(BigInteger a, BigInteger b) { return a.add(b); } }

Page 19: EJB

Life Cycle

•Stateless: Do không lưu trữ thông tin của client, một stateless session bean có thể phục vụ bất kỳ client nào.

•Container tạo sẵn một số instance và đặt trong POOL

•Số lượng beans có thể ít hơn số client

Page 20: EJB

Lifecycle - Stateless•Stateless beans chỉ có 3 trạng

thái:•Bean chưa được tạo ra•Container tạo ra các beans và

đặt vào pool (idle beans)•Khi có 1 client triệu gọi, lấy

bean ra khỏi pool, thực thi lệnh (busy)

•Nếu client không có nhu cầu sử dụng -> trở về pool (idle)

Page 21: EJB
Page 22: EJB

Các hàm callback

•Có 2 trường hợp đặc biệt:•Hàm cần gọi sau khi bean vừa được khởi tạo:

Dùng ký hiệu @PostConstruct trước khai báo hàm

•Hàm cần gọi trước khi bean được hủy: Dùng ký hiệu @PreDestroy trước khai báo hàm

•Khi không có nhu cầu sử dụng, các beans được đặt trong POOL. Số lượng beans trong POOL sẽ được Container duy trì ở mức hợp lý

Page 23: EJB

Ví dụ

Page 24: EJB

Life Cycle – Stateful Session Beans

• Mỗi khi có 1 client triệu gọi, sẽ phải phát sinh một session bean ứng với client đó.

Page 25: EJB

Các chứng năng phát sinh•Passivation: Khi số lượng beans quá nhiều,

container có nhu cầu cất các beans ứng với các client đã lâu không liên lạc lại với container vào đĩa cứng

•Activation: Khi các client này liên lạc lại với container, phải phục hồi bean từ đĩa cứng trở lại bộ nhớ

•Remove: Khi client ngắt hoàn toàn liên lạc với container, hủy session bean ứng với client đó vì không thể sử dụng lại.

Page 26: EJB
Page 27: EJB
Page 28: EJB

Các hàm callback

•@PostConstruct•@PreDestroy•@PrePassivate•@PostActivate•@Remove (không phải hàm call back): khi gọi

hàm được đánh dấu remove, client báo cho container biết mình không có nhu cầu sử dụng nữa và bean sẽ bị hủy.

Page 29: EJB

Các luật:

•a session bean must have at least one business interface

•The session bean class must be concrete. You cannot define a session

bean class as either final or abstract since the container needs to

manipulate it.

•You must have a no-argument constructor in the bean class

•Business method names must not start with “ejb.”

•You must define all business methods as public, but not final or static

•If you are exposing a method in a remote business interface of the EJB,

then make sure that the arguments and the return type of the method

implement the java.io.Serializable interface

Page 30: EJB

Xây dựng client

•Gọi session bean từ servlet:Các bước:•Sử dụng JNDI để lookup Session bean Interface•Gọi hàm của bean Interface•Container sẽ tự động gọi hàm tương ứng của

bean class. Client không bao giờ tiếp xúc trực tiếp với bean class

Page 31: EJB

Ví dụ:

•Quá trình lookup: Mặc định chuỗi lookup làBeanName/remote hoặc BeanName/local

try { Properties properties = new Properties(); properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); properties.put(Context.PROVIDER_URL, "localhost:1099"); Context ctx = new InitialContext(properties); AdderLocal test=(AdderLocal)ctx.lookup("AdderBean/local");

Page 32: EJB

Lưu ý:

• Import các gói cần thiết• Import package chứa các interface của ejb

import java.util.*;import javax.naming.*;import ejb.*;

Page 33: EJB

Gọi hàm từ interface

Context ctx = new InitialContext(properties); AdderLocal test=(AdderLocal)ctx.lookup("AdderBean/local"); BigInteger a=new BigInteger("12345");BigInteger b=new BigInteger("56576");BigInteger c=test.add(a,b);out.println("c="+c);