Java 在web应用程序之间共享消息对象

Java 在web应用程序之间共享消息对象,java,jakarta-mail,Java,Jakarta Mail,我需要在两个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:/Pers

我需要在两个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();
}
如果已经通过WebApplication A编写的邮件消息对象不是MIMessage怎么办?如何使用输入流读取非mime消息

mimessage构造函数要求sessionObj作为第一个参数?如何在WebApplicationB中获取此sessionObj?为了获得此会话对象,我是否必须再次使用相同的emailid、emailpassword、popserver和端口(已在WebApplication A中使用)与电子邮件服务器建立存储连接?即使已获取,此会话对象是否仍与WebApplicationA中首先获取的会话对象相同

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


请帮助我解决上述问题。

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

我的建议是:

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

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

在一天结束时,使用Javamail API发送电子邮件,而不是作为共享数据的手段


同样使用序列化,这是您在使用
java.io.ObjectOutputStream时要做的事情,它将生成只适用于特定版本的Javamail API的文件,尽管我怀疑Javamail最近会有多大变化,我不想排除这种可能性。

我估计这个“问题”中大约有4到5个独立的问题。我正在开发一个电子邮件客户端web应用程序,它将通过手机发送新电子邮件。在web应用程序中,有两个资源密集型类。1.MailGetter(迭代用户提供的众多EmailID并获取EmailID的电子邮件)2。MailFormatter(通过删除html标记将多部分内容解析为简单文本,html标记将发送到移动设备,该类还将下载批量附件),因此我尝试将MailGetter和MailFormatter实现为两个web应用程序,它们将位于不同的服务器中。因此,我需要在这些应用程序之间共享消息对象。我假设您希望存储“简单文本”和“附件”,在这种情况下,我倾向于定义域类并将数据存储在数据库中(这将处理两个web应用程序之间在数据上的锁争用)。然后,MailFormatter负责检索消息(使用Javamail)、转换和存储域类的实例。MailGetter的“Email for EmailID”然后成为一个查询,而不是代码中的一个迭代。结果是一个包含域类和DAO的通用jar,这两个web应用程序都使用。感谢您的回答。您能举例说明域类吗?这些课程是什么?因此,MailFormatter在从远程获取电子邮件后,会在数据库中保存电子邮件标题、简明的电子邮件正文内容和附件。MailGetter会查询数据库中最近到达的电子邮件数据。我理解得对吗?你能说明一下你的概念吗?域类通常可以从你描述中的名词中识别出来。根据您所说的,可能的候选人是EmailHeader、EmailBody和附件。每个域类应该包含一个或多个属性(可以通过getter和setter访问)和一些行为。对于每个域类,我通常会编写一个DAO,用于在数据库中读写域类的实例。域类将打包成一个jar,然后由MailGetter和MailFormatter使用。有意义吗?EmailBean带有发件人、收件人、主题、抄送、密件抄送、正文、附件名称和路径的设置器和获取器MailGetter获取电子邮件对象并解析电子邮件标题、正文和附件。创建“EmailBean”初始化setter并使用setObjToDB和getObjFromDB方法将其传递给DAO类DAO类(&I)。从MailGetter接收Obj并使用setObjToDB将其存储在DB中MailFormatter使用DAO的getObjFromDB获取对象并格式化发送到mobile的内容我理解得对吗?由于MailGetter和MailFormatter在单独的服务器上运行,我如何在它们之间共享DAO(commons.jar)?
FileInputStream fis = new FileInputStream("F:/MessagesPersistedFolder"+uid);
MimeMessage mm = new MimeMessage(sessionObj,fis);