cancel
Showing results for 
Search instead for 
Did you mean: 

Hibernate session.save() Error

Former Member
0 Kudos

Hi,

We are migrating from Websphere to SAP WEB AS 6.40.

Our application has 2 EAR files.One for Server components(like EJBs)and other is WEB application which refers to EJBs.

Now while deploying EJBs EAR, from logger it seens that Hibernate POJO mapping is succcessful.

But at first insert in database from our web application using,

[code]Session session = getCurrentSession();

Object ret = session.save(mypojo);[/code]

we got following Exception :

[code]2006-07-13 17:39:50,859 DEBUG [org.hibernate.impl.SessionImpl] - closing session

2006-07-13 17:39:50,859 DEBUG [org.hibernate.jdbc.ConnectionManager] - closing JDBC connection [ (open PreparedStatements: 1, globally: 1) (open ResultSets: 0, globally: 0)]

2006-07-13 17:39:50,859 DEBUG [org.hibernate.jdbc.JDBCContext] - after transaction completion

2006-07-13 17:39:50,859 DEBUG [org.hibernate.impl.SessionImpl] - after transaction completion

2006-07-13 17:39:50,968 ERROR [com.tdemand.server.service.security.impl.SecurityServiceImpl] - com.sap.engine.services.ejb.exceptions.BaseRemoteException: Exception in method authenticate.

at com.tdemand.ejbs.security.SecurityMgrObjectImpl40.authenticate(SecurityMgrObjectImpl40.java:836)

at com.tdemand.ejbs.security.SecurityMgr_Stub.authenticate(SecurityMgr_Stub.java:585)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:324)

at com.sap.engine.services.ejb.session.stateless_sp5.ObjectStubProxyImpl.invoke(ObjectStubProxyImpl.java:187)

at $Proxy167.authenticate(Unknown Source)

at com.tdemand.server.service.security.impl.SecurityServiceImpl.authenticate(SecurityServiceImpl.java:85)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:324)

at org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:388)

at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:283)

at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:323)

at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)

at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)

at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)

at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:453)

at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281)

at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)

at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)

at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.runServlet(HttpHandlerImpl.java:385)

at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.handleRequest(HttpHandlerImpl.java:263)

at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:340)

at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:318)

at com.sap.engine.services.httpserver.server.RequestAnalizer.invokeWebContainer(RequestAnalizer.java:821)

at com.sap.engine.services.httpserver.server.RequestAnalizer.handle(RequestAnalizer.java:239)

at com.sap.engine.services.httpserver.server.Client.handle(Client.java:92)

at com.sap.engine.services.httpserver.server.Processor.request(Processor.java:147)

at com.sap.engine.core.service630.context.cluster.session.ApplicationSessionMessageListener.process(ApplicationSessionMessageListener.java:37)

at com.sap.engine.core.cluster.impl6.session.UnorderedChannel$MessageRunner.run(UnorderedChannel.java:71)

at com.sap.engine.core.thread.impl3.ActionObject.run(ActionObject.java:37)

at java.security.AccessController.doPrivileged(Native Method)

at com.sap.engine.core.thread.impl3.SingleThread.execute(SingleThread.java:94)

at com.sap.engine.core.thread.impl3.SingleThread.run(SingleThread.java:162)

Caused by: java.lang.AbstractMethodError: com.sap.engine.services.dbpool.cci.ConnectionHandle.prepareStatement(Ljava/lang/String;I)Ljava/sql/PreparedStatement;

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:324)

at org.hibernate.util.GetGeneratedKeysHelper.prepareStatement(GetGeneratedKeysHelper.java:39)

at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:389)

at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:76)

at org.hibernate.persister.entity.BasicEntityPersister.insert(BasicEntityPersister.java:1739)

at org.hibernate.persister.entity.BasicEntityPersister.insert(BasicEntityPersister.java:2178)

at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:34)

at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:239)

at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:240)

at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:160)

at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:95)

at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:184)

at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)

at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:173)

at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)

at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:69)

at org.hibernate.impl.SessionImpl.save(SessionImpl.java:481)

at org.hibernate.impl.SessionImpl.save(SessionImpl.java:476)

at com.tdemand.server.persistent.hibernate.dao.SecurityDAOImpl.createUserSession(SecurityDAOImpl.java:308)

at com.tdemand.ejbs.security.SecurityMgrBean.newSession(SecurityMgrBean.java:707)

at com.tdemand.ejbs.security.SecurityMgrBean.createSession(SecurityMgrBean.java:626)

at com.tdemand.ejbs.security.SecurityMgrBean.authenticate(SecurityMgrBean.java:200)

at com.tdemand.ejbs.security.SecurityMgrObjectImpl40.authenticate(SecurityMgrObjectImpl40.java:818)

... 38 more

; nested exception is:

java.lang.AbstractMethodError: com.sap.engine.services.dbpool.cci.ConnectionHandle.prepareStatement(Ljava/lang/String;I)Ljava/sql/PreparedStatement;

java.rmi.RemoteException: com.sap.engine.services.ejb.exceptions.BaseRemoteException: Exception in method authenticate.

at com.tdemand.ejbs.security.SecurityMgrObjectImpl40.authenticate(SecurityMgrObjectImpl40.java:836)

at com.tdemand.ejbs.security.SecurityMgr_Stub.authenticate(SecurityMgr_Stub.java:585)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:324)

