Jakarta ee 将数据从无状态会话bean移动到文件

Jakarta ee 将数据从无状态会话bean移动到文件,jakarta-ee,jboss,cgi,ejb,xml-rpc,Jakarta Ee,Jboss,Cgi,Ejb,Xml Rpc,我有一个会话bean,它从数据库检索数据并格式化数据。在不久的将来,它将需要调用一个实用程序(包装XML-RPC)来转发数据,但现在,我需要执行一个命令行脚本,该脚本将文件作为输入(即“command-f filename”)。我真的不喜欢从会话bean编写文件的想法(JBoss会让我这么做吗?),我一直在尝试打开CGI脚本的URL,但这似乎有些过分。那么,什么是最干净、最简单的方法将这些数据放入文件中,以便调用命令 其他信息: 我们的服务器是JBoss,它不是集群服务器 数据可能相当大,可能

我有一个会话bean,它从数据库检索数据并格式化数据。在不久的将来,它将需要调用一个实用程序(包装XML-RPC)来转发数据,但现在,我需要执行一个命令行脚本,该脚本将文件作为输入(即“command-f filename”)。我真的不喜欢从会话bean编写文件的想法(JBoss会让我这么做吗?),我一直在尝试打开CGI脚本的URL,但这似乎有些过分。那么,什么是最干净、最简单的方法将这些数据放入文件中,以便调用命令

其他信息:

  • 我们的服务器是JBoss,它不是集群服务器
  • 数据可能相当大,可能包含10000条XML编码的数据(如果绝对必要,可以将其分成更小的块)
蒂亚,
Ilane

这里有一个相对简单的方法将内容放入文件

在会话bean中,实现一个类似以下内容的业务方法:

public Object getContent(String fileName, <Other Args>) {
  // Get content
  // write to a byte array
  byte[] content = ......;
  return new ByteArrayFile(content, fileName);
}
这是一个简化的(即不是远程EJB调用)示例,演示如何创建ByteArrayFile,将其序列化,然后将其作为文件读回:

public static void main(String[] args) {
    ByteArrayFile baf = new ByteArrayFile("Hello World".getBytes());
    try {
        ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
        ObjectOutputStream oos = new ObjectOutputStream(baos);
        oos.writeObject(baf);
        oos.flush();
        ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
        ObjectInputStream ois = new ObjectInputStream(bais);
        File file = (File)ois.readObject();
        System.out.println("File:" + file.getAbsolutePath() + "  Size:" + file.length());
    } catch (Exception e) {
        e.printStackTrace(System.err);
    }
}
结果是:

文件:/tmp/ByteArrayFile2790187442947455193。文件大小:11


实际上,会话bean完全可以直接编写文件。严格的EJB限制不是由JBoss强制实施的,而是为提供可移植性保证而存在的,您可能并不关心这些。但是,上述方法的好处是,远程客户端可以远程调用调用,但可以在本地获取文件。

是会话bean使用文件调用命令——通过调用另一个现有的无状态会话bean,该会话bean使用Runtime.getRuntime().exec运行所需的命令(是的,这可能也是不允许的,是吗?但功能已经存在。遗留软件-一定会喜欢它!)所以商业方法应该是“sendContent()”。只有两个EJB才知道该文件。由于我们没有将该对象传递给远程客户端,何时/如何对该对象进行反序列化。是否会在将第二个会话bean的方法作为参数调用时进行反序列化?
public static void main(String[] args) {
    ByteArrayFile baf = new ByteArrayFile("Hello World".getBytes());
    try {
        ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
        ObjectOutputStream oos = new ObjectOutputStream(baos);
        oos.writeObject(baf);
        oos.flush();
        ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
        ObjectInputStream ois = new ObjectInputStream(bais);
        File file = (File)ois.readObject();
        System.out.println("File:" + file.getAbsolutePath() + "  Size:" + file.length());
    } catch (Exception e) {
        e.printStackTrace(System.err);
    }
}