使用 CDI 和 Hibernate4 在自定义 ConnectionProvider 中注入
Injection in custom ConnectionProvider with CDI and Hibernate4
在 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;
这里是 class Login 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;
}
和登录界面:
@Retention(RetentionPolicy.RUNTIME)
@Target({TYPE, PARAMETER, METHOD, FIELD})
@Qualifier
public @interface LoggedIn {}
可能有人遇到同样的问题吗?
Hibernate 不为这些 classes 提供任何注入支持。它们是直接实例化的,并且始终是您的持久性单元中的单例。
您仍然可以获得这种功能,只需使用 CDI 实用程序 class 查找您的参考资料。 CDI.current().select(User.class, new LoggedInLiteral()).get()
其中 User.class 是您期望的类型的 class,LoggedInLiteral
是限定符实例。
在 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;
这里是 class Login 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;
}
和登录界面:
@Retention(RetentionPolicy.RUNTIME)
@Target({TYPE, PARAMETER, METHOD, FIELD})
@Qualifier
public @interface LoggedIn {}
可能有人遇到同样的问题吗?
Hibernate 不为这些 classes 提供任何注入支持。它们是直接实例化的,并且始终是您的持久性单元中的单例。
您仍然可以获得这种功能,只需使用 CDI 实用程序 class 查找您的参考资料。 CDI.current().select(User.class, new LoggedInLiteral()).get()
其中 User.class 是您期望的类型的 class,LoggedInLiteral
是限定符实例。