Mam aplikację, która zasadniczo wywołuje wiele usług sieciowych, przechowuje dane otrzymane z tych usług i renderuje je użytkownikowi. Mam zadanie asynchronicznej, które nazywamy wszystkie webservices i wygląda to mniej więcej tak:Błąd podczas operacji scalania po wykonaniu zadania asynchronicznego
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 akcja wygląda mniej więcej tak:
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
I na koniec, mam zebrać wszystkie odpowiedzi od wszystkie usługi sieciowe, takie jak ten:
result.each {
if(it){
try{
it=it.merge()
}catch (Exception e){
log.error("Error occured while merging responses... : ${e.message}")
}
}
}
teraz problemem jest tu otrzymuję ten wyjątek od ostatniego bloku kodu
Właściwość not-null odwołuje się do wartości pustej lub przejściowej: ResponseResult.dateCreated; Zagnieżdżony wyjątek to org.hibernate.PropertyValueException: właściwość not-null odwołuje się do wartości pustej lub przejściowej: ResponseResult.dateCreated
Obiekt dateCreated pochodzi z tej klasy, którą zaimplementowałem we wszystkich moich klasach domeny.
abstract class AbstractPersistentObject implements Serializable{
static final long serialVersionUID = 1L;
Date dateCreated
Date lastUpdated
}
Najdziwniejsze o tym problemie jest to dzieje się tylko w środowisku produkcyjnym, bez względu na to, co robię, to nie może replikować w innych środowiskach. A także, gdy to nastąpi, serwer po prostu wyrzuca ten konkretny problem za każdym razem, gdy ten kod jest uruchamiany, dopóki serwer nie zostanie zrestartowany. Po ponownym uruchomieniu ten kod działa poprawnie.
Brakuje mi pomysłów, ktoś ma jakieś pomysły?
Czy nie lepiej oddzielić DTO od klas Domain, które zapisujesz? Co się stanie, jeśli zapiszesz domenę, która nie implementuje Serializable? –
Czy próbowałeś wymusić włączenie funkcji autoTimestamp, dodając parametr 'autoTimestamp true' do bloku mapowania w każdej konkretnej klasie domeny? –
Próbowałem przypisać dateCreated bezpośrednio przez wykonanie, responseResult.dateCreated = new Date(), po wykonaniu tego, dostałem komunikat o błędzie, że nie można znaleźć pustej właściwości 'id' –