Данная статья является продолжением статьи Пример создания EJB3 приложения с помощью Eclipse
Нам понадобится: предустановленная JVM (1.6), JBoss (5.1), Eclipse (3.4.2), MySQL 5.1 – предполагается, что вы уже знаете как ими правильно пользоваться. В конце статьи есть ссылка для скачивания исходных кодов проекта.
Для начала создадим таблицу в базе:
create table Person(
id integer primary key not null,
name CHAR(15),
);
В ejb-module создадим Bean класс Person – отображение нашей реляционной базы на объекты Java (plain Java object), который как минимум должен иметь конструктор без аргументов, а также методы getter и setter, если они необходимы.
import javax.persistence.*;
@Entity
public class Person implements java.io.Serializable {
@Id
private Integer id;
private String name;
public Integer getId() { return id; }
public void setId(Integer id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}
Для тех, кто знаком с ORM Hibernate это все будет очень знакомо. Аннотация Entity указывает, что класс маппится на нашу таблицу Person, @Id отмечает поле в нашем классе, которое используется в качестве первичного ключа. Остальные поля автоматически подхватятся и не нужно писать аннотации, всё это в том случае, если названия таблиц и полей совпадают. Если нет, то пишем так:
@Entity
@Table(name="название таблицы в БД")
@Id
@Column(name="название первичного ключа в БД")
В папке jboss\server\default\deploy\mysql-ds.xml создадим DataSource.
<?xml version="1.0" encoding="UTF-8" ?>
<datasources>
<local-tx-datasource>
<jndi-name>PersonDB</jndi-name>
<connection-url>jdbc:mysql://localhost:3306/persons</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>имя пользователя </user-name>
<password>пароль пользователя</password>
<exception-sorter-class-name>
org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter
</exception-sorter-class-name>
</local-tx-datasource>
</datasources>
И не забудьте драйвер для MySQL положить сюда: C:\jboss\server\default\lib
Теперь можно создать файл persistence.xml, он должен быть в YourEJBProject/META-INF/persistence.xml
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0"
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="persons_dates">
<jta-data-source>java:/PersonDB</jta-data-source>
</persistence-unit>
</persistence>
Исправим классы HelloWorldBean и HelloWorldLocal из первой части статьи, код приводится частично, т.к. вы уже знаете как надо писать.
public class HelloWorldBean implements HelloWorldLocal {
@PersistenceContext (unitName="persons_dates")
private EntityManager manager;
// метод создаст в таблице персону
public void createPerson(Person person) {
manager.persist(person);
}
// изменение имени нашей персоны в таблице
public Person updatePerson(Person person) {
manager.merge(person);
}
// удаление персоны из таблицы
public void deletePerson(int id) {
Person person = manager.find(Person.class, id);
manager.remove(person);
}
}
Теперь нужно написать сервлет:
package servlets;
import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.ejb.*;
import lesson.*;
public class TestClient extends HttpServlet implements javax.servlet.Servlet {
@EJB
private HelloWorldLocal hello;
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
try {
Person person = new Person();
person.setName(request.getParameter("name"));
Person personName = hello.createPerson(person);
request.getSession().setAttribute("result", personName.getName());
RequestDispatcher rd = request.getRequestDispatcher("index.jsp");
rd.forward(request, response);
} catch (Exception e) {
throw new ServletException(e.getMessage());
}
}
}
Здесь реализован только метод создания записи в таблице. Остальные методы остаются для самостоятельного изучения.