Hozzunk létre egy dinamikus web projektet JPA néven.
1.) Hozzuk létre a persistence.xml nevű file-t a src/META-INF könyvtárban a következő tartalommal:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.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_2_0.xsd">
<persistence-unit name="customers">
<jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
<properties>
<property name="hibernate.hbm2ddl.auto" value="create-drop" />
<property name="showSql" value="true"/>
<property name="hibernate.dialect"
value="org.hibernate.dialect.MySQLDialect" />
</properties>
</persistence-unit>
</persistence>
2.) Készítsük el az org.me.CustomerManager class-t:
package org.me;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateful;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
@Stateless
public class CustomerManager {
@PersistenceContext(unitName = "customers")
EntityManager em;
public void createCustomer(String name, String address) {
Customer customer = new Customer(name, address);
em.persist(customer);
}
public List<Customer> listCustomers() {
String q = "SELECT b from " + Customer.class.getName() + " b";
Query query = em.createQuery(q);
return query.getResultList();
}
}
3. Készítsük el a class org.me.Customer class-t
package org.me;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity(name = "customer")
public class Customer implements Serializable {
@Id
private String name;
private String address;
public Customer() {
}
public Customer(String name, String address) {
this.name = name;
this.address = address;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
4.) Készítsünk egy org.me.MyServlet class-t.
package org.me;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/MyServlet")
public class MyServlet extends HttpServlet {
@EJB
private CustomerManager cm;
public MyServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String method = request.getParameter("method");
String name = request.getParameter("name");
String address = request.getParameter("address");
PrintWriter writer = response.getWriter();
writer.print("<html><body>");
if(method.equalsIgnoreCase("create")) {
cm.createCustomer(name, address);
writer.print("result = OK, saved");
} else if(method.equalsIgnoreCase("list")) {
List<Customer> persons = cm.listCustomers();
for (Customer customer : persons) {
writer.print("customer.name=" + customer.getName() + " address=" + customer.getAddress() + "</br>");
}
}
writer.print("</body> </html>");
writer.flush();
writer.close();
}
}
5.) Deployment után a kipróbálásként hozzunk létre 3 customer példányt.
http://localhost:8080/JPA/MyServlet?method=create&name=john1&address=miskolc
http://localhost:8080/JPA/MyServlet?method=create&name=john2&address=miskolc
http://localhost:8080/JPA/MyServlet?method=create&name=john3&address=miskolc
Mentett elemek listázása:
http://localhost:8080/JPA/MyServlet?method=list&name=john1&address=miskolc
egy lehetséges megoldás:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> </head> <body> <form action="MyServlet"> Name: <input type="text" name="name"> <br> Address: <input type="text" name="address"> <br> <input type="submit" name="method" value="create"> <input type="submit" name="method" value="list"> <input type="submit" name="method" value="delete"> </form> </body> </html>
Egy lehetséges megoldás:
public int delete(String name) {
String q = "DELETE from " + Customer.class.getName()
+ " b WHERE b.name = '" + name + "'";
Query query = em.createQuery(q);
return query.executeUpdate();
}