העדפותיי האישיות לחבילת הג'אווה המושלמת

אז מה הjava stack המועדף עליי?

במהלך עבודתי כיועץ JAVA פרילנסר עצמאי, אני מתבקש לעיתים קרובות להמליץ על טכנולוגיות ג'אווה מתאימות לפרויקט מסויים. בג'אווה בניגוד לטכנולוגיות של מיקרוסופט כמו דוט נט, יש מגוון עצום של אפשרויות בבואינו לבחור סביבות עבודה. לכל שכבה באפליקציה יש אינספור פריימוורקים, ספריות וAPI, חלקם הגדול בקוד פתוח ואחרות מסחריות. כל ארכיטקט ויועץ בוחר בSTACK האהוב עליו בהתאם להעדפותיו האישיות וכמובן בהתחשב בדרישות הפרוייקט וביכולות המוצרים השונים. בפוסט זה אפרוס את ההעדפות האישיות שלי שמתאימות למרבית הפרוייקטים אם כי זה כמובן משתנה בהתאם לצרכי הלקוח.

תצורה כללית Best of bread – Non J2EE

J2EE היא טכנולוגיה טובה אבל במקרים רבים מדובר בover kill והיא עמוסה פיצ'רים ושכבות שלא נמצאות בשימוש ומכבידות על המערכת. השימוש בsession Beans למשל כשהרבה פעמים אין צורך בכך ובכלל הEJB Container המסורבל כאשר הפונקציונליות היחידה שבאמת צריך היא JPA שאפשר לקבל גם ללא EJB (באמצעות Hibernate למשל). בנוסף, בJ2EE יש נטייה להצמד לשרת של יצרן מסויים ודי מהר מתחילים להשתמש בפיצ'רים היחודיים לאותו מוצר. זה גורם לאפליקציה להיות Non Portable כשרוצים לעבור לשרת אחר. פעמים רבות נתקלתי בפרוייקטים שרצים מעל J2EE כשהשרת משמש ללא יותר מאשר Servlet Container. הפלטפורמה של JEE מסבך דברים פשוטים: WAR פשוט הופך לEAR מורכב, Deployment Descriptiors מיותרים בחלק מהגרסאות, ובגלל שהשרתים בדרך כלל תפורים מראש קשה להחליף מודול ספציפי במקרה הצורך (למשל לשדרג לגרסה חדשה יותר). לדעתי כדאי להמנע ככל שאפשר משימוש

Application Server – Apache Tomcat

שרת האפליקציות וServlet Container הנפוץ בעולם. היחיד שיכול אולי להתחרות בו הוא Jetty אבל התיעוד הרב, וותק רב השנים, האינטגרציה הטבעית עם שרת Apache כשרת WEB, והאמינות של ארגון Apache הופכים אותו לאופציה הטובה ביותר.

ORM Persistence – Hibernate JPA Annotations

למרות שעדיין יש ארגונים המפתחים בhibernate בתוצרה הישנה קרי, שימוש בXML על מנת להגדיר את המיפוי בין המחלקות לטבלאות, השימוש בJPA annotations מהווה יתרון מכמה סיבות: ראשית זה מאפשר מעבר לEJB במידה ורוצים בעתיד להעביר את האפליקציה לJEE. שנית, הקוד הרבה יותר קריא וברור כשמעל לכל Property בקוד מופיע הגדרות המיפוי שלו. כמו כן זה מוריד את הצורך לתחזק XML שבמקרים רבים הופך להיות ארוך ומסורבל.

Dependency Injection – SPRING

במקומות רבים מוותרים לגמרי על השימוש בDI ובSPRING בפרט אבל לדעתי זהו פיצ'ר חשוב שמייעל ומפשט את הקוד בצורה משמעותית. הבחירה שלי בSPRING ולא בפריימוורקים אחרים כגון Google Guise היא שSPRING הוא הרבה יותר מרק DI. במקרה הצורך אפשר למצוא מענה טוב לכמעט כל טכנולוגיית ג'אווה קיימת: JMS, JPA, Security, RMI, Web Service, מימוש טוב לAOP ועוד ועוד. היופי בSPRING הוא היותו מבוסס על POJO כך שתמיד קל להבין איך דברים עובדים והכי חשוב: אפשר לשלוט בכמות הSPRING שמשתמשים בו בקוד. החל משימוש מועט רק בDI וכלה באפליקציית SPRING מלאה כולל MVC ושאר הפיצ'רים שהפריימוורק הענק הזה מציע.

