eclipse 3.6 で記述された、p2 リポジトリでヘッドレス更新を使用する RCP アプリケーションがあります。Eclipse 3.7 に移行することを決定した後、いくつかのクラスが 3.7 に存在しなくなったため、私の回避策が機能しないことが判明しました。3.6 での問題は何でしたか?
Eclipse 3.6 の問題:アプリケーションは、コア プラグインの開始前に更新をチェックしています。p2 リポジトリへの接続を試みます。接続がある場合は更新を検索し、そのような更新がある場合は更新を検索し、そうでない場合は更新について何も言わずに続行します。接続がない場合、分点/日食フレームワークに深い例外があり、フレームワークによって処理され、表示されないため、アプリケーションは接続があるかどうかを判断できません。更新するものはありません。
解決策:これに対する解決策を数日急いだ後、私はこれに対する回避策を見つけました。解決策は、リポジトリの「ステータス」を検証するためのクラスを作成することでした。たとえば、リポジトリに接続しているかどうかです。これが私のクラスです:
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 のソリューションでは、3.7 では利用できなくなった RepositoryTransport クラスを使用していました。このクラスが他のクラスに置き換えられたかどうか、または同様の機能に到達できる利用可能なクラスにメソッドがあるかどうかを調べようとしていました。件名、クラス、3.6の問題の解決策に関連するものは何も見つかりませんでした。
この問題に関連することを知っている人はいますか? 3.6 自体に解決策の修正はありますか、それともこのクラスを同様の機能に置き換えることを決定しますか? または、誰かがこの問題の他の回避策のアイデアを持っている場合は?
よろしくお願いします。