精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-06-13
用JPA API来封装Hibernate core, hibernate-annonations,hibernate-entitymanager 方法很简单就是在WEB-INF\class下建立一个Persistence.xml文件,事务类型指定为JTA模式,并且通过JTA-DS在容器上制定数据源.然后问题来了 我在项目中建立一个class文件, 按理说这个文件非JavaEE范畴,那么应该通过手动获取EntityManagerFactory如下: emf=Persistence.createEntityManagerFactory("puName"); 那如果我想在ManagedBean中获得一个emf呢,可以直接注入么?还是直接得到一个EntityManager? 这让我想到如果是在EJB模块中建立一个class,能够通过注入来获得EntityManager么?他是受容器管理的类么? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-06-14
通过实验发现在JSF的Managed Bean中并不能使用EJB injection,但是难道Managed Bean不是容器托管的么JavaEE资源之一么?
我分别使用了 @PersistenceUnit(unitName="puName") EntityManagerFactory emf; @PersistenceContext(unitName="puName") EntityManager em; 的方法,结果都返回null说明注入失败 Google说大约是因为JBoss不完全支持JEE5的原因,于是更换成GlassFish v2尝试一下 以下同样的代码结果在GF中可以得到但是jboss中不行 JBoss版本4.2.2 GA |
|
返回顶楼 | |
发表时间:2008-06-14
JSF的Managed Bean只能通过
@EJB 来注入EJB的对象,持久化单元是不能注入的,但是你可以通过注入EJB来操作持久化单元啊 |
|
返回顶楼 | |
发表时间:2008-06-14
难得冰封终于肯定下心来看JavaEE
|
|
返回顶楼 | |
发表时间:2008-06-16
在jboss里,通过@PersistenceContext的方式是可以注入EntityManager的
@PersistenceContext(unitName="puName") EntityManager em; 1.你需要检查persistence.xml文件里persistence-unit的name是否是“puName” 2.你需要检查:假如persistence.xml文件里jta-data-source的值为java:/test.那么你是否在jboss里配置了名为test的jndi。如果没有配置可到jboss安装目录下的\docs\examples\jca中找到你需要的数据库的模板。稍做修改即可,然后重启jboss。 希望能帮到你。 另:这篇写的还行,可看看。 http://hi.baidu.com/java_script/blog/item/5eb5e0dc0ceaada2cc116612.html |
|
返回顶楼 | |
发表时间:2008-06-16
lbfhappy 写道 JSF的Managed Bean只能通过
@EJB 来注入EJB的对象,持久化单元是不能注入的,但是你可以通过注入EJB来操作持久化单元啊 JSF中的Managed Bean的角色简单来说应该就是一个servlet吧? 这样的话我恰好google到一个最佳实践 http://weblogs.java.net/blog/ss141213/archive/2005/12/dont_use_persis_1.html 可以在servlet中利用 @PersistenceContext(name="refName" unitName="puName") 或者 @PersistenceUnit(unitName="puName") 来得到EM或者EMF的引用.区别在于,前者是容器管理EntityManager,这样就不需要声明方式管理事务也不需要自己手动close相关资源.后者是应用程序管理em,这样的话需要多一些try catch finally来完成事务管理和资源释放 引用 The EntityManagerFactory is a thread safe, very time consuming object to instantiate. Therefore it will be handy to have one available immediately after the start of the application. EntityManager on the otherhand, is a very light weight, un-threadsafe object. Therefore I have opted to use the EntityManager per HTTP request pattern.
|
|
返回顶楼 | |
发表时间:2008-06-16
zhouyaguo 写道 在jboss里,通过@PersistenceContext的方式是可以注入EntityManager的
@PersistenceContext(unitName="puName") EntityManager em; 1.你需要检查persistence.xml文件里persistence-unit的name是否是“puName” 2.你需要检查:假如persistence.xml文件里jta-data-source的值为java:/test.那么你是否在jboss里配置了名为test的jndi。如果没有配置可到jboss安装目录下的\docs\examples\jca中找到你需要的数据库的模板。稍做修改即可,然后重启jboss。 希望能帮到你。 另:这篇写的还行,可看看。 http://hi.baidu.com/java_script/blog/item/5eb5e0dc0ceaada2cc116612.html 你说这个是web app中的情况么?建议你先做做试验 如果是在EJB模块中,注入是没有任何问题但是在web app中用jboss就不能直接用@PersistenceContext或者@PersistenceUnit来注入了,报错如下: 严重: null javax.naming.NameNotFoundException: persistence not bound |
|
返回顶楼 | |
发表时间:2008-06-18
仍然未解决中
今天下了JBoss 5 beta4 结果仍然让人失望 在glassfish中跑得好好的在jboss中怎么都不行 |
|
返回顶楼 | |
发表时间:2008-06-19
jboss web app中是不能得到@PersistenceContext的
|
|
返回顶楼 | |
发表时间:2008-06-19
badqiu 写道
jboss web app中是不能得到@PersistenceContext的
我这里主要是针对非EJB环境下也就是web app应用中获取EntityManager的探讨 谁说不能通过@PersistenceContext得到em的? 在GlassFish下通过
@PersistenceContext(name="refName" unitName="puName") public class oneBean(){} 的方法利用JNDI获取em的实例 |
|
返回顶楼 | |