UI – Rich Client with Adobe Flex

זה אמנם לא ג'אווה ולא WEB קלאסי אבל כיום אין תחליף לפלקס וליכולות שהוא מציע באפליקציות שדורשות קליינט מורכב וברמה גבוהה. יש כמה בעיות בUI רגיל מבוסס HTML וAJAX: ראשית הקליינט לא אמין. Exception יכול לגרום לכל הדף לעוף מבלי יכולת שחזור, ניתוק זמני מהשרת גורם לעיתים קרובות לאיבוד מידע, בעיית תאימות בין דפדפנים, קושי לפתח אלמנטים גרפיים מורכבים, ועוד. שורש הבעייה בממשקי WEB נעוץ בעובדה שהממשק בסופו של דבר בנוי על HTML. הבעייה ששפה זו מלבד היותה מיושנת, יועדה במקור ליצירת מסמכים עשירים ולא לממשקי משתמש. אין גרפיקה ווקטורית, אין קומפוננטות UI נפוצות כמו Tree והקומפוננטות הקיימות מספקות פונקציונליות שמתאימה למסמך ולא לאפליקציה. קחו למשל את Table, על מנת שהוא ייראה כמו טבלה מודרנית עם אפשרות להזזת עמודות, מיונים, פילטרים וכו' צריך לכתוב קוד רב ובדרך כלל להשתמש בכלל באלמנטים אחרים כמו DIV ולא בTABLE של HTML. הפריימוורקים הרבים הקיימים מבוססים על קוד JavaScript שמבצע מניפולציות על אלמנטים בHTML ו"אונסים" אותם כך שייראו כמו UI נורמלי. הדבר היחיד שיכול לשנות את התמונה הוא HTML5 אבל יש עוד דרך ארוכה עד שנוכל להשתמש בתקן זה. ראשית צריך שהתקן יסגר ויתמך בכל הדפדפנים, אחר כך צריך שחברות יפתחו ספריות קומפוננטות מבוססות HTML5. הcanvas כנראה יספק בסיס מתאים אבל מישהו צריך לפתח ולפרסם פקדים שיהיה ניתן לעבוד איתם. כך שבנתיים מבחינת טכנולוגיות זמינות ובוגרות FLEX היא האופציה הטובה ביותר לפיתוח מהיר של ממשקים גרפיים עשירים.

אודות הבלוג הזה – מי אני

shlomo_schwarcz

מאז היותי ילד אני מתכנת בשפות שונות. בשנים האחרונות עסקתי בעבודות ובפרוייקטים רבים בתחום פיתוח תוכנה: החל מחברות ענק כמו SAP ואינפורמטיקה, דרך סטאטראפים כמו GigaSpaces ועד חברות תעשיתיות שונות כמו בתי זיקוק, פז ונטפים. תחום ההתמחות שלי הוא כל מה שקשור לטכנולוגיות ג'אווה: J2EE, EJB, JSP, Servles, JDBC, JNI, RMI, Spring, Hibernate, JSF, SWING. בנוסף עסקתי רבות גם בתחומי הסאפ השונים ובעיקר בNetWeaver, SAP Portal, WebDynpro, Visual Composer ושאר טכנולוגיות ג'אוואיות של SAP. וכמובן כדי להשלים את התמונה גם .C++, NET, C#, ASP מוכרים לי היטב.

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

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

נשתמע,
שלמה שוורץ
shlomo@shefertech.com

נסיון מקצועי

SAP Labs

