App auf EJB Stateless Beans umstellen - NPE

membersound

Bekanntes Mitglied
Hallo,

ich versuche gerade mein funktionierendes App auf EJB + SessionBeans umzustellen, mit Hilfe von Annotations.
Beim Programmstart wird eine bestehende Database mit findAll() ausgelesen. Und dort tritt dann eine NPE auf.
Habe ich etwas vergessen bei der Umstellung?
Im Grunde muss ich doch nur die Annotations @EJB und @Stateless setzen?

Danke

Java:
public class Controller {

	@EJB 
	private PersonDao personDao;

//business methods
}

@Stateless
public class PersonDao {
	@PersistenceContext
	private EntityManager em;

	public List<Person> findAll() {
		return em.createQuery("select p from Person p").getResultList(); //<- NPE
	}

	/* not needed anymore if EJB implemented
	public HolidayModelDao() {
    		emf = Persistence.createEntityManagerFactory("TestDB");
		em = emf.createEntityManager();
	}*/

}

Java:
java.lang.RuntimeException: java.lang.NullPointerException
	at org.eclipse.core.internal.databinding.beans.BeanPropertyHelper.readProperty(BeanPropertyHelper.java:106)
	at org.eclipse.core.internal.databinding.beans.BeanListProperty.doGetList(BeanListProperty.java:54)
	at org.eclipse.core.databinding.property.list.ListProperty.getList(ListProperty.java:56)
	at org.eclipse.core.internal.databinding.property.list.SimplePropertyObservableList.getList(SimplePropertyObservableList.java:122)
	at org.eclipse.core.internal.databinding.property.list.SimplePropertyObservableList.access$7(SimplePropertyObservableList.java:121)
	at org.eclipse.core.internal.databinding.property.list.SimplePropertyObservableList$3.run(SimplePropertyObservableList.java:93)
	at org.eclipse.core.databinding.observable.Realm$1.run(Realm.java:148)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.core.databinding.observable.Realm.safeRun(Realm.java:152)
	at org.eclipse.core.databinding.observable.Realm.exec(Realm.java:170)
	at org.eclipse.core.internal.databinding.property.list.SimplePropertyObservableList.firstListenerAdded(SimplePropertyObservableList.java:91)
	at org.eclipse.core.databinding.observable.list.AbstractObservableList$PrivateChangeSupport.firstListenerAdded(AbstractObservableList.java:52)
	at org.eclipse.core.databinding.observable.ChangeManager.addListener(ChangeManager.java:70)
	at org.eclipse.core.databinding.observable.ChangeSupport.addListener(ChangeSupport.java:30)
	at org.eclipse.core.databinding.observable.list.AbstractObservableList.addListChangeListener(AbstractObservableList.java:103)
	at org.eclipse.core.databinding.observable.list.DecoratingObservableList.firstListenerAdded(DecoratingObservableList.java:75)
	at org.eclipse.core.databinding.observable.ChangeManager.addListener(ChangeManager.java:70)
	at org.eclipse.core.databinding.observable.list.DecoratingObservableList.addListChangeListener(DecoratingObservableList.java:48)
	at org.eclipse.jface.databinding.viewers.ObservableListContentProvider$Impl.addCollectionChangeListener(ObservableListContentProvider.java:67)
	at org.eclipse.jface.internal.databinding.viewers.ObservableCollectionContentProvider.setInput(ObservableCollectionContentProvider.java:199)
	at org.eclipse.jface.internal.databinding.viewers.ObservableCollectionContentProvider.inputChanged(ObservableCollectionContentProvider.java:156)
	at org.eclipse.jface.databinding.viewers.ObservableListContentProvider$Impl.inputChanged(ObservableListContentProvider.java:57)
	at org.eclipse.jface.databinding.viewers.ObservableListContentProvider.inputChanged(ObservableListContentProvider.java:170)
	at org.eclipse.jface.viewers.ContentViewer.setInput(ContentViewer.java:276)
	at org.eclipse.jface.viewers.StructuredViewer.setInput(StructuredViewer.java:1690)
	at gui.MainWindow.initDataBindings(MainWindow.java:892)
	at gui.MainWindow.createContents(MainWindow.java:623)
	at org.eclipse.jface.window.Window.create(Window.java:431)
	at gui.MainWindow.create(MainWindow.java:121)
	at org.eclipse.jface.window.Window.open(Window.java:790)
	at gui.MainWindow$23.run(MainWindow.java:833)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at gui.MainWindow.main(MainWindow.java:822)
