我需要在两个Web应用程序(A和B)之间共享java邮件消息对象。
WebApplication A获取消息并将其写入outputStream
for(int i=0;i<messagesArr.length;i++){
uid = pop3FolderObj.getUID(messagesArr[i]);
//storing messages with uid names inorder to maintain uniqueness
File f = new File("F:/PersistedMessagesFolder" + uid);
FileOutputStream fos = new FileOutputStream(f);
messagesArr[i].writeTo(fos);
fos.flush();
fos.close();
}
FileOutputStream是持久化消息对象的最佳输出流吗?是否可以将ObjectOutputStream用于消息对象持久性?
WebApplication B通过InputStream
读取消息对象FileInputStream fis = new FileInputStream("F:/MessagesPersistedFolder"+uid);
MimeMessage mm = new MimeMessage(sessionObj,fis);
如果已通过WebApplication A编写的邮件消息对象不是MimeMessage,该怎么办?如何使用输入流读取非mime消息?
MimeMessage构造函数强制sessionObj作为第一个参数?如何在WebApplicationB中获取此sessionObj?我是否必须再次使用相同的emailid,emailpassword,popserver和端口(已在WebApplication A中使用)与电子邮件服务器建立商店连接以获取此会话对象?即使获得了,此会话对象是否仍然与先前在WebApplicationA中获得的会话对象的对象相同?
由于我使用uids命名Message对象(为了保持文件名的唯一性),我如何在WebApplication A和WebApplication B之间共享这些uid? WebApplication B需要uid来访问“F:/ MessagesPersistedFolder”中存在的特定文件
请帮我解决上述问题。
答案 0 :(得分:1)
您尝试在此实施的实际功能有哪些?听起来你正试图在一个圆孔中安装一个方形挂钩(Javamail消息类)(需要在两个应用程序之间共享消息数据)。
我的建议是:
1)使用消息队列,使用javax.jms.TextMessage
将电子邮件内容从一个应用程序发送到另一个应用程序。
2)或将邮件内容保存到两个应用程序都可以访问的共享数据库中的 clob 字段。
在一天结束时,使用Javamail API发送电子邮件不是作为共享数据的方式。
同样使用序列化,这就是你要用java.io.ObjectOutputStream
做的事情,它将产生只能与特定版本的Javamail API一起使用的文件,而我怀疑Javamail的变化这些天,我不想排除可能性。