We all know the importance of education...
Blog
ColdBox Training in 15 days, hurry good discounts online!
Just a reminder that our 3 or 2 day ColdBox training is only 15 days away, so what are you waiting for, get registered and get the best out of professional training. Secret discount codes (cboxrulez) Check out some quotes from fellow CFer's
The Coldbox training raised my game in developing Coldfusion applications. It gave me a great understanding of the framework itself and vastly improved my original conceptions on OOP programming. Coldbox is a f...
Installing ColdBox Sample Applications from GitHub
This is a brief tutorial on how to install the ColdBox Sample Applications downloading from GitHub
Installing ColdBox Sample Applications from GitHub from Curt Gratz on Vimeo.
Again, all of the sample applications have been updated to ColdBox 3.0.0 standards including using the complete cfc configurations which makes them more portable and installing them easy. Hope you enjoy.
ColdBox Sample Applications get some ColdBox 3.0 love
We are proud to announce that all of the ColdBox sample applications have been updated for the upcoming ColdBox 3.0 release. Sample applications are important as they increase the speed of entry into any development related task.
Give me a good sample and I can adopt it to my needs and be well on my way to learning the concept.
We believe so much in them, that there are over 20 of them covering a number of different techniques and tasks for ColdBox.
You can download the latest versions of our sample applications for ColdBox from http://github.com/ColdBox/coldbox-samples
Here is a quick run down of the sample applications.
Hello World
by Luis Majano
LightWire Sample
by Luis Majano
JavaLoader
by Luis Majano
News Web Service
by Luis Majano
Feed Reader Samples
by Ben Garrett
Feed Generator Samples
by Ben Garrett
Sample Login App
by Luis Majano
UDF Library Usage
by Luis Majano
i18N Sample Gallery
by Paul Hastings & Luis Majano
ColdBox Flex Tester
by Luis Majano
ColdBox cfcViewer Sample
by Luis Majano
ColdFusion 8 Ajax Sampler
by Sana Ullah & Luis Majano
Coldbox SES
by Sana Ullah & Luis Majano
Simple Blog
by Henrik Joreteg & Luis Majano
Ajax ColdBoxReader
by Oscar Arevalo
Transfer Sample
by Luis Majano
A very simple CRUD and Listing application using Mark Mandel's Transfer Library. This is a great example to learn how to tuse the Transfer Library and the ColdBox Framework.
Advanced Transfer Sample
by Ernst van der Linden
ColdBox-ColdSpring-Transfer
Security & Transfer Sample
by Ernst van der Linden & Luis Majano
ColdBox-LightWire-Transfer
Illidium cfc Code Generator
by Brian Rinaldi
This is a port of the actual application. It is by far specifically designed for ColdBox. It might contain unusual or redundant code.
ColdBox Training in 30 days, hurry!
Using the BaseORMService and VirtualEntityService Extras
I thought I would take a moment and explain some of the different ways you can use the BaseORMService and VirtualEntityService extras that are included in Coldbox 3.0 M5 and above.
Before I get into the different uses for each, lets define them both and hopefully that will help clarify the differences
Base ORM Service:
The BaseORMService is an amazing service layer tool that can be used in any project. The idea behind this support class is to provide a very good base service layer that can interact with hibernate and entities inspired by Spring's Hibernate Template support. It provides tons of methods for query executions, paging, transactions, session metadata, caching and much more. You can either use the class on its own or create more concrete service layers by inheriting from this class. We also have a virtual service layer that can be mapped to specific entities and create entity driven service layers virtually. ColdBox also offers several integrations to this class via plugins and the autowire DSL.
Virtual Entity Service:
The virtual entity service is another support class that can help you create virtual service layers that are bounded to a specific entity for convenience. This class inherits from our Base ORM Service and allows you to do everything the base class provides, except you do not need to specific which entityName you are working with. You can also use this class as a base class and template out its methods to more concrete usages.
BaseORMService/ORMService Plugin
So first, how might you use the Base ORM Service extra
First, you could use it to create a concrete service that has all the BaseORMService methods in it. For example. UserService.cfc might look like this
import coldbox.system.orm.hibernate.*
component extends="BaseORMService"{
public UserService function init(){
super.init(useQueryCaching=true);
return this;
}
}
Then you can call things like this
function list(event){ var rc = event.getCollection(); var UserService = getModel("UserService"); //get a listing of all users with paging rc.users = UserService.list(entityName="User",sortBy="fname",offset=event.getValue("startrow",1),max=20); event.setView("user/list"); }
Or any of the other available methods in the BaseORMSerivce. Now with our UserService, we are free to add any of our own business logic to that service that is needed, but have a ton of really cool methods already available to us.
Another way to use the BaseORMService, and I think a simpler way if via the ORMService Plugin. This plugin gives you access to all the methods in the BaseORMService.
Mainly, I don’t directly use the BaseORMService cfc. I either create services based of the VirtualEntityService, via the AutowireDSL (which I will explain shortly), or use these features via the ORMService Plugin.
To use the ORMService plugin, we can modify our code above slightly and are ready to go.
function list(event){ var rc = event.getCollection(); //get a listing of all users with paging rc.users = getPlugin("ORMService").list(entityName="User",sortBy="fname",offset=event.getValue("startrow",1),max=20); event.setView("user/list"); }
I find myself using the ORMService Plugin extensively, so I also always autowire it to my handler, making the code above even simpler.
// A handler component{ property name="ORMService" inject="coldbox:plugin:ORMService"; function list(event){ var rc = event.getCollection(); //get a listing of all users with paging rc.users = ORMService.list(entityName="User",sortBy="fname",offset=event.getValue("startrow",1),max=20); event.setView("user/list"); } }
How easy is that. Tons of functionality right at your fingertips.
VirtualEntityService /Autowire Entity DSL
Generally when creating a concrete service I want to base off of the BaseORMService, I extend the VirtualEntityService and initialize it using the name of the entity that the service concerns.
Basically, the VirtualEntityService inherits from the BaseORMService and allows you to template out its methods to a specific entity for more concrete uses. This eliminates the need to type entityName=”someEntity” in your calls, and anything that saves me typing, saves me time and is a GOOD thing.
So, if I was creating that same UserService from above using the VirtualEntityService, it would look like this.
import coldbox.system.orm.hibernate.*; component extends="VirtualEntityService"{ public any function init(){ super.init( "User", true, "user.query.cache" ); return this; } // Override or add methods as you see fit now. }
Pretty cool huh? Now my list function looks like this
function list(event){ var rc = event.getCollection(); var UserService = getModel("UserService"); //get a listing of all users with paging rc.users = UserService .list(sortBy="fname",offset=event.getValue("startrow",1),max=20);
event.setView("user/list"); }
So, removing the entityName=”User” from the call, but if you had to call the service even 10 times, that’s a lot of typing saved.
Autowiring
There is also an autowiring DSL to quickly create services based on a specific entity that you can use if don’t need any additional methods or need to override any methods in your service layer.
Per the documentation
Type |
Description |
entityService |
Inject a BaseORMService object for usage as a generic service layer |
entityService:{entity} |
Inject a VirtualEntityService object for usage as a service layer based off the name of the entity passed in. |
// Generic ORM service layer property name="genericService" inject="entityService"; // Virtual service layer based on the User entity property name="userService" inject="entityService:User";
So, to implement our UserService and list function we have had in our examples we could have a handler like this
// A handler component{ property name="UserService" inject="entityService:User";
function list(event){ var rc = event.getCollection(); //get a listing of all users with paging rc.users = UserService.list(sortBy="fname",offset=event.getValue("startrow",1),max=20); event.setView("user/list"); } }
For more information on the BaseORMService and VirtualEntityService, here are some links to the complete documentation.
http://wiki.coldbox.org/wiki/Extras:BaseORMService.cfm
http://wiki.coldbox.org/wiki/Extras:VirtualEntityService.cfm
Hopefully this post helps you understand how you can use these AWESOME extras in your environment.
New ColdBox Training pre Adobe Max in Los Angeles
We have just released our new training course 3 days before Adobe Max 2010 in Los Angeles, California (October 22,23,24). This is a brand new course for CBOX-101 as it includes everything for ColdBox 3.0.0 + a 1 day workshop where we will do boot camp coding! You have the option of either attending the 2 day train...
New ColdBox Training Testimonial: George Murphy
Mega ColdBox Training Blowout
Two more days and registration closes and there are only 2 seats left, so we are doing a mega blowout sale on preCFunited ColdBox Training. So click here and find out your discount. This one-time opportunity ends tomorrow night, so hurry.
...ColdBox preCfunited Training closes this Friday
This Friday is the last day to register for our pre-CFUnited training on the ColdBox Platform. We are really excited to present entirely new material for this training all based on the upcoming 3.0.0 release targeted for mid August.
So if you would like to learn about this exciting and enterprise ready ColdFusion development pla...