1 / 18

דוגמא ל Service ב Java (עם (tomcat

דוגמא ל Service ב Java (עם (tomcat. תכנות מתקדם 2 89-211 תרגול מספר 8 תשס"ט 2008-2009. אליהו חלסצ'י. לעתים נרצה לבנות תוכניות שרצות ברקע, ללא התערבות ישירה שלנו, המספקות לנו שירות מסוים. גיבוי קבצים, סריקת וירוסים, שירותי הדפסה ועוד.

doris
Download Presentation

דוגמא ל Service ב Java (עם (tomcat

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. דוגמא ל Service ב Java(עם (tomcat תכנות מתקדם 2 89-211תרגול מספר 8 תשס"ט 2008-2009 אליהו חלסצ'י

  2. לעתים נרצה לבנות תוכניות שרצות ברקע, ללא התערבות ישירה שלנו, המספקות לנו שירות מסוים. גיבוי קבצים, סריקת וירוסים, שירותי הדפסה ועוד. לשירותים אלו, המוכרים כ Services במערכת Windows וכ Daemons במערכת Unix, יש קשר הדוק למערכת ההפעלה. בכל מעה"פ יש דרך מימוש שונה לשירותים אלו. הקדמה

  3. תוכנית java רצה מתוך ה JVM, וככזו אין לה יכולת לרוץ כ service בכוחות עצמה. על כן יש להריץ תוכנית native שרצה כ service, ומאפשרת להריץ את ה JVM ואת תוכנית ה java שלנו מתוכה. בשיעור היום נלמד כיצד באמצעות Tomcat של Apache נוכל להריץ כל תוכנית java כ Service ב Windows. מתוך הדוגמא ב http://blog.platinumsolutions.com/node/234 בשיעור הבא נלמד כיצד להריץ Daemon ב Ubuntu. הקדמה

  4. מתבצעת קריאה ל StartServiceCtrlDispatcher עם טבלת services, כל service וה main שלו, הוא יעביר בקשות אל השירותים השונים וייפסק כאשר כל השירותים תמו.לכל main מתבצעת קריאה ב thread חדש. ה Service רושם את ה Handlers שלו ע"י קריאה ל RegisterServiceCtrlHandler. ה StartServiceCtrlDispatcher קורא לפונקציות ה handlers בתגובה לפקודות ה SCM. כעת יכול ה Service לטפל בבקשות שהגיעו מה client. כיצד נוצר Service Main Thread Service Thread RegisterServiceCtrlHandler Main Pipe toSCM Initalize StartServiceCtrlDispatcher Proces client requests Connectionsto serviceclients Pausehandler Servicehandler table Handler functions

  5. Tomcat למעשה מבצע את כל העבודה הזו עבורנו, ומאפשר לנו להריץ כל תוכנית java כ Service תחת windows. אופן פעולתו: ירשום את עצמו כשירות יפעיל את ה JVM שבתוכו ה JVM יטען את ה class. (או jar) שבחרנו להריץ כ service כשתינתן הפקודה להתחיל - תופעל המתודה שהגדרנו להפעלת ה class. (מתודה בסגנון public static void method(String args[])) ה class. יופעל עד שיסתיים או עד שתינתן פקודה להפסקתו יצירת Service ע"י tomcat

  6. ניצור פרויקט java חדש ובו את המחלקה MyService. serviceInstance הוא מופע סטטי של המחלקה. stopoed הוא דגל בוליאני שיציין האם השירות הופסק. המתודהwindowServiceתהיה זו שתוגדרלהפעיל או להפסיקאת השירות מתוךtomcat. תקבל ארגומנטstart/stop תוכנית לדוגמא publicclass MyService { // static instance of the service class privatestatic MyService serviceInstance = new MyService(); // flag - if service instance has stopped privatebooleanstopped = false; // the method from which tomcat will start/stop the service publicstaticvoid windowsService(String args[]) { String cmd = "start"; if(args.length > 0) cmd = args[0]; if("start".equals(cmd)) serviceInstance.start(); elseserviceInstance.stop(); }

  7. המתודה start תפעיל את השירות. בדוגמא נדפיס למסך שהשירות הופעל, בכל דקה נדפיס שהוא מתבצע ולבסוף שהסתיים. המתודה stop תדליק את stopped ותצא מה wait אם הופעל. תוכנית לדוגמא // starts the service instance publicvoid start() { stopped = false; System.out.println("My Service Started "+ new java.util.Date()); while(!stopped) { System.out.println("My Service Executing "+new java.util.Date()); synchronized(this) { try { this.wait(60000); // wait 1 minute } catch(InterruptedException ie){} } } System.out.println("My Service Finished " + new java.util.Date()); } //Stops this service instance publicvoid stop() { stopped = true; synchronized(this) { this.notify(); } } }

  8. כדי להפעיל תוכנית זו כשירות נצטרך להעתיק את קובצי ה exe של tomcat. tomcat6.exe, tomcat6w.exe נמצאים במיקום של tomcat תחת bin נעתיק אותם אל תיקיית ה bin שבפרויקט שלנו בדוגמא d:\newWorkspace\ServiceExample\bin נשנה להם את השמות ל myServicew.exe ו myService.exe בהתאמה. כדי שנזהה אותם מאוחר יותר במנהל המשימות. הפעלת ה service

  9. ניצור את התיקייה logs שאותה נגדיר כזו שאליה ייכתב לוג השירות + העברה של ה standard output ניצור קובץ run.bat שיפעיל לנו את השירות. הקובץ יכיל הרצה של myService ו myServicew עם פרמטרים שמהווים הגדרות. כל הפרמטרים ייכתבו באותה השורה עם הפקודה. myService זהו השירות עצמו. myServicew זהו ה GUI להפעלה \ הגדרות. הפעלת ה service

  10. הפעלת ה service run.bat cd bin myService.exe //IS//MyService --Install=D:\newWorkspace\ServiceExample\bin\myService.exe --Description="My Java Service" --Jvm=auto --Classpath=D:\newWorkspace\ServiceExample\bin --StartMode=jvm --StartClass=MyService --StartMethod=windowsService --StartParams=start --StopMode=jvm --StopClass=MyService --StopMethod=windowsService --StopParams=stop --LogPath=D:\newWorkspace\ServiceExample\logs --StdOutput=auto --StdError=auto myServicew //MS// כניסה לתיקייה bin והפעלתהשירות myService.exe האופציה //IS//MyService קיצור של install service הערך MyService מציין אתשם השירות במנהל המשימות שורה אחת

  11. הפעלת ה service run.bat cd bin myService.exe //IS//MyService --Install=D:\newWorkspace\ServiceExample\bin\myService.exe --Description="My Java Service" --Jvm=auto --Classpath=D:\newWorkspace\ServiceExample\bin --StartMode=jvm --StartClass=MyService --StartMethod=windowsService --StartParams=start --StopMode=jvm --StopClass=MyService --StopMethod=windowsService --StopParams=stop --LogPath=D:\newWorkspace\ServiceExample\logs --StdOutput=auto --StdError=auto myServicew //MS// Install – נכניס את ה pathהמלא של ה service כדי שיידעמהיכן להריצו. Description – התיאור שלו. שורה אחת

  12. הפעלת ה service run.bat cd bin myService.exe //IS//MyService --Install=D:\newWorkspace\ServiceExample\bin\myService.exe --Description="My Java Service" --Jvm=auto --Classpath=D:\newWorkspace\ServiceExample\bin --StartMode=jvm --StartClass=MyService --StartMethod=windowsService --StartParams=start --StopMode=jvm --StopClass=MyService --StopMethod=windowsService --StopParams=stop --LogPath=D:\newWorkspace\ServiceExample\logs --StdOutput=auto --StdError=auto myServicew //MS// Jvm – היכן נמצא jvm.dllהאחראי על הרצת ה jvm מתוךהשירות עצמו. הערך auto יציין למערכת לחפשלבד היכן הקובץ נמצא. Classpath – הפנייה ל pathהיכן שנמצא קובץ ה class של הפרויקט שלנו. שורה אחת

  13. הפעלת ה service run.bat cd bin myService.exe //IS//MyService --Install=D:\newWorkspace\ServiceExample\bin\myService.exe --Description="My Java Service" --Jvm=auto --Classpath=D:\newWorkspace\ServiceExample\bin --StartMode=jvm --StartClass=MyService --StartMethod=windowsService --StartParams=start --StopMode=jvm --StopClass=MyService --StopMethod=windowsService --StopParams=stop --LogPath=D:\newWorkspace\ServiceExample\logs --StdOutput=auto --StdError=auto myServicew //MS// Startmode עם הערך jvmמציין שברצוננו להשתמש בjvm הפנימי כדי להריץ את הservice שלנו. StartClass – מציין אתהמחלקה בפרויקט האחראית על הרצת ה service. StartMethod – מציין את המתודה שדרכה נפעיל את התוכנית שלנו כ service. StartParm – הארגומנטלהפעלה, בחרנו start בהתאמהלמה שכתבנו בקוד. שורה אחת

  14. הפעלת ה service run.bat cd bin myService.exe //IS//MyService --Install=D:\newWorkspace\ServiceExample\bin\myService.exe --Description="My Java Service" --Jvm=auto --Classpath=D:\newWorkspace\ServiceExample\bin --StartMode=jvm --StartClass=MyService --StartMethod=windowsService --StartParams=start --StopMode=jvm --StopClass=MyService --StopMethod=windowsService --StopParams=stop --LogPath=D:\newWorkspace\ServiceExample\logs --StdOutput=auto --StdError=auto myServicew //MS// אותן האפשרויות כדי להגדירכיצד לעצור את השירות, הפעםעם הפרמטר stop. שורה אחת

  15. הפעלת ה service run.bat cd bin myService.exe //IS//MyService --Install=D:\newWorkspace\ServiceExample\bin\myService.exe --Description="My Java Service" --Jvm=auto --Classpath=D:\newWorkspace\ServiceExample\bin --StartMode=jvm --StartClass=MyService --StartMethod=windowsService --StartParams=start --StopMode=jvm --StopClass=MyService --StopMethod=windowsService --StopParams=stop --LogPath=D:\newWorkspace\ServiceExample\logs --StdOutput=auto --StdError=auto myServicew //MS// LogPath – מגדיר את התיקייהבה ייכתבו קובצי הלוג שלהשירות, וכן הפנייה שלStdoutput ו StdErr StdOutput – מגדיר את שםקובץ הלוג אליו יופנה ה stdout. auto יגדיר שם מהצורהatdout_{date}.log StdError – בדומה ל out רקעבור ה stderror. שורה אחת

  16. הפעלת ה service run.bat cd bin myService.exe //IS//MyService --Install=D:\newWorkspace\ServiceExample\bin\myService.exe --Description="My Java Service" --Jvm=auto --Classpath=D:\newWorkspace\ServiceExample\bin --StartMode=jvm --StartClass=MyService --StartMethod=windowsService --StartParams=start --StopMode=jvm --StopClass=MyService --StopMethod=windowsService --StopParams=stop --LogPath=D:\newWorkspace\ServiceExample\logs --StdOutput=auto --StdError=auto myServicew //MS// כעת יכולנו פשוט להריץ אתהשירות ע"י myservice וזה היה רץ ב terminal כאחתהתוכניות... אך בשביל הדוגמא נכיר את myServicew. עם ההרצה של run.bat תופעל תוכנית gui לשליטה והפעלה. //MS// מגדיר monitor service שיושב על מגש המערכת. ניתן להפעיל את השירותאו להפסיקו. כמו כן ניתן להגדיר את כל ההגדרות לעיל מתוך configure תוצאת קובץ ה log: My Service Started Sun May 31 15:22:38 IDT 2009 My Service Executing Sun May 31 15:22:38 IDT 2009 My Service Executing Sun May 31 15:23:38 IDT 2009 My Service Finished Sun May 31 15:23:40 IDT 2009 שורה אחת

  17. טוען את class MyService WorkerThread start void windowsService(String args[]) new static instance serviceInstance start חוזר כאשר stopped נדלק stopped X תהליך הריצה myService.exe מפעיל את ה JVM שבתוכו JVM start פקודה לטעון את MyService.class Loop: while not stopped preform service wait(delay time)

  18. כיצד תיראה דיאגרמת עצירה של תהליך? היכנסו לאתר http://commons.apache.org/daemon/procrun.html כדי לקבל רשימת פרמטרים מלאה להרצת השירות. חישבו אילו התאמות תצטרכו לעשות בפרויקט הקורס כדי להריצו דרך ה GUI של tomcat כשירות גיבוי תחת windows. הטמעה

More Related