2017-09-11 5 views
2

Websphere Application Server v8(WAS8)からWebphere Liberty Base v17(WL17)にソフトウェアプロジェクトを移行し、EJBに問題が発生しました。例えば。以下のEJBがあります:Websphere Liberty BaseでEJBConfigurationExceptionを実行しました。

対応するローカルインタフェースを持つ
@Stateless 
@Local(MyUserServiceLocal.class) 
public class MyUserServiceBean implements MyUserServiceLocal { 

    @EJB 
    private OtherServiceLocal otherServiceLocal; 

    @Resource 
    private SessionContext context; 

    public MyUserServiceBean() { 
    } 

    public String getUserEmail() {...} 

    public String getUserDataId() throws ServiceException {...} 
    ... 
} 

@Local 
public interface MyUserServiceLocal { 

    public String getUserEmail(); 

    public String getUserDataId() throws ServiceException; 
    ... 
} 

同様の実装方式で、次のより多くのEJBのがあります。

プロジェクトが正常に構築され、すべてのEclipseプロジェクト内のすべてのファセットが正しく設定され、mavenは新しく展開可能なEARファイルを作成します。しかし、アプリケーションのデフォルトページにアクセスすると、次の入れ子例外がスローされます。The MyUserServiceBean bean class for the MyApplication#MyUserServiceEjb.jar#MyUserServiceBean bean does not have a public constructor that does not take parameters.

現在、この例外がWL17によってスローされる理由は想像できません。私のWLの機能設定は次のようになります。

<featureManager> 
    <feature>appSecurity-2.0</feature> 
    <feature>cdi-1.2</feature> 
    <feature>distributedMap-1.0</feature> 
    <feature>ejbLite-3.2</feature> 
    <feature>ejb-3.2</feature> 
    <feature>jacc-1.5</feature> 
    <feature>jaxrs-2.0</feature> 
    <feature>jaxws-2.2</feature> 
    <feature>jca-1.7</feature> 
    <feature>jdbc-4.1</feature> 
    <feature>jndi-1.0</feature> 
    <feature>jpa-2.1</feature> 
    <feature>jsf-2.2</feature> 
    <feature>jsp-2.3</feature> 
    <feature>ldapRegistry-3.0</feature> 
    <feature>mdb-3.2</feature> 
    <feature>servlet-3.1</feature> 
    <feature>ssl-1.0</feature> 
    <feature>webCache-1.0</feature> 
    <feature>wmqJmsClient-2.0</feature> 
</featureManager> 

私はmdbまたはejb機能をロードしないときと同じです。この問題を解決する方法はありますか?私はたくさんのグーグルでインターネットの半分を見つけましたが、この問題を解決するには、答えやアイデアを得られませんでした。

+0

これはお手伝いできますか? https://stackoverflow.com/questions/24868561/bean-does-not-have-a-public-constructor-that-does-not-take-parameters-error-de and https://stackoverflow.com/questions/ 43904524/was-liberty-ejb-bean-do-not-a-public-constructor-not-take-p- – fantaghirocco

+1

ご意見ありがとうございました。参照されるSOの質問には、問題を解決するための3つのアイデアがあります。私は次の結果を得てそれらすべてを試しました:(1)@PostConstruct - 動作しません。 (2)デフォルトのコンストラクタ+ EJBアノテーションを使用する代わりにメンバを注入する - 動作しません。 (3)Mavenプラグインの設定ミス - 問題に適合しません。 ||申し訳ありませんが、私はまだ同じ問題を抱えていて、このBeanだけです。問題を持たない全く同じインプリメンテーション・スキームに従うと、他の多くのビーンがあります。 – Joko

答えて

2

私はEJBの問題を発見しました。インタフェースメソッドの1つがjavax.xml.rpc.ServiceExceptionを投げると宣言されました。なぜこれが問題になるのか理解できませんが、インターフェイス内のthrows宣言と実装クラスWL 17を削除した後、Beanを正しく初期化できました。

+0

おそらく、javax.xml.rpc.ServiceExceptionがクラスパス上に存在しなかったため、EJBコンテナがリフレクションを使用してコンストラクタを見つけると、JDKはエラーを返しました。リフレクションが使用されている場合、JDKはクラスを完全に初期化して解決しようとします。その結果、このようなエラーが発生します。理想的には、JDKはある種のClassNotFoundExceptionをスローし、WebSphereは少なくともFFDCにそれを記録していましたが、私はJDKがnullを戻したと推測しています。 – Tracy

関連する問題