0

我需要在两个 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?我是否必须再次与电子邮件服务器建立具有相同电子邮件 ID、电子邮件密码、popserver 和端口(已在 WebApplication A 中使用)的存储连接才能获得此会话对象?即使获得了,这个会话对象会不会和之前在WebApplicationA中获得的会话对象保持一致?

由于我使用 uid 来命名 Message 对象(为了保持文件名的唯一性),我如何在 WebApplication A 和 WebApplication B 之间共享这些 uid?WebApplication B 需要 uid 才能访问“F:/MessagesPersistedFolder”中存在的特定文件

请帮助我解决上述问题。

4

1 回答 1

1

您在这里尝试实现的实际功能是什么?听起来您正在尝试将方形钉(Javamail 消息类)放入圆孔中(在两个应用程序之间共享消息数据的要求)。

我的建议是:

1) 使用消息队列并使用javax.jms.TextMessage.

2) 或将消息内容保存到两个应用程序都访问的共享数据库中的clob字段。

归根结底,使用 Javamail API 发送电子邮件而不是共享数据。

还使用serialization,这java.io.ObjectOutputStream将生成仅适用于特定版本的 Javamail API 的文件,虽然我怀疑这些天 Javamail 变化很大,但我不想排除这种可能性。

于 2009-06-30T08:49:05.937 回答