The J2EE Tutorial for the Sun ONE Platform by umAqgK6u

VIEWS: 1 PAGES: 47

									  ‫הטכניון – מכון טכנולוגי לישראל‬
         ‫הפקולטה להנדסת חשמל‬
        ‫המעבדה למערכות תוכנה‬




  ‫שרת ציונים‬
‫בטכנולוגית ‪J2EE‬‬
   ‫סמסטר חורף תשס"ד‬


                            ‫עדו יחיה‬   ‫מגישים:‬
                           ‫שגיא רוזן‬

                     ‫בן-עמי יסעור‬       ‫מנחה:‬
                                                                                                                                                                   ‫תוכן העניינים‬
         ‫.....................‬
                   ‫................................................................................................................................‬
                            ‫1‬                                                                                                                                                 ‫תוכן העניינים‬
        ‫......................‬
                    ‫................................................................................................................................‬
                            ‫2‬                                                                                                                                                  ‫טבלת איורים‬
‫................................................................................................................................................................‬
                             ‫3‬‫.‬                                                                                                                                                       ‫מבוא‬
           ‫...................‬
                 ‫................................................................................................................................‬
                            ‫3‬                                                                                                                                                ‫תיאור הבעיה‬
              ‫................................................................................................................................‬
              ‫................‬
                            ‫3‬                                                                                                                                              ‫מטרת הפרויקט‬
         ‫.....................‬
                   ‫................................................................................................................................‬
                            ‫4‬                                                                                                                                                  ‫מזכירות‬
       ‫.......................‬
                     ‫................................................................................................................................‬
                            ‫4‬                                                                                                                                                   ‫מתרגל‬
        ‫......................‬
                    ‫................................................................................................................................‬
                            ‫4‬                                                                                                                                                  ‫סטודנט‬
            ‫..................‬
                ‫................................................................................................................................‬
                            ‫5‬                                                                                                                                               ‫תיאור הפתרון‬
         ‫.....................‬
                   ‫................................................................................................................................‬
                            ‫6‬                                                                                                                                                 ‫מבנה המערכת‬
         ‫.....................‬
                   ‫................................................................................................................................‬
                            ‫6‬                                                                                                                                                 ‫הטכנולוגיה‬
            ‫................................................................................................................................‬
                ‫..............‬
                            ‫7‬                                                                                                                                            ‫החלוקה לשכבות‬
      ‫..........................‬
                          ‫................................................................................................‬
                            ‫01‬                                                                                                                               ‫מיפוי מערכת הציונים לשכבות‬
                ‫................................................................................................................................‬
                            ‫01‬
                ‫................‬                                                                                                                                            ‫‪EIS Tier‬‬
                        ‫........‬
                            ‫11‬
        ‫................................................................................................................................‬                              ‫‪Business Tier‬‬
                  ‫..............‬
                            ‫31‬
              ‫................................................................................................................................‬                             ‫‪Web Tier‬‬
                    ‫............‬
                            ‫51‬
            ‫................................................................................................................................‬                             ‫‪Client Tier‬‬
               ‫................................................................................................................................‬
                 ‫...............‬
                            ‫51‬                                                                                                                                              ‫אבטחת המידע‬
               ‫................................................................................................................................‬
                 ‫...............‬
                            ‫71‬                                                                                                                                             ‫בעיות מיוחדות‬
                         ‫.......‬
                            ‫71‬
       ‫................................................................................................................................‬                               ‫‪User Registry‬‬
   ‫.............................‬
                            ‫81‬
                             ‫................................................................................................‬                                 ‫הסרת קורס/קטגוריה/ציון‬
     ‫...........................‬
                           ‫................................................................................................‬
                            ‫81‬                                                                                                                               ‫‪ CMR‬בין קורס למשתמש‬
          ‫......................‬
                      ‫................................................................................................................................‬
                            ‫91‬                                                                                                                                                  ‫תיעוד הקוד‬
                       ‫.........‬
                            ‫91‬
         ‫................................................................................................................................‬                            ‫‪SESSION BEANS‬‬
                            ‫91‬
                             ‫................................................................................................‬
   ‫.............................‬                                                                                                                              ‫‪SecretaryController‬‬
                            ‫72‬ ‫................................................................................................‬
 ‫...............................‬                                                                                                                               ‫‪TeacherController‬‬
                            ‫23‬
‫................................................................................................................................‬                                ‫‪StudentController‬‬
                           ‫.....‬
                            ‫43‬
     ‫................................................................................................................................‬                              ‫‪EXCEL INTERFACE‬‬
                            ‫43‬
                             ‫...‬
   ‫................................................................................................................................‬                              ‫‪ExcellComposer‬‬
                        ‫........‬
                            ‫73‬
        ‫................................................................................................................................‬                             ‫‪ExcellParser‬‬
               ‫................................................................................................................................‬
                 ‫...............‬
                            ‫04‬                                                                                                                                              ‫מדריך למשתמש‬
       ‫.........................‬
                         ‫................................................................................................................................‬
                            ‫04‬                                                                                                                                                     ‫התקנה‬
   ‫................................................................................................................................‬
                            ‫04‬
                             ‫...‬                                                                                                                                    ‫הכנת סביבת העבודה‬
  ‫................................................................................................................................‬
                            ‫04‬‫..‬                                                                                                                                    ‫הכנת ה- ‪Database‬‬
 ‫................................................................................................................................‬
                            ‫04‬ ‫.‬                                                                                                                                   ‫התקנת והפעלת השרת‬
         ‫................................................................................................................................‬
                       ‫.........‬
                            ‫04‬                                                                                                                                          ‫הפעלת הממשק‬
      ‫..........................‬
                          ‫................................................................................................................................‬
                            ‫14‬                                                                                                                                                     ‫ממשק‬
             ‫...................‬
                   ‫................................................................................................................................‬
                            ‫14‬                                                                                                                                                ‫מזכירות‬
           ‫.....................‬
                     ‫................................................................................................................................‬
                            ‫44‬                                                                                                                                                 ‫מתרגל‬
            ‫....................‬
                    ‫................................................................................................................................‬
                            ‫54‬                                                                                                                                                 ‫סטודנט‬
             ‫...................‬
                   ‫................................................................................................................................‬
                            ‫64‬                                                                                                                                                ‫ביבליוגראפיה‬




                                                                                                                 ‫1‬
                                                                                                      ‫טבלת איורים‬

          ‫................................................................‬
              ‫..............‬
                          ‫6‬                                                                ‫דיאגראמה1 - מבנה שרת ‪J2EE‬‬
          ‫................................................................‬
              ‫..............‬
                          ‫8‬                                                                ‫דיאגראמה2 – החלוקה לשכבות‬
      ‫................................................................‬
                        ‫.......‬
                          ‫01‬                                                            ‫דיאגראמה3 – מבנה ה- ‪Database‬‬
 ‫................................................................‬
                          ‫11‬ ‫..‬                                                      ‫דיאגראמה4 - מבנה ה- ‪Entity Beans‬‬
‫................................................................‬
                           ‫21‬                                                       ‫דיאגראמה5 - מבנה ה- ‪Business Tier‬‬
           ‫....................‬
                   ‫................................‬
                          ‫41‬                                                 ‫דיאגראמה6 - ‪ Servlets‬ו- ‪ JSPs‬עבור המזכירות‬
          ‫.....................‬
                    ‫................................‬
                          ‫41‬                                                 ‫דיאגראמה7 - ‪ Servlets‬ו- ‪ JSPs‬עבור מתרגלים‬
           ‫....................‬
                   ‫................................‬
                          ‫51‬                                                 ‫דיאגראמה8 - ‪ Servlets‬ו- ‪ JSPs‬עבור סטודנטים‬




                                                                               ‫2‬
                                                                          ‫מבוא‬

                                                                  ‫תיאור הבעיה‬
   ‫בטכניון לומדים אלפי סטודנטים אשר רשומים למאות קורסים ללימודי הסמכה וללימודים‬
  ‫מוסמכים. בכל קורס הסטודנטים מקבלים בדרך זו או אחרת ציונים על תרגילי בית, בחנים,‬
  ‫מעבדות, מבחנים או כל קטגוריה היאה בעיני חברי הסגל. היות ונושא הציונים מעסיק רבות‬
‫את הסטודנטים יש צורך במערכת שתאפשר לסטודנטים לראות את ציוניהם בקלות ובמהירות‬
                                                       ‫האפשרית דרך אתר אינטרנט.‬
       ‫היות ומדובר במערכת מרובת משתמשים ועתירת נתונים יש צורך בשרת יציב שיוכל‬
  ‫להתמודד הן עם פניות בודדות והן עם פניות סימולטניות של מאות עד אלפי משתמשים. יש‬
      ‫לנהל גם מבנה נתונים אשר תומך באיחסון ציונים וסיווגם ע"פ סטודנט, קורס, סמסטר‬
‫וקטגוריה. לשם כך יש להגדיר יחסי גומלין בין המחלקות הנ"ל, בצורה שתאפשר גישה יעילה‬
                                                            ‫ומהירה למידע הרלוונטי.‬
‫היות ונושא הציונים הינו נושא רגיש ביותר, על המערכת להיות מאובטחת היטב ולדאוג שרק‬
‫משתמשים מורשים יוכלו לגשת לנתונים המיועדים להם. יש לדאוג שסטודנט יוכל לראות רק‬
 ‫את הציונים שלו, וכן שרק חבר סגל בקורס מסוים יוכל לשנות את ציוני הסטודנטים בקורס.‬



                                                               ‫מטרת הפרויקט‬
   ‫מטרת הפרויקט היא ליצור מערכת ניהול ציונים ברשת עבור סטודנטים בטכניון. המערכת‬
‫תוכל לשמש סטודנטים אשר ירצו לראות את ציוניהם דרך האינטרנט, וכן מרצים / מתרגלים /‬
    ‫אנשי מזכירות אשר יוכלו לשמור את ציוני הסטודנטים בקורס על השרת. המערכת תוכל‬
  ‫להחזיק ציונים של מבחנים, בחנים, מעבדות ותרגילי בית בכל הקורסים לאורך הסמסטרים‬
                                                                          ‫השונים.‬
 ‫המערכת תתמוך ב-3 סוגי המשתמשים. להלן סוגי המשתמשים והפעולות שייתמכו עבור כל‬
                                                                         ‫אחד מהם:‬



                                        ‫3‬
                                                                    ‫מזכירות‬
                                           ‫‪ ‬הוספה ומחיקה של קורס למערכת‬
    ‫‪ ‬הוספה ומחיקה של משתמש למערכת, משתמש יכול להיות מתרגל או סטודנט.‬
                                           ‫‪ ‬הוספה ומחיקה של מתרגל לקורס‬
                                           ‫‪ ‬הוספה ומחיקה של סטודנט לקורס‬



                                                                     ‫מתרגל‬
           ‫‪ ‬הוספה ומחיקה של קטגורית ציון כגון בוחן אמצע, תרגיל בית וכדומה‬
                                        ‫‪ ‬עריכת ציוניהם של הסטודנטים בקורס‬
                 ‫‪ ‬אפשרות לראות סטטיסטיקות לגבי הקורס כגון ממוצע וכדומה.‬
             ‫‪ ‬אפשרות לקבוע אם סטודנטים יוכלו לראות את הסטטיסטיקות הנ"ל‬
                              ‫‪ ‬אפשרות ליצא את כל ציוני הקורס לתוך קובץ.‬



                                                                    ‫סטודנט‬
                 ‫‪ ‬אפשרות לראות את ציוניו בכל הקורסים לאורך כל הסמסטרים‬
