如何访问部署到IBM WebSphere 6.1的EAR的application.xml文件

时间:2010-01-11 20:59:41

标签: java websphere ear websphere-6.1

我正在将EAR文件部署到IBM WebSpehre服务器6.1 - 我希望能够访问存储在“display-name”下的部署文件中的EAR应用程序名称。通过查看相关主题的堆栈溢出帖子,我已经能够通过Java MBean API或IBM的WAS API收集这个问题 - 问题是我找不到这些API列表汇总的地方,即无法弄清楚哪个一个开始看。我可以通过查看'installedApps'目录来硬编码WAS安装位置并找到该文件,但这不是动态的。

有没有人有使用这些API的经验?还有其他方法可以动态查找已部署的EAR的显示名称吗?

编辑 - 我应该补充一点,我希望这些信息的原因是动态加载我们的属性文件 - 由以下约定“EARAppName.properties”命名 - 所以你看到有一个合理的'理由'背后的希望这个我的申请中的信息

编辑2 - 我还应该注意,这个应用程序将始终部署在WAS上 - 但是如果不是这样,那么通用非专有解决方案将是首选,但此时不是必需的。

编辑3 - 我想要完成的任务:有没有办法从应用程序代码中动态查找已部署的EAR的显示名称?

4 个答案:

答案 0 :(得分:2)

不是直接的答案,但是对于属性文件使用硬编码名称会不会更简单?毕竟,对于给定的应用程序来说,了解要加载的文件似乎是有意义的。编写代码来读取部署描述符中的display-name听起来很奇怪(特别是因为你Application Component Provider不应该依赖于Application Assembler拥有的东西。)

答案 1 :(得分:2)

如果这个目标的全部原因是读取属性文件,那么我会推荐一种不同的方法。

使用WebSphere Shared Library。

http://publib.boulder.ibm.com/infocenter/wasinfo/v6r0/index.jsp?topic=/com.ibm.websphere.nd.doc/info/ae/ae/tcws_sharedlib.html

对于每个部署的EAR,都有一个单独的目录,其中包含需要由该EAR访问的属性文件。

为包含属性文件的每个目录创建共享库条目。

从EAR创建共享库引用到所需的共享库。

但是,以下链接可能对您的方法有所帮助:

Managing applications through programming

Interface AppManagement

答案 2 :(得分:1)

我想在这里完成同样的事情。我试图在运行时找到META-INF / application.xml中的ApplicationName。

我们在Log4J File Appender中使用此AppName,根据当前正在记录的应用程序创建正确的日志文件名。我们有很多程序员和大量的App,我们需要在框架中强制执行一些约定。

我很想打电话:

InputStream in = new MyObject().getClass().getResourceAsStream(“META-INF/application.xml”);

我还尝试将类加载器更改为'PARENT_LAST / FIRST'和'Single ClassLoader',但它不起作用。

我可以在文件系统上找到相对于我的war文件的application.xml,但我不确定它是否会一直有效。

JMX Api真的是唯一的方式吗?

答案 3 :(得分:0)

这不是您的应用程序知道的,而是适用于EAR处理工具,包括应用程序服务器。