Я пытаюсь создать приложение 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, и все прекрасно работает. Я могу без проблем запускать свой проект на сервере.
Логика
- ДАО слой чтения/вставки некоторые данные из JPA контейнера; он обрабатывает записи базы данных
- Я использую методы слоя DAO в контейнере EJB; Фасоль сессионный используют эти методы отправить результаты в WAR контейнер
- JSF Managed бобы в контейнере WAR получить результаты Beans EJB Session
- Полученные результаты затем отображаются на 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>
Я с нетерпением жду, чтобы увидеть ваши комментарии. Если вам нужны дополнительные данные, я готов вам показать ;-)
Спасибо.
Как насчет названий JBoss? А как насчет привязок JBoss JNDI, и я должен что-то с этим поделать? – miksiii