มีวิธีตรวจสอบว่าคุณมีการเชื่อมต่อ / การเข้าถึงที่เก็บ p2 จากแอปพลิเคชัน rcp ใน Eclipse 3.7 หรือไม่

ฉันมีแอปพลิเคชัน 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 หรือไม่ หรือพวกเขาตัดสินใจที่จะแทนที่คลาสนี้ด้วยฟังก์ชันการทำงานที่คล้ายกันหรือไม่ หรือถ้าใครมีแนวคิดในการแก้ปัญหาอื่น ๆ สำหรับปัญหานี้?

ขอบคุณล่วงหน้า.


person Dancho    schedule 01.08.2011    source แหล่งที่มา


คำตอบ (1)


ประการแรก RepositoryTransport ถูกย้ายไปยังแพ็กเกจ org.eclipse.equinox.internal.p2.transport.ecf ในบันเดิลที่เพิ่งเปิดตัวหลังจากการปรับโครงสร้างโค้ดใน 3.7

ประการที่สอง ฉันไม่คิดว่าวิธีแก้ปัญหาชั่วคราวของคุณเป็นวิธีที่ดีในการตรวจสอบว่ามีการอัปเดตหรือไม่ คุณควรใช้ p2 API เพื่อ โหลดที่เก็บของคุณ จากนั้นสอบถามว่ามีการอัปเดตสำหรับหรือไม่ การติดตั้งของคุณ

person Kane    schedule 03.08.2011