Caused by: java.lang.NullPointerException
	at session.PersonDao.findAll(PersonDao.java:58)
	at session.Controller.getPersonList(Controller.java:141)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:601)
	at org.eclipse.core.internal.databinding.beans.BeanPropertyHelper.readProperty(BeanPropertyHelper.java:100)
	... 32 more
Status ERROR: org.eclipse.core.databinding code=0 Unhandled exception: java.lang.NullPointerException java.lang.RuntimeException: java.lang.NullPointerException
java.lang.RuntimeException: java.lang.NullPointerException
	at org.eclipse.core.internal.databinding.beans.BeanPropertyHelper.readProperty(BeanPropertyHelper.java:106)
	at org.eclipse.core.internal.databinding.beans.BeanListProperty.doGetList(BeanListProperty.java:54)
	at org.eclipse.core.databinding.property.list.ListProperty.getList(ListProperty.java:56)
	at org.eclipse.core.internal.databinding.property.list.SimplePropertyObservableList.getList(SimplePropertyObservableList.java:122)
	at org.eclipse.core.internal.databinding.property.list.SimplePropertyObservableList.access$7(SimplePropertyObservableList.java:121)
	at org.eclipse.core.internal.databinding.property.list.SimplePropertyObservableList$3.run(SimplePropertyObservableList.java:93)
	at org.eclipse.core.databinding.observable.Realm$1.run(Realm.java:148)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.core.databinding.observable.Realm.safeRun(Realm.java:152)
	at org.eclipse.core.databinding.observable.Realm.exec(Realm.java:170)
	at org.eclipse.core.internal.databinding.property.list.SimplePropertyObservableList.firstListenerAdded(SimplePropertyObservableList.java:91)
	at org.eclipse.core.databinding.observable.list.AbstractObservableList$PrivateChangeSupport.firstListenerAdded(AbstractObservableList.java:52)
	at org.eclipse.core.databinding.observable.ChangeManager.addListener(ChangeManager.java:70)
	at org.eclipse.core.databinding.observable.ChangeSupport.addListener(ChangeSupport.java:30)
	at org.eclipse.core.databinding.observable.list.AbstractObservableList.addListChangeListener(AbstractObservableList.java:103)
	at org.eclipse.core.databinding.observable.list.DecoratingObservableList.firstListenerAdded(DecoratingObservableList.java:75)
	at org.eclipse.core.databinding.observable.ChangeManager.addListener(ChangeManager.java:70)
	at org.eclipse.core.databinding.observable.list.DecoratingObservableList.addListChangeListener(DecoratingObservableList.java:48)
	at org.eclipse.jface.databinding.viewers.ObservableListContentProvider$Impl.addCollectionChangeListener(ObservableListContentProvider.java:67)
	at org.eclipse.jface.internal.databinding.viewers.ObservableCollectionContentProvider.setInput(ObservableCollectionContentProvider.java:199)
	at org.eclipse.jface.internal.databinding.viewers.ObservableCollectionContentProvider.inputChanged(ObservableCollectionContentProvider.java:156)
	at org.eclipse.jface.databinding.viewers.ObservableListContentProvider$Impl.inputChanged(ObservableListContentProvider.java:57)
	at org.eclipse.jface.databinding.viewers.ObservableListContentProvider.inputChanged(ObservableListContentProvider.java:170)
	at org.eclipse.jface.viewers.ContentViewer.setInput(ContentViewer.java:276)
	at org.eclipse.jface.viewers.StructuredViewer.setInput(StructuredViewer.java:1690)
	at gui.MainWindow.initDataBindings(MainWindow.java:892)
	at gui.MainWindow.createContents(MainWindow.java:623)
	at org.eclipse.jface.window.Window.create(Window.java:431)
	at gui.MainWindow.create(MainWindow.java:121)
	at org.eclipse.jface.window.Window.open(Window.java:790)
	at gui.MainWindow$23.run(MainWindow.java:833)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at gui.MainWindow.main(MainWindow.java:822)
Caused by: java.lang.NullPointerException
	at session.PersonDao.findAll(PersonDao.java:58)
	at session.Controller.getPersonList(Controller.java:141)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:601)
	at org.eclipse.core.internal.databinding.beans.BeanPropertyHelper.readProperty(BeanPropertyHelper.java:100)
	... 32 more
