2013-07-16 3 views
0

데이터베이스의 속성을 관리하는 싱글 톤 클래스를 구현하려고합니다. 그러나 데이터베이스 bean을 주입하려고 할 때 nullPointerException이 발생합니다. 다음 nullPointerException 나는 단지 나의 프로젝트를 수출하고있어, 나중에, 내가 Properties의 인스턴스를 얻을 때, 나는 starting 인쇄 것을 얻을JBoss에 EJB를 삽입 할 때 NullPointerException이 발생했습니다.

import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 

import javax.ejb.EJB; 
import javax.ejb.Stateless; 
.. 

@Stateless 
public class Properties { 

    public static volatile Properties instance; 
    private static Map<String, String> properties = new HashMap<String, String>(); 

    @EJB(WHAT_TO_DO_HERE) 
    private DatabasePersisterLocal databasePersister; 

    public static Properties getInstance() { 
     if (instance == null) { 
      synchronized (Properties.class) { 
       if (instance == null) { 
        instance = new Properties(); 
       } 
      } 
     } 

     return instance; 
    } 

    private Properties() { 
     System.out.println("starting"); 
     System.out.println(databasePersister); //null 

     //initializing 
    } 
} 

: 여기에 내 코드입니다. 내 다른 프로젝트에서 동일한 EJB (DatabasePersisterLocal)를 주입하려고하면 오류가 발생하지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

'WHAT_TO_DO_HERE'에 삽입하고자하는 EJB의 이름을 지정하고 대상 빈의 이름을 지정하고 여기를 가리켜 야합니다. –

+0

하지만'@ EJB' 어노테이션 만 사용하여 성공적으로'DatabasePersisterLocal'을 프로젝트에 삽입합니까? –

+0

또한 구현에 너무 의존합니다. 때로는 일부 환경에서는 이름이 필요합니다. :) –

답변

0

당신이 직면하고있는 콩 주입에 관한 문제와 상관없이, 적어도 당신이 그것을하려고하는 방식으로 EJB를 사용하여 싱글 톤을 구현할 수는 없다는 것을 분명히하고 싶습니다.

이유는 ejb 인스턴스가 컨테이너에 의해 처리되기 때문입니다. EJB의 Thread Model은 모든 요청이 이전에 인스턴스화되어 ejb 목록 (풀)에 할당 된 사용 가능한 EJB의 인스턴스에 의해 관리되도록 지정합니다.

그러나 EJB 3.1을 사용하는 경우 하나의 EJB 인스턴스 만 생성해야하는 컨테이너에 알리는 @Singleton 주석을 사용하는 것이 좋습니다.

관련 문제