0

WAR と Business の 2 つのモジュールがあります。

Web モジュールにステートレス Bean を注入しようとしています。しかし、ステートレス Bean が見つからないのですか?

エラーはどこにありますか? 何か案が??

ビジネス モジュール:

@Stateless
public class BusinessFacade {

    public void processEntity(final MyEntitiy entity) {
        System.out.println(entity.getName());
    }

}

WAR モジュール内:

@ManagedBean
@SessionScoped
public class HelloBean implements Serializable {

    @EJB
    BusinessFacade businessFacade;

    private static final long serialVersionUID = 1L;

    private String name;

    public String getName() {
        return name;
    }

    public void setName(final String name) {
        this.name = name;
    }
}

エラー:

[31.08.12 10:19:38:835 CEST] 00000018 webapp        E com.ibm.ws.webcontainer.webapp.WebApp notifyServletContextCreated SRVE0283E: Exception caught while initializing context: {0}
                                 java.lang.NoClassDefFoundError: com.myproject.business.beans.BusinessFacade
    at java.lang.Class.getDeclaredFieldsImpl(Native Method)
    at java.lang.Class.getDeclaredFields(Class.java:544)
    at org.apache.myfaces.config.annotation.AnnotationConfigurator.fields(AnnotationConfigurator.java:846)
    at org.apache.myfaces.config.annotation.AnnotationConfigurator.createFacesConfig(AnnotationConfigurator.java:328)
    at org.apache.myfaces.config.annotation.AnnotationConfigurator.createFacesConfig(AnnotationConfigurator.java:94)
    at org.apache.myfaces.config.DefaultFacesConfigurationProvider.getAnnotationsFacesConfig(DefaultFacesConfigurationProvider.java:148)
    at org.apache.myfaces.config.DefaultFacesConfigurationMerger.getFacesConfigData(DefaultFacesConfigurationMerger.java:91)

....
..

Caused by: java.lang.ClassNotFoundException: com.myproject.business.beans.BusinessFacade
    at java.net.URLClassLoader.findClass(URLClassLoader.java:434)
    at com.ibm.ws.bootstrap.ExtClassLoader.findClass(ExtClassLoader.java:198)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:646)
    at com.ibm.ws.bootstrap.ExtClassLoader.loadClass(ExtClassLoader.java:113)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:612)
    at com.ibm.ws.classloader.ProtectionClassLoader.loadClass(ProtectionClassLoader.java:62)
    at com.ibm.ws.classloader.ProtectionClassLoader.loadClass(ProtectionClassLoader.java:58)
    at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:564)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:612)
    at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:564)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:612)
    ... 33 more
4

3 に答える 3

0

インターフェイスを作成する

@Local
public interface BusinessLocal {
    void processEntity(final MyEntitiy entity);
}

EJB にインターフェースを実装する

public class BusinessFacade implements BusinessLocal {
...
}

そしてインターフェースを注入します。

@EJB
BusinessLocal businessFacade;
于 2013-11-14T18:24:04.980 に答える
0

そんなに簡単にできるとは思えません。このタイプの注入は同じ EAR 内の EJB 間で機能しますが、私の記憶が正しければ、JBoss 5.0GA で EJB をサーブレットなどに注入することはできません (私が正しいかどうかを確認する必要があります)。

EAR を使用して Web モジュールと EJB 部分を保持しているか、またはそれらが他の方法でデプロイされているかを確認する必要があります。

ここを見てください、それは何とかあなたを助けることができます.

于 2012-09-07T11:20:30.210 に答える
0

これを試して、何が起こるか見てみましょう:

@Stateless
@LocalBean
public class BusinessFacade {

    public void processEntity(final MyEntitiy entity) {
       System.out.println(entity.getName());
    }

}
于 2012-08-31T10:03:57.357 に答える