JRE1.6からJRE1.7に移行する大規模なデスクトップJavaアプリケーションがあります。アプリケーションは、GUI用のNetBeans APIと、Log4Jバックエンドを備えたSLF4JAPIを使用します。このアプリケーションには、スタンドアロンアプリケーション(AntまたはLaunch4j exeのいずれかで実行)または単純なカスタムHTTPサーバー(JettyおよびJNLPサーブレット)を介したWebStartの2つのデプロイメント方法があります。
アプリケーションには、起動時にJavaPropertyEditorManager検索パスにプロパティエディタを追加するいくつかのNetBeansModuleInstallコンポーネントがあります。例えば
ArrayList<String> editorPaths = new ArrayList<String>();
editorPaths.add(LocationEditor.class.getPackage().getName());
editorPaths.addAll(Arrays.asList(PropertyEditorManager.getEditorSearchPath()));
PropertyEditorManager.setEditorSearchPath(editorPaths.toArray(new String[editorPaths.size()]));
Java 1.7(u9)に移行したとき、これらのエディターは、スタンドアロンまたはWeb Startデプロイメントのいずれでも、アプリケーションで検出されなくなりました。アプリケーションは正常に起動し、Eclipseから起動するとエディターにアクセスできました。スタンドアロンが失敗した理由を知りたいので、検索パスを報告するためのログステートメントをいくつか追加し、Ant起動スクリプトを介してlog4j.configurationプロパティを設定しました。エディターが利用可能になりました。次に、.exe(コマンドラインパラメーターを受け入れないため、log4j構成が設定されていません)を起動すると、エディターが再び使用できなくなりました。
したがって、差別化要因はlog4j.configurationパラメーターを設定しているように見えます。ビルドを変更して、スタンドアロンのAntと.exeがこれを参照し、動作するようにしました。ただし、Webスタートはこの値を渡さず(コードに内部的にロードされます)、それでもエディターを見つけることができません。また、Eclipseの実行コマンドからlog4j設定を削除すると、エディターが再び消えます。
検索パスを使用するのではなく、タイプに対して具体的に登録しようとしましたが、それでも成功しませんでした。1つのオプションが別のモジュールエディタをオーバーライドするため、検索パスを使用していますが、モジュールの起動順序がわからないため、1つはルックアップの開始にパスを追加し、他の1つは終了に追加します。
また、すべてのSLF4JからLog4Jへのマッピングを削除し、代わりにSLF4J-Simpleを使用してみました。これは何の違いもありませんでした。パラメータを追加し直すと、コードが再び機能します。春の側面の依存関係は、単一のLog4J参照を取得しています。
私はスタンドアロン用の実用的なソリューションを持っており、ウェブスタートで新しいトリックを機能させることができると確信していますが、これは物事を機能させるための悪いハックの悪臭です。私はむしろ編集者が行方不明になる原因を理解しています。例外は報告されず、すべてのModuleInstallオブジェクトからログを削除しても何も起こりません。すべてのコードは引き続き実行されます。これには、ModuleInstallが実行する他の機能が含まれているため、実行されていることがわかります。
NetBeans RELEASE72を使用しており、その他の依存関係は次のとおりです。
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.2</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.2</version>
</dependency>
アップデート1
カスタムロギング設定まで問題を追跡しました。このセクションが削除され、単純なロガーが使用された場合、問題は発生しませんでした。このカスタム構成が削除され、slf4j-log4j12が再び接続されたとき、私はまだプロパティエディターを取得しました。ただし、カスタムログ構成を再度有効にすると、エディターが失敗しました。
カスタムロギング構成により、ユーザーが何も指定していなくても、ロギングを設定できます。他のユーザーがアクティブ化した奇妙なstatupプロセスもあり、ウィービングプロセスが完了するまでロギングをアクティブ化できません。カスタムロギング設定がJava1.7で機能しないか、カスタムロギングにリダイレクトするデフォルトのロギングハンドラーの置き換えに関係しているのではないかと思います。
いずれにせよ、それは内部の混乱のように見えますが、インターネットが役立つことはあまりありません。