프로젝트에서 bean 인터페이스를 가질 수 있으며 종속성으로 이전 프로젝트를 포함하는 다른 프로젝트에서 해당 Bean을 구현할 수 있습니까? 두 번째 프로젝트에 지금다른 프로젝트에서 Bean 인터페이스와 Bean 구현
package com.proj1.util.exception;
import .....;
public class ExceptionHandler extends RuntimeException ... {
private String errorMessage;
@Override
public void handle() {
Util.getBeanInstance(Notification.class).addError(errorMessage);
}
}
내가의 실제 구현이 : 같은 프로젝트 (즉으로 Proj1) 나는 또한 다음과 같은 클래스가에서
package com.proj1.util;
import .....;
public interface Notification {
addNotification();
addError();
}
:
나는 다음과 같은 인터페이스를 가지고 Notification
은 다음과 같습니다 :
package com.proj2.beans;
@Named
@ConversationScoped
public class NotificationBean implements Notification, Serializable {
private static final long serialVersionUID = 1L;
...
}
이 상황은 e 메시지와 함께 톰캣에서 xception "범위 유형 주석 @ConversationScoped와 WebBeans 상황이 현재의 thread 내에 존재하지 않는다"
내 제안은 내 NotificationBean을 생산하는 공장을 추가했지만 훨씬 변경하지 않는 것.
package com.proj2.beans.cdi;
import javax.enterprise.inject.New;
import javax.enterprise.inject.Produces;
import com.proj1.util.Notification;
public class NotificationBeanFactory {
@Produces
public Notification create(@New NotificationBean notificationBean) {
return notificationBean;
}
}
질문은 빈 구현이 다른 프로젝트에있는 동안 인터페이스 만있는 프로젝트에서 어떻게 빈을 사용할 수 있습니까? 가능한가?
예외는 문제의 스레드 (bean을 얻으려고 시도한 스레드)가 HTTP 요청 스레드가 아님을 제시합니다. 즉, HTTP 대화 및 HTTP 세션과 같은 HTTP 관련 범위를 사용할 수 없습니다. 사실입니까? 그러면 정확히 왜 '@ ConversationScoped'입니까? 컨테이너가 실제 빈 인스턴스를 정확히 어디에 저장 했습니까? – BalusC
브라우저에서 요청한 JSF 응용 프로그램이므로 HTTP 요청입니다. 대화가 아직 시작되지 않았기 때문일 수도 있습니다. 'NotificationBean'은 실제로 내 응용 프로그램에 대한 내 메시지 (오류, 경고 등)를 관리해야합니다. 세션 스코프를 만드는 것이 더 현명합니까? –