`
grandsea
  • 浏览: 52357 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

JavaMail-JBPM4

阅读更多
Java发邮件的用户名有时候不能使用带后缀的用户名。

使用jbpm时jbpm.mail.preperties有以下几组配置

#Gmail
#mail.smtp.host=smtp.gmail.com
#mail.smtp.port=25
#mail.from=herosea &at gmail &dot com
#mail.debug=true
#mail.smtp.starttls.enable=true
#mail.smtp.auth=true


如果设置了mail.smtp.user不设mail.from则发送的地址设为 ${mail.smtp.user}@机器名。
mail.from不是可以验证的邮件地址时会报错。
mail.debug=true在调试时可以看到准确的原因。


jbpm.default.cfg.xml中添加如下段
<mail-session>
<mail-server>
      	<!-- address-filter>
      		<include>.+@.company.com.cn</include>
      	</address-filter-->
        <session-properties resource="jbpm.mail.properties" />
        <authenticator class="com.impl.TestAuthenticator">
	      <field name="userName"><string value="yourname"/></field>
	      <field name="password"><string value="*****"/></field>
	    </authenticator>
      </mail-server>
</mail-session>


TestAuthenticator.java文件
package com.service.impl;

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;

/**
 * @author test
 * 简单的实现认证接口
 */
public class TestAuthenticator extends Authenticator {
	
	private String userName;

	private String password;
	
	private PasswordAuthentication passwordAuthentication;
	
	public TestAuthenticator() {
		super();
		// TODO Auto-generated constructor stub
	}

	public TestAuthenticator(String userName, String password) {
		setUserName(userName);
		setPassword(password);
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	protected PasswordAuthentication getPasswordAuthentication() {
		if(passwordAuthentication == null){
			passwordAuthentication = new PasswordAuthentication(userName, password);
		}
		return passwordAuthentication;
	}
}


配置的工作流
<mail g='200,98,90,50' name='测试邮件节点'>
    <to addresses='grandsea2010@gmail.com'/>
    <subject>Hello</subject>
    <html>没有什么原因啊!html</html>
    <transition g='306,123;306,59:0,-1' to='人工 1'/>
  </mail>

发出的邮件正文为乱码。
可以修改jbpm的源码
org.jbpm.pvm.internal.email.impl.MailProducerImpl
将 htmlPart.setContent(html, "text/html"); 改为 htmlPart.setContent(html, "text/html;charset=gbk");

<mail-session>貌似不能出现在两个jbpm配置文件中

jbpm4的流程文件没有定义格式是因为可以完全自定义,在解析的时候可以复用JpdlParser中的邮件解析,定时器解析等等。

jbpm4的事件模型还看不明白。
自定义MailProducer很麻烦,mailTemplate尤其是inline的不会自动注入到MailProducer中。

TaskRemind
这个每隔一段时间提醒一次的事件原理是这样的。
在ObservableElementImpl上获得remind事件 event,
新建一个MailListener叫eventListener,并将其和remind事件关联event.createEventListenerReference(eventListener)。
scopeElement.createTimerDefinition()创建一个定时器timerDefinition,从xml中获取定时器的详细配置。
timerDefinition.setEventName(Event.REMIND)定时触发remind事件。

正则表达式的上下文由多个上下文组成
ExecutionContext是默认最高优先级的上下文,可以自定义一个放在其前面。MailListener就定义了TaskContext至于其前面。

jbpm内部定义的很多接口是给其他流程定义语言准备的,要换的话可能需要整套都换掉。(猜测)

可能正则表达式的Context也是jbpm的context。(猜测)

发短信接口实现(猜想):
仿照org.jbpm.pvm.internal.wire.binding.MailTemplateBinding解析一个短信模板。
仿照邮件包org.jbpm.pvm.internal.email.spi中的接口定义发短信的3个接口。

自定义binding要注意的两个方面:
jbpm.user.wire.binding.xml文件在src目录下,不在任何包内。
集成WireDescriptorBinding的类需要一个没有参数的构造函数。
我为发短信定义了mobile-template标签,他的name属性的取值不能和mail-template的一样,否则会出错。说是上下文中找不到我模板的注册类。
分享到:
评论
3 楼 slayerliu001 2012-06-14  
博主你好~
<field name="userName"><string value="yourname"/></field> 
  <field name="password"><string value="*****"/></field> 

这两行里面的value =后面的是什么的用户名和密码啊?
2 楼 grandsea 2012-03-20  
蓝色飞扬 写道
hundsun搞工作流的?

暴露了,修改下。
1 楼 蓝色飞扬 2012-03-09  
hundsun搞工作流的?

相关推荐

Global site tag (gtag.js) - Google Analytics