Enterprise Java Bean là các thành phần công nghệ phía máy chủ dùng để đóng gói
lớp logic nghiệp vụ (business logic) và hổ trợ mạnh việc thực hiện các giao tác và bảo
mật. Enterprise Java Bean cũng có một tích hợp một ngăn xếp cho messaging, scheduling,
remote access, web service endpoints (SOAP and REST), dependency injection,
component life cycle,.vv. Ngoài ra, Enterprise Java Beans còn kết hợp với các công nghệ
khác của Java SE và Java EE như JDBC, JavaMail, JPA, Java Transaction API (JTA),
Java Messaging Service (JMS), Java Authentication and Authorization Service (JAAS),
Java Naming and Directory Interface (JNDI), and Remote Method Invocation (RMI).
Ngày nay Enterprise Java Beans là một cách đơn giản cho các việc phát triển các mô
hình lập trình Java phía máy chủ, giảm độ phức tạp trong khi mang lại khả năng tái sử
dụng và khả năng mở rộng tới các ứng dụng thương mại quan trọng. Tất cả những điều
đạt được này đều xuất phát từ một lớp java nguyên thủy(Plain old Java Object-POJO) sẽ
được triển khai vào một thùng chứa (container).
53 trang |
Chia sẻ: lvbuiluyen | Lượt xem: 5077 | Lượt tải: 4
Bạn đang xem trước 20 trang tài liệu Đề tài Enterprice Java Bean (EJB), để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Đại Học Quốc Gia Thành Phố Hồ Chí Minh
Trường Đại Học Công Nghệ Thông Tin
----------
BÁO CÁO GIỮA KỲ MÔN XỬ LÝ PHÂN BỐ
Đề Tài: Enterprice Java Bean (EJB)
- Giảng viên :
Th.s Nguyễn Trác Thức
- Sinh viên thực hiện :
Hoàng Văn Hà 09520074
Mai Văn Khải 09520133
Hồ Đức Lợi 09520162
Trần Trung Đức 09520067
TP.HCM, ngày 23 tháng 12 năm 2012
Lời Nói Đầu
Enterprise Java Bean là các thành phần công nghệ phía máy chủ dùng để đóng gói
lớp logic nghiệp vụ (business logic) và hổ trợ mạnh việc thực hiện các giao tác và bảo
mật. Enterprise Java Bean cũng có một tích hợp một ngăn xếp cho messaging, scheduling,
remote access, web service endpoints (SOAP and REST), dependency injection,
component life cycle,..vv. Ngoài ra, Enterprise Java Beans còn kết hợp với các công nghệ
khác của Java SE và Java EE như JDBC, JavaMail, JPA, Java Transaction API (JTA),
Java Messaging Service (JMS), Java Authentication and Authorization Service (JAAS),
Java Naming and Directory Interface (JNDI), and Remote Method Invocation (RMI).
Ngày nay Enterprise Java Beans là một cách đơn giản cho các việc phát triển các mô
hình lập trình Java phía máy chủ, giảm độ phức tạp trong khi mang lại khả năng tái sử
dụng và khả năng mở rộng tới các ứng dụng thương mại quan trọng. Tất cả những điều
đạt được này đều xuất phát từ một lớp java nguyên thủy(Plain old Java Object-POJO) sẽ
được triển khai vào một thùng chứa (container).
Chính vì vậy, nhóm chúng em sẽ tìm hiểu và trình bày về Enterprise Java Bean. Do
trong quá trình tìm hiểu ít tài liệu và gấp rút về thời gian nên có thể còn nhiều sai sót.
Mong nhận được góp ý của thầy và các bạn.
3 | T r a n g
Mục Lục
Bảng phân chia công việc nhóm ............................................................................................. 5
I. Message Driven Bean ......................................................................................................... 6
1.1. Một số khái niệm liên quan ........................................................................................... 6
1.1.1. Message .............................................................................................................. 6
1.1.2. Đồng bộ và bất đồng bộ ........................................................................................ 6
1.1.3. Hệ thống EMS – Enterprise Message System ........................................................... 7
1.1.4. Hệ thống JMS - Java Message Service (Producer) .................................................... 7
1.2. Message Driven Bean (Consumer) ................................................................................11
1.2.1. Giới thiệu ...........................................................................................................11
1.2.2. Chu kỳ của Message Driven Bean .........................................................................12
1.2.3. Consumer cho Topic Destination ...........................................................................13
1.2.4. Consumer cho Queue Destination ..........................................................................14
1.2.5. Producer cho Topic Destination ............................................................................14
1.2.6. Producer cho Queue Destination ...........................................................................16
II. JAVA PERSISTENCE API ................................................................................................17
2.1. JDBC và ORM ...........................................................................................................17
2.1.1. JDBC là gì? ........................................................................................................17
2.1.2. ORM là gì? .........................................................................................................17
2.2. JPA là gì? ..................................................................................................................18
2.3. Entity ........................................................................................................................19
2.3.2. Entity .................................................................................................................19
2.4. Persistence Context.....................................................................................................24
2.5. Entity Manager ..........................................................................................................25
2.5.1. Thao tác với Entity ..............................................................................................25
2.5.2. Persistence Unit ..................................................................................................27
2.6. Java Persistence Query Language .................................................................................27
2.6.1. JPQL là gì ..........................................................................................................27
2.6.2. Cấu trúc truy vấn JPQL ........................................................................................28
2.6.3. Các kiểu query ....................................................................................................30
III. Transaction trong EJB ....................................................................................................34
3.1. Transactions ..............................................................................................................34
3.2. Container – managed transaction ..................................................................................34
3.2.1. Khái niệm ...........................................................................................................34
3.2.2. Transaction attribute ............................................................................................36
3.2.3. Thiết lập transaction attribute ................................................................................38
3.3. Bean – managed transaction .........................................................................................40
3.3.1. Khái niệm ...........................................................................................................40
4 | T r a n g
3.3.2. Các method hỗ trợ ...............................................................................................41
3.3.3. Thiết lập transaction timeout với bean – managed transaction ...................................41
3.4. Xử lý exception ..........................................................................................................42
3.4.1. Trường hợp EJB với bean – managed transaction ....................................................42
3.4.2. Trường hợp EJB với container – managed transaction ..............................................42
IV. EJB Security .................................................................................................................43
4.1. Các khái niệm cơ bản ..................................................................................................44
4.1.1. Tổng quan ..........................................................................................................44
4.1.2. Các cơ chế áp dụng trong Security .........................................................................44
4.2. Mô hình J2EE Security ...............................................................................................45
4.3. JAAS Framework .......................................................................................................46
4.4. Security trên EJB ........................................................................................................50
V. Tài liệu tham khảo .............................................................................................................53
5 | T r a n g
Bảng phân chia công việc nhóm
stt Họ Tên thành viên Mã số sinh viên Công Việc
1 Hoàng Văn Hà 09520074 Tìm hiểu về JPA, Entity, JPQL
2 Hồ Đức Lợi 09520162 Tìm hiểu về EJB Security
3 Mai Văn Khải 09520133 Tìm hiểu về Message Driven Bean
4 Trần Trung Đức 09520067 Tìm hiểu về Transaction Processing
Mỗi thành viên tự chuẩn bị cho slide và phần demo của mình!
6 | T r a n g
I. Message Driven Bean
1.1. Một số khái niệm liên quan
1.1.1. Message
Khi một client gọi phương thức trên máy ở xa thì bản chất nó đã tạo ra một request
và thread/process của nó sẽ bị block lại để chờ response trở về và có thể làm trì hoãn
quá trình xử lý, điểu này làm cho hiệu suất của chương trình bị giảm và độ tin cậy
không cao.
Thay vì thế người ta đưa ra cơ chế giao tiếp bằng cách chuyển thông tin qua định
dạng dùng chung qua đối tượng trung gian và không cần mong kết quả trả về. Cơ chế
này đòi hỏi phải có đối tượng trung gian để nhận và chuyển message độc lập với việc
xử lý. Cơ chế này còn cho phép khả năng truyền message đến nhiều hơn một đối
tượng nhận cùng một lúc (broadcast). Cơ chế này có hạn chế đó là làm quá tải đối
tượng trung gian.
- Đối tượng theo định dạng giao tiếp dùng chung đó là message.
- Đối tượng trung gian đó là MOM – Message Oriented Middleware hay MQ –
Message Queue
Hỗ trợ cơ chế tương tự như DB với việc nhận và gửi message, đảm bảo toàn
vẹn dữ liệu, transaction và cân bằng cho việc gửi nhận dữ liệu
Nơi lưu trữ dữ liệu và tương tác với MOM có tên gọi là Destination
1.1.2. Đồng bộ và bất đồng bộ
- Đồng bộ (synchronous): giao tiếp đồng bộ sảy ra khi cả hai bên liên lạc trực tiếp
với nhau. Người nhận thông điệp xử lý và sau đó phải ngay lập tức gửi thông điệp
phản hồi lại cho người gửi để người gửi tiếp tục thực hiện công việc
7 | T r a n g
- Bất đồng bộ (asynchronous) sảy ra khi cả hai bên giao tiếp không liên hệ trực tiếp
với nhau. Người nhận xử lý thông điệp bất cứ khi nào nó nhận được và không cần
gửi thông tin phản hồi về lại cho người gửi.
1.1.3. Hệ thống EMS – Enterprise Message System
EMS cung cấp cơ chế gửi nhận message đồng bộ và bất đồng bộ. Người gửi gửi
message đến middleware, middleware tự chuyển message đến người nhận.
Hệ thống EMS có thể nhìn tương đương cuộc sống thực tế chính là hệ thống gửi
nhận SMS của chúng ta theo cách nhìn đó là điện thoại gửi tin nhắn cho nhau thông
qua tổng đài, và máy chúng ta nhận tin nhắn tự động là do tổng đài đưa tin nhắn đến
máy. Bên cạnh đó, người nhận tin nhắn không cần bật điện thoại tại thời điểm gửi.
Hệ thống EMS cũng giống tương tự hệ thống khác đó là email, cho phép lưu trữ
message và sau đó người dùng sử dụng account với quyền xác thực truy cập vào mail
server để lấy thông tin về message theo nghĩa chúng ta không gửi mail cho nhau mà
gửi thông qua object trung gian
1.1.4. Hệ thống JMS - Java Message Service (Producer)
Java Message Service (JMS) là một API cho phép truy cập vào hệ thống nhắn tin
bất đồng bộ. JMS cung cấp 2 môi trường lập trình là điểm-điểm (Point-to-Point) và
Xuất bản và đăng ký (publish-and-subscribe).
8 | T r a n g
- Mô hình Point-to-Point messaging dùng cho việc chuyển giao các thông điệp theo
kiểu 1-1, tức là mỗi client chỉ được gửi một thông điệp đến một server. Nó được
xây dựng dựa trên khái niệm message queue (hàng đợi thông điệp). Mỗi thông
điệp được gửi tới một hàng đợi được chỉ định; clients nhận các thông điệp từ hàng
đợi được thiết lập để giữ các thông điệp này. Hình sau chỉ cho chúng ta vài tình
huống trong cơ chế truyền thông điệp Point-to-Point.
Như chúng ta thấy trong hình trên, một hàng có thể có nhiều người gửi thông điệp
và có nhiều người nhận nhưng chỉ 1 người nhận được nhận một thông điệp trong
hàng đợi. Tuy nhiên, trong Point-to-Point model, client có thể chọn thông điệp mà
nó cho phép viếng thăm nhưng không lấy giá trị (peek).
- Mô hình Pub/Sub messaging dùng cho việc phát tán các thông điệp (one-to-many
broadcast). Nó được xây dựng trên khái niệm về chủ đề các thông điệp (message
9 | T r a n g
topic). Mỗi thông điệp được đăng (publish) lên 1 chủ đề (topic) sẽ được phát tán
cho tất cả các clients mà có đăng ký (subscibe) chủ đề này. Đối tượng Topic được
đóng gói trong 1 tên được chỉ định bởi nhà cung cấp dịch vụ. Điều này tương tự
như khái niệm newsgroups, user đăng ký chủ đề mà mình yêu thích, mỗi user sẽ
nhận được 1 bản copy của thông điệp đăng lên newsgroup mà mình đăng ký. Hình
sau chỉ cho chúng ta một số tình huống của cơ chế truyền thông điệp Pub/Sub.
Trong mô hình Pub/Sub, một JMS client có thể là 1 durable subscriber để có thể
ngắt kết nối và sau này kết nối lại để lấy các thông điệp mà mình đã đăng ký.
JMS API cung cấp tất cả mọi chức năng hỗ trợ tạo, thêm, xóa, gửi và nhận message.
Đích đến (Destination)
Message được gửi đến các điểm đến logic chứ không phải các điểm đến vật lý,
producer và consumer không biết nhau. Producer gửi message đến một đích đến
logic, nơi mà consumer đã đăng ký. Các máy chủ thông điệp chịu trách nhiệm cho
việc định tuyến các tin nhắn được gửi đến một địa điểm cụ thể cho consumer đăng
10 | T r a n g
ký. Có hai loại đích đến đó là Topic và Queue tương ứng với 2 mô hình (Đã trình
bày ở trên)
Cấu hình cho Destination
- Topic Destination
Tạo một file xml trong thư mục deploy của JBOSS (…\server\default\deploy).
Tên file nên kết thúc với -service.xml
Nội dung của file lưu giữ têm của topic destination.
Ví dụ : file: deploy\myTopic-service.xml
<mbean code="org.jboss.mq.server.jmx.Topic"
name="jboss.mq.destination:service=Topic,name=myTopic">
myTopic
jboss.mq:service=DestinationManager
- Queue Destination
Tạo một file xml trong thư mục deploy của JBOSS (…\server\default\deploy). Tên
file nên kết thúc với -service.xml
Nội dung của file lưu giữ têm của topic destination.
Ví dụ : file: deploy\myQueue-service.xml
<mbean code="org.jboss.mq.server.jmx.Queue"
name="jboss.mq.destination:service=Queue,name=myQueue">
myQueue
jboss.mq:service=DestinationManager
11 | T r a n g
1.2. Message Driven Bean (Consumer)
1.2.1. Giới thiệu
Message-Driven bean (MDB) là một component nhẹ nhàng được sử dụng để
giao tiếp thông qua tin nhắn (Ví dụ như email hoặc tin nhắn IM). Trong MDB, dịch
vụ gửi tin ở trong chế độ không đồng bộ vì người dùng không yêu cầu có kết quả ngay
lập tức
MDB có thể thực thi bất kỳ loại tin nhắn nào. Thông thường nhất, chúng thực thi
kỹ thuật Java Message Service (JMS).
MDB có những đặc điểm sau đây :
- Một thực thể của MDB không lưu lại dữ liệu hoặc trạng thái của cuộc trò truyện
cho một client cụ thể.
- Một MDB duy nhất có thể xử lý các tin nhắn từ nhiều client.
- Chúng không đại diện cho dữ liệu chia sẻ trực tiếp trong cơ sở dữ liệu, nhưng
chúng có thể truy cập và cập nhật dữ liệu này.
- Một MDB chỉ có một lớp đối tượng, không giống với session bean, client không
truy xuất MDB qua giao diện (interface).
- Chúng không có các interface từ xa hoặc cục bộ để xác định các truy cập của
client.
Sơ đồ sau sẽ cho ta thấy quy trình làm việc của một MDB
12 | T r a n g
MDBs thực thi hai interface
- javax.jms.MessageListener
- javax.ejb.MessageDrivenBean
cứ mỗi lần Message được xử lý bởi MDB, hàm onMessage(…) của lớp thực thi sẽ
được gọi. message được gửi bởi client sẽ được xem như là tham số đầu vào của hàm.
Hàm ejbRemove() và hàm setMessageDrivenBeanContex(…) được sử dụng bởi
contener để thông báo bean transaction trong các bean trạng thái với contener.
1.2.2. Chu kỳ của Message Driven Bean
MDBs có chu kỳ sống tương tự như stateless session beans. MDBs hoặc là ở trong
trạng thái “Không tồn tại” hoặc ở trong trạng thái “pooled”. Điều này cho phép
container đến các thực thể pool cùng nhau và cho hiệu suất tốt hơn.
13 | T r a n g
1.2.3. Consumer cho Topic Destination
file: hellomsg/MyTopicMessageBean.java
package hellomsg ;
import javax.jms.* ;
import javax.ejb.* ;
@MessageDriven(activationConfig={
@ActivationConfigProperty(
propertyName="destination",
propertyValue="myTopic")
,
@ActivationConfigProperty(
propertyName="destinationType",
propertyValue="javax.jms.Topic")
})
public class MyTopicMessageBean implements MessageListener{
public void onMessage(Message message) {
System.out.println("MESSAGE RECIEVED....!!!") ;
}
}
14 | T r a n g
1.2.4. Consumer cho Queue Destination
file: hellomsg/MyQueueMessageBean.java
1.2.5. Producer cho Topic Destination
file: TopicClient.java
package hellomsg ;
import javax.jms.* ;
import javax.ejb.* ;
@MessageDriven(activationConfig={
@ActivationConfigProperty(
propertyName="destination",
propertyValue="myQueue")
,
@ActivationConfigProperty(
propertyName="destinationType",
propertyValue="javax.jms.Queue")
})
public class MyQueueMessageBean implements MessageListener{
public void onMessage(Message message) {
System.out.println("MESSAGE RECIEVED....!!!") ;
}
}
15 | T r a n g
import javax.naming.* ;
import javax.jms.* ;
public class TopicClient {
public static void main(String[] args) {
try {
//1. Lấy một tham chiếu đến môi trường JNDI
InitialContext ctx = new InitialContext() ;
//2. Lấy một tham chiếu đến JMS connection factory
ConnectionFactory cf = (ConnectionFactory)
ctx.lookup("ConnectionFactory") ;
//3. Lấy một tham chiếu đến destination topic
Topic myTopic = (Topic) ctx.lookup("myTopic") ;
//4. Tạo một kết nối với máy chủ JMS được cung cấp
Connection conn = cf.createConnection() ;
//5. Tạo ra một thread để liên lạc
Session session = conn.createSession(false,
Session.AUTO_ACKNOWLEDGE) ;
//6. Tạo ra một đối tượng message producer
MessageProducer producer = session.createProducer(myTopic) ;
//7. Tạo một text message
TextMessage msg = session.createTextMessage() ;
msg.setText("Hello from the Topic Client") ;
//8. Gửi message
producer.send(msg) ;
//9. Đóng kết nối
conn.close() ;
}
catch(Exception e) {
e.printStackTrace() ;
}
}
}
16 | T r a n g
1.2.6. Producer cho Queue Destination
file: QueueClient.java
import javax.naming.* ;
import javax.jms.* ;
public class QueueClient {
public static void main(String[] args) {
try {
//1. Lấy một tham chiếu đến môi trường JNDI
InitialContext ctx = new InitialContext() ;
//2. Lấy một tham chiếu đến JMS connection factory
ConnectionFactory cf = (ConnectionFactory)
ctx.lookup("ConnectionFactory") ;
//3. Lấy một tham chiếu đến destination queue
Queue myQueue = (Queue) ctx.lookup("myQueue") ;
//4. Tạo một kết nối với JMS server được cung cấp
Connection conn = cf.createConnection() ;
//5. Tạo ra một thread để liên lạc
Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
//6. Tạo ra một đối tượng message producer
MessageProducer producer = session.createProducer(myQueue) ;
//7. Tạo một text message
TextMessage msg = session.createTextMessage() ;
msg.setText("Hello from the Queue Client") ;
//8. Gửi message
producer.send(msg) ;
//9. Đóng kết nối
conn.close() ;
}
catch(Exception e) {
e.printStackTrace() ;
}
}
}
17 | T r a n g
II. JAVA PERSISTENCE API
2.1. JDBC và ORM
Trong phần này chúng ta sẽ so sánh sự giống và khác nhau giữa công nghệ JDBC
và công nghệ ORM. Cả 2 công nghệ này đều dùng để lưu trữ CSDL vào kho lưu trữ
lâu dài để dùng về sau.
2.1.1. JDBC là gì?
JDBC là từ viết tắt cho Java Database Connectindentification variableity, là
một tập các Java API dùng cho việc truy xuất vào các cơ sở dữ liệu quan hệ từ
chương trình Java. Java API cho phép lập trình viên có thể thực thi các công lệnh
SQL để lấy, truy vấn, lưu trữ dữ liệu từ database.
JDBC cho phép nhanh chóng phát triển các ứng dụng Java nhỏ có sử dụng
CSDL. Lập trình viên phải viết code để kết nối đến CSDL sử dụng Connection
S