Tag: cdi

如何在WildFly上禁用WELD

如何在WildFly上完全禁用WELD。 我不需要它,因为我使用另一个DI框架。 例外0:javax.enterprise.inject.UnsatisfiedResolutionException:无法使用限定符[@ javax.enterprise.inject.Any(),@ javax.enterprise.inject解析’org.springframework.data.mongodb.core.MongoOperations’的bean 。默认()]。 at org.springframework.data.mongodb.repository.cdi.MongoRepositoryExtension.createRepositoryBean(MongoRepositoryExtension.java:104)at the sun.reflect org.springframework.data.mongodb.repository.cdi.MongoRepositoryExtension.afterBeanDiscovery(MongoRepositoryExtension.java:79)at sun.reflect at.MativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method .java:606)在org.jboss.weld上的org.jboss.weld.welject.MethodInjectionPoint.invokeOnInstanceWithSpecialValue(MethodInjectionPoint.java:93)org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:266)。 event.ExtensionObserverMethodImpl.sendEvent(ExtensionObserverMethodImpl.java:125)org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:253)org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:232) 在org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:169) 我试过了 但它没有解决我的问题。

CDI缺少@ViewScoped和@FlashScoped

为什么Java EE 6 CDI缺少@ViewScoped和@FlashScoped注释? (特别是前者让我很奇怪,因为CDI源于Seam世界,它已经知道了非常相似的ScopeType.PAGE …) 使用CDI时建议的解决方法是什么? 使用Seam 3? 谢谢

如何通过BeanManager创建和销毁CDI(焊接)托管Bean?

