2011-06-04 37 views
1

我正在嘗試創建一些Java EE應用程序。作爲控制器的基礎是EJB。接下來,我想用JSF + ManagedBeans來呈現數據。問題是有Eclipse:EJB和ManagedBean(用於JSF)

javax.servlet.ServletException:標準/ SampleController

java.lang.NoClassDefFoundError:標準/ SampleController

的代碼如下所示:

託管bean(動態Web項目):WebView項目:StdSampleController.java:

import javax.ejb.EJB; 

import standards.SampleController; 

public class StdSampleController { 

    @EJB private SampleController c; 
    public String value; 

    public StdSampleController() { 
     c = new SampleController(); 
     value = c.getValue(); 
    } 

    public String getValue() { 
     return value; 
    } 

    public void setValue(String value) { 
     this.value = value; 
    } 
} 

EJB(EJB項目):WebController項目:standards.SampleController.java:

package standards; 

import javax.ejb.Stateless; 

/** 
* Session Bean implementation class SampleController 
*/ 
@Stateless 
public class SampleController implements SampleControllerRemote { 

    private String value; 

    public SampleController() { 
     value = "EJB:SampleController bean"; 
    } 

    public String getValue(){ 
     return value; 
    } 

} 

所有這些代碼是在企業應用程序項目放在一起。
我使用GlassFish版本3和Eclipse 3.5.2。

回答

2

您使用(遠程)接口調用EJB,而不是實現。 因此,與其

@EJB private SampleController c; 

你需要

@EJB private SampleControllerRemote c; 

,並相應地調整進口。

+0

事實上,或者根本不定義一個接口,或者定義一個本地接口,因爲您似乎是從相同的JVM中調用EJB bean。 – 2011-06-11 21:56:12

3

添加到的unbeli答案,請從您的代碼如下:

public StdSampleController() { 
    c = new SampleController(); 
    value = c.getValue(); 
} 

這是不對的。在您描繪的情況下,容器將注入c並引用您的EJB。不要通過new()運算符實例化EJB。

相關問題