【问题标题】:sharing message object between web applications在 Web 应用程序之间共享消息对象
【发布时间】:2010-11-06 22:25:01
【问题描述】:

我需要在两个 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 中使用)的存储连接才能获得此会话对象?即使获取到了,这个session对象会不会和之前在WebApplicationA中获取到的session对象一样?

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

请帮助我解决上述问题。

【问题讨论】:

  • 我认为这个“问题”中大约有 4 或 5 个单独的问题

标签: java jakarta-mail


【解决方案1】:

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

我的建议是:

1) 使用消息队列并使用javax.jms.TextMessage 将电子邮件内容从一个应用程序发送到另一个应用程序。

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

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

还使用 序列化,这就是您使用 java.io.ObjectOutputStream 所做的事情,将生成仅适用于特定版本的 Javamail API 的文件,虽然我怀疑 Javamail 会改变这些天,我不想排除这种可能性。

【讨论】:

  • 我正在开发一个电子邮件客户端 Web 应用程序,该应用程序将通过手机与新电子邮件进行通信。在 Web 应用程序中,有 2 个资源密集型课程。 1.MailGetter(遍历用户提供的众多emailids并获取emailids的电子邮件)2.MailFormatter(通过删除将发送到移动设备的html标签将Multipart内容解析为简单文本,并且该类还下载批量附件)所以我'我试图将 MailGetter 和 MailFormatter 实现为 2 个 Web 应用程序,它们将位于不同的服务器中。所以我需要在这些应用程序之间共享消息对象。
  • 我假设您想要存储“简单文本”和“附件”,在这种情况下,我倾向于定义域类并将数据存储在数据库中(这需要照顾两个网络应用程序之间的数据锁争用)。然后,MailFormatter 负责检索消息(使用 Javamail)、转换和存储域类的实例。 MailGetter 的“emails for emailids”然后成为查询,而不是代码中的迭代。结果是一个包含域类和 DAO 的公共 jar,两个 Web 应用程序都使用它。
  • 感谢您的回答。您能说明一下域类吗?这些课程是什么?因此 MailFormatter 在从远程获取电子邮件后将电子邮件标题、简洁的电子邮件正文内容和附件保存在数据库中。MailGetter 查询数据库以获取最近到达的电子邮件数据。我理解对了吗?你能说明一下你的概念吗?
  • 域类通常可以从您描述中的名词中识别出来。根据您所说,可能的候选人是 EmailHeader、EmailBody 和 Attachment。每个域类都应该包含一个或多个属性(可以通过 getter 和 setter 访问)和一些行为。对于每个域类,我通常会编写一个 DAO,用于在数据库中读取和写入域类的实例。域类将被打包到一个 jar 中,然后由 MailGetter 和 MailFormatter 使用。有意义吗?
  • EmailBean——带有用于 From、To、Subject、CC、BCC、正文、附件名称和路径的 Setter 和 Getter & 初始化 Setters 并将其传递给 DAO 类 DAO 类 - 使用 setObjToDB 和 getObjFromDB 方法。从 MailGetter 接收 Obj 并使用 setObjToDB MailFormatter 将其存储在 DB 中 - 使用 DAO 的 getObjFromDB 获取对象并格式化发送到移动设备的内容我理解正确吗?由于 MailGetter 和 MailFormatter 在单独的服务器上运行,我如何在它们之间共享 DAO(commons.jar)?
猜你喜欢
  • 1970-01-01
  • 2010-12-10
  • 2012-12-04
  • 2015-04-04
  • 2013-05-02
  • 1970-01-01
  • 2012-12-25
  • 1970-01-01
相关资源
最近更新 更多