JBPM+QUARTZ+JBOSS内存溢出

最近在做项目,目前已经到了测试的阶段了,我用quartz做了一个任务调度,每隔3秒钟(测试的时候周期比较短),会扫描数据库,如果发现满足条件的结果,就会发起一个流程。

但是当项目运行4个小时左右,jboss就会报内存泄露异常:java.lang.OutOfMemoryError: Java heap space

以下是我的代码片段,以及配置文件,请大家看看

Quartz的job配置
[code="java"]<?xml version="1.0" encoding="UTF-8"?>



deployAds
group1
cn.itstudio.ad_server.quartz.DeployAdsJob




deployAds
group1
deployAds
group1
0/3 * * ? * *



[/code]

DeployAdsJob.java
[code="java"]public class DeployAdsJob implements Job {

public void execute(JobExecutionContext arg0) throws JobExecutionException {
    // TODO Auto-generated method stub
    System.out.println("-------------广告上架");

    Session session = null;
    Transaction tx = null;

    try {
        session = HibernateSessionFactory.getSession();
        Date current = new Date();
        // 获取当前日的前一天
        Date compareDate = DateUtil.getPrevDate(current);
        String sql = "from PlayList p where p.playBegin<='"
                + DateUtil.dateFormate(current, "yyyy-MM-dd")
                + "' and p.playEnd > '"
                + DateUtil.dateFormate(compareDate, "yyyy-MM-dd")
                + "' and p.other1 ='false'";
        //System.out.println("发布广告-------"+sql);
        PlayListDao playListDao = new PlayListDao();
        List<PlayList> list = playListDao.findByCondition(session, sql,
                null);
        JbpmUtil jbpmUtil = new JbpmUtil();

        //开启事务
        tx = session.beginTransaction();
        for (PlayList playList : list) {
            // 发布广告上架流程实例
            jbpmUtil.startNewProcessInstance(playList.getTerminal()
                    .getTerminalCode(), playList.getAds().getAdsId()
                    .toString(), JbpmUtil.DEPLOY_ADS);
            System.out.println("广告:" + playList.getAds().getLabel()
                    + "  需要在终端机:"
                    + playList.getTerminal().getTerminalCode() + "   上架");
        }
        tx.commit();
    } catch (Exception e) {
        e.printStackTrace();
        if (tx != null) {
            tx.rollback();
        }
    } finally {
        HibernateSessionFactory.closeSession();
    }
}

}[/code]

JbpmUtil中的startNewProcessInstance方法
[code="java"]public boolean startNewProcessInstance(String terminalCode, String adId,
String processDefinitionKey) throws Exception {

    ProcessEngine pe = null;
    try {
        pe = Configuration.getProcessEngine();
        Session session = HibernateSessionFactory.getSession();
        pe.setHibernateSession(session);

        ExecutionService es = pe.getExecutionService();

        Map context = new HashMap();
        context.put("terminalCode", terminalCode);
        context.put("adId", adId);

        ProcessKeyMapDao processKeyMapDao = new ProcessKeyMapDao();
        // 构建流程id
        String processInstanceId = processKeyMapDao.getProcessIdBySDKey(
                session, processDefinitionKey + "." + terminalCode + "."
                        + adId);
        if (processInstanceId.equals("")) {
            processInstanceId = processDefinitionKey + "." + terminalCode
                    + "." + adId;
        }
        Query query = session
                .createQuery("from ExecutionImpl e where e.id like '%"
                        + processInstanceId + "%'");

        if (query.list().size() != 0) {
            System.out.println("该processInstance已经启动过了,无法重复启动");
            return false;
        }
        // 如果该流程为收集终端机状态的流程,如果该广告正在下架,则不允许收集状态
        if (processDefinitionKey.equals("CollectTerminalState")) {
            String deployProcessId = "CollectTerminalState" + "."
                    + terminalCode + "." + adId;
            query = session
                    .createQuery("from ExecutionImpl e where e.id like '%"
                            + deployProcessId + "%'");
            if (query.list().size() != 0) {
                System.out.println("广告:" + adId + "   正在下架,不允许收集状态");
                return false;
            }
        }

        // es.startProcessInstanceById(pd.getId(), context, terminalCode +
        // "."
        // + adId);
        es.startProcessInstanceByKey(processDefinitionKey, context,
                terminalCode + "." + adId);
        System.out.println("成功创建processInstance,流程Id为"
                + processDefinitionKey + "." + terminalCode + "." + adId);
        return true;
    } catch (Exception e) {
        e.printStackTrace();
        throw e;
    } finally {
        if (pe != null) {
            pe.close();
        }
    }
}[/code]