java.lang.RuntimeException: java.lang.NullPointerException
	at org.eclipse.core.internal.databinding.beans.BeanPropertyHelper.readProperty(BeanPropertyHelper.java:106)
	at org.eclipse.core.internal.databinding.beans.BeanListProperty.doGetList(BeanListProperty.java:54)
	at org.eclipse.core.databinding.property.list.ListProperty.getList(ListProperty.java:56)
	at org.eclipse.core.internal.databinding.property.list.SimplePropertyObservableList.getList(SimplePropertyObservableList.java:122)
	at org.eclipse.core.internal.databinding.property.list.SimplePropertyObservableList.access$7(SimplePropertyObservableList.java:121)
	at org.eclipse.core.internal.databinding.property.list.SimplePropertyObservableList$4.<init>(SimplePropertyObservableList.java:215)
	at org.eclipse.core.internal.databinding.property.list.SimplePropertyObservableList.iterator(SimplePropertyObservableList.java:213)
	at org.eclipse.core.databinding.observable.DecoratingObservableCollection.iterator(DecoratingObservableCollection.java:68)
	at org.eclipse.core.databinding.observable.set.WritableSet.addAll(WritableSet.java:98)
	at org.eclipse.core.internal.databinding.observable.masterdetail.DetailObservableSet.addAll(DetailObservableSet.java:160)
	at org.eclipse.jface.internal.databinding.viewers.ObservableCollectionContentProvider.getElements(ObservableCollectionContentProvider.java:116)
	at org.eclipse.jface.databinding.viewers.ObservableListContentProvider.getElements(ObservableListContentProvider.java:174)
	at org.eclipse.jface.viewers.StructuredViewer.getRawChildren(StructuredViewer.java:1010)
	at org.eclipse.jface.viewers.StructuredViewer.getFilteredChildren(StructuredViewer.java:917)
	at org.eclipse.jface.viewers.StructuredViewer.getSortedChildren(StructuredViewer.java:1067)
	at org.eclipse.jface.viewers.AbstractListViewer.inputChanged(AbstractListViewer.java:332)
	at org.eclipse.jface.viewers.ContentViewer.setInput(ContentViewer.java:280)
	at org.eclipse.jface.viewers.StructuredViewer.setInput(StructuredViewer.java:1690)
	at gui.MainWindow.initDataBindings(MainWindow.java:892)
	at gui.MainWindow.createContents(MainWindow.java:623)
	at org.eclipse.jface.window.Window.create(Window.java:431)
	at gui.MainWindow.create(MainWindow.java:121)
	at org.eclipse.jface.window.Window.open(Window.java:790)
	at gui.MainWindow$23.run(MainWindow.java:833)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at gui.MainWindow.main(MainWindow.java:822)
Caused by: java.lang.NullPointerException
	at session.PersonDao.findAll(PersonDao.java:58)
	at session.Controller.getPersonList(Controller.java:141)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:601)
	at org.eclipse.core.internal.databinding.beans.BeanPropertyHelper.readProperty(BeanPropertyHelper.java:100)
	... 25 more
 

membersound

Bekanntes Mitglied
Ich glaube, dass meine Dao im Controller null ist und die EX auslöst. Zumindest schlägt der Unit test fehlt, wenn ich die Dao versuche über get() auszulesen.


Java:
@JpaEntityManagerFactory(persistenceUnit = "TestDB")
public class ControllerTest extends UnitilsJUnit4 {
	
	@TestedObject
	Controller ctrService;
	
	@Test
	public void shouldCheckCRUD() {
		assertNotNull(ctrService.getPersonDao()); //NPE
	}
}

Vielleicht fehlt mir ja noch etwas grundsetzliches, im Hinblick auf meinen Code im Eingangsposting?

Im Controller habe ich halt nur die Dao mit @EJB annotiert.
Reicht das vielleicht nicht, um mit dieser zu arbeiten?

Java:
public class Controller {
 
    @EJB 
    private PersonDao personDao;

	public PersonDao getPersonDao() {
		return personDao;
	}
 
    public List<Person> getPersons() {
	return personDao.findAll(); //Ex
    }
}



Oder funktioniert mein Ansatz gar nicht mit einer Desktop Application, und die Sachen die ich mache sind WebApps vorbehalten?
Ich möchte halt primär DependencyInjection und Transactional für meine Desktop App nutzen, um die nervigen Sachen etwas zu vereinfachen...
 
Zuletzt bearbeitet:
R

reNur

Gast
Die Klasse Kontrolle ist ja nur ein POJO, das nicht im Container verwaltet wird. Deshalb funktioniert die EJB-Annotation auch nicht. Du müsstest das also mit einem JNDI lookup machen, um an das Dao zu kommen. Oder du annotierst den Controller auch als Stateless Bean. (zumindest soweit ich das beurteilen kann, aber bin selbst recht neu in der Thematik :))
 

Ähnliche Java Themen

Neue Themen


Oben