Overview

This page is a work-in-progress to document my progress in separating the ofbiz core from the rest of the applications to allow users to focus on using ofbiz as a standalone development framework.

Why?

Ofbiz is a very productive framework for creating enterprise applications. However, installing ofbiz with all of it's OOTB functionality just to use ofbiz as a development framework is a waste of resources. Also, newcomers to ofbiz may be put off by the complexity of ofbiz OOTB.

Ofbiz 10.04

Ofbiz 10.04 is the current stable release at the time of writing.

Download, install and setup 10.04.

If you are unsure how to proceed with this, I recommend reading the ofbiz beginners tutorial

Comment out the following components in $OFBIZ_HOME/applications/component-load.xml

<component-loader xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/component-loader.xsd">
<!--    <load-component component-location="party"/>-->
<!--    <load-component component-location="securityext"/>-->
<!--    <load-component component-location="content"/>-->
<!--    <load-component component-location="workeffort"/>-->
<!--    <load-component component-location="product"/>-->
<!--    <load-component component-location="manufacturing"/>-->
<!--    <load-component component-location="accounting"/>-->
<!--    <load-component component-location="humanres"/>-->
<!--    <load-component component-location="order"/>-->
<!--    <load-component component-location="marketing"/>-->
<!-- common component used by most other components last because it uses info from most components-->
<!--    <load-component component-location="commonext"/>-->
</component-loader>

Comment out the following components in $OFBIZ_HOME/specialpurpose/component-load.xml

<component-loader xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/component-loader.xsd">
<!--    <load-component component-location="ecommerce"/>-->
<!--    <load-component component-location="pos"/>-->
<!--    <load-component component-location="hhfacility"/>-->
<!--    <load-component component-location="assetmaint"/>-->
<!--    <load-component component-location="cmssite"/>-->
<!--    <load-component component-location="ofbizwebsite"/>-->
<!--    <load-component component-location="projectmgr"/>-->
<!--    <load-component component-location="oagis"/>-->
<!--    <load-component component-location="googlebase"/>-->
<!--    <load-component component-location="googlecheckout"/>-->
<!--    <load-component component-location="ebay"/>-->
<!--    <load-component component-location="ebaystore"/>-->
<!--    <load-component component-location="myportal"/>-->
<!--    <load-component component-location="webpos"/>-->
<!--    <load-component component-location="crowd"/>-->
    <!-- load-component component-location="ldap"/>-->
    <!-- <load-component component-location="workflow"/> -->
    <!-- <load-component component-location="shark"/> -->
</component-loader>

Comment out the following compents in $OFBIZ_HOME/framework/component-load.xml

<component-loader xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/component-loader.xsd">
    <load-component component-location="geronimo"/>
    <load-component component-location="sql"/>
    <load-component component-location="entity"/>
    <load-component component-location="catalina"/>
    <!-- <load-component component-location="jetty"/> -->
    <load-component component-location="security"/>
    <load-component component-location="datafile"/>
    <load-component component-location="minilang"/>
    <load-component component-location="common"/>
    <load-component component-location="service"/>
    <load-component component-location="entityext"/>
    <load-component component-location="bi"/>
    <load-component component-location="birt"/>
    <load-component component-location="webapp"/>
    <load-component component-location="guiapp"/>
    <load-component component-location="widget"/>
    <load-component component-location="appserver"/>
    <load-component component-location="testtools"/>
    <load-component component-location="webtools"/>
    <load-component component-location="webslinger"/>
    <load-component component-location="images"/>
<!--    <load-component component-location="example"/>-->
<!--    <load-component component-location="exampleext"/>-->
</component-loader>

Comment out themes - see Bugs section below

Comment out theme preferences in $OFBIZ_HOME/themes/bizznesstime/includes/header.ftl

<div id="preferences" style="display:none">
   <a href="<@ofbizUrl>ListLocales</@ofbizUrl>" id="language">${uiLabelMap.CommonLanguageTitle} - ${locale.getDisplayName(locale)}</a>
   <a href="<@ofbizUrl>ListTimezones</@ofbizUrl>" id="timezone">${nowTimestamp?datetime?string.short} - ${timeZone.getDisplayName(timeZone.useDaylightTime(), Static["java.util.TimeZone"].LONG, locale)}</a>
   <!--
   <a href="<@ofbizUrl>ListVisualThemes</@ofbizUrl>" id="theme">${uiLabelMap.CommonVisualThemes}</a>
   -->
</div>

Comment out help link in $OFBIZ_HOME/themes/bizznesstime/includes/header.ftl

<!-- notice the last "false" in the if statement to make the if condition always return false -->
<#if webSiteId?exists && requestAttributes._CURRENT_VIEW_?exists && false>
   <#include "component://common/webcommon/includes/helplink.ftl" />
   <span><a href="javascript:lookup_popup2('showHelp?helpTopic=${helpTopic}&amp;portalPageId=${parameters.portalPageId?if_exists}','help' ,500,500);">${uiLabelMap.CommonHelp}</a></span>
</#if>

Load data and run ofbiz

Next run the ant target "run-install" and "create-admin-user-login" to populate the database.

If you now startup ofbiz (e.g. using startofbiz.bat/startofbiz.sh) and go to https://localhost:8443/webtoolsand login as "admin / ofbiz", you will find that only the core components are loaded.

At this stage, you don't have a mecanism for adding user logins or for setting user permissions.  This functionality will need to be created.

Create a component

(if the application is still running from the previous step, kill it)

./ant create-component

E.g.

create-component:
[input] Component name: (e.g. mycomponent)
mycomponent
[input] Component resource name: (e.g. MyComponent)
MyComponent
[input] Webapp name: (e.g. mycomponent)
mycomponent
[input] Base permission: (e.g. MYCOMPONENT)
MYCOMPONENT
[echo] The following hot-deploy component will be created:
[echo] Name: mycomponent
[echo] Resource Name: MyComponent
[echo] Webapp Name: mycomponent
[echo] Base permission: MYCOMPONENT
[echo] Folder: /home/snowch/workspace/ofbiz.tr.framework/hot-deploy/mycomponent
[echo]
[input] Confirm: (Y, [N], y, n)
Y

Grants access for admin user to mycomponent:

./ant run-install-seed	              

run-install-seed loads the security data in /hot-deploy/mycomponent/data/MyComponentSecurityData.xml

navigate to http://localhost:8443/mycomponent/control/main - login as admin/ofbiz

Bugs

OFBIZ-3499 - Help dependency on Content
OFBIZ-3498 - Visual Themes dependency on Party
OFBIZ-3501 - ServerHitBin dependency on Content

See also

There is a longer term effort looking at separating the framework, see Framework-only+distribution