首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >EntityManagerFactory没有被注射- JPA

EntityManagerFactory没有被注射- JPA
EN

Stack Overflow用户
提问于 2013-02-11 17:44:19
回答 2查看 1.9K关注 0票数 1

我是JPA的乞丐,当我在servlet中使用@PersistenceUnit时,我遇到了问题。EntityManagerFactory没有被注射,我也不知道为什么。

代码语言:javascript
运行
复制
public class MyServlet extends HttpServlet
{   

  @PersistenceUnit
  private EntityManagerFactory emf = null; 

  public MyServlet ()
  {
    super();        
  }

  @Override
  public void init(ServletConfig config) throws ServletException
  {
    super.init(config);
  }


  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    Writer w = response.getWriter();
    w.append("HELLO HELLO");
    w.close();
  }

}

我已经配置了persistence.xml文件(在META目录中)如下:

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.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_1_0.xsd">
<persistence-unit name="MiddlewareExpedElectrModel" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>     
    <non-jta-data-source>java:/OracleDS</non-jta-data-source>
    <class>com.ieci.mugeju.middleware.model.entities.FechaUltimaSolicitudProcesada</class>
    <properties>         
     <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup"/>
     <property name="hibernate.show_sql" value="true"/>
     <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>         
  </properties>     
</persistence-unit>

为什么没有注射EntityManagerFactory?

我正在使用JBoss4.2.3,我还配置了一个带有oracle-ds.xml文件的数据源。

更新:

如果我尝试以编程的方式获得EntityManagerFactory,它会运行得很好:

代码语言:javascript
运行
复制
 EntityManagerFactory emf = Persistence.createEntityManagerFactory("MiddlewareExpedElectrModel");

但是我想通过注入获得一个EntityManagerFactory实例。谢谢!

EN

Stack Overflow用户

发布于 2013-02-11 19:02:25

你能试试吗

代码语言:javascript
运行
复制
public class MyServlet extends HttpServlet {
//this is thread-safe
@PersistenceUnit(unitName="MiddlewareExpedElectrModel")
private EntityManagerFactory emf;

据我所知,EntityManager接口中的方法不是线程安全的,而且不能在多个并发请求之间共享。因此,不要将EntityManager注入servlet实例变量。

这不是线程安全的,而且要避免它。

代码语言:javascript
运行
复制
@PersistenceContext(unitName="MiddlewareExpedElectrModel")
private EntityManager em;

您仍然可以在servlet类类型级别注入EntityManager,并在请求处理期间根据需要进行查找。

代码语言:javascript
运行
复制
@PersistenceContext(unitName="MiddlewareExpedElectrModel", name="persistence/em")
public class MyServlet extends HttpServlet {
protected void doGet(
HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
try {
  InitialContext ic = new InitialContext();
  EntityManager em =
   (EntityManager) ic.lookup("java:comp/env/persistence/em");
  } catch (NamingException ex) {
    ...
  }
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14817755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档