Hi,
ich bin gerade dabei mich in JEE 5 einzuarbeiten, und bin dabei auf ein kleines Problem gestoßen.
Ich habe ein EJB Packet, in dem die Persitence Entities, die Beschreibung zur Persistence Unit und
eine Stateful Session Bean liegen. In der Bean versuche ich mit dem EntityManager auf Daten zuzugreifen.
Ausserdem habe ich noch eine Web Applikation in der eine JSP liegt. Der Web App hab ich das JAR-File der
EJB gegeben und in der JSP versuche ich auf die Bean zuzugreifen. Das Problem ist jetzt, dass in der Bean
der EntityManager nicht gesetzt werden kann.
Die PersistenceUnit:
Die EJB:
Die JSP Seite:
Beim ausführen der JSP Seite bekomme ich folgenden StackTrace:
Beim Debuggen ist zu erkennen, dass der EntityManager null ist.
Das eigenartige ist, dass wenn ich in der WebApplikation ein Servlet anlege, kann ich Problemlos mit der Bean und dem EM arbeiten.
Das Servlet:
Da ich noch nicht lange mit dem JEE 5 arbeite, bin ich etwas ratlos. Ich hab schon alle möglichen Kombinationen in der JSP ausprobiert.
Hab auch versucht die Persitence Klassen in eine eigene JAR zu packen, und so weiter. Leider bin ich jetzt ziemlich am Ende meines Lateins :bahnhof:
Hat hier vielleicht jemand einen Tipp?
Danke,
Sisyphus
P.S.:
Achja, ich verwende den Sun Application Server 9, falls das relevant ist ???:L
ich bin gerade dabei mich in JEE 5 einzuarbeiten, und bin dabei auf ein kleines Problem gestoßen.
Ich habe ein EJB Packet, in dem die Persitence Entities, die Beschreibung zur Persistence Unit und
eine Stateful Session Bean liegen. In der Bean versuche ich mit dem EntityManager auf Daten zuzugreifen.
Ausserdem habe ich noch eine Web Applikation in der eine JSP liegt. Der Web App hab ich das JAR-File der
EJB gegeben und in der JSP versuche ich auf die Bean zuzugreifen. Das Problem ist jetzt, dass in der Bean
der EntityManager nicht gesetzt werden kann.
Die PersistenceUnit:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.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_1_0.xsd">
<persistence-unit name="TestPU" transaction-type="JTA">
<provider>oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider</provider>
<jta-data-source>Test_DataSource</jta-data-source>
<properties>
<property name="toplink.ddl-generation" value="create-tables"/>
</properties>
</persistence-unit>
</persistence>
Die EJB:
Code:
@Stateful
public class UserAgentBean implements UserAgentRemote, UserAgentLocal {
@PersistenceContext(unitName="TestPU")
private EntityManager em;
private Student student;
public UserAgentBean() {
}
public Student setStudent(int id) {
student = em.find(Student.class, id);
}
}
Die JSP Seite:
Code:
<html>
<head>
<title>JSP Page</title>
</head>
<body>
<jsp:useBean id="userAgent" scope="session" class="ejb.UserAgentBean"/>
<%
userAgent.setStudent(123);
%>
</body>
</html>
Beim ausführen der JSP Seite bekomme ich folgenden StackTrace:
Code:
java.lang.NullPointerException
ejb.UserAgentBean.setStudent(UserAgentBean.java:46)
org.apache.jsp.index_jsp._jspService(index_jsp.java:80)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:111)
javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:353)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:409)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:317)
javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:73)
com.sun.enterprise.web.VirtualServerPipeline.invoke(VirtualServerPipeline.java:120)
org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:231)
com.sun.enterprise.web.connector.grizzly.ProcessorTask.invokeAdapter(ProcessorTask.java:667)
com.sun.enterprise.web.connector.grizzly.ProcessorTask.processNonBlocked(ProcessorTask.java:574)
com.sun.enterprise.web.connector.grizzly.ProcessorTask.process(ProcessorTask.java:844)
com.sun.enterprise.web.connector.grizzly.ReadTask.executeProcessorTask(ReadTask.java:287)
com.sun.enterprise.web.connector.grizzly.ReadTask.doTask(ReadTask.java:212)
com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:252)
com.sun.enterprise.web.connector.grizzly.WorkerThread.run(WorkerThread.java:75)
Beim Debuggen ist zu erkennen, dass der EntityManager null ist.
Das eigenartige ist, dass wenn ich in der WebApplikation ein Servlet anlege, kann ich Problemlos mit der Bean und dem EM arbeiten.
Das Servlet:
Code:
public class UserAgentTestServlet extends HttpServlet {
@EJB UserAgentRemote userAgent;
/** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
* @param request servlet request
* @param response servlet response
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("</head>");
out.println("<body>");
userAgent.setStudent(1);
out.println("</body>");
out.println("</html>");
out.close();
}
...
Da ich noch nicht lange mit dem JEE 5 arbeite, bin ich etwas ratlos. Ich hab schon alle möglichen Kombinationen in der JSP ausprobiert.
Hab auch versucht die Persitence Klassen in eine eigene JAR zu packen, und so weiter. Leider bin ich jetzt ziemlich am Ende meines Lateins :bahnhof:
Hat hier vielleicht jemand einen Tipp?
Danke,
Sisyphus
P.S.:
Achja, ich verwende den Sun Application Server 9, falls das relevant ist ???:L