标签: cdi

GlassFish,CDI和构造函数注入

GlassFish 3.1的托管bean的CDI实现是否支持构造函数注入?我有一个@SingletonEJB,我想使用构造函数注入注入另一个托管bean(包含在同一个EJB模块中).现场注入确实有效.但随着构造器注入我收到了NullPointerExceptionAbstractSingletonContainer.

这确实有效:

@Singleton
public class FooBean implements Foo {

  @Inject private BarBean bar;

}
Run Code Online (Sandbox Code Playgroud)

这不起作用:

@Singleton
public class FooBean implements Foo {

    private final BarBean bar;

    @Inject
    public FooBean(BarBean bar) {
        this.bar = bar;
    }

}
Run Code Online (Sandbox Code Playgroud)

dependency-injection glassfish constructor-injection cdi java-ee-6

5
推荐指数
1
解决办法
1万
查看次数

Seam Faces导致部署时错误

我正在使用ICEfaces 2.0 Beta 1和Seam Faces 3.0.0 Alpha 3快照在GlassFish 3.0.1上运行EAR(捆绑EJB-JAR和WAR)的Java EE 6应用程序.

当我部署EAR时,我收到错误.删除Seam Faces时不会发生此错误.这是我的GlassFish日志中的错误(我编写了第一个位,它只列出了我的会话bean并说它们已被转换.我切断了最后几个例外,因为StackOverflow的30000字符限制.):

INFO: Loading application com.example.science_ScienceEar_ear_2.0.3-SNAPSHOT#ScheduleWeb-2.0.3-SNAPSHOT.war at /schedule
INFO: Initializing Mojarra 2.0.2 (FCS b10) for context '/science'
WARNING: JSF1059: WARNING!  The com.sun.faces.verifyObjects feature is to aid developers not using tools.  It shouldn't be enabled if using an IDE, or if this application is being deployed for production as it will impact application start times.
INFO: Ajax Push Resource Handling not available: java.lang.NoClassDefFoundError: org/icepush/servlet/MainServlet
INFO: ICEsoft Technologies Inc. …
Run Code Online (Sandbox Code Playgroud)

java seam java-ee cdi seam3

5
推荐指数
1
解决办法
2218
查看次数

CDI可以注入我的Bean的远程实例吗?

CDI可以在我的远程EJB客户端中注入EJB引用吗?

实际上我有一个JUnit测试用例,它在我的系统上本地运行并访问在独立JBoss AS上运行的EJB.我目前正在使用JNDI访问bean的远程业务接口并对其进行测试.

我想知道,如果@Inject可以帮助我在这里直接将我的EJB实例注入我的测试用例,这样我就可以避免JNDI查找并仍然访问EJB?

junit dependency-injection cdi ejb-3.0 jboss-weld

5
推荐指数
1
解决办法
1665
查看次数

Spring或CDI或EJB3

我对依赖注入的概念很陌生,我们目前正在使用JSF和Primefaces编写一个Web应用程序.我们目前正在评估是使用Spring还是EJB3.我真的很接近选择Spring,但后来我听说了CDI.你能给我们一些提示吗,这可能是以下情况中最好的:

我们目前对J2EE世界很陌生,不知道我们是否会使用Glassfish或JBoss(或者只是坚持使用Tomcat).

Web应用程序基本上是企业CRUD应用程序的原型,需要能够处理复杂的业务逻辑.我们希望专注于"适应性",因为有些要求不明确,将在一年后决定(当我们知道我们是否仍然可以使用原型时).

我们不能使用Hibernate,因为我们必须编写非常复杂的SQL语句.目前,我们在Spring中的SQL抽象方面取得了很好的经验.

也许我正在比较苹果和橘子,但如果你是j2ee的新手,那么信息太多了.我认为EJB是通过JCP定义的标准,Spring是市场定义的标准,CDI是JCP定义的标准,用于执行Spring可以执行的操作.但我肯定是错的;-).

谢谢,

iuiz

jboss spring ejb glassfish cdi

5
推荐指数
1
解决办法
4174
查看次数

有没有办法知道状态是否处于活动状态而不捕获ContextNotActiveException?

我想知道RequestScoped上下文当前是否在方法中处于活动状态.

目前,我在做什么:

@Inject private BeanManager beanManager;

