Ответ 1
Ниже приведен пример службы JAX-RS, реализованной в виде сессионного компонента с использованием JPA для сохранения и JAXB для обмена сообщениями.
CustomerService
package org.example;
import java.util.List;
import javax.ejb.*;
import javax.persistence.*;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
@Stateless
@LocalBean
@Path("/customers")
public class CustomerService {
@PersistenceContext(unitName="CustomerService",
type=PersistenceContextType.TRANSACTION)
EntityManager entityManager;
@POST
@Consumes(MediaType.APPLICATION_XML)
public void create(Customer customer) {
entityManager.persist(customer);
}
@GET
@Produces(MediaType.APPLICATION_XML)
@Path("{id}")
public Customer read(@PathParam("id") long id) {
return entityManager.find(Customer.class, id);
}
@PUT
@Consumes(MediaType.APPLICATION_XML)
public void update(Customer customer) {
entityManager.merge(customer);
}
@DELETE
@Path("{id}")
public void delete(@PathParam("id") long id) {
Customer customer = read(id);
if(null != customer) {
entityManager.remove(customer);
}
}
@GET
@Produces(MediaType.APPLICATION_XML)
@Path("findCustomersByCity/{city}")
public List<Customer> findCustomersByCity(@PathParam("city") String city) {
Query query = entityManager.createNamedQuery("findCustomersByCity");
query.setParameter("city", city);
return query.getResultList();
}
}
Customer
клиентовНиже приведен пример одного из объектов. Он содержит аннотации JPA и JAXB.
package org.example;
import java.io.Serializable;
import javax.persistence.*;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.Set;
@Entity
@NamedQuery(name = "findCustomersByCity",
query = "SELECT c " +
"FROM Customer c " +
"WHERE c.address.city = :city")
@XmlRootElement
public class Customer implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private long id;
@Column(name="FIRST_NAME")
private String firstName;
@Column(name="LAST_NAME")
private String lastName;
@OneToOne(mappedBy="customer", cascade={CascadeType.ALL})
private Address address;
@OneToMany(mappedBy="customer", cascade={CascadeType.ALL})
private Set<PhoneNumber> phoneNumbers;
}
Для получения дополнительной информации
- Часть 1. Модель данных
- Часть 2 - JPA
- Часть 3 - JAXB (с использованием MOXy)
- Часть 4. Служба RESTful (с использованием сессионного компонента EJB)
- Часть 5. Клиент
UPDATE
какие банки нужны
Вы можете развернуть приложение JAX-RS/EJB/JPA/JAXB на любом совместимом с Java EE 6 сервере приложений, не требуя дополнительной настройки сервера. Программируя клиента, вы можете получить API-интерфейсы JAX-RS из Джерси (http://jersey.java.net/), а API-интерфейсы JPA и JAXB - из EclipseLink (http://www.eclipse.org/eclipselink/).
и где написано соединение с базой данных
JDBC Resource & Пул подключений
Вам необходимо настроить пул соединений на вашем сервере приложений. Ниже приведены шаги, чтобы сделать это на GlassFish. Действия могут отличаться в зависимости от сервера приложений, который вы используете.
- Скопируйте драйвер JDBC (ojdbc14.jar) в /glashfish/lib
- Запустите консоль администрирования
- Создайте пул соединений:
- Имя = CustomerService
- Тип ресурса = 'javax.sql.ConnectionPoolDataSource'
- Поставщик базы данных = Oracle (или любой другой поставщик базы данных, подходящий для вашей базы данных)
- Нажмите Далее и заполните следующие "Дополнительные свойства":
- Пользователь (например, CustomerService)
- Пароль (например, пароль)
- URL (например, jdbc: oracle: thin: @localhost: 1521: XE)
- Используйте кнопку "Пинг", чтобы проверить соединение с базой данных
- Создайте ресурс JDBC с именем "CustomerService"
- Имя JNDI = CustomerService
- Имя пула = CustomerService (имя пула соединений, созданного на предыдущем шаге)
Конфигурация JPA
Затем мы ссылаемся на соединение с базой данных, которое мы создали выше, в файле persistence.xml
для наших объектов JPA следующим образом:
<?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="CustomerService" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>CustomerService</jta-data-source>
<class>org.example.Customer</class>
<class>org.example.Address</class>
<class>org.example.PhoneNumber</class>
<properties>
<property name="eclipselink.target-database" value="Oracle" />
<property name="eclipselink.logging.level" value="FINEST" />
<property name="eclipselink.logging.level.ejb_or_metadata" value="WARNING" />
<property name="eclipselink.logging.timestamp" value="false"/>
<property name="eclipselink.logging.thread" value="false"/>
<property name="eclipselink.logging.session" value="false"/>
<property name="eclipselink.logging.exceptions" value="false"/>
<property name="eclipselink.target-server" value="SunAS9"/>
</properties>
</persistence-unit>
</persistence>