Здравствуйте! Я попробовал переделать "студенческий отдел кадров" Антона Сабурова из http://www.java-course.ru/, с реализацией хранилища данных для google app engine... Вроде бы заработало, но не совсем... При сохранении объекта в датастор (google app engine datastore) создается аж по 2-3 копии объекта. Вот пример ManagementSystem со вставкой объекта: | Код | package students.logic;
import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Set;
import javax.persistence.EntityManager; import javax.persistence.EntityTransaction; import javax.persistence.Query;
import com.google.appengine.api.datastore.Key;
import students.logic.EMF;
import students.entity.Groups; import students.entity.Students;
public class Students_ManagementSystem { private static final Students_ManagementSystem ms = new Students_ManagementSystem(); public static Students_ManagementSystem getInstance(){ return ms; } public synchronized void insertStudent(Students student){
EntityManager em = EMF.get().createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); try { em.persist(student); tx.commit(); } finally { if (tx.isActive()) { tx.rollback(); } } em.close(); }
|
вот пример из сервлета: | Код | package students.logic;
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
import com.google.appengine.api.datastore.Key; import com.google.appengine.api.datastore.KeyFactory;
import students.entity.Groups; import students.entity.Students; import students.web.forms.MainFrameForm;
public class Students_Groups_FrameServlet extends HttpServlet { private Students_ManagementSystem ms = Students_ManagementSystem.getInstance(); private Groups_ManagementSystem msg = Groups_ManagementSystem.getInstance();
private static final SimpleDateFormat sdf = new SimpleDateFormat( "dd.MM.yyyy");
protected void processRequest(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { Long sId = null; Long gId = null; if(req.getParameter("studentId")!=null){ if(!req.getParameter("studentId").isEmpty()) sId = Long.parseLong(req.getParameter("studentId")); } if(req.getParameter("groupId")!=null){ if(!req.getParameter("groupId").isEmpty()) gId = Long.parseLong(req.getParameter("groupId")); } if (gId!=null && sId != null && req.getParameter("OK") != null) { try { updateGroups(req); updateStudent(req); } catch (SQLException sql_e) { sql_e.printStackTrace(); throw new IOException(sql_e.getMessage()); } catch (ParseException p_e) { throw new IOException(p_e.getMessage()); } } else { try { insertGroups(req); insertStudent(req); } catch (SQLException sql_e) { sql_e.printStackTrace(); throw new IOException(sql_e.getMessage()); } catch (ParseException p_e) { throw new IOException(p_e.getMessage()); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } Integer ys = Integer.parseInt(req.getParameter("educationYear")); int year = Calendar.getInstance().get(Calendar.YEAR); if (ys != null) { year = ys; } MainFrameForm form = new MainFrameForm(); List<Groups> groups = msg.getGroups(); //Students st = new Students(); if (gId == null) { Iterator<Groups> i = groups.iterator(); gId = i.next().getGroupId(); } Collection<Students> students = ms.getStudentsFromGroup(gId, year); form.setGroupId(gId); form.setYear(year); form.setGroups(groups); form.setStudents(students); req.setAttribute("form", form); getServletContext().getRequestDispatcher("/MainFrame.jsp").forward(req, resp); }
private synchronized void updateStudent(HttpServletRequest req) throws SQLException, ParseException { Students st = prepareStudent(req); Groups gr = prepareGroups(req); msg.updateGroup(gr); st.setGroupId(gr.getGroupId()); ms.updateStudent(st); }
private synchronized void insertStudent(HttpServletRequest req) throws SQLException, ParseException, InterruptedException { Students st = prepareStudent(req); Groups gr = prepareGroups(req); msg.insertGroup(gr); Long grId = gr.getGroupId(); st.setGroupId(grId); ms.insertStudent(st); }
private Students prepareStudent(HttpServletRequest req) throws ParseException { Students s = new Students(); if (req.getParameter("studentId")!=null) { if(!req.getParameter("studentId").isEmpty()){ s.setStudentId(Long.parseLong(req.getParameter("studentId"))); } } if(req.getParameter("groupId")!=null){ if(!req.getParameter("groupId").isEmpty()){ s.setGroupId(Long.parseLong(req.getParameter("groupId"))); } } s.setFirstName(req.getParameter("firstName").trim()); s.setSurName(req.getParameter("surName").trim()); s.setPatronymic(req.getParameter("patronymic").trim()); s.setDateOfBirth(sdf.parse(req.getParameter("dateOfBirth").trim())); if (req.getParameter("sex").equals("0")) { s.setSex('М'); } else { s.setSex('Ж'); } //s.setGroupId(Long.parseLong(req.getParameter("groupId").trim())); //it is null s.setEducationYear(Integer.parseInt(req.getParameter("educationYear") .trim())); return s; } private Groups prepareGroups(HttpServletRequest req) throws ParseException { Groups gr = new Groups(); if(req.getParameter("groupId")!=null){ if(!req.getParameter("groupId").isEmpty()){ gr.setGroupId(Long.parseLong(req.getParameter("groupId"))); } } gr.setCurator(req.getParameter("curator").trim()); gr.setGroupName(req.getParameter("groupName").trim()); gr.setSpeciality(req.getParameter("speciality").trim()); return gr; } private synchronized void insertGroups(HttpServletRequest req) throws ParseException{ Groups gr = prepareGroups(req); msg.insertGroup(gr); } private synchronized void updateGroups(HttpServletRequest req) throws ParseException{ Groups gr = prepareGroups(req); msg.updateGroup(gr); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub processRequest(req, resp);
}
@Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub processRequest(req, resp);
}
}
|
код: http://narod.ru/disk/24138759000/StuffTest.zip.html. хотелось бы понять где я что-то пропускаю... делеал в эклипсе. ссылка на работающее, но недоделанное приложение: http://www.studentstufftest.appspot.com/Это сообщение отредактировал(а) dim9999 - 27.8.2010, 02:51
|