JPA RESTful API mit JPA

distortion85

Mitglied
Hallo zusammen,

ich möchte ein REST-konformes Servlet erstellen, das irgendwann mal als standalone-Applikation auf einer Maschine läuft und die z.B. über PUT/POST befütterten Daten auch persistent hält. Bis jetzt habe ich folgendes probiert:

- Für die Entwicklung nutze ich Eclipse Mars.
- Als darunterliegende DB kommt MySQL unter Win7 zum Einsatz.
- In Eclipse habe ich ein dynamisches Web-Projekt angelegt und testweise eine einfache REST-Schnittstelle mit JAX-RS/Jersey gebaut, die auf GET-Anfragen antwortet. Das ganze auf einem Tomcat8 deployed, funktioniert soweit.
Die Klasse, die die HTTP-Requests entgegen nimmt sieht wie folgt aus:

class AgentHandler

Java:
package simulation.rest.services;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import simulation.rest.entities.*;


@Path("/agent")
public class AgentHandler {

   @GET
   @Produces(MediaType.TEXT_PLAIN)
   public String saySuccess() {
   return "SUCCESS";
   }
}

Nun wollte ich testweise beim Aufruf des GET-Requests ein Objekt der Klasse Agent in die Datenbank schreiben. (Ich weiß, macht bei GET nicht viel Sinn - ist nur um sicherzustellen, dass das Verheiraten funktioniert.)

class Agent

Java:
package simulation.rest.entities;

import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Entity;

@Entity
@Table
public class Agent {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int aid;
    private String aname;

    public Agent(int aid, String aname) {
        super();
        this.aid = aid;
        this.aname = aname;

    }

    public Agent() {
        super();
    }

    // ...getter und setter folgen hier....
  
}

Sobald ich die Ressource aufrufe, soll einfach mal ein Agent in die DB geschrieben werden, dazu die Klasse AgentHandler wie folgt angepasst:

Java:
package simulation.rest.services;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import simulation.rest.entities.*;

@Path("/agent")
public class AgentHandler {

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String saySuccess() {
        EntityManagerFactory emfactory = Persistence.createEntityManagerFactory("EMFagents");
        EntityManager entitymanager = emfactory.createEntityManager();
        entitymanager.getTransaction().begin();
        Agent a1 = new Agent();
        a1.setAid(2);
        a1.setAname("pi2");
        // write to DB
        entitymanager.persist(a1);
        entitymanager.getTransaction().commit();
        //close both EM+EMF
        entitymanager.close();
        emfactory.close();
        return "SUCCESS";
    }

Der Aufruf im Browser wirft nun Exceptions, dass bestimmte Klassen nicht gefunden wurden. Also habe ich geschaut, welche Library diese Klassen mitbringt, die jeweiligen .jars gezogen und in meine Projektbibliotheken referenziert. Allerdings treten immer wieder neue Fehler auf, z.B.:
Java:
javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: java.lang.NoClassDefFoundError: org/jboss/jandex/IndexView
JBoss ist definitiv in meinen referenzierten Bibliotheken.

Ich vermute, das Problem liegt hier bei den Abhängigkeiten der Libraries und es besteht eine Inkompatibilität der Versionen zueinander (Zwischen Jersey/Hibernate)...Gehe ich hier falsch ran? Wie erstelle ich mir am besten ein Projekt, das erstmal die "Grundfunktionalität" erfüllt? (Also HTTP-GET/POST-Request --> write to DB).
PS: Das Schreiben in die DB funktioniert.

Ich bringe Grundlagenwissen mit, einige kleine Studienprojekte in Java gemeistert, aber hier sehe ich noch nicht so richtig durch. Jemand einen Tipp? Danke.
 

Ähnliche Java Themen

Neue Themen


Oben