Что я хочу сделать:Servlet не сохраняется Субъект
Я только начал с JPA, и поэтому я хочу, чтобы понять, как сохраняющиеся Entitys из разных работ перспективы (Application-Managed, Container-Managed). Управление приложениями отлично работает, однако у меня возникают проблемы с сохранением Entity с Менеджером Entity из веб-приложения с помощью TestServlet.
Что я сделал до сих пор:
IDE: NetBeans 8.0.2 Сервер: GlassFish 4,1 Mysql 5,6 JPA 2.1: EclipseLink
- Я создал проект веб-приложения ,
- Я импортировал объекты из базы данных с помощью мастера NetBeans. По какой-то причине я не могу импортировать их из jdbc/__ default. Мне нужно создать новый источник данных. В данном случае это был JDBC/__ Onlineshop
Я просто хочу, чтобы создать объект в пределах Servlet и сохраняются в базу данных только, чтобы понять, как это работает, прежде чем я продолжу, но, видимо, я не совсем понимаю.
Я подключен к базе данных, и я могу получить к нему доступ через Java-приложение, но не используя сервлет из веб-контейнера.
Драйвер MySQL находится в GLAP-библиотеках классов.
Исключения не выбрасываются. Вызывается сервлет, который я могу видеть в браузере. Однако перенаправление через RequestDispatcher тоже не работает, URL-адрес браузера остается в web-jpa/test.
Мой вопрос:
Что случилось с моим Servlet или persistence.xml, так как сохраняющиеся не работает?
persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/ persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="jpa-webPU" transaction-type="JTA">
<jta-data-source>jdbc/__onlineshop</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties/>
</persistence-unit>
TestServlet.java:
package jpa;
import java.io.IOException;
import javax.annotation.Resource;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceUnit;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.transaction.UserTransaction;
@WebServlet("/test")
public class TestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@PersistenceUnit
EntityManagerFactory emf;
@Resource
private UserTransaction ut;
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
EntityManager em = emf.createEntityManager();
Customer customer = new Customer();
customer.setEmail("[email protected]");
customer.setPassword("password");
try
{
ut.begin();
em.persist(customer);
ut.commit();
} catch (Exception e) {
try
{
ut.rollback();
} catch (Exception e1)
{
e1.printStackTrace();
}
throw new ServletException(e.getMessage());
}finally
{
em.close();
}
RequestDispatcher dispatcher = request.getRequestDispatcher ("index.html");
dispatcher.forward(request, response);
}
}
Спасибо!
p.s .: Любые подсказки оцениваются!
Ты путаешь редирект и вперед. Переадресация просто передает ответственность за обработку запроса другому компоненту. Он не может изменить URL. Переадресация (с использованием HttpServletResponse.sendRedirect()) отправляет ответ браузеру и сообщает ему перейти к другому URL-адресу. Это может изменить URL. –
Каков ваш вопрос? –
Я отредактировал сообщение. Основной вопрос был бы: Есть ли что-то неправильное в том, как я обращался к существующей сущности внутри сервлета?Я не понимаю, почему он не сохраняет Entity в базе данных. – SklogW