על החברה
SAP הינה חברת התוכנה השלישית בגדולה בעולם ונחשבת למובילה עולמית בשוק התוכנות לניהול ארגוני. החברה המציאה את תוכנת הERP – תכנון משאבים ארגוניים, תוכנה המתיימרת לנהל את משאבי הארגון מקצה לקצה: משאבי אנוש, פיננסים, לוגיסטיקה, ייצור, הפצה, רכש, מלאי, מכירות ועוד.
ב2001 רכשה SAP את חברת TopTier הישראלית שנוסדה ע"י שי אגסי תמורת 400 מליון דולר במזומן. זמן קצר לפני הרכישה התחלתי לעבוד בטופטיר כמפתח C++. המוצר של טופטיר היה פורטל ארגוני (Enterprise Portal). מדובר באפליקציית WEB שמאפשרת לעובדים בארגון לגשת לכל מערכות המידע של הארגון דרך אתר פשוט ואינטואיטיבי. הרעיון הוא שהכל מאוגד במקום אחד ונגיש דרך הדפדפן ובכך חוסך שימוש בתוכנות רבות ומגוונות. טופטיר הפכה למרכז הפיתוח של SAP בישראל (SAP Labs) ועם השנים הגדילה את מצבת העובדים שלה במאות אחוזים.
במקביל, הפורטל של SAP הפך עם הזמן לחבילת תוכנה מלאה בשם SAP NetWeaver. פלטפורמה זו כוללת בתוכה מספר מודולים שיחד מציעים תשתית רבת עוצמה להפעלת תוכנות ארגוניות שונות. בין השאר כוללת הפלטפורמה

  • שרת J2EE – SAP J2EE Engine
  • פורטל ארגוני – SAP Enterprise Portal
  • מערכת דוחו"ת BI – SAP BW
  • מחולל אפליקציות ויזואלי – Visual Composer
  • סביבת פיתוח ויזואלית – SAP NetWeaver Studio מבוססת אקליפס

פיתוחים מעניינים במסגרת התפקיד
בשנתיים הראשונות התמקדתי בגרסה הראשונה של הפורטל שנקראה EP 5. גרסה זו היתה מבוססת ברובה על הפלטפורמה שפותחה בטופטיר תוך שימוש בטכנולוגיות מיקרוסופט: COM, IIS, ASP, VC++, ATL. המשימות הראשונות היו להפוך את הפורטל ממוצר של חברת סטארטאפ, למוצר שמתאים לסטנדרטים של SAP. הרבה עבודה נדרשה ובמשך שנתיים עמלנו על שחרור גרסאות משופרות. הדגש היה על ביצועים, עמידות, גלובליזציה ותמיכה בשפות מרובות, ותמיכה בפלטפורמות שונות ובעיקר Oracle מאחר והגרסה הראשונה רצה על SQL Server בלבד.
בשלב השני התחלנו לפתח את הגרסה החדשה של הפורטל – EP 6. גרסה זו התבססה כולה על פלטפורמת J2EE ולמעשה נכתבה מחדש מאפס. מרכז הפיתוח בישראל עשה מעבר מהיר לאנשי הפיתוח מC++ לJava. העובדים עברו קורסים מזורזים, גיוסים מאסיבים של אנשי ג'אווה ותחלופת עובדים טבעית הפכו מהר את החברה למרכז מבוסס ג'אווה לחלוטין. הצוות שלי היה אחראי בעיקר על פיתוח רכיבי התממשקות Connectors למערכות חיצוניות: Siebel, Lotus Notes, PeopleSoft  ועוד תוך שימוש בארכיטקטורת JCA.

בתי זיקוק

על החברה
בז"ן הינה בית הזיקוק הגדול בישראל ונסחרת בבורסה בשווי של מעל 5 מליארד ₪. החברה מספקת את מרבית מוצרי הנפט המזוקק לחברות האנרגיה בישראל.

פיתוחים מעניינים במסגרת התפקיד
בבז"ן קיימת מערכת SAP ERP ומערכות חיצוניות אחרות מבוססות טכנולוגיות שונות: ASP, J2EE, VB ועוד. במסגרת התפקיד תכננתי ופיתחתי מערכת ממשקים בין המערכות השונות בארגון מבוסס Web Services ותואם לארכיטקטורת SOA. התפקיד כלל הסבה של מערכות ישנות לפלטפורמות SAP J2EE, אינטגרציה בין מערכות שונות בארגון ופיתוח פיצ'רים חדשים במערכות תפעוליות בסביבת Oracle iAS וOracle JDeveloper.

פז ובתי זיקוק אשדוד

על החברה
בשנת 2006 רכשה חברת פז את בתי זיקוק אשדוד במסגרת מהלך הפרטה של הממשלה תמורת 3.2 מליארד ₪. הרכישה יצרה אתגר עצום למחלקת הIT בשני מובנים:
הפרדת מערכות המידע של בתי זקוק חיפה ובתי זיקוק אשדוד שעד אז פעלו כיחידה אחת
אינטגרציה של מערכות המידע של בז"א עם אלו של חברת פז

