2016-05-17 2 views
0

Мне действительно нужна помощь здесь: Я делаю свой первый проект EJB (3.2) с JPA 2.2 и сервером приложений WildFly с базой данных MySQL. Я пытаюсь сохранить данные, используя мой EJB bean, но получаю действительно огромную ошибку «say-nothing-to-me» при выполнении метода (вызванный из управляемого компонента). У меня действительно нет ИДЕИ того, что может быть причиной этого (я думал, что это может иметь какое-то отношение к JTA, но я не уверен - действительно новичок во всех этих вещах).Проблемы, возникающие в проекте EJB

Я также не уверен, что этот проект является хорошей идеей: я не использую объект DAO в этом примере, и я не уверен, как его использовать.

Ребята, вы знаете, где я должен искать проблему?

Это мой управляемый боб. Ничего особенного здесь:

@ManagedBean 
@ViewScoped 
public class TesteMB { 

    @Inject private TesteORM testeORM; 

    @EJB private BaseEJBLocal baseService; 

    public void gravar() { 
     this.baseService.adiciona(this.testeORM); 
    } 

    public TesteORM getTesteORM() { 
     return testeORM; 
    } 

    public void setTesteORM(TesteORM testeORM) { 
     this.testeORM = testeORM; 
    } 

} 

Это мой EJB класс компонента (я удалил реализацию интерфейса потому, что я где-то читал, что это не обязательно в EJB 3.2 ... это верно?)

@Stateless 
public class BaseEJBBean { 

    @PersistenceContext 
    protected EntityManager em; 

    public void add(TestORM orm) { 
     this.em.persist(orm); 
    } 
} 

Вот мой класс DAO. Я заметил, что когда я отлаживаю код, кажется, что он не проходит через класс EJB (я поставил там точку останова, и он сразу переходит к другой точке останова в классе DAO, даже не называя ее где-нибудь ... почему?). Я получаю нулевой указатель во второй строке конструктора:

public class BaseDAO<T extends Entidade> { 

    private final EntityManagerFactory factory; 
    private final EntityManager em; 
    private Class<T> clazz; 

    public BaseDAO() { 
     this.factory = Persistence.createEntityManagerFactory("caixaeestoque"); 
     this.em = factory.createEntityManager(); 
    } 

    public void insert(T orm) { 
     em.persist(orm); 
    } 

} 

Вот основная причина моего исключения:

