You can separate a store enterprise archive (EAR) file into multiple EAR files. By
separating the store EAR into multiple EAR files, you can separate your store web application
archive (WAR) files into multiple store WAR files. Separating store contents into multiple WAR files
provide developers the capability to create or update assets for different parts of the storefront
independently.
Before you begin
Ensure that you complete the following tasks:
- Enable the separation of the store WAR from the WebSphere Commerce EAR into a new store EAR. You
must separate the store WAR into a new store EAR before you can split the archive into multiple EAR
files. You must also include all foundation classes for the store in a shared library so that each
of the store WAR files you create can reference the classes. For more information about separating
the store archive, see
- Verify that the pages for your store can be isolated with only a minimum set of common pages and
assets. Common pages or assets must be deployed within all WAR files that use the pages or assets.
Note: There is no automated deployment or migration available for moving assets into the
multiple EAR files. After you separate the EAR into multiple EAR files, you must manually move files
and file changes into the appropriate new EAR file
About this task
By separating the store EAR file into multiple EAR files, store assets can be separated into
different WAR files by component. If your site has multiple stores, a store EAR can be created for
each store. Different development teams can then focus on developing assets for different stores or
focus on developing assets for specific components of a store. For example, one team can develop
catalog browsing pages, while another team develops shopping cart pages.
When you separate the store EAR into multiple EAR files, you use the initial separated store WAR
as a central store WAR file. Each new WAR file that you create can then contain assets for specific
store components or new store features. By configuring the extended document root in each new WAR
file, you can use a single version of JSP files in the central WAR file. Other WAR files can then
reference the JSP file. WebSphere Application Server shared libraries are used to connect the
separate EAR files and to include files that files in each EAR can reference and use.
For more detailed examples of setting up multiple EAR files for a sample store, see
Procedure
-
Create another enterprise archive (EAR) project for your store. The store assets in your
initial separated store EAR file can be divided between the new EAR file and the initial separated
EAR file.
-
Create the store WAR file for the new EAR file.
-
Create an empty WAR file within the new EAR file.
-
Go to the WebContent\WEB-INF directory in the initial separated store EAR
file.
-
Copy the following files and subfolders from the WEB-INF directory.
- tiles-def.xml
- validator-rules.xml
- *.tld
- lib/Foundation-TagLib.jar
- web.xml
-
Go to the WebContent\WEB-INF directory in the new store WAR and add the
copied files and subfolders into this WEB-INF directory. Overwrite the
web.xml that exists in your new WAR.
-
Go to the WebContent/WEB-INF directory in the new store WAR and open the
web.xml file for editing.
-
Update the values for the
display-name
element, ServletName
parameter, and the struts configuration files.
Each store WAR file that you create must have a unique display-name
and
ServletName
value.
For example, the following code snippet sets the value for
display-name
element
and
ServletName
parameter to be
Stores1
:
<web-app ...
<servlet>
<display-name>Stores1</display-name>
......
<init-param>
<param-name>config</param-name>
<param-value>...struts config files...</param-value>
</init-param>
</servlet>
......
<filter>
......
<init-param>
<param-name>ServletName</param-name>
<param-value>Stores1</param-value>
</init-param>
</filter>
......
</web-app>
-
Configure the extended document root for your store WAR files. The extended document root
allows JSP file resources to be shared across WAR files. With the extended document root configured,
files in the new store WAR can reference files in the initial separated store WAR.
For example, common JSP files such as the header and footer for store pages.
If you
intend for the two WAR files to be independent modules, this configuration is not needed.
If
files in the initial separated store WAR references files in the new store WAR, configure the
extended document root for the initial separated store WAR to point to the new WAR. For example, if
your new store WAR includes all order JSP files, the initial separated store WAR might include files
that need to reference the order status JSP file in the new WAR for display on the My
Account page.
-
Go to the WebContent/WEB-INF directory of your new store WAR and open the
ibm-web-ext.xml file for editing.
-
Add the following element to configure the extended document root to point the JSP directory of
your new store WAR to the initial separated store WAR file.
<jsp-attribute name="extendedDocumentRoot"
value="WC_profiledir/installedApps/cell_name/WCStores_instance_name.ear/Stores.war" />
Where
WCStores_instance_name.ear
is the name of the initial separated
store EAR
file.
<jsp-attribute name="extendedDocumentRoot" value="workspace_dir/Stores/WebContent"/>
Where
Stores
is the name of the initial separated store WAR file
-
In the WebContent/WEB-INF directory of the initial separated store WAR and
open the ibm-web-ext.xml file for editing.
-
Add the following element to configure the extended document root to point the JSP directory of
your old store WAR to the Stores1.war in your new store WAR file.
<jsp-attribute name="extendedDocumentRoot"
value="WC_profiledir/installedApps/cell_name/WCStores1_instance_name.ear/Stores1.war" />
Where
WCStores1_instance_name.ear
is the name of the new store EAR
file and
Stores1.war
is the file name of the new store WAR
file.
<jsp-attribute name="extendedDocumentRoot" value="workspace_dir/Stores1/WebContent" />
Where
Stores1
is the name of the new store WAR file
-
Save and close the files.
-
Copy the EJB references from your initial separated store WAR file into your new store WAR
file.
-
In the Stores\WebContent\WEB-INF directory of the initial separated store
EAR, open the ibm-web-bnd.xml file for editing.
-
Copy the following EJB references:
<ejb-ref name="ejb/BusinessContextServiceWrapperLocal"
binding-name="ejb/com/ibm/commerce/component/contextservice/objects/BusinessContextServiceWrapperHome" />
<ejb-ref name="ejb/MemberGroupMemberService"
binding-name="ejb/com/ibm/commerce/user/objects/service/MemberGroupMemberServiceLocalHome" />
<ejb-ref name="ejb/ContextManagement"
binding-name="ejb/com/ibm/commerce/context/objects/ContextManagementHome" />
<ejb-ref name="ejb/ContextData"
binding-name="ejb/com/ibm/commerce/context/objects/ContextDataHome" /></web-bnd>
-
Go to the corresponding directory in your new store EAR and open the
ibm-web-bnd.xml file for editing.
-
Add the copied EJB references into the file. Then, save and close the file.
-
Add store contents to the new WAR file.
-
Compose the struts entries to be handled by the new store WAR file. Add these struts entries to
the struts configuration files within the new store WAR file. If the initial separated store WAR no
longer needs these struts entries, remove the entries from the struts configuration files in the
initial separated store WAR.
-
Add the store assets that belong to the components that you want to include in the new store
WAR file. If the initial separated store WAR no longer needs any of these files, remove the files
the initial separated store WAR file.
When you are deploying files into multiple store WAR files, consider how store assets are
connected to ensure that the assets can function correctly within each store WAR. You can choose to
deploy assets within each WAR file, within specific WAR files, within the shared library, or keep
the files within the initial separated store WAR file. For instance, consider adding store assets to
your new store WAR files based on the following suggested deployments. The following file paths are
relative to the WebContent folder within the initial separated store WAR
file.
Keep the following types of files deployed within the initial separated store WAR file.
- store_name/Common/* - Reference these files by the
extended document root.
- store_name/css/* - Reference these files by the fixed
asset path.
- store_name/EmailTemplates/* - Reference these files by
the fixed asset path. These templates are referenced by using the context root of the initial
separated store WAR file. If you do move a template into another store WAR file, you must customize
any related messaging classes so the context root of the appropriate WAR file is used.
- store_name/images/* - Reference these files by the fixed
asset path.
- store_name/javascript/* - Reference these files by the
fixed asset path.
- store_name/nls/* - Reference these files by the fixed
asset path.
- store_name/rwdWebAssets/* - Reference these files by the
fixed asset path.
- store_name/StaticContent/* - Reference these files by
the fixed asset path.
- store_name/
- WEB-INF/stores/store_name/data/ForeignKeys.dtd
- WEB-INF/stores/store_name/data/ibm-wc-load.xml
- WEB-INF/stores/StoreAssetsDir/data/accesscontrol.xml
- WEB-INF/xml/seo/*
- WEB-INF/classes/ - You can include custom classes that are within this
directory in each store WAR file. Keep the classes that are provided by WebSphere Commerce in the
initial separated store WAR.
- WEB-INF/config/* - You can also include custom files in this directory
within each store WAR file.
- dojo*/* - Reference these files by the fixed asset path.
- images/* - Reference these files by the fixed asset path.
- SampleDistributors/* - Reference these files by the fixed asset path.
- tools/* - Reference these files by the fixed asset path.
- include/* - Reference these files by the extended document root. You can
also include these files within each store WAR file and reference the files through a view.
- Widgets/* - Reference these files by the extended document root. You can
also include these files within each store WAR file and reference the files through the relative
path to the file or through a view.
- config/commerce/store/propertiesViews/store_name/StoreFlexFlowPropertiesView.def
Deploy the following files into each individual WAR file that needs to reference or use the file.
- WEB-INF/tiles-defs.xml
- WEB-INF/validator-rules.xml
- WEB-INF/xsd/get-data-config.xsd
- WEB-INF/cachespec.xml - Include this file in each WAR file. This file
should include the cache entries for the store pages that are in that WAR file.
- WEB-INF/config/* - You can deploy the custom files within the
config directory into each WAR file. Keep the files that are provided with
WebSphere Commerce in the initial separated store WAR file or the shared library.
- store_name/Container/* - Reference these files through
the relative path to the file.
- store_name/ShoppingArea/* - Reference these files
through the relative path to the file.
- store_name/LandingPages/* - Reference these files
through a view.
- store_name/Layouts/* - Reference these files through a
view.
- store_name/include/* - Reference these files through a
view. You can also keep the files in this directory in the initial separated store WAR file.
- store_name/Snippets/* - Reference these files through
the relative path to the file or through a view.
- store_name/StoreInfoArea/* - Reference these files
through the relative path to the file or through a view.
- store_name/UserArea/* - Reference these files through
the relative path to the file or through a view.
- store_name/other *.jsp* files - Reference these files
through the relative path to the file or through a view.
- store_name/Widgets/* - Reference these files through the
relative path to the file or through a view. You can also keep the files in this directory in the
initial separated store WAR file.
- other *.jsp* - Reference these files through the relative path to the
file.
- webservices/* - Reference these files through the relative path to the file
or through a view.
Deploy the following files into the shared library if the file is referenced by multiple WAR
files. You can deploy the file into each WAR file that needs to reference or use the asset. If the
file is used by only a single WAR file, include the file within the individual WAR file.
-
Configure the cache entries for the new store WAR.
You can use dynamic caching for all store WAR files. The WebSphere Application Server can
differentiate cache entries in each WAR file by using the context roots. For files that exist within
more than one WAR file, such as headers and footers, you can create a cache entry for the page in
each WAR.
- Go to the WebContent/WEB-INF directory in the new store WAR and open the
cachespec.xml file for editing.
- Add the cache entries for the store pages that you added into the new store WAR file. If any
store page in the initial separatedStores.war file is referenced by the new WAR
file and needs to be cached, add entries for the pages to the cachespec.xml
file.
- Save and close the file.
- If the initial separated store WAR no longer needs the cache entries for
the actions and views that are handled by the new WAR file, remove the cache entries from
cachespec.xml file in the initial separated store WAR.
-
Enable multiple store WAR files for your WebSphere Commerce instance in the
wc-server.xml for your site:
-
Go to the following directory and open the wc-server.xml file for
editing.
- WC_eardir/xml/config
- WC_eardir\xml\config
-
Search for
StoreWebModuleName="Stores"
in the file. Add the configuration
MultipleStoreWARs="true"
to the file
For example,
<Instance
...
StoreWebModuleName="Stores"
MultipleStoreWARs="true"
.../>
-
Save and close the file. You must republish the WebSphere Commerce application before the
change takes effect.
- Optional:
Register the new WAR file in WebSphere Commerce by adding a web module to the
wc-server.xml file for your WebSphere Commerce instance. Add the web module if
the store module in the new store WAR has its own parameters.
For example, the following code adds a web module for a new store WAR that is called
Stores1
.
<Module contextPath="/webapp/wcs/stores1" fileServletEnabled="false" name="Stores1
"
urlMappingPath="/servlet" webAlias="/wcsstore">
<InitParameters adapters="XML/HTTP, BrowserAdapter" contextSetName="Store" handleDoubleClick="true"/>
<URLRedirectFilter enable="false"/>
</Module>
If any new store module is not registered in the wc-server.xml file, a web
module is automatically created for the new servlet. The parameters for the new servlets are the
same as the parameters of the initial separated store WAR file.
-
Deploy the new store WAR module by adding the module to your new store EAR. For more
information, see Deploying a WAR module.
-
Configure the context roots for the new store WAR within the new store EAR.
-
Go to the META-INF directory in the new store EAR and open the
application.xml file for editing.
-
Add the context root information for the new WAR.
For example, the updated file can resemble the following code
snippet.
<?xml version="1.0" encoding="UTF-8"?>
<application id="Application_ID" version="5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd">
...
<display-name>WCStore1_instance_name
</display-name>
<module id="Module_1396511150409">
<web>
<web-uri>Stores1.war
</web-uri>
<context-root>/webapp/wcs/Stores1</context-root>
</web>
</module>
...
</application>
Where
WCStore1_instance_name
is the name of the new
store EAR and
Stores1.war
is the file name for the new store WAR
file.
-
Save and close the file.
-
Configure the order that the new EAR starts within the WebSphere Commerce application. The
WebSphere Commerce EAR application must start before any store EAR application.
- In the WebSphere Application Server administration console, expand and click WebSphere enterprise applications.
- In the list of available applications, click the new store EAR application.
- In the Detail Properties section, click Startup
behavior.
- Set the value for Startup order to be higher than the value for the
WebSphere Commerce EAR. For example, you can set the value to be 100.
- Go to the following directory and open the deployment.xml file for
editing.
WCDE_installdir\wasprofile\config\cells\localhost\applications\WCStores1_instance_name.ear\deployments\WCStores1_instance_name
Where
WCStores1_instance_name is the name of the new store
EAR.
- In the
<appdeployment
configuration, search for the
startingWeight
attribute. Set the value for the attribute to be higher than the
value for the WebSphere Commerce EAR. For example, set the value to be
"100".<appdeployment:Deployment ... >
<deployedObject... startingWeight="100" ... >
- Save and close the file.
-
Publish the new store EAR to the application server.
- Optional:
If you want to prevent the new store EAR application from taking on traffic, remove the context
roots from the web server plug-in for the new store WAR in the new store EAR application.