Tag: cdi

@Injection不适用于CDI bean

我有一个CDI bean,我正在使用@ConversationScoped。 当我尝试为对话对象执行@Inject时,我得到一个NPE。 @ConversationScoped @Named(“customerbean”) public class CustomerBean implements Serializable { @Inject private Conversation conversation; private static final EntityManagerFactory emf = Persistence.createEntityManagerFactory(“ba”); private EntityManager em; private Customer customer; boolean disabled; public CustomerBean() { beginConversation(); customer = new Customer(); em = emf.createEntityManager(); disabled = false; } private void beginConversation() { if (this.conversation.isTransient()) { this.conversation.begin(); return; } […]

Java CDI:根据限定符动态选择实现?

我试图通过使用CDI使应用程序可扩展,但似乎我错过了一块拼图。 我想要的:拥有一个全局配置,定义要使用的接口的实现。 这些实现将具有@ImplDescriptor(type =“type1”)等注释。 我尝试了什么: @Produces public UEInterface createUserExit(@Any Instance instance, InjectionPoint ip) { Annotated annotated = ip.getAnnotated(); UESelect ueSelect = annotated.getAnnotation(UESelect.class); if (ueSelect != null) { System.out.println(“type = ” + ueSelect.type()); } System.out.println(“Inject is ambiguous? ” + instance.isAmbiguous()); if (instance.isUnsatisfied()) { System.out.println(“Inject is unsatified!”); return null; } // this would be ok, but causes […]

在CDI实现项目中包含空beans.xml的目的是什么?

我在我的JSF-EJB-JPA Web应用程序中使用weld ,CDI的RI作为dependency injection组件。 我在项目中看到ejb.jar中的META-INF/beans.xml和WAR中的WEB-INF/beans.xml都有空beans.xml。 我不明白为什么我们需要在该文件中没有定义时保留空beans.xml ?

在运行JUnit时,使用CDI bean注入EJB 3.1的问题

我使用@inject创建了一个EJB3.1并注入了CDI bean,但是在unit testing时遇到了一些问题,但是当从servlet测试它工作正常时。 我在WEB-INF文件夹中有beans.xml。 下面是我的EJB代码: @Stateless public class CdiUsingEjb { @Inject private HelloServletCDIPojo helloServletCDIPojo; public String greet() { assert helloServletCDIPojo != null; return helloServletCDIPojo.from(); } } 下面是我的CDI bean: public class HelloServletCDIPojo { public String from() { return “from HelloServletStateless CDI”; } } 我创建了一个JUnit类: public class CdiUsingEjbTest { @EJB private CdiUsingEjb cdiUsingEjb; @Before public void setUp() […]

@Dependent @ javax.ejb.Singleton与@ApplicationScoped @ javax.ejb.Singleton?

从本质上讲,这两个类之间有什么区别: @ApplicationScoped @Singleton class A {} @Dependent @Singleton class B {} 上下文EJB实例 在查找EJB时,我不想使用@Inject ,除非EJB是@Stateful ,我希望CDI容器管理有状态的生命周期,这可能非常方便。 否则,使用@Inject检索上下文EJB实例有点危险。 例如,除非我们也编写生产者,否则无法使用CDI检索@Remote客户端视图。 此外,A类和B类不能声明任何其他范围而不是它们目前的范围。 CDI 1.1 ,“3.2会话bean”部分说: 单例bean必须属于@ApplicationScoped范围或@Dependent伪范围。 如果会话bean指定了非法范围,容器会自动检测问题并将其视为定义错误。 因此,除了有状态bean之外,当我去寻找EJB时,我认为使用CDI毫无意义。 一个更成熟的问题版本 从客户端代码的角度来看,使用@Inject来声明对A或B的依赖,我无法想象存在差异。 在这两种情况下,调用都将路由到单例EJB。 如果我是CDI提供者的实现作者,那么我甚至可能在两种情况下注入真正的EJB代理并忽略将来要求销毁依赖CDI代理的调用? 底线是我们可以在EJB单例类上声明两个不同的范围。 那有什么区别?

CDI制作人和注射

我想在我的应用程序中使用一个生产者,但我陷入了困境,我正在尝试注入bean。 我得到了着名的WELD-001409错误。 请减轻我对cdi制作人的理解。 这是我的界面: @Named public interface MessageSender { void sendMessage(); } 豆子: public class EmailMessageSender implements MessageSender { @Override public void sendMessage() { System.out.println(“Sending email message”); } } 和制片人: @SessionScoped public class MessageSenderFactory implements Serializable { private static final long serialVersionUID = 5269302440619391616L; @Produces public MessageSender getMessageSender() { return new EmailMessageSender(); } } 现在我正在注入豆子: […]

控制EJB 3.1中的CDI启动

我是新来的,也是CDI世界的新手,我在工作中得到的第一项任务就是找到一种控制CDI上传的方法。 我们使用EJB 3.1和CDI 1.0 ,并且因为它们由不同的容器控制,我们可以通过使用@Startup和@Singleton注释来控制EJB Managed Beans的启动时间和顺序。 但是我在我的类中声明的@Inject CDI bean因为CDI容器尚未启动而变为null。 我已经尝试了几天来寻找解决方案,而我在这里找到的解决方案没有用(仍然是空的)。 我们正在使用Java EE 6并在WebSphere Application Server 8上运行该应用程序。 请问,如果你能帮我找到一种方法来控制内部和不管EJB的CDI上传? 这是一个示例代码: import javax.annotation.PostConstruct; import javax.ejb.Singleton; import javax.ejb.Startup; @Singleton @Startup public class BaseStartupLoader{ /** * Default constructor. */ @Inject @MyStartup BaseStartUp myStartup; private static Logger m_logger = LoggerFactory.getLogger(BaseStartupLoader.class); public BaseStartupLoader() { } @PostConstruct public void init(){ String applicationName […]

Java中的资源注入和dependency injection(CDI)有什么区别?

我一直在学习Java EE,并发现Java EE提供了两种类型的注入机制 资源注入 dependency injection 请引导我理解资源注入和dependency injection之间的区别。

CDI – ApplicationScoped但已配置

问题 使用CDI我想生成@ApplicationScoped bean。 另外,我想为注入点提供配置注释,例如: @Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER}) @Retention(RetentionPolicy.RUNTIME) public @interface Configuration { String value(); } 我不想为每种不同的value可能性写一个单独的生产者。 途径 通常的方法是制作一个制作人并处理注入点注释: @Produces public Object create(InjectionPoint injectionPoint) { Configuration annotation = injectionPoint.getAnnotated().getAnnotation(Configuration .class); … } 因此,bean不再是应用程序作用域,因为每个注入点可能可能不同(生产者的参数注入点不适用于@AplicationScoped注释的生产者)。 所以这个解决方案不起作用。 题 我需要一个具有相同值的注入点获得相同bean实例的可能性。 是否有内置的CDI方式? 或者我是否需要在列表中以某种方式“记住”bean,例如在包含生产者的类中? 我需要的是基本上每个不同value的ApplicationScoped实例。

通过Producer类将RequestScoped CDI Bean注入ApplicationScoped CDI Bean

本文解释了您可以将RequestScoped bean注入到ApplicationScoped bean中,并且客户端代理将在请求期间指向正确的实例: 在CDI中更大范围的bean实例中注入更短范围的Bean实例 – 它是如何工作的? 当使用一个单独的生成器类来执行一些额外的处理并生成RequestScoped bean时,这是如何工作的? 在部署到应用程序服务器后,由于不明确的依赖关系,我得到一个DeploymentException,因为托管bean和我的producer方法都是合格的。