-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 11 posts ] 
Author Message
 Post subject: Transaction deadlock exception during session.refresh call.
PostPosted: Tue Feb 08, 2005 6:30 am 
Newbie

Joined: Tue Feb 08, 2005 4:16 am
Posts: 14
Read the rules before posting!
http://www.hibernate.org/ForumMailingli ... AskForHelp

Hi!!

I sometimes get the following exception: "Transaction (Process ID 63) was deadlocked..." (full stack trace below), when running the attached code.
This is the only code that touch the specific db table.

The reason (so I'm told by the original writers) for the call to refresh is some weird behaviour of Oracle when saving CLOB's and BLOB's (I guess they try to lock something for the duration of the blob load?)- This is probably the reason for the exception - but why.
Do you know of a problem in saving CLOB's/BLOB's in oracle?
Do you know of a better way to run this "save" code?

Sorry I can't be more specific as to the exact reason for the call to "flush" and the call to "refresh" ...

Thanks
Yariv Snapir

Hibernate version:
2.0

Mapping documents:

Code between sessionFactory.openSession() and session.close():
Code:
public static GeneratedImage saveImage(String name, byte[] imageData) {
        Transaction tx = session.beginTransaction();
        GeneratedImage image = new GeneratedImage();
        image.setImageData(new byte[] {0x00});
        image.setName(name);
        session.save(image);
        session.flush();
        session.refresh(image, net.sf.hibernate.LockMode.UPGRADE);
        image.setImageData(imageData);
        tx.commit();
        return image;
    }

  /**
   * Load a GeneratedImage from DB and then deletes it (each image is used once - I think).
   * @param imageName - the image to be loaded from DB and deleted after.
   * @return Loaded image.
   */
    public static GeneratedImage loadAndDeleteImage(String imageName){
        Transaction tx = session.beginTransaction();
        Query query = session.getNamedQuery("GeneratedImage.getByName");
        query.setString("name", imageName);
        GeneratedImage image = (GeneratedImage)query.list().get(0);
        tx.commit();
        return image;
    }

Full stack trace of any exception that occurs:
java.sql.SQLException: Transaction (Process ID 63) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
at net.sourceforge.jtds.jdbc.SqlMessage.toSQLException(SqlMessage.java:392)
at net.sourceforge.jtds.jdbc.SQLWarningChain.addOrReturn(SQLWarningChain.java:99)
at net.sourceforge.jtds.jdbc.Tds.fetchRow(Tds.java:3722)
at net.sourceforge.jtds.jdbc.TdsResultSet.fetchNextRow(TdsResultSet.java:432)
at net.sourceforge.jtds.jdbc.TdsResultSet.internalFetchRows(TdsResultSet.java:765)
at net.sourceforge.jtds.jdbc.TdsResultSet.haveMoreResults(TdsResultSet.java:747)
at net.sourceforge.jtds.jdbc.TdsResultSet.next(TdsResultSet.java:391)
at org.jboss.resource.adapter.jdbc.WrappedResultSet.next(WrappedResultSet.java:530)
at net.sf.hibernate.loader.Loader.doQuery(Loader.java:200)
at net.sf.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:133)
at net.sf.hibernate.loader.Loader.loadEntity(Loader.java:836)
at net.sf.hibernate.loader.Loader.loadEntity(Loader.java:856)
at net.sf.hibernate.loader.SimpleEntityLoader.load(SimpleEntityLoader.java:58)
at net.sf.hibernate.persister.EntityPersister.load(EntityPersister.java:419)
at net.sf.hibernate.impl.SessionImpl.refresh(SessionImpl.java:2172)
at com.mercury.dashboard.arch.hibernate.Transaction.refresh(Transaction.java:108)
at com.mercury.dashboard.model.portlet.GeneratedImage.saveImage(GeneratedImage.java:78)
at com.mercury.dashboard.app.portlet.chart.ChartPortletController.saveImage(ChartPortletController.java:227)
at com.mercury.dashboard.app.portlet.chart.ChartPortletController.renderChart(ChartPortletController.java:96)
at org.apache.jsp.app.portlet.ChartPortlet_jsp._jspService(ChartPortlet_jsp.java:319)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:703)
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:589)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:499)
at org.apache.pluto.core.impl.PortletRequestDispatcherImpl.include(PortletRequestDispatcherImpl.java:46)
at com.mercury.dashboard.app.portlet.BuilderPortlet.doView(BuilderPortlet.java:138)
at javax.portlet.GenericPortlet.doDispatch(GenericPortlet.java:250)
at javax.portlet.GenericPortlet.render(GenericPortlet.java:178)
at com.mercury.dashboard.app.portlet.DashboardPortlet.render(DashboardPortlet.java:46)
at org.apache.pluto.core.PortletServlet.dispatch(PortletServlet.java:240)
at org.apache.pluto.core.PortletServlet.doGet(PortletServlet.java:179)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:697)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
at org.apache.pluto.core.PortletServlet.service(PortletServlet.java:174)
at com.mercury.dashboard.app.portal.PortletWrapperServlet.service(PortletWrapperServlet.java:95)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:703)
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:589)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:499)
at org.apache.pluto.invoker.impl.PortletInvokerImpl.invoke(PortletInvokerImpl.java:121)
at org.apache.pluto.invoker.impl.PortletInvokerImpl.render(PortletInvokerImpl.java:73)
at org.apache.pluto.PortletContainerImpl.renderPortlet(PortletContainerImpl.java:109)
at com.mercury.dashboard.app.portal.PortletManager.service(PortletManager.java:179)
at com.mercury.dashboard.app.portal.PortalServlet.service(PortalServlet.java:108)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:703)
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:589)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:499)
at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:966)
at org.apache.jsp.app.portal.PortletFrame_jsp._jspService(PortletFrame_jsp.java:463)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:703)
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:589)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:499)
at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:966)
at org.apache.jsp.app.portal.PageView_jsp._jspService(PageView_jsp.java:508)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:703)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:463)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:398)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312)
at com.mercury.dashboard.arch.host.util.DashboardFilterServlet.service(DashboardFilterServlet.java:108)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:703)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:463)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:398)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312)
at com.mercury.dashboard.arch.host.DashboardServlet.service(DashboardServlet.java:247)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at com.mercury.dashboard.arch.host.MultipartRequestFilter.applyFilter(MultipartRequestFilter.java:63)
at com.mercury.dashboard.arch.host.BaseFilter.doFilter(BaseFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at com.mercury.mycenter.authentication.MyCenterAuthenticationFilter.doFilter(MyCenterAuthenticationFilter.java:84)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:72)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.jboss.web.tomcat.security.JBossSecurityMgrRealm.invoke(JBossSecurityMgrRealm.java:275)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:534)
Name and version of the database you are using:
MSSQLServer 2000
The generated SQL (show_sql=true):
Can't reproduce with generated SQL - sinchronization problem
Debug level Hibernate log excerpt:


