Возможно ли иметь компонент 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;
}
}
Вопрос заключается в том, как я могу использовать компонент в проекте, в котором у меня есть только его интерфейс, а реализация боб в другом проекте. Является ли это возможным?
Исключение предполагает, что рассматриваемый поток (тот, в котором делается попытка получить компонент) не является потоком запросов HTTP. Другими словами, недоступные для HTTP области, такие как HTTP-беседа и HTTP-сеанс, недоступны. Это правда? Почему именно это '@ ConversationScoped' то? Где именно вы ожидали, что контейнер сохранит экземпляр реального экземпляра? – BalusC
Это приложение JSF, запрос выполнен из браузера, поэтому это HTTP-запрос. Хотя, вероятно, это потому, что разговор еще не начался. «NotificationBean» фактически должен управлять моими сообщениями (Ошибки, Предупреждения и т. Д.) Для всего моего приложения. Было бы более разумным сделать его сеансом? –