有没有办法在Oracle Commerce(ATG)中从文件系统加载组件?

时间:2014-06-26 04:20:33

标签: java atg oracle-commerce

我试图找出是否可以从文件系统加载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从文件系统中解析组件?

2 个答案:

答案 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,但请记住,这仅用于开发目的。