5

Websphereへのプロジェクトのデプロイメントを開始しようとしていますが、次のエラートレイルが表示されます。(短縮)

ERROR org.springframework.web.context.ContextLoader - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'birtView' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Cannot resolve reference to bean 'birtEngine' while setting bean property 'birtEngine'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'birtEngine': FactoryBean threw exception on object creation; nested exception is java.lang.RuntimeException: Could not start the Birt engine!
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'birtEngine': FactoryBean threw exception on object creation; nested exception is java.lang.RuntimeException: Could not start the Birt engine!
Caused by: java.lang.RuntimeException: Could not start the Birt engine!
Caused by: org.eclipse.birt.core.exception.BirtException: error.CannotStartupOSGIPlatform
Caused by: org.eclipse.birt.core.framework.FrameworkException: Cant register the ExtensionRegistry classpath
Caused by: org.eclipse.core.runtime.CoreException: Extension registry provider is already set.

オンラインで見つけた下から3番目のエラーの解決策は、次のコード行を削除することでした。

config.setEngineHome("C:/birt-runtime-3_7_0/ReportEngine");

ただし、これは存在せず、セットアップには不要です。これ(使用されるBIRT固有のコード)は、オンラインのこの例と非常によく似ています。

http://www.springsource.org/BusinessIntelligenceWithSpringAndBIRT

BirtViewとBirtEngineFactoryは、私のプロジェクトに関連する唯一の部分です。このバグページとフォーラムエントリにアクセスして、コードの追加を試しました。それは動かなかった。プロジェクトが起動し、Tomcat6xで問題なく動作します。

http://www.eclipse.org/forums/index.php/m/727929/

https://bugs.eclipse.org/bugs/show_bug.cgi?id=351052

WebSphereのクラスローダーの順序を「アプリケーションクラスローダーで最初にロードされたクラス」に設定しています。以下のリンクの例のように。

http://wiki.eclipse.org/BirtPOJO_Viewer_WebSphere_Deployment

それでも同じエラーが発生し、他に何をすべきかわかりません。コードを投稿せずにこれを尋ねるのは少し難しいことは知っていますが、誰かが私が何を探すべきかについて考えを持っているでしょうか?ありがとう。

4

1 に答える 1

5

私はあなたとまったく同じエラーがありました。BIRT 3.7.2 と IBM WAS 8.5 を使用しています

以下に詳述するバグを参照すると 、ReportEngine の再起動時に org.eclipse.core.runtime.CoreException が発生する

以下に示すバグの実際の理由は、 ServiceLauncher.shutdown() がデフォルトの RegistryProvider を解放しないことです。

Platform.startup(..)呼び出し の前に次の行を追加しましたRegistryProviderFactory.releaseDefault();

この後、BIRT レポートは正常に機能しています。

しかし、これが WAS の実行時に何かを壊すかどうかは疑問です。この理由は...

バグで説明されているように、この例外は、プラットフォームの起動を 2 回試みたときに発生します。ここでは、Platform.shutdown() で RegistryProvider が解放されていないため、例外が発生します。

さて、私の場合、IBM Websphere 8.5 は内部で OSGi を使用しているため、OSGi プラットフォームを開始します。したがって、アプリケーションがプラットフォームを再度開始しようとすると (2 回目の開始)、例外が発生します。ここでの私の懸念は、これが WAS のランタイムで何かを壊してはならないということです (内部で OSGi を使用しているため)。

レジストリ プロバイダーは、BIRT ランタイムによって設定されるように null ではないため、ここで唯一の問題は、クラス バージョンの不一致である可能性があります。つまり、WAS のレジストリ プロバイダーと BIRT のレジストリ プロバイダーが異なる場合、バージョンが衝突します。

私が使用したソリューションがわかりません。専門家の方、ご指導ください。

于 2013-10-29T08:41:44.780 に答える