最近比较忙,工作上和生活上都是,小结下:
1.最近主要工作是接手了一些邮箱系统的开发工作,JavaMail倒是越来越熟悉了,碰到一个问题需要注意下,使用imap协议访问邮件服务器,我在本机jboss和测试环境websphere上测试正常,一放到生产环境下就出问题,后浪费我周末半天的时间检查才发现,imap默认的LOGIN登录是使用文本方式登录,不需要认证,在本机和测试环境都普通的LOGIN方式(有安全隐患的方式),在正式环境的环境变量却设置为PLAIN认证,导致登录失败,改正下:
2.过去办公自动化系统的文档显示局限在word类型,今天弄了个新的ActiveX控件,自动更新或者安装ActiveX控件,只要设置下CODEBASE即可,比如:
3.读很多开源项目,动态加载配置文件是一个常见的技巧,最近也应用了下,没什么技术含量,仅记录下。原理就是通过判断File类的lastModified()得到修改时间与内存中保存的最近修改时间进行比较,如果大于就读入配置文件重新设置配置信息:
比较值的注意的就是Class类的getResource和getResourceAsStream方法,当然也可以使用ResourceBundle
4.最近将项目中过去别人写的简单工作流引擎分析了一下,顾名思义,是很简单,采用数据库作为流程定义的存储介质,流程定义也是在web上操作,仅支持顺序、选择、并行路由,简单的或、与条件选择,因为只是作为没有复杂流程的公文流转系统,倒是符合客户要求。模型也是基于状态机。复杂的条件运算是没办法做到,没有采用BeanShell的脚本语言也是个原因。Jruby到1.0了,今天下载了,有空看看。工作流采用Petri网建模是趋势,可惜那本书我还没读完。
5.spring如何得到FactroyBean本身?我们知道实现FactroyBean接口的getObject方法,返回的就是getObject返回的bean,而如何得到FactoryBean本身呢?答案是加上一个符号&
6.SICP读到2.2节,准备等习题全做完了再一起发上来,忙,读的慢了。老婆的堂妹来了,租的房子只有一张床,只在这地方呆一年,可不想再买张床,我只好回公司宿舍!-_-
废话不说,回家了。
1.最近主要工作是接手了一些邮箱系统的开发工作,JavaMail倒是越来越熟悉了,碰到一个问题需要注意下,使用imap协议访问邮件服务器,我在本机jboss和测试环境websphere上测试正常,一放到生产环境下就出问题,后浪费我周末半天的时间检查才发现,imap默认的LOGIN登录是使用文本方式登录,不需要认证,在本机和测试环境都普通的LOGIN方式(有安全隐患的方式),在正式环境的环境变量却设置为PLAIN认证,导致登录失败,改正下:
props.setProperty(
"
mail.imap.auth.plain.disable
"
,
"
true
"
);
禁止掉认证即可,还有一些变量设置可以在j2ee api doc里查到。说到底还是对协议的不熟悉就投入开发。
2.过去办公自动化系统的文档显示局限在word类型,今天弄了个新的ActiveX控件,自动更新或者安装ActiveX控件,只要设置下CODEBASE即可,比如:
<
OBJECT id
=
"
AutoVueX
"
classid
=
"
clsid:B6FCC215-D303-11D1-BC6C-0000C078797F
"
CODEBASE
=
"
http://localhost/xxxx
"
.
/>
3.读很多开源项目,动态加载配置文件是一个常见的技巧,最近也应用了下,没什么技术含量,仅记录下。原理就是通过判断File类的lastModified()得到修改时间与内存中保存的最近修改时间进行比较,如果大于就读入配置文件重新设置配置信息:
private
static
void
checkConfigModify() {
File file = new File(MailConnectionManager. class .getResource(
MailConstants.CONFIG_FILE).getFile());
// 如果有修改,重新加载配置文件信息
if (file.lastModified() > MailConstants.last_modified) {
MailConstants.last_modified = file.lastModified();
setConfig();
}
}
private static void setConfig() {
InputStream is = null ;
try {
Properties properties = new Properties();
is = MailConnectionManager. class
.getResourceAsStream(MailConstants.CONFIG_FILE);
properties.load(is);
MailConstants.USERNAME = properties.getProperty( " username " );
MailConstants.HOST = properties.getProperty( " host " );
MailConstants.PASSWORD = properties.getProperty( " password " );
System.out
.println( " 配置文件被修改,重新加载配置文件成功! " );
StringBuffer sb = new StringBuffer( " username: " );
sb.append(MailConstants.USERNAME).append( " host: " )
.append( " host: " ).append(MailConstants.HOST);
if (MailConstants.PASSWORD != null )
sb.append( " " ).append( " password:not null " );
else
sb.append( " password:null " );
System.out.println(sb.toString());
} catch (Exception e) {
e.printStackTrace();
} finally {
if (is != null )
try {
is.close();
} catch (IOException e2) {
e2.printStackTrace();
}
}
}
File file = new File(MailConnectionManager. class .getResource(
MailConstants.CONFIG_FILE).getFile());
// 如果有修改,重新加载配置文件信息
if (file.lastModified() > MailConstants.last_modified) {
MailConstants.last_modified = file.lastModified();
setConfig();
}
}
private static void setConfig() {
InputStream is = null ;
try {
Properties properties = new Properties();
is = MailConnectionManager. class
.getResourceAsStream(MailConstants.CONFIG_FILE);
properties.load(is);
MailConstants.USERNAME = properties.getProperty( " username " );
MailConstants.HOST = properties.getProperty( " host " );
MailConstants.PASSWORD = properties.getProperty( " password " );
System.out
.println( " 配置文件被修改,重新加载配置文件成功! " );
StringBuffer sb = new StringBuffer( " username: " );
sb.append(MailConstants.USERNAME).append( " host: " )
.append( " host: " ).append(MailConstants.HOST);
if (MailConstants.PASSWORD != null )
sb.append( " " ).append( " password:not null " );
else
sb.append( " password:null " );
System.out.println(sb.toString());
} catch (Exception e) {
e.printStackTrace();
} finally {
if (is != null )
try {
is.close();
} catch (IOException e2) {
e2.printStackTrace();
}
}
}
比较值的注意的就是Class类的getResource和getResourceAsStream方法,当然也可以使用ResourceBundle
4.最近将项目中过去别人写的简单工作流引擎分析了一下,顾名思义,是很简单,采用数据库作为流程定义的存储介质,流程定义也是在web上操作,仅支持顺序、选择、并行路由,简单的或、与条件选择,因为只是作为没有复杂流程的公文流转系统,倒是符合客户要求。模型也是基于状态机。复杂的条件运算是没办法做到,没有采用BeanShell的脚本语言也是个原因。Jruby到1.0了,今天下载了,有空看看。工作流采用Petri网建模是趋势,可惜那本书我还没读完。
5.spring如何得到FactroyBean本身?我们知道实现FactroyBean接口的getObject方法,返回的就是getObject返回的bean,而如何得到FactoryBean本身呢?答案是加上一个符号&
factory.getBean(
"
&TestFactoryBean
"
);
6.SICP读到2.2节,准备等习题全做完了再一起发上来,忙,读的慢了。老婆的堂妹来了,租的房子只有一张床,只在这地方呆一年,可不想再买张床,我只好回公司宿舍!-_-
废话不说,回家了。