2014-11-03 9 views
0

Я пытаюсь создать приложение Java Enterprise с помощью Eclipse IDE с сервером JBoss 7.0. У меня уже был опыт разработки таких приложений, но с использованием среды IDE NetBeans. Главная проблема для меня - различия между этими двумя IDE. В настоящее время Eclipse дает мне головные боли о настройке основных функций.Разработка Java EE в Eclipse; Entity Manager Exception

Структура проекта выглядит выше. Я построил приложение Java EE с 3 разделенных контейнеров - один для EJB, JPA и WEB:

EAR: 

-EJB -> contains SessionBeans and all the business logic 

-JPA -> contains database entities (MySQL) and DAO layer 

-WAR -> contains JSF (.xhtml) pages and JSF Managed Beans 

Я настроил эти 3 контейнера для совместной работы, как окружающая среда Java EE, и все прекрасно работает. Я могу без проблем запускать свой проект на сервере.

Логика

  1. ДАО слой чтения/вставки некоторые данные из JPA контейнера; он обрабатывает записи базы данных
  2. Я использую методы слоя DAO в контейнере EJB; Фасоль сессионный используют эти методы отправить результаты в WAR контейнер
  3. JSF Managed бобы в контейнере WAR получить результаты Beans EJB Session
  4. Полученные результаты затем отображаются на JSF страницы с помощью JSF Управляемый объект Бина

проблема

я столкнулся с проблемой, когда я пытаюсь реализовать некоторые базовые функции, как чтение из базы данных. Я предполагаю, что проблема, с которой я столкнулся, связана с проблемой EntityManager.

Concrete проблема

У меня DAO слой, содержащий UserDAOImpl класс, который реализует IUserDAO интерфейс, как вниз сильфона.

интерфейс IUserDAO:

public interface IUserDAO { 
    public List<User> getAllUsers(); 
} 

UserDAOImpl класс:

public class UserDAOImpl implements IUserDAO { 
// @PersistenceContext(unitName="eLearningJJ-jpa") 
// protected EntityManager entityManager; 

    private EntityManagerFactory emf = Persistence.createEntityManagerFactory("eLearningJJ-jpa"); 
    private EntityManager manager = emf.createEntityManager(); 
    private List<User> users = new ArrayList<User>();  

    @Override 
    public List<User> getAllUsers() { 
     users = manager.createNamedQuery("User.findAll", User.class).getResultList(); 
     return users; 
    } 

} 

Этот слой должен быть манипуляции с записями базы данных или юридическими лицами, если вы будете.

класс сущностей пользователя

@Entity 
@NamedQuery(name="User.findAll", query="SELECT u FROM User u") 
public class User implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Id 
    @Column(name="USER_ID") 
    private int userId; 

    @Column(name="USER_NAME") 
    private String userName; 

    @Column(name="USER_PASSWORD") 
    private String userPassword; 

    public User() { 
    } 

    public int getUserId() { 
     return this.userId; 
    } 

    public void setUserId(int userId) { 
     this.userId = userId; 
    } 

    public String getUserName() { 
     return this.userName; 
    } 

    public void setUserName(String userName) { 
     this.userName = userName; 
    } 

    public String getUserPassword() { 
     return this.userPassword; 
    } 

    public void setUserPassword(String userPassword) { 
     this.userPassword = userPassword; 
    } 

} 

Так как я хочу, чтобы выполнить всю бизнес-логику в контейнере EJB, у меня есть UserStateless Bean, который реализует интерфейс локальной UserStatelessLocal нравится вниз ниже:

UserStateless bean:

UserSt atelessLocal интерфейс:

@Local 
public interface UserStatelessLocal { 
    public List<User> getAllUsers(); 
} 

Теперь, метод getAllUsers() вызывается JSF Managed Bean в веб-контейнере, так что я могу перечислить всех пользователей на странице JSF. Это выглядит как вниз ниже:

LoginBean Управляемый компонент JSF:

@ManagedBean 
@SessionScoped 
public class LoginBean 
{ 

