I start today a series of post on the usage and documentation of my EventManager for coldfusion. You can find more docs and svn code here.
Initialize The EventManager
EventManager is done to work standalone or to be easily integrated with Coldspring. Both examples will be provided.
Standalone
<code class="coldfusion">
<!--- normally saved as singletone on application start --->
<cfset application.em = craeteObject('component','EventManager.EventManager').init() />
</code>
Init( Events:Array , Listeners:Array , XmlPath:String , AutowireEvents:Boolean , Debug:Boolean , Scope:String )
The init method takes the following arguments.
- Events:Array - default arrayNew(1) - Array of structs representing the events to register.
- Listeners:Array - default arrayNew(1) - Array of structs representing the listeners to register.
- XmlPath:String - default "" - Relative Path to an xml file containing events and listeners to be registered.
- AutowireEvents:Boolean - default false - If true any event create for being dispatched is autowired using beanInjector.
- Debug:Boolean - default false - If true force Em to save a trace of any operation executed.
- Scope:String - default 'request' - Says to Em how to save the tracing info if debug mode is true. Request use the request scope and clean up the trace memory any time the request die. Instance persists the informations into the EventManager instance itself.
<code class="coldfusion"><!--- events array --->
<cfset events = arrayNew(1) />
<!--- events --->
<cfset event = structNew() />
<cfset event.name = 'myevent' />
<cfset event.type = 'evapp.events.myevent' />
.....add more events....
<!--- listeners array --->
<cfset listeners = arrayNew(1) />
<!--- listener --->
<cfset listener = structNew() />
<cfset listener.event = 'myevent' />
<cfset listener.listener = 'evapp.listeners.mylistener' />
<cfset listener.method = 'manageData' />
<cfset listener.priority = 10 />
<cfset listener.initMehod = 'setUp' />
<cfset listener.cache = true />
.....add more listeners....
<cfset eventManager = createObject('component','EventManager.EventManager')
.init(events,listeners) /></code>
Xml Syntax via xmlPath
You can setUp your events/listeners using xml notation. The xmlPath argument you can pass to init mode represent the relative path to the xml config file.
<code class="coldfusion"><cfset eventManager = createObject('component','EventManager.EventManager')
.init(xmlPath='/myapp/config/eventmanager.xml') /> </code>
In init method using the xmlPath attribute will not overwrite or stop the eventManager from loading arrays of events and listeners if provided.
<code class="coldfusion"><cfset eventManager = createObject('component','EventManager.EventManager')
.init(events,listeners,'/myapp/config/eventmanager.xml') />
</code>
The previuos example will load all the events from array and xml and then will register listeners from array and from the xml too.
See xml for schema details. In teh resource folder are present both .dtd and .xsd to validate your xml.
Coldspring Tip
If laoded via coldspring you can use the great syntax tool to create arrays and struct from xml that coldpring shipd for free
<code class="xml"><bean id="Events" class="coldspring.beans.factory.config.ListFactoryBean">
<property name="sourceList">
<list>
<map>
<entry key="name">
<value>myEvent</value>
</entry>
<entry key="type">
<value>EventManager.Event</value>
</entry>
</map>
....... more events here ...
</list>
</property>
</bean>
<bean id="Listeners" class="coldspring.beans.factory.config.ListFactoryBean">
<property name="sourceList">
<list>
<map>
<entry key="event">
<value>myEvent</value>
</entry>
<entry key="listener">
<value>evapp.listeners.mylistener</value>
or
<bean ref="listenerBeanID"/>
</entry>
<entry key="method">
<value>methodToFire</value>
</entry>
</map>
.................... more listeners
</list>
</property>
</bean>
<bean id="eventManager" class="EventManager.EventManager" lazy-init="false">
<constructor-arg name="events">
<ref bean="Events"/>
</constructor-arg>
</bean>
</code>
#1 by cheap hotels thailand - November 24, 2009 at 12:02 PM