2011-08-28 70 views
0

我創建了一個數據庫連接和一些實體,現在我想測試我的數據庫的功能。我有一個用戶實體類,它有一個唯一的用戶名和其他一些信息。現在我試圖簡單地創建一個新的用戶和配置文件並將它們映射到一起,然後堅持它們。當我測試代碼時,它成功運行,但數據庫沒有更新。這裏是我有什麼:堅持新的實體,以現有的數據庫JPA

package servlets; 

import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 

import javax.annotation.Resource; 
import javax.persistence.EntityManager; 
import javax.persistence.EntityManagerFactory; 
import javax.persistence.Persistence; 
import javax.persistence.PersistenceUnit; 
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; 

import entities.Profile; 
import entities.User; 


@WebServlet("/NewUser") 
public class NewUser extends HttpServlet { 

    @Resource 
    UserTransaction utx; 
    @PersistenceUnit 
    EntityManagerFactory emf; 

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     String username = request.getParameter("username"); 
     String email = request.getParameter("email"); 
     String firstname = request.getParameter("firstname"); 
     String lastname = request.getParameter("lastname"); 
     String phone = request.getParameter("phone"); 
     String address1 = request.getParameter("address1"); 
     String address2 = request.getParameter("address2"); 


     try { 
      utx.begin(); 
      EntityManager em = emf.createEntityManager(); 

      //create User & Profile 
      User u = new User(); 
      u.setUsername(username); 
      Profile p = new Profile(); 
      p.setUser(username); 

      //add email to profile's list 
      List<String> emails = new ArrayList<String>(); 
      emails.add(email); 
      p.setEmails(emails); 

      //assign the profile to the user 
      u.setProfile(p); 

      //persist user to the database 
      em.persist(u); 
      utx.commit(); 

      em.close(); 
      emf.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     response.sendRedirect("index.jsp"); 
    } 
} 

我做錯了什麼或是在應用程序的其他地方的問題?

編輯:我發現了以下錯誤:異常描述:無法獲取來自駕駛員[空],用戶[空]和URL [空]的連接。確認您已設置預期的驅動程序類和URL。檢查您的登錄名,persistence.xml或sessions.xml資源。該jdbc.driver屬性應設置一類是與數據庫平臺

兼容我不知道做了錯誤的東西,但是...我檢查我的數據庫連接,一切似乎是爲了。 :/

我的persistence.xml文件:

<?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="myPersistenceUnit" > 
    <jta-data-source>jdbc/mydatasource</jta-data-source> 
     <class>entities.User</class> 
     <class>entities.Profile</class> 
     <class>entities.Message</class> 
     <class>entities.Image</class> 
     <properties> 
      <property name="eclipselink.ddl-generation" value="create-tables"/> 
      <property name="eclipselink.ddl-generation.output-mode" value="both"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

回答

0

我從來沒有使用容器管理事務,但你的persistence.xml至少有。

<persistence-unit name="myPersistenceUnit" transaction-type="JTA">