על התפקיד
במסגרת התפקיד ייעצתי לחברת פז ולקחתי חלק בהתאמה, הגירה ואינטגרציה של מערכות אשר "ירשו" מבתי זיקוק אשדוד. התפקיד כלל פיתוח בJava/J2EE על פלטפורמת Oracle JDeveloper ושרתי Oracle AS, ניתוח ואפיון המערכות, פיתוח ממשקים ואינטגרציה עם מערכות פז הקיימות ובעיקר SAP R3.

הנוער העובד והלומד

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

על התפקיד
במסגרת התפקיד ביקשנו לפתח ולהקים מערכת ניהול מבוססת WEB שתסייע בניהול משאבי ארגון. המערכת אופיינה ע"י אנשי הארגון וכללה מודולים שונים. על מנת לצמצם בעלויות, שימשתי כיועץ חיצוני במשרה חלקית וסייעתי להכשיר אנשים בתוך הארגון תוך שאני מספק את הארכיטקטורה ואת רכיבי הליבה בעוד שעובדי הארגון מפתחים את שאר החלקים. בין השאר פיתחתי שכבת גישה לDB, מערכת ניהול משתמשים, גישה למסמכים ועוד. המערכת פותחה על שרתי MS IIS תוך שימוש בASP.NET וC# ובבסיס נתונים MySQL.

אדוונטק

על החברה
אדוונטק היא חברת IT ישראלית המונה ארבעה חטיבות עיקריות: SAP, Oracle, Microsoft, Java. החברה מעסיקה כ300 עובדים ופועלת במגזרים שונים.

על הפרוייקט
במסגרת התפקיד הדרכתי שלושה קורסים רשמיים של חברת SAP באיסטנבול, טורקיה.
הקורסים עסקו בהקמה, ניהול ופיתוח בשרתי SAP J2EE Server וניהול תצורת Java בסביבת SAP NetWeaver.

GigaSpaces

על החברה
GigaSpaces הינה חברת סטארטאפ מובילה בתחום הGrid Cache ומפתחת מוצר לשיפור ביצועים במערכות מבוססות Java. המוצר של גיגהספייסס הינו טכנולוגיה מתקדמת שמאפשרת שמירה ואיחסון של אובייקטי Java בזמן ריצה על שרתים שונים בGrid תוך שימוש במשאבים פנויים לפי הצורך.

על הפרוייקט
במסגרת התפקיד פיתחתי קוד בC# על מנת לאפשר העברה וסיריאליזציה של אובייקטי Java מהמערכת של GigaSpaces למערכות .NET ובחזרה. הפיתוח היה בדגש על ביצועים ותמיכה בMulti Threading.

מכללת אינטרביט

על החברה

InterBit הינה המכללה המובילה בישראל ללימודי Java ומכהנת כנציגה הרשמית של SUN בישראל. המכללה מעבירה קורסי ג'אווה בחברות ההי-טק המובילות בישראל בכל תחום אפשרי בJava וכמו כן מתמחה במוצרי קוד פתוח אחרים כגון: PHP, Linux וכו.

על התפקיד
במסגרת התפקיד הדרכתי בקורסי ג'אווה שונים בינהם: Basic Java Programming, Advanced Java, Extreme Java, Developing Eclipse Plug-ins ועוד. הקורסים כללו נושאים מגוונים כגון: Multi Threading, Performance, Memory Management, Design Patterns, JDBC, RMI, JNI, JMX. בין השאר הדרכתי קורסים פנימיים ובחברות: אמדוקס, קומברס ואחרות.

דנשיר מערכות

על החברה
דנשיר מערכות הינה חברת תוכנה המתמחה במתן שירותי IT ומערכות מידע בסביבות מגוונות. לחברה נסיון רב במערכות SAP ופיתוח ויישום ERP והינה שותפה עסקית של SAP.

על התפקיד
במסגרת התפקיד ניהלתי את קבוצת Java & NetWeaver בחברה. התפקיד כלל גיוס וניהול של מפתחי ג'אווה לקבוצה, שווק ומכירות מול לקוחות החברה וגיוס פרוייקטים חדשים, תכנון פרוייקטים בJava ובסביבות SAP Portal אצל לקוחות החברה. בין הפרוייקטים שביצעתי במסגרת החברה:

