Tag: cdi

获取GET请求参数到@ViewScoped bean

我有一个(请求范围的)列表,用户可以从中选择“PQ”(链接列表)。 单击或以其他方式输入浏览器时,将显示每个PQ的主页面。 每个PQ的页面都是表格 http://localhost:8080/projectname/main.jsf?id=2 这是PQ bean的第一个: @Named @ViewScoped public class PqHome implements Serializable { @PersistenceContext(unitName=”…”) private EntityManager em; private Integer id; private PQ instance; @PostConstruct public void init() { System.out.println(“ID is ” + id); // ID from URL param instance = em.find(PQ.class, id); } public Integer getId() { return id; } public void setId(Integer id) […]

当注释具有参数时,CDI拦截器不起作用

我正在尝试实现@Restricted注释,以用户只能在登录并具有特定角色时才能访问它们的方式来保护控制器方法。 我在使用JSF和CDI的Tomcat 7上,所以没有EJB。 只要注释接口未指定任何参数,就会调用拦截器。 只要我添加@Nonbinding Role value() default Role.ADMIN; 参数,拦截器和控制器方法都不执行。 也没有错误或例外。 这是我的代码,我真的不知道它有什么问题: 注解: @InterceptorBinding @Retention(RetentionPolicy.RUNTIME) @Target({ ElementType.TYPE, ElementType.METHOD }) public @interface Restricted { @Nonbinding Role value() default Role.ADMIN; // ### } 拦截器: @Interceptor @Restricted public class RoleBasedRestrictingInterceptor implements Serializable { @Inject ISecurityManager security; @AroundInvoke public Object intercept(final InvocationContext ctx) throws Exception { final Restricted annotation […]

在JSF 2.0中注入Bean

我有一个Session scoped bean import javax.faces.bean.SessionScoped; import javax.inject.Named; @Named @SessionScoped public class SessionBean implements Serializable{ 我在一个filter中使用了对象… public class FiltroSeguridad implements Filter{ @Inject private SessionBean sessionBean; @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest) request; sessionBean.setRutaRedirect(httpRequest.getRequestURI()); } } 但是,我在下一次互动中会使用SessionBean …… @Model public class CuentaUsuarioWebBean implements Serializable{ @Inject private […]

哪个是CDI @Produces注释的Spring等价物?

当我使用CDI时,我可以使用@Produces批注创建一个生成器方法来调用,以选择实现接口的bean将由@Inject批注注入。 现在我正在使用Spring,但我没有找到类似的东西。 当我使用@Autowired注释时,我需要使用什么来获得与CDI中@Produces注释相同的结果?

将参数传递给@Inject Bean的实例

我使用CDI作为注入框架,但我发现它的使用有一些限制,这就是其中之一。 我正在尝试使用运行时值初始化bean实例的创建。 例: @RequestScoped public class MyNumber { int number; public MyNumber(int number) { this.number = number; } public String toString() { return “Your number is: ” + number; } } public class UseNumber { @Inject Instance number; public void doStuff() { int a = 8; MyNumber mN = number.select(a).get(); // ?? – Obviously this […]

什么是CDI的实例或Guices Provider的Spring等价物

在CDI中,您可以使用以下命令定义一个对象,该对象将为您提供特定类型的项目: @注入 Instance myObjectInstance; // … MyObject myObjectInstance.get(); 同样在Guice中你可以这样做: @注入 Provider myObjectInstance; // … MyObject myObjectInstance.get(); 我想知道Spring中是否有类似的构造,或者您必须使用ApplicationContext才能获得引用?

为什么具有分离数据源的不同持久性单元会查询相同的数据源?

我正在开发一个需要访问两个不同数据库服务器(H2和Oracle)的webapp。 容器是Apache Tomee 1.5.1 ,我使用Java EE堆栈,其中包含库(JSF,JPA,CDI,EJB等)。 我正在尝试在XA事务中使用两个实体管理器从Oracle数据库中提取数据并在转换后将其保留在H2中,但无论我使用的实体管理器如何,所有查询都是针对H2数据库执行的。 有帮助吗? 编辑 :我发现,如果我尝试以相反的顺序访问实体管理器,它们的行为是相同的,但访问Oracle。 即:实体经理留在第一个访问的数据库。 发生这种情况的EJB service.getFoo()从JSF调用service.getFoo() ): @Named @Stateless public class Service { @Inject @OracleDatabase private EntityManager emOracle; @Inject @H2Database private EntityManager emH2; @TransactionAttribute(TransactionAttributeType.REQUIRED) public List getFoo() { TypedQuery q = emH2.createQuery( “SELECT x FROM Foo f”, Foo.class); List l = q.getResultList(); if (l == null || l.isEmpty()) […]

Java CDI @PersistenceContext和线程安全

在muliple类threadsafe中,EntityManager @Inject [ed]如下所示? @PersistenceContext(unitName=”blah”) private EntityManager em; 这个问题和这个问题似乎是针对Spring的。 我正在使用Jave EE CDI服务

如何获取@PostConstruct CDI bean方法的事务

我正在试验Java EE 7,CDI,JPA和JSF。 当webapp启动时,我想在我的CDI bean(标有@PostConstruct)中运行一个初始化方法,该方法可以对数据库进行一些操作(插入一些行等等)。 为此,我需要一个交易,但这并不像我预期的那么容易。 我已经尝试将@Transactional注释添加到我的方法中,但显然它只适用于EJB。 我实际上尝试将我的bean转换为EJB而不是CDI bean,但我仍然没有得到我的@PostConstruct方法的事务。 它适用于bean中的其他方法,但不适用于我的@PostConstruct初始化方法。 然后我读到了创建方法拦截器来获取CDI bean的事务: http://eubauer.de/kingsware/2012/01/16/cdi-and-transactions-eg-in-jboss-7-0-2/ 我也试过这个,但没有运气。 它也不起作用。 那么如何在CDI bean中获取@PostConstruct初始化方法的事务呢?

使用CDI注入PersistenceContext

目前,我正在使用PersistenceContext来注入EntityManager。 EM完美注入。 @Stateless public StatelessSessionBean implements StatelessSessionBeanLocal { @PersistenceContext(unitName = “MyPersistenceUnit”) private EntityManager em; @Override public Collection getAllObjects(){ CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriqQuery query = cb.createQuery(MyObject.class); query.from(MyObject); return em.createQuery(query).getResultList(); } } 现在我尝试装饰豆子,突然间em没有被注射。 我得到一个NullPointerException。 @Decorator public StatelessSessionBeanDecorator implements StatelessSessionBeanLocal { @Inject @Delegate @Any StatelessSessionBeanLocal sb @Override public Collection getAllObjects(){ System.out.println(“Decorated method!”); return sb.getAllObjects(); } } 我知道EJB和CDI是两个完全不同的管理器,所以那个人不了解另一个。 […]