2017-03-02 2 views
0

クエリをMySQLデータベースにするために、TomcatサーバとともにHibernate 5.2.6を使用しています。アプリケーションがデータベースへの7回の呼び出しに達するまで罰金を科します。Hibernate - いくつかのクエリの後でデータベースが応答を停止する

呼び出し(getAll()、find()、update()、customsメソッド)に関係なく、データベースは7回の呼び出し後に応答を停止します。クラッシュすることなくアプリケーションを数分間実行できるので、時間の問題ではありません。しかし、7回の呼び出しが行われるとすぐに、それはハングアップします。エラーメッセージはありません。ここ

は、データベースからの応答なしでサーバコンソールに示すクエリ8である:ここ

enter image description here

私は(最初は、Hibernateが生成された呼び出しの2つのサービスであり; Iは、第二の作成しました1):

@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; 
} 

私が電話するサービスに問題はありますか?または、これはサーバー構成の問題ですか?

私を助けてくれてありがとう!ここで

EDIT

は、私は私の方法を変更する方法の例です:すべての場合

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

@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; 
} 

そして、ここでは私が得る "ノーセッション" のエラーですあなたがやっていることは、リストを取得することであり、トランザクションを開始する必要はありません。レコードを削除、更新、挿入する場合にのみトランザクションが必要です。一般的には、トランザクションの開始を(大部分が)同じコードブロックで行う場合は、コミットまたはロールバックが発生することが予想されます。私は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

あなたの質問を編集し、プロキシの完全なスタックトレースを投稿してください。セッションはありません。 – Chaitanya

関連する問題