It is annoying to see that we are still adding these references (or loose dependencies) from applications to specialpurpose... it is ugly. I will try to find some time to think to a better solution.
Jacopo On Aug 29, 2013, at 11:39 PM, Jacques Le Roux <jacques.le.r...@les7arts.com> wrote: > No problems with me, you can change if you want. Note though that, for now, > it's not "the missing configuration file" which "will not prevent the webapp > from loading" but only if the whole component is absent. > > Jacques > > Adrian Crum wrote: >> I would prefer an attribute name like "optional" - indicating the >> include is optional and the missing configuration file will not prevent >> the webapp from loading. >> >> -Adrian >> >> On 8/29/2013 12:37 PM, jler...@apache.org wrote: >>> Author: jleroux >>> Date: Thu Aug 29 19:37:44 2013 >>> New Revision: 1518777 >>> >>> URL: http://svn.apache.org/r1518777 >>> Log: >>> This fixes "Net before overhead report generates an error" >>> https://issues.apache.org/jira/browse/OFBIZ-5267 >>> >>> This is related with r1361130, where the birt component was moved from >>> framework to specialpurpose. >>> >>> The fix is to create the possibility of a loose coupling from applications >>> controllers to specialpurpose controllers. For that >>> an if-present attribute is added to the include element. When used, if the >>> included controller does not exist, instead of an >>> error and a stack trace, a warning is thrown (only in English, for >>> developers) suggesting to checkout the component from trunk. >>> Indeed, in the current case, this situation should only arise in release >>> after 12.04 where the birt component, like all others >>> but the ecommerce component, had been removed. This can be used in other >>> cases, but for now only the component level is covered. >>> >>> Modified: >>> >>> ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/controller.xml >>> ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/controller.xml >>> ofbiz/trunk/applications/product/webapp/facility/WEB-INF/controller.xml >>> >>> ofbiz/trunk/framework/base/src/org/ofbiz/base/location/ComponentLocationResolver.java >>> ofbiz/trunk/framework/base/src/org/ofbiz/base/util/FileUtil.java >>> ofbiz/trunk/framework/webapp/dtd/site-conf.xsd >>> >>> ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ConfigXMLReader.java >>> ofbiz/trunk/specialpurpose/birt/ofbiz-component.xml >>> ofbiz/trunk/specialpurpose/birt/webapp/accounting/WEB-INF/controller.xml >>> ofbiz/trunk/specialpurpose/birt/webapp/facility/WEB-INF/controller.xml >>> ofbiz/trunk/specialpurpose/birt/webapp/ordermgr/WEB-INF/controller.xml >>> >>> Modified: >>> ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/controller.xml >>> URL: >>> http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/controller.xml?rev=1518777&r1=1518776&r2=1518777&view=diff >>> ============================================================================== >>> --- >>> ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/controller.xml >>> (original) +++ >>> ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/controller.xml >>> Thu Aug 29 19:37:44 2013 @@ -22,6 +22,7 @@ under >>> the License. >>> xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/site-conf.xsd"> >>> <include >>> location="component://common/webcommon/WEB-INF/common-controller.xml"/> >>> <include >>> location="component://commonext/webapp/WEB-INF/controller.xml"/> >>> + <include >>> location="component://birt/webapp/accounting/WEB-INF/controller.xml" >>> if-present="true"/> >>> <description>Accounting Manager Module Site Configuration >>> File</description> >>> >>> <!-- Events to run on every request before security (chains exempt) --> >>> >>> Modified: >>> ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/controller.xml >>> URL: >>> http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/controller.xml?rev=1518777&r1=1518776&r2=1518777&view=diff >>> ============================================================================== >>> --- >>> ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/controller.xml >>> (original) +++ >>> ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/controller.xml Thu >>> Aug 29 19:37:44 2013 @@ -23,6 +23,7 @@ under the >>> License. <include >>> location="component://common/webcommon/WEB-INF/common-controller.xml"/> >>> <include >>> location="component://commonext/webapp/WEB-INF/controller.xml"/> >>> <include >>> location="component://content/webapp/content/WEB-INF/controller.xml"/> >>> + <include >>> location="component://birt/webapp/ordermgr/WEB-INF/controller.xml" >>> if-present="true"/> >>> <description>Order Manager Module Site Configuration File</description> >>> >>> <!-- event handlers --> >>> >>> Modified: >>> ofbiz/trunk/applications/product/webapp/facility/WEB-INF/controller.xml >>> URL: >>> http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/webapp/facility/WEB-INF/controller.xml?rev=1518777&r1=1518776&r2=1518777&view=diff >>> ============================================================================== >>> --- >>> ofbiz/trunk/applications/product/webapp/facility/WEB-INF/controller.xml >>> (original) +++ >>> ofbiz/trunk/applications/product/webapp/facility/WEB-INF/controller.xml Thu >>> Aug 29 19:37:44 2013 @@ -22,6 +22,8 @@ under the >>> License. >>> xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/site-conf.xsd"> >>> <include >>> location="component://common/webcommon/WEB-INF/common-controller.xml"/> >>> <include >>> location="component://commonext/webapp/WEB-INF/controller.xml"/> >>> + <include >>> location="component://birt/webapp/accounting/WEB-INF/controller.xml" >>> if-present="true"/> >>> + >>> <description>Facility Manager Module Site Configuration >>> File</description> >>> >>> <handler name="service-multi" type="request" >>> class="org.ofbiz.webapp.event.ServiceMultiEventHandler"/> >>> >>> Modified: >>> ofbiz/trunk/framework/base/src/org/ofbiz/base/location/ComponentLocationResolver.java >>> URL: >>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/location/ComponentLocationResolver.java?rev=1518777&r1=1518776&r2=1518777&view=diff >>> ============================================================================== >>> --- >>> ofbiz/trunk/framework/base/src/org/ofbiz/base/location/ComponentLocationResolver.java >>> (original) +++ >>> ofbiz/trunk/framework/base/src/org/ofbiz/base/location/ComponentLocationResolver.java >>> Thu Aug 29 19:37:44 2013 @@ -38,7 +38,7 @@ >>> public class ComponentLocationResolver i public static final String >>> module = ComponentLocationResolver.class.getName(); >>> >>> public URL resolveLocation(String location) throws >>> MalformedURLException { >>> - String baseLocation = getBaseLocation(location).toString(); >>> + String baseLocation = getBaseLocation(location, false).toString(); >>> if (File.separatorChar != '/') { >>> baseLocation = baseLocation.replace(File.separatorChar, '/'); >>> } >>> @@ -52,7 +52,7 @@ public class ComponentLocationResolver i >>> } >>> } >>> >>> - public static StringBuilder getBaseLocation(String location) throws >>> MalformedURLException { >>> + public static StringBuilder getBaseLocation(String location, boolean >>> ifPresent) throws MalformedURLException { >>> StringBuilder baseLocation = new >>> StringBuilder(FlexibleLocation.stripLocationType(location)); >>> // componentName is between the first slash and the second >>> int firstSlash = baseLocation.indexOf("/"); >>> @@ -73,9 +73,13 @@ public class ComponentLocationResolver i >>> baseLocation.insert(0, rootLocation); >>> return baseLocation; >>> } catch (ComponentException e) { >>> - String errMsg = "Could not get root location for component >>> with name [" + componentName + "], error was: " + >>> e.toString(); >>> - Debug.logError(e, errMsg, module); >>> - throw new MalformedURLException(errMsg); >>> + if (!ifPresent) { >>> + String errMsg = "Could not get root location for component >>> with name [" + componentName + "], error was: " + >>> e.toString(); + Debug.logError(e, errMsg, module); >>> + throw new MalformedURLException(errMsg); >>> + } else { >>> + return null; >>> + } >>> } >>> - } >>> + } >>> } >>> >>> Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/FileUtil.java >>> URL: >>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/FileUtil.java?rev=1518777&r1=1518776&r2=1518777&view=diff >>> ============================================================================== >>> --- >>> ofbiz/trunk/framework/base/src/org/ofbiz/base/util/FileUtil.java (original) >>> +++ >>> ofbiz/trunk/framework/base/src/org/ofbiz/base/util/FileUtil.java Thu Aug 29 >>> 19:37:44 2013 @@ -38,9 +38,8 @@ import java.util.Set; >>> import javolution.util.FastList; >>> import javolution.util.FastSet; >>> >>> -import org.ofbiz.base.location.ComponentLocationResolver; >>> - >>> import org.apache.commons.io.FileUtils; >>> +import org.ofbiz.base.location.ComponentLocationResolver; >>> >>> /** >>> * File Utilities >>> @@ -57,7 +56,7 @@ public class FileUtil { >>> public static File getFile(File root, String path) { >>> if (path.startsWith("component://")) { >>> try { >>> - path = >>> ComponentLocationResolver.getBaseLocation(path).toString(); >>> + path = ComponentLocationResolver.getBaseLocation(path, >>> false).toString(); >>> } catch (MalformedURLException e) { >>> Debug.logError(e, module); >>> return null; >>> >>> Modified: ofbiz/trunk/framework/webapp/dtd/site-conf.xsd >>> URL: >>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webapp/dtd/site-conf.xsd?rev=1518777&r1=1518776&r2=1518777&view=diff >>> ============================================================================== >>> --- ofbiz/trunk/framework/webapp/dtd/site-conf.xsd (original) >>> +++ ofbiz/trunk/framework/webapp/dtd/site-conf.xsd Thu Aug 29 19:37:44 2013 >>> @@ -55,6 +55,17 @@ under the License. >>> </xs:element> >>> <xs:attributeGroup name="attlist.include"> >>> <xs:attribute type="xs:string" name="location" use="required"/> >>> + <xs:attribute type="xs:boolean" name="if-present" use="optional" >>> default="true"> >>> + <xs:annotation> >>> + <xs:documentation> >>> + Only used with component type location (component://). >>> This allows to introduce a loose coupling to another >>> component. + >>> + If true, if the component is absent it will be ignored. >>> + A warning will be logged, to let know the component >>> can possibly be checked out from trunk HEAD >>> + (since R13.07, in releases specialpurpose components >>> are removed but ecommerce). >>> + </xs:documentation> >>> + </xs:annotation> >>> + </xs:attribute> >>> </xs:attributeGroup> >>> <xs:element name="description" type="xs:string"/> >>> <xs:element name="owner" type="xs:string"/> >>> >>> Modified: >>> ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ConfigXMLReader.java >>> URL: >>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ConfigXMLReader.java?rev=1518777&r1=1518776&r2=1518777&view=diff >>> ============================================================================== >>> --- >>> ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ConfigXMLReader.java >>> (original) +++ >>> ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ConfigXMLReader.java >>> Thu Aug 29 19:37:44 2013 @@ -32,6 +32,7 @@ import >>> javolution.util.FastList; import javolution.util.FastMap; >>> import javolution.util.FastSet; >>> >>> +import org.ofbiz.base.location.ComponentLocationResolver; >>> import org.ofbiz.base.location.FlexibleLocation; >>> import org.ofbiz.base.metrics.Metrics; >>> import org.ofbiz.base.metrics.MetricsFactory; >>> @@ -295,7 +296,24 @@ public class ConfigXMLReader { >>> protected void loadIncludes(Element rootElement) { >>> for (Element includeElement: >>> UtilXml.childElementList(rootElement, "include")) { >>> String includeLocation = >>> includeElement.getAttribute("location"); >>> + boolean testIfPresent = >>> "true".equals(includeElement.getAttribute("if-present")); >>> if (UtilValidate.isNotEmpty(includeLocation)) { >>> + if (includeLocation.startsWith("component://") && >>> testIfPresent) { >>> + try { >>> + if (null == >>> ComponentLocationResolver.getBaseLocation(includeLocation, true)) { >>> + Debug.logWarning(includeLocation + " does >>> not exist." + " Since R13.07, in releases, >>> specialpurpose components were removed but ecommerce." + >>> + " If you need this component, >>> you might check it out from Apache OFBiz trunk HEAD >>> (http://svn.apache.org/repos/asf/ofbiz/trunk)." + >>> + " Else, you can simply neglect this warning.", module); + >>> continue; >>> + } >>> + } catch (MalformedURLException mue) { >>> + Debug.logWarning("While trying to retrieve " + >>> includeLocation + " an error occured (but if-present >>> was used, so it's maybe only a typo)." + >>> + " Also note that since R13.07, in releases, >>> specialpurpose components were removed but ecommerce." + >>> + " If you need this component, you >>> might check it out from Apache OFBiz trunk HEAD >>> (http://svn.apache.org/repos/asf/ofbiz/trunk)." + >>> >>> + " Else, you can simply neglect this warning.", module); + >>> continue; >>> + } >>> + } >>> try { >>> URL urlLocation = >>> FlexibleLocation.resolveLocation(includeLocation); >>> includes.add(urlLocation); >>> >>> Modified: ofbiz/trunk/specialpurpose/birt/ofbiz-component.xml >>> URL: >>> http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/birt/ofbiz-component.xml?rev=1518777&r1=1518776&r2=1518777&view=diff >>> ============================================================================== >>> --- ofbiz/trunk/specialpurpose/birt/ofbiz-component.xml (original) >>> +++ ofbiz/trunk/specialpurpose/birt/ofbiz-component.xml Thu Aug 29 19:37:44 >>> 2013 >>> @@ -29,28 +29,6 @@ under the License. >>> <entity-resource type="data" reader-name="seed" loader="main" >>> location="data/OrderPortletData.xml"/> >>> <service-resource type="model" loader="main" >>> location="servicedef/services.xml"/> >>> >>> - <!-- use when reports need to be injected into applications Note: this >>> will break contextual help for those applications. >>> - <webapp name="accounting" >>> - title="Accounting" >>> - server="default-server" >>> - location="webapp/accounting" >>> - base-permission="OFBTOOLS,ACCOUNTING" >>> - mount-point="/accounting"/> >>> - <webapp name="facility" >>> - title="Facility" >>> - description="FacilityComponentDescription" >>> - server="default-server" >>> - location="webapp/facility" >>> - base-permission="OFBTOOLS,FACILITY" >>> - mount-point="/facility"/> >>> - <webapp name="order" >>> - title="Order" >>> - description="OrderComponentDescription" >>> - server="default-server" >>> - location="webapp/ordermgr" >>> - base-permission="OFBTOOLS,ORDERMGR" >>> - mount-point="/ordermgr"/> >>> - --> >>> <webapp name="birt" >>> title="BIRT" >>> server="default-server" >>> >>> Modified: >>> ofbiz/trunk/specialpurpose/birt/webapp/accounting/WEB-INF/controller.xml >>> URL: >>> http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/birt/webapp/accounting/WEB-INF/controller.xml?rev=1518777&r1=1518776&r2=1518777&view=diff >>> ============================================================================== >>> --- >>> ofbiz/trunk/specialpurpose/birt/webapp/accounting/WEB-INF/controller.xml >>> (original) +++ >>> ofbiz/trunk/specialpurpose/birt/webapp/accounting/WEB-INF/controller.xml >>> Thu Aug 29 19:37:44 2013 @@ -20,7 +20,6 @@ under the >>> License. >>> >>> <site-conf xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >>> >>> xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/site-conf.xsd"> >>> - <include >>> location="component://accounting/webapp/accounting/WEB-INF/controller.xml"/> >>> >>> <description>Extended Accounting Controller Configuration >>> File</description> >>> >>> >>> Modified: >>> ofbiz/trunk/specialpurpose/birt/webapp/facility/WEB-INF/controller.xml >>> URL: >>> http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/birt/webapp/facility/WEB-INF/controller.xml?rev=1518777&r1=1518776&r2=1518777&view=diff >>> ============================================================================== >>> --- >>> ofbiz/trunk/specialpurpose/birt/webapp/facility/WEB-INF/controller.xml >>> (original) +++ >>> ofbiz/trunk/specialpurpose/birt/webapp/facility/WEB-INF/controller.xml Thu >>> Aug 29 19:37:44 2013 @@ -20,7 +20,6 @@ under the >>> License. >>> >>> <site-conf xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >>> >>> xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/site-conf.xsd"> >>> - <include >>> location="component://product/webapp/facility/WEB-INF/controller.xml"/> >>> >>> <description>Extended Facility Manager Controller Configuration >>> File</description> >>> >>> >>> Modified: >>> ofbiz/trunk/specialpurpose/birt/webapp/ordermgr/WEB-INF/controller.xml >>> URL: >>> http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/birt/webapp/ordermgr/WEB-INF/controller.xml?rev=1518777&r1=1518776&r2=1518777&view=diff >>> ============================================================================== >>> --- >>> ofbiz/trunk/specialpurpose/birt/webapp/ordermgr/WEB-INF/controller.xml >>> (original) +++ >>> ofbiz/trunk/specialpurpose/birt/webapp/ordermgr/WEB-INF/controller.xml Thu >>> Aug 29 19:37:44 2013 @@ -20,7 +20,6 @@ under the >>> License. >>> >>> <site-conf xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >>> >>> xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/site-conf.xsd"> >>> - <include >>> location="component://order/webapp/ordermgr/WEB-INF/controller.xml"/> >>> >>> <description>Extended Order Manager Controller Configuration >>> File</description>