タイトルについては申し訳ありませんが、問題を説明する他の方法がわかりません。TimerTaskを拡張するクラスを持つSingletonBeanがあります。重要なのは、アプリケーションが起動されると、スケジュールされた一連のバックグラウンドタスクの実行をループで開始することです。一見すべてが正常に機能し、Timer()はrun()メソッドを実行し、スケジュールされたジョブは120秒ごとに完全に実行されます。
run()内には、AWSDynamoDBから情報のリストを取得するメソッドがあります。
List<SiteObj> sites = storedDynamoQueries.scanSite("uid");
繰り返しますが、これは完全に機能します。私のアイデアでは、予想どおり、そのメソッドを中断できます。実行されると、120秒ごとに一時停止し、ステップオーバーするのを待ちます。
今問題のために!上記のように、タイマーは120秒ごとに実行するように設定されています。ただし、120秒ごとですが、60秒でオフセットされます。次のようなエラーが発生します。
SEVERE: Error wih Dynamo Site Scan
java.lang.NullPointerException
at org.apache.log4j.LogManager.getLogger(LogManager.java:179)
at org.apache.log4j.Logger.getLogger(Logger.java:94)
at org.apache.commons.logging.impl.Log4JLogger.getLogger(Log4JLogger.java:289)
at org.apache.commons.logging.impl.Log4JLogger.debug(Log4JLogger.java:177)
at com.amazonaws.auth.AWS4Signer.sign(AWS4Signer.java:119)
at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:239)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:165)
at com.amazonaws.services.dynamodb.AmazonDynamoDBClient.invoke(AmazonDynamoDBClient.java:985)
at com.amazonaws.services.dynamodb.AmazonDynamoDBClient.scan(AmazonDynamoDBClient.java:560)
at com.amazonaws.services.dynamodb.datamodeling.DynamoDBMapper.scan(DynamoDBMapper.java:1066)
at com.amazonaws.services.dynamodb.datamodeling.DynamoDBMapper.scan(DynamoDBMapper.java:1028)
at tv.tarka.dastraxweb.integration.dynamo.StoredDynamoQueries.scanSite(StoredDynamoQueries.java:1584)
at tv.tarka.dastraxweb.application.snmp.Scheduler$ScheduledTask.run(Scheduler.java:72)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)
これは、上記と同じ方法でトリガーされたエラーです。しかし、私がそれをデバッグしようとすると、システムはクラスが呼び出されていないと言っています!デバッガーには表示されません。また、すべてのアカウントで呼び出されるべきではありません。特に、run()の残りの部分から60秒オフセットされていない必要があります。
とにかく、答えはトレースの最後の2行と関係があるのではないかと思います。
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)
しかし、何がこれを引き起こしているのか私にはわかりません。