我正在尝试使用BeanManager而不是Instance .select()。get()创建CDI托管bean的实例。 这被建议作为我已经使用ApplicationScoped bean和他们的家属的垃圾收集的问题的解决方法 – 请参阅CDI应用程序和依赖范围可以合谋影响垃圾收集? 为背景和这建议的解决方法。 如果在ApplicationScoped bean上使用Instance编程查找方法,Instance对象和从中获取的任何bean最终都依赖于ApplicationScoped bean,因此共享它的生命周期。 但是,如果使用BeanManager创建bean,则会在Bean实例本身上设置句柄,并且显然可以明确地销毁它,我理解这意味着它将被GCed。 我目前的方法是在BeanManagerUtil类中创建bean,并返回Bean,实例和CreationalContext的复合对象: public class BeanManagerUtil { @Inject private BeanManager beanManager; @SuppressWarnings(“unchecked”) public DestructibleBeanInstance getDestructibleBeanInstance(final Class type, final Annotation… qualifiers) { DestructibleBeanInstance result = null; Bean bean = (Bean) beanManager.resolve(beanManager.getBeans(type, qualifiers)); if (bean != null) { CreationalContext creationalContext = beanManager.createCreationalContext(bean); if (creationalContext != null) { T […]

使用CDI @Inject注入Spring bean

我正在尝试将Spring上下文中定义的bean注入CDI托管组件,但我没有成功。 不注入bean,而是每次执行注入时都会创建一个新实例。 我的环境是使用JBoss Weld的Tomcat 7。 Spring ApplicationContext是直截了当的: … … CDI托管bean看起来像这样: @javax.inject.Named(“testA”) public class TestA { @javax.inject.Inject private Test myTest = null; … public Test getTest() { return this.myTest; } } 这是我的faces-config.xml org.springframework.web.jsf.el.SpringBeanFacesELResolver 但是,当我从JSF页面访问test属性时,每次访问时都会创建一个新的Test实例。 这是一个简单的例子: … 1: 2: … 我得到以下输出: 1: test.Test@44d79c75 2: test.Test@53f336eb 刷新后: 1: test.Test@44d79c75 2: test.Test@89f2ac63 我可以看到第一个输出是正确的。 无论我多久刷新一次页面, testFromSpring返回Spring上下文中定义的bean的值。 但是第二个输出清楚地表明,每次调用test组件上的getTest方法时,都会创建并注入一个新的Test实例,而不是像我期望的那样使用Spring上下文中的实例。 那么,这种行为的原因是什么? 如何将Spring上下文中的bean注入CDI托管bean? 我也尝试使用在Spring上下文中定义的名称的限定符,但现在抛出一个exception,表明找不到bean: […]

为什么在CDI中使用构造函数而不是setter注入?

我在这里找不到任何合理的答案所以我希望它不是重复的。 那么为什么我更喜欢setter或构造函数注入而不是简单 @Inject MyBean bean; 如果你需要在类初始化期间对注入的bean执行某些操作,我会使用构造函数注入 public void MyBean(@Inject OtherBean bean) { doSomeInit(bean); //I don’t need to use @PostConstruct now } 但是,它几乎和@PostConstruct方法一样,我根本没有得到setter注入,它不仅仅是Spring和其他DI框架之后的遗物吗?

如何以静态方法以编程方式将Java CDI托管bean注入局部变量

如何以静态方法以编程方式将Java CDI 1.1+托管bean注入局部变量?

如何在运行grizzly的java se上启用web服务(jaxrs / jersey)中的CDI注入?

如何允许CDI将资源注入到宁静的Web服务资源中? 我使用焊接2(cdi),泽西(jaxrs)和灰熊(web服务器)在标准java上运行。 这是我简单的网络资源: import training.student.StudentRepository; import javax.inject.Inject; import javax.ws.rs.*; @Path(“student”) public class StudentWebResource { @Inject private StudentRepository studentRepository; @GET @Path(“count”) @Produces(MediaType.TEXT_PLAIN) public Integer getCount() { return studentRepository.studentCount(); } } 以下是我如何通过简单的Web服务器启动焊接: public class Main { public static void main(String[] args) throws Exception { startCdiApplication(); } public static void startCdiApplication() throws Exception { Weld weld = new […]

Field.get(obj)返回注入的CDI托管bean上的所有空值,而手动调用getter则返回正确的值

我试图通过reflection从JSF页面的支持bean访问某些字段的值。 问题是,当我使用getter时,我得到了正确的值但是当我使用必要字段的get(obj)方法时,我总是得到一个返回的null值。 获取beanObject: ELContext elcontext = FacesContext.getCurrentInstance().getELContext(); Object beanObject = FacesContext.getCurrentInstance().getApplication().getELResolver().getValue(elcontext, null, beanName); 要在不使用getter的情况下获取字段值,请执行以下操作: List fields = new ArrayList(); ParamsBuilder.getAllFields(fields, beanClass); for(Field field: fields) { field.setAccessible(true); System.out.println(field.getName() + “: ” + field.get(beanObject)); //just to see if it works } getAllFields方法具有以下实现: public static List getAllFields(List fields, Class type) { for (Field field: type.getDeclaredFields()) { fields.add(field); } […]

JEE7:EJB和CDI bean是否支持容器管理的事务?

Java EE7由一堆“bean”定义组成: Managed Beans 1.0(JSR-316 / JSR-250) Java 1.0的dependency injection(JSR-330) CDI 1.1(JSR-346) JSF Managed Beans 2.2(JSR-344) EJB 3.2(JSR-345) 为了摆脱我心中的混乱,我研究了几篇“何时使用哪种豆类”的文章。 EJB的一个优点似乎是它们单独支持声明式容器管理事务 (着名的事务注释)。 不过,我不确定这是否正确。 任何人都可以批准这个吗? 同时,我想出了一个简单的演示应用程序来检查这是否真的如此。 我刚刚根据这个片段定义了一个CDI bean( 不是 EJB – 它没有类级别注释),如下所示: public class CdiBean { @Resource TransactionSynchronizationRegistry tsr; @Transactional(Transactional.TxType.REQUIRED) public boolean isTransactional() { return tsr.getTransactionStatus() == Status.STATUS_ACTIVE; } } 现在,GlassFish 4.0的结果是这个方法实际上返回true,根据我的询问,它没有按预期工作 。 我确实希望容器忽略CDI bean方法上的@Transactional注释,或甚至抛出exception。 我使用新安装的GlassFish 4服务器,因此没有干扰。 […]