有一点不是很清楚,processEngine需不需要关闭,已经我的问题出在哪,谢谢大家

1个回答

processEngine是个单例,无需关闭

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
JBoss jBPM
JBoss jBPM 是一个复杂的可扩展的工作流管理系统. JBoss jBPM 有直观的流程语言来表示商业流程图的术语比如,任务,异步通讯的等待状态,定时器,自动操作等等.把这些操作绑在一起,, JBoss jBPM 就有了最强大和易扩展性的控制流机制.
JBOSS 内存溢出
 前几天做EXCEL导出数据,发现当数据量达到一定的时候会报内存溢出的错误。 解决方案:   修改JBOSS启动参数。在jboss/bin/run.conf文件 将JAVA_OPTS -Xms 512m -Xmx 1024m修改 将后这两个参数的值修改大一点 JAVA_OPTS -Xms 800m -Xmx 1536m  一般后面的参数不要超过机器内存的90%,不建议设置的太大,一般设在机器内...
jboss内存溢出
我在jboss上跑一些定时钟的程序,经常会OutofMemory, 我想问问大家,有没有什么好的方法,可以监控到这个OutofMemory是哪个Class引起的啊,谢了
jbpm 5.0 jboss jbpm 5.0 最新版jboss jbpm 5.0 最新版jboss jbpm 5.0 最新版jboss jbpm 5.0 最新版
jboss jbpm 5.0 最新版jboss jbpm 5.0 最新版jboss jbpm 5.0 最新版jboss jbpm 5.0 最新版jboss jbpm 5.0 最新版jboss jbpm 5.0 最新版jboss jbpm 5.0 最新版
jboss --JBPM介绍及应用
一个关于JBOSS下开发WS应用的很好的资料……
jbpm部署到JBOSS
我在JBOSS官网上下载了 JBOSS JBPM 压缩包 jbpm-4.0.CR1.ziprnrn怎样部署这个JBPM呢,看了官网上的好多文档,也没看出点门道到rnrn希望老鸟们给予帮助rn谢谢
请问JBoss jBPM的问题?
请问JBoss jBPM的下载资源的网站是什么?
JBOSS JBPM 部署
目前正在学习JBOSS JBPM rn在这个JBPM的部署上,遇到了一点问题,所以到这里问一下,希望得到老鸟们的帮助rn我用的服务器是 jboss4.2.2GA的,数据库是MYSQL5.0rnJBPM 依赖的数据库已经建好了,这个什么发说的,都是COPY的SQL脚本执行的,应该没啥问题rnrn我下载了 jbpm-jpdl-suite-3.2.3.zip 这个压缩包 rn我的部署过程是,将该包解压,将该包 server\server\jbpm\deploy 这个目录下的 jbpm-console.war 和 jbpm-ds.xmlrn这两个文件拷贝到我服务器的deploy目录下rn然后修改了 rnrn jbpm-console.war 中Hibernate的配置文件,我修改后的配置文件内容如下rn[code="java"]rnrnorg.hibernate.dialect.MySQLInnoDBDialectrn truern rn rn com.mysql.jdbc.Driver rn jdbc:mysql://localhost:3306/jbpm rn jbossjbpm rn jbossjbpm rn rn rn org.hibernate.cache.HashtableCacheProviderrn rn rn rn rn org.hibernate.transaction.JDBCTransactionFactoryrn rn[/code]rnrn[code="java"]rnrn下面是jbpm-ds.xml的内容rn rn rn JbpmDSrn jdbc:mysql://localhost:3306/jbpmrn com.mysql.jdbc.Driverrn jbossjbpmrn jbossjbpmrnrn rn MySQLrn rn rnrn[/code]rnrn之后,我启动服务器,没有异常,但是当服务后台打印出rn[SessionFactoryImpl] building session factoryrn[SessionFactoryObjectFactory] Not binding factory to JNDI, no JNDI name configuredrnrn这个信息之后,因为我在Hibernate配置文件中,加了显示查询语句的设置rn后台大约是每两秒就执行 这两个查询语句rn1: Hibernate: select job0_.ID_ as ID1_26_, job0_.VERSION_ as VERSION3_26_, job0_.DUEDATE_ as DUEDATE4_26_, job0_.PROCESSINSTANCE_ as PROCESSI5_26_, job0_.TOKEN_ as TOKEN6_26_, job0_.TASKINSTANCE_ as TASKINST7_26_, job0_.ISSUSPENDED_ as ISSUSPEN8_26_, job0_.ISEXCLUSIVE_ as ISEXCLUS9_26_, job0_.LOCKOWNER_ as LOCKOWNER10_26_, job0_.LOCKTIME_ as LOCKTIME11_26_, job0_.EXCEPTION_ as EXCEPTION12_26_, job0_.RETRIES_ as RETRIES13_26_, job0_.NAME_ as NAME14_26_, job0_.REPEAT_ as REPEAT15_26_, job0_.TRANSITIONNAME_ as TRANSIT16_26_, job0_.ACTION_ as ACTION17_26_, job0_.GRAPHELEMENTTYPE_ as GRAPHEL18_26_, job0_.GRAPHELEMENT_ as GRAPHEL19_26_, job0_.NODE_ as NODE20_26_, job0_.CLASS_ as CLASS2_26_ from JBPM_JOB job0_ where (job0_.LOCKOWNER_ is null or job0_.LOCKOWNER_=?) and job0_.RETRIES_>0 and job0_.DUEDATE_<=? and job0_.ISSUSPENDED_<>1 order by job0_.DUEDATE_ asc limit ?rnrnrn2: Hibernate: select job0_.ID_ as ID1_26_, job0_.VERSION_ as VERSION3_26_, job0_.DUEDATE_ as DUEDATE4_26_, job0_.PROCESSINSTANCE_ as PROCESSI5_26_, job0_.TOKEN_ as TOKEN6_26_, job0_.TASKINSTANCE_ as TASKINST7_26_, job0_.ISSUSPENDED_ as ISSUSPEN8_26_, job0_.ISEXCLUSIVE_ as ISEXCLUS9_26_, job0_.LOCKOWNER_ as LOCKOWNER10_26_, job0_.LOCKTIME_ as LOCKTIME11_26_, job0_.EXCEPTION_ as EXCEPTION12_26_, job0_.RETRIES_ as RETRIES13_26_, job0_.NAME_ as NAME14_26_, job0_.REPEAT_ as REPEAT15_26_, job0_.TRANSITIONNAME_ as TRANSIT16_26_, job0_.ACTION_ as ACTION17_26_, job0_.GRAPHELEMENTTYPE_ as GRAPHEL18_26_, job0_.GRAPHELEMENT_ as GRAPHEL19_26_, job0_.NODE_ as NODE20_26_, job0_.CLASS_ as CLASS2_26_ from JBPM_JOB job0_ where (job0_.LOCKOWNER_ is null or job0_.LOCKOWNER_=?) and job0_.RETRIES_>0 and job0_.ISSUSPENDED_<>1 order by job0_.DUEDATE_ asc limit ?rnrn后台反复的执行着这两个HQL语句,每2--3秒就打印一次rn出现这种情况,我不知道,JBPM到底有没有部署成功,我用IE打开http://localhost:8088/jbpm,却出现 404错误rn说我请求的资源不可用,这样应该是没有部署成功的rnrn这种情况怎么解决,希望老鸟们给予帮助,谢谢rnrn最后说一下,那个压缩包解压出来server目录下的那个配置好的环境,我运行不了,这可能是我电脑的原因,我的JBOSS只有在rnMyEclips中能启动,要是手动运行 run.bat,DOS一闪而过,无法用这种方式启动JBOSSrnrn
JBoss jBPM 实例说明
JBoss jBPM 实例说明 struts1.1+spring1.2+hibernate3.0+jbpm3.1.4可以tomcat下运行,可通过图形模式发布工程,配置了在网页显示jbpm流程图的标签文件。
关于JBoss jBPM的问题?
请问JBoss jBPM的下载资源的网站是什么?
jboss jbpm eclipse
jboss不是应用服务器吗,怎么出来个jbpm?rnjbpm与jboss是什么关系?在eclipse里整合jbpm怎么做?我是用jbossIDE2.0.0 还是 jbpm-3.1.2?
jboss内存溢出优化
jboss 内存溢出 优化 jboss 内存溢出 优化
jboss内存溢出原因
jboss内存溢出 jboss内存溢出 jboss内存溢出
jbpm 4.3 jboss 登录 jbpm console 密码
jbpm 4.3 jboss 登录 jbpm console 密码是多少,各位高手帮忙解决一下
JBoss多次部署内存溢出
JBoss 4.0.5GA 在若干次部署或重新部署应用程序(war、ear 等)后会马上出现 PermGen Memory Leak : Out of memory exception 内存溢出异常。 PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出...
Jboss 解决内存溢出
修改Jboss的bin目录下的run.bat/run.sh,在其加一行: set JAVA_OPTS=%JAVA_OPTS% -Xms128m -Xmx512m -XX:MaxPermSize=128m
防止JBOSS 内存溢出配置
set JAVA_OPTS=%JAVA_OPTS% -Xms1024M -Xmx4096M -XX:PermSize=512M -XX:MaxPermSize=2048M  
JBOSS内存溢出解决方案
myeclipse的JBOSS启动内存溢出问题: 解决方案: window-----&gt;preference----&gt;myeclipse enterprise wokbench----&gt;servers----&gt;jboss JDK-----------&gt;oprational java vm argments----&gt; -Xmn512m -Xmx1024m -XX:PermSize=51...
jboss出现内存溢出
我的是在EXCEL导出时出现的内存溢出,编辑run.bat ,修改以下内容,大概是在70行左右 set JAVA_OPTS=%JAVA_OPTS% -Xms512m -Xmx1024m
jboss中quartz的使用
jobss4.0以上的版本如何使用quartz,怎样配置,怎样实现多任务?谢谢rn
Quartz jboss Mbean Config
Quartz jboss Mbean Config
用JBoss jBPM管理业务流程
JBoss jBPM为设计及开发工作流和业务流程管理系统提供了一个先进的平台。由API、特定领域的语言和图形建模工具组成的框架让开发人员和业务分析人员能够使用通用平台进行沟通及操作。。。。。。。。。 入门级的资料,值得一看。
jboss jbpm 5 developer guide
A Java developer's guide to the JBoss Business Process Management framework
Business Process Management with JBoss jBPM
Business Process Management with JBoss jBPM
JBoss jBPM jPDL中文指南
JBoss jBPM jPDL中文指南 基本上是学习必读的书
如何减少JBoss内存溢出错误
如上rn
JBPM,工作流,流程审核,jbpm架包,jbpm.jar,jboss
jbpm工作流附带数据库,可跑,经过运行是可以的,欢迎小伙们交流。
JBoss JBPM 5.2.0 中遇到的几个问题及解决方法
[url]http://cutelion.blog.hexun.com/71681028_d.html[/url] 1. 问题一 (1) [color=red]Caused by: org.hibernate.HibernateException: Errors in named queries: TasksAssignedAsPotentialOwnerWithGroups, T...
jboss jbpm下的业务流程管理实例(内有文档非常)
jboss jbpm下的业务流程管理实例(内有文档非常)jboss jbpm下的业务流程管理实例(内有文档非常)
为何要学习JBoss jBPM工作流引擎课程?
[url=http://training.csdn.net/KAVA_JBOSS/index.html]Java EE规范中并不包含工作流,但是很多的企业级应用都需要工作流来支持其业务流程需求。作为最受欢迎的开源工作流引擎,JBoss jBPM提供了工作流的轻量级解决方案。根据Kava团队企业客户的反馈,JBoss jBPM和JBoss AS是最受客户重视的两种技术,同时具备这两种技能的Java EE人才备受企业欢迎。因此我们将JBoss jBPM工作流引擎课程能够为学员更上一层楼奠定坚实基础。rnrn[b]查看全文[/b][/url]
如何在JBoss seam中整合JBPM
如何在JBoss seam中整合JBPM 求指教 最好有范例或者详细的文档
关于jboss的jbpm,请高手帮忙!
你好:rn 如何在eclipse中进行jbpm模型的搭建?步骤如何?rn多谢帮忙!有重谢!
jboss jbpm问题 求高手帮忙?
jboss jbpm如何写jsp页面,如何写java类?怎么部署 怎么调用rn这个东西网上的例子实在太少 我无从下手 希望各位大哥给予rn小弟极大的帮助 如果有做过这方面的例子给小弟弟讲一下rn我的邮件是:sunguangye@fhit.com.cn 或 xiaoye--510@163.comrn谢谢 如果搞定 我弟愿意请吃饭 呵呵!!!!我人在北京
JBoss jBPM jPDL用户开发手册1.1
jBoss jBPM是一个灵活、可扩展的流程语言框架。jPDL是建立在这个通用框架只上的流程语言 jPDL有一个具有最小的依赖性和简单易用的java库,能部署在高吞吐量的j2ee集群应用服务器环境
Spring与JBoss JBPM工作流集成开发指南
Spring与JBoss JBPM工作流集成开发指南
JBPM只能用在JBOSS下面吗?
如题,我要和tomcat的应用整合,要是能在tomcat下运行就好了。。。
jbpm一定要运行在jboss下吗
jbpm一定要运行在jboss下吗?rnjbpm用到了哪些jboss中的资源?rn可以运行在tomcat下吗?rn和运行在jboss下有什么区别?rnrn谢谢!
Jboss—java.lang.OutOfMemoryError:Metaspace (解决内存溢出,扩大内存)
讲一讲故事开头吧,小菜自己觉得非常重要! 今天Jenkins构建项目后端成功,可怕的是到了服务器上部署时就失败了。开始拍错,先是怀疑Jenkins在捣乱呢,因此在本地打包发布,非常顺利的成功了。把这个war包拿到服务器上去部署,竟然失败!排除Jenkins的嫌疑了。这就跑不了是服务器在使坏了, 怎么回事儿呢也不知道如何下手了,看看Jboss的日志吧,很多有关定时器调用超时的错误提示,只有这么一个...
myeclipse tomcat或者jboss内存溢出解决方法
因为个人分别在jboss和tomcat部署项目的时候均出现了内存溢出问题,所以就解决方案做一记录,方便后期遇到同样的问题的时候查阅。当然希望能够给跟我遇到同样的问题的小伙伴做个参考,不喜勿喷哦! jboss  JDK参数:   -XX:PermSize=512M -XX:MaxPermSize=2048M -Xms2048m -Xmx2048m tomcat JDK参数: -Xms1024M ...
jbpm 案例 jbpm jbpm
jbpm使用案例,非常不错,大家都来看看吧。
相关热词 c#检测非法字符 c#双屏截图 c#中怎么关闭线程 c# 显示服务器上的图片 api嵌入窗口 c# c# 控制网页 c# encrypt c#微信网页版登录 c# login 居中 c# 考试软件