H. Giới thiệu LDAP và JNDI
1. Các khái niệm về Naming và Directory
Các chương trình Java làm cách nào có thể sử dụng dịch vụ đặt tên (Naming) và thư mục (Directory).
1.1 Định nghĩa Naming
Một nền tảng tạo thuận lợi cho bất kỳ hệ thống máy tính nào đó là Dịch vụ đặt tên (Naming Service) – nghĩa là với những cái tên kết hợp với những đối tượng và những đối tượng được tìm thấy dựa trên những cái tên của chúng. Khi sử dụng hầu hết bất kỳ hệ thống hoặc chương trình máy tính nào, chúng ta sẽ luôn đặt tên một đối tượng hoặc một cái gì khác.
Chẳng hạn, khi chúng ta sử dụng hệ thống thư điện tử (email). Để truy cập vào một tập tin trong máy tính, chúng ta phải cung cấp tên của nó. Một dịch vụ đặt tên cho phép chúng ta tìm kiếm một đối tượng được đưa bởi tên của nó.
Một chức năng chính của dịch vụ đặt tên là ánh xạ những cái tên quen thuộc với con người thành những đối tượng, như địa chỉ, định danh, hoặc các đối tượng cơ bản được sử dụng bởi các chương trình máy tính. Ví dụ, hệ thống cung cấp tên miền trên Internet (Internet Domain Name System – DNS) ánh xạ các tên máy (như www.sun.com) sang các địa chỉ IP (như 192.9.48.5) Một tập tin hệ thống ánh xạ một tên tập tin (ví dụ như C:\bin\autoexec.bat) thành một tập tin điều khiển mà một chương trình có thể sử dụng để truy xuất nội dung của tập tin. Hai ví dụ này cũng đã minh họa phương diện rộng lớn của sự lớn dần ở các dịch vụ đặt tên hiện tại – từ việc đặt tên một đối tượng trên Internet đến việc đặt tên một tập tin trên hệ thống tập tin cục bộ.
1.1.1 Tên (Names)
Để tìm kiếm một đối tượng trong một hệ thống đặt tên, chúng ta cung cấp cho nó một cái tên của của đối tượng. Hệt thống đặt tên quyết định cú pháp tên phải theo quy định. Thỉnh thoảng, cú pháp này được gọi là Quy ước đặt tên của hệ thống đặt tên.
Ví dụ, quy ước đặt tên của hệ thống tập tin Unix là một tập tin được đặt tên từ đường dẫn liên quan đến mục root của hệ thống tập tin, với mỗi thành phần trong đường dẫn được cách ngăn từ trái qua phải sử dụng ký tự xổ xuôi (―/‖). Tên đường dẫn trong Unix, ví dụ như /usr/hello – là tên cho một tập tin hello trong tập tin thư mục usr, nó được định vị trong root của hệ thống tập tin.
Theo quy ước đặt tên DNS thì gọi các thành phần trong tên của DNS là được xếp theo thứ tự từ phải sang trái và giới hạn bởi dấu chấm (―.‖). Vì vậy tên của DNS sales.Wiz.COM là tên của một phần tử DNS với cái tên sales – có quan hệ với phần tử DNS Wiz.COM. Phần tử DNS Wiz.COM – trong đó, phần tử có tên Wiz nằm trong phần tử COM.
Giao thức truy cập thư mục (Lightweight Directory Access Protocol – LDAP) đặt tên theo quy ước sắp xếp các thành phần từ phải sang trái, giới hạn bởi dấu phẩy (―,‖). Vì thế tên của LDAP như cn=Sunrise Love, o=Sun, c=VN là tên một phần tử LDAP cn=Sunrise Love, liên quan đến phần tử o=Sun, và o=Sun lại liên quan đến c=VN. LDAP có rất nhiều quy tắc mà mỗi thành phần của tên phải là một cặp tên/giá trị với cái tên và giá trị được cách ngăn bởi một dấu bằng (―=‖).
Sự kết hợp một cái tên với một đối tượng được gọi là một kết nối. Ví dụ, một tên tập tin được kết nối với một tập tin.
DNS chứa các kết nối mà chúng ánh xạ các tên máy đến các địa chỉ IP. Một cái tên LDAP được kết nối với một phần tử LDAP.
1.1.3 Tham chiếu (References) và địa chỉ (Adđresses)
Dựa trên dịch vụ đặt tên, một vài đối tượng không thể được lưu trữ một cách trực tiếp, một bản sao của đối tượng không thể được định vị bên trong dịch vụ đặt tên. Thay vào đó, chúng phải được lưu trữ bởi một tham chiếu; đó là, một con trỏ (pointer) hoặc tham chiếu (reference) đến một đối tượng được định vị bên trong dịch vụ đặt tên. Một tham chiếu là thông tin về cách để truy xuất một đối tượng. Nói cho đơn giản, nó là một thể hiện đầy đủ có thể được sử dụng để giao tiếp với đối tượng, trong khi bản thân đối tượng có thể chức nhiều thông tin trạng thái. Việc sử dụng tham chiếu, chúng ta có thể liên hệ với đối tượng và có được nhiều thông tin về đối tượng.
Ví dụ, một đối tượng máy bay có thể chứ danh sách các hành khách của chuyến bay và toàn bộ người lái và nhân viên trên máy bay, kế hoạch chuyến bay, nhiên liệu, trạng thái thiết bị, số chuyến bay và thời gian cất cánh. Ngược lại, một tham chiếu đối tượng máy bay có thể chỉ chứa số chuyến bay và thời gian cất cánh của nó. Tham chiếu là một thể hiện nhiều thông tin về đối tượng máy bay và có thể được sử dụng để có được thông tin thêm. Ví dụ như một đối tượng tập tin có thể chứa trạng thái của chiếc máy in, như là hàng đợi hiện tại và số lượng giấy trong khay giấy. Mặc khác, một tham chiếu đối tượng máy in có thể chỉ chứa thông tin làm cách nào để kết nối máy in, như là tên máy chủ của máy in và giao thức in.
Mặc dù nói chung một tham chiếu có thể chứa bất kỳ thông tin tùy ý nào, và hữu dụng khi thay thế nội dung của nó bằng địa chỉ (addresses) (hoặc các điểm cuối sự tương tác): chỉ định thông tin về cách truy xuất đối tượng.
1.1.4 Ngữ cảnh (Context)
Một context (ngữ cảnh) là một tập hợp các kết nối từ tên-đến-đối tượng. Mỗi context có một quy ước đặt tên tương ứng. Một context cung cấp một toán tử tìm kiếm (một giải pháp) trả về đối tượng và có thể cung cấp các toán tử như là cho việc kết nối đến các tên, hủy kết nối với các tên, và liệt kê tên các kết nối. Một cái tên trong một đối tượng context có thể được kết nối đến một đối tượng context khác (gọi là subcontext) có cùng quy ước đặt tên.
Chẳng hạn, một tập tin thư mục, như /usr, trong hệ thống tập tin Unix là một context.
Một tập tin thư mục có tên liên quan đến một tập tin thư mục khác được gọi là subcontext (một và người dùng Unix thay thế tên này bằng subdirectory). Đó là, trong một tập tin thư mục /usr/bin, thư mục bin là một subcontext của usr. Một ví dụ khác, một tên miền DNS, chẳng hạn như COM, là một context A của tên miền DNS có tên liên quan với một tên miền DNS khác ta gọi đó là một subcontext. Ví dụ, trong tên miền DNS Sun.COM, thì tên miền DNS Sun là một subcontext của COM.
Tóm lại, một phần tử LDAP, chẳng hạn như c=vn, là một context An của phần tử LDAP có tên liên quan đến một phần tử LDAP khác gọi là một subcontext. Ví dụ, trong một phần tử LDAP o=sun, c=vn, thì phần tử o=sun là subcontext của c=vn.
1.1.5 Các hệ thống đặt tên (Naming Systems) và không gian tên (Namespaces)
Một hệ thống đặt tên là một kết nối thiết lập các context trong cùng một kiểu (chúng có cùng quy ước đặt tên) và cung cấp một sự thiết lập chung cho các toán tử.
Giới Thiệu LDAP Ví dụ, một hệ thống thi hành DNS là một hệ thống đặt tên. Một hệ thống mà tương tác có sử dụng LDAP là một hệ thống đặt tên.
Một hệ thống đặt tên cung cấp một dịch vụ đặt tên (naming service) để người sử dụng nó thực thi các toán tử có liên quan đến việc đặt tên. Một dịch vụ đặt tên được truy xuất thông qua giao diện của chính nó. Ví dụ, DNS đưa ra một dịch vụ đặt tên để ánh xạ tên của các máy đến các địa chỉ IP. LDAP đưa ra một dịch vụ đặt tên để ánh xạ các tên LDAP đến các phần tử LDAP. Một hệ thống tập tin đưa ra một dịch vụ đặt tên để ánh xạ các tên tập tin đến các tập tin và các thư mục.
Một namespace (không gian tên) là tập hợp các tên trong một hệ thống đặt tên. Ví dụ, hệ thống tập tin Unix có một namspace chứa tất cả các tên của các tập tin và thư mục trong hệ thống tập tin đó. DNS namespace chứa tên của các tên miền DNS và các phần tử. LDAP namespace chứa các tên của các phần tử LDAP.
1.2 Định nghĩa Directory
Nhiều dịch vụ đặt tên được mở rộng với một dịch vụ thư mục (directory service). Một dịch vụ thư mục kết hợp các tên với các đối tượng và cũng cho phép các đối tượng như vậy có các thuộc tính (attributes). Vì thế, chúng ta không chỉ có thể tìm kiếm một đống tượng thông qua tên của nó mà còn có thể lấy được các thuộc tính của đối tượng đó hoặc tìm kiếm các đối tượng dựa trên các thuộc tính của nó.
Một ví dụ đó là dịch vụ thư mục của công ty điện thoại. Nó ánh xạ tên của một thuê bao đến địa chỉ và số điện thoại của anh ta. Một dịch vụ thư mục của một máy điện toán rất giống với một dịch vụ thư mục của công ty điện thoại, trong đó cả hai đều sử dụng lưu trữ thông tin như là số điện thoại và địa chỉ. Dịch vụ thư mục của máy điện toán có nhiều năng lực hơn, tuy nhiên, vì nó chỉ có thể trực tuyến và được sử dụng để lưu trữ một số thông tin khác nhau mà có thể được tùy chọn bởi những người dùng, các chương trình, thậm chí cả chính nó và các máy điện khác.
Một đối tượng thư mục (directory object) thể hiện một đối tượng trong một môi trường điện toán. Một đối tượng thư mục có thể được sử dụng, ví dụ, để thể hiện một máy in, một con người, một máy tính, hoặc một mạng lưới. Một đối tượng thư mục chứa các thuộc tính mô tả đối tượng mà nó muốn thể hiện.
1.2.1 Các thuộc tính (Attributes)
Một đối tượng thư mục có thể có các thuộc tính. Ví dụ, một máy in có thể được thể hiện bởi một đối tượng thư mục mà nó có các thuộc tính như tốc độ, độ phân giải, và màu sắc của nó. Một người dùng có thể được thể hiện bởi một đối tượng thư mục có các thuộc tính như địa chỉ e-mail của người dùng, các số điện thoại khác nhau, mã hòm thư bưu điện, và thông tin tài khoản máy tính.
Một thuộc tính có một tên thuộc tính (attribute identifier) và một tập hợp các giá trị thuộc tính (attribute values). Một tên thuộc tính là một từ vựng định danh cho một thuộc tính độc lập với các giá trị của nó. Ví dụ, hai tài khoản máy tính khác nhau có thể có một thuộc tính ―mail‖; ―mail‖ là tên của thuộc tính. Một giá trị thuộc tính là nội dung của thuộc tính.
Chẳng hạn như địa chỉ email, có thẻ có một tên thuộc tính là ―mail‖ và giá trị của nó là contact.xuan@gmail.com.
1.2.2 Thư mục và các dịch vụ thư mục
Một thư mục là một tập hợp kết nối của các đối tượng thư mục. Một dịch vụ thư mục
tính kết hợp với các đối tượng trong một thư mục. Dịch vụ truy xuất thông qua chính giao diện của nó.
Có rất nhiều ví dụ về các dịch vụ thư mục Dịch vụ thư mục Novell (Novell Directory Service – NDS) là một dịch vụ thư mục từ Novell cung cấp thông tin về nhiều dịch vụ nối mạng, như là các dịch vụ tập tin và in ấn. Dịch vụ thông tin mạng (Network Information Service – NIS) là một dịch vụ thư mục trên hệ điều hành Solaris để lưu trữ thông tin liên quan đến hệ thống, như là liên quan đến các bộ máy, các mạng lưới, các máy in, và người dùng.
Máy chủ thư mục SunONE là một dịch vụ thư mục có xu hướng chung cơ bản dựa trên chuẩn LDAP Internet.
1.2.3 Tìm kiếm (searches) và các bộ lọc tìm kiếm (Search Filters)
Chúng ta có thể tìm kiếm một đối tượng thư mục thông qua việc cung cấp cái tên của nó cho dịch vụ thư mục. Như một sự lựa chọn, nhiều thư mục, chẳng hạn đều cơ bản dựa trên LDAP, hỗ trợ cho việc tìm kiếm. Khi chúng ta tìm kiếm, chúng ta có thể cung cấp không chỉ cái tên mà cũng có thể là một câu truy vấn bao gồm cả một biểu thức logic do chúng ta chỉ định cho các thuộc tính mà đối tượng hoặc các đối tượng đó phải có. Câu truy vấn ấy được gọi là bộ lọc tìm kiếm (search filter). Thỉnh thoảng, cách tìm kiếm này còn được gọi là tìm kiếm đảo (reverse lookup) hoặc tìm kiếm nội dung cơ bản (content-based searching). Dịch vụ thư mục tìm kiếm và trả về các đối tượng thỏa mãn yêu cầu của bộ lọc tìm kiếm.
Ví dụ, chúng ta có thể truy vấn dịch vụ thư mục để tìm tất cả người dùng có thuộc tính
―age‖ lớn hơn 21 năm. Tương tự, chúng ta cũng có thể truy vấn nó để tìm tất cả các bộ máy mà địa chỉ IP của nó bắt đầu với ―192.113.50‖.
1.2.4 Sự kết hợp đặt tên (Naming) và các dịch vụ thư mục
Các thư mục thường sắp xếp các đối tượng của chúng theo cấu trúc phân tầng. Ví dụ, LDAP sắp xếp tất cả các đối tượng thư mục trong mô hình cây, gọi là cây thông tin thư mục (Directory Information Tree - DIT). Bên trong DIT, chẳng hạn như một đối tượng organization có thể chứa nhóm các đối tượng mà có thể chứa các đối tượng person. Khi các đối tượng thư mục được sắp xếp theo cách này, chúng đóng vai trò là các naming context hơn nữa là các kho chứa các thuộc tính.
1.3 Directory – Khả năng cho các ứng dụng Java
Dịch vụ thư mục là một thành phần năng động của mạng máy tính. Khi sử dụng một dịch vụ thư mục, chúng ta có thể đơn giản hóa các ứng dụng và sự điều hành chúng bằng cách tập trung hóa việc lưu trữ chia sẻ thông tin. Chẳng hạn như, ngôn ngữ lập trình Java để viết các ứng dụng thao tác trong một môi trường mạng lưới phát triển, thì khả năng để truy xuất các dịch vụ sẽ trở nên thiết yếu.
1.3.1 Truyền thống sử dụng thư mục (Traditinal Use of the Directory) Một ứng dụng có khả năng thư mục(directory-enabled) là một ứng dụng sử dụng một dịch vụ đặt tên hoặc thư mục. Các ứng dụng độc lập (application) và các ký sinh (applet) Java có khả năng thư mục, giống như bất kỳ chương trình khác hoạt động trên mạng, có thể sử dụng thư mục theo cách truyền thống, đó là, để lưu trữ và nhận các thuộc tính của các đối tượng thư mục. Ví dụ một chương trình Java Mail client có thể sử dụng thư mục như một danh bạ địa chỉ để truy lại các địa chỉ của người nhận thư. Một chương trình tác nhân chuyển đổi mail bằng Java có thể sử dụng nó để truy lại thông tin định tuyến mail. Và một chương trình lập lịch Java có thể sử dụng nó để truy lại các tùy chọn tham chiếu của người dùng.
Giới Thiệu LDAP Những ứng dụng có thể chia sẻ thành phần chung được cung cấp bởi thư mục. Việc chia sẻ này làm cho các ứng dụng được triển khai trên hệ thống, và thậm chí trên mạng, chặt chẽ hơn và dễ quản lý hơn nhiều. Ví dụ, cấu hình máy in và thông tin định tuyến mail có thể được lưu trữ trong thư mục để nó có thể được tái tạo và phân phối để sử dụng bởi tất cả các liên kết với máy in và các dịch vụ và chương trình có liên kết đến mail.
1.3.2 Thư mục là một đối tượng lưu trữ (Object Store)
Hơn nữa, việc sử dụng thư mục theo cách truyền thống, các ứng dụng Java cũng có thể sử dụng nó như là một cái kho cho các đối tượng Java, dành cho việc lưu trữ và truy tìm các đối tượng Java. Ví dụ, một chương trình chạy trên máy con điều khiển máy in có khả năng tìm kiếm một đối tượng máy in từ thư mục và gửi luồng dữ liệu đến đối tượng máy in để thực hiện việc in ấn.
1.4 Chú giải thuật ngữ
Bảng chú giải dưới đây liệt kê các thuật ngữ được giới thiệu trong phần này. Nó cũng chứa một số thuật ngữ sẽ được giới thiệu trong những phần sau trong tài liệu này.
Bảng H-1 : Chú giải thuật ngữ trong dịch vụ Thư mục
Thuật ngữ Chú giải
Address (Địa chỉ) Đặc tả của sự giao tiếp điểm cuối
alias (Bí danh)
Một đối tượng chứa tên của một đối tượng khác. Việc sử dụng các bí danh cho phép một đối tượng nào đó có thể đặt tên sử dụng khác nhau.
application resource file (Tập tin tài nguyên ứng dụng)
Một tập tin các thuộc tính tùy chọn có tên jndi.properties được tìm thấy trong classpath của application/applet sử dụng JNDI. Tất cả các thuộc tính chứa trong tất cả các tập tin tài nguyên ứng dụng trong classpath đều được thu thập và thêm vào môi trường ngữ cảnh ban đầu.
atomic name (Tên nguyên tử)
Một thành phần rất nhỏ của một tên, được định nghĩa bởi quy ước đặt tên của ngữ cảnh mà tên được kết nối trong đó.
Thuộc tính
Thông tin kết hợp với một đối tượng thư mục. Một thuộc tính bao gồm một cái tên và một tập hợp các giá trị cho thuộc tính.
Binding (Nối kết) Sự kết hợp một tên nguyên tử với một đối tượng composite name (Tên kết
hợp) Một cái tên mở rộng ra nhiều hệ thống đặt tên.
composite name
resolution (Phân giải tên kết hợp)
Tiến trình phân giải một cái tên mở rộng.