ฉันมีแอปพลิเคชัน RCP ที่ใช้การอัปเดตแบบไม่มีส่วนหัวกับที่เก็บ p2 ซึ่งเขียนใน eclipse 3.6 หลังจากการตัดสินใจย้ายไปยัง Eclipse 3.7 ปรากฏว่าวิธีแก้ปัญหาของฉันไม่สามารถทำงานได้ เนื่องจากบางคลาสไม่มีอยู่ใน 3.7 อีกต่อไป มีปัญหาอะไรใน 3.6?
ปัญหาใน Eclipse 3.6: แอปพลิเคชันกำลังตรวจสอบการอัปเดตก่อนที่จะเริ่มปลั๊กอินหลัก มันพยายามเชื่อมต่อกับที่เก็บ p2 หากมีการเชื่อมต่อ ระบบจะค้นหาการอัปเดต หากมีการอัปเดต หากไม่ใช่ ระบบจะแจ้งว่าไม่มีอะไรให้อัปเดตและดำเนินการต่อ หากไม่มีการเชื่อมต่อ มีข้อยกเว้นที่อยู่ลึกในเฟรมเวิร์ก Equinox/eclipse ที่ได้รับการจัดการโดยเฟรมเวิร์กและไม่เคยปรากฏให้เราเห็น ดังนั้นแอปพลิเคชันจึงไม่สามารถบอกได้ว่ามีการเชื่อมต่อหรือไม่ เนื่องจากผลลัพธ์บอกว่ามีการเชื่อมต่อ ไม่มีอะไรจะอัปเดต
วิธีแก้ปัญหา: หลังจากเร่งหาวิธีแก้ปัญหานี้ไปหลายวัน ฉันพบวิธีแก้ปัญหาสำหรับเรื่องนี้ โซลูชันกำลังสร้างคลาสสำหรับตรวจสอบ "สถานะ" ของที่เก็บเช่น ฉันมีความเกี่ยวข้องกับมันหรือไม่ นี่คือชั้นเรียนของฉัน:
public class RepositoryValidator {
private final static String urlExtension = "artifacts.jar"; //$NON-NLS-1$
private static RepositoryValidator instance;
private RepositoryValidator() {
}
public static RepositoryValidator sharedInstance() {
if (instance == null) {
instance = new RepositoryValidator();
}
return instance;
}
public IStatus checkRepositoryStatus(URI repoURI) {
try {
URI checkURI = new URI(repoURI.toString() + urlExtension);
ILog logger = Activator.getDefault().getLog();
logger.log(new Status(IStatus.INFO, Activator.PLUGIN_ID,
"CHECK REPOSITORY \"artifacts.jar\" - " //$NON-NLS-1$
+ checkURI.toString()));
long result = RepositoryTransport.getInstance().getLastModified(
checkURI, new NullProgressMonitor());
if (result == 0) {
logger.log(new Status(IStatus.INFO, Activator.PLUGIN_ID,
"RESULT FROM CHECK - " + result)); //$NON-NLS-1$
return new Status(IStatus.ERROR, Activator.PLUGIN_ID,
"WRONG SERVER RESPONCE!!!"); //$NON-NLS-1$
}
} catch (Exception e) {
return new Status(IStatus.ERROR, Activator.PLUGIN_ID,
"CONNECTION EXCEPTION", e); //$NON-NLS-1$
}
return new Status(IStatus.OK, Activator.PLUGIN_ID,
"REPOSITORY IS REACHABLE AND OK!!!"); //$NON-NLS-1$
}
}
โดยพื้นฐานแล้วสิ่งที่ฉันทำที่นี่คือการตรวจสอบเมื่อมีการแก้ไข artifacts.jar ถ้าฉันสามารถเข้าถึงได้ฉันก็มีการเชื่อมต่อ ถ้าไม่ได้ฉันก็ไม่ได้
ปัญหาใน Eclipse 3.7: ในโซลูชันสำหรับ Eclipse 3.6 ฉันใช้คลาส RepositoryTransport ซึ่งไม่มีใน 3.7 อีกต่อไป ฉันพยายามค้นหาว่าคลาสนี้ถูกแทนที่ด้วยคลาสอื่นหรือไม่ หรือมีวิธีการในคลาสที่มีอยู่ที่ฉันสามารถเข้าถึงฟังก์ชันที่คล้ายกันได้ ฉันไม่พบสิ่งที่เกี่ยวข้องกับหัวเรื่อง หรือชั้นเรียน หรือวิธีแก้ปัญหาใน 3.6
Deos มีใครรู้อะไรที่เกี่ยวข้องกับปัญหานี้บ้างไหม? มีการแก้ไขสำหรับโซลูชันใน 3.6 หรือไม่ หรือพวกเขาตัดสินใจที่จะแทนที่คลาสนี้ด้วยฟังก์ชันการทำงานที่คล้ายกันหรือไม่ หรือถ้าใครมีแนวคิดในการแก้ปัญหาอื่น ๆ สำหรับปัญหานี้?
ขอบคุณล่วงหน้า.