在运行在Tomcat上的JSF应用程序中,在@Inject中使用ConstraintValidator会导致在isValid调用期间出现javax.validation.ValidationException:HV000028:意外异常。
在应用程序的其他地方,CDI工作时没有错误。
The ConstraintValidator
public class MyIntervalValidator implements ConstraintValidator<MyInterval, Integer> {
@Inject
private Interval interv
我的目标是从JSF2 ExceptionHandlerWrapper中获取(某个父类的)所有服务中的CDI托管bean的集合。注意,异常处理程序部分非常重要,因为类本身不是有效的注入目标。因此,我的假设(可能是不正确的)是,我的唯一途径是通过BeanManager编程。
使用BeanManager.getBeans,我可以成功地获得可用的所有bean集。我的问题是,当使用BeanManager.getReference获取bean的上下文实例时,如果bean还不存在,就会创建bean。因此,我正在寻找一个只能返回实例化bean的替代方案。下面的代码是我的出发点
public List<O
我们最近已经迁移到Tomcat 8.5.4 ( 8.5.3)和OmniFaces2.4( 2.3),我们还在我们的Web应用程序中改变了一些东西。从那时起,我们的Web应用程序不再启动,日志中有以下例外:
Exception sending context initialized event to listener instance of class org.omnifaces.ApplicationListener
java.lang.ExceptionInInitializerError
at org.omnifaces.ApplicationListener.checkCDIAvail
CreationalContext和BeanManager.getReference在CDI中有些地方我不理解。
我使用CDI1.2和Wildflix8.2.1,这是我的问题。
我有一个CDI,它是由第三方库生成的。
豆子:
public class ProducedBean
{
private long m_id;
public long getId()
{
return m_id;
}
}
制片人(只是一个例子):
@Produces
public ProducedBean getBean()
{
return new ProducedBean(
在我的JSF应用程序中,我有一个需要很长时间才能完成的进程,我不希望用户一直等到它完成。我试图实现某种“火和忘记的任务”在后台运行。
我使用的是@Asynchronous方法。这是正确的方法吗?
我的控制器:
@ViewScoped
@Named
public class Controller implements Serializable {
private static final long serialVersionUID = -6252722069169270081L;
@Inject
private Record record;
@Inject
是否可以在使用new关键字创建的类中获取CDI的实例?我们目前正在对一个旧的应用程序进行一些增强,每次在应用程序中对CDI进行查找时,我们都会得到一个。
获取参考的代码:
public class ClassCreatedWithNew{
public void doSomething(){
MySingletonBean myBean = BeanManagerSupport.getInstance().getBean(MySingletonBean.class);
}
}
BeanManagerSupport.java
public class Bea
拥有这样的类:
public class A {
@Inject B b;
@Inject C c;
}
有没有可能告诉Weld不要注入到c中?我可以使用event来否决一个类:
<T> void processAnnotatedType(@Observes ProcessAnnotatedType<T> pat)
但是B对象也不会被注入。我正在搜索类似这样的东西:“如果类名是A,字段类型是C,那么就省略注入。”
更具体地说,我希望HK2引擎注入"C“字段,但问题是HK2和Weld都使用了@Inject注解。
Siliarus解决方案:
我尝试了
我已经准备好了CDI事件,可以将EJB进程的进度通知JSF应用程序。当一切都是同步的时候,代码工作得很好。
@Stateless
public class MySessionBean implements Serializable {
@Inject
@ProcessEvent
Event<ProcessEvent> processEvent; // Also tried to use BeanManager
@Asynchronous // This annotation breaks my code
public void runLo
我需要做什么才能使CDI在我的wicket快速启动项目中工作?当我试图启动Jetty服务器时,会得到一个异常:
org.jboss.seam.solder.beanManager.BeanManagerUnavailableException: Failed to locate BeanManager using any of these providers: org.jboss.seam.solder.beanManager.DefaultJndiBeanManagerProvider(11), org.jboss.seam.solder.beanManager.ServletContain
我有一个类,我想成为一个豆子。
public class SomeBean{
public SomeBean(){
//default constructor
}
public SomeBean(String someStr){
//constructor with arguments.
}
}
为了手动创建CDI,我执行以下操作
Bean<?> bean = (Bean<?>) beanManager.resolve(beanManager.getBeans(SomeBean.class));
SomeBean someBea
CDI和Bean验证是JavaEE6标准规范。不过,只需将库添加到项目中,我就可以在Java EE 5应用程序服务器(以及Java SE)中使用这两个库。
这是正确的吗?
在Java EE 5应用服务器中使用两者而不是在Java EE 6应用服务器中使用两者有什么缺点吗?
我必须使用Oracle11g套件和JDeveloper。同时,JDeveloper支持JSF2.0,但我找不到任何对Bean验证或CDI的支持。然而,这不是问题。没有IDE支持(用于代码生成、分步指南等),但我可以通过使用简单的java编辑器来使用这些库。对吗?
我的应用程序部署在不支持CDI for EJB的CDI上。我需要在那个CDI上使用EJB。我知道如何在应用程序的WAR部分使用CDI,但不知道在EJB部分。
是否有方法在不支持EJB应用程序的容器中添加对它的支持?
我的老板不会因为支持服务器的版本而升级服务器。
编辑I使用CDI焊接:我找到了解决方案的开始:
//CDI uses an AnnotatedType object to read the annotations of a class
AnnotatedType<DAOTest> type = beanManager.createAnnotatedTyp
仅仅知道当前thread是用来处理与所需对话相关联的CDI request的那个the,就可以通过编程获得一个CDI conversation实例吗?如果可能,那么如何实现呢?
特别是,我想要做的是:
@ConversationScoped
public class UnitOfWork {...}
public class Client {
@Inject transient UnitOfWork uof;
...
}
public class Room {
@Inject transient UnitOfWork uof;
...
}
但是使用编程机制来初始化uof实例
我想写一个CDI扩展,它从数据库中加载一些实体(实际上是实现某个接口的groovy脚本),并将它们作为bean提供,这样就可以通过CDI注入这个接口的所有实现。我想起了某事。如下所示:
public class ExtensionClass implements Extension {
@Inject
EntityManager em;
public void afterBeanDiscovery(@Observes final AfterBeanDiscovery event, final BeanManager manager) {
Entity entity =
我看了这个项目,它在CDI1.X中提供异步事件(内置异步来自2.0)。
现在我在质疑自定义Extension中的这段代码
public <X> void processAnnotatedType(@Observes ProcessAnnotatedType<X> event, final BeanManager beanManager) {
final AnnotatedType<X> type = event.getAnnotatedType();
for (AnnotatedMethod<?> method : type.ge