jboss 下 部署 多个应用程序的资源问题,急,谢谢!!

我需要在jboss下部署多个应用,但是每个应用都使用了大量的配置文件(我知道j2ee不推荐使用配置文件,可惜是历史遗留,没办法),每个应用相应的配置文件都是采用同样的文件名,都是用类名,包名完全相同的类来读取相应的配置文件,以前的程序是每个应用单独的进程,没有任何问题。

现在如果要将他们部署到jboss下,就会产生classloader问题,我会采用classloader来load文件 Filestream,但是jboss对于同一个类只会在应用程序中load一遍,我就不能采用相对于classloader的方式来区别不同的配置文件。

如果采用jndi,可能改动量太大,而且也绑定了j2ee平台(我不是说j2ee不好,而是留给自己更多的选择)

现在我想用把sar放在ear中,同时指定reposity load ,在ear scope 搜索类,应该可以避免这个问题,但是不知道这个application.xml怎么写,因为sar是jboss规范,而application 的dtd是sun提供的


多谢了!!!

我曾经碰到这个问题,所以,我现在尽量使用数据库,不使用文件了,以前我是个文件偏执狂,吃了教训。

不能将配置文件转到一个数据表里吗?更改量应该不大。

不赞成用SAR,太依赖JBoss了。

> 我曾经碰到这个问题,所以,我现在尽量使用数据库,不使用
> 募耍郧拔沂歉鑫募纯瘢粤私萄怠?>
> 不能将配置文件转到一个数据表里吗?更改量应该不大。
>
> 不赞成用SAR,太依赖JBoss了。

这个问题后来我是把ear放在sar中来解决。
之所以使用sar,是因为j2ee中缺少生命周期的支持,除非使用ejb组件。使用sar也只是添加一些配置文件,对代码没有影响。

在sar中也可以直接加入jboss-app.xml 中所制定的 reposite 属性,来让jboss强行在这个sar包范围内使用单独的classloader,这样可以在一定程度上解决这个问题。

是个好思路,好。

现在又有新问题了 :(

在加入loader-repository属性之后,我使用普通的java client调用部署在jboss服务端启动的ha-rmi服务.

熟悉jboss classloader机制的朋友也许知道,对于jboss的classloader,每个unifiedClassloader 对应一个loader-repository,而每个loader-repository可以包含多个classloader,在加入loader-repository属性之后,业务类的classloader和jboss 容器类的 classloader就对应不同的repository,所以容器类的classloader对于业务类已经load的类是不可见的。

在我的rmi远程方法中,参数是一个业务类,那么问题就产生了,在jboss的invacation这个类Marshall的过程中,需要得到每一个参数的类定义,而这时jboss使用的是容器类的classloader,在自身的路径和对应的repository中找不到对应的业务类的定义,所以就报出了一个class not found exception.


// 在此输入java代码

14:40:05,851 ERROR [STDERR] java.lang.ClassNotFoundException: No ClassLoaders found for: *********
14:40:05,852 ERROR [STDERR] at org.jboss.mx.loading.LoadMgr3.beginLoadTask(LoadMgr3.java:161)
14:40:05,853 ERROR [STDERR] at org.jboss.mx.loading.UnifiedClassLoader3.loadClassImpl(UnifiedClassLoader3.java:169)
14:40:05,853 ERROR [STDERR] at org.jboss.mx.loading.UnifiedClassLoader3.loadClass(UnifiedClassLoader3.java:123)
14:40:05,854 ERROR [STDERR] at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
14:40:05,854 ERROR [STDERR] at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
14:40:05,854 ERROR [STDERR] at java.lang.Class.forName0(Native Method)
14:40:05,855 ERROR [STDERR] at java.lang.Class.forName(Class.java:141)
14:40:05,855 ERROR [STDERR] at org.jboss.invocation.MarshalledValueInputStream.resolveClass(MarshalledValueInputStream.java:101)
14:40:05,855 ERROR [STDERR] at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1513)
14:40:05,856 ERROR [STDERR] at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1435)
14:40:05,856 ERROR [STDERR] at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1626)
14:40:05,856 ERROR [STDERR] at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1274)
14:40:05,857 ERROR [STDERR] at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1603)
14:40:05,857 ERROR [STDERR] at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1271)
14:40:05,858 ERROR [STDERR] at java.io.ObjectInputStream.readObject(ObjectInputStream.java:324)
14:40:05,858 ERROR [STDERR] at org.jboss.invocation.MarshalledValue.get(MarshalledValue.java:78)
14:40:05,858 ERROR [STDERR] at org.jboss.invocation.MarshalledInvocation.getArguments(MarshalledInvocation.java:346)
14:40:05,859 ERROR [STDERR] at org.jboss.ha.framework.server.HARMIServerImpl.invoke(HARMIServerImpl.java:221)
14:40:05,859 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
14:40:05,859 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
14:40:05,860 ERROR [STDERR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
14:40:05,860 ERROR [STDERR] at java.lang.reflect.Method.invoke(Method.java:324)
14:40:05,860 ERROR [STDERR] at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:261)
14:40:05,861 ERROR [STDERR] at sun.rmi.transport.Transport$1.run(Transport.java:148)
14:40:05,861 ERROR [STDERR] at java.security.AccessController.doPrivileged(Native Method)
14:40:05,861 ERROR [STDERR] at sun.rmi.transport.Transport.serviceCall(Transport.java:144)
14:40:05,862 ERROR [STDERR] at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460)
14:40:05,862 ERROR [STDERR] at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701)
14:40:05,862 ERROR [STDERR] at java.lang.Thread.run(Thread.java:534)


不知道大家有什么好的建议,多谢了!

忘了说明平台:

redhat 9,jdk 1.4.2 jboss323


不好意思

再次感谢!