RE: Run a class file generated with CF outside of CF
Hey Nathan, So what I was doing was this. I am working on a new web app written with extJS. I have a CFC that I call that builds the client side app. It reads all of the ux and util directories and generates a config file used by jsBuilder to compress, combine and minify the JS used on the client side as well as compress and move CSS and resources. I am working towards getting a CI server setup and also need to ensure all developers can run a build locally. That's where the problem arises. The developers (JS developers) will not have CF installed on their local machine (or our pre-configured EC2 instance), and so I need to move the process of generating the jsBuilder config and executing it out of CF and into something that can run on any developers workstation - without a big install and setup. Since its just 1 CFC, I thought I could just use the java classes. But of course there are dependencies. I found a wicked, super cool solution to this last night! I downloaded Ralio Express and was able to get it to execute my CFC with basically zero setup. Ralio Express is freakin awesome! There's no installer, you just run start.bat to start the server and stop.bat to stop it. So I've added it to my SVN and written an ANT task that starts it up and then runs the CFC that indexes all the directories, read in an XML config file and calls (via cfexcecute) the CFC that handles the build. My ANT task has these targets: target name=startRalio description=Starting Ralio Server depends=MakeDirectories java jar=tools/build/ralio/lib/start.jar dir=tools/build/ralio/ fork=true spawn=true maxmemory=512M arg value=-h/ arg value=-DSTOP.PORT=8887/ arg value=-DSTOP.KEY=railo/ /java !-- wait for server to start up -- waitfor maxwait=10 maxwaitunit=second and socket server=localhost port=/ http url=http://localhost:/index.cfm/ /and /waitfor /target target name=doBuild description=Call the Ralio script to in turn call JsBuilder and do compilation depends=startRalio get src=http://localhost:/build/doBuild.cfm; dest=buildresult.txt / !-- look for buildresult.txt, read the result and throw an error if any errors exist -- loadfile property=buildresult srcFile=${desktop.build.dir}buildresult.html/ echo message=${buildresult}/ antcall target=checkResult / antcall target=stopRalio / /target Never used Ralio before, but very impressed with it! Brook -Original Message- From: Nathan Strutz [mailto:str...@gmail.com] Sent: August-06-11 12:39 PM To: cf-talk Subject: Re: Run a class file generated with CF outside of CF Yeah, it's probably not going to happen. I mean, I am getting famous for saying that it's software, so we can do anything, but the problem is the amount of work it takes to do a thing. In this case you have to load a good amount of the CF server into memory, all the other related classes (one ..class for the cfc, one for each cffunction, etc.), then fake a request response object, or whatever servlets do (I knew at one point). Your best bet is to not do this. It would be much easier to call your CF server rather than try to use the generated code out of context. There are many ways to call into CF from Java. The easiest one would be to hit it via a HTTP URI. Second easiest would be a web service. Third, you can use the CF services gateway - you can set up a local socket listener, which should be really performant. Also, I think Terrence Ryan had a project on RIAForge that lets you call it via the command line console. I wonder, what is the underlying reason for wanting to call the generated classes? Sort of an odd request. Why are you doing this? Maybe there's a better way to accomplish your end goal. nathan strutz [www.dopefly.com] [hi.im/nathanstrutz] [about.me/nathanstrutz] On Sat, Aug 6, 2011 at 10:53 AM, Brook Davies cft...@logiforms.com wrote: Hey, I don't know if this is possible. I want to take a class file from the cfclasses/ directory and run it from the command line outside of the CF server. It complains about not being able to find some cf related classes. I assume this is not at all possible since the classes include lots of CF specific classes for various functions. Is that right? Is this not possible? Brook ~| Order the Adobe Coldfusion Anthology now! http://www.amazon.com/Adobe-Coldfusion-Anthology/dp/1430272155/?tag=houseoffusion Archive: http://www.houseoffusion.com/groups/cf-talk/message.cfm/messageid:346567
Re: Run a class file generated with CF outside of CF
It's Railo, that's r-a-I-L-o, not Ralio. ~| Order the Adobe Coldfusion Anthology now! http://www.amazon.com/Adobe-Coldfusion-Anthology/dp/1430272155/?tag=houseoffusion Archive: http://www.houseoffusion.com/groups/cf-talk/message.cfm/messageid:346568 Subscription: http://www.houseoffusion.com/groups/cf-talk/subscribe.cfm Unsubscribe: http://www.houseoffusion.com/groups/cf-talk/unsubscribe.cfm
Re: Run a class file generated with CF outside of CF
Brook, Great solution. Kind of complicated but totally doable. I won't pretend to understand the complexity of the cfc you have, but all that overhead to run one cfc seems extreme. I have a couple suggestions. 1- use native Ant to do it all. You can concat files and run jsmin or yui compressor straight from ant. I was experimenting with this most of yesterday with some pretty good success and can share it if you are interested. 2- use scripting from within ant. You can include the Rhino js.jar scripting engine, or groovy, or any number of JSR-223 compatible scripting languages and get access to Ant's methods like making a fileset from within javascript, as well as all the underlying java libraries. This works really well because you can still use a cool programming language and keep it all within Ant, no railo or cfml dependencies required. Anyways, just some ideas, and like I said, I can share some of that with you. I plan on talking about this stuff a little bit from my CF Unconference talk at MAX this October, so if you're in the neighborhood... nathan strutz [www.dopefly.com] [hi.im/nathanstrutz] [about.me/nathanstrutz] On Sun, Aug 7, 2011 at 6:37 AM, Brook Davies cft...@logiforms.com wrote: Hey Nathan, So what I was doing was this. I am working on a new web app written with extJS. I have a CFC that I call that builds the client side app. It reads all of the ux and util directories and generates a config file used by jsBuilder to compress, combine and minify the JS used on the client side as well as compress and move CSS and resources. I am working towards getting a CI server setup and also need to ensure all developers can run a build locally. That's where the problem arises. The developers (JS developers) will not have CF installed on their local machine (or our pre-configured EC2 instance), and so I need to move the process of generating the jsBuilder config and executing it out of CF and into something that can run on any developers workstation - without a big install and setup. Since its just 1 CFC, I thought I could just use the java classes. But of course there are dependencies. I found a wicked, super cool solution to this last night! I downloaded Ralio Express and was able to get it to execute my CFC with basically zero setup. Ralio Express is freakin awesome! There's no installer, you just run start.bat to start the server and stop.bat to stop it. So I've added it to my SVN and written an ANT task that starts it up and then runs the CFC that indexes all the directories, read in an XML config file and calls (via cfexcecute) the CFC that handles the build. My ANT task has these targets: target name=startRalio description=Starting Ralio Server depends=MakeDirectories java jar=tools/build/ralio/lib/start.jar dir=tools/build/ralio/ fork=true spawn=true maxmemory=512M arg value=-h/ arg value=-DSTOP.PORT=8887/ arg value=-DSTOP.KEY=railo/ /java !-- wait for server to start up -- waitfor maxwait=10 maxwaitunit=second and socket server=localhost port=/ http url=http://localhost:/index.cfm/ /and /waitfor /target target name=doBuild description=Call the Ralio script to in turn call JsBuilder and do compilation depends=startRalio get src=http://localhost:/build/doBuild.cfm; dest=buildresult.txt / !-- look for buildresult.txt, read the result and throw an error if any errors exist -- loadfile property=buildresult srcFile=${desktop.build.dir}buildresult.html/ echo message=${buildresult}/ antcall target=checkResult / antcall target=stopRalio / /target Never used Ralio before, but very impressed with it! Brook -Original Message- From: Nathan Strutz [mailto:str...@gmail.com] Sent: August-06-11 12:39 PM To: cf-talk Subject: Re: Run a class file generated with CF outside of CF Yeah, it's probably not going to happen. I mean, I am getting famous for saying that it's software, so we can do anything, but the problem is the amount of work it takes to do a thing. In this case you have to load a good amount of the CF server into memory, all the other related classes (one ..class for the cfc, one for each cffunction, etc.), then fake a request response object, or whatever servlets do (I knew at one point). Your best bet is to not do this. It would be much easier to call your CF server rather than try to use the generated code out of context. There are many ways to call into CF from Java. The easiest one would be to hit it via a HTTP URI. Second easiest would be a web service. Third, you can use the CF services gateway - you can
Re: Run a class file generated with CF outside of CF
FWIW, Railo 4.0 will make this even easier by allowing CFML to be executed directly from the command line (or ant) without needing a server running at all. This will effectively make CFML a general purpose scripting language that can be used outside the servlet container! Builds of 4.0 are currently pre-alpha and undergoing testing in-house. Once Railo 3.3 goes gold (should happen around the end of this month), that will become the stable release and 4.0 will appear on the development builds / bleeding edge provider. Sean On Sun, Aug 7, 2011 at 6:37 AM, Brook Davies cft...@logiforms.com wrote: I found a wicked, super cool solution to this last night! I downloaded Ralio Express and was able to get it to execute my CFC with basically zero setup. Ralio Express is freakin awesome! There's no installer, you just run start.bat to start the server and stop.bat to stop it. So I've added it to my SVN and written an ANT task that starts it up and then runs the CFC that indexes all the directories, read in an XML config file and calls (via cfexcecute) the CFC that handles the build. ~| Order the Adobe Coldfusion Anthology now! http://www.amazon.com/Adobe-Coldfusion-Anthology/dp/1430272155/?tag=houseoffusion Archive: http://www.houseoffusion.com/groups/cf-talk/message.cfm/messageid:346576 Subscription: http://www.houseoffusion.com/groups/cf-talk/subscribe.cfm Unsubscribe: http://www.houseoffusion.com/groups/cf-talk/unsubscribe.cfm
RE: Run a class file generated with CF outside of CF
Sean, Re: Railo from the command line That's sounds very cool and will be very useful. Nathan, Yeah, I know its kinda nuts to do all that just to run one CFC. But it is a pretty big CFC and it does a lot including reading in and parsing XML config files that are used by the application, and indexing directories etc. While I would agree it would be better to keep it all inside ANT without the dependency on Railo (thank Peter!), the main factor for me was implementation time. I'm already behind schedule and no time to re-write this code - so using Railo was the fastest solution. It has the added benefit that it is leveraging some existing CFML and plus, CFML scripting is where I am strongest (that and JS..), so it made sense. I think if I had the time I would have done it all in ANT. What you said about using Rhino sounds very promising. Brook -Original Message- From: Sean Corfield [mailto:seancorfi...@gmail.com] Sent: August-07-11 6:22 PM To: cf-talk Subject: Re: Run a class file generated with CF outside of CF FWIW, Railo 4.0 will make this even easier by allowing CFML to be executed directly from the command line (or ant) without needing a server running at all. This will effectively make CFML a general purpose scripting language that can be used outside the servlet container! Builds of 4.0 are currently pre-alpha and undergoing testing in-house. Once Railo 3.3 goes gold (should happen around the end of this month), that will become the stable release and 4.0 will appear on the development builds / bleeding edge provider. Sean On Sun, Aug 7, 2011 at 6:37 AM, Brook Davies cft...@logiforms.com wrote: I found a wicked, super cool solution to this last night! I downloaded Ralio Express and was able to get it to execute my CFC with basically zero setup. Ralio Express is freakin awesome! There's no installer, you just run start.bat to start the server and stop.bat to stop it. So I've added it to my SVN and written an ANT task that starts it up and then runs the CFC that indexes all the directories, read in an XML config file and calls (via cfexcecute) the CFC that handles the build. ~| Order the Adobe Coldfusion Anthology now! http://www.amazon.com/Adobe-Coldfusion-Anthology/dp/1430272155/?tag=houseoffusion Archive: http://www.houseoffusion.com/groups/cf-talk/message.cfm/messageid:346580 Subscription: http://www.houseoffusion.com/groups/cf-talk/subscribe.cfm Unsubscribe: http://www.houseoffusion.com/groups/cf-talk/unsubscribe.cfm
Re: Run a class file generated with CF outside of CF
Yeah, it's probably not going to happen. I mean, I am getting famous for saying that it's software, so we can do anything, but the problem is the amount of work it takes to do a thing. In this case you have to load a good amount of the CF server into memory, all the other related classes (one .class for the cfc, one for each cffunction, etc.), then fake a request response object, or whatever servlets do (I knew at one point). Your best bet is to not do this. It would be much easier to call your CF server rather than try to use the generated code out of context. There are many ways to call into CF from Java. The easiest one would be to hit it via a HTTP URI. Second easiest would be a web service. Third, you can use the CF services gateway - you can set up a local socket listener, which should be really performant. Also, I think Terrence Ryan had a project on RIAForge that lets you call it via the command line console. I wonder, what is the underlying reason for wanting to call the generated classes? Sort of an odd request. Why are you doing this? Maybe there's a better way to accomplish your end goal. nathan strutz [www.dopefly.com] [hi.im/nathanstrutz] [about.me/nathanstrutz] On Sat, Aug 6, 2011 at 10:53 AM, Brook Davies cft...@logiforms.com wrote: Hey, I don't know if this is possible. I want to take a class file from the cfclasses/ directory and run it from the command line outside of the CF server. It complains about not being able to find some cf related classes. I assume this is not at all possible since the classes include lots of CF specific classes for various functions. Is that right? Is this not possible? Brook ~| Order the Adobe Coldfusion Anthology now! http://www.amazon.com/Adobe-Coldfusion-Anthology/dp/1430272155/?tag=houseoffusion Archive: http://www.houseoffusion.com/groups/cf-talk/message.cfm/messageid:346560 Subscription: http://www.houseoffusion.com/groups/cf-talk/subscribe.cfm Unsubscribe: http://www.houseoffusion.com/groups/cf-talk/unsubscribe.cfm