# JSP kein Datenbankzugriff möglich



## golden_wing (6. Apr 2010)

Hallo,

ich versuche gerade eine Webanwendung mit JSF2 aufzusetzen. Habe dazu eine Entity-Klasse "Plant", eine zugehörige 

SessionFacade "PlantFacade" und eine JSFManaged Bean "PlantView", wobei ich 

Getting Started with Java EE 6 Applications als Vorlage genommen habe. Nun möchte ich ExtJS in 

meine Anwendung einbauen um zb. bessere Darstellungsmöglichkeiten wie Charts zu haben. Mein JavaScript macht 

hierbei einen Ajax-Call an eine JSP Datei, die nun aus der Datenbank Informationen holen soll und via JSON 

zurücksendet.

Mein Problem ist derzeit das Erhalten von Informationen aus der Datenbank. Die JSP-Datei sieht so aus:

```
<%@page contentType="text/html" pageEncoding="UTF-8"
        import="my.presentation.PlantView, java.util.List, entities.Plant, java.util.HashMap, org.json.* "%>
<%
	
	PlantView pv = new PlantView();
	String func = request.getParameter("func");
	if(func.compareTo("createPlant")==0){
		pv.getPlant().setName(request.getParameter("name"));
		pv.createPlant();
	}

	if(func.compareTo("getColorsChart")==0){
	     List<Plant> list = pv.getAllMyPlants();
		 HashMap<String,Integer> map = new HashMap<String,Integer>();
		 for(Plant p : list){
			Integer i = map.get(p.getColor());
			if(i!=null)
				i++;
			map.put(p.getColor(),i);
		}
		out.write(new JSONObject(map).toString());
	}
%>
```

PlantView.getAllMyPlants() sieht folgendermaßen aus


```
public List<Plant> getAllMyPlants() {
	return plantFacade.findAll();
}
```

und PlantFacade.findAll() so:


```
public List<Plant> findAll() {
        CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
        cq.select(cq.from(Plant.class));
        return em.createQuery(cq).getResultList();
    }
```

Wenn ich in einer JSF-Datei diese Daten holen möchte ist dies kein Problem über #{PlantView.allMyPlants} aber so 

bzgl. der JSP Datei erhalten ich folgende Fehlermeldung:


WARNUNG: StandardWrapperValve[jsp]: PWC1406: Servlet.service() for servlet jsp threw exception
java.lang.NullPointerException
        at my.presentation.PlantView.getAllMyPlants(PlantView.java:47)
        at org.apache.jsp.switch_jsp._jspService(switch_jsp.java from :61)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:109)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:406)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:483)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:373)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
        at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
        at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
        at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
        at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:332)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:233)
        at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
        at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
        at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
        at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
        at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
        at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
        at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
        at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
        at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
        at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
        at java.lang.Thread.run(Thread.java:619)

Kann mir jemand sagen wo das Problem liegen könnte? Danke im Voraus


----------



## Murray (6. Apr 2010)

Sieht so aus, als wäre plantFacade null...


----------



## golden_wing (6. Apr 2010)

Jop das stimmt, da wird "null" zurückgegeben.

Was wäre denn nun der eleganteste Ansatz um das Problem zu lösen? In der PlantView eine get und SetMethode für die Facade machen und in der JSPDatei dann entsprechend eine neue FacadeErstellen falls keine Vorhanden? Oder gibt es eine schickere Lösung?

Nach Erstellen einer Get/Set Methode erhalte ich immer noch die entsprechende Fehlermeldung

WARNUNG: StandardWrapperValve[jsp]: PWC1406: Servlet.service() for servlet jsp threw exception
java.lang.NullPointerException

obwohl die Facade nun nicht null ist. Fehlt da noch eine Verknüpfung?


----------

