我试图找出是否可以从文件系统加载oracle商业组件。通常我们将所有代码组装成一个ear文件并进行部署,但是,我有一个要求,我必须在文件系统中存储一些组件,而不是将它们与ear文件一起打包。
我知道我们可以使用URLClassloader加载一个类,如下所示,
File classDir = new File("A:\\LodeeModule\\classes");
URL[] url = { classDir.toURI().toURL() };
ClassLoader loader = new URLClassLoader(url);
for (File file : classDir.listFiles()) {
String filename = file.getName().replace(".class", "");
loader.loadClass("com.buddha.testers." + filename).getConstructor().newInstance();
}
但是我们如何才能在以后的时间点使用Nucleus解决的组件呢?有没有办法指示Nucleus从文件系统中解析组件?
答案 0 :(得分:1)
您应该只能将包含组件类的JAR添加到应用程序服务器实例使用的CLASSPATH系统变量中。
然后在组件配置中,像往常一样定义实现类
$类= some.class.path.class
如果您在较新版本的ATG(11.0+)上使用Jboss EAP 6+,您可能会遇到更多问题,由于其类加载器,您必须跳过更多的环节
https://docs.jboss.org/author/display/AS7/Class+Loading+in+AS7
基本上你需要定义一个包含jar文件的jboss模块,并定义ear"模块"之间的依赖关系。以及包含您的类的模块。
或者,您可以定义一个ClassLoaderService来管理JAR的类
为此,您需要定义一个新的ClassLoaderService,因此创建一个新的属性文件,就像使用任何其他组件一样。
/my/custom/ClassLoaderService.properties
$class=atg.nucleus.ServicesManifestClassLoaderService
$description=Custom Class Loader Service.
# The files to go into the classpath of the classloader
classpathFiles=\
/path/to/my/jars/lib/someClasses.jar,\
/path/to/my/jars/lib/someOtherClasses.jar
loggingDebug=false
然后在实际组件中,您需要这些类来添加此行;
$classloader=/my/custom/ClassLoaderService
答案 1 :(得分:0)
我认为您正在寻找atg.dynamo.data-dir属性。如果您指定属性dynamo将查看"服务器配置"的位置。或属性文件。这允许您将配置与ear文件分开。
注意:你仍然可以在耳中包含配置,我相信它们仍然具有优先权
通常在启动服务器时指定,例如:
run.sh -c <your server> -Datg.dynamo.data-dir=/data/something/serverconfigs
此功能基本上没有记录,但很多人都知道。 见http://docs.oracle.com/cd/E24152_01/Platform.10-1/ATGPlatformProgGuide/html/s0302developmentmodeandstandalonemode01.html
编辑: 我误解了你原来问的问题。您可能希望查看ATG提供的disposable class loader,但请记住,这仅用于开发目的。