2015-02-08 5 views
0

использовать остальное легко и хотите управлять моим сущ. имеют ресурсы persistence.xml и beans.xml в WEB-INF. хочет использовать EntityManager в:resteasy cdi производитель нуль

public class EntityDao { 

// @PersistenceContext(unitName = "UserPersistenceUnit") 
    @Inject 
    private EntityManager entityManager; 

    public void add(Object t) { 
     try { 
      System.out.println("start adding4."); 
      if (entityManager == null) { 
       System.out.println("entity manager is null."); 
       entityManager = Persistence. 
         createEntityManagerFactory("UserPersistenceUnit"). 
         createEntityManager(); 
       if (entityManager != null) { 
        System.out.println("entity manager created."); 
       } 
      } 
//   entityManager.getTransaction().begin(); 
//   entityManager.persist(t); 
//   entityManager.getTransaction().commit(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      System.out.println(e.getMessage()); 
     } 
    } 

} 

и мой продюсер:

@ApplicationScoped 
public class Resources { 

// @PersistenceContext 
// @Produces 
// private EntityManager entityManager; 

    @Produces 
    public EntityManager getEntityManager() { 
     System.out.println("get enrity manager."); 
     EntityManager entityManager = Persistence. 
       createEntityManagerFactory("UserPersistenceUnit"). 
       createEntityManager(); 

     return entityManager; 
    } 
} 

, но мой менеджер объекта является недействительным. Кто-нибудь может помочь?

мой отдых код:

@Path("/userreg") 
public class UserRegistration { 

    User user; 

    @GET 
    @Produces({"application/json", "application/xml"}) 
    public User UserRegister() { 
     UserDao userDao = new UserDao(); 
     user = new User(); 
     user.setUserName("u1"); 
     user.setPassword("p1"); 
     userDao.add(user); 

     return user; 
    } 
} 

и UserDao является:

public class UserDao extends EntityDao{ 

} 

мой ПОМ:

<dependencies> 
     <dependency> 
      <groupId>javax</groupId> 
      <artifactId>javaee-api</artifactId> 
      <version>7.0</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-entitymanager</artifactId> 
      <version>4.3.8.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>postgresql</groupId> 
      <artifactId>postgresql</artifactId> 
      <version>9.1-901.jdbc4</version> 
     </dependency> 
    </dependencies> 

в EntityDao мой EntityManager, который имеет @Inject является недействительным и производитель не работает. благодарен.

+0

Какой сервер приложений? Вы помещали файл persistence.xml в META-INF? Вы видите сообщение system.out вашего продюсера на консоли? –

+0

no idont см. Мой sout в консоли. сервер приложений - wildfly. сохранение в ресурсах/папка META-INF. – user2880318

+0

Я полагаю, что это Wildfly 8.2.0 ... можете ли вы поместить содержимое своего beans.xml? Также ваш вопрос, очевидно, не связан с Resteasy. Возможно, вы должны исправить заголовок, теги и контент –

ответ

1

Ваша ошибка здесь

UserDao userDao = new UserDao(); 

Если экземпляр класса самостоятельно с new, он не будет управляться CDI и, таким образом, @Inject будут игнорироваться, и ваше поле будет пустым.

Так правильный код будет:

@Path("/userreg") 
public class UserRegistration { 

    User user; 

    @Inject 
    UserDao userDao; 

    @GET 
    @Produces({"application/json", "application/xml"}) 
    public User UserRegister() { 
     user = new User(); 
     user.setUserName("u1"); 
     user.setPassword("p1"); 
     userDao.add(user); 

     return user; 
    } 
} 

Кроме того, немного обратной связи на ваш код:

  1. проверки, что @Produces в Resources является javax.enterprise.inject.Produces и не javax.ws.rs.Produces, ваша IDE может сыграть вам плохой трюк, если вы не проверите импорт раздел

  2. Я бы посоветовал расколоть часть вашего кода @PersistenceContext. Избегайте его создания вручную в приложении Java EE: вы потеряете много возможностей Java EE.

  3. Вам не следует добавлять зависимость от спящего режима, включенную в ваш объект, так как он предоставляется WildFly.

Смежные вопросы