当前位置 : 主页 > 网络编程 > 其它编程 >

java–在EJB中打开文件

来源:互联网 收集:自由互联 发布时间:2023-07-02
我知道通常不允许在EJB中访问本地文件(使用java.io):但是,我有一个EJB,它必须打开Excel文件并使用apache.poi库进行编辑.如果我做这样的事情:@Statel 我知道通常不允许在EJB中访问本地文件
我知道通常不允许在EJB中访问本地文件(使用java.io):但是,我有一个EJB,它必须打开Excel文件并使用apache.poi库进行编辑.如果我做这样的事情:@Statel

我知道通常不允许在EJB中访问本地文件(使用java.io):但是,我有一个EJB,它必须打开Excel文件并使用apache.poi库进行编辑.如果我做这样的事情:

@Statelesspublic class MyEJB {public void editExcel(){...InputStream in = MyEJB.class.getClassLoader().getResourceAsStream("/xls/ExcelFile.xls"); final Workbook generatedExcel = new XLSTransformer().transformXLS(in, beans);...} }

文件系统结构:

MyEar.ear--my-ejb.jar---com-----company-------ejbs----------MyEJB.class---xls-----ExcelFile.xls

在这种情况下,我将获得一个ZipFile $ZipFileInputStream实例(ZipFileInputStream的私有内部类),XLSTransformer将抛出IllegalArgumentException(“您的InputStream既不是OLE2流也不是OOXML流”),因为它需要一个表示ExcelFile的InputStream. xls并获取代表整个my-ejb.jar的流.

我的问题:你知道如何解决这种情况吗?在EJB中访问文件的最佳实践是什么?

非常感谢!

解决方法:

我还必须从EE容器中返回一次修改后的XLS模板.虽然我总是将这些资源视为WAR / EAR部署的一部分,但作为客户管理的可配置实体.

因此,一个简单的解决方案可能是将模板保存在配置目录中,并提供它的路径&将JNDI命名为您的应用程序.

您还可以使用JNDI表示表示excel文件的更复杂的数据类型,因此您的EJB代码不会直接进行文件操作.

您可以在这里找到一些指针(对于JBoss JNDI AS):http://middlewaremagic.com/jboss/?p=1690

网友评论