שימוש בosgi להפרדת classpath?

TakeCtrl

New member
שימוש בosgi להפרדת classpath?

אני מנסה לפתח פרוייקט חיצוני שמשתמש בjar של המוצר שלנו לטעינת קובץ קונפיגורציה.
אני רוצה לאחד קוד כמה שיותר. הבעיה שבין כל גרסאות של המוצר יכולים להיות שינויים קלים (כגון class שעוברים package), לכן חשבתי לפתח מעין api שיהיו לו מימושים שונים בכל גרסה, כאשר כל מימוש יהיו לו pom משלו שיכלול תלויות רק לגרסה הספיציפית לאותו מימוש.
הבעיה היא שאם ארצה לארוץ אותו כפרוייקט אחד (super pom עם כמה sum pom ) בסופו של דבר יהיו לי עירבובייה בין כל הjar של כל הגרסאות, לכן עלה בדעתי להשתמש בfelix כאשר כל bundle יהיה מימוש, ואז כל אחד יוכל לחיות בclassloader משלו (כמו Plugin).
הצרה היא שבosgi עקומת למידה לא קטנה (ורובם מתמקדים בeclipse ואני משתמש בidea), חשבתי על שימוש בbnd ו plugin של maven שלו אבל עדיין זה מאוד לא ברור לי.
 

selalerer

New member
לא כלכך הצלחתי להבין מה אתה מנסה לעשות, מה הבעיות ומה...

...הפתרונות שאתה מציע.
&nbsp
אתה יכול אולי לנסח את זה בצורה פשוטה יותר?
 

TakeCtrl

New member
נגיד שיש לך class machine שגרסת מוצר אחד נמצאת

בpackage של com.company.config
ובשני עברה כבר ל com.company.config.network
&nbsp
ואתה צריך בclass מרכזי אחד לעבור על כל הmachines ולשנות להם IP במידה והmachine הוא מסוג מסויים (רק בגרסה את הסוג הוא string ובשנייה הסוג הוא enum).
שניהם נמצאים בjar עם אותו שם כמובן (config.jar) רק בגרסאות שונות.
 

user32

Well-known member
מנהל
המצב האידיאלי יהיה

להוציא את הקלאסים המשותפים לJAR חיצוני עם pom משלו. הפרוייקט החיצוני והפרוייקט ה"רגיל" משתמשים בJAR. להוציא לinterfaces במידת הצורך. קיום של אותו קלאס בחבילות שונות זה כבר דבר לא מומלץ וקומבינות מסוג לשחק עם class loaders ושאר פטנטים הוא מיותר.
OSGI הוא עוד המצאה שגרמה למתכנתים לשנוא ולעבור מג'אווה. מרוב סטנדרטים וחוקים לא נותנים לפתח בשקט.
 

TakeCtrl

New member
זה היה יכול להיות נחמד אבל אני לא יכול לעשות refactor

לjar הקיימים, זה המוצר עצמו, אני חייב לגשת אליו מבחוץ.
בסופו של דבר jigsaw יהיה הosgi
 

user32

Well-known member
מנהל
הנה מה שאני עושה

copy-paste לקוד של הקלאס(ים). מעל הקלאס החדש אני שם הערה ארוכה שמסבירה את התסכול שלי שלא מאפשרים לעשות ריפקטור ולכן נאלץ לשכפל או להכנס לגיהנום של תלויות, הזרקות, טעינות מתחכמות. ככה לא יחשבו שהייתי טמבל, זה תמיד משהו שמדאיג אותי כשאני משאיר מאחוריי קוד לדורות הבאים
 

TakeCtrl

New member
זה בסדר, יש כבר מספיק תסכול מזה שצריך לשכתב את זה מc++

ומזה שהוא פותח כמה אלפי threads (כדי לחקות מכונות (מיני UDP servers שיושב על כל פורט פנוי שהוא מוצא).
יהיה מעניין מה java יעשה עם זה..
 
למעלה