Tag: cdi

AnnotationLiteral类的独立版本?

CDI(上下文dependency injection)框架包含了令人敬畏的类javax.enterprise.util.AnnotationLiteral ,它使得创建Annotation实例变得非常容易(特别适用于测试)。 我想在我自己的库中使用该util类。 但由于我的图书馆已经注意到了CDI,我不想拥有所有其他CDI的东西。 幸运的是,AnnotationLiteral不使用除标准java类之外的任何其他类,因此这应该是可能的。 到目前为止,包含AnnotationLiteral的最小库是官方CDI-API javax.enterprise cdi-api 1.0 但即使我切断了所有依赖项(通过maven排除),jar也将包含许多其他CDI-API和-SPI内容。 所以我的问题是:是否已经有一些(或多或少官方)(maven)库只包含util.AnnotationLiteral类,或者至少没有其他东西?

用于数据模型的CDI生产者方法

我希望能够@Inject支持RichFaces 4 ExtendedDataTable的数据模型,但它需要EntityManager来完成它的工作。 当然,EntityManager的查询需要知道Class,我宁愿不将它传递给方法调用(在这种情况下,我的代码不调用这些方法); 理想情况下,它将在构造函数中。 像这样的东西: public class DataModel { @Inject private EntityManager em; private Class entityClass; public DataModel(Class entityClass) { this.entityClass = entityClass; } //Sample method – this class will handle much more complex queries public T findEntity(String key) { return em.find(entityClass, key); } 是否可以创建一个CDI @Producer,可用于将此DataModel注入我的支持bean? 我想过制作一个限定符,所以你可以做类似的事情 @Inject @JType(value = MyEntity.class) DataModel dataModel; 但这看起来很笨拙,并且还需要我的@Producer调用new() […]

当CDI注入POJO应该有效吗? (GlassFish v3)

当我将EJB 3.1 bean注入由@Inject创建的POJO时,注入工作。 当我自己构建POJO时,它不会(Glassfish v3)。 这是正确的行为吗? 我的类(在EJB模块中): @Singleton @LocalBean @Startup @Named public class NewSingletonBean { @PostConstruct public void init(){ System.out.println(“NewSingletonBean INIT”); } } _ public class MyPOJO { @Inject NewSingletonBean newSingletonBean; public void sth(){ System.out.println(“EJB injected into POJO: ” + (newSingletonBean != null)); } } 这不起作用 : @Singleton @LocalBean @Startup @DependsOn(value=”NewSingletonBean”) public class NewSingletonBean2 { […]

Java EE 7 – @Decorator,@ Stateless和@PersistenceContext = nullpointerException

我在java ee 7(glassfish 4)中使用装饰模式。 我有这个装饰师 @Decorator public class FooIndexer implements FooService { @Inject @Delegate FooService fooService; private Logger logger = Logger.getLogger(FooIndexer.class.getName()); //@Inject //Indexer indexer; @Override public Foo create(Foo foo, boolean index) { fooService.create(foo, index); if (index) { System.out.println(“Im in”); } return foo; } } 而这个ejb类 @Stateless(name = “fooService”) @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) @DeclareRoles({“ADMINISTRATOR”, “USER”}) public class FooServiceImpl implements […]

以编程方式将Bean注入CDI上下文?

是否可以手动将bean注入CDI上下文? 使用JBoss Seam框架,我总能做类似Contexts.getConversationContext().set(“foo”, bar); 并且Bean将成为该上下文的一部分。 是否可以在Java EE 6 CDI中执行类似的操作?

@ManagedProperty的CDI替换

我对CDI和JSF都很陌生,我正在尝试将Richfaces 4展示的一些代码转换为使用CDI而不是JSF注释。 我知道我可以使用@Named替换@MangedBean和@Inject来替换@ManagedProperty。 但我遇到了一些麻烦。 我正在尝试专门转换Richfaces Tree示例。 我做了以下更改,我知道这是不正确所以请不要使用此: //@ManagedBean //@ViewScoped @Named @SessionScoped public class TreeBean implements Serializable { private static final long serialVersionUID = 1L; // @ManagedProperty(value = “#{cdsParser.cdsList}”) // private List cdXmlDescriptors; @Inject private Instance cdXmlDescriptors; // I also Tried : // @Inject // private CDParser cdsParser; // private List cdXmlDescriptors = cdsParser.getCdsList(); …….. 然后我添加了(我不确定这是否需要): […]

Java EE 6 @Inject懒惰?

我正在进行一些重构和审查我们正在开发的应用程序。 在这样做时我发现注入了更多的豆子,我认为以懒惰的方式装载它们会更适合它们的目的。 我正在使用Java EE 6,并且倾向于使用比EJB注入更多的CDI。 所以问题是是否可以懒惰地注入豆类,如果是这样,你怎么能这样做?

从EJB无状态会话bean调用CDI会话范围的生产者方法

我想在所有层(即Web层,EJB层)上使用@Inject @Current User注入当前用户。 为了做到这一点,我有以下CDI Producer方法: @Named @SessionScoped public class UserController { @Resource SessionContext sessionContext; @EJB UserDao userDao; @Produces @Current public User getCurrentUser() { String username = sessionContext.getCallerPrincipal().getName(); User user = userDao.findByUsername(username); } } @Qualifier @Target({TYPE, METHOD, PARAMETER, FIELD}) @Retention(RUNTIME) public @interface Current{} 现在,我想将当前用户注入EJB无状态会话bean,如下所示: @Stateless public class SomeBackendService { @Inject @Current private User user; } 我的问题:当前用户对象是否总是在会话更改后重新注入,因为无状态会话bean的依赖关系通常在创建时注入一次,并且bean可能被池化并在不同的会话中使用?

使用没有Servlet容器的CDI

我想用Java Swing编写一个简单的Java桌面应用程序。 通常我使用Spring Framework来执行dependency injection并构建整个类结构。 但是,我已经看到CDI越来越受欢迎,并想尝试一下。 我想使用CDI对我的项目进行dependency injection,但我不知道如果没有Servlet容器(因为它使用的是Spring)是否可行。 每个教程似乎都与servlet容器或应用程序服务器有关。

CDI不明确的依赖关系

我有一个@SessionScoped @Named bean,它带有一个用户对象的@Producer方法: @Named @SessionScoped public class UserBean implements Serializable { //… @Named @Produces @LoggedIn @SessionScoped public MyUser getCurrentUser() {return user;} } 这在我的设置(JBoss-7.1.1-Final)中工作正常,使用#{currentUser.name}从JSF页面访问用户字段没有问题。 限定符是org.jboss.seam.security.annotations.LoggedIn 。 现在我想@Inject这个用户在另一个@Named Bean的字段中: @Named public class FavBean implements Serializable { private @Inject @LoggedIn MyUser currentUser; } 这给了我错误: org.jboss.weld.exceptions.DeploymentException: WELD-001409 Ambiguous dependencies for type [MyUser] with qualifiers [@Default] at injection point [[field] […]