実行メソッドがデータベースから特定のサブミットジョブを取り出して実行するスレッドクラスを作成しました。セッションリスナーのコンテキスト初期化メソッドでこのスレッドを開始しました。私のサーバーが再起動するとすぐにスレッドが開始されます。 runメソッドでは、最初にデータベース内の「送信済み」状態にあるすべてのタスクを取得し、それを1つずつ実行します。 すべてのタスクが完了した後に新しいタスクを送信すると問題が発生します。スレッドの状態をチェックして、 "RUNNABLE"です。私がサーバーを再起動すると、スレッドはこのタスクを実行していますが、それ以外の場合は賢明です。タスクを実行するためのスレッドの実行を維持する
public void contextInitialized(ServletContextEvent sce) {
try {
Configuration configuration = new Configuration();
configuration.configure("hibernate.cfg.xml");
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().
applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = new AnnotationConfiguration().
buildSessionFactory(serviceRegistry);
logger.debug("sessionFactory created in HibernateSessionFactoryListener.contextInitialized() : " + sessionFactory);
// get servletcontext
context = sce.getServletContext();
// start session factory
context.setAttribute("datasource", sessionFactory);
isSessionActive = true;
//SubmitTaskThread t = new SubmitTaskThread();
t.start();
}
は、上記のコンテキストでコードが実行方法に
コードを初期化されます。
public void run(){
//logger1.debug("in run method of thread class");
//SubmitTask st = new SubmitTask();
//st.runJobs();
//TASKS THAT ARE SUBMITTED
try {
pendingList=getPendingList();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
if (pendingList.size()>0){
boolean isObjStorage=false;
CornicheVO runVO;
Transfer newTransferJob;
List<String> locations;
JobVO jobSubmitVo;
for (int listSize=0;listSize<pendingList.size();listSize++){
locations = new ArrayList<String>();
runVO=pendingList.get(listSize);
newTransferJob=new Transfer();
jobSubmitVo=new JobVO();
newTransferJob.setTask_id(runVO.getTask_Id());
locations.add(runVO.getSrcLocDesc());
locations.add(runVO.getDstLocDesc());
try {
drivesInfo = getLocationInfo(locations);
} catch (CornicheException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
for (NasDrive drive : drivesInfo) {
if (drive.getSrc_loc_desc().equals(
runVO.getSrcLocDesc())) {
if ("OBJSTORAGE".equals(drive.getType())) {
isObjStorage = true;
newTransferJob.setSrc_server_type("OOSS");
} else {
newTransferJob.setSrc_server_type("NAS");
}
newTransferJob.setSrc_server(drive.getSrc_server());
newTransferJob.setSrc_server_dflt_loc(drive.getSrc_Loc());
newTransferJob.setSrc_server_id(drive.getUsr_id());
newTransferJob.setSrc_server_pswd(drive.getPswd());
} else {
if ("OBJSTORAGE".equals(drive.getType())) {
newTransferJob.setDst_server_type("OOSS");
} else {
newTransferJob.setDst_server_type("NAS");
}
newTransferJob.setDst_server(drive.getSrc_server());
newTransferJob.setDst_server_dflt_loc(drive.getSrc_Loc());
newTransferJob.setDst_server_id(drive.getUsr_id());
newTransferJob.setDst_server_pswd(drive.getPswd());
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
jobSubmitVo.setClientName(runVO.getClientName());
jobSubmitVo.setSrcServer(runVO.getSrcLoc());
jobSubmitVo.setDstServer(runVO.getDstLoc());
jobSubmitVo.setSrcServerDesc(runVO.getSrcLocDesc());
jobSubmitVo.setDstServerDesc(runVO.getDstLocDesc());
jobSubmitVo.setFileName(runVO.getFileName());
jobSubmitVo.setSizeOfFile("32");
jobSubmitVo.setUsrName(runVO.getLstUpdtIdCd());
jobSubmitVo.setMetaTag(runVO.getMetaTag());
jobSubmitVo.setRententionPeriod(runVO.getRetentionPrdcurrent());
jobSubmitVo.setTask_Id(runVO.getTask_Id());
if (!isObjStorage) {
//CURLProcessor uploader = new CURLProcessor();
// Export the scripts first
util.exportFiles(newTransferJob.getSrc_server(), newTransferJob.getSrc_server_id(),newTransferJob.getSrc_server_pswd(),newTransferJob.getSrc_server_dflt_loc());
uploadtrasnfer(newTransferJob, runVO.getFileName(), jobSubmitVo);
} else {
util.exportFiles(newTransferJob.getDst_server(), newTransferJob.getDst_server_id(),newTransferJob.getDst_server_pswd(),newTransferJob.getDst_server_dflt_loc());
downloadTrasnfer(newTransferJob, runVO.getFileName(), jobSubmitVo);
}
try {
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
私はここに関連コードを投稿する必要があると思います。それがなければ何が間違っているのかを理解することは難しい。 – Serge
問題が何であるかを知るのは難しい – BaneDad
本当に答えが必要な場合は、[mcve]を構築する必要があります。時間がかかることがあります。コードを実行して問題を見るためにデータベースを必要としないようにコードを書き直してください。しかし、私はあなたがその努力をしないと良い答えを得るのを見ることができません。 – RealSkeptic