• Home
  • About George
  • Contact Me
Blue Orange Green Pink Purple

Archive for the ‘Model-Glue’ Category

You can use the search form below to go through the content and find a specific post or page:

May 26

Coldfusion, Flex, and SSL

So I want to start off this post by stating that I’m a computer programmer. I don’t consider myself a computer scientist, and I generally prefer my IDEs and other software just work. I don’t want to have to think too much about the configuration, etc. That being said, I have been itching to try Flex for a long time. I finally have an opportunity at work, and the process I had to go through to get it all working was daunting to say the least. But now that I have it in place, everything seems to be going smoothly.

So here’s the situation, I work on a website that resides totally in SSL, it’s an application we’ve developed with some sensitive information in it, so I wanted to make sure everything stays in that realm. Also, I used ColdSpring and Model-Glue (version 2, the sites been around a while now) to get it all running. In order to use the Flash Builder 4.5 wizards to generate the RemoteObjects for ColdFusion, Flash Builder needs to do introspection. I can’t find any other way to actually connect them together.

So the first thing that has to be covered is creating the RemoteObject using ColdSpring. This isn’t as intuitive as I would have first thought, but didn’t seem too difficult. You create a coldspring.aop.framework.RemoteFactoryBean and you have to make sure you instantiate it or else it doesn’t get created. This just means a simple application.remoteFactory.getBean(‘ServiceRemote’) call and you have your remote bean file. All looks good.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<bean id="ServiceRemote" class="coldspring.aop.framework.RemoteFactoryBean" >
	<property name="target">
		<ref bean="Service" />
	</property>
	<property name="serviceName">
		<value>ServiceRemote</value>
	</property>
	<property name="beanFactoryName">
		<value>remotingBeanFactory</value>
	</property>
	<property name="relativePath">
		<value>/model/RemoteObjects/</value>
	</property>
	<property name="remoteMethodNames">
		<value>method1,method2</value>
	</property>
</bean>

The first problem then comes if you try to use the CFC Explorer to go to this file. You’ll find that the CFCExplorer doesn’t trigger the application’s OnApplicationStart or anything else, so you don’t have your bean factory. I’m not sure how others have handled this, but I added in a line like this to the bottom of my application.cfc:

1
2
3
4
5
<cfif not isDefined('application.remotingBeanFactory') and (FindNoCase('cfcexplorer',CGI.SCRIPT_NAME) neq 0 )>
	<cfscript>
		this.onApplicationStart();
	</cfscript>
</cfif>

The second part of the CFIF being to keep that onApplicationStart from firing every time I went to it.

Now, this still didn’t seem to fix the whole problem, and I ended up finding this post on Application Introspection by Terrence Ryan. Boy did that help. I have found that if I add it to the RemoteObject after generation, I get my cfcexplorer to fire up every time. Like so:

1
2
3
4
5
6
7
8
<cfset bfUtils = createObject("component","coldspring.beans.util.BeanFactoryUtils").init()/>
 
<cfset test = new Application() />
<cfif not len(variables.beanFactoryName)>
	<cfset bf = bfUtils.getDefaultFactory(variables.beanFactoryScope) />
<cfelse>
	<cfset bf = bfUtils.getNamedFactory(variables.beanFactoryScope, variables.beanFactoryName) />
</cfif>

Now we get into the really fun stuff. Thanks to Joshua Curtiss’ post on Flex Remoting over SSL I found that you have to make changes in the remoting-services.xml file in your flex folder in order to actually use the secure channel.

After that, if you’re doing your local development like I am with a self-signed certificate, you have to remember to import that certificate into the JVM keystore for your Flash Builder installation. You can see some samples on this here: http://www.java-samples.com/showtutorial.php?tutorialid=210

The last step, is to make sure that your template file that you’re using is a .cfm instead of a .html when you’re running your testing. Thanks to Mike Morearty’s ASP.NET example: Changing the filenames in Flex Builder html templates, I found this pretty simple too. Just make sure you use a format of ${application}${build_suffix}.template.cfm for your CFM pages. And Flash Builder seems to launch in the html page anyway, so you could probably do a url relocate meta tag in that template to forward over to your cfm page and not have to change it every time you launch.

UPDATE: So if you add this line under the opening tag in your index.template.html, it’ll launch your templated CFM page:

1
<meta HTTP-EQUIV="REFRESH" content="0; url=${application}${build_suffix}.cfm">

Pshew! That was a lot of work to get introspection to work for your Data Service Objects. But once you’re there, it does seem to come together very nicely!

May 07

Limit on CFC Size?

So a few months ago I wrote a post about a java.lang.StackOverflowError I had experienced with Model-Glue and ColdSpring.   You can read about it here and here.  We it reared it’s ugly head again today.  I’m not sure exactly what is happening and maybe someone with a better knowledge of ColdSpring can help me out here.  I solved the problem by moving my new function into a different Service.cfc.  Why this worked?  I don’t know, but it seems that it has something to do with the size of the file.  It’s only running about 1500 lines in the service, but I have another service with more functions that runs 3000 lines of code.  But moving it out, definitely solves the ColdSpring compile error and allows me to move forward with development.

Any thoughts out there?

Mar 11

java.lang.StackOverflowError – Solution!

