質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

16864閲覧

Webサービスのエラー分析 達人いますか?

Newmanlee

総合スコア12

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2016/07/07 08:00

こんにちは、今ひとつのワークフローシステムのWebサービスは外部システムに利用された時に、実行時エラーがあって、原因特定と対策が打てれなくて困っております。

基本的なシステム構成は説明させてもらいます↓
1.ワークフローシステム(コアはOSSのActivityを使っています)
1.1 外部システム利用のAPI(Webサービス)
2.外部システム(ワークフローのエンジンを使いながら、内部のロジックに組み込む)
※補足 1はjava言語 2はC#

今の問題は2は1の複数のAPIを繰り返して叩く時に、途中あるメソッドを実行する時にエラーが出ました。

ただし、自分たちは手動とかツールを使って、その問題あったAPIを叩くと、問題ありませんでした。

以下はエラーログです。これを見ていただいて、なんか問題ありそうなところがわかれば、ぜひ教えてもらいたいです。

***********************************

2016/07/02 13:54:42 http://10.2.1.224:7670/WFTripInfoList/ajax/WFTripInfoList.WFTripInfoList,WFTripInfoList.ashx?_method=AdmitRefuse&_session=noWFWebService_GetProcessInstanceByID_IMPL Error : com.chuangji.workflow.engine.common.WorkflowException: com.chuangji.workflow.engine.common.WorkflowException: org.springframework.transaction.CannotCreateTransactionException: Could not open JDBC Connection for transaction; nested exception is com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 107,300,822 milliseconds ago. The last packet sent successfully to the server was 107,300,822 milliseconds ago. is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem. at org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin(DataSourceTransactionManager.java:242) at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:373) at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:130) at org.activiti.spring.SpringTransactionInterceptor.execute(SpringTransactionInterceptor.java:45) at org.activiti.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:31) at org.activiti.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:40) at org.activiti.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:35) at org.activiti.engine.impl.AbstractQuery.singleResult(AbstractQuery.java:123) at com.chuangji.workflow.engine.repository.ProcessService.getProcessInstanceInfoJson(ProcessService.java:96) at com.chuangji.workflow.engine.repository.ProcessService.getProcessInstanceInfo(ProcessService.java:117) at com.chuangji.workflow.engine.business.ProcessBusiness.getProcessInstanceByID(ProcessBusiness.java:206) at com.chuangji.workflow.engine.websevice.WorkFlowWebServiceImpl.GetProcessInstanceByID(WorkFlowWebServiceImpl.java:386) … コード

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

エラーメッセージで検索したところ、以下の記事を見つけました。
http://yyhayashi303.hatenablog.com/entry/20120911/1347322683

ご参考までに。

投稿2016/07/07 08:17

KiyoshiMotoki

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Newmanlee

2016/07/07 08:54

java初心者なので、失礼しますが、 ******************************************************************************* これは接続が切れたコネクションを使用しようとすると発生する例外らしい。 MySQLの場合、デフォルトで8時間以上アイドル状態の接続がある場合に、接続を切断する設定になっているらしく、 ... ****************************************************************************************************** 多分、↑の問題だろうと思っています。 ただ、コネクションは8時間ほど接続していることはびっくりしました。 普通にspringを使うと、DBに接続して、実行してから、接続を解放してくれるはずだよね? たくさんのコネクションはアイドルになっているのはなぜでしょうね、、、
KiyoshiMotoki

2016/07/07 09:10 編集

> たくさんのコネクションはアイドルになっているのはなぜでしょうね、、、 「コネクション・プーリング」という仕組みです。 https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-usagenotes-j2ee-concepts-connection-pooling.html DBとの接続を開始する処理は比較的"重い"処理なので、あらかじめ接続済みのコネクションを用意(プールする、と言います)しておけば、必要なときにすぐDBにアクセスできる、というものです。 Springフレームワークはコネクション・プーリングの機能を備えています。 https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-usagenotes-spring-config-connpooling.html おそらく、問題のワークフローシステムはこの機能がONになっており、いままで意識せずに使っていたのではないでしょうか?
Newmanlee

2016/07/07 10:36

回答ありがとうございました。 コネクションはアイドル状態になってて、8時間以上になったら、再度使う時にエラーが出てしまったという理解をしていますが、 ちょっと矛盾で完全に理解できていないのはコネクションプールを使わせることと8時間を超えたらダメになったということです。 対策としては、コネクションを使う前に、生きているかどうかのチェックをしておくべきだということかな?
guest

0

APIを実行する時に、毎回必ず失敗しているわけではなく、たまたまに失敗したということで、どうやって原因を判明するかというのが困っています。。。

データベースのほうは接続数はmax値は500に設定しているので、特に接続数不足ということもないはずかなと思って、、、

投稿2016/07/07 08:09

Newmanlee

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

PineMatsu

2016/07/07 08:15

こういうのは回答ではなく、投稿の編集でお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問