public boolean isRequestScopeActive() {
    try {
        if (beanManager.getContext(RequestScoped.class).isActive()) {
            return true;
        } else {
            return false;
        }
    } catch (final ContextNotActiveException e) {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为,ContextNotActiveException只要了解范围是否有效,我就会有点沉重.

您有没有更好的方法来了解CDI中的上下文的状态(活动与否)?

cdi java-ee-6 jboss-weld

5
推荐指数
1
解决办法
1487
查看次数

在tomcat中使用生产者注入EntityManager

我在tomcat 7上使用Hibernate和Weld CDI运行一个项目.我已经编写了一个ServletContextListener来在应用程序启动期间创建EntityManagerFactory和EntityManager.

public class PersistenceListener implements ServletContextListener {

     private static EntityManagerFactory entityManagerFactory;

     public void contextInitialized(ServletContextEvent sce){
     ServletContext context = sce.getServletContext();
     entityManagerFactory = Persistence.createEntityManagerFactory("hibernate-test");
     }

     public void contextDestroyed(ServletContextEvent sce) {
     entityManagerFactory.close();
     }


     public static EntityManager createEntityManager() {
            if (entityManagerFactory == null) {
                throw new IllegalStateException("Context is not initialized yet.");
            }

            return entityManagerFactory.createEntityManager();
        }

}
Run Code Online (Sandbox Code Playgroud)

我可以通过以下代码创建它,在我的测试类(它是一个arquillian测试类)中使用我的entityManager

EntityManager em = PersistenceListener.createEntityManager();
               em.getTransaction().begin();
                   em.createQuery("delete from Game").executeUpdate();
                   em.getTransaction().commit();
Run Code Online (Sandbox Code Playgroud)

这是我的测试类的完整代码

    @RunWith(Arquillian.class)
    public class HibernateTestSample {

           @Deployment
           public static WebArchive createTestArchive()
           {
               MavenDependencyResolver resolver = DependencyResolvers.use( …
Run Code Online (Sandbox Code Playgroud)

tomcat hibernate cdi jboss-weld jboss-arquillian

5
推荐指数
1
解决办法
6440
查看次数

我如何@Inject CDI @ApplicationScoped bean到@RequestScoped JAX-RS bean?

我已经将@ApplicationScopedCDI注释添加到一个简单的bean:

@ApplicationScoped
public class History {
Run Code Online (Sandbox Code Playgroud)

并尝试将其@Inject转换为JAX-RS(resteasy)bean:

@RequestScoped
@Path("/history")
public class HistoryAPI {

@Inject
private History history;
Run Code Online (Sandbox Code Playgroud)

但历史仍然无效.我beans.xml在WEB-INF中有一个文件.我已经尝试了很多关于这个主题的变化,但是虽然app服务器(Wildfly)承认它是从CDI开始我无法让注入工作.我缺少什么想法?谢谢.

ETA:我试过一个空的beans.xml和几个变种,最新的是:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:weld="http://jboss.org/schema/weld/beans"
       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://docs.jboss.org/cdi/beans_1_0.xsd
                           http://jboss.org/schema/weld/beans http://jboss.org/schema/weld/beans_1_1.xsd">
</beans>
Run Code Online (Sandbox Code Playgroud)

java jax-rs resteasy cdi

5
推荐指数
1
解决办法
2648
查看次数

在Java中使用CDI是必需的默认构造函数吗?

我寻找到一个开源项目,代码库mamute它使用CDI.在大多数类中,有一个不推荐使用的无参数构造函数一个注释为@的构造函数Inject.是上述项目中使用此方法的示例类.所以我的问题是,即使我们有一个带注释的构造函数,我们还必须有一个无参数的构造函数@Inject吗?

dependency-injection java-ee cdi

5
推荐指数
1
解决办法
2363
查看次数

Wildfly 8.2:缺少component.CREATE

我刚刚更新了我的Wildfly-8.1.0.Final安装8.2.0.Final并部署了我的WAR应用程序并遇到了部署错误.它说

ERROR [org.jboss.as.controller.management-operation] (DeploymentScanner-threads - 2) 
      JBAS014613: Operation ("deploy") failed - address: ([("deployment" => "MYAPPNAME.war")]) -
      failure description: {"JBAS014771: Services with missing/unavailable dependencies" => [
Run Code Online (Sandbox Code Playgroud)

然后EJB以下列方式列出我的所有内容:

"jboss.deployment.unit.\"MYAPPNAME.war\".component.EJBNAME.CREATE is missing [jboss.security.security-domain.java:/jaas/MYSECURITYDOMAIN]"
Run Code Online (Sandbox Code Playgroud)

当我回到8.1.0.Final一切按预期工作的时候.

EJB的所有s都被声明,@Stateless并且存在空beans.xml,CDI因为没有任何其他特殊配置EJBCDIcompontents.xml以下内容:

<components>
    <component name="org.jboss.seam.core.init">
        <!-- JNDI name pattern for JBoss EJB 3.0 -->
        <property name="jndiPattern">#{ejbName}/local</property>
    </component>
</components>
Run Code Online (Sandbox Code Playgroud)

有没有人遇到这个案子,可以给我一个如何解决它的提示?

ejb cdi jboss-weld wildfly wildfly-8

5
推荐指数
1
解决办法
3326
查看次数

CDI:使用构造函数参数手动创建bean

我有一个课,我想成为一个豆

public class SomeBean{
   public SomeBean(){
     //default constructor
   }
   public SomeBean(String someStr){
    //constructor with arguments.
   }
}
Run Code Online (Sandbox Code Playgroud)

为了手动创建CDI bean,我执行以下操作

Bean<?> bean = (Bean<?>) beanManager.resolve(beanManager.getBeans(SomeBean.class));
SomeBean someBean =(SomeBean) beanManager.getReference(bean, bean.getBeanClass(), beanManager.createCreationalContext(bean));
Run Code Online (Sandbox Code Playgroud)

但是上面的方法将创建SomeBean实例和默认构造函数.如何创建bean并将String参数传递给construcot?PS CDI - WELD

java cdi weld

5
推荐指数
1
解决办法
1200
查看次数