‫‪ ‬אפשרות לראות את ההערות שהמתרגל כתב עבור הקורס ובמידה והמתרגל מאפשר‬
                                  ‫זאת, לראות את הסטטיסטיקות של הקורס.‬
    ‫הערה: כל הוספה יכולה להתבצע, הן עבור אובייקט בודד באופן ידני והן עבור הרבה‬
                                                          ‫אובייקטים מקובץ קלט.‬


 ‫בנוסף על המערכת להיות נוחה לשימוש. אנשי המזכירות יוכלו להוסיף בקלות משתמשים‬
  ‫למערכת, חברי הסגל יוכלו להכניס בקלות ציונים לסטודנטים, והחשוב מכל: הסטודנטים‬
   ‫יוכלו לראות את כל ציוניהם במהירות ובקלות וכל זאת ע"י הכנסת מספר הזהות שלהם‬
                                                                ‫וסיסמתם בלבד.‬



                                    ‫4‬
                                                                ‫תיאור הפתרון‬
  ‫לצורך מימוש השתמשנו בטכמולוגיית ‪ .J2EE‬טכנולוגיה זו מטפלת בשביל המתכנת במגוון‬
   ‫רחב של נושאים: בקרת תהליכים לצורך טיפול בפניות רבות בו זמנית, גישה נוחה ויעילה‬
 ‫למבנה הנתונים, אבטחת המידע ועוד. הממשק למשתמש הינו דפי אינטרנט מסוג ‪ jsp‬שהינם‬
     ‫דפים בשפת ‪ html‬אשר מכילים בתוכם קוד ‪ java‬וע"י כך בעצם מידע דינמי אשר ניתן‬
  ‫להוציא ממבנה הנתונים. בין דפי האינטרנט לבין מבנה הנתונים נמצא שרת ה- ‪ J2EE‬אשר‬
                          ‫כאמור מטפל בפניות המשתמש ומעביר לו את המידע המבוקש.‬
‫עבור אחסון המידע הוגדרו מחלקות עבור סטודנט, מתרגל, קורס, סמסטר, וקטגוריה לקביעת‬
      ‫ציון. יחסי הגומלין בניהם יוסברו בהמשך. בנוסף הוגדרו דפי אינטרנט מתאימים עבור‬
