0
Tải bản đầy đủ (.pdf) (75 trang)

Giới thiệu về công nghệ AOP và Java annotation

Một phần của tài liệu PHƯƠNG PHÁP HƯỚNG ĐỐI TƯỢNG VÀ PHÂN TÍCH THIẾT KẾ AN NINH HỆ THỐNG (Trang 60 -64 )

4.3 .Giải pháp cài đặt mối quan tâm an ninh

4.3.1. Giới thiệu về công nghệ AOP và Java annotation

Lập trình hướng khía cạnh,AOP (aspect oriented programming) là một phương pháp tiếp cận lập trình trong đó các mối quan tâm được chia tách riêng biệt và được đưa vào chương trình chính thơng qua các điểm giao (join point). AOP có rất nhiều ứng dụng trong

Phương pháp hướng đối tượng và phân tích thiết kế anh ninh hệ thống 57

lập trình hiện đại.

Cơng nghệ AOP cho phép chúng ta xen các xử lý ở một đơn thể ngoài (aspect module) vào trong luồng xử lý của một đơn thể khác. Việc trình bày đầy đủ về AOP nằm ngồi phạm vi luận văn này, nên chúng ta chỉ xem xét qua một ví dụ.

Trong một hệ thống ngân hàng, luồng xử lý chính của đơn thể chuyển tiền là:

1. kiểm tra số tồn

2. thực hiện trừ số ở tài khoản nguồn; và

3. thực hiện cộng số ở tài khoản đích

Một ví dụ mã chương trình là 4.1:

Ví dụ mã 4.1: Thực hiện chuyển khoản

1 void t r a n s f e r ( Account fromAcc , Account toAcc , i n t amount )

2 throws E x c e p t i o n {

3 i f ( fromAcc . g e t B a l a n c e ( ) < amount ) {

4 throw new I n s u f f i c i e n t F u n d s E x c e p t i o n ( ) ;

5 }

6 fromAcc . withdraw ( amount ) ;

7 toAcc . d e p o s i t ( amount ) ;

8 }

Tuy nhiên, bên cạnh luồng xử lý chính trên, có rất nhiều thao tác khác phải thực hiện, ví dụ đơn giản là ghi nhật ký, hoặc đảm bảo giao dịch không bị ngắt quãng. Ví dụ: sau khi thực hiện kiểm tra và trừ ở tài khoản nguồn thành công, đột nhiên hệ thống bị lỗi, khơng thể cộng ở tài khoản đích, kết quả là một số tiền bị mất ở tài khoản nguồn mà khơng thấy ở tài khoản đích.

Nếu sử dụng kỹ thuật lập trình bình thường, chúng ta phải xen vào các đoạn mã thực hiện giao dịch, quản lý giao dịch, và phục hồi giao dịch nếu gặp lỗi, như ví dụ 4.2.

Ví dụ mã 4.2: Thực hiện chuyển khoản có quản lý giao dịch

1 void t r a n s f e r ( Account fromAcc , Account toAcc , i n t amount )

2 throws E x c e p t i o n {

3 t r a n s a c t i o n M a n a g e r . b e g i n ( ) ;

Phương pháp hướng đối tượng và phân tích thiết kế anh ninh hệ thống 59

5 throw new I n s u f f i c i e n t F u n d s E x c e p t i o n ( ) ;

6 }

7 try{

8 fromAcc . withdraw ( amount ) ;

9 toAcc . d e p o s i t ( amount ) ; 10 }catch( E x c e p t i o n e ) { 11 t r a n s a c t i o n M a n a g e r . r o l l b a c k ( ) ; 12 } 13 t r a n s a c t i o n M a n a g e r . commit ( ) ; 14 }

Trong ví dụ mã 4.2, người lập trình phải tự lo việc thêm các đoạn quản lý giao dịch, và nếu người lập trình qn thì việc kiểm thử cũng rất khó để phát hiện ra lỗi này. Ngồi ra, để cho người lập trình thêm các mã quản lý giao dịch vào chương trình, thì ở mức phân tích và mức thiết kế, người phân tích, thiết kế phải đề cập ngay khía cạnh kỹ thuật này vào trong bản phân tích, thiết kế.

Lập trình hướng khía cạnh (AOP) cho phép ta giải quyết bài tốn quản lý giao dịch và các bài tốn tương tự, một cách tồn cục, mà khơng phải thêm vào các đoạn mã rải rác đâu đó trong chương trình. Xét về mặt nghiệp vụ chính của chương trình chuyển tiền, việc đảm bảo giao dịch thành công là một nhiệm vụ của hệ thống nền tảng (framework), chứ khơng phải của chương trình.

Để giải quyết việc quản lý giao dịch trên, ta sử dụng cơng nghệ AOP và đóng gói tất cả các lớp xử lý nghiệp vụ thành một giao dịch (transaction). Các lớp thể hiện nghiệp vụ sẽ kế thừa từ lớp AbstractBLogic (business logic) và lớp này sẽ khai báo giao dịch bằng annotation, như ví dụ mã 4.3.

Ví dụ mã 4.3: Định nghĩa lớp trừu tượng khai báo giao dịch

1 @ T r a n s a c t i o n a l ( r o l l b a c k F o r=j a v a . l a n g . E x c e p t i o n .c l a s s}

2 abstract c l a s s A b s t r a c t B L o g i c {

3 }

Như vậy, khi một lớp kế thừa từ lớp AbstractBLogic thì đối tượng của lớp đó đã được đặt vào bên trong một giao dịch. Và khi có một ngoại lệ (exception) xảy ra thì nền tảng quản

lý giao dịch sẽ tự động hủy giao dịch (rollback). Cụ thể ta có ví dụ mã 4.4.

Trong ví dụ mã 4.4, nội dung của mã khơng có gì thay đổi, ngồi việc kế thừa lớp xử lý giao dịch từ AbstractBLogic để giúp cho nền tảng AOP có thể xen vào các mã có thể xen vào các mã quản lý giao dịch.

Ví dụ mã 4.4: Thực hiện chuyển khoản quản lý giao dịch qua AOP

1 c l a s s B a n k T r a n s f e r B L o g i c extends A b s t r a c t B L o g i c {

2 public void e x e c u t e ( Account fromAcc , Account toAcc ,

3 i n t amount ) throws E x c e p t i o n {

4 i f ( fromAcc . g e t B a l a n c e ( ) < amount ) {

5 throw new I n s u f f i c i e n t F u n d s E x c e p t i o n ( ) ;

6 }

7 fromAcc . withdraw ( amount ) ;

8 toAcc . d e p o s i t ( amount ) ;

9 }

10 }

Với việc sử dụng kỹ thuật AOP, ta có thể xen các mối quan tâm an ninh vào các mã chương trình một cách nhẹ nhàng và có hệ thống hơn.

Một phần của tài liệu PHƯƠNG PHÁP HƯỚNG ĐỐI TƯỢNG VÀ PHÂN TÍCH THIẾT KẾ AN NINH HỆ THỐNG (Trang 60 -64 )

×