Dùng đối tượng sản sinh nhiều đối tượng (FACTORY OBJECT) Dùng đối tượng sản sinh nhiều đối tượng (FACTORY OBJECT) Bởi: Khoa CNTT ĐHSP KT Hưng Yên MÔ HÌNH XƯỞNG CHẾ TÁC ĐỐI TƯỢNG Cho đến xây dựng đối tượng chủ phảI đặt cho đối tượng tên.Đăng ký tên đối tượng với rmiregistry Điểm bất tiện rmiregistry phảI quản lý nhiều tên đối tượng bạn với tư cách nhà phát triển ứng dụng máy khách phảI nhớ tên đối tượng Bạn xây dựng đối tượng đăng ký đối tượng với rmiregistry Nhiêm vụ đối tượng dùng để tạo đối tượng khác.Một đối tượng vậy mô hình hướng đối tượng gọi factory object Khi muốn yêu cầu tham chiếu hay triệu gọi dối tượng từ máy chủ ,bạn cần nhớ tên đối tượng factory Sau lấy tham chiếu đối tượng factory bạn dùng để tạo dối tượng cần thiết Mô hình hoạt động đói tượng Factory 1/8 Dùng đối tượng sản sinh nhiều đối tượng (FACTORY OBJECT) CÀI ĐẶT ỨNG DỤNG FACTORY Ưng dụng ta tren máy chủ bao gồm hai đối tượng :News dùng cung cấp thông tin cho máy khách time dung để cung cấp thời gian hành Chúng ta không muốn đăng ký hai đối tượng với rmiregistry mà muốn đối tượng FactoryServer chịu trách nhiệm đứng trung gian giao tiếp với máy khách để cung cấp đối tượng news time Với yêu cầu ,chương trình xây dựng theo bước sau: Bước 1: Đặc tả giao tiếp đặt đối tượng timer Ví dụ: timer.java import java.rmi.*; import java.util.*; Public interface Timer extends Remote{ Public date getCurrentTime() throws RemoteException; } Ví dụ: Timerimpl.java import java.rmi.*; import java.util.*; public class TimerImpl implements Timer{ public date getCurrentTime() throws RemoteException{ System.out.println(Client request time); Return new date(); } } Timer ta đối tượng RMI, cung cấp phương thức getCurrentTime() gọi từ xa máy khách getCurrentTime() trả ngày hành máy chủ 2/8 Dùng đối tượng sản sinh nhiều đối tượng (FACTORY OBJECT) Bước 2:Đặc tả giao tiếp cài đặt đối tượng News Ví dụ: News.java import java.rmi.*; public interface News extends Remote{ public String gettodayNews() throws RemoteException; } Ví dụ: NewsImpl.java import java.rmi.*; public class NewsImpl implements News{ String newslist[]={“Sun released new java version 1.4 and Mobie”, “Microsoft annuonce Windows.Net 2003”, “Fujitsu Win Telcomunication Prọect” }; Static int index=0; Public String getTodayNews() throws RemoteException{ System.out.println(“client request news”); Index++; If(index>2) index=0; Return newslist[index]; } } News ta đối tương RMI, cung cấp phương thức getTodayNews() trae thông tin cập nhật getTodayNews()lấy thông tin từ mảng newslist[] Trong 3/8 Dùng đối tượng sản sinh nhiều đối tượng (FACTORY OBJECT) ứng dụng thực tế bạn cung cấp thong tin cho trình khách từ sở liệu hay nguồn tin Đối tượng News củ ta bạn tháy có khả cung cấp tin mà Bước 3:Đặc tả giao tiếp cài đặt dối tượng FacetoryService ví dụ: FacetoryService.java import java.rmi.*; public interface FacetoryService extends Remote{ public News createNews() throws RemoteException; public Times createTimes() throws RemoteException; } Ví dụ: FacetoryServiceImpl.java import java.rmi.*; import java.rmi.server.*; public class FacetoryServiceImpl implements FacetoryService{ News newobject=new NewsImpl(); Timer timerobject=new TimerImpl(); Public FacetoryServiceImpl(){ Try{ UnicastRemoteObject.exportObject(Newsobject); UnicastRemoteObject.exportObject(Timesobject); }catch(Exception e){ System.out.println(e); } 4/8 Dùng đối tượng sản sinh nhiều đối tượng (FACTORY OBJECT) } Public News createNews() throws RemoteException{ Return newsobject; } Public Timer createnews () throws RemoteException { Return timerobject; } } Trình khách giao tiếp với FactoryService gọi createNews () createtimer () để tạo đối tượng News Timer Phương thức khởi dựng FactoryService có nhiệm vụ kiến tạo để thẻ hai đối tượng đồng thời gọi UnicastRemoteObject () để thông báo khả triệu gọi từ xa News Timer cho máy ảo Java Bước 4: Xây dựng trình cài đặt đối tượng đăng ký FactoryService vói rmiregistry Ví dụ: Setup.java Import java.rmi.*; Import java.rmi.server.*; Public class Setup { Public static void main (String args []) throws Exception{ System.out.println(“Factory object created”); FactoryService obj=new FactoryServiceImpl (); UnicastRemoteObject.exportObject(obj); Naming.bind(“rmi://localhost/myfactory”,obj); } } 5/8 Dùng đối tượng sản sinh nhiều đối tượng (FACTORY OBJECT) Trình setup.Java thường lệchịu trách nhiệm thể đối tựơng FactoryService Đăng ký đối tượng với rmiregistry Trình khách muốn gọi News Timer cấn nhớ tên đăng ký FactoryService với miregistry myfactory Liên hệ với FactoryService trình khách sễ có tham chiếu để gọi đến News Timer Trình khách Client.java xây dựng bước sau: Bước 5: Xây dựng trình khách triệu gọi đối tượng máy chủ Ví dụ: Client.Java Import java.rmi.*; Import java.rmi.server.*; Public static voidmain (String ags{}) throws Exception{ FactoryService myfactory”); service=(Factoryservce) Naming.lookup(“mi://locahost/ News news=service.createNews(); Timer timer=service.createTimer(); System.out.println(“current”+timer.getcurrentTimer()); System.out.println(“We have new”+news.getTodaynews()); Thead.sleep(1000); System.out.println(“current”+timer.getcurrentTimer()); System.out.println(“We have new”+news.getTodaynews()); } } Nếu bạn thấy trình khách ta việc tham chiếu đến FactoryService hàm: FactoryServiceservice=(Factoryservice)Name.lookup(“rmi://localhost/ myfactory”); 6/8 Dùng đối tượng sản sinh nhiều đối tượng (FACTORY OBJECT) Có đối tượng service trình khách yêu cấud service cung cấp cho tham chiếu đến đối tượngcon News Timer sau: News news=service.createNews(); Timer timer=service.createTime(); Việc truy xuất News Timer diễn khó khăn Chương tình client ta gọi getcurrentTime(), geTodaysNew() để lấy hành tin máy chủ Bước 6: Biên dịch chạy chương trình Lưu tất mã nguồn vào thư mục C:\RMI\factory Chuyển vào thư mục đánh lệnh biên dịch sau: C:\RMI\Factory>javac*.java Do News, Timer FactoryService đối tượng phân tán nên ta cần phải tạo lớp trung gian Stub Skel cho chúng Bạn đánh giá biên dịch sau: C:\RMI\Factory>rmic Timerimpl C:\RMI\Factory>rmic NewsImpl C:\RMI\Factory>rmic FactoryServiceImpl Khởi động đăng ký rmiregisty C:\RMI\Factory>start rmiregisty Khỏi động trình đăng ký đối tượng FactoryService C:\RMI\Factory>Start java Setup Chương trình khách: C:\RMI\Factory>java clien Kết kết xuất máy khách Current Mon Jun 27 21:53:56 PDT 2003 We have news: Microft announce Windows 2003 7/8 Dùng đối tượng sản sinh nhiều đối tượng (FACTORY OBJECT) Current Mon Jun 27 21:53:57 PDT 2003 We have news: Fujitsu setup new factory in Vietnam Kết kết xuất máy chủ Lient request time Lient request news Lient request time Lient request news Mô hình xưởng chế tác đối tượng cách thức giao tiếp thông dụng mà sau bạn thấy Java đưa vào mô hình EJB {EntePrise Java Bean} tiếng phiên Java 1.2 trở Chúng ta nghiên cức EJB chương trình sau Lúc bạn xó dịp tham gia lại kỹ thuật 8/8 .. .Dùng đối tượng sản sinh nhiều đối tượng (FACTORY OBJECT) CÀI ĐẶT ỨNG DỤNG FACTORY Ưng dụng ta tren máy chủ bao gồm hai đối tượng :News dùng cung cấp thông tin cho... Naming.bind(“rmi://localhost/myfactory”,obj); } } 5/8 Dùng đối tượng sản sinh nhiều đối tượng (FACTORY OBJECT) Trình setup.Java thường lệchịu trách nhiệm thể đối tựơng FactoryService Đăng ký đối tượng với rmiregistry Trình... FactoryService hàm: FactoryServiceservice=(Factoryservice)Name.lookup(“rmi://localhost/ myfactory”); 6/8 Dùng đối tượng sản sinh nhiều đối tượng (FACTORY OBJECT) Có đối tượng service trình khách yêu cấud