`

JBPM的邮件发送实例

    博客分类:
  • JBPM
阅读更多
用MDeamon作为本地的邮件服务器,发送邮件测试

mySendEmail.jpdl.xml
<?xml version="1.0" encoding="UTF-8"?>

<process name="mySendEmail" xmlns="http://jbpm.org/4.4/jpdl">
	<start g="57,45,48,48" name="start1">
		<transition g="-57,-27" name="to send rectify note" to="发信" />
	</start>
	<mail g="281,50,115,45" language="juel" name="发信">
		<to addresses="lu@test.com" />
		<cc groups="innerparty" users="#{cc_user}" />
		<bcc groups="thinkpol" />
		<subject>rectify ${newspaper}</subject>
		<text>${newspaper} ${date} reporting bb dayorder doubleplusungood
			refs unpersons 中文信件 fullwise upsub antefiling</text>
		<attachments>
			<attachment url='http://www.george-orwell.org/1984/3.html' />
			<attachment resource='test.html' />
			<attachment file='d:\\AppConfig.xml' />
 		</attachments>
	</mail>
</process>

 
public class SendMailMain {
	// protected static String deploymentId;
	protected static ProcessEngine		processEngine				= null;
	protected static RepositoryService	repositoryService			= null;
	protected static ExecutionService	executionService;
	protected static ManagementService	managementService;
	protected static TaskService		taskService;
	protected static HistoryService		historyService;
	protected static IdentityService	identityService;

	public ProcessInstance				processInstance				= null;
 
	private static String				processDefinitionKey		= "mySendEmail";
	private static String				processDefinitionVersion	= "1";
	private static String				processDefinitionId			= processDefinitionKey + "-" + processDefinitionVersion;
	private static Map<String, String>	processSessionParams		= new HashMap<String, String>();

	/**
	 * 以请假流程为例,进行工作流实例
	 * 
	 * @param args
	 */
	public static void main(String[] args) {

		SendMailMain demo = new SendMailMain();

		// 1 初始化工作流环境
		initialize();

		// 2 部署工作流
		demo.deployProcess(true, "mySendEmail.jpdl.xml");

		// 3 预设流程参数
		demo.preDef4Process();

		// 4 工作流定义实例化
		demo.startProcess(processDefinitionKey, processSessionParams);
	}

	/**
	 * 初始化流程引擎
	 */
	protected static synchronized void initialize() {
		if (processEngine == null) {
			processEngine = Configuration.getProcessEngine();

			repositoryService = processEngine.get(RepositoryService.class);
			executionService = processEngine.getExecutionService();
			historyService = processEngine.getHistoryService();
			managementService = processEngine.getManagementService();
			taskService = processEngine.getTaskService();
			identityService = processEngine.getIdentityService();
		}
	}

	/**
	 * 部署流程文件
	 * 
	 * @param isRebulid
	 *            是否重建流程定义
	 * @param pdlFile
	 */
	public void deployProcess(boolean isRebulid, String pdlFile) {
		URL url = this.getClass().getResource(pdlFile);
		if (url == null) {
			System.err.println("未找到流程定义文件【" + pdlFile + "】");

		} else {
			if (isRebulid) {
				// 首次建立流程时获取流程ID,以便以后重复使用
				repositoryService.createDeployment().addResourceFromUrl(url).deploy();
			} else {
				// 重用流程: 使用processDefinitionId初始化repositoryService
				repositoryService.getStartActivityNames(processDefinitionId);
			}
		}
	}

	/**
	 * 由流程定义生成流程实例,保存在processInstance 变量中。
	 * 
	 * @param pdKey
	 *            流程定义标识
	 * @param envParams
	 *            流程启动参数
	 */
	protected void startProcess(String pdKey, Map<String, ?> envParams) {
		// 待环境参数,启动流程实例:启动对指定流程图的升级
		processInstance = executionService.startProcessInstanceByKey(pdKey, envParams);
	}

	/**
	 * 预设流程中将使用的参数
	 */
	public void preDef4Process() {
		// 创建jbpm用户
		identityService.createUser("qian", "钱", null, "qian@test.com");
		identityService.createUser("zhu", null, "朱", "zhu@test.com");
		identityService.createUser("wang", null, "王", "wang@test.com");
		identityService.createGroup("thinkpol");
		identityService.createGroup("innerparty");
		identityService.createMembership("qian", "innerparty");
		identityService.createMembership("zhu", "thinkpol");
		identityService.createMembership("wang", "thinkpol");

		// ----------- 启动流程前的会话参数准备 -------------
		// cc_user 变量填入参数
		processSessionParams.put("cc_user", "qian");
		processSessionParams.put("newspaper", "newspap新闻er111");
		processSessionParams.put("date", "2010-2-2");

	}

}



----- 关键步骤 ----
在MDeamon中需要设置RFC不检查,否则将出现如下错误
15:39:32,046 INF | [DefaultCommandService] exception while executing command org.jbpm.pvm.internal.cmd.StartProcessInstanceInLatestCmd@196bac4
org.jbpm.api.JbpmException: could not send email: javax.mail.internet.MimeMessage@15d8d75
at org.jbpm.pvm.internal.email.impl.MailSessionImpl.send(MailSessionImpl.java:60)
at org.jbpm.jpdl.internal.activity.MailActivity.perform(MailActivity.java:46)

Caused by: com.sun.mail.smtp.SMTPSendFailedException: 554 Message is not RFC compliant
导致邮件发送失败
MDeamon→菜单→设置(S)→默认域/服务器→服务器 
checbox:拒绝不符合RFC的邮件 (不选择此功能)
1
0
分享到:
评论

相关推荐

    jbpm4请假实例代码

    5. **监听器和事件处理**:jbpm4支持监听器机制,可以监听流程中的特定事件,如任务创建、完成等,然后执行相应的回调逻辑,比如发送通知邮件。 6. **工作流引擎的使用**:jbpm4提供API来启动流程实例、分配任务、...

    jbpm4.4 邮件发送demo

    在这个"jbpm4.4 邮件发送demo"中,我们可以推测作者通过编写一个简单的应用程序,展示了如何在jbpm4.4环境中集成邮件发送功能。这通常是为了实现自动化的任务通知,例如当工作流程中的某个事件发生时,系统可以自动...

    JBPM5请假实例,完整版

    在这个"JBPM5请假实例,完整版"中,我们将深入探讨如何利用JBPM5来实现一个具体的请假流程,以及在这个过程中可能遇到的关键配置问题。 首先,我们要理解JBPM5的核心功能。JBPM5提供了一个强大的流程建模工具,它...

    jbpm开发实例详解

    你可以利用jbpm的监听器(listener)和事件(event)机制来响应流程中的特定事件,比如在任务完成后发送通知邮件。此外,jbpm还支持流程变量的持久化,这意味着即使服务器重启,流程的状态也能恢复。 总结来说,...

    深入浅出JBPM 采购实例

    这需要编写Java代码,并在流程定义中配置相应的服务任务,以在特定流程节点触发邮件发送。 最后,jbpm-web-test可能是一个包含Web界面和测试脚本的项目,用于与JBPM服务器交互,模拟用户操作,启动流程实例,查询...

    深入浅出JBPM最新源码第七章-报销实例

    通过这个报销实例,读者不仅能学习到如何使用JBPM构建业务流程,还能加深对流程管理、数据库操作、Java编程以及邮件服务的理解。在实际应用中,你还可以根据需求扩展功能,比如加入权限控制、优化审批策略等,进一步...

    JBPM4 开发文档 实例 流程

    7. **活动(Action)**:预设的程序行为,如自动发送邮件,是流程中的自动操作。 **数据库表结构** - **JBPM4_DEPLOYMENT**:存储流程部署信息。 - **JBPM4_DEPLOYPROP**:记录流程部署的属性。 - **JBPM4_...

    jbpm4.4的开发实例

    5. **服务任务**: 将流程中的某些任务交给外部服务执行,如调用数据库查询、发送邮件等。 学习这个实例,你需要掌握Eclipse IDE的使用,理解BPMN 2.0模型,熟悉Java和Spring框架,以及基本的Web开发知识。对于初学...

    jbpm4.3 请假流程实例示例

    - **工作项管理器(Work Item Handler)**:处理流程中的特定任务,如发送邮件通知、调用外部服务等。 - **持久化存储(Persistence)**:保存流程实例和变量的状态,确保流程的可恢复性。 - **监控和报表...

    JBPM范例 可以运行 简单易懂 快速掌握JBPM

    7. **服务整合**:JBPM可以与其他系统和服务集成,通过调用外部服务实现流程中的复杂操作,如发送邮件、调用API等。 在“jbpm”这个压缩包中,可能包含了以下内容: 1. **示例项目**:这些项目展示了如何配置和...

    jbpm开发JAR包

    8. **jbpm-workitems**: 提供了标准工作项处理器,如邮件发送、HTTP请求等,这些都是业务流程中常见的操作。 9. **drools-core** 和 **drools-compiler**: 这些是jbpm的规则引擎组件,允许你在流程中集成决策逻辑,...

    jbpm5完整的例子

    这为实现自定义行为提供了可能,例如发送通知邮件、日志记录等。 8. **工作流的持久化**:jbpm5将流程实例的状态持久化到数据库,确保即使在系统重启后也能恢复流程。理解数据模型和事务管理对于高效地设计和优化...

    jbpm3.2 .jar

    mail文件夹可能包含了与发送电子邮件相关的类和配置,这在jbpm中可能是用来实现流程中自动发送通知或确认邮件的功能。jbpm可以通过集成JavaMail API来发送邮件,这在业务流程中常用于通信和通知环节,确保相关人员...

    JBPM4 java源代码分包详解JBPM4

    7. **org.jbpm.pvm.internal.email**: 支持电子邮件功能,包括SPI接口和实现类,如`AddressResolver`、`MailProducer`和`MailSession`,用于自定义邮件发送。 8. **org.jbpm.pvm.internal.env**: 包含IoC...

    jbpm3.2.3数据库表的详细说明

    流程动作表存储了流程执行过程中可能涉及到的动作,比如发送邮件、调用服务等,这些动作可以在特定节点上执行。 #### 1.5 JBPM_EVENT 事件表记录了流程中的事件,如信号事件、定时事件等,这些事件可以触发流程的...

    JBPM4.4 使用之配置管理

    此外,还可以配置邮件的主题、内容模板等,以便在流程执行过程中发送通知或者提醒。 3. **jbpm.hibernate.cfg.xml**: Hibernate是JBPM使用的ORM(对象关系映射)框架,用于处理数据库操作。`jbpm.hibernate.cfg....

    jbpm5资料

    这些监听器可以执行自定义逻辑,如发送通知邮件或更新其他系统。 8. **规则引擎集成**:jBPM可以与Drools规则引擎集成,实现流程中的决策逻辑。这使得业务流程可以根据条件灵活改变路径。 9. **调试和监控**:jBPM...

    jbpm4.4 简单请假流程

    - **工作流服务(WorkItemHandler)**:处理特定任务,如调用外部服务、发送邮件等。 - **任务服务(Task Service)**:负责任务的创建、分配、完成等操作。 3. **请假流程设计**: - **开始节点**:流程启动的...

    jBPM3的学习心得

    同时,它还提供了监听器(Listener)和事件(Event)机制,允许我们在特定流程节点上插入自定义逻辑,比如发送邮件通知或执行特定的服务调用。 在问题解决方面,我遇到了如何调试流程的问题。jBPM3提供了强大的日志...

    JBPM4.4所需要的包.rar

    在JBPM中,这可能用于触发基于邮件的通知或工作流步骤,比如当某个任务完成或者需要用户介入时发送提醒。 这些JAR文件的组合表明,这个压缩包是为了支持JBPM 4.4的运行环境或者开发环境准备的。开发者或系统管理员...

Global site tag (gtag.js) - Google Analytics