March 16, 2010

BlazeDS: Creating endpoint at runtime

Why? Because I do not want to bother end users with xml configuration files. Simple as that.
Biggest enemy of your application is user itself. Therefore, reducing possibility to make a mistake is most important goal if you wish to left good impression with your app. This was one of steps that I take on the road to make Collyba installation procedure as easy as possible.
As I said in previous blog, while I was working on this, insight  to BlazeDS source files was of great help. Actually that is where I found a solution.

What are channels and endpoints?
Channels are client-side objects that encapsulate the connection behavior between Flex components and the BlazeDS server. Channels communicate with corresponding endpoints on the BlazeDS server. You configure the properties of a channel and its corresponding endpoint in the services-config.xml file.
But in our case, we won't configure it in XML file but programmatically.

BlazeDS: Creating destinations at runtime

Because it is already said a lot on this subject, I won't waste much words, but go straight to the point/code.
/**
* Create blazeds destination at runtime. Follow SVN link to java source files for more details.
* @name hint="Destination name" 
*/
function createDestination(destname,channelId){
 var local = structNew();
 
 //svn: http://opensource.adobe.com/svn/opensource/blazeds/trunk/modules/core/src/flex/messaging/MessageBroker.java
 local.brokerClass = createObject('java','flex.messaging.MessageBroker');
 local.broker = local.brokerClass.getMessageBroker( javacast('null','') );
 local.service = local.broker.getService('message-service');
 local.destinations = local.service.getDestinations();
 
 //check if destination already exists. If it does just return it
 if (structKeyExists(local.destinations,arguments.destname)){ //check if destination already exist
  return local.destinations[arguments.destname]; 
 }
 
 //svn: http://opensource.adobe.com/svn/opensource/blazeds/trunk/modules/core/src/flex/messaging/Destination.java
 local.destination = local.service.createDestination(arguments.destname);
 // Creates a ServiceAdapter instance and sets its id, sets if destination  is manageable
 local.destination.createAdapter('cfgateway');
 
 //svn: http://opensource.adobe.com/svn/opensource/blazeds/trunk/modules/common/src/flex/messaging/config/ConfigMap.java
 local.configMap = createObject('java','flex.messaging.config.ConfigMap').init();
 local.configMap.addProperty('gatewayid',application.CFEventGatewayId);
 
 //svn: http://opensource.adobe.com/svn/opensource/blazeds/trunk/modules/core/src/flex/messaging/config/ServerSettings.java
 local.ss = createObject("java","flex.messaging.config.ServerSettings");
 local.ss.setAllowSubtopics(true); 
 local.ss.setSubtopicSeparator('.');
 local.ss.setDurable(false);
 
 local.destination.setServerSettings(ss);
 
 local.adapter = local.destination.getAdapter();
 
 //Initializes the adapter with the properties.
 local.adapter.initialize('cfgateway',configMap);

 local.destination.addChannel(arguments.channelId);
 
 //Starts the destination if its associated Service is started and if the destination is not already running. 
 local.destination.start();
 
 return local.destination;
}

March 7, 2010

Deploy ColdFusion 8/9 on Glassfish v3

Deploying ColdFusion 8/9 on Sun Glassfish 3 is not much different than it is on IBM WebSphere 7 AS. Except, imho, it is far more optimal, because it takes much less resources (especially if it is setup for dev) and cost nothing. I did this on Win7 platform, but it looks completely the same on Linux platforms. So, let's move.

March 4, 2010

Proud to be second!

Not that I wouldn't like to be a first, but last 2 second places were awesome!
On 29th January I won second place on "Best Of CF9" contest. Contest was  organized by Ray and other Adobe Community Experts. Thank you for that. I won't talk about much about that here, just to emphize that I have "big" plans for Collyba. "Big" actually means that I'm really going to continue development on it, which is, for itself, enormous accomplishment:)

February 17, 2010

What is MVC in few simple words

Today I read an excellent post on FW/1 mailing list. My impression came from ideal I try to follow in my life: "perfection lies in simplicity". I was, several times in situation to try to explain people what MVC (framework) is, and discovered that unexperienced developers have a problem to chew up that subject. One more thing I am sure about is that usually it is a problem with how things are presented more then to whom they are presented. However, this man, Ryan Cogswell, did it in 5 simple sentences. So, for everyone who are still not clear what MVC framework is and how it works, and for me who will use his words to explain others, I'll quote: