[frs-297] FusionReactor 4.5.0 with ColdFusion 10 Multi-Instances: Installation Order


This technote applies to you if you are planning to install FusionReactor 4.5.0 or greater to a ColdFusion 10 multi-instance/clustered environment, or you have installed FusionReactor to a base CF10 cfusion instance and plan to subsequently provision new instances, and/or convert it to a cluster.

Background

ColdFusion 10's Enterprise Manager allows appropriately-licensed users to create further instances of ColdFusion which run on the same system as the primary environment.

The standard installation of ColdFusion enables a single instance, cfusion, but allows further instances to be created using the Enterprise Manager -> Instance Manager. These instances may subsequently be used standalone, or added to one or more round-robin clusters.

The way the ColdFusion Instance Manager creates these instances is by cloning the cfusion instance. Therefore, if you have already installed FusionReactor into this primary instance, FusionReactor's configuration will also be cloned, but will not start correctly since the configuration is being shared with an already-running instance – cfusion.

The second attempted startup of FusionReactor will fail because parts of FusionReactor's internal architecture cannot be started twice on the same configuration. Exceptions similar to the following will be emitted:

ERROR: Error reloading cached bundle, removing it: C:FusionReactorinstancecfusion.cfmx10.WIN-J0UQJG8R9OEosgienvruntimefwbundle20 (java.io.FileN
otFoundException: C:FusionReactorinstancecfusion.cfmx10.WIN-J0UQJG8R9OEosgienvruntimefwbundle20version0.0revision.location (The system cannot
 find the file specified))
java.io.FileNotFoundException: C:FusionReactorinstancecfusion.cfmx10.WIN-J0UQJG8R9OEosgienvruntimefwbundle20version0.0revision.location (The
system cannot find the file specified)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(FileInputStream.java:120)
        at org.apache.felix.framework.util.SecureAction.getFileInputStream(SecureAction.java:436)
        at org.apache.felix.framework.cache.BundleArchive.getRevisionLocation(BundleArchive.java:614)
        at org.apache.felix.framework.cache.BundleArchive.<init>(BundleArchive.java:219)
        at org.apache.felix.framework.cache.BundleCache.getArchives(BundleCache.java:223)
        at org.apache.felix.framework.Felix.init(Felix.java:662)
        at com.intergral.fusionreactor.osgi.fwh.FrameworkHost.startup(FrameworkHost.java:287)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at com.intergral.fusionreactor.frameworkhostmanager.FrameworkHostManager.init(FrameworkHostManager.java:114)
        at com.intergral.fusionreactor.filter.FusionReactorFilter.init(FusionReactorFilter.java:55)
        at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:277)
        at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:258)
        at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:382)
        at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:103)
        at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4624)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5270)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1525)
        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1515)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
        at java.util.concurrent.FutureTask.run(FutureTask.java:138)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:662)

FusionReactor may subsequently appear to start correctly, but will be sharing configuration and internal information with the primary instance. This is not supported and will lead to the configuration eventually becoming corrupt, necessitating a reinstall of FusionReactor. If you accidentally allow FusionReactor to start in this configuraiton, stop it as soon as possible and continue with the appropriate section below.

Procedure

New environment

If you are already planning to provision a multi-instance ColdFusion 10 environment, but have not yet performed any installations, or FusionReactor 4.5.0 is installed but has not yet been installed into ColdFusion 10.

  • Install ColdFusion 10.
  • Install any further instances you require
  • Install FusionReactor 4.5.0 or greater
    • FusionReactor Administration Manager (FRAM) Instance Manager can then be used to install FusionReactor into each instance.
  • Start or restart the ColdFusion 10 primary (cfusion) instance, and the new instances.

… optionally:

  • Create clusters and add member instances to those clusters in ColdFusion 10's Cluster Manager.

FusionReactor already installed into primary (cfusion) instance

If you have installed FusionReactor into the primary (cfusion) instance already, and plan to provision further instances using ColdFusion 10's Instance Manager:

  • Install further instances of ColdFusion 10 using ColdFusion 10's Instance Manager.
    • N.b. Do not attempt to start these new instances yet. If you do so, the cloned FusionReactor will fail, emitting the exception(s) above.
  • Use the FusionReactor Administration Manager (FRAM) Instance Manager to scan for the new instances.
  • When they are detected, use FRAM Instance Manager to install FusionReactor into them.
  • Start (or restart) the ColdFusion 10 instances.

… optionally:

  • Create clusters and add member instances to those clusters in ColdFusion 10's Cluster Manager.

FusionReactor installed, but not required in new instances

If you have already installed FusionReactor into the ColdFusion primary (cfusion) instance, but do not require FusionReactor to be available in the new instance, perform:

EITHER:
  • After installing the new instance using ColdFusion 10's Instance Manager, stop the new instance if it has already started.
  • Edit the instance's default web.xml file. This is usually located in C:ColdFusion10c1runtimeconfweb.xml
    • Locate the comment <!--FusionReactor filter - created Mon May 14 10:46:23 CEST 2012-->. This marks the start of the FusionReactor configuration.
    • Remove the comment, and the two following XML elements: <filter> and <filter-mapping>.
  • Start the new instance as normal.
OR:

If you are not comfortable editing XML files, the following procedure can also be used.

  • After installing the new instance using ColdFusion 10's Instance Manager, stop the new instance if it has already started.
  • In FusionReactor Administration Manager (FRAM) Instance Manager, use the Scan System button to update the Instance Manager with the new instance.
  • Use the green "+" button for the new instance to temporarily install FusionReactor into it.
    • You should select "Skip" if prompted to restart the instance.
    • This will overwrite the cloned configuration with a new one.
  • Use the red "-" button to remove the new instance.
    • This will remove the instance, along with that instance's configuration, leaving a the new instance clean, and without FusionReactor.
  • Start the new instance as normal.
THEN:
  • Create clusters and add member instances to those clusters in ColdFusion 10's Cluster Manager.

Issue Details

Type: Technote
Issue Number: FRS-297
Components: Installer
Environment:
Resolution: Fixed
Last Updated: 20/Feb/13 3:01 PM
Affects Version: 4.5.0
Fixed Version: 4.5.0
Server:
Platform:
Related Issues: