使用CDI和Hibernate4在自定义ConnectionProvider中注入

时间:2016-02-07 20:45:42

标签: hibernate cdi weld

在Java EE 7项目中我需要一个自定义的ConnectionProvider,它使用记录的UserId调用DB-Function,并设置为DB-Session变量。

我的问题,我无法在MyConnectionProvider中注入我的登录用户,但在所有其他Bean中也没有问题。

这是我的ConnectionProvider:

@SessionScoped
@Named
public class MyConnectionProvider implements ConnectionProvider, Configurable, Serializable {

@Inject
private Logger log;

@Inject @LoggedIn
private User currentUser = null;

这是类登录,其中currentUser已初始化:

@SessionScoped
@Named
public class Login implements Serializable
{

@Inject
private Credentials credentials;

@PersistenceContext
private EntityManager userDatabase;

private User currentUser;

//.....................................

@Produces
@LoggedIn
@Named
@SessionScoped
public User getCurrentUser()
{
  return currentUser;
}

和接口LoggedIn:

@Retention(RetentionPolicy.RUNTIME)
@Target({TYPE, PARAMETER,  METHOD, FIELD})
@Qualifier
public @interface LoggedIn {}

可能有人有同样的问题吗?

1 个答案:

答案 0 :(得分:0)

Hibernate不为这些类提供任何注入支持。它们是直接实例化的,并且始终是持久性单元中的单例。

您仍然可以获得此类功能,只需使用CDI实用程序类来查找引用。 CDI.current().select(User.class, new LoggedInLiteral()).get()其中User.class是您期望的类型的类,LoggedInLiteral是限定符实例。