标签: cdi

@PostConstruct为@ConversationScoped bean多次调用

我有一个@ConversationScoped bean,带有一个start方法,如下所示:

@PostConstruct
public void start() {
    if (conversation.isTransient()) {
        conversation.begin();
        log.debug("conversation.getId(): " + conversation.getId());
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,每次刷新页面时都会启动一个新会话,每次我对bean中的方法进行AJAX调用时,也会启动一个新的会话(这是我的主要问题).

我真正想要发生的是让sam对话流连,直到我手动调用conversation.end().我在这里错过了什么?

java cdi seam-conversation java-ee-6 jboss-weld

3
推荐指数
2
解决办法
6084
查看次数

配置能够在Seam 3中@Inject EntityManager

在项目中,我使用Seam 3,我注射有问题EntityManager@Inject注解.我很确定有某种配置可以确保EnityManager知道PersistenceUnit要使用哪种配置.例如,EJB你可以输入:

@PersistenceContext(unitName="MY_PERSISTENCE_UNIT_NAME")
private EntityManager eManager;
Run Code Online (Sandbox Code Playgroud)

persistence.xml文件中配置了哪个持久性单元.这是我的伪配置:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
    xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">

    <persistence-unit name="MY_PERSISTENCE_UNIT_NAME" transaction-type="JTA">

        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <jta-data-source>java:jboss/TimeReportDS</jta-data-source>
        <mapping-file>META-INF/orm.xml</mapping-file> 

        <class>....</class>
        <class>....</class>
        <class>....</class>

        <properties>

            <property name="jboss.entity.manager.factory.jndi.name"
                value="java:/modelEntityManagerFactory" />

            <!-- PostgreSQL Configuration File -->
            <property name="hibernate.connection.driver_class" value="org.postgresql.Driver" />
            <property name="hibernate.connection.password" value="password" />
            <property name="hibernate.connection.url" value="jdbc:postgresql://192.168.2.125:5432/t_report" />
            <property name="hibernate.connection.username" value="username" />

            <!-- Specifying DB Driver, providing hibernate cfg lookup
                 and providing transaction manager configuration -->
            <property …
Run Code Online (Sandbox Code Playgroud)

java configuration persistence cdi seam3

3
推荐指数
1
解决办法
8761
查看次数

@Produces返回FacesContext ---为什么?

我对于同一主题提出了另一个问题仍犹豫不决,但至少现在我正在阅读正确的文档.

所以,这堂课:

class FacesContextProducer {
   @Produces @RequestScoped FacesContext getFacesContext() {
      return FacesContext.getCurrentInstance();
   }
}
Run Code Online (Sandbox Code Playgroud)

事实上,从焊接文档中,此方法适用于Glassfish: GlassFish使用WELD作为JSR-299的参考实现:Java上下文的Java上下文和依赖注入(CDI).

对于上面的课程,它会在哪里使用?为什么你需要一个单独的类@Produces一个FacesContext?

jsf glassfish facelets cdi jboss-weld

3
推荐指数
2
解决办法
2282
查看次数

我在java中的各种CDI限定符中看到的值()是什么?

我已经看到了对values()内部@Qualifier定义的各种引用.我理解@Qualifier为标记系统,但您将它们定义为接口.

一个界面可以允许枚举,但我不明白values()我在下面列出的两个不相关的例子中看到的这个词.

你可以向我解释一下value()这个词是什么意思吗?

@Qualifier
@Retention(RUNTIME)
@Target({FIELD, TYPE, METHOD})
public @interface NumberOfDigits {
    Digits value();
}

public enum Digits {
    TWO,
    EIGHT,
    TEN,
    THIRTEEN
}
Run Code Online (Sandbox Code Playgroud)
package com.byteslounge.bean;

import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import javax.inject.Qualifier;

@Qualifier
@Retention(RUNTIME)
@Target({FIELD, TYPE, METHOD})
public @interface MessageTransport {

  MessageTransportType value();

}
Run Code Online (Sandbox Code Playgroud)

java qualifiers cdi

3
推荐指数
1
解决办法
1199
查看次数

java ee cdi:抓取由producer方法抛出的异常

是否有可能捕获Java CDI中的生产者方法抛出的异常?我有以下生产方法

@Produces
public User getLoggedInUser() throws UserNotLoggedInException {
    if(...){
        throw new UserNotLoggedInException();
    }
    User user = ... 
    ...
    return user;
}
Run Code Online (Sandbox Code Playgroud)

我想在某处注入用户对象.我不能写这样的方法:

private void doSomethingWithUser(){
    try {
        User loggedInUser = user.get(); // throws exception
    } catch (UserNotLoggedInException e){  // Compiler compains
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

正如编译器所说的那样,UserNotLoggedInException不会抛出任何方法.如果我抓到一个通用Exception,一切正常.这个问题有更优雅的解决方案吗?

谢谢

java exception java-ee cdi

3
推荐指数
1
解决办法
1644
查看次数

将JSF托管bean转换为CDI Bean

需要将JSF项目转换为CDI bean项目.有几个问题需要解决.

  1. 替换@ViewScope时我们应该使用什么
  2. 我们怎样才能取代@ManagedProperty
  3. @EJB将在以前的CDI中工作吗?
  4. 除beans.xml之外的配置文件中所需的任何更改

jsf cdi

3
推荐指数
1
解决办法
1074
查看次数

Weld中的JavaEE CDI:通用事件?

我有一个基于泛型的特定事件处理的想法,但似乎Weld无法处理它们.我问谷歌但是找不到替代的CDI扩展.

问题:是否有CDI扩展,可以处理泛型类型事件的事件传播?

在下面我有明确的问题.

我有三个常规事件,EntityCreated,EntityChanged和EntityDeleted.它们的基类定义如下:

public abstract class DatabaseEvent<TargetType> {

    public TargetType target;

    public DatabaseEvent(TargetType target) {
        this.target = target;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后事件是简单的继承类:

public class EntityCreatedEvent<TargetType> extends DatabaseEvent<TargetType> {

    public EntityCreatedEvent(TargetType target) {
        super(target);
    }
}
Run Code Online (Sandbox Code Playgroud)

我像这样解雇他们:

public abstract class MyHome<EntityType> {

    private EntityType entity;

    @Inject
    Event<EntityCreatedEvent<EntityType>> entityCreatedEvent;

    public void fireCreatedEvent() {
        EntityCreatedEvent<EntityType> payload = new EntityCreatedEvent<EntityType>(entity);
        entityCreatedEvent.fire(payload);
    }
}
Run Code Online (Sandbox Code Playgroud)

我想像这样观察它们:

public void handleProjectCreated(@Observes EntityCreatedEvent<Project> event) { ... }
Run Code Online (Sandbox Code Playgroud)

启动服务器时,Weld告诉我它无法处理泛型类型的事件.CDI的做法是使用额外的限定符而不是泛型来消除它们,例如:

public void handleProjectCreated(@Observes @ProjectEvent EntityCreatedEvent event) { ... }
Run Code Online (Sandbox Code Playgroud)

但是,我从该 …

generics events cdi java-ee-6 weld

3
推荐指数
1
解决办法
1605
查看次数

没有豆有资格注射到注射点[JSR-299§5.2.1]

我想注入默认的Java记录器.然而,Eclipse强调它并指出"没有bean有资格注入注射点[JSR-299§5.2.1]"

如果我仍然部署,则抛出以下异常.为什么它无法注入Java Logger?对于EntityManager也是如此,但对于我自己的UserRepository Bean则不行.

org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [Logger] with qualifiers [@Default] at injection point [[field] 
Run Code Online (Sandbox Code Playgroud)

码:

import java.util.logging.Logger;

import javax.ejb.Stateless;
import javax.enterprise.event.Event;
import javax.inject.Inject;
import javax.persistence.EntityManager;

import com.terry.webapp.data.UserRepository;
import com.terry.webapp.model.usermgmt.User;


// The @Stateless annotation eliminates the need for manual transaction demarcation
@Stateless
public class LoginService {

    @Inject
    private Logger log;

    @Inject
    private EntityManager em;

    @Inject
    private UserRepository repository;

    public User login(User user) {
        log.info("login " + user.getUsername());

        User rUser = repository.findByCredentials(user.getUsername(), user.getPassword());
        return rUser;
    }
}
Run Code Online (Sandbox Code Playgroud)

java cdi jsf-2

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

使用RESTEasy,Weld和Wildfly失败的@Inject对象

我正在尝试使用RESTEasy和Weld进行注入的REST Web服务.当包在wildfly上部署时,我没有问题,但在尝试测试服务时,我得到以下错误.

我不知道如何解决这个问题.

有人能帮帮我吗?

21:54:17,066 ERROR [io.undertow.request] (default task-19) UT005023: Exception handling request to /cdi-test/hello: org.jboss.resteasy.spi.UnhandledException: org.jboss.weld.exceptions.IllegalArgumentException: WELD-001456: Argument resolvedBean must not be null
    at org.jboss.resteasy.core.ExceptionHandler.handleApplicationException(ExceptionHandler.java:76) [resteasy-jaxrs-3.0.8.Final.jar:]
    at org.jboss.resteasy.core.ExceptionHandler.handleException(ExceptionHandler.java:212) [resteasy-jaxrs-3.0.8.Final.jar:]
    at org.jboss.resteasy.core.SynchronousDispatcher.writeException(SynchronousDispatcher.java:149) [resteasy-jaxrs-3.0.8.Final.jar:]
    at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:372) [resteasy-jaxrs-3.0.8.Final.jar:]
    at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:179) [resteasy-jaxrs-3.0.8.Final.jar:]
    at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:220) [resteasy-jaxrs-3.0.8.Final.jar:]
    at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56) [resteasy-jaxrs-3.0.8.Final.jar:]
    at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51) [resteasy-jaxrs-3.0.8.Final.jar:]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) [jboss-servlet-api_3.1_spec-1.0.0.Final.jar:1.0.0.Final]
    at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]
    at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:61) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]
    at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]
    at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25) [undertow-core-1.0.15.Final.jar:1.0.15.Final]
    at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:113) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]
    at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:56) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final]
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25) [undertow-core-1.0.15.Final.jar:1.0.15.Final]
    at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:45) [undertow-core-1.0.15.Final.jar:1.0.15.Final]
    at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:61) [undertow-servlet-1.0.15.Final.jar:1.0.15.Final] …
Run Code Online (Sandbox Code Playgroud)

jax-rs resteasy cdi weld wildfly

3
推荐指数
1
解决办法
7026
查看次数

我是否还需要在CDI bean上使用EJB @Clustered进行分布式应用程序

我有一个Web应用程序,其中在Wildfly 9应用程序服务器上运行EJB 3.1和CDI bean。我已经阅读了有关安装和部署HA独立群集环境的Jboss文档,并且根据JBoss文档,所有EJB必须使用@Cluster注释进行注释,以便在不同的集群节点之间进行分配。我的问题是,是否也需要像对EJB一样对CDI bean进行注释?还是只需要<Distributable />在web.xml上定义标签,容器就会将所有CDI bean作为分布式对象处理?

ejb cluster-computing java-ee cdi wildfly

3
推荐指数
1
解决办法
1197
查看次数