Ulu*_*Biy 10 hibernate cdi java-ee-6 jpa-2.0 jboss-weld
由于JPA 2.0不支持注入EntityListener(JPA 2.1将),因此决定使用JNDI查找来获取BeanManager并通过它获取登录用户.我定义了一个EntityListener类似的:
public class MyEntityListener {
public static BeanManager getBeanManager() {
try {
InitialContext initialContext = new InitialContext();
return (BeanManager) initialContext.lookup("java:comp/BeanManager");
} catch (NamingException e) {
e.printStackTrace();
return null;
}
}
public Object getBeanByName(String name) {
BeanManager bm = getBeanManager();
Bean bean = bm.getBeans(name).iterator().next();
CreationalContext ctx = bm.createCreationalContext(bean);
return bm.getReference(bean, bean.getClass(), ctx);
}
@PrePersist
@PreUpdate
public void onPreInsertOrUpdate(MyEntity entity) {
User loggedInUser = (User) getBeanByName("loggedInUser");
entity.setUpdatedUser(loggedInUser);
entity.setUpdatedTimestamp(new Date());
}
}
Run Code Online (Sandbox Code Playgroud)
用户在会话范围内管理为:
@SessionScoped
public class UserManager implements Serializable {
private User loggedInUser;
@Produces
@Named("loggedInUser")
public User getLoggedInUser() {
return loggedInUser;
}
// Set the logged in user after successfully login action
}
Run Code Online (Sandbox Code Playgroud)
我想知道这种方法有什么缺点或要点.性能吞吐量?当有多个登录用户在他们自己的范围内同时更新实体时会发生什么?
Hibernate JPA 2.0
Seam焊接CDI
Glassfish 3.1.2
| 归档时间: |
|
| 查看次数: |
6210 次 |
| 最近记录: |