Вызванный: java.lang.NullPointerException на org.hibernate .engine.transaction.internal.jta.JtaStatusHelper.getStatus (JtaStatusHelper.java:76) на org.hibernate.engine.transaction.internal.jta.JtaStatusHelper.isActive (JtaStatusHelper.java:118) на org.hibernate .engine.transaction.internal.jta.CMTTransaction.join (CMTTransaction.java:149)на org.hibernate.jpa.spi.AbstractEntityManagerImpl.joinTransaction (AbstractEntityManagerImpl.java:1602) на org.hibernate.jpa.spi.AbstractEntityManagerImpl.postInit (AbstractEntityManagerImpl.java:210) на org.hibernate.jpa .internal.EntityManagerImpl. (EntityManagerImpl.java:91) на org.hibernate.jpa.internal.EntityManagerFactoryImpl.internalCreateEntityManager (EntityManagerFactoryImpl.java:345) на org.hibernate.jpa.internal.EntityManagerFactoryImpl.createEntityManager (EntityManagerFactoryImpl. java: 313) на br.com.meisa.caixaeestoque.comum.BaseDAO. (BaseDAO.java:15) at sun.reflect.NativeConstructorAccessorImpl. newInstance0 (Родной метод) при sun.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:62) на sun.reflect.DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:45) в java.lang.reflect.Constructor.newInstance (Constructor.java:408) на org.jboss.weld.injection.ConstructorInjectionPoint.newInstance (ConstructorInjectionPoint.java:113) на org.jboss.weld.injection.ConstructorInjectionPoint.invokeAroundConstructCallbacks (ConstructorInjectionPoint.java:87) на org.jboss.weld.injection.ConstructorInjectionPoint.newInstance (ConstructorInjectionPoint.java:74) на org.jboss.weld.injection.producer.AbstractInstantiator.newInstance (AbstractInstantiator.java:28) на org.jboss.weld.injection.producer.BasicInjectionTarget.produce (BasicInjectionTarget. Java: 116) на org.jboss.weld.injection.producer.BeanInjectionTarget.produce (BeanInjectionTarget.java:194) в org.jboss.weld.bean.ManagedBean.create (ManagedBean.java:149) при орг .jboss.weld.context.unbound.DependentContextImpl.get (DependentContextImpl.java:69) на org.jboss.weld.manager.BeanManagerImpl.getReference (BeanManagerImpl.java:742) на org.jboss.weld.manager .BeanManage rImpl.getInjectableReference (BeanManagerImpl.java:840) на org.jboss.weld.injection.FieldInjectionPoint.inject (FieldInjectionPoint.java:92) на org.jboss.weld.util.Beans.injectBoundFields (Beans.java:370) в org.jboss.weld.util.Beans.injectFieldsAndInitializers (Beans.java:381) в org.jboss.weld.injection.producer.DefaultInjector $ 1.proceed (DefaultInjector.java:71) в орг. jboss.weld.injection.InjectionContextImpl.run (InjectionContextImpl.java:48) на org.jboss.weld.injection.producer.DefaultInjector.inject (DefaultInjector.java:73) на org.jboss.weld.injection. producer.StatelessSessionBeanInjector.inject (STATEL essSessionBeanInjector.java:58) на org.jboss.weld.injection.producer.ejb.SessionBeanInjectionTarget.inject (SessionBeanInjectionTarget.java:140) на org.jboss.as.weld.injection.WeldInjectionContext.inject (WeldInjectionContext. Java: 39) на org.jboss.as.weld.injection.WeldInjectionInterceptor.processInvocation (WeldInjectionInterceptor.java:51) на org.jboss.invocation.InterceptorContext.proceed (InterceptorContext.java:309) в орг .jboss.as.ee.component.ManagedReferenceFieldInjectionInterceptorFactory $ ManagedReferenceFieldInjectionInterceptor.processInvocation (ManagedReferenceFieldInjectionInterceptorFactory.java:109) по адресу org.jboss.invocation.InterceptorContext.proceed (InterceptorContext.java:309) на org.jboss.as.ee.component.ManagedReferenceFieldInjectionInterceptorFactory $ ManagedReferenceFieldInjectionInterceptor.processInvocation (ManagedReferenceFieldInjectionInterceptorFactory.java:109) в org.jboss.invocation .InterceptorContext.proceed (InterceptorContext.java:309) на org.jboss.invocation.WeavedInterceptor.processInvocation (WeavedInterceptor.java:53) на org.jboss.invocation.InterceptorContext.proceed (InterceptorContext.java:309) на org.jboss.as.ee.component.AroundConstructInterceptorFactory $ 1.processInvocation (AroundConstructInterceptorFactory.java:28) в org.jboss.invocation.InterceptorContext.proceed (InterceptorContext.java:309) на org.jboss.as.weld.injection.WeldInterceptorInjectionInterceptor.processInvocation (WeldInterceptorInjectionInterceptor.java:56) на org.jboss.invocation .InterceptorContext.proceed (InterceptorContext.java:309) на org.jboss.as.weld.ejb.Jsr299BindingsCreateInterceptor.processInvocation (Jsr299BindingsCreateInterceptor.java:94) на org.jboss.invocation.InterceptorContext.proceed (InterceptorContext.java : 309) по адресу org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation (NamespaceContextInterceptor.Java: 50) на org.jboss.invocation.InterceptorContext.proceed (InterceptorContext.java:309) в org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx (CMTTxInterceptor.java:273) ... 101 еще

+0

У вас есть persistence.xml? Взгляните на некоторые простые примеры, [здесь один] (http://www.thejavageek.com/2015/01/09/creating-jsf-ejb-jpa-application-using-eclipse-wildfly/), которые могут получить ты начал. – stdunbar

+0

Если вы используете EJB 3.2, вам не нужно определять локальные интерфейсы или какие-либо интерфейсы вообще. Просто избавитесь от него. Или, пожалуйста, разместите содержимое интерфейса, в сообщении об ошибке упоминается метод «addiciona» – rapasoft

+1

Какова основная причина исключения? Эта часть представляет собой ответ. – BalusC

ответ

0

Я немного задержался, чтобы понять, что, поскольку я использовал JTA, мне не разрешено создавать новый Entity Manager (да, я знаю: новичок здесь).

Так что я удалил весь конструктор в классе BaseDAO и просто аннотированный его @PersistenceContext:

private final static String PERSISTENCE_UNIT_NAME = "caixaeestoque"; 

@PersistenceContext(unitName= PERSISTENCE_UNIT_NAME) 
private EntityManager em; 

Надеется, что это помогает кто-то, кто начинает в EJB и полных приложениях так же, как я был, когда я отвечал на этот вопрос!