0

Glassfish で実行されるアプリを Websphere Application Server (WAS) 8.5.x バージョンに移行する必要があります。

簡単なセットアップで正しく動作することを確認するために、1 つのレスト サービスを含むサンプル プロジェクトを作成しました。

javax.ws.rs.core.Application を独自のクラスで拡張せず、パス アノテーションを含むクラスしかありません。「javax.ws.rs.core.Application」という名前の web.xml でサーブレットを定義したので、注釈がスキャンされ、指定されたサーブレット URL マッピングからサービスに到達できることが期待されます。

サービスにアクセスしようとすると、404 メッセージが表示されます。しかし、本当の問題は、標準の IBM Websphere ライブラリーに付属する Apache Wink です。

ライブラリのソース コード(クラス DefaultLifecycleManager) には、次のような部分があります。

79        if (ApplicationMetadataCollector.isApplication(cls)) {
80            // by default application subclasses are singletons
81            return LifecycleManagerUtils.createSingletonObjectFactory(cls);
82        }

isApplication (cls)メソッドは true を返す必要があり、それに対するシングルトン ファクトリを作成する必要があります。ただし、false を返します。メソッドの本体は次のとおりです。

76    public static boolean More ...isApplication(Class cls) {
77        return Application.class.isAssignableFrom(cls);
78    }

そこにブレークポイントを置き、値を確認しました。cls はまさに javax.ws.rs.core.Application で、77 行目の同じクラスです。

これにより、サーブレットが正しく起動せず、それにマップされるすべてのリクエストに 404 が返されます。

このメソッドがどのように false を返すのかわかりません。助けが必要です。

4

3 に答える 3

0

最近、 WAS 7.0 から WAS 8.5に移行したときにほぼ同じことを行いました。WAS 8.5 には組み込みの Apache Wink 1.1 が付属しています。次の手順に従って、アプリケーションを WAS 8.5 に移行できます。

1) アプリケーションの lib フォルダーからすべての apache wink jar を削除します。

2) アプリケーションをビルドするには、com.ibm.ws.prereq.jaxrs.jar と com.ibm.ws.prereq.jackson.jar の 2 つの Websphere jar を使用できます。これらの jar はWAS_HOME/pluginsフォルダーにあります。

3) これらの jar を使用してアプリケーションをビルドしますが、これらの jar をアプリケーションの EAR または WAR にパッケージ化しないでください。

4) アプリケーション タイプが EAR の場合、すべての安静なリソースとアプリケーション クラスを拡張するクラスが war の一部であることを確認します。

5) アプリケーションを再デプロイすると、問題なく動作するはずです。

于 2015-05-15T19:39:28.153 に答える
0

wink、jersey、またはその他の jaxrs ライブラリがアプリケーションにバンドルされている場合は、それを削除してください。

于 2015-04-21T16:37:39.827 に答える