From: Przemek M. Zawada on 1 Aug 2010 22:13 Hello, I've been looking for nice database I/O way and I've decided to use (suggested by NetBeans) the EJB. In fact, I was looking for something, which would speed up my work, unfortunately I'm stuck for last 4 hours with annoying update database problem. Fetching data from database works perfectly. BUT, when I'm trying to update records, I no changes are made in the database. I wish you'll help me finding the reason. As it has been described in many, many google-found pages, I've build an object, which I use as entity manager. Sample: @Stateless @TransactionManagement(TransactionManagementType.CONTAINER) public class UserManager { @PersistenceContext(unitName="MyDbPU") private EntityManager em; @Resource SessionContext context; @EJB private CupUserFacade userFacade; // Dunno whether it's required? public int UpdateUser() { EntityManagerFactory emf = Persistence.createEntityManagerFactory("MyDbPU"); em = emf.createEntityManager(); CupUser user = (CupUser) em.find(CupUser.class, 2); user.setName("fonk you"); try { CupUser upUser = em.merge(user); System.err.println(upUser.getName()); em.close(); return 1; } catch (Exception ex) { System.err.println( "UserManager.UpdateUser(): " + ex.getMessage()); return 0; } } @PersistenceContext public void setEntityManager(EntityManager eman) { this.em = eman; } } The log file sayz: FINEST: Execute query ReadObjectQuery(referenceClass=CupUser sql="SELECT .... FROM cup_user WHERE (ID = ?)") SEVERE: fonk you FINEST: Merge clone with references entity.CupUser[id=2] SEVERE: true // is open() EntityManager FINER: release unit of work In fact it does not say anything about updating queries... That's annoying, because I really don't know what am I doing wrong. Please help. Thank you very much. Przemek M. Zawada
From: Arved Sandstrom on 2 Aug 2010 15:31 Przemek M. Zawada wrote: > Hello, > > I've been looking for nice database I/O way and I've decided to use > (suggested by NetBeans) the EJB. > > In fact, I was looking for something, which would speed up my work, > unfortunately I'm stuck for last 4 hours with annoying update database > problem. > > Fetching data from database works perfectly. BUT, when I'm trying to > update records, I no changes are made in the database. I wish you'll > help me finding the reason. > > As it has been described in many, many google-found pages, I've build an > object, which I use as entity manager. Sample: > > @Stateless > @TransactionManagement(TransactionManagementType.CONTAINER) > public class UserManager { > > @PersistenceContext(unitName="MyDbPU") > private EntityManager em; > @Resource > SessionContext context; > @EJB > private CupUserFacade userFacade; // Dunno whether it's required? > > public int UpdateUser() { > EntityManagerFactory emf = > Persistence.createEntityManagerFactory("MyDbPU"); > > em = emf.createEntityManager(); > CupUser user = (CupUser) em.find(CupUser.class, 2); > user.setName("fonk you"); > try { > CupUser upUser = em.merge(user); > System.err.println(upUser.getName()); > em.close(); > > return 1; > } catch (Exception ex) { > System.err.println( > "UserManager.UpdateUser(): " > + ex.getMessage()); > return 0; > > } > } > > @PersistenceContext > public void setEntityManager(EntityManager eman) { > this.em = eman; > } > } > > The log file sayz: > > FINEST: Execute query ReadObjectQuery(referenceClass=CupUser sql="SELECT > ... FROM cup_user WHERE (ID = ?)") > SEVERE: fonk you > FINEST: Merge clone with references entity.CupUser[id=2] > SEVERE: true // is open() EntityManager > FINER: release unit of work > > In fact it does not say anything about updating queries... > That's annoying, because I really don't know what am I doing wrong. > > Please help. Thank you very much. > > Przemek M. Zawada Hi, Przemek You've got a bit too much going on here at one. For starters, decide whether you are going to use @PersistenceUnit *or* @PersistenceContext *or* Persistence.createEntityManagerFactory().createEntityManager() to obtain your entity managers. Container-managed will be one of the first 2 choices; application-managed is the third. I strongly recommend reading http://download.oracle.com/javaee/6/tutorial/doc/bnbqw.html. As an aside, note that inside a transactional boundary em.find() will returned a managed entity - there is no need to then merge it. Again, I recommend that you read the above link; however, depending on your scenario either the container will take care of transactions for you (with container-managed EMs), or you will, by either using the EntityTransaction or UserTransaction APIs. In this case you had an application-managed EM but no transaction...hence no update. AHS -- Give a man a fish, and he can eat for a day. But teach a man how to fish, and he'll be dead of mercury poisoning inside of three years. --Charles Haas
From: pmz on 3 Aug 2010 07:47 On 2 Sie, 21:31, Arved Sandstrom <dces...(a)hotmail.com> wrote: > Przemek M. Zawada wrote: > > Hello, > > > I've been looking for nice database I/O way and I've decided to use > > (suggested by NetBeans) the EJB. > > > In fact, I was looking for something, which would speed up my work, > > unfortunately I'm stuck for last 4 hours with annoying update database > > problem. > > > Fetching data from database works perfectly. BUT, when I'm trying to > > update records, I no changes are made in the database. I wish you'll > > help me finding the reason. > > > As it has been described in many, many google-found pages, I've build an > > object, which I use as entity manager. Sample: > > > @Stateless > > @TransactionManagement(TransactionManagementType.CONTAINER) > > public class UserManager { > > > @PersistenceContext(unitName="MyDbPU") > > private EntityManager em; > > @Resource > > SessionContext context; > > @EJB > > private CupUserFacade userFacade; // Dunno whether it's required? > > > public int UpdateUser() { > > EntityManagerFactory emf = > > Persistence.createEntityManagerFactory("MyDbPU"); > > > em = emf.createEntityManager(); > > CupUser user = (CupUser) em.find(CupUser.class, 2); > > user.setName("fonk you"); > > try { > > CupUser upUser = em.merge(user); > > System.err.println(upUser.getName()); > > em.close(); > > > return 1; > > } catch (Exception ex) { > > System.err.println( > > "UserManager.UpdateUser(): " > > + ex.getMessage()); > > return 0; > > > } > > } > > > @PersistenceContext > > public void setEntityManager(EntityManager eman) { > > this.em = eman; > > } > > } > > > The log file sayz: > > > FINEST: Execute query ReadObjectQuery(referenceClass=CupUser sql="SELECT > > ... FROM cup_user WHERE (ID = ?)") > > SEVERE: fonk you > > FINEST: Merge clone with references entity.CupUser[id=2] > > SEVERE: true // is open() EntityManager > > FINER: release unit of work > > > In fact it does not say anything about updating queries... > > That's annoying, because I really don't know what am I doing wrong. > > > Please help. Thank you very much. > > > Przemek M. Zawada > > Hi, Przemek > > You've got a bit too much going on here at one. For starters, decide > whether you are going to use @PersistenceUnit *or* @PersistenceContext > *or* Persistence.createEntityManagerFactory().createEntityManager() to > obtain your entity managers. Container-managed will be one of the first > 2 choices; application-managed is the third. > > I strongly recommend readinghttp://download.oracle.com/javaee/6/tutorial/doc/bnbqw.html. > > As an aside, note that inside a transactional boundary em.find() will > returned a managed entity - there is no need to then merge it. Again, I > recommend that you read the above link; however, depending on your > scenario either the container will take care of transactions for you > (with container-managed EMs), or you will, by either using the > EntityTransaction or UserTransaction APIs. In this case you had an > application-managed EM but no transaction...hence no update. > > AHS > > -- > Give a man a fish, and he can eat for a day. But teach a man how to > fish, and he'll be dead of mercury poisoning inside of three years. > --Charles Haas Thank you for your time! Yeah, I've discovered that I've mixed all of everything, very stupid. I've been instructed to try such solution: @Stateless public class UserManager { .... @PersistenceContext(unitName = "RallySuitePU") private EntityManager em; .... void Update() { System.err.println("em.find() start"); CupUser user = (CupUser) em.find(CupUser.class, 2); /// Crashed here with NullPointerException, of course user.setUserType(User_Type); user.setUserName("New Username Here"); System.err.println("UpdateUser.END"); } Obviously my em is NullPointer - why it has not been initialized? Or how should I do it? All the best, Przemek M. Zawada
From: pmz on 3 Aug 2010 08:29 On 3 Sie, 13:47, pmz <przemek.zaw...(a)gmail.com> wrote: > On 2 Sie, 21:31, Arved Sandstrom <dces...(a)hotmail.com> wrote: > > > > > > > Przemek M. Zawada wrote: > > > Hello, > > > > I've been looking for nice database I/O way and I've decided to use > > > (suggested by NetBeans) the EJB. > > > > In fact, I was looking for something, which would speed up my work, > > > unfortunately I'm stuck for last 4 hours with annoying update database > > > problem. > > > > Fetching data from database works perfectly. BUT, when I'm trying to > > > update records, I no changes are made in the database. I wish you'll > > > help me finding the reason. > > > > As it has been described in many, many google-found pages, I've build an > > > object, which I use as entity manager. Sample: > > > > @Stateless > > > @TransactionManagement(TransactionManagementType.CONTAINER) > > > public class UserManager { > > > > @PersistenceContext(unitName="MyDbPU") > > > private EntityManager em; > > > @Resource > > > SessionContext context; > > > @EJB > > > private CupUserFacade userFacade; // Dunno whether it's required? > > > > public int UpdateUser() { > > > EntityManagerFactory emf = > > > Persistence.createEntityManagerFactory("MyDbPU"); > > > > em = emf.createEntityManager(); > > > CupUser user = (CupUser) em.find(CupUser.class, 2); > > > user.setName("fonk you"); > > > try { > > > CupUser upUser = em.merge(user); > > > System.err.println(upUser.getName()); > > > em.close(); > > > > return 1; > > > } catch (Exception ex) { > > > System.err.println( > > > "UserManager.UpdateUser(): " > > > + ex.getMessage()); > > > return 0; > > > > } > > > } > > > > @PersistenceContext > > > public void setEntityManager(EntityManager eman) { > > > this.em = eman; > > > } > > > } > > > > The log file sayz: > > > > FINEST: Execute query ReadObjectQuery(referenceClass=CupUser sql="SELECT > > > ... FROM cup_user WHERE (ID = ?)") > > > SEVERE: fonk you > > > FINEST: Merge clone with references entity.CupUser[id=2] > > > SEVERE: true // is open() EntityManager > > > FINER: release unit of work > > > > In fact it does not say anything about updating queries... > > > That's annoying, because I really don't know what am I doing wrong. > > > > Please help. Thank you very much. > > > > Przemek M. Zawada > > > Hi, Przemek > > > You've got a bit too much going on here at one. For starters, decide > > whether you are going to use @PersistenceUnit *or* @PersistenceContext > > *or* Persistence.createEntityManagerFactory().createEntityManager() to > > obtain your entity managers. Container-managed will be one of the first > > 2 choices; application-managed is the third. > > > I strongly recommend readinghttp://download.oracle.com/javaee/6/tutorial/doc/bnbqw.html. > > > As an aside, note that inside a transactional boundary em.find() will > > returned a managed entity - there is no need to then merge it. Again, I > > recommend that you read the above link; however, depending on your > > scenario either the container will take care of transactions for you > > (with container-managed EMs), or you will, by either using the > > EntityTransaction or UserTransaction APIs. In this case you had an > > application-managed EM but no transaction...hence no update. > > > AHS > > > -- > > Give a man a fish, and he can eat for a day. But teach a man how to > > fish, and he'll be dead of mercury poisoning inside of three years. > > --Charles Haas > > Thank you for your time! Yeah, I've discovered that I've mixed all of > everything, very stupid. I've been instructed to try such solution: > > @Stateless > public class UserManager { > ... > @PersistenceContext(unitName = "RallySuitePU") > private EntityManager em; > ... > void Update() { > System.err.println("em.find() start"); > CupUser user = (CupUser) em.find(CupUser.class, 2); /// Crashed here > with NullPointerException, of course > user.setUserType(User_Type); > user.setUserName("New Username Here"); > System.err.println("UpdateUser.END"); > > } > > Obviously my em is NullPointer - why it has not been initialized? Or > how should I do it? > > All the best, > Przemek M. Zawada Okay, I've managed where the problem is. I'm not sure whether it's allowed to do (what I've done) in servlet part, but for tests I've allowed myself to do it. I've add in the servlet elements: @PersistenceContext(unitName = "RallySuitePU") private EntityManager em; @Resource UserTransaction ut; and in the doPost section, I've made such test: ut.begin(); CupUser u = (CupUser) em.find(CupUser.class, Integer.parseInt(request.getParameter("userId"))); u.setUserEmail("fonkyou!"); em.merge(u); ut.commit(); The row has been updated (in the database), with such log message: FINER: TX binding to tx mgr, status=STATUS_ACTIVE FINEST: Execute query ReadObjectQuery(referenceClass=CupUser sql="SELECT ID, IsActive, User_IsLocked, User_Contact, User_Mobile, User_Password, User_Name, User_ReminderCode, User_Email, User_FullName, User_LastLogin, User_Type FROM cup_user WHERE (ID = ?)") FINER: TX beforeCompletion callback, status=STATUS_ACTIVE FINER: begin unit of work commit FINER: TX afterCompletion callback, status=COMMITTED FINER: end unit of work commit FINER: release unit of work FINER: client released Unfortunately, I have some problems with data preview - in the browse page I have the old data (e-mail value is i.e. old_value) but when I view it as another page (edit-mode), the e-mail value is valid, new one "fonkyou". About what I'm missing? Any refresh/reload/etc. methods? All the best, Przemek M. Zawada
From: Lew on 3 Aug 2010 09:08 Trim your posts. Don't quote sigs. pmz wrote: > ut.begin(); > CupUser u = (CupUser) em.find(CupUser.class, > Integer.parseInt(request.getParameter("userId"))); > u.setUserEmail("fonkyou!"); > em.merge(u); You ignored Arved's advice that this 'merge()' is unnecessary, I see. > ut.commit(); > > The row has been updated (in the database), with such log message: > ... > > Unfortunately, I have some problems with data preview - in the browse > page I have the old data (e-mail value is i.e. old_value) but when I Apparently you didn't refresh the view. > view it as another page (edit-mode), the e-mail value is valid, new > one "fonkyou". About what I'm missing? Any refresh/reload/etc. > methods? Yeah, the browser "submit" should cause the server to regen the page with the updated values. -- Lew
|
Next
|
Last
Pages: 1 2 Prev: Windows On Screen Keyboard problem with serial port? Next: Reg exp question |