    @EJB 
    UserStatelessLocal userStatelessBean; 
    ... 
    public List<User> getUsers() { 
     return userStatelessBean.getAllUsers(); 
    } 

    ... 
} 

Метод getUsers() называется на index.xhtml страницы как вниз ниже:

<h:dataTable value="#{loginBean.users}" var="user" > 
     <h:column> 
      <h:outputText value="#{user.userName}" /> 
     </h:column> 
</h:dataTable> 

Подведение итогов

главная проблема для меня - когда я пытаюсь реализовать EntityManager в UserDAOImpl класс. Как только я добавлю эти 2-3 строки кода, я получаю NullPointerException. Это трассировки стека:

HTTP Status 500 - 

type Exception report 

message 

description The server encountered an internal error() that prevented it from fulfilling this request. 

exception 

javax.servlet.ServletException: java.lang.NullPointerException 
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:325) 
root cause 

javax.ejb.EJBException: java.lang.NullPointerException 
    org.jboss.ejb3.tx2.impl.CMTTxInterceptor.handleExceptionInOurTx(CMTTxInterceptor.java:193) 
    org.jboss.ejb3.tx2.impl.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:261) 
    org.jboss.ejb3.tx2.impl.CMTTxInterceptor.required(CMTTxInterceptor.java:359) 
    org.jboss.ejb3.tx2.impl.CMTTxInterceptor.invoke(CMTTxInterceptor.java:219) 
    org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:35) 
    org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:287) 
    org.jboss.as.ejb3.component.session.SessionInvocationContextInterceptor.processInvocation(SessionInvocationContextInterceptor.java:71) 
    org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:287) 
    org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61) 
    org.jboss.as.ee.component.ViewDescription$1.processInvocation(ViewDescription.java:146) 
    org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:287) 
    org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61) 
    org.jboss.as.ee.component.ProxyInvocationHandler.invoke(ProxyInvocationHandler.java:76) 
    com.elearningjj.beans.UserStatelessLocal$$$view1.getAllUsers(Unknown Source) 
    com.elearningjj.jsfbeans.LoginBean.getKorisnici(LoginBean.java:45) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    java.lang.reflect.Method.invoke(Method.java:483) 
    javax.el.BeanELResolver.getValue(BeanELResolver.java:302) 
    com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176) 
    com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203) 
    org.apache.el.parser.AstValue.getValue(AstValue.java:134) 
    org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:187) 
    com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109) 
    javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:193) 
    javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:181) 
    javax.faces.component.UIData.getValue(UIData.java:557) 
    javax.faces.component.UIData.getDataModel(UIData.java:1297) 
    javax.faces.component.UIData.setRowIndex(UIData.java:450) 
    com.sun.faces.renderkit.html_basic.TableRenderer.encodeBegin(TableRenderer.java:81) 
    javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:828) 
    javax.faces.component.UIData.encodeBegin(UIData.java:940) 
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1650) 
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1655) 
    com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:399) 
    com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131) 
    com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121) 
    com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) 
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:313) 
root cause 

