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
나는 이틀 동안 답을 찾고 있었지만, 아직도 알아낼 수 있습니다. 내가 뭘 잘못하고 있니?
나는 beans.xml을 전쟁에 그리고 sar에 넣고 sar에 jar를 넣었다. 도움이되지 않습니다. –