【问题标题】:Is there any way to load a component from filesystem in Oracle Commerce(ATG)?有没有办法从 Oracle Commerce(ATG) 中的文件系统加载组件?
【发布时间】:2014-06-26 04:20:32
【问题描述】:

我正在尝试确定我们是否可以从文件系统加载 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 从文件系统中解析组件?

【问题讨论】:

    标签: java atg oracle-commerce


    【解决方案1】:

    您应该能够将包含组件类的 JAR 添加到应用程序服务器实例使用的 CLASSPATH 系统变量中。

    然后在组件配置中像往常一样定义实现类

    $class=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
    

    【讨论】:

    • 好主意。我会试一试。我们也可以使用文件夹而不是罐子吗?
    • 可以,不用设置classpathFiles属性,可以用文件夹名/s设置jarDirectories属性
    【解决方案2】:

    我认为您正在寻找 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,但请记住,这仅用于开发目的。

    【讨论】:

    • 嗨帕特里克,谢谢。但是我们已经从文件夹中加载了配置,但是它如何帮助我们加载组件呢?就像如果我们扩展通用服务并创建一个组件并且不想将其包含在 ear 文件中,不仅是属性文件,还有组件的类文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    • 2014-10-20
    • 1970-01-01
    相关资源
    最近更新 更多