Okay, so this turned out to be a twofold thing. One – I had a circular reference in my ColdSpring file. BeanA needed BeanB and BeanB needed BeanA. The problem was that even though I saw this and had tried to fix it, it wouldn’t solve the problem. I still kept getting the StackOverflowError showing. Then I happened across this post which basically had a thing about the circular references and that you should use a setter injection instead of constructor injection in order to fix the problem. I hadn’t thought of using setter injection for anything other than the things autowired by ModelGlue such as my services in my controllers or the beanfactory so this was a new way of thinking of it for me. The beauty of it though was that it worked! My code now compiled.

My thanks go out to Dan Wilson for getting me pointed in the right direction on the google group for Model-Glue!

Mar 11

java.lang.StackOverflowError

I’ve been working on building a fairly large Model-Glue application and it’s been up and running for going on 4 months. Yesterday I was working on some of the planned enhancements when I ran into a 500 ROOT CAUSE: java.lang.StackOverflowError problem. I’ve tracked it down to one instance of adding one referenced bean onto one of my service instances. I can comment out the bean and everything compiles. I can change it to one of my DAO beans and it works, I change it to another of my service beans and it causes the StackOverflowError again.

I have moved some of the ColdSpring.xml out to includes to reduce the file size and that has had no effect. I updated to 1.2 and had no change either. I’ve seen some minor changes in the rest of the error stack when I change up the service I’m including, but it’s more often than not this as the next couple lines:

at coldfusion.runtime.LocalScope.bindInternal(LocalScope.java:373)
at coldfusion.runtime.LocalScope.bindInternal(LocalScope.java:387)
at cfAbstractBeanFactory2ecfc1246833417$funcRESOLVEBEANNAME.runFunction(coldspringbeansAbstractBeanFactory.cfc:193)
at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:418)
at coldfusion.filter.SilentFilter.invoke(SilentFilter.java:47)
at coldfusion.runtime.UDFMethod$ReturnTypeFilter.invoke(UDFMethod.java:360)
at coldfusion.runtime.UDFMethod$ArgumentCollectionFilter.invoke(UDFMethod.java:324)
at coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:59)
at coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:277)
at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:192)
at coldfusion.runtime.CfJspPage._invokeUDF(CfJspPage.java:2471)

followed by a repeating of the above with several other calls to the cfAbstractBeanFactory instance. I know I’m not providing much, but I’m absolutely stumped as to what can be causing the problem. The bean I am adding that causes the error is also used as a ref bean on another bean without causing the problem. Any ideas that I could poke around at would be much appreciated!

Feb 25

ColdFusion Server Monitor

So last week we had a site running amok on one of our CF8 servers so we decided to use the ColdFusion Server Monitor to see if we could figure it out. Well starting the thing pegged the server’s processors to 100% and we couldn’t get anything done, so we rebooted the machine. After reboot – since it was the middle of the day and all – we noticed that several sites were not coming back up. So we started looking around on the Internet for ways we could fix it. The sites that weren’t coming back up were all Model-Glue run so we thought it might be something in that. Producing the CFLoop error when the application was trying to compile for the first time.

Well after some digging, I came across several posts by people mentioning how Sean Corfield had talked about the JRE version included with CF8 was experiencing a bug in the way it compiled components – something that any Model-Glue application is going to do extensively at startup as it tries to build the entire library for ColdSpring. You can read about it here - ColdFusion 8 And Java 6.  So we changed out the JRE version overnight to the newest release of Java 6 Update 12.  We were still having problems with the sites compiling though, so we switched to 11.  Still no joy.

So we were getting a little concerned – it was going on a full day now since we had the sites go down.  So we said – well let’s try that Server Monitor again and see if we can tell what’s happening with it.  So we fired it up expecting the worst and saw that all of it’s options were still running.  Basically, restarting the server hadn’t set the Server Monitor back to an Off position.  Once we turned all the options off and saved it, the two down sites started again.   Unbelievable!

So the side note is, having found the article by Corfield, we have a more responsive version of ColdFusion 8 with Java 6 running on our server.  I think I can notice a difference, not sure if the clients can or not, but I know it made for a happy day once everything came back on line.

Web Development By George

  • About
    About me. Edit this in the options panel.
  • Photo Stream
  • Categories
    • ColdFusion
    • coldspring
    • Databases
    • Design
    • Flash
    • Flex
    • Internet
    • JavaScript
    • jQuery
    • Model-Glue
    • Personal
    • Subversion
    • Uncategorized
    • YUI
  • Recent Articles
    • Radios and JQuery and IE8
    • Coldfusion, Flex, and SSL
    • Leaving it to the Experts
    • CFAjaxProxy Problems or RTFM
    • I love the Internet
    • Interesting ColdFusion Survey
  • Archives
    • November 2011
    • May 2011
    • May 2010
    • April 2010
    • March 2010
    • February 2010
    • January 2010
    • November 2009
    • October 2009
    • August 2009
    • July 2009
    • June 2009
    • May 2009
    • April 2009
    • March 2009
    • February 2009
  • Search




Add to Technorati Favorites

  • Home
  • About George
  • Contact Me

© Copyright Web Development By George. All rights reserved.
Designed by FTL Wordpress Themes brought to you by Smashing Magazine

Back to Top