2014-10-29 16 views
0

Jboss AS 6.1과 war 및 sar 응용 프로그램이 있습니다. 나는 카산드라를 사용한다. 그래서 관리자에게 빠른 액세스를 위해 데이터베이스에 액세스하고 데이터베이스 객체를 캐시해야합니다. 그래서 난 그런 방법으로 그것을했다 : singletone에서 java ee injection으로의 마이그레이션

public class AsaBlackSubsManager extends OperatorsCache<AsaBlackSubs> { 
    private final static Logger log = Logger.getLogger(AsaBlackSubsManager.class); 
    private final static String CF_NAME = "asa_black_subs"; 
    private static AsaBlackSubsManager instance = null; 
    private MsisdnManager msisdnManager; 

    private AsaBlackSubsManager() { 
     reload(); 
     msisdnManager = new MsisdnManager(); 
    } 

    public static AsaBlackSubsManager getInstance() { 
     if (instance == null) { 
      instance = new AsaBlackSubsManager(); 
     } 
     return instance; 
    } 

    public List<AsaBlackSubs> list() { 
     final List<AsaBlackSubs> list = new ArrayList<>(); 
     final Statement query = QueryBuilder.select().from(CF_NAME); 
     final ResultSet rows = BasicManager.getInstance().getSession().execute(query); 
     for (final Row row : rows) { 
      if (row != null && row.getString("name") != null) { 
       final AsaBlackSubs subs = new AsaBlackSubs(); 
       subs.setId(row.getUUID("id").toString()); 
       subs.setName(row.getString("name")); 
       subs.setOperatorId(row.getString("operatorId")); 
       subs.setParams(row.getString("params")); 
       subs.setDescription(row.getString("description")); 
       subs.setParentId(row.getString("parentId")); 
       subs.setOwner(row.getString("owner")); 
       list.add(subs); 
      } 
     } 
     Collections.sort(list, new HierarchyObjectComparator()); 
     return list; 
    } 

    public String create(final AsaBlackSubs subs) { 
     if (subs.getId() == null) { 
      final UUID uuid = UUID.randomUUID(); 
      subs.setId(uuid.toString()); 
     } 
     final Insert query = QueryBuilder.insertInto(CF_NAME) 
       .value("id", UUID.fromString(subs.getId())) 
       .value("name", subs.getName()) 
       .value("operatorId", subs.getOperatorId()) 
       .value("params", subs.getParams()) 
       .value("description", subs.getDescription()) 
       .value("owner", subs.getOwner()) 
       .value("parentId", subs.getParentId()); 
     BasicManager.getInstance().getSession().execute(query); 
     reload(); 
     return subs.getId(); 
    } 

} 

은 또한 내가 내 개체 캐시 및 운영자으로 분류되어 추상적 인 캐시 클래스가 있습니다.

그래서 이런 식으로 전쟁에서 내 수업에 액세스 할 수 있으며 모든 장소와 캐시에서 내 수업에 액세스 할 수 있으며 캐시도 동일합니다. 이 캐시에는 하나의 개체 만 존재합니다. 관리자 클래스 자체가 sar에 있습니다. 다소 좋은 방법이지만 싱글 톤의 약점을 알고 있으므로 싱글 톤을 Jboss에 통합 된 용접 의존성 주입으로 대체하기로 결정했습니다. 나는 이렇게했다. private 생성자와 getInstance() 메소드를 제거하고 @ApplicationScope 어노테이션을 추가했다. 그리고 내 웹 클래스에서는 @Inject에 주석을 달았습니다. 이처럼 : 내가이 모든 것을 시작하려고 할 때

public class CreateAsaSubsb extends BaseAction { 


    @Inject 
    AsaBlackSubsManager manager; 

    public void perform(final HttpServletRequest request, 
         final HttpServletResponse response, final JSONObject jsonObject) throws ServletException, IOException, JSONException 
... 

을하지만, 전쟁 응용 프로그램이 시작되지 않고이 같은 예외가 : org.jboss.weld.exceptions.DeploymentException : 유형에 대한 용접 001,408 불만족 종속성을 [AsaBlackSubsManager] 주입 지점에서 [@Default] 주입 지점 [필드] @Inject

나는 이틀 동안 답을 찾고 있었지만, 아직도 알아낼 수 있습니다. 내가 뭘 잘못하고 있니?

답변

0

JBoss AS 6은 Java EE 6 응용 프로그램 서버입니다. CDI 1.0 spec (Java EE 6의 일부)에 따르면 beans.xml 파일을 아카이브에 넣어야합니다. 전쟁 용 WEB-INF/디렉토리에 jar 용 META-INF/디렉토리에 있습니다.

+0

나는 beans.xml을 전쟁에 그리고 sar에 넣고 sar에 jar를 넣었다. 도움이되지 않습니다. –