Top
 Profile  
 
 Post subject:
PostPosted: Tue Feb 08, 2005 7:36 am 
CGLIB Developer
CGLIB Developer

Joined: Thu Aug 28, 2003 1:44 pm
Posts: 1217
Location: Vilnius, Lithuania
"session" is a static field, is not it ? Probably it will work if you will synchronize all methods, but it must be better to open a new session per thread.


Top
 Profile  
 
 Post subject: Transaction deadlock exception during session.refresh call.
PostPosted: Tue Feb 08, 2005 8:32 am 
Newbie

Joined: Tue Feb 08, 2005 4:16 am
Posts: 14
baliukas wrote:
"session" is a static field, is not it ? Probably it will work if you will synchronize all methods, but it must be better to open a new session per thread.


My sessions are opened per thread - this specific session was taken from a ThreadLocal.

I prefare Not to synchronize unless I have too since this concerns loading and saving of blobs (which is a lonk task) and synchronization will cause response time to decrease.

Thanks


Top
 Profile  
 
 Post subject:
PostPosted: Tue Feb 08, 2005 9:28 am 
jTDS Developer
jTDS Developer

Joined: Tue Feb 24, 2004 5:36 pm
Posts: 70
Location: Bucharest, Romania
Yariv,

You seem to be using a very old version of jTDS. Old jTDS versions used multiple DB connections to implement statement concurrency. This was a pretty bad solution, as it could lead to deadlocks on a single Connection object -- this should never happen.