at com.sap.engine.services.ejb.session.stateless_sp5.ObjectStubProxyImpl.invoke(ObjectStubProxyImpl.java:187)

at $Proxy167.authenticate(Unknown Source)

at com.tdemand.server.service.security.impl.SecurityServiceImpl.authenticate(SecurityServiceImpl.java:85)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:324)

at org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:388)

at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:283)

at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:323)

at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)

at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)

at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)

at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:453)

at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281)

at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)

at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)

at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.runServlet(HttpHandlerImpl.java:385)

at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.handleRequest(HttpHandlerImpl.java:263)

at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:340)

at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:318)

at com.sap.engine.services.httpserver.server.RequestAnalizer.invokeWebContainer(RequestAnalizer.java:821)

at com.sap.engine.services.httpserver.server.RequestAnalizer.handle(RequestAnalizer.java:239)

at com.sap.engine.services.httpserver.server.Client.handle(Client.java:92)

at com.sap.engine.services.httpserver.server.Processor.request(Processor.java:147)

at com.sap.engine.core.service630.context.cluster.session.ApplicationSessionMessageListener.process(ApplicationSessionMessageListener.java:37)

at com.sap.engine.core.cluster.impl6.session.UnorderedChannel$MessageRunner.run(UnorderedChannel.java:71)

at com.sap.engine.core.thread.impl3.ActionObject.run(ActionObject.java:37)

at java.security.AccessController.doPrivileged(Native Method)

at com.sap.engine.core.thread.impl3.SingleThread.execute(SingleThread.java:94)

at com.sap.engine.core.thread.impl3.SingleThread.run(SingleThread.java:162)

Caused by: java.lang.AbstractMethodError: com.sap.engine.services.dbpool.cci.ConnectionHandle.prepareStatement(Ljava/lang/String;I)Ljava/sql/PreparedStatement;

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:324)

at org.hibernate.util.GetGeneratedKeysHelper.prepareStatement(GetGeneratedKeysHelper.java:39)

at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:389)

at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:76)

at org.hibernate.persister.entity.BasicEntityPersister.insert(BasicEntityPersister.java:1739)

at org.hibernate.persister.entity.BasicEntityPersister.insert(BasicEntityPersister.java:2178)

at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:34)

at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:239)

at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:240)

at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:160)

at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:95)

at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:184)

at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)

at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:173)

at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)

at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:69)

at org.hibernate.impl.SessionImpl.save(SessionImpl.java:481)

at org.hibernate.impl.SessionImpl.save(SessionImpl.java:476)

at com.tdemand.server.persistent.hibernate.dao.SecurityDAOImpl.createUserSession(SecurityDAOImpl.java:308)

at com.tdemand.ejbs.security.SecurityMgrBean.newSession(SecurityMgrBean.java:707)

at com.tdemand.ejbs.security.SecurityMgrBean.createSession(SecurityMgrBean.java:626)

at com.tdemand.ejbs.security.SecurityMgrBean.authenticate(SecurityMgrBean.java:200)

at com.tdemand.ejbs.security.SecurityMgrObjectImpl40.authenticate(SecurityMgrObjectImpl40.java:818)

... 38 more[/code]

Before this insert, one select query is executing successfully. So i don't think that our Hibernate framework is not set properly.

Plz Help.

Regards,

Sagar.

Accepted Solutions (0)

Answers (2)

Answers (2)

Former Member
0 Kudos

Hi,

I solved the problem.

Its bcoz of JDBC and Hibernate version mismatch.

set property <b>hibernate.jdbc.use_get_generated_keys = false</b> in hibernate.cfg.xml file.

The reason is : hibernate.jdbc.use_get_generated_keys property enable use of JDBC3 PreparedStatement.getGeneratedKeys() to retrieve natively generated keys after insert.It requires JDBC3+ driver and JRE1.4+, set to false if your driver has problems with the Hibernate identifier generators. By default, tries to determine the driver capabilites using connection metadata.

We were using JDBC2.0 and jdk1.4+. so after setting this proprty "false" and it worked.

Hope this will help others !

Regards,

Sagar Powar.

Former Member
0 Kudos

Dear Sagar,

Can you please explain how is the DB connection happening. Is it through Datasource lookup?

Pls paste the code of save() method.

regards,

Sujesh

Former Member
0 Kudos

Hi Sujesh,

Thanx again for immediate reply !

We are using Datasource for DB connection.

<b>session.save(mypojo)</b> method is Hibernate session's method.

We are using code as,

TdSession tdsess = new TdSession(); //Pojo class 
          toTdSession(userSess, tdsess);  // set new values in pojo class
          Session session = getCurrentSession(); // get Hibernate session
          <b>Object ret = session.save(tdsess);  </b> //Save POJO to DB

We are using Hibernate 3.0.5 and jdk1.4.2_7 and SAP Web Application server 6.40 (SAP Web AS 6.40)

<b>Explanation:</b> from stack trace it seems that,

com.sap.engine.services.dbpool.cci.ConnectionHandle is class in SAP Web AS(dbpool.jar), which implements java interface ConnectionHandle. So it implements overloaded method prepareStatement

public PreparedStatement prepareStatement(String sql)  // 1 parameter 
	     public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency) // 3 params

But problem is, org.hibernate.util.GetGeneratedKeysHelper calls prepareStatement (String, int) method which is not implemented by ConnectionHandle class of SAp Web AS .

Kindly help. Any suggestions are most welcomed.