java.lang.NullPointerException 
    org.hibernate.engine.transaction.internal.jta.JtaStatusHelper.getStatus(JtaStatusHelper.java:72) 
    org.hibernate.engine.transaction.internal.jta.JtaStatusHelper.isActive(JtaStatusHelper.java:114) 
    org.hibernate.engine.transaction.internal.jta.CMTTransaction.join(CMTTransaction.java:149) 
    org.hibernate.ejb.AbstractEntityManagerImpl.joinTransaction(AbstractEntityManagerImpl.java:1197) 
    org.hibernate.ejb.AbstractEntityManagerImpl.postInit(AbstractEntityManagerImpl.java:170) 
    org.hibernate.ejb.EntityManagerImpl.<init>(EntityManagerImpl.java:90) 
    org.hibernate.ejb.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:111) 
    org.hibernate.ejb.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:106) 
    com.elearningjj.dao.UserDAOImpl.<init>(UserDAOImpl.java:25) 
    com.elearningjj.beans.UserStateless.getAllUsers(UserStateless.java:28) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    java.lang.reflect.Method.invoke(Method.java:483) 
    org.jboss.as.ee.component.ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptor.java:51) 
    org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:287) 
    org.jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:53) 
    org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:287) 
    org.jboss.as.jpa.interceptor.SBInvocationInterceptor.processInvocation(SBInvocationInterceptor.java:45) 
    org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:287) 
    org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:44) 
    org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:287) 
    org.jboss.as.ee.component.TCCLInterceptor.processInvocation(TCCLInterceptor.java:45) 
    org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:287) 
    org.jboss.invocation.InitialInterceptor.processInvocation(InitialInterceptor.java:21) 
    org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:287) 
    org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61) 
    org.jboss.as.ee.component.ViewDescription$ComponentDispatcherInterceptor.processInvocation(ViewDescription.java:202) 
    org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:287) 
    org.jboss.as.ejb3.component.pool.PooledInstanceInterceptor.processInvocation(PooledInstanceInterceptor.java:44) 
    org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:287) 
    org.jboss.as.ejb3.component.session.SessionInvocationContextInterceptor$CustomSessionInvocationContext.proceed(SessionInvocationContextInterceptor.java:126) 
    org.jboss.ejb3.tx2.impl.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:257) 
    org.jboss.ejb3.tx2.impl.CMTTxInterceptor.required(CMTTxInterceptor.java:359) 
    org.jboss.ejb3.tx2.impl.CMTTxInterceptor.invoke(CMTTxInterceptor.java:219) 
    org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:35) 
    org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:287) 
    org.jboss.as.ejb3.component.session.SessionInvocationContextInterceptor.processInvocation(SessionInvocationContextInterceptor.java:71) 
    org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:287) 
    org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61) 
    org.jboss.as.ee.component.ViewDescription$1.processInvocation(ViewDescription.java:146) 
    org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:287) 
    org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61) 
    org.jboss.as.ee.component.ProxyInvocationHandler.invoke(ProxyInvocationHandler.java:76) 
    com.elearningjj.beans.UserStatelessLocal$$$view1.getAllUsers(Unknown Source) 
    com.elearningjj.jsfbeans.LoginBean.getKorisnici(LoginBean.java:45) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    java.lang.reflect.Method.invoke(Method.java:483) 
    javax.el.BeanELResolver.getValue(BeanELResolver.java:302) 
    com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176) 
    com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203) 
    org.apache.el.parser.AstValue.getValue(AstValue.java:134) 
    org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:187) 
    com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109) 
    javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:193) 
    javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:181) 
    javax.faces.component.UIData.getValue(UIData.java:557) 
    javax.faces.component.UIData.getDataModel(UIData.java:1297) 
    javax.faces.component.UIData.setRowIndex(UIData.java:450) 
    com.sun.faces.renderkit.html_basic.TableRenderer.encodeBegin(TableRenderer.java:81) 
    javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:828) 
    javax.faces.component.UIData.encodeBegin(UIData.java:940) 
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1650) 
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1655) 
    com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:399) 
    com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131) 
    com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121) 
    com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) 
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:313) 
note The full stack trace of the root cause is available in the JBoss Web/7.0.1.Final logs. 

Мой persistance.xml в JPA контейнер выглядит следующим образом:

<persistence version="2.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_2_0.xsd"> 
    <persistence-unit name="eLearningJJ-jpa" transaction-type="JTA"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source> 

     <class>com.elearningjj.entities.User</class> 
     <properties> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> 
      <property name="hibernate.hbm2ddl.auto" value="create-drop"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

Я с нетерпением жду, чтобы увидеть ваши комментарии. Если вам нужны дополнительные данные, я готов вам показать ;-)

Спасибо.

ответ

0

Ваш EJB должен ссылаться по имени Я думаю:

@EJB(mappedName="UserStatelessLocal/local")

Другая возможность состоит в том, чтобы получить EJB с помощью JNDI

Это, вероятно, JBoss называя вопрос, а не Eclipse, один

+0

Как насчет названий JBoss? А как насчет привязок JBoss JNDI, и я должен что-то с этим поделать? – miksiii

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