Since 0.8 jTDS was rewritten and now a single DB connection is used by each Connection. Get the latest version of jTDS (and Hibernate, I see you're using 2.0) and it should work.

Alin,
The jTDS Project.


Top
 Profile  
 
 Post subject: Re: Transaction deadlock exception during session.refresh ca
PostPosted: Tue Feb 08, 2005 11:26 am 
CGLIB Developer
CGLIB Developer

Joined: Thu Aug 28, 2003 1:44 pm
Posts: 1217
Location: Vilnius, Lithuania
yariv.snapir wrote:
My sessions are opened per thread - this specific session was taken from a ThreadLocal.


Probably a new driver version can help, but I see no threadlocals in this code. Is "session" object a thread safe wrapper itself ?

Quote:
public static GeneratedImage loadAndDeleteImage(String imageName){
Transaction tx = session.beginTransaction();
Query query = session.getNamedQuery("GeneratedImage.getByName");
query.setString("name", imageName);
GeneratedImage image = (GeneratedImage)query.list().get(0);
tx.commit();
return image;
}


Top
 Profile  
 
 Post subject:
PostPosted: Tue Feb 08, 2005 11:54 am 
jTDS Developer
jTDS Developer

Joined: Tue Feb 24, 2004 5:36 pm
Posts: 70
Location: Bucharest, Romania
The way I see it this issue has nothing to do with Hibernate. A Session object sits on top of a JDBC Connection object and, with old jTDS versions, that Connection object sits on top of a number of TCP/IP DB connections. So if you run two different statements (successively, but don't close the first one) on the same Connection/Session you can have a deadlock.

Alin.


Top
 Profile  
 
 Post subject: Re: Transaction deadlock exception during session.refresh ca
PostPosted: Wed Feb 09, 2005 2:16 am 
Newbie

Joined: Tue Feb 08, 2005 4:16 am
Posts: 14
baliukas wrote:
yariv.snapir wrote:
My sessions are opened per thread - this specific session was taken from a ThreadLocal.


Probably a new driver version can help, but I see no threadlocals in this code. Is "session" object a thread safe wrapper itself ?

Quote:
public static GeneratedImage loadAndDeleteImage(String imageName){
Transaction tx = session.beginTransaction();
Query query = session.getNamedQuery("GeneratedImage.getByName");
query.setString("name", imageName);
GeneratedImage image = (GeneratedImage)query.list().get(0);
tx.commit();
return image;
}


Hi!

Thanks to all repliers!!

I may have embalished the code somewhat to make it more readable so that's why the session seem not to be thread safe - IT IS!!

The original code gets the session from a ThreadLocal and that is the session used - its not a "session used in two threads" problem!!


I'll check the new driver version - that looks promising.

Thanks again

Yariv Snapir


Top
 Profile  
 
 Post subject:
PostPosted: Thu Feb 10, 2005 8:45 am 
Newbie

Joined: Tue Feb 08, 2005 4:16 am
Posts: 14
alin_sinpalean wrote:
The way I see it this issue has nothing to do with Hibernate. A Session object sits on top of a JDBC Connection object and, with old jTDS versions, that Connection object sits on top of a number of TCP/IP DB connections. So if you run two different statements (successively, but don't close the first one) on the same Connection/Session you can have a deadlock.

Alin.


Hi!!

I tried running with new version of jTDS (jtds-1.0.jar - is that the last one?) and the problem did not go away, any other ideas?

Thanks


Top
 Profile  
 
 Post subject:
PostPosted: Fri Feb 11, 2005 5:21 am 
jTDS Developer
jTDS Developer

Joined: Tue Feb 24, 2004 5:36 pm
Posts: 70
Location: Bucharest, Romania
I'm sorry to hear that. I thought I was onto something. Just to be sure, what is the new stack trace?

Alin.


Top
 Profile  
 
 Post subject: Transaction deadlock exception during session.refresh call
PostPosted: Sun Feb 13, 2005 2:54 am 
Newbie

Joined: Tue Feb 08, 2005 4:16 am
Posts: 14
alin_sinpalean wrote:
I'm sorry to hear that. I thought I was onto something. Just to be sure, what is the new stack trace?

Alin.


Hi!!

The new stack trace is added below. Just to add a clarification though - the code I attached to the original problem description is a suggestion for a workaround in case of an Oracle DB I found in an article (http://www.hibernate.org/56.html). I guessed it should also work for other DB's but maybe the solution will be to separate the implementations...

Yariv

The stack trace:
2005-02-07 18:05:36,504 WARN [net.sf.hibernate.util.JDBCExceptionReporter] SQL Error: 1205, SQLState: 40001
2005-02-07 18:05:36,504 ERROR [net.sf.hibernate.util.JDBCExceptionReporter] Transaction (Process ID 63) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
2005-02-07 18:05:36,504 WARN [net.sf.hibernate.util.JDBCExceptionReporter] SQL Error: 1205, SQLState: 40001
2005-02-07 18:05:36,504 ERROR [net.sf.hibernate.util.JDBCExceptionReporter] Transaction (Process ID 63) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
2005-02-07 18:05:36,504 ERROR [net.sf.hibernate.util.JDBCExceptionReporter] could not load: [com.mercury.dashboard.model.portlet.GeneratedImage#2621441]
java.sql.SQLException: Transaction (Process ID 63) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
at net.sourceforge.jtds.jdbc.SqlMessage.toSQLException(SqlMessage.java:392)
at net.sourceforge.jtds.jdbc.SQLWarningChain.addOrReturn(SQLWarningChain.java:99)
at net.sourceforge.jtds.jdbc.Tds.fetchRow(Tds.java:3722)
at net.sourceforge.jtds.jdbc.TdsResultSet.fetchNextRow(TdsResultSet.java:432)
at net.sourceforge.jtds.jdbc.TdsResultSet.internalFetchRows(TdsResultSet.java:765)
at net.sourceforge.jtds.jdbc.TdsResultSet.haveMoreResults(TdsResultSet.java:747)
at net.sourceforge.jtds.jdbc.TdsResultSet.next(TdsResultSet.java:391)
at org.jboss.resource.adapter.jdbc.WrappedResultSet.next(WrappedResultSet.java:530)
at net.sf.hibernate.loader.Loader.doQuery(Loader.java:200)
at net.sf.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:133)
at net.sf.hibernate.loader.Loader.loadEntity(Loader.java:836)
at net.sf.hibernate.loader.Loader.loadEntity(Loader.java:856)
at net.sf.hibernate.loader.SimpleEntityLoader.load(SimpleEntityLoader.java:58)
at net.sf.hibernate.persister.EntityPersister.load(EntityPersister.java:419)
at net.sf.hibernate.impl.SessionImpl.refresh(SessionImpl.java:2172)
at com.mercury.dashboard.arch.hibernate.Transaction.refresh(Transaction.java:108)
at com.mercury.dashboard.model.portlet.GeneratedImage.saveImage(GeneratedImage.java:78)


Top
 Profile  
 
 Post subject:
PostPosted: Mon Feb 14, 2005 5:28 am 
jTDS Developer
jTDS Developer

Joined: Tue Feb 24, 2004 5:36 pm
Posts: 70
Location: Bucharest, Romania
Just as I thought, there's an older version of jTDS in the classpath and it's still the one loaded (class names have changed completely since 0.8). Check your library folders and use DatabaseMetaData.getVersion() to make sure the correct version gets loaded.

Alin,
The jTDS Project.


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 11 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.