在一个项目中是否有可能拥有一个bean接口,并且在另一个项目中实现了该bean,该项目中包含之前的项目作为依赖关系?不同项目中的Bean接口和Bean实现
我有以下接口:
package com.proj1.util;
import .....;
public interface Notification {
addNotification();
addError();
}
在同一项目(即Proj1)我也有下面的类:
package com.proj1.util.exception;
import .....;
public class ExceptionHandler extends RuntimeException ... {
private String errorMessage;
@Override
public void handle() {
Util.getBeanInstance(Notification.class).addError(errorMessage);
}
}
现在,在第二个项目我有实际执行Notification
如下:
package com.proj2.beans;
@Named
@ConversationScoped
public class NotificationBean implements Notification, Serializable {
private static final long serialVersionUID = 1L;
...
}
这种情况导致e xception在Tomcat中消息“WebBeans的背景与范围类型注释@ConversationScoped并不当前线程中存在”
我的建议是增加产生我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,在这个项目中我只有它的接口,而bean实现在另一个项目中。可能吗?
异常表明所讨论的线程(尝试获取bean的线程)不是HTTP请求线程。换句话说,HTTP相关的范围如HTTP会话和HTTP会话不可用。这是真的?那为什么呢'@ ConversationScoped'呢?你究竟在哪里预期容器存储实际的bean实例? – BalusC
这是一个JSF应用程序,请求来自浏览器,因此它是一个HTTP请求。虽然可能是因为没有对话还没有开始。 'NotificationBean'实际上应该管理我的所有应用程序的消息(错误,警告等)。使会话范围更明智吗? –