Override UiLabels / Properties through tenant specific database
---------------------------------------------------------------
Key: OFBIZ-4240
URL: https://issues.apache.org/jira/browse/OFBIZ-4240
Project: OFBiz
Issue Type: Improvement
Components: framework
Affects Versions: SVN trunk
Reporter: PR
Priority: Minor
UtilProperties being in base gets complied and loaded first ahead of both
entity and service modules. So, as such the service and entity classes won't be
available there directly. Now the attempt is to have a embedded service call
within the UtilProperties.getBundle(.....) method right after the lines below
Properties newProps = getProperties(resource, candidateLocale);
if (UtilValidate.isNotEmpty(newProps)) {
// The last bundle we found becomes the parent
of the new bundle
The idea is that by default a set of properties would be loaded from the
UiLabels.xml files. However, right after we should be able to call a service
to override any labels (in newProps) passing the newProps as an argument.
So far, so good ?
Next the problem... How to configure a service call? Find the below usage in
base module
ClassLoader loader = Thread.currentThread().getContextClassLoader();
Iterator<Init> cachedClassLoaders = ServiceLoader.load(Init.class,
loader).iterator();
while (cachedClassLoaders.hasNext()) {
Init cachedClassLoader = cachedClassLoaders.next();
try {
cachedClassLoader.loadClasses(loader);
} catch (Exception e) {
Debug.logError(e, "Could not pre-initialize dynamically loaded
class: ", module);
}
}
So, can we write a class say UtilTenantProperties under webtools and load that
dynamically? This class can then be used to load the appropriate delegator to
query properties to override and return an updated newProps and rest continues
as before? The reason thinking of webtools is to eventually use the webtools
label manager to manage and update the override fields into the database.
Also perhaps we would need UtilTenantProperties or better still
UtilPropertiesOverride (to make it useful even in single tenant cases) as
interface under base module and then have the implementation under webtools
linked to META-INF/services file entry.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira