Java Micro Edition

Java Platform, Micro Edition או Java ME (ובעבר Java 2 Platform, Micro Edition או J2ME) היא מפרט המגדיר חלק מפלטפורמת Java המיועד לספק אוסף של ממשקי ג'אווה לפיתוח תוכנות במכשירים שונים כדוגמת טלפונים חכמים.
רקע
ב- Java מורצת התוכנה על מכונה וירטואלית. היתרון העיקרי של ריצה על מכונה וירטואלית הוא שניתן לכתוב את הקוד ללא תלות במערכת ההפעלה שעליה הוא עומד לרוץ. על מנת לאפשר התאמה של קוד Java למכשירים ניידים, נכתבו מספר גרסאות של JVM עבור מכשירים אלו. ריבוי המכשירים, ריבוי מערכות ההפעלה, וסוגי מעבדים שונים יצרו מוטיבציה לפיתוח על בסיס מכונה וירטואלית בתחום זה. השם הכולל שניתן למכונה הוירטואלית של Java עבור מכשירים ניידים הוא Java ME (נקראת גם J2ME).
פיתוח ותשתית
כדי לפשט את כתיבת המכונה הווירטואלית למגוון של טלפונים ומערכות קטנות, היא חולקה לשתי שכבות לוגיות. השכבה הנמוכה יותר נקראת CDC או CDLC. אלו שני סוגים שונים של השכבה הנמוכה שיפורטו בהמשך. שכבה זו משתנה בהתאם לחומרה הספציפית ולמערכת ההפעלה של המכשיר הנייד, ויש לפתח אותה עבור כל מכשיר נייד. מעליה נמצאת שכבת האפליקציה, המממשת את ה- API המסופק על ידי Java Virtual Machine. שכבת האפליקציה אחראית למשל על טיפול בתפריט ובמסך, כאשר היא מסתמכת על שכבת ה- CDC/CDLC לתקשורת עם החומרה ומערכת ההפעלה של המכשיר.
שכבת ה- CDC (או בשמה המלא: Connected Device Configuration) היא התשתית למערכות שהן יחסית עתירות משאבי זיכרון ועיבוד, ואילו שכבת ה CLDC (הנקראת Connected Limited Device Configuration) מיועדת למערכות מוגבלות משאבים, ומאפשרת פונקציונליות פחותה.
בנוסף, קיימים מספר וריאנטים של שכבת האפליקציה. הגרסא הנפוצה ביותר היא ה- MIDP. גרסא זו מפותחת בעזרת תשתית CLDC, שהיא מוגבלת יותר, ובהתאם מכילה חלק קטן יותר של ה- API הסטנדרטי. לעומתה, Personal Java ו- Java TV הן גרסאות חזקות יותר של שכבת האפליקציה, המשתמשות בשכבת CDC. לכן, הן תומכות בממשק מורחב יותר, הדומה יותר לממשק Java הסטנדרטי. לדוגמא, Personal Java כוללת תמיכה ב- AWT, ממשק המשמש ליצירה של גרפיקה מבוססת חלונות וממשק משתמש באופן פשוט.
כדי לעזור ליצרניות המכשירים הניידים בהתאמה ל- Java, חברת Sun מספקת שירותי מימוש Java לטלפונים וסביבות פיתוח עבור J2ME.
ממשקים עיקריים
אפליקציית Java הכתובה עבור MIDP נקראת Midlet. (בדומה ל- Applet, Servlet)
ב- MIDP נתמכות הפונקציות העיקריות הבאות הבאות:
- הפעלה ראשונית, המתנה (למשל בעת קבלת שיחה) וסיום האפליקציה.
- קבלת אובייקט המסך, ושימוש באובייקטים גרפיים על מנת להציג עליו תפריטים או גרפיקה.
- מערכת טעינה חכמה, המאפשרת אריזת אפליקציות בקובץ Jar (קובץ ארוז רגיל של Java) ויצירת קובץ תיאור של האפליקציה, המאפשר למכשיר לוודא האם האפליקציה נתמכת לפני הטעינה עצמה. קובץ התיאור נקרא קובץ Jad
הרחבות
האם עקרון "כתוב פעם אחת הרץ בכל מקום" עובד תמיד? ברמת העיקרון התשובה חיובית, כל עוד הדבר נוגע לממשק משתמש מופשט (כגון טפסים, התראות, מסכי בחירה וכיוצא בזאת).
יחד עם זאת, כאשר נעשה שימוש בCanvas, לדוגמה, במשחקים, על המתכנת מוטלת האחריות להקפיד שהמשחק יוכל להתאים לגדלי מסך שונים, והיה והדבר אפשרי.
במקביל להתפתחות של הטלפונים באירופה ובארצות הברית על ידי נוקיה, מוטורולה וסימנס התפתחה ביפן תרבות משחקי טלפון שגרמה להיווצרות דיאלקט Java משלהם שנקרא IAPP. בניגוד לMIDP היא הותאמה למשחקים וDoCoMo היינו המפעיל המפורסם מכולם. משחק כמו עולם וירטואלי של סמוראים הוא דוגמה לרמת התפתחות תרבות המשחק בטלפונים שם.
בהמשך לדרישה של תמיכה חזקה יותר באפליקציות בידוריות ובמשחקים יצאו שלוש הרחבות של הגדרות ממשקים:
- ממשק מולטימדיה התומך בנגנים של אודיו ווידאו וSMS/MMS והרבה טלפונים תומכים בו בימינו.
- ממשק MIDP 2.0 שמוסיף את התמיכה במשחקים כמו Sprites (דמויות דו ממדיות הזזות על פני המסך ויודעים לזהות התנגשות) ובאנימציה (הצגה של סדרת תמונות). בנוסף שופרו בו תוכנות התקשרות כמו בקרת גישה לרשת ואפשרות יזומה של בקשה כלפי הטלפון (Over The Air) בMIDP המקורי ברוב הפעמים הטלפון פנה בבקשת HTTP (כמו דפדפן) לשרת. פה הורחבו האפשרויות.
- ממשק תלת ממד למכשירים ניידים ממשק המקביל לשכבת הDirect3D בטלפונים.