‫סטודנט, מתרגל ומזכירות המשמשים אותם לצורך ביצוע הפעולות הנתמכות במערכת עבורם.‬
                                           ‫מבנה דפי האינטרנט יוסבר גם הוא בהמשך.‬




                                       ‫5‬
                                                           ‫מבנה המערכת‬

                                                                 ‫הטכנולוגיה‬
    ‫השרת של מערכת הציונים בנוי על טכנולוגיית ‪.(Java 2 Enterprise Edition) J2EE‬‬
       ‫בטכנולוגיה זו הקוד שכותב מפתח האפליקציה מורץ בסביבה מיוחדת )‪,(Container‬‬
        ‫שאחראית על בקרת תהליך החיים של האפליקציה, ומספקת שירותים שונים לכותב‬
‫האפליקציה. בזכות השימוש בשפת ‪ Java‬כבסיס לטכנולוגיה, ניתן להשתמש בקוד שנכתב על‬
     ‫כל פלטפורמה )‪ ,(Cross-Platform‬כגון ‪ Linux ,Windows‬ועוד. בנוסף הטכנולוגיה‬
 ‫מגדירה את סביבת העבודה ואת השירותים השונים, אך לא מגדירה את המימוש שלהם, וכך‬
        ‫ניתן להריץ את אותו הקוד בשרתים מסוגים שונים ושל חברות שונות (כגון ‪IBM‬‬
            ‫‪ Server Websphere Application‬ו- ‪.)Sun ONE Application Server‬‬
                    ‫את המבנה הטיפוסי של שרת ‪ J2EE‬ניתן לראות בדיאגראמה הבאה:‬




                            ‫דיאגראמה1 - מבנה שרת ‪J2EE‬‬

      ‫כפי שניתן לראות בדיאגראמה, שרת ה- ‪ J2EE‬מכיל שני סוגי סביבות עבודה: ‪Web‬‬
    ‫‪ ,Container‬שבו מורצים שרתי אינטרנט האחראיים על ייצור קוד ה- ‪ HTML‬שייראה‬
    ‫בדפדפן בסופו של דבר; ו- ‪ EJB Container‬שבו מורצים קטעי הקוד שמטפלים בביצוע‬
                           ‫הפעולות המורכבות של האפליקציה ובגישה ל- ‪.Database‬‬
 ‫תפקידו העיקרי של ה- ‪ Container‬הוא בקרת תהליך החיים של יחידות הקוד שכותב מפתח‬
 ‫האפליקציה: יצירת אובייקטים, הרצת הקוד שבהם, סנכרון בין התהליכונים השונים שרצים‬


                                       ‫6‬
    ‫במערכת, וביצוע ‪ Garbage Collection‬לאובייקטים שאין בהם שימוש. טכנולוגיית ה-‬
‫‪ J2EE‬בנויה לטיפול במספר גדול מאוד של פניות בו זמנית, ולכן ה- ‪ Containers‬משתמשים‬
‫במנגנונים מתקדמים של ‪ Instance Pooling ,Connection Pooling ,Multithreading‬ו-‬
‫‪ .Caching‬מנגנונים אלה תומכים אף בהרצת אפליקציה אחת על מספר שרתי ‪ J2EE‬במכונות‬
       ‫שונות, ללא פגיעה בעקביות ובאמינות המידע. כל המנגנונים האלה מאפשרים למפתח‬
     ‫האפליקציה לכתוב קוד פשוט יחסית, ללא כתיבת מנגנוני סנכרון תהליכונים או מנגנוני‬
    ‫‪ ,Caching‬אך בכל זאת האפליקציה שתפותח תהיה סקלבילית למאות אלפי ואף מיליוני‬
                                                                        ‫משתמשים.‬
  ‫שרת ה- ‪ J2EE‬מספק גם מגוון רחב של שירותים למפתח האפליקציה, כגון ‪(Java JAAS‬‬
‫)‪ ,Authentication & Authorization Service‬המספק לכותב האפליקציה מנגנון לאימות‬
  ‫זהות המשתמש בעזרת מנגנוני הצפנה מתקדמים, ‪ JDBC‬המספק ‪ API‬יחיד שניתן בעזרתו‬
                                     ‫לגשת לכל סוג של ‪ ,Database‬ועוד רבים אחרים.‬



                                                              ‫החלוקה לשכבות‬
  ‫מערכת הציונים תוכננה בשיטה של חלוקה לשכבות )‪ ,(Tiers‬כאשר כל שכבה אחראית על‬
     ‫שלב אחר בעיבוד פקודה מסוימת. כל שכבה מקבלת קלט מהשכבה שמעליה, משתמשת‬
    ‫בשכבה שמתחתיה לביצוע הפעולה, ומספקת פלט לשכבה שמעליה. את השכבות השונות‬
                                           ‫והקשר ביניהן ניתן לראות בדיאגראמה הבאה:‬




                                       ‫7‬
                             ‫דיאגראמה2 – החלוקה לשכבות‬

      ‫‪ – EIS (Enterprise Information System) Tier‬שכבה זו מכילה את שרת ה-‬
  ‫‪( Database‬כגון 2‪ IBM DB‬או ‪ ,)Microsoft SQL Server‬ותפקידה הוא אחסון המידע‬
                          ‫בלבד, ללא התייחסות למשמעותו או לפעולות שמבוצעות עליו.‬
‫‪ – Business Tier‬שכבה זו מכילה את קוד ה- )‪ ,EJB (Enterprise Java Beans‬ותפקידה‬
  ‫הוא ביצוע הפעולות הספציפיות הקשורות לאפליקציה, תוך שימוש בשכבת ה- ‪ EIS‬לצורך‬
                            ‫אחסון ואחזור הנתונים. שלושת סוגי ה- ‪ EJB‬העיקריים הם:‬
‫‪ – Entity Beans ‬תפקיד רכיבים אלה הוא לעטוף את הגישות ל- ‪ Database‬בממשק‬
    ‫פשוט בסגנון ‪ ,JavaBeans‬כלומר כ- ‪ Class‬בעל פונקציות ‪ Get‬ו- ‪ Set‬עבור כל‬
    ‫שדה בטבלא המתאימה. ה- ‪ Container‬שמריץ את קוד ה- ‪ Entity Beans‬מטפל‬
       ‫בגישות לכל סוג ‪ Database‬אליו ממופה ה- ‪ ,Entity Bean‬וכן דואג לביצוע‬
 ‫‪ Connection Pooling‬ו- ‪ Caching‬לצורך שמירה על סקלביליות. באופן כללי, כל‬
       ‫טבלה ב- ‪ Database‬ממופה ל- ‪ Entity Bean‬אחד שעוטף את הגישות אליה.‬
      ‫‪ – Session Beans ‬תפקיד רכיבים אלה הוא לבצע את הפעולות המורכבות של‬
  ‫האפליקציה. הם מתחלקים לשני סוגים: ‪ ,Stateless Session Beans‬שלא מכילים‬
‫כלל משתנים פנימיים ויכולים לשרת כל בקשה שמגיעה לשרת, ו- ‪Stateful Session‬‬
 ‫‪ ,Beans‬שמכילים משתני מצב ומשרתים לקוח אחד בלבד במהלך ‪ Session‬שלו. ה-‬
      ‫‪ Container‬של ה- ‪ Session Beans‬דואג ל- ‪ ,Instance Pooling‬וכך מביא‬
 ‫לסקלביליות מכסימלית של המערכת. מעצם הגדרת ‪ Stateless Session Beans‬הם‬


                                        ‫8‬
 ‫מאפשרים סקלביליות גבוהה יותר, שכן ניתן לשרת מספר לקוחות בעזרת ‪Instance‬‬
           ‫אחד שלהם. בפרויקט זה נשתמש ב- ‪ Stateless Session Beans‬בלבד.‬
‫‪ – Message-Driven Beans ‬רכיבים אלה משמשים להעברת הודעות לשרת, כלומר‬
      ‫פנייה לשרת ללא קבלת תשובה. בפרויקט זה לא נעשה שימוש ב- -‪Message‬‬
                                                         ‫‪.Driven Beans‬‬
 ‫‪ – Web Tier‬תפקיד שכבה זו הוא לספק ממשק ‪ Web‬לאפליקציה, ובה נמצא קוד האחראי‬
   ‫על עיצוב הממשק שיראה המשתמש. שכבה זו מקבלת נתונים משכבת ה- ‪Business Tier‬‬
  ‫בצורת ‪ Classes – JavaBeans‬המכילים שדות ופונקציות ‪ Get‬ו- ‪ Set‬לשדות אלה בלבד,‬
  ‫המממשים ‪ Serializable Interface‬על מנת שניתן יהיה להעביר אותם בין שרתים שונים.‬
                                                       ‫בשכבה זו שני סוגי רכיבים:‬
 ‫‪ – Servlets ‬תפקיד רכיבים אלה הוא לתקשר עם שכבת ה- ‪ Business Tier‬ולהביא‬
‫את הנתונים שיוצגו למשתמש, וכן להעביר את הפעולות שמבצע המשתמש לשכבה זו.‬
  ‫‪ – JSP Pages ‬רכיבים אלה הם למעשה דפי ‪ HTML‬המכילים קוד ‪ ,Java‬ומטרתם‬
   ‫לעצב את הדף אותו יראה המשתמש בעזרת הנתונים שהם מקבלים מה- ‪.Servlets‬‬
  ‫‪ – Client Tier‬שכבה זו מייצגת את המכונה של המשתמש, והיא עשויה להכיל שני סוגים‬
                                                                        ‫של קוד:‬
 ‫‪ ‬דפדפן אינטרנט, שלא נכתב ע"י מפתח האפליקציה, ורק מציג את הממשק שנבנה ב-‬
                                                              ‫‪.Web Tier‬‬
        ‫‪ ‬אפליקציה עצמאית, שנכתבה ע"י מפתח האפליקציה, ומשתמשת בשכבת ה-‬
  ‫‪ Business Tier‬לביצוע הפעולות השונות, תוך הצגת ממשק משל עצמה למשתמש.‬
‫היתרון של שיטת תכנון זו הוא שכל שכבה מבצעת עבודה מסוג אחר, וכך אנשים שונים בעלי‬
‫מומחיות שונה יכולים לפתח ולתחזק כל שכבה בנפרד. יתרון נוסף הוא שניתן להשתמש בקוד‬
‫של שכבות נמוכות יותר למספר אפליקציות שונות: לדוגמא אם המערכת היא מערכת של בנק,‬
    ‫ניתן לכתוב ‪ Application Client‬לא מבוסס ‪ Web‬שבו משתמשים הפקידים בבנק, וכן‬
        ‫ממשק מבוסס ‪ Web‬ללקוחות הבנק, תוך שימוש באותם שכבות ‪ Business‬ו- ‪.EIS‬‬




                                      ‫9‬
                                              ‫מיפוי מערכת הציונים לשכבות‬

                                                                    ‫‪EIS Tier‬‬
 ‫שכבה זו מכילה למעשה את הטבלאות השונות שמוגדרות בשרת ה- ‪ Database‬ומכילות את‬
‫המידע העקבי )‪ (Persistent Storage‬של מערכת הציונים. את הטבלאות השונות של מערכת‬
                               ‫הציונים והיחסים ביניהן ניתן לראות בדיאגראמה הבאה:‬




                           ‫דיאגראמה3 – מבנה ה- ‪Database‬‬

   ‫טבלאות אלה נוצרו בעזרת שיטת תכנון ‪ :Top-Down‬תחילה הוגדרו ה- ‪Entity Beans‬‬
    ‫שבמערכת (ראה להלן), ואלה מופו לטבלאות המתאימות ל- ‪Microsoft SQL Server‬‬
‫בעזרת ‪ Wizards‬של ‪ .Websphere‬שיטת תכנון זו מתאימה למקרים בהם המערכת מתוכננת‬
       ‫מלכתחילה להיות מבוססת ‪ ,EJB‬כמו בפרויקט זה. כאשר מתכננים אפליקציית ‪EJB‬‬
                ‫המשתמשת ב- ‪ Database‬קיים, משתמשים בשיטת תכנון ‪.Bottom-Up‬‬




                                       ‫01‬
                                                               ‫‪Business Tier‬‬
  ‫שכבה זו מכילה את ה- )‪ EJB (Enterprise Java Beans‬השונים המבצעים את הפעולות‬
  ‫המורכבות שמבצעת המערכת. שכבה זו מחולקת לשתי תת-שכבות: שכבת ‪Entity Beans‬‬
                                                    ‫ושכבת ‪.Stateless Session Beans‬‬
‫שכבת ה- ‪ Entity Beans‬היא השכבה הנמוכה יותר, והיא עוטפת את הגישות ל- ‪.Database‬‬
    ‫את ה- ‪ Entity Beans‬השונים, השדות שלהם והיחסים ביניהם ניתן לראות בדיאגראמה‬
                                                                            ‫הבאה:‬




                          ‫דיאגראמה4 - מבנה ה- ‪Entity Beans‬‬

‫כפי שניתן לראות מהדיאגראמה, ה- ‪ Entity Beans‬השונים מייצגים ישירות את טבלאות ה-‬
‫‪ Database‬השונות, ולכן יש חפיפה בין היחסים ביניהם והשדות שלהם לבין אלו של טבלאות‬
                                                                     ‫ה- ‪.Database‬‬


                                        ‫11‬
‫שכבת ה- ‪ Session Beans‬מבצעת את הפעולות המורכבות של האפליקציה, תוך שימוש ב-‬
   ‫‪ Entity Beans‬השונים לצורך גישה ל- ‪ .Database‬שכבה זו מכילה שלושה ‪Stateless‬‬
                                                                ‫‪:Session Beans‬‬
‫‪ – SecretaryController ‬המספק את הפונקציונאליות שמשמשת את המזכירות, כגון‬
                  ‫יצירת קורסים, שיוך סטודנטים ושיוך מתרגלים לקורסים ועוד.‬
‫‪ – TeacherController ‬המספק את הפונקציונאליות שמשמשת את המתרגלים, כגון‬
      ‫יצירת קטגוריות והגדרת הציונים של הסטודנטים השונים בקטגוריות השונות.‬
‫‪ – StudentController ‬המספק את הפונקציונאליות שמשמשת את הסטודנטים, כגון‬
                           ‫קבלת הציונים של אותו סטודנט בקטגוריות השונות.‬
‫הנתונים השונים שאוספת כל פונקציה בשכבה זאת מתוך שכבת ה- ‪ Entity Beans‬מועברים‬
                 ‫הלאה לשכבת ה- ‪ Web Tier‬בעזרת ‪ Value Beans‬המוגדרים בחבילה‬
                  ‫‪( com.technion.ee.tochna.grades.beans‬ראה ‪ Javadoc‬בנספח).‬


   ‫את המבנה הפנימי של ה- ‪ Business Tier‬והיחס בין ה- ‪ Stateless Session Beans‬ל-‬
                                        ‫‪ Entity Beans‬ניתן לראות בדיאגראמה הבאה:‬




                         ‫דיאגראמה5 - מבנה ה- ‪Business Tier‬‬




                                        ‫21‬
                                                                   ‫‪Web Tier‬‬
  ‫שכבה זו מכילה את ה- ‪ Servlets‬וה- ‪ JSPs‬האחראים לייצור דפי ה- ‪ HTML‬אותם יראה‬
‫לבסוף המשתמש. עבור כל דף שמוצג למשתמש, אופן הפעולה הוא: תחילה ה- ‪ Servlet‬קורא‬
    ‫לשכבת ה- ‪ ,Business Tier‬מוציא את כל הנתונים הרלוונטיים לדף ומכניס אותם לתוך‬
 ‫‪ Value Bean‬הספציפי לאותו דף. כעת ה- ‪ Servlet‬קורא ל- ‪ JSP‬המתאים תוך העברת ה-‬
      ‫‪ Value Bean‬המכיל את כל הנתונים הרלוונטיים דרך אובייקט ה- ‪ .request‬ה- ‪JSP‬‬
   ‫משתמש ב- ‪ Value Bean‬לצורך מילוי השדות הדינאמיים בדף ה- ‪ HTML‬שהוא מייצג,‬
     ‫ומעביר את התוצאה ל- ‪ .Client Tier‬באופן כללי, ‪ Servlets‬משמשים לביצוע פעולות‬
   ‫מורכבות מול ה- ‪ ,Business Tier‬ו- ‪ JSPs‬משמשים לייצור דפים המועברים ל- ‪Client‬‬
   ‫‪ ,Tier‬ולכן ניתן לחלק גם שכבה זו לשתי תת-שכבות. ההסתייגות לחלוקה זו היא שמעצם‬
 ‫הגדרת השכבות כל שכבה קוראת לשכבה שמתחתיה, אך כאן ה- ‪ JSP‬לא קורא ל- ‪Servlet‬‬
                                                              ‫אלא מתבצע אחריו.‬
 ‫יש לציין כי השימוש ב- ‪ Servlet‬וב- ‪ JSP‬כפי שמתואר לעיל נוח כאשר מדובר בדף מורכב‬
 ‫המכיל מידע דינאמי. כאשר הדף אינו מכיל מידע דינאמי הכרוך בגישה ל- ‪,Business Tier‬‬
 ‫כגון דף המכיל ‪ Form‬להכנסת נתונים בלבד, ניתן לוותר על ה- ‪ Servlet‬ולהשתמש ישירות‬
    ‫בדף ‪ JSP‬או אפילו דף ‪ .HTML‬כמו-כן, כאשר הדף מייצג ביצוע פעולה מסוימת מול ה-‬
  ‫‪ Business Tier‬ומכיל רק אישור על ביצוע הפעולה בהצלחה, ניתן להשתמש ב- ‪Servlet‬‬
        ‫המבצע את הפעולה ומדפיס את האישור ישירות לפלט שלו, ללא שימוש בדף ‪.JSP‬‬
    ‫שכבת ה- ‪ Web Tier‬מחולקת לשלושה חלקים בלתי תלויים: רכיבים המטפלים בממשק‬
    ‫למזכירות, רכיבים המטפלים בממשק למתרגלים ורכיבים המטפלים בממשק לסטודנטים.‬
‫את ה- ‪ ,Servlets‬ה- ‪ JSPs‬וה- ‪ Value Beans‬השונים במערכת הציונים ואת האינטראקציה‬
‫ביניהם ניתן לראות בדיאגראמות הבאות (מלבן = ‪ ,JSP‬אליפסה = ‪ ,Servlet‬כחול = ‪Value‬‬
                                                                        ‫‪:)Bean‬‬




                                      ‫31‬
‫דיאגראמה6 - ‪ Servlets‬ו- ‪ JSPs‬עבור המזכירות‬




‫דיאגראמה7 - ‪ Servlets‬ו- ‪ JSPs‬עבור מתרגלים‬




                   ‫41‬
                       ‫דיאגראמה8 - ‪ Servlets‬ו- ‪ JSPs‬עבור סטודנטים‬

                                                                         ‫‪Client Tier‬‬
     ‫במערכת הציונים הפלט של ה- ‪ Web Tier‬הוא דפי ‪ ,HTML‬אשר מועברים למשתמש‬
 ‫ומוצגים ב- ‪ .Browser‬לכן למעשה ה- ‪ Client Tier‬מכיל את ה- ‪ Browser‬בלבד, ללא כל‬
                                                     ‫קוד השייך ספציפית למערכת הציונים.‬



                                                                     ‫אבטחת המידע‬
‫במערכת הציונים יש צורך באבטחת מידע ברמה גבוהה, כדי למנוע גישה לסטודנטים שרוצים‬
‫לשנות את הציון שלהם. מאחר והמשתמשים במערכת זאת הם סטודנטים מתוחכמים, יש להגן‬
‫גם מפני האקרים שעלולים לנסות לגשת למערכת לא דרך הממשק הרגיל שמסופק להם. עקב‬
                                ‫כך יש לדאוג לאבטחת הגישה לכל אחד מהשכבות בנפרד.‬
              ‫כפי שתואר לעיל, טכנולוגיית ה- ‪ J2EE‬מספקת שירות בשם ‪JAAS (Java‬‬
‫)‪ ,Authentication and Authorization Service‬הדואג לזיהוי המשתמש במערכת בעזרת‬
‫מנגנוני הצפנה ואבטחת מידע מתקדמים. בזכות שירות זה ניתן לדעת ללא ספק מיהו המשתמש‬
   ‫במערכת, ולאפשר גישה למידע ולפונקציות השונות על סמך זה. כמו-כן ארכיטקטורות ה-‬
     ‫‪ EJB‬וה- ‪ Servlets/JSPs‬מספקים מנגנונים לחסימת הגישה לפונקציות שונות או דפים‬
    ‫שונים עבור קבוצות משתמשים שונות. הגדרת המשתמשים, הסיסמאות שלהם והקבוצות‬
   ‫אליהם הם משתייכים שמורות בשרת ‪ LDAP‬המכיל מנגנוני אבטחה משלו, ולכן לא ניתן‬
                                                              ‫לקרוא או לשנות נתונים אלה.‬
                   ‫אבטחת המידע במערכת הציונים מתבצעת עבור כל שכבה באופן הבא:‬




                                          ‫51‬
         ‫‪ – EIS Tier‬שכבה זאת מאובטחת באופן גורף בזכות האבטחה המובנית בשרת ה-‬
  ‫‪ :Database‬ניתן לגשת לנתונים בשכבה זאת אך ורק בעזרת שם משתמש וסיסמא הידועים‬
                                                           ‫לאדמיניסטראטור בלבד.‬
‫‪ – Business Tier‬שכבה זאת מחולקת לשתי תת-שכבות: שכבת ה- ‪ Entity Beans‬חושפת‬
 ‫‪ Local Interfaces‬בלבד, ולכן ניתן לגשת אליה אך ורק מתוך שרת ה- ‪ ,J2EE‬וגישה אליו‬
 ‫מתאפשרת אך ורק בעזרת שם משתמש וסיסמה הידועים לאדמיניסטראטור בלבד. שכבת ה-‬
    ‫‪ Session Beans‬חושפת ‪ Remote Interfaces‬המכילים פונקציות הממשות את אבטחת‬
     ‫המידע בתוכן: עבור ‪ SecretaryController‬לא ניתן להפעיל אף פונקציה ללא הכללות‬
      ‫בקבוצת המזכירות (בעזרת מנגנוני אבטחה של ‪ ,)EJB‬עבור ‪ TeacherController‬כל‬
‫פונקציה הניגשת לקורס בודקת האם אכן הקורא לפונקציה רשום כמתרגל באותו קורס, ועבור‬
   ‫‪ StudentController‬הפונקציות מחזירות אך ורק את הציונים של המשתמש שקרא להם.‬
  ‫‪ – Web Tier‬בשכבה זאת קיימים מנגנוני אבטחה בסיסיים אשר חוסמים את הגישה לדפי‬
  ‫המזכירות עבור מי שאינו שייך לקבוצת המזכירות. מנגנונים אלה מספיקים, מכיוון ששכבה‬
      ‫זאת משתמשת בשכבת ה- ‪ Business Tier‬אשר בה כל הפונקציות מוגנות ממילא: אם‬
  ‫סטודנט מתחכם ינסה לקרוא ל- ‪ Servlet‬שמוסיף ציונים עבור קורס מסוים כאשר הוא אינו‬
  ‫מתרגל בקורס זה, ה- ‪ Servlet‬יקרא לפונקציה ב- ‪ TeacherController‬אשר תזרוק מייד‬
                     ‫‪ ,SecurityException‬ולכן ה- ‪ Servlet‬לא יוכל לבצע את הפעולה.‬
‫‪ – Client Tier‬כאמור, שכבה זאת מכילה את ה- ‪ Browser‬שרץ במכונת המשתמש, אך לא‬
‫משנה עד כמה המשתמש מתוחכם, הוא לא יוכל לפנות לשרת ללא ה- ‪ Cookies‬המכילים את‬
‫פרטי המשתמש בצורה מוצפנת, ומערכת ה- ‪ J2EE‬דואגת לכך שלא ניתן יהיה לקבל או לייצר‬
       ‫את ה- ‪ Cookies‬ללא שם משתמש וסיסמא חוקיים. לכן המשתמש לא יכול להזדהות‬
   ‫כמשתמש אחר (אלא אם כן המתרגל פרסם את הסיסמא שלו באתר הקורס, אך זה כבר לא‬
                                                                    ‫בשליטתנו...).‬




                                       ‫61‬
                                                                              ‫בעיות מיוחדות‬
  ‫במהלך פיתוח המערכת, נתגלו מספר בעיות אשר מנעו פעולה תקינה של המערכת. הבעיות‬
                                                ‫והדרכים בהן מערכת הציונים עוקפת אותם הם:‬

                                                                           ‫‪User Registry‬‬
       ‫על מנת להשתמש בשירות ‪ JAAS‬של ‪ ,Websphere‬יש להגדיר ‪ User Registry‬בו‬
‫משתמש השרת לצורך זיהוי המשתמשים במערכת. באופן אידיאלי, משתמשים בשרת ‪LDAP‬‬
 ‫נפרד בו מוגדרים כל המשתמשים, הסיסמאות והקבוצות. בשרת כזה קיימים מנגנוני בטיחות‬
    ‫מיוחדים, הסיסמא נשמרת בצורה מוצפנת, והפעולות האופייניות השונות (כגון בדיקה אם‬
  ‫משתמש שייך לקבוצה מסוימת) מתבצעות ביעילות גבוהה. מכיוון שכיום לא קיים במעבדת‬
       ‫התוכנה שרת ‪ ,LDAP‬יש צורך למצוא פתרון אחר המאפשר שימוש בשירות ‪.JAAS‬‬
 ‫הפתרון בו נעשה שימוש בפרויקט זה הוא ‪ Custom Registry‬המשתמש במערכת הקבצים‬
  ‫לצורך שמירת הגדרות המשתמשים והקבוצות. פתרון זה כמובן אינו מאובטח דיו ואינו יעיל‬
 ‫כלל, אך הוא מספיק לצורך בדיקת המערכת. ברגע שיהיה שרת ‪ LDAP‬במעבדה, ניתן יהיה‬
       ‫להגדיר אותו במקום ה- ‪ Custom Registry‬בצורה מאוד פשוטה, וכך המערכת תהיה‬
                                                                                          ‫מושלמת.‬
      ‫הפתרון עובד באופן הבא: שרת ה- ‪ Websphere‬מוגדר להשתמש ב- ‪Custom User‬‬
‫‪ ,Registry‬כאשר ה- ‪ Class‬הוא ‪com.ibm.websphere.security.FileRegistrySample‬‬
   ‫(זהו ‪ Custom User Registry Implementation‬המגיע כחלק מ- ‪ .)Websphere‬תחת‬
‫‪ Custom Properties‬מוגדרים שני פרמטרים: ‪ – usersFile‬מצביע לקובץ המכיל את שמות‬
          ‫המשתמשים והסיסמאות, ‪ – groupsFile‬מצביע לקובץ המכיל את שמות הקבוצות.‬
 ‫הסברים נוספים לגבי אופן השימוש ב- ‪ Custom Registry‬זה ניתן למצוא באתרים הבאים:‬
                    ‫‪http://publib7b.boulder.ibm.com/wasinfo1/en/info/aes/ae/usec_tdaman.html‬‬   ‫‪‬‬
    ‫‪http://www-3.ibm.com/software/webservers/appserv/doc/v40/ae/infocenter/was/050203.html‬‬     ‫‪‬‬
  ‫‪http://www-3.ibm.com/software/webservers/appserv/doc/v40/ae/infocenter/was/05020201.html‬‬     ‫‪‬‬




                                               ‫71‬
                                                  ‫הסרת קורס/קטגוריה/ציון‬
‫בתצורה הרגילה של המערכת, הסרת קורס, קטגוריה או ציון (בעזרת פונקצית )(‪ remove‬של‬
  ‫ה- ‪ Entity Bean‬המתאים) גורמת ל- ‪ .Exception‬בעיה זו נובעת מבאג ב- ‪,Websphere‬‬
       ‫שבגללו לא ניתן להסיר ‪ Entity Bean Instance‬אשר ה- ‪ Primary Key‬שלו מכיל‬
                 ‫‪( Foreign Key‬כלומר יש לו שדה ‪ CMR‬שמשמש כ- ‪.)Primary Key‬‬
‫כדי לפתור בעיה זו, בגרסה הסופית של מערכת הציונים קיים שכפול של המידע: בנוסף לשדה‬
    ‫ה- ‪ CMR‬המשמש לצורך ניווט בין ה- ‪ Entity Beans‬ולצורך ‪ ,Cascade Delete‬קיים‬
‫שדה ‪ CMP‬רגיל המכיל את ה- ‪ Primary Key‬של השורה המוצבעת ע"י ‪ .CMR‬שדה נוסף‬
            ‫זה משמש בתור ‪ Primary Key‬של ה- ‪ ,Entity Bean‬ומאותחל בזמן יצירתו.‬

                                                  ‫‪ CMR‬בין קורס למשתמש‬
 ‫בתצורה הרגילה של המערכת, קיים צימוד בין שני שדות ה- ‪ CMR‬שמוגדרים בין ‪Course‬‬
   ‫ל- ‪( User‬שדה המייצג מתרגלים ושדה המייצג סטודנטים). הצימוד מתבטא בכך שלמרות‬
‫שהוספת מתרגל לקורס יוצרת את השורה המתאימה ב- ‪ ,Database‬ה- ‪ Collection‬המוחזר‬
                          ‫משדה ה- ‪ CMR‬מכיל רק מתרגלים שמוגדרים גם כסטודנטים.‬
‫כדי לפתור בעיה זו, בגרסה הסופית של מערכת הציונים נעשה שימוש ב- ‪Finder Methods‬‬
‫אשר משתמשים ב- ‪ Custom Queries‬בשפת ‪ EJBQL‬לצורך מציאת הסטודנטים והמרצים‬
‫עבור קורס מסוים, ולצורך מציאת הקורסים אותם לומד או מתרגל משתמש מסוים. פיתרון זה‬
   ‫מחליף את הניווט דרך שדה ה- ‪ ,CMR‬אך אינו מאפשר מחיקה של קשר מה- ‪.Database‬‬
  ‫לצורך ביצוע מחיקה, מתבצע האלגוריתם הבא: אם מוחקים קשר של סטודנט, אז אין בעיה.‬
  ‫אם מוחקים קשר של מתרגל, אז בודקים אם הוא גם סטודנט – אם כן אז אין בעיה, ואם לא‬
                ‫מוסיפים אותו כסטודנט, מוחקים אותו כמתרגל ואז מוחקים אותו כסטודנט.‬




                                      ‫81‬
                                                                       ‫תיעוד הקוד‬

                                                                    Session Beans
 ‫ שמוגדר ע"י‬API -‫כדי ליצור ממשקים נוספים המשתמשים באותה מערכת, ניתן להשתמש ב‬
      :‫ שבמערכת. הפונקציות השונות בהן ניתן להשתמש הן‬Stateless Session Beans -‫ה‬

                                                            SecretaryController

com.technion.ee.tochna.grades
Interface SecrataryController

All Superinterfaces:
       javax.ejb.EJBObject, java.rmi.Remote

public interface SecrataryController
extends javax.ejb.EJBObject

Remote interface for Enterprise Bean: SecrataryController



Method Summary
                 void addCourse(CourseKeyBean key, java.lang.String name,
                      double points)
                             Add a course to the databse.
                 void addCourses(int semester, java.lang.String[] ids,
                      java.lang.String[] names, double[] points)
                             Add a bunch of courses to the databse.
                 void addStudent(CourseKeyBean course,
                      java.lang.String studentId)
                             Add a student to a course.
                 void addStudents(CourseKeyBean course,
                      java.lang.String[] studentIds)
                             Add a bunch of students to a course.
                 void addTeacher(CourseKeyBean course,
                      java.lang.String teacherId)
                             Add a TA to a course.
                 void addTeachers(CourseKeyBean course,
                      java.lang.String[] teacherIds)
                             Add a bunch of TAs to a course.



                                          19
 SemesterValueBean createSemester(int id)
                           Use this method for creating a semester instance in the
                     database.
 SemesterValueBean createSemester(int year, int semester)
                           Use this method for creating a semester instance in the
                     database.
               void createUser(java.lang.String id,
                    java.lang.String name, java.lang.String email)
                           Use this method for creating a user instance in the database.
               void createUsers(java.lang.String[] ids,
                    java.lang.String[] names, java.lang.String[] emails)
                           Use this method for creating a bunch of user instances in
                     the database.
   CourseValueBean getCourse(CourseKeyBean courseKey)
                           Get the data of a course.
 CourseValueBean[] getCourses(int semester)
                           Use this method to get all the courses in a semester.
 SemesterValueBean getLastSemester()
                           Get the details of the last semester.
 SemesterValueBean getSemester(int semesterId)
                           Get the details of a semester.
   UserValueBean[] getStudents(CourseKeyBean courseKey)
                           Get all the students in a course.
   UserValueBean[] getTeachers(CourseKeyBean courseKey)
                           Get all the TAs in a course.
               void removeCourse(CourseKeyBean key)
                           Remove a course from the database.
               void removeStudent(CourseKeyBean course,
                    java.lang.String studentId)
                           Remove a student from a course.
               void removeTeacher(CourseKeyBean course,
                    java.lang.String teacherId)
                           Remove a TA from a course.
               void removeUser(java.lang.String id)
                           Use this method for removing a user instance from the
                     database.
               void renameCourse(CourseKeyBean key,
                    java.lang.String name)
                           Rename a course in the database.




Methods inherited from interface javax.ejb.EJBObject


                                         20
getEJBHome, getHandle, getPrimaryKey, isIdentical, remove




Method Detail
addCourse
public void addCourse(CourseKeyBean key,
                      java.lang.String name,
                      double points)
               throws javax.ejb.CreateException,
                      javax.ejb.FinderException,
                      java.rmi.RemoteException
      Add a course to the databse.
      Parameters:
      key - - The course's unique key.
      name - - The course's visible name.
      points - - The course's weight.
      Throws:
      javax.ejb.CreateException - when the course cannot be created for some
      reason.
      javax.ejb.FinderException - when the course's semester doesn't exist.

removeCourse
public void removeCourse(CourseKeyBean key)
                  throws javax.ejb.RemoveException,
                         javax.ejb.FinderException,
                         java.rmi.RemoteException
      Remove a course from the database.
      Parameters:
      key - - The course's unique key.
      Throws:
      javax.ejb.FinderException - when the course doesn't exist.
      javax.ejb.RemoveException - when the course cannot be removed for some
      reason.

renameCourse
public void renameCourse(CourseKeyBean key,
                         java.lang.String name)
                  throws javax.ejb.FinderException,
                         java.rmi.RemoteException
      Rename a course in the database.
      Parameters:
      key - - The course's unique key.
      name - - The new name for this course.
      Throws:
      javax.ejb.FinderException - when the course doesn't exist.




                                       21
addTeacher
public void addTeacher(CourseKeyBean course,
                       java.lang.String teacherId)
                throws javax.ejb.FinderException,
                       java.rmi.RemoteException
     Add a TA to a course.
     Parameters:
     course - - The course's unique key.
     teacherId - - The ID number of the TA.
     Throws:
     javax.ejb.FinderException - when the course or the user doesn't exist.

removeTeacher
public void removeTeacher(CourseKeyBean course,
                          java.lang.String teacherId)
                   throws javax.ejb.FinderException,
                          java.rmi.RemoteException
     Remove a TA from a course.
     Parameters:
     course - - The course's unique key.
     teacherId - - The ID number of the TA.
     Throws:
     javax.ejb.FinderException - when the course or the user doesn't exist.

addStudent
public void addStudent(CourseKeyBean course,
                       java.lang.String studentId)
                throws javax.ejb.FinderException,
                       java.rmi.RemoteException
     Add a student to a course.
     Parameters:
     course - - The course's unique key.
     studentId - - The ID number of the student.
     Throws:
     javax.ejb.FinderException - when the course or the user doesn't exist.

removeStudent
public void removeStudent(CourseKeyBean course,
                          java.lang.String studentId)
                   throws javax.ejb.FinderException,
                          java.rmi.RemoteException
     Remove a student from a course.
     Parameters:
     course - - The course's unique key.
     studentId - - The ID number of the student.
     Throws:
     javax.ejb.FinderException - when the course or the user doesn't exist.

createUser

                                       22
public void createUser(java.lang.String id,
                       java.lang.String name,
                       java.lang.String email)
                throws javax.ejb.CreateException,
                       java.rmi.RemoteException
     Use this method for creating a user instance in the database.
     Parameters:
     id - - The ID number of the user (9 digits).
     name - - The displayed name of the student.
     email - - The e-mail address of the user.
     Throws:
     javax.ejb.CreateException - when the user cannot be created for some
     reason.

getCourses
public CourseValueBean[] getCourses(int semester)
                             throws javax.ejb.FinderException,
                                    java.rmi.RemoteException
     Use this method to get all the courses in a semester.
     Parameters:
     semester - - The semester for which all the courses would be retrieved.
     Returns:
     an array of CourseValueBean objects containing data on all the requested courses.
     Throws:
     javax.ejb.FinderException - when the semester doesn't exist.

getSemester
public SemesterValueBean getSemester(int semesterId)
                              throws javax.ejb.FinderException,
                                     java.rmi.RemoteException
     Get the details of a semester.
     Parameters:
     semesterId - - The id of the requested semester.
     Returns:
     A value bean with data on the requested semester.
     Throws:
     javax.ejb.FinderException - when the requested semester doesn't exist.

getStudents
public UserValueBean[] getStudents(CourseKeyBean courseKey)
                            throws javax.ejb.FinderException,
                                   java.rmi.RemoteException
     Get all the students in a course.
     Parameters:
     courseKey - - The key of the course.
     Returns:
     An array of value beans containing the data on all the students.
     Throws:



                                         23
     javax.ejb.FinderException      - when the course doesn't exist.

getTeachers
public UserValueBean[] getTeachers(CourseKeyBean courseKey)
                            throws javax.ejb.FinderException,
                                   java.rmi.RemoteException
     Get all the TAs in a course.
     Parameters:
     courseKey - - The key of the course.
     Returns:
     An array of value beans containing the data on all the TAs.
     Throws:
     javax.ejb.FinderException - when the course doesn't exist.

getCourse
public CourseValueBean getCourse(CourseKeyBean courseKey)
                          throws javax.ejb.FinderException,
                                 java.rmi.RemoteException
     Get the data of a course.
     Parameters:
     courseKey - - The key of the course.
     Returns:
     A value bean containing the course's data.
     Throws:
     javax.ejb.FinderException - when the course doesn't exist.

removeUser
public void removeUser(java.lang.String id)
                throws javax.ejb.FinderException,
                       javax.ejb.RemoveException,
                       java.rmi.RemoteException
     Use this method for removing a user instance from the database.
     Parameters:
     id - - The ID number of the user (9 digits).
     Throws:
     javax.ejb.FinderException - when the user doesn't exist.
     javax.ejb.RemoveException - when the user cannot be removed for some
     reason.

createSemester
public SemesterValueBean createSemester(int year,
                                        int semester)
                                 throws javax.ejb.CreateException,
                                        java.rmi.RemoteException
     Use this method for creating a semester instance in the database.
     Parameters:
     year - - The year of the first half of the semester (e.g. 2003 for 2003/2004).
     semester - - 0 for winter semester, 1 for spring semester, 2 for summer semester.



                                        24
     Returns:
     A value bean with data on the created semester.
     Throws:
     javax.ejb.CreateException - when the semester cannot be created for some
     reason.

createSemester
public SemesterValueBean createSemester(int id)
                                 throws javax.ejb.CreateException,
                                        java.rmi.RemoteException
     Use this method for creating a semester instance in the database.
     Parameters:
     id - - The ID of the semester.
     Returns:
     A value bean with data on the created semester.
     Throws:
     javax.ejb.CreateException - when the semester cannot be created for some
     reason.

getLastSemester
public SemesterValueBean getLastSemester()
                                  throws javax.ejb.CreateException,
                                         java.rmi.RemoteException
     Get the details of the last semester. If there is no semester in the system, a new
     semester would be created according to the current date.
     Returns:
     A value bean with data on the requested semester.
     Throws:
     javax.ejb.CreateException - when an attempt to create a new semester failed.

addCourses
public void addCourses(int semester,
                       java.lang.String[] ids,
                       java.lang.String[] names,
                       double[] points)
                throws javax.ejb.CreateException,
                       javax.ejb.FinderException,
                       java.rmi.RemoteException
     Add a bunch of courses to the databse.
     Parameters:
     semester - - The semester of all the new courses.
     ids - - The courses' ids.
     names - - The courses' visible names.
     points - - The courses' weights.
     Throws:
     javax.ejb.FinderException - when the semester doesn't exist.
     javax.ejb.CreateException - when a course cannot be created for some
     reason.


                                         25
addTeachers
public void addTeachers(CourseKeyBean course,
                        java.lang.String[] teacherIds)
                 throws javax.ejb.FinderException,
                        java.rmi.RemoteException
     Add a bunch of TAs to a course.
     Parameters:
     course - - The course's unique key.
     teacherIds - - The ID numbers of the TAs.
     Throws:
     javax.ejb.FinderException - when a course or user doesn't exist.

addStudents
public void addStudents(CourseKeyBean course,
                        java.lang.String[] studentIds)
                 throws javax.ejb.FinderException,
                        java.rmi.RemoteException
     Add a bunch of students to a course.
     Parameters:
     course - - The course's unique key.
     studentIds - - The ID numbers of the students.
     Throws:
     javax.ejb.FinderException - when a course or user doesn't exist.

createUsers
public void createUsers(java.lang.String[] ids,
                        java.lang.String[] names,
                        java.lang.String[] emails)
                 throws javax.ejb.CreateException,
                        java.rmi.RemoteException
     Use this method for creating a bunch of user instances in the database.
     Parameters:
     ids - - The ID numbers of the users (9 digits).
     names - - The displayed names of the users.
     emails - - The e-mail addresses of the users.
     Throws:
     javax.ejb.CreateException - when a user cannot be created for some reason.




                                      26
                                                            TeacherController

com.technion.ee.tochna.grades
Interface TeacherController

All Superinterfaces:
       javax.ejb.EJBObject, java.rmi.Remote

public interface TeacherController
extends javax.ejb.EJBObject

Remote interface for Enterprise Bean: TeacherController



Method Summary
                           void addCategory(CourseKeyBean course,
                                java.lang.String name)
                                       Add a grade category to a course.
                           void addGrade(CourseKeyBean course,
                                java.lang.String category,
                                java.lang.String studentId, double grade)
                                       Add a grade to a category.
                           void addGrades(CourseKeyBean course,
                                java.lang.String category,
                                java.lang.String[] studentIds,
                                double[] grades)
                                       Add a bunch of grades to a category.
          CategoryStatistics generateStatistics(CourseKeyBean course,
                             java.lang.String category)
                                       Manually generate and store the statistics of a
                                 specific category.
         CategoryValueBean[] getCategories(CourseKeyBean course)
                                       Get all the categories of a course.
              CourseValueBean getCourse(CourseKeyBean courseKey)
                                       Get the data of a course.
           CourseValueBean[] getCourses()
                                       Get all the courses taught by the calling user.
           CourseValueBean[] getCourses(int semester)
                                       Get all the courses taught by the calling user in a
                                 specific semester.
 CourseGradesTableValueBean getGradesTable(CourseKeyBean course)
                                       Get the grades of all the students in a course.
           SemesterValueBean getLastSemester()



                                          27
                                       Get the details of the last semester.
           SemesterValueBean getSemester(int semesterId)
                                       Get the details of a semester.
                          void removeCategory(CourseKeyBean course,
                               java.lang.String name)
                                       Remove a grade category from the course.
                          void setPublishStatistics(CourseKeyBean course,
                               boolean publish)
                                       Set publishing of statistics to students.




Methods inherited from interface javax.ejb.EJBObject
getEJBHome, getHandle, getPrimaryKey, isIdentical, remove




Method Detail
addCategory
public void addCategory(CourseKeyBean course,
                        java.lang.String name)
                 throws javax.ejb.FinderException,
                        SecurityException,
                        javax.ejb.CreateException,
                        java.rmi.RemoteException
      Add a grade category to a course.
      Parameters:
      course - - The key of the course to which the category is added.
      name - - The name of the category.
      Throws:
      javax.ejb.FinderException - when the calling user isn't defined as a user in
      the system, or the specified course doesn't exist.
      SecurityException - when that calling user is not a teacher of the given course.
      javax.ejb.CreateException - when the category cannot be created for some
      reason.

addGrade
public void addGrade(CourseKeyBean course,
                     java.lang.String category,
                     java.lang.String studentId,
                     double grade)
              throws javax.ejb.FinderException,
                     SecurityException,
                     javax.ejb.CreateException,
                     java.rmi.RemoteException
      Add a grade to a category.


                                         28
     Parameters:
     course - - The key of the course to which the category belongs.
     category - - The name of the category to which the grade is added.
     studentId - - The ID number of the student to which the grade belongs.
     grade - - The grade to be added.
     Throws:
     javax.ejb.FinderException - when the calling user isn't defined as a user in
     the system, or the specified course, category or user doesn't exist.
     SecurityException - when that calling user is not a teacher of the given course.
     javax.ejb.CreateException - when the grade cannot be created for some
     reason.

getCourses
public CourseValueBean[] getCourses()
                             throws javax.ejb.FinderException,
                                    java.rmi.RemoteException
     Get all the courses taught by the calling user.
     Returns:
     an array of CourseValueBean objects containing the courses' data.
     Throws:
     javax.ejb.FinderException - when the calling user isn't defined as a user in
     the system.

getCourses
public CourseValueBean[] getCourses(int semester)
                             throws javax.ejb.FinderException,
                                    java.rmi.RemoteException
     Get all the courses taught by the calling user in a specific semester.
     Parameters:
     semester - - The id of the specific semester.
     Returns:
     an array of CourseValueBean objects containing the courses' data.
     Throws:
     javax.ejb.FinderException - when the calling user isn't defined as a user in
     the system, or the specified semester doesn't exist.

getCategories
public CategoryValueBean[] getCategories(CourseKeyBean course)
                                  throws javax.ejb.FinderException,
                                         SecurityException,
                                         java.rmi.RemoteException
     Get all the categories of a course.
     Parameters:
     course - - The key of the course.
     Returns:
     An array of value beans containing the categories' data.
     Throws:



                                         29
     javax.ejb.FinderException       - when the calling user isn't defined as a user in
     the system, or the specified course doesn't exist.
     SecurityException - when that calling user is not a teacher of the given course.

generateStatistics
public CategoryStatistics generateStatistics(CourseKeyBean course,
                                             java.lang.String category)
                                      throws javax.ejb.FinderException,
                                             java.rmi.RemoteException,
                                             SecurityException
     Manually generate and store the statistics of a specific category.
     Parameters:
     course - - The key of the course.
     category - - The name of the category.
     Returns:
     The generated statistics.
     Throws:
     javax.ejb.FinderException - when the calling user isn't defined as a user in
     the system, or the specified course or category doesn't exist.
     SecurityException - when that calling user is not a teacher of the given course.

getSemester
public SemesterValueBean getSemester(int semesterId)
                              throws javax.ejb.FinderException,
                                     java.rmi.RemoteException
     Get the details of a semester.
     Parameters:
     semesterId - - The id of the requested semester.
     Returns:
     A value bean with data on the requested semester.
     Throws:
     javax.ejb.FinderException - when the requested semester doesn't exist.

getLastSemester
public SemesterValueBean getLastSemester()
                                  throws javax.ejb.FinderException,
                                         java.rmi.RemoteException
     Get the details of the last semester.
     Returns:
     A value bean with data on the requested semester.
     Throws:
     javax.ejb.FinderException - when the there isn't any semester in the system.

getGradesTable
public CourseGradesTableValueBean getGradesTable(CourseKeyBean course)
                                          throws
javax.ejb.FinderException,
                                                 SecurityException,




                                         30
java.rmi.RemoteException
      Get the grades of all the students in a course.
      Parameters:
      course - - The key of the course.
      Returns:
      A value bean containing all the grades data of the course.
      Throws:
      javax.ejb.FinderException - when the calling user isn't defined as a user in
      the system, or the specified course doesn't exist.
      SecurityException - when that calling user is not a teacher of the given course.

getCourse
public CourseValueBean getCourse(CourseKeyBean courseKey)
                          throws javax.ejb.FinderException,
                                 SecurityException,
                                 java.rmi.RemoteException
      Get the data of a course.
      Parameters:
      courseKey - - The key of the course.
      Returns:
      A value bean containing the course's data.
      Throws:
      javax.ejb.FinderException - when the calling user isn't defined as a user in
      the system, or the specified course doesn't exist.
      SecurityException - when that calling user is not a teacher of the given course.

removeCategory
public void removeCategory(CourseKeyBean course,
                           java.lang.String name)
                    throws javax.ejb.FinderException,
                           SecurityException,
                           javax.ejb.RemoveException,
                           java.rmi.RemoteException
      Remove a grade category from the course.
      Parameters:
      course - - The key of the course to which the category is added.
      name - - The name of the category.
      Throws:
      javax.ejb.FinderException - when the calling user isn't defined as a user in
      the system, or the specified course or category doesn't exist.
      SecurityException - when that calling user is not a teacher of the given course.
      javax.ejb.RemoveException - when the category cannot be removed for some
      reason.

addGrades
public void addGrades(CourseKeyBean course,
                      java.lang.String category,
                      java.lang.String[] studentIds,


                                         31
                         double[] grades)
                  throws javax.ejb.FinderException,
                         SecurityException,
                         javax.ejb.CreateException,
                         java.rmi.RemoteException
       Add a bunch of grades to a category.
       Parameters:
       course - - The key of the course to which the category belongs.
       category - - The name of the category to which the grades are added.
       studentIds - - The ID numbers of the students to which the grades belong.
       grades - - The grades to be added.
       Throws:
       javax.ejb.FinderException - when the calling user isn't defined as a user in
       the system, or the specified course, category or users doesn't exist.
       SecurityException - when that calling user is not a teacher of the given course.
       javax.ejb.CreateException - when a grade cannot be created for some reason.

setPublishStatistics
public void setPublishStatistics(CourseKeyBean course,
                                 boolean publish)
                          throws javax.ejb.FinderException,
                                 SecurityException,
                                 java.rmi.RemoteException
       Set publishing of statistics to students.
       Parameters:
       course - - The key of the course.
       publish - - If true, the statistics would be available to students.
       Throws:
       javax.ejb.FinderException - when the calling user isn't defined as a user in
       the system, or the specified course doesn't exist.
       SecurityException - when that calling user is not a teacher of the given course.




                                                            StudentController

com.technion.ee.tochna.grades
Interface StudentController

All Superinterfaces:
       javax.ejb.EJBObject, java.rmi.Remote

public interface StudentController



                                          32
extends javax.ejb.EJBObject

Remote interface for Enterprise Bean: StudentController



Method Summary
 StudentGradesTableValueBean getGradesTable(int semester)
                                         Get all the grades tables of a specific semester.
             SemesterValueBean getLastSemester()
                                         Get the details of the last semester.
             SemesterValueBean getSemester(int semesterId)
                                         Get the details of a semester.




Methods inherited from interface javax.ejb.EJBObject
getEJBHome, getHandle, getPrimaryKey, isIdentical, remove




Method Detail
getSemester
public SemesterValueBean getSemester(int semesterId)
                              throws javax.ejb.FinderException,
                                     java.rmi.RemoteException
       Get the details of a semester.
       Parameters:
       semesterId - - The id of the requested semester.
       Returns:
       A value bean with data on the requested semester.
       Throws:
       javax.ejb.FinderException - when the requested semester doesn't exist.

getLastSemester
public SemesterValueBean getLastSemester()
                                  throws javax.ejb.FinderException,
                                         java.rmi.RemoteException
       Get the details of the last semester.
       Returns:
       A value bean with data on the requested semester.
       Throws:
       javax.ejb.FinderException - when the there isn't any semester in the system.




                                          33
getGradesTable
public StudentGradesTableValueBean getGradesTable(int semester)
                                           throws
javax.ejb.FinderException,

java.rmi.RemoteException
       Get all the grades tables of a specific semester.
       Parameters:
       semester - - The id of the semester.
       Returns:
       A value bean containing all the courses info and grades.
       Throws:
       javax.ejb.FinderException - when the specified semester doesn't exist.




                                                                     Excel Interface
        Classes ‫ למערכת וממנה, נכתבו במסגרת פרויקט זה‬Excel ‫לצורך יבוא ויצוא קבצי‬
‫. ניתן להשתמש בקוד זה לכל‬Excel ‫שבעזרתם ניתן לייבא, לתרגם, ליצר ולייצא בקלות קבצי‬
                                                            :‫ הבא‬API -‫צורך שהוא בעזרת ה‬



                                                                  ExcellComposer

com.technion.ee.tochna.grades.servlet.util
Class ExcellComposer
java.lang.Object
  |
  +--com.technion.ee.tochna.grades.servlet.util.ExcellComposer

public class ExcellComposer
extends java.lang.Object

This is a utility class for generating and exporting an Excel file through a servlet. Usage:
- Instanciate this class with the servlet's response object.
- Add all the desired data using the addXxxxCell(...) methods.
- Call the flush() method.




                                             34
Constructor Summary
ExcellComposer(javax.servlet.http.HttpServletResponse resp,
java.lang.String name)
     Constructor for ExcellComposer.




Method Summary
 void addBodyCell(int row, int column, double value)
            Add a number cell, with regular style.
 void addBodyCell(int row, int column, java.lang.String string)
            Add a text cell, with regular style.
 void addHeaderCell(int row, int column, double value)
            Add a number cell, with header style.
 void addHeaderCell(int row, int column, java.lang.String string)
            Add a text cell, with header style.
 void flush()
            Finalize the creation of the file.




Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait,
wait




Constructor Detail
ExcellComposer
public ExcellComposer(javax.servlet.http.HttpServletResponse resp,
                      java.lang.String name)
               throws java.io.IOException
      Constructor for ExcellComposer.
      Parameters:
      resp - - The servlet's response object. Nothing should be added to this object
      outside of this class.
      name - - A name describing the output data. It is used as the sheet name and as the
      default file name.
      Throws:
      java.io.IOException -

Method Detail

                                            35
flush
public void flush()
           throws java.io.IOException
        Finalize the creation of the file.

addHeaderCell
public void addHeaderCell(int row,
                          int column,
                          java.lang.String string)
                   throws jxl.write.biff.RowsExceededException,
                          jxl.write.WriteException
        Add a text cell, with header style.
        Parameters:
        row - - The cell's row (first row is 0).
        column - - The cell's column (first column is 0).
        string - - The cell's contents.
        Throws:
        jxl.write.biff.RowsExceededException -
        jxl.write.WriteException -

addHeaderCell
public void addHeaderCell(int row,
                          int column,
                          double value)
                   throws jxl.write.biff.RowsExceededException,
                          jxl.write.WriteException
        Add a number cell, with header style.
        Parameters:
        row - - The cell's row (first row is 0).
        column - - The cell's column (first column is 0).
        value - - The cell's contents.
        Throws:
        jxl.write.biff.RowsExceededException -
        jxl.write.WriteException -

addBodyCell
public void addBodyCell(int row,
                        int column,
                        java.lang.String string)
                 throws jxl.write.biff.RowsExceededException,
                        jxl.write.WriteException
        Add a text cell, with regular style.
        Parameters:
        row - - The cell's row (first row is 0).
        column - - The cell's column (first column is 0).
        string - - The cell's contents.
        Throws:
        jxl.write.biff.RowsExceededException -
        jxl.write.WriteException -


                                             36
addBodyCell
public void addBodyCell(int row,
                        int column,
                        double value)
                 throws jxl.write.biff.RowsExceededException,
                        jxl.write.WriteException
       Add a number cell, with regular style.
       Parameters:
       row - - The cell's row (first row is 0).
       column - - The cell's column (first column is 0).
       value - - The cell's contents.
       Throws:
       jxl.write.biff.RowsExceededException -
       jxl.write.WriteException -




                                                                      ExcellParser

com.technion.ee.tochna.grades.servlet.util
Class ExcellParser
java.lang.Object
  |
  +--com.technion.ee.tochna.grades.servlet.util.ExcellParser

public class ExcellParser
extends java.lang.Object

This is a utility class for parsing Excel files from a Sevlet request.
The servlet should be invoked as the action of a form, containing the following fields and
attributes:
- enctype="multipart/form-data"
- method="post"
- An input field of type "file"
- An input field with name="ChartName" specifying the name of the sheet containing the
data
- An input field with name="StartRow" specifying the first row with the relevant data
- An input field with name="EndRow" specifying the last row with the relevant data
- Any number of input fields for which the name ends with "Cols", specifyin the letter of
the column for each column of data. (For now, only one-letter columns are supported).




                                             37
Constructor Summary
ExcellParser(javax.servlet.http.HttpServletRequest req)
     Constructor for ExcellParser.




Method Summary
            double[] getDoubleColumn(java.lang.String key)
                              Get an entire column of number cells.
   java.lang.String getParameter(java.lang.String key)
                               Get a parameter from the input form, which is not one of
                        the required parameters specified above.
 java.lang.String[] getStringColumn(java.lang.String key)
                              Get an entire column of text cells.




Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait,
wait




Constructor Detail
ExcellParser
public ExcellParser(javax.servlet.http.HttpServletRequest req)
             throws java.io.IOException,
                    jxl.read.biff.BiffException
      Constructor for ExcellParser. All the loading and parsing of the file and
      parameters are done here.
      Parameters:
      req - - The servlet's request, containing all the attributes and parameters apecified
      above.
      Throws:
      java.io.IOException -
      jxl.read.biff.BiffException -

Method Detail
getStringColumn
public java.lang.String[] getStringColumn(java.lang.String key)
      Get an entire column of text cells.
      Parameters:


                                            38
     key  - - The name of the form's input field containing the letter of the column with
     the required data (should end with "Cols").
     Returns:
     A String array representing the column.

getDoubleColumn
public double[] getDoubleColumn(java.lang.String key)
     Get an entire column of number cells.
     Parameters:
     key - - The name of the form's input field containing the letter of the column with
     the required data (should end with "Cols").
     Returns:
     A double array representing the column.

getParameter
public java.lang.String getParameter(java.lang.String key)
     Get a parameter from the input form, which is not one of the required parameters
     specified above.
     Parameters:
     key - - The name of the form's input field containing the required data.
     Returns:
     The contents of the input parameter from the form.




                                          39
                                                       ‫מדריך למשתמש‬

                                                                    ‫התקנה‬

                                                    ‫הכנת סביבת העבודה‬
‫שלב ראשון לפני תחילת העבודה הוא פריסת סביבת העבודה )‪ .(Workspace‬יש לפרוס את‬
   ‫סביבת העבודה לתיקיה כלשהי (רצוי בכונן מקומי), ולהפעיל את ‪Websphere Studio‬‬
                             ‫‪ Application Developer‬עם ה- ‪ Workspace‬שנוצר.‬

                                                     ‫הכנת ה- ‪Database‬‬
‫כדי ליצור את הטבלאות השונות ב- ‪ ,Database‬יש ללחוץ עם הכפתור הימני על השורה של‬
    ‫‪ Grades‬תחת ‪ Databases‬ב- ‪ ,J2EE Perspective‬ולבחור ‪ .Export to Server‬ניתן‬
      ‫להשתמש ב- ‪ Connection‬הקיים כדי להתחבר ל- ‪ Database‬בשם ‪ Grades‬בשרת‬
   ‫2‪ ,tochna‬או ליצור ‪ Connection‬חדש לכל סוג של ‪ .Database‬במידה ומשתמשים ב-‬
                      ‫‪ Database‬אחר, יש לשנות את הגדרות ה- ‪ Datasource‬בשרת.‬

                                                  ‫התקנת והפעלת השרת‬
‫‪ ‬השרת משתמש ב- ‪ Custom Registry‬השומר את המידע במערכת הקבצים. לצורך‬
‫התקנת ה- ‪ ,Registry‬יש להעתיק את הקבצים ‪ users.props‬ו- ‪ groups.props‬ל-‬
 ‫‪ .z:\websphere\registry‬ניתן לערוך קבצים אלה כדי להגדיר משתמשים חדשים‬
                             ‫במערכת (יש להוסיף כל משתמש בשני הקבצים).‬
‫‪ ‬כדי להפעיל את השרת, יש לבחור את השרת תחת ‪ Servers‬בתחתית המסך, וללחוץ‬
                    ‫על כפתור ההרצה. כעבור מספר דקות השרת מוכן לעבודה.‬

                                                          ‫הפעלת הממשק‬
               ‫כדי להפעיל את ממשק המערכת, יש להפנות את הדפדפן לכתובות הבאות:‬
                ‫ממשק מזכירות – ‪http://localhost/GradesWeb/Secretary/Main‬‬


                                    ‫04‬
                  ‫ממשק מתרגלים – ‪http://localhost/GradesWeb/Teacher/Main‬‬
                  ‫ממשק סטודנטים – ‪http://localhost/GradesWeb/Student/Main‬‬
  ‫ניתן להפעיל את הממשקים ממחשב מרוחק, ע"י החלפת ‪ localhost‬בשם המחשב בו מורץ‬
                                                            ‫שרת ה- ‪.Websphere‬‬



                                                                        ‫ממשק‬

                                                                      ‫מזכירות‬
     ‫דפים אלה מיועדים לעובדי המזכירות. תפקידם הוא להכניס את המשתמשים המתאימים‬
‫למערכת, סטודנטים וחברי סגל, וכן את הקורסים המתאימים למערכת. לכניסה יש להכניס שם‬
 ‫משתמש וסיסמה, ואז יופיע דף המזכירות הראשי. בדף המזכירות הראשי מופיעה רשימת כל‬
‫הקורסים במערכת. לחיצה על כל קורס מובילה לדף הקורס בו מופיעות רשימת כל המתרגלים‬
                                              ‫בקורס ורשימת כל הסטודנטים בקורס.‬



                                                              ‫מעבר בין סמסטרים‬
‫הסמסטר הנוכחי מוצג בראש המסך באמצע. למעבר לסמסטר הבא לחץ על החץ הימני המופיע‬
   ‫ליד הסמסטר הנוכחי. למעבר לסמסטר הקודם לחץ על החץ השמאלי המופיע ליד הסמסטר‬
      ‫הנוכחי. אם הסמסטר הקודם / הבא אינו קיים במערכת הוא יווצר עם הלחיצה על החץ.‬



                                                         ‫הוספת משתמש למערכת‬
   ‫כל סטודנט או מתרגל חייב להיות קיים כמשתמש במערכת לפני הוספתו כסטודנט / מתרגל‬
 ‫בקורס. להוספת משתמש למערכת יש ללחוץ על הכפתור ‪ .Add User‬לאחר הלחיצה ייפתח‬
                           ‫מסך הוספת משתמש. כעת ישנן שתי דרכים להוסיף משתמש:‬
    ‫הוספה "ידנית" של משתמש. יש להוסיף את מספר הזהות של המשתמש, שמו וכתובת ה-‬
   ‫‪ email‬שלו בשדות המיועדים לכך וללחוץ על כפתור ‪ submit‬המופיע מתחת לשדות אלה.‬


                                      ‫14‬
‫הוספת משתמשים מקובץ. תחת הכותרת ‪ Add users from file‬לרשום את שם הקובץ עם‬
  ‫ה- ‪ path‬המלא או ללחוץ ‪ Browse‬ולבחור את הקובץ. על הקובץ להיות קובץ ‪ ,Excel‬בו‬
   ‫מופיעים מספרי הזהות של כל המשתמשים באותה עמודה, אחד אחרי השני. בשתי עמודות‬
‫נוספות, בשורות המקבילות צריכים להופיע שמות המשתמשים וכתובות ה- ‪ email‬שלהם. יש‬
  ‫למלא את האות המתאימה לכל עמודה במקום המתאים לכך, לציין את שם הגיליון, ולהוסיף‬
            ‫את מספרי השורה הראשונה והאחרונה. לבסוף יש ללחוץ על כפתור ‪.Submit‬‬



                                                            ‫הוספת קורס למערכת‬
   ‫להוספת קורס למערכת יש ללחוץ על הכפתור ‪ .Add Course‬לאחר הלחיצה ייפתח מסך‬
                                    ‫הוספת קורס. כעת ישנן שתי דרכים להוסיף קורס:‬
    ‫הוספה "ידנית" של קורס. יש להוסיף את מספר הקורס, שמו ומספר הנקודות האקדמיות‬
   ‫שהוא שווה בשדות המיועדים לכך וללחוץ על כפתור ‪ submit‬המופיע מתחת לשדות אלה.‬
‫הוספת קורסים מקובץ. תחת הכותרת ‪ Add courses from file‬לרשום את שם הקובץ עם‬
  ‫ה- ‪ path‬המלא או ללחוץ ‪ Browse‬ולבחור את הקובץ. על הקובץ להיות קובץ ‪ ,Excel‬בו‬
‫מופיעים מספרי כל הקורסים באותה עמודה, אחד אחרי השני. בשתי עמודות נוספות, בשורות‬
       ‫המקבילות צריכים להופיע שמות הקורסים מספר הנקודות שלהם. יש למלא את האות‬
‫המתאימה לכל עמודה במקום המתאים לכך, לציין את שם הגיליון, ולהוסיף את מספרי השורה‬
                            ‫הראשונה והאחרונה. לבסוף יש ללחוץ על כפתור ‪.Submit‬‬



                                                          ‫מחיקת קורס מהמערכת‬
  ‫תחילה יש לבחור את הקורס המתאים ע"י לחיצה על הקורס הרצוי בטבלת הקורסים. לאחר‬
                       ‫הלחיצה ייפתח דף הקורס בו יש ללחוץ על ‪.Remove Course‬‬




                                      ‫24‬
                                                           ‫הוספת סטודנט לקורס‬
  ‫תחילה יש לבחור את הקורס המתאים ע"י לחיצה על הקורס הרצוי בטבלת הקורסים. לאחר‬
     ‫הלחיצה ייפתח דף הקורס בו יש ללחוץ על ‪ .Add Student‬לאחר הלחיצה ייפתח מסך‬
                                ‫הוספת סטודנט. כעת ישנן שתי דרכים להוסיף סטודנט:‬
 ‫הוספה "ידנית" של סטודנט. יש להוסיף את מספר הזהות של ה סטודנט, בשדה המיועד לכך‬
                                           ‫וללחוץ על כפתור ‪ submit‬המופיע מתחת.‬
‫הוספת סטודנטים מקובץ. תחת הכותרת ‪ Add students from file‬לרשום את שם הקובץ‬
 ‫עם ה- ‪ path‬המלא או ללחוץ ‪ Browse‬ולבחור את הקובץ. על הקובץ להיות קובץ ‪,Excel‬‬
 ‫בו מופיעים מספרי הזהות של כל הסטודנטים באותה עמודה, אחד אחרי השני. יש למלא את‬
    ‫האות המתאימה לעמודה במקום המתאים לכך, לציין את שם הגיליון, ולהוסיף את מספרי‬
                     ‫השורה הראשונה והאחרונה. לבסוף יש ללחוץ על כפתור ‪.Submit‬‬



                                                            ‫הוספת מתרגל לקורס‬
  ‫תחילה יש לבחור את הקורס המתאים ע"י לחיצה על הקורס הרצוי בטבלת הקורסים. לאחר‬
   ‫הלחיצה ייפתח דף הקורס בו יש ללחוץ על ‪ .Add TA‬לאחר הלחיצה ייפתח מסך הוספת‬
                                       ‫מתרגל. כעת ישנן שתי דרכים להוסיף מתרגל:‬
    ‫הוספה "ידנית" של מתרגל יש להוסיף את מספר הזהות של המתרגל, בשדה המיועד לכך‬
                                           ‫וללחוץ על כפתור ‪ submit‬המופיע מתחת.‬
‫הוספת מתרגלים מקובץ. תחת הכותרת ‪ Add TAs from file‬לרשום את שם הקובץ עם ה-‬
     ‫‪ path‬המלא או ללחוץ ‪ Browse‬ולבחור את הקובץ. על הקובץ להיות קובץ ‪ ,Excel‬בו‬
‫מופיעים מספרי הזהות של כל המתרגלים באותה עמודה, אחד אחרי השני. יש למלא את האות‬
  ‫המתאימה לעמודה במקום המתאים לכך, לציין את שם הגיליון, ולהוסיף את מספרי השורה‬
                            ‫הראשונה והאחרונה. לבסוף יש ללחוץ על כפתור ‪.Submit‬‬




                                      ‫34‬
                                                   ‫מחיקת מתרגל / סטודנט מקורס‬
‫תחילה יש לבחור את הקורס המתאים ע"י לחיצה על הקורס הרצוי בטבלת הקורסים. לאחר‬
‫הלחיצה ייפתח דף הקורס בו מופיעות טבלת המתרגלים בקורס, וטבלת הסטודנטים בו. בכל‬
    ‫שורה בטבלאות אלה ניתן ללחוץ על כפתור ‪ Remove‬ולמחוק את הסטודנט / המתרגל‬
                                                                        ‫מהקורס.‬



                                                                       ‫מתרגל‬
   ‫דפים אל מיועדים לחברי סגל, מטרתם לקבוע קטגוריות לקביעת ציון בכל קורס ולהוסיף‬
 ‫ולאחסן ציונים של הסטודנטים בקורסים השונים. לכניסה יש להכניס שם משתמש וסיסמה,‬
    ‫ואז יופיע דף המתרגל הראשי. בדף המתרגל הראשי מופיעה רשימת כל הקורסים אותם‬
‫המשתמש מתרגל. לחיצה על כל קורס מובילה לדף הקורס בו מופיעה רשימת כל הקטגוריות‬
                        ‫לקביעת ציון בקורס. לחיצה על קטגוריה מביאה לדף הקטגוריה.‬



                                                           ‫הוספת קטגוריה לקורס‬
‫תחילה יש לבחור את הקורס המתאים ע"י לחיצה על הקורס הרצוי בטבלת הקורסים. לאחר‬
  ‫הלחיצה ייפתח דף הקורס בו יש ללחוץ על ‪ .Add Category‬לאחר הלחיצה ייפתח מסך‬
     ‫הוספת קטגוריה. יש להוסיף את שם הקטגוריה, בשדה המיועד לכך וללחוץ על כפתור‬
                                                           ‫‪ submit‬המופיע מתחת.‬



                                                            ‫הוספת ציון לסטודנט‬
‫תחילה יש לבחור את הקורס המתאים ע"י לחיצה על הקורס הרצוי בטבלת הקורסים. לאחר‬
    ‫הלחיצה ייפתח דף הקורס בו יש ללחוץ על הקטגוריה הרצויה. לאחר הלחיצה ייפתח דף‬
                               ‫הקטגוריה. כעת ישנן שתי דרכים להוסיף ציון לסטודנט:‬
‫הוספה "ידנית" של ציון. יש להוסיף את מספר הזהות של הסטודנט וציונו בקטגוריה, בשדות‬
                             ‫המיועדים לכך וללחוץ על כפתור ‪ submit‬המופיע מתחת.‬

                                     ‫44‬
‫הוספת ציונים מקובץ. תחת הכותרת ‪ Add grades from file‬לרשום את שם הקובץ עם ה-‬
     ‫‪ path‬המלא או ללחוץ ‪ Browse‬ולבחור את הקובץ. על הקובץ להיות קובץ ‪ ,Excel‬בו‬
  ‫מופיעים מספרי הזהות של כל הסטודנטים באותה עמודה, אחד אחרי השני, בעמודה נוספת,‬
       ‫בשורות המקבילות, יופיעו ציוני הסטודנטים בקטגוריה הנוכחית. יש למלא את האות‬
  ‫המתאימה לעמודה במקום המתאים לכך, לציין את שם הגיליון, ולהוסיף את מספרי השורה‬
                             ‫הראשונה והאחרונה. לבסוף יש ללחוץ על כפתור ‪.Submit‬‬



                                                           ‫יצוא נתוני הקורס לקובץ‬
  ‫תחילה יש לבחור את הקורס המתאים ע"י לחיצה על הקורס הרצוי בטבלת הקורסים. לאחר‬
                 ‫מכן יש ללחוץ על ‪ ,Download Grades‬ולבחור את שם הקובץ הרצוי.‬



                                                      ‫איפשור / ניטרול סטטיסטיקות‬
      ‫על מנת לאפשר לסטודנטים לראות את הסטטיסטיקות של הקורס יש ללחוץ על כפתור‬
 ‫‪ Enable Statistics‬ולודא שה- ‪ checkbox‬מסומן, אחרת הסטודנטים לא יוכלו לראות את‬
                                                                ‫סטטיסטיקות הקורס.‬




                                                                         ‫סטודנט‬
 ‫דפים אלה מיועדים לסטודנטים הרוצים לראות את ציוניהם. לכניסה יש להכניס שם משתמש‬
 ‫וסיסמה, ואז יופיע דף הסטודנט. בדף זה יופיעו כל ציוניו של הסטודנט, בכל הקורסים שהוא‬
  ‫לוקח, בכל הקטגוריות. כמו כן הסטודנט יכול לעבור בין הסמסטרים השונים ע"י לחיצה על‬
                                                              ‫החיצים שבראש המסך.‬




                                       ‫54‬
                                                        ‫ביבליוגראפיה‬
 IBM Redbook - Servlet and JSP Programming with IBM WebSphere
   Studio and VisualAge for Java, http://publib-
   b.boulder.ibm.com/Redbooks.nsf/RedbookAbstracts/sg245755.html
 IBM Redbook - EJB 2.0 Development with WebSphere Studio
   Application Developer, http://publib-
   b.boulder.ibm.com/Redbooks.nsf/RedbookAbstracts/sg246819.html
 The J2EE Tutorial for the Sun ONE Platform,
   http://java.sun.com/j2ee/1.3/docs/tutorial/doc/index.html
 com.oreilly.servlet package, Jason Hunter,
   http://www.servlets.com/cos/index.html
 Java Excel API, Andy Khan, http://www.andykhan.com/jexcelapi




                                  46

								
To top