JPA mit JSF auf Tomcat

TheCritter

Aktives Mitglied
Ich versuche seit Tagen eine Anwendung mit JPA und JSF 2.0 zum laufen zu bringen. Das Ganze soll auf einem Tomcat (ohne OpenEJB o.ä.) laufen. Was mache ich falsch?
Die meisten Beispiele im Internet haben folgende Zeile:
Java:
@PersistenceContext
private EntityManager em;
Dies ist ja aber nur mit Hilfe eines Application servers möglich, nicht aber mit Tomcat.

Dann habe ich ein Beispiel gefunden das folgende Klasse hat und auf dem Tomcat läuft. Aber das bezieht sich wiederum auf Servlets, nciht auf JSF:

Java:
package guest;
 
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import javax.persistence.*;
 
public class GuestServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
 
    @Override
    protected void doGet(
        HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
 
        // Obtain a database connection:
        EntityManagerFactory emf =
           (EntityManagerFactory)getServletContext().getAttribute("emf");
        EntityManager em = emf.createEntityManager();
 
        try {
            // Handle a new guest (if any):
            String name = request.getParameter("name");
            if (name != null) {
                em.getTransaction().begin();
                em.persist(new Guest(name));
                em.getTransaction().commit();
            }
 
            // Display the list of guests:
            List<Guest> guestList = em.createQuery(
                "SELECT g FROM Guest g", Guest.class).getResultList();
            request.setAttribute("guests", guestList);
            request.getRequestDispatcher("/guest.jsp")
                .forward(request, response);
 
        } finally {
            // Close the database connection:
            if (em.getTransaction().isActive())
                em.getTransaction().rollback();
            em.close();
        }
    }
 
    @Override
    protected void doPost(
        HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
}
Bzw ist hier das komplette Beispiel:
JPA Database Web Application Tutorial (Tomcat, Servlet, JSP)

Wie vereine ich diese 3 Sachen? Tomcat, JPA und JSF?
 
M

maki

Gast
Was mache ich falsch?
IMHO ein paar Dinge.

Aber als erstes fällt mir auf, dass du ein nicht-JSF Projekt mit JPA als Grundlage/Beispiel für ein geplantes JSF Projekt mit JPA hernehmen willst..

Es gibt mehr als genug Beispiele wie man JSF & JPA kombiniert (Google hilft beim finden), wieso nicht eines davon nehmen?
 

TheCritter

Aktives Mitglied
IMHO ein paar Dinge.

Aber als erstes fällt mir auf, dass du ein nicht-JSF Projekt mit JPA als Grundlage/Beispiel für ein geplantes JSF Projekt mit JPA hernehmen willst..

Es gibt mehr als genug Beispiele wie man JSF & JPA kombiniert (Google hilft beim finden), wieso nicht eines davon nehmen?

Du hast mich nicht ganz verstanden. Das ist ja das Problem dass ich keine Beispiele in der Richtung finde. Es gibt alle möglichen Kombinationen, aber nicht alle 3 vereint. Glaube mir, ich google schon seit Tagen nach so einen Beispiel. Wäre das so einfach, so hätte ich hier nicht geschrieben.

Zu TomEE, ist das wirklich die einzige Möglichkeit für JPA auf Tomcat oder ist das "nur" die bequemste?
 

Deadalus

Bekanntes Mitglied
Was versprichst du dir denn bitte von dieser Combi. Warum willst du krampfhaft einen sinnvollen Standard also das JEE 6 Web Profile zerpflücken?

Möglich ist das auf jeden Fall. Es gibt nur keinen einzigen Vorteil aber dafür einen Haufen Nachteile.

Hier trotzdem die 2 Zeilen code die du benötigst um einen EntityManager zu bekommen:

Java:
EntityManagerFactory factory = Persistence.createEntityManagerFactory("NameOfYourPersistenceUnit");
EntityManager entityManager =  factory.createEntityManager();


Hier noch ein hübsches Zitat von der TomEE Seite:
In Apache TomEE's previous life, it was simply known as the OpenEJB+Tomcat integration. That description was always quite misleading. For one, there's incredible benefit even if EJB is never used.

Quite simply, EJB as a technology integrates with the most number of specs than any other spec. It touches JMS, Web Services, Connectors, Servlets (EJB Web Services are still driven by Servlets!), JPA, JDBC, Transactions, Security. Integrating with all these technologies takes time and expertise and in the end has very little to do with EJB specifically. To apply this all to Tomcat and leverage it all from a simple Servlet is a natural extension and the reason most app servers started out as EJB servers.

Whereas most app servers pluck Tomcat out of its environment, Apache OpenEJB has always existed as an embeddable container focused on being as tiny and invisible as possible. The natural extension of this is to embed the "EE" into Tomcat, rather than the other way around.

But in the end, it is not about EJB. It's about the other guys: ActiveMQ, CXF, MyFaces, OpenJPA, OpenWebBeans, and of course Tomcat! So out with OpenEJB+Tomcat and in with Apache TomEE!
 
Zuletzt bearbeitet:

TheCritter

Aktives Mitglied
Der Sinn ist der, dass die Anwendung auf einem Firmenserver laufen soll wo nur Tomcat installiert ist, dieser über das Autoupdate weiterhin upgedated werden soll und nicht noch ein Java Server darauf installiert werden soll. Wäre das für mich privat, so wäre ich da natürlich flexibler ;-)

Ok, danke für die Codezeilen. Ich probiere das mal so aus.
 
M

maki

Gast
Du hast mich nicht ganz verstanden. Das ist ja das Problem dass ich keine Beispiele in der Richtung finde. Es gibt alle möglichen Kombinationen, aber nicht alle 3 vereint. Glaube mir, ich google schon seit Tagen nach so einen Beispiel. Wäre das so einfach, so hätte ich hier nicht geschrieben.
Ich habe dich sehr gut verstanden.
Glauben kann ich dir nicht, weil ich es besser weiss ;)

Example: Web Application (JSF) Using JPA
EclipseLink/Examples/JPA/JSF Tutorial - Eclipsepedia

Der Grund warum die meisten (aber eben nicht alle) JPA+JSF Tutorials auch EBJs (SessionBeans) oder Spring einsetzen, ist nunmal dass es einfacher ist JSF + JPA mit JEE oder Spring zu nutzen.

Wenn es also nur der Wald & Wiesen Tomcat sein darf, dann würde ich dir eben zusätzlich Spring oder OpenEJB empfehlen.
 

TheCritter

Aktives Mitglied
Ok danke, bei dem 2 Link ist einiger brauchbarer Code dabei. Ich werde erstmal testen.

Eegen Spring, ok ich hatte mich mal mit Seam beschäftigt. Das bekam ich aber auch nicht auf dem Tomcat zum laufen. Nur auf dem JBoss. Habe daher Seam erstmal auf die "Warteposition" gesetzt und will mich später damit beschäftigen.

Wie gesagt, ich probiere erstmal noch etwas herum und ggf muss ich doch die Verantworklichen überzeugen einen Application Server oder TomEE aufzusetzen.
 
G

gman

Gast
Hi,

vielleicht noch als Ergänzung:

Wenn du Maven einsetzt könntest du mal das JSF-2.0-Artefakt von Apache MyFaces testen. Die
nutzen dabei alle Apache-Komponenten für die Entwicklung mit JSF und JPA. Das Artefakt
erzeugt eine einfache Beispielanwendung und läuft auf einem normalen Tomcat.

Group ID: org.apache.myfaces.buildtools
Artifact ID: myfaces-archetype-codi-jsf20
 

Ähnliche Java Themen


Oben