2011-07-10 12 views
2

私はこの問題をテストするために簡単なアプリケーションを作成しました。私は、ejb持っている:マネージドBeanにejbを注入すると、BeanInstantiationExceptionが発生します。

@Local 
public interface PersonaDAO { 
public void sayHello(Persona persona); 
} 


@Stateless 
public class PersonaDAOImpl implements PersonaDAO { 
    private PersonaDAOImpl() { 
    } 

    public void sayHello(String nombre) { 
    System.out.println("HELLO " + nombre + " welcome to EJB 3!"); 
} 
} 

を、私はJSF管理Beanになった:私は実行する場合

DEPLOYMENTS IN ERROR: 
    Deployment "vfs:///home/shapacko/ambiente/jboss-6.0.0.Final/server/default/deploy/Prueba.war" is in error due to the following reason(s): java.lang.RuntimeException: Could not resolve @EJB reference: [EJB Reference: beanInterface 'com.application.business.ServicioPersonasImpl', beanName 'null', mappedName 'null', lookupName 'null', owning unit '[email protected]{vfs:///home/shapacko/ambiente/jboss-6.0.0.Final/server/default/deploy/Prueba.war}'] for environment entry: env/com.application.presentation.seguridad.LoginBean/sp in unit [email protected]{vfs:///home/shapacko/ambiente/jboss-6.0.0.Final/server/default/deploy/Prueba.war} 

そして:私はこの展開のエラーを取得しています

@ManagedBean(name="loginBean") 
@ViewScoped 
public class LoginBean extends PageBean { 
    private String nombre; 
@EJB 
private PersonaDAO dao; 

public String confirmar() 
{ 
    String outcome = null; 
    Persona persona = new Persona(); 
    persona.setNombre(nombre); 
    dao.sayHello(persona); 
    return outcome; 
} 
..... 
} 

をアプリは私が得る:

javax.servlet.ServletException: javax.ejb.EJBException: java.lang.RuntimeException: org.jboss.ejb3.instantiator.spi.BeanInstantiationException: Could not create new instance with no arguments of: class com.application.persistence.PersonaDAOImpl 
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:325) 

私はwhを理解していないそれは問題です。この注射は可能ですか?または、私はejbを注入する代わりにjndiルックアップを行う必要がありますか?

答えて

3

次の例外エントリによって証明されるように、ステートレスセッションBeanのプライベートコンストラクタの使用は、問題の原因である可能性があります。type BeanInstantiationExceptionの例外がスローされ、通常

org.jboss.ejb3.instantiator.spi.BeanInstantiationException: Could not create new instance with no arguments of: class com.application.persistence.PersonaDAOImpl

コンテナはBeanのインスタンスを作成できません。おそらく、これはプライベートコンストラクタの宣言と、ステートレスセッションBeanの他の非プライベートな引数なしコンストラクタが使用できないためです。 PersonaDAOImpl()の公開を公開に変更する必要があると推測されます。

EJB 3.1仕様の状態は非常に明示的にこの:

4.9.2 Session Bean Class

  • The class must be defined as public, must not be final, and must not be abstract. The class must be a top level class.

  • The class must have a public constructor that takes no parameters. The container uses this constructor to create instances of the session bean class. The following are the requirements for the session bean class:

関連する問題