פיתוח פורטל ארגוני באוניברסיטת חיפה
פיתוח מערכת לדיווחי שעות עבור הסגל הזוטר באוניברסיטת חיפה. אוניברסיטת חיפה מעסיקה אלפי עובדים זמניים בשנה (לעיתים כאלה שעושים עבודה חד-פעמית כגון בדיקת מבחנים או סיוע למחקר). כל עובד מחוייב להגיש דו"ח שעות מפורט שעובר שרשרת אישורים ומוזן למערכת הSAP. המערכת החדשה פותחה בJava/J2EE על בסיס SAP Portal (תוך שימוש בWebDynpro) ומאפשרת לכל איש סגל לדווח שעות דרך מערכת WEB פשוטה וקלה לשימוש. המערכת מנהלת שרשרת אישורים דרך SAP Workflow כך שכל טופס עובר את אישור הדרגים השונים בארגון דרך הSAP.

פיתוח מערכות שונות בחברת נטפים
בחברת נטפים ניהלתי את מערכת הSAP Portal ופיתחתי מספר אפליקציות Java בטכנולוגיית WebDynpro. המערכת של נטפים כוללת עשרות אפליקציות הכתובות בJava ונחשבת למתקדמת ומושקעת.

פיתוח מערכת ניהול בחברת CNW
CNW הינה חברת בלדרות אקסקלוסיבית המתמחה במשלוחים בינלאומיים רגישים הדורשים זמני שילוח קצרים במיוחד. לחברה מערכת ייחודית לתמחור וניהול המשלוחים שפותחה כולה בJava/J2EE על שרתי JBoss. המערכת מבוססת על טהרת הקוד הפתוח: שרתי JBoss, בסיס נתונים MySQL, ותצורת J2EE קלאסית: שכבת UI שנכתבה בServlets/JSP, שכבת מידע ממומשת באמצעות EJB.

על התפקיד
במסגרת התפקיד ניהלתי את צוות הפיתוח של החברה והובלתי את הארכיטקטורה ואת אסטרטגיית הIT של הארגון. בתקופה זו הכנסתי סטנדרטים חדשים בחברה: נהלים לאבטחה וגיבוי, ניהול תצורה, ובקרה על הקוד. בנוסף התחלנו להגר את שכבת הUI ממשקי JSP עם עיצוב לא מיושן וקוד "ספגטי" לשכבת JSF תוך שימוש בספריית IceFaces. בנוסף הובלתי את פיתוחה של מערכת סינכרון המבוססת JMS ומסנכרנת בין שרתי החברה השונים המוצבים בעולם.

אינפורמטיקה

על החברה
אינפורמטיקה הינה חברה אמריקאית המובילה בפיתוח כלי ETL. מוצר הדגל של החברה PowerCenter מאפשר הטענה של מידע ממקורות שונים: בסיסי נתונים, מערכות ERP, Web Services, מסמכים, קבצים וכו', עיבוד המידע והעברתו למערכות אחרות.
בשנת 2008 רכשה אינפורמטיקה את חברת איטמפילד הישראלית תמורת 55 מליון דולר. חברת ItemField פיתחה מנוע המאפשר להמיר קבצים ומידע בפורמטים שונים בדגש על unstructured data. למשל: סריקה של מסמכי word או Excel והפיכתם למידע טבלאי מובנה. Parsing של קבצים בינאריים בעלי פורמט משתנה ועוד. המוצר מוטמע במוצרים אחרים תחת הסכמי OEM עם חברות כמו: SAP, IBM.

על התפקיד
במסגרת התפקיד לקחתי חלק בפיתוח מוצר חדש בשם Data Exchange. מוצר זה מאפשר לקבל הודעות מארגונים וחברות חיצוניות, להמיר אותם לפורמטים המתאימים ולשמור אותם במערכות הפנים ארגוניות. המוצר מהווה את פלטפורמת הB2B של אינפורמטיקה ובין לקוחותיו העיקריים נמצאים כמה מן הבנקים הגדולים בעולם. בצוות הDX פיתחתי את הממשקים בין שרתי הDX לכלי אינפורמטיקה האחרים: PowerCenter. המערכת פותחה בJava תוך שימוש בHibernate, SPRING, בסיס נתונים Oracle, JMS, וטכנולוגיות WEB כמו Tomcat וGWT.