2017-03-02 47 views
0

我正在使用Hibernate 5.2.6以及Tomcat服務器以使queriesto成爲MySQL數據庫。它會罰款,直到應用程序到達數據庫的7個調用。休眠 - 數據庫在幾個查詢後停止響應

不管是什麼調用(getAll(),find(),update(),海關方法),數據庫在7次調用後都會停止響應。這不是時間問題,因爲我可以讓應用程序運行幾分鐘而不會崩潰。但是,一旦7個電話打完,它就會掛起。沒有錯誤消息。

下面是示出了在服務器控制檯沒有從數據庫響應所述查詢8:

enter image description here

這裏有兩個服務,我請(第一次是通過Hibernate生成;我創建的第二個一個):

@Override 
public List<E> getAll() { 
if (!currentSession().getTransaction().isActive()) { 
    currentSession().beginTransaction(); 
} 
List<E> ret = currentSession().createCriteria(daoType).list(); 
return ret; 
} 

@Override 
public List<Subcategory> findByCategory(Category cat) { 

if (!currentSession().getTransaction().isActive()) { 
    currentSession().beginTransaction(); 
} 

Query query = currentSession().createQuery("from Subcategory where category = :category"); 
query.setParameter("category", cat); 
List<Subcategory> listSub = query.list(); 
return listSub; 
} 

是否有我打電話的服務有問題?或者這是服務器配置問題?

感謝您的幫助!

編輯

下面是我如何改變了我的方法的一個例子:

@Override 
public Audit findAuditById(int id) { 

    if (!currentSession().getTransaction().isActive()) { 
     currentSession().beginTransaction(); 
    } 

    Query query = currentSession().createQuery("from Audit where idAudit = :id"); 
    query.setParameter("id", id); 

    Audit audit = (Audit) query.uniqueResult(); 

    Hibernate.initialize(audit); 
    currentSession().getTransaction().commit(); 
    currentSession().close(); 

    return audit; 
} 

,這裏是 「無會話」 的錯誤,我得到:

faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server 
faultSubcode: 
faultString: Marshalling Error: could not initialize proxy - no Session 
faultActor: 
faultNode: 
faultDetail: 
    {http://xml.apache.org/axis/}stackTrace:Marshalling Error: could not initialize proxy - no Session 
    at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:222) 
    at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:129) 
    at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087) 
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:609) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1782) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2967) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:602) 
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:112) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:505) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:841) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:770) 
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141) 
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213) 
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:643) 
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.parse(SAXParserImpl.java:327) 
    at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227) 
    at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696) 
    at org.apache.axis.Message.getSOAPEnvelope(Message.java:435) 
    at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62) 
    at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206) 
    at org.apache.axis.client.Call.invokeEngine(Call.java:2784) 
    at org.apache.axis.client.Call.invoke(Call.java:2767) 
    at org.apache.axis.client.Call.invoke(Call.java:2443) 
    at org.apache.axis.client.Call.invoke(Call.java:2366) 
    at org.apache.axis.client.Call.invoke(Call.java:1812) 
    at com.safran.engineering.esurvey.ws.impl.EsurveyWebServiceImplServiceSoapBindingStub.getAuditById(EsurveyWebServiceImplServiceSoapBindingStub.java:411) 
    at model.impl.ImpGUI_Home.getAuditById(ImpGUI_Home.java:160) 
    at model.Abstract_Home.lambda$1(Abstract_Home.java:77) 
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86) 
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) 
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) 
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) 
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54) 
    at javafx.event.Event.fireEvent(Event.java:198) 
    at javafx.scene.Scene$ClickGenerator.postProcess(Scene.java:3470) 
    at javafx.scene.Scene$ClickGenerator.access$8100(Scene.java:3398) 
    at javafx.scene.Scene$MouseHandler.process(Scene.java:3766) 
    at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485) 
    at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762) 
    at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494) 
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:380) 
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:294) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$354(GlassViewEventHandler.java:416) 
    at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389) 
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:415) 
    at com.sun.glass.ui.View.handleMouseEvent(View.java:555) 
    at com.sun.glass.ui.View.notifyMouse(View.java:937) 
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
    at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191) 
    at java.lang.Thread.run(Thread.java:745) 
+1

不應該在某處提交()事務嗎? – user993553

+0

https://i.stack.imgur.com/gsyDW.png –

+0

您的連接池大小是6嗎? – DaveH

回答

0

如果所有你正在做的是檢索一個列表,那麼你不需要開始一個事務。如果您要刪除,更新或插入記錄,您只需要交易。一般情況下,如果你正在開始一個事務,那麼(大部分)在同一代碼塊中,我希望看到一個提交或回滾。我不確定MySQL或MySQL是否支持嵌套事務,這可能是問題的原因。或者,如果MySQL本身正在停止(您將知道如果您不能從MySQL Workbench連接到它,並且您會知道,因爲它不僅僅是您的應用程序需要重新啓動),但是,然後看看mysql生成的日誌文件,因爲這可能會給出原因的線索。如果出現硬件錯誤,這可能只是一個問題,但這只是一種感覺。

0

正如Brian所說,你不需要爲選擇查詢進行交易。

如果你仍然想擁有它們,那麼你需要提交事務並關閉會話。然後調用initialize方法來避免延遲加載問題。

@Override 
public List<E> getAll() { 
    if (!currentSession().getTransaction().isActive()) { 
     currentSession().beginTransaction(); 
    } 
    List<E> ret = currentSession().createCriteria(daoType).list(); 
    // Call initiliaze to avoid lazy loading exception. 
    Hibernate.initialze(ret); 
    // You need to commit the transaction & close the session. 
    currentSession().getTransaction().commit(); 
    currentSession().close(); 
    return ret; 
} 
+0

我試着改變我的方法使用你的代碼,但我仍然得到這個錯誤:「編組錯誤:無法初始化代理 - 沒有會話」。另外,當我刪除交易部分(因爲我不需要它),它說我不能創建一個沒有交易的查詢。任何提示? – Firilou

+0

編輯你的問題,併發布代理完整的stacktrace - 沒有會議,問題。 – Chaitanya