取消安排作业时出错

时间:2014-07-16 09:02:00

标签: java spring oracle jboss quartz-scheduler

当我关闭JBOSS服务器(ctrl+C)时会导致以下异常

12:39:50,020 ERROR [com.kony.sync.console.job.scheduler.ConsoleJobScheduler] (ServerService Thread Pool -- 20) Error occurred while unscheduling jobs for application ID:PaaSJobs: org.qu
artz.JobPersistenceException: Failed to obtain DB connection from data source 'syncQuartzDS': java.sql.SQLException: Could not retrieve datasource via JNDI url 'java:jboss/datasources/C
onsoleDB' java.sql.SQLException: javax.resource.ResourceException: IJ000451: The connection manager is shutdown: java:jboss/datasources/ConsoleDB [See nested exception: java.sql.SQLExce
ption: Could not retrieve datasource via JNDI url 'java:jboss/datasources/ConsoleDB' java.sql.SQLException: javax.resource.ResourceException: IJ000451: The connection manager is shutdow
n: java:jboss/datasources/ConsoleDB]
        at org.quartz.impl.jdbcjobstore.JobStoreSupport.getConnection(JobStoreSupport.java:715) [quartz-all-1.8.6.jar:]
        at org.quartz.impl.jdbcjobstore.JobStoreTX.getNonManagedTXConnection(JobStoreTX.java:69) [quartz-all-1.8.6.jar:]
        at org.quartz.impl.jdbcjobstore.JobStoreSupport.executeInNonManagedTXLock(JobStoreSupport.java:3785) [quartz-all-1.8.6.jar:]
        at org.quartz.impl.jdbcjobstore.JobStoreTX.executeInLock(JobStoreTX.java:90) [quartz-all-1.8.6.jar:]
        at org.quartz.impl.jdbcjobstore.JobStoreSupport.removeTrigger(JobStoreSupport.java:1458) [quartz-all-1.8.6.jar:]
        at org.quartz.core.QuartzScheduler.unscheduleJob(QuartzScheduler.java:965) [quartz-all-1.8.6.jar:]
        at org.quartz.impl.StdScheduler.unscheduleJob(StdScheduler.java:290) [quartz-all-1.8.6.jar:]
        at com.kony.sync.console.job.scheduler.ConsoleJobScheduler.unscheduleJob(ConsoleJobScheduler.java:225) [syncconsole.jar:]
        at com.kony.sync.services.context.SyncContextListener.contextDestroyed(SyncContextListener.java:221) [classes:]
        at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:3427) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
        at org.apache.catalina.core.StandardContext.stop(StandardContext.java:3920) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
        at org.jboss.as.web.deployment.WebDeploymentService.doStop(WebDeploymentService.java:171) [jboss-as-web-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14]
        at org.jboss.as.web.deployment.WebDeploymentService.access$100(WebDeploymentService.java:60) [jboss-as-web-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14]
        at org.jboss.as.web.deployment.WebDeploymentService$2.run(WebDeploymentService.java:113) [jboss-as-web-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14]
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [rt.jar:1.6.0_26]
        at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source) [rt.jar:1.6.0_26]
        at java.util.concurrent.FutureTask.run(Unknown Source) [rt.jar:1.6.0_26]
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) [rt.jar:1.6.0_26]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [rt.jar:1.6.0_26]
        at java.lang.Thread.run(Unknown Source) [rt.jar:1.6.0_26]
        at org.jboss.threads.JBossThread.run(JBossThread.java:122)
Caused by: java.sql.SQLException: Could not retrieve datasource via JNDI url 'java:jboss/datasources/ConsoleDB' java.sql.SQLException: javax.resource.ResourceException: IJ000451: The co
nnection manager is shutdown: java:jboss/datasources/ConsoleDB
        at org.quartz.utils.JNDIConnectionProvider.getConnection(JNDIConnectionProvider.java:163) [quartz-all-1.8.6.jar:]
        at org.quartz.utils.DBConnectionManager.getConnection(DBConnectionManager.java:109) [quartz-all-1.8.6.jar:]
        at org.quartz.impl.jdbcjobstore.JobStoreSupport.getConnection(JobStoreSupport.java:712) [quartz-all-1.8.6.jar:]
        ... 20 more

Terminate batch job (Y/N)?

在contextDestroyed(..)

            jobScheduler.unscheduleJob(PaaSConsoleUtil.PAAS_CLEANUP_JOB_NAME, PaaSConsoleUtil.JOB_GROUP);

        jobScheduler.shutdown(true);
        //scheduler.shutdown();
        executor.shutdown();   

        //clear the connection pool.
        ConnectionPool.clear();
        //Closing HttpClientIdleConnectionTimeoutThread through connector utils.
        ConnectorUtils.shutdown();

        //Shutdown the monitoring async executor task.
        SyncEventListenerUtil.shutdownThreadPool();

        //Destroy all console related threads here and deregister all drivers.
        ConsoleContextUtil consoleUtil = new ConsoleContextUtil(logger, false);
        consoleUtil.consoleContextDestroyed();

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,现在我已经找到了https://issues.jboss.org/browse/WFLY-944中描述的原因。为避免这种情况而在那里提出的解决方案是将jndi声明为Web应用程序中的资源,以便在应用程序终止之前不与jboss服务器解除绑定。

要实现此目的,请在web.xml中添加以下部分,该部分设置对名为“jdbc / myDS”的jboss jndi的引用。

<resource-ref>
<res-ref-name>jdbc/myDS</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<lookup-name>java:jboss/datasources/ConsoleDB</lookup-name>
</resource-ref>

然后从你的代码部分查找“java:jboss / datasources / ConsoleDB”而不是查找我认为你用

这样的实际jndi
  

DataSource ds =(DataSource)   ctx.lookup( “Java的:的JBoss /数据源/ ConsoleDB”);

,您现在应该查找“java:comp / env / jdbc / myDS”,它将引用您放在web.xml中的资源,该资源实际指向实际的jndi(我们之前指定为'lookup-在web.xml中添加的部分中名为'xml属性':

  

DataSource ds =(DataSource)   ctx.lookup( “Java的:comp / env的/ JDBC / myDS”);

答案 1 :(得分:0)

我通过将数据源添加到persistence.xml(不需要web.xml)并在数据源上使用@Resource(lookup =“datasourceName”)注释来解决它。 您可以使用@Resource注释来节省大量样板代码,因为您不必担心打开和关闭连接等。 只需调用“datasource.getConnection()”即可检索现有连接。你让容器完成工作:-D