私は、基本的に複数のWebサービスを呼び出すアプリケーションを持っており、それらのWebサービスから受け取ったデータを格納し、ユーザーにレンダリングします。非同期タスク後のマージ中のエラー
List<Promise> t = new ArrayList<Promise>()
def TIMEOUT_TIME = 6
t[0] = task {
def responseFrom0 = webserviceRequestService.getResponse(0)
if(responseFrom0){
return responseFrom0
}
}
t[1] = task {
def responseFrom1 = webserviceRequestService.getResponse(1)
if(responseFrom1){
return responseFrom1
}
}
アクションてgetResponseはこのようなものになります:
List<ResponseResult> result = new ArrayList<TravelQuote>()
try {
wsClient = prepareRequestMap()
wsResponse = externalWebservice.getQuotes(wsClient)
wsResponse.responseList.each {
ResponseResult responseResult = new ResponseResult()
//populate properties of ResponseResult
responseResult.save(failOnError:true, flush:true)
result.add(responseResult)
}
} catch(Exception e){
log.error e.message
e.printStackTrace()
}
return result
と終了時に、私はからすべての応答を収集私はすべてのWebサービスを呼び出すと、それは次のようになります非同期タスクを持っていますこのように、すべてのWebサービスは:
result.each {
if(it){
try{
it=it.merge()
}catch (Exception e){
log.error("Error occured while merging responses... : ${e.message}")
}
}
}
は今、ここでの問題は、私は、コードの最後のブロックからこの例外を取得している
not-nullプロパティがnullまたは一時的な値を参照しています。ResponseResult.dateCreated;ネストされた例外はorg.hibernate.PropertyValueExceptionです:not-nullプロパティはNULL値または一時的な値を参照しています:ResponseResult.dateCreated
dateCreatedは私のすべてのドメインクラスで実装したこのクラスに由来します。
abstract class AbstractPersistentObject implements Serializable{
static final long serialVersionUID = 1L;
Date dateCreated
Date lastUpdated
}
この問題についての奇妙なことは、これが唯一の本番環境で発生し、関係なく、私は何をすべきか、私は他の環境でこれを複製することはできませんされています。また、一旦これが起こると、サーバは、コードが実行されるたびにサーバが再起動されるまで、その特定の問題を投げるだけです。再起動後、このコードは正常に動作します。
アイデアが不足していますが、誰もがアイデアを持っていますか?
保存しているドメインクラスからDTOを分離する方が良いでしょうか? Serializableを実装していないドメインクラスを保存するとどうなりますか? –
具体的なドメインクラスのマッピングブロックに 'autoTimestamp true'を追加して、autoTimestamp機能を強制的に有効にしようとしましたか? –
これを実行した後、responseResult.dateCreated = new Date()を実行してdateCreatedを直接割り当てようとしましたが、nullプロパティ 'id'を見つけることができないというエラーが発生しました –