Tag: cdi

如何改变设计,使实体不使用注射?

我已经阅读并开始意识到自己的实体(数据对象 – 用于JPA或序列化)注入其中是一个坏主意。 这是我当前的设计(所有相应的字段都有getter和setter,以及为了简洁而放弃的serialVersionUID )。 这是父对象,它是实体组合图的头部。 这是我序列化的对象。 public class State implements Serializable { List cars = new ArrayList(); List planes = new ArrayList(); // other objects similar to AbstractPlane as shown below } AbstractPlane及其子类只是没有注入的简单类: public abstract class AbstractPlane implements Serializable { long serialNumber; } public class PropellorPlane extends AbstractPlane { int propellors; } public class […]

CDI。 如何检查bean是否实例化?

我有一个CDI @Named bean的名字。 例如,’firedEmployeeBean’。 在其他CDI bean中是否有任何方法检查’firedEmployeeBean’是否已经实例化?

焊接使用src / test / META-INF / beans.xml中的替代生产者

我试图通过在src/test/resources/META-INF提供不同的beans.xml来使用Weld SE 2.3.0.Final在测试期间交换注入依赖项的替代实现 它总是似乎使用beans.xml的主要版本,我不知道为什么。 首先,这里是支持class Engine.java public interface Engine { void start(); void stop(); } DefaultEngine.java @Vetoed public class DefaultEngine implements Engine { public void start() { System.out.println(“Cough cough vrummmmm”); } public void stop() { System.out.println(“Phhhut clank”); } } Car.java public class Car { @Inject private Engine engine; public void startCar() { engine.start(); } public […]

cdi生产者是否采用类范围

您好我的问题是,例如,在applicationcoped bean上生成实例还是applicationcoped吗? 它是否需要其类范围或始终依赖?

在websphere共享库中使用CDI

我们使用websphere管理控制台中定义的共享库在多个应用程序之间共享类。 我想知道是否可以在这些类中使用CDI(上下文和dependency injection)? 如果是这样,我只需要将beans.xml放在共享库中的jar中,还是有进一步的步骤? 注意:我不能放弃使用共享库,因为这将是太多的重构工作。

为什么我的@ApplicationScope CDI bean没有更新?

在我的应用程序中,我有一个@ApplicationScoped CDI bean来存储数据库中的一些信息: @Named @ApplicationScoped public class MrBean { @EJB private SoyaBean soyaBean; private List myToys; @PostConstruct public void prepareMrBean() { this.myToys = soyaBean.getToys(); } public void updateToys() { this.myToys = soyaBean.getToys(); } } 我还有一个AddToy.xhtml页面,它只是将一个玩具添加到数据库中。 支持bean如下: @Named @RequestScoped public class MrsBean { @EJB private SoyaBean soyaBean; @Inject private MrBean mrBean; public void addToy() { this.soyaBean.addToy(); […]

@Named的行为与@ManagedBean不同

我目前正在将一个项目从JBoss 4.2.2迁移到JBoss 6.0.0,我还在使用CDI添加dependency injection,并从JSF 1.2迁移到JSF 2.0。 我将一个beans.xml文件添加到ejb-package以及war-package中。 现在我有一个使用托管bean LoginBean.java的xhtml页面。 已经在faces-config.xml中配置了bean,如下所示: Sample description loginBean com.sample.managedbeans.LoginBean session 所以,首先我删除了上面的配置,并将@ManagedBean @SessionScoped添加到了类本身。 因为我想将CDI添加到项目中,所以我将@ManagedBean更改@ManagedBean @Named (与问题2930889相关 )。 现在,当我提交相应xhtml的表单时,字段username和password (在JSP中用作#{loginBean.username} )为空。 当我改回@ManagedBean ,它工作正常。 我在这里错过了什么吗? 亲切的问候,塞巴斯蒂安

如何使用@Inject批注在Java中堆叠自定义注释

我在浏览时多次看到这一点..人们正在使用自己的@Inject注释来注入EntityManager如下所示: @Inject @MyEm EnityManager em; 因为你不能只注入EntityManager 。 你只能用@PersistenceContext来做。 有没有人知道如何使这项工作(使用自定义注释),因为我没有在网上找到任何信息? 如果可以,请举个例子。

用于bean的CDI @TransactionAttribute

我正在测试应用程序上试验CDI 。 我有一个DAO ,它注入一个容器管理的JTA持久化上下文,如下所示: public class TestDAO implements Serializable { @PersistenceContext private EntityManager entityManager; public void insertEntity(Test test) { entityManager.persist(test); } } 现在我有一个像这样的CDI控制器bean: @Named @SessionScoped public class TestController implements Serializable { @Inject private TestDAO testDAO; public void finishGame() { testDAO.insertEntity(new Test(1, 2, 3)); } } 如果我运行它,我在尝试插入实体时在DAO收到错误,因为没有可用的活动事务。 到现在为止还挺好。 我可以通过使控制器bean成为有状态EJB来解决这个问题,它将把finishGame()包装在事务中。 但是假设我不想要EJB 。 作为测试,我使用@TransactionAttribute注释注释了finishGame()并且它有效(控制器bean不是EJB )。 所以我的问题是:它是如何工作的? CDI是否为普通bean定义了@TransactionAttribute ? […]

由于公共私人领域的矛盾,使用Junit @Rule的CdiUnit测试是不可能的

以下代码段足以重现我的问题: 我将thrown属性设置为public并获取错误org.jboss.weld.exceptions.DefinitionException: WELD-000075: Normal scoped managed bean implementation class has a public field 或者我删除public修饰符并获取错误org.junit.internal.runners.rules.ValidationError: The @Rule ‘thrown’ must be public. 我还试图让public修饰符到位,并在类上添加@Dependent注释范围,但得到错误org.jboss.weld.exceptions.DefinitionException: WELD-000046: At most one scope may be specified on [EnhancedAnnotatedTypeImpl] public @Dependent @ApplicationScoped @RunWith 我删除了所有不必要的代码,但这是一个非常复杂的unit testing,通过CDI进行模拟,服务注入,并且一些测试方法预计会引发exception。 import org.jglue.cdiunit.CdiRunner; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import org.junit.runner.RunWith; @RunWith(CdiRunner.class) public class FooBarTest { @Rule public ExpectedException […]