This is the second in a series of posts about umbraco. To see my first post click here.
In my first post about umbraco I documented the installation process that I went through for the 4.5.1 release of umbraco. Everything seemed to work out well during the installation. The only hiccup was a minor one encountered while attempting to install the Runway example site. After the installation was completed I was able to login using the administrator account that I set up during the install. I assumed I was ready to rock. Man was I off! I am sitting here two full days later still not understanding exactly what the issue was.
When I logged in the first time I saw all of the top level nodes that I expected to see, unfortunately that is all that I could see. Nothing under any of the nodes was there. I was not able to add anything into the system. This really perplexed me because inside of the umbraco database that I had specified I could see lots of data. I immediately hit the forums and was relieved to find out that I wasn’t the only one having this issue. I assumed a couple configuration settings and I would be on my way.
I was using a brand new Windows 7 VM with SQL Server 2008 Express R2. All signs seemed to point to a permission error since I was able to login. (The site could obviously access the database) I went about re-installing the database and application several times as well as through a serious of checks that I will summarize now. Here are a couple links that had helpful hints.
http://forum.umbraco.org/yaf_postst7395_UMB4RC–No-nodes-below-top-in-all-sections.aspx
These are all of the checks that I performed. If any one reads this and has more suggestions please leave a comment with any other helpful hints.
1.) Made sure the IIS directoy had full trust
2.) Made sure that the App Pool that umbraco was running under was set to v4 and integrated pipes. Also made sure that the Network Service was being used by it.
3.) Made sure that the Network Service had full access permissions to the umbraco web folder.
4.) Made sure that the Network Service had full access to the Windows\Temp folder.
5.) Made sure that the umbraco build was properly extracted from the downloaded zip.
Unfortunately none of these changes helped. Everytime I reinstalled and logged back in the same thing would happen, no nodes. Thankfully the beta release of 4.5.2 was released this week. I installed the beta release with the exact same permissions and could see all of the nodes! I may never get to the bottom of the issue, but I am happy to finally get to play with the framework.
Success!

My knowledge of CMS frameworks is very limited. I definitely understand their role and see the need for them, but outside of Sharepoint I don’t have much experience. This gives me a unique viewpoint that I hope to exploit for a few blogs! I have just started work for a client and we will be using umbraco. After a long period of research and comparison umbraco has been selected because of its light weight and open sourcedness
Since I am just starting with it, I am going to chronicle the setup and configuration process, as well as try to discover some of the features that make working with umbraco and .NET very appealing.
My first stop along this journey is at the umbraco website. My first impression is definitely framed by the MMA video that is on the front of their site. According to the video, they like things that just get the job done. A funny way to make a point and an awesome reference to the movie Never Back Down.
After reading through the site I found the link to download umbraco off CodePlex. I am going to run through a setup of the free version, although I believe the client that I will be working with will be buying a supported version. I download the 4.5.1 version from the codeplex site. I did not opt for the web based installer version. It should be noted that I am working on a new Windows 7 VM with SQL Server Express R2 and VS 2010 installed.
Steps to configure Umbraco:
1.) Unzip the folder that was downloaded from the CodePlex site. Place the files in a folder that can be made a virtual directory in IIS. I am placing the files on my installation in C:\Projects\umbraco
2.) Configure the directory as an application in IIS. (This is a brand new VM. I had to do some installing of IIS and .NET 4. Hopefully you won’t have to do that. Nothing to do with umbraco)
3.) Load the website. Hopefully you see this screen.

4.) Accept the License.
5.) Create a database with the name that you would like your umbraco instance to use. I am calling the database name ‘Umbraco’
6.) Fill in the database information for your setup. You can select from 3 different database types. I will be using the SQL Server Driver.

7.) Click ‘Install’ to install the database tables.
8.) Validate the permissions. On my install I got the following message and didn’t have to do anything else.

9.) Set a new admin password.
10.) For this run through I am going to install ‘Runway’ so that I can hopefully see some of the cool features of umbraco. I am sure that in production that isn’t something that is installed.
11.) Launch umbraco and login!
*Note that when I first attempted to install Runway I got the error below. After some research I found this thread on the umbraco forum. The advice was to hit the back button and attempt the install again. Sure enough I hit the back button, made no changes to the page, clicked install and it worked.

Overall I found the installation process to be pretty easy to follow and bar the one exception thrown when installing ‘Runway’. I am looking forward to getting into umbraco and playing with some features. More blogs to come!
There has been exciting news rippling through cyberspace today. Adobe Systems has signed a definitive agreement to launch a public tender offer to acquire Day Software. I would like to send out a big congratulations to our friends at Day Software. Having been a professional implementation partner of Day since 2006, we have seen the product evolve from CQ3.x to CQ4.x and then to their flagship version, CQ5.
Consider leveraging a public cloud computing service such as Amazon EC2, Google App Engine or Microsoft Azure for hosting the backend services for your next mobile application and sleep well at night knowing you can scale without needing to talk to your hardware vendor and procurement department.
So some of the developers here at CityTech have been busy putting together an application that will run at this year’s Red Hat Summit/JBossWorld. I’m sure you’ll hear more about it across the CT blogs (you may have already), but basically it will be a cross platform mobile app that will serve up Red Hat/JBoss trivia questions to conference participants who have downloaded the app and registered. Users will then accumulate points by answering questions, and there will be a weighted raffle for great prizes at the end. In addition to all of the mobile goodness, the application will feature some cool JBoss projects on the back end including Infinispan, ModeShape and RESTEasy. Oh, the back end will all run on JBossAS installed on AWS.
We wanted to write this application to showcase some of the JBoss projects we are excited about. Another JBoss project we are really excited about hear at CityTech is HornetQ. If you don’t know much about HornetQ, basically it is is an open source project to build a multi-protocol, embeddable, very high performance, clustered, asynchronous messaging system. And if “very high performance” didn’t get the point across its really fast.
We decided to use HornetQ to capture system events on the back end and put them on a queue so our flex-based booth application (stop by and take a look) could consume and display them. For instance, any time a user’s point total changes, a message will be produced, and then consumed by our booth app, via a HornetQ queue.
I was charged with getting HornetQ up and running. It had been awhile since I had done much JMS work, so I anticipated a bit of a learning curve, but the HornetQ distribution makes it really easy to get started. In fact, there are a quite a few examples built into the distribution. Chances are that for whatever problem you need to tackle, there will be a corresponding example to help get you started. Just open a command prompt for the given example, and run the build script. The script will start up HornetQ, run the example, display the output, and shut down HornetQ for you. The ReadMe files and client code should make it pretty clear what is going on. And the user’s guide can help clarify any remaining questions.
For our project, we ended up going with a relatively straightforward queue to suit our needs. We thought about setting up a cluster or failover node, but we are running our project on AWS, as it sounds like HornetQ clusters and AWS don’t play well together as of now.
Most of the work ended up being in the consumer and producer clients. We only had to modify a few XML files on the HornetQ installation itself. The following files, located in your config directory, where be will where most of your config is done
hornetq-beans.xml - defines the beans to be loaded by the JBoss Microcontainer. We modified to set up our JNDI.
hornetq-configuration.xml – the main HornetQ configuration. Here you define your connectors and acceptors.
hornetq-jms.xml – define your topics and queues to be run here.
Well, I hope that provides a quick introduction to HornetQ. Check out the docs and get started.
Don’t wait for Ed McMahon to come knocking on your door for this Sweepstakes. Instead, make sure you grab the CITYTECH mobile app “Summit World 2010″ which will be released to the Apple AppStore and Google MarketPlace sometime before JBoss World on June 22, 2010 (keeping fingers crossed on AppStore acceptance). Once you have the mobile app and the conference starts, you can start answering trivia questions served up by our “Trivia Server” running in the Amazon Cloud using JBoss ModeShape and Infinispan. Questions are mostly technical in nature and each correct answer is worth specific points. The more points you earn, the better your chances of winning great prizes in the sweepstakes drawing at the end of the conference. I know the marketing folks are planning to top the Kindle prizes from last year, so make sure to stop by the CITYTECH booth to see what they have in mind.
Our goal for JBoss World 2010 was to build a distributed and highly-scalable system with JBoss Community projects to show it could be done without the need for expensive commercial software. Truth be told, we also wanted to get the chance to really put some of these newer technologies to the test and make sure they delivered on their promise. We figured this Trivia Sweepstakes would be a good way to exercise the system because it gives everyone the chance to show off their technical expertise in answering the questions AND to win some cool prizes.
Technical Overview
This was a team project at CITYTECH with several people specializing in the different technologies. As such, I don’t plan to cover each piece in depth, but I will discuss at a high level what technologies were used, where, and why. Some of the other team members will be adding their own specific blogs in the coming weeks leading up to the conference so keep an eye on those. I would also invite anyone at the conference to stop by the booth and grab someone from the development team during the conference to talk details.
The diagram below outlines a handful of the technologies used and what function they served:
Let me discuss these each briefly and how they played a part in the overall system. A shopping list of the major technologies used in the system include:
Used as the container for the RESTEasy web app which includes ModeShape and Infinispan as well in this case. JBossAS6 is included as part of CirraAS and can be monitored OOTB by RHQ, so was pretty much an automatic choice to use. Note that we also use Jetty for quick integration testing via Maven, so pretty much any servlet container will do the job.
ModeShape provides a JCR API to our data and let’s us choose one or more back-end datasources. In our case, we only had a single datasource (Infinispan) in mind so we did not need the federation capabilities (yet), but wanted to have it to front an Infinispan Cache. We chose to add this layer for several reasons: One, it provides a data access layer that is standardized (JCR). Two, our team has plenty of JCR experience from working with CRX and Jackrabbit. Finally, we wanted to take advantage of the JCR search capabilities across our data. ModeShape has several connectors included so wiring it to Infinispan is included; however, we did encounter a few hurdles on this task that I promise to elaborate on in an upcoming blog.
Infinispan provides us with an in-memory cache to store the content used in the system (users, questions, answers, etc). We are running Infinispan in the distributed mode to allow for the greatest scalability of the system without impacting performance. We have several Infinispan instances running in EC2 and via the Infinispan configuration we indicate how many copies of the content we want spread across the cluster. We always want at least 2, to ensure a single node failure does not result in the loss of data. Infinispan itself determines which nodes get which copies and handles forwarding requests to the proper nodes when the node in question does not have a copy of that content. This approach allows us to scale the system by adding Infinispan nodes as needed without degrading performance the way a replication approach would do.
A quick note on Infinispan in EC2. UDP communications are not allowed in EC2, so we have Infinispan using TCP and an Amazon S3 bucket that is accessible by all nodes as a workaround. The JGroups included with Infinispan already has an S3Ping option and Infinispan comes with a sample configuration that is ready to go. Check out the Infinispan blog at http://infinispan.blogspot.com/2010/05/infinispan-ec2-demo.html for details.
Though ModeShape has a RESTful API, those are more data level services of a true RESTful nature. That was not exactly what we needed for this system. Instead, we needed to expose coarse-grained business services over HTTP and that is where the RESTEasy framework came into play for us. The services exposed by our RESTEasy web app allow cross-platform consumption. For example, we have native iPhone clients, native Android clients, JavaScript clients, and Flex clients all using these same services. The services in turn handle the data access via ModeShape’s JCR API.
The system uses HornetQ for a high performance messaging system to capture all “system events” to allow for later consumption.
RHQ is the management console with associated agents installed on all nodes. RHQ is setup automatically if you use CirrAS AMI’s in Amazon as part of the Mgmt AMI instance. RHQ is required if you use CirrAS and allows for the management and monitoring of the other JBoss instances.
CirrAS is a sub-project of the StormGrind project. It provides 3 AMI types using the Fedora OS that allow you to have a typical JBoss cluster running in EC2. The 3 AMIs include: a “front-end” AMI that has Apache HTTPD with Mod_Cluster and JGroups configured for EC2, a “back-end” AMI that autostarts JBoss6 with a clustered profile, and a “mgmt” AMI that runs the RHQ server already mentioned. We decided to use CirrAS because it provided almost everything we needed and saved us some time setting things up. The trade-off to all this automation is that you still have to dig in and figure out exactly what the CirrAS scripts are doing. As CirrAS is still a beta version, this can be a challenge as the documentation is still pretty light.
The products available in AWS allow the system to provide the needed scalability. EC2 is used to power up JBoss instances within minutes. We have also researched using the Elastic Load Balancer to front the Apache CirrAS AMI and the Amazon RDS to serve as the write-behind CacheLoader for our Infinispan cache.
The PhoneGap framework was used to generate a cross-platform mobile application for both the iPhone and Android platforms. Note that a web-based client is also available for conference attendees without iPhone or Android devices.
A Flex application is used in the system to provide an RIA for the CITYTECH booth at the conference. The Flex app uses the RESTEasy services hosted in EC2 to access the data in ModeShape as well as BlazeDS to pull messages from the HornetQ server in EC2.
As I mentioned before, keep an eye on the CITYTECH blogs as other team members will most likely be discussing specific areas of the system in greater detail in the coming weeks. Also please stop by our booth to say hello if you are at the conference later this month.
Finally, I want to thank all the community folks who were very active in their support through the forums. As mentioned before, several of these technologies are relatively new, so having an active and responsive community to provide support is essential.
Good luck with the Trivia Sweepstakes!
GateIn Portal, a JBoss Community project, is a merge of the JBoss Portal and eXo Portal projects and forms the primary component of the new JBoss Enterprise Portal Platform 5 released just 10 days ago. The CITYTECH Reseller Portal (CRP), which runs in and leverages GateIn provided features, provides CITYTECH a web-based channel for selling Red Hat software (RHEL and JBoss). The current version (1.0) allows CITYTECH Sales Representatives to quickly create software quotes on-demand, generate PDF quote documents, and send these to customers.
Thanks to the JBoss Portlet Bridge, all business functionality has been developed using Seam, JSF, Facelets, and RichFaces. Essentially, all business functionality and corresponding user interfaces are provided by a Seam based web application deployed alongside GateIn Portal. Each major area of functionality (quotes, products, customers, distributors, price lists, etc.) is configured as an individual portlet that is deployed to GateIn Portal. This approach has provided the following benefits:
Currently, all CRP portlets are bundled in the same war. Seam, JSF, Facelets, and RichFaces framework libraries are bundled in the CRP war as well. GateIn and CRP can be deployed independently from one another for upgrades, bug fixes, enhancements, new features, etc.

Once the JBoss Portlet Bridge is configured to support these frameworks, exposing the different functional areas of the seam application as portlets is straightforward. Basically, in the portlet.xml configuration file a portlet definition is added and configured with the seam app facelets page to initially render. This is specified via an initialization parameter, as shown below on line 9.
<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd"
version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd">
<portlet>
<portlet-name>Quotes</portlet-name>
<portlet-class>javax.portlet.faces.GenericFacesPortlet</portlet-class>
<init-param>
<name>javax.portlet.faces.defaultViewId.view</name>
<value>/QuoteList.xhtml</value>
</init-param>
<init-param>
<name>javax.portlet.faces.preserveActionParams</name>
<value>true</value>
</init-param>
<expiration-cache>0</expiration-cache>
<supports>
<mime-type>text/html,application/pdf</mime-type>
<portlet-mode>VIEW</portlet-mode>
</supports>
<portlet-info>
<title>Quotes</title>
</portlet-info>
</portlet>
</portlet-app>
GateIn security features are leveraged to implement authentication and authorization for the CRP application.
Authentication
CRP users are stored in the GateIn identity service datastore which has been configured to use a database on CITYTECH’s production MySQL database server. The GateIn provided sign-in form is used to authenticate users against this datastore.
A future enhancement to CRP will be to integrate with CITYTECH’s existing corporate Active Directory LDAP so that CITYTECH employees who use the CRP application will not need accounts created and maintained for them additionally in GateIn . This should be again a matter of configuration as GateIn uses PicketLink IDM under the covers for identity management which supports the use of different identity stores such as LDAP.
Use of the JBoss Portlet Bridge automatically provides single sign-on between GateIn and the seam application. A user must authenticate only once via the GateIn sign-in form and their authenticated session is shared between both GateIn and the portlet backing seam application.
Authorization
In GateIn, there are users, groups, and memberships. A membership represents the role a user plays within a group he belongs to. Access and edit permissions at the portal, portal page, and portlet levels are based on which groups, or memberships within those groups, have been granted these permissions (access or edit). The role based security requirements for CRP are mapped to the GateIn model as such:
With this mapping, all authorization requirements of the CRP application are met by configuration via the GateIn portal administration user interface. For example, access to the CITYTECH portal site is restricted to users who belong to the group CITYTECH. Access to the quote portlet which provides functionality to generate and send quotes to customers is restricted to users who have Sales membership in the CITYTECH group. Access to the quote approval portlet is restricted to those who have Executive membership. Within these restrictions, users can create their own customized portal pages and arrangement of portlets which they have authorized access to.
The security manageability of the CRP application is very flexible and is provided entirely by GateIn out-of-box functionality.
It is envisioned that CITYTECH will offer customers access to the Reseller Portal for viewing and approving quotes and orders and making purchases. With the CRP customer facing, it will make sense to have different themes for the different product lines being sold. It is likely this will be achieved by creating different portal sites for each product line and giving each it’s own customized portal skin.
Additionally, using static content portlets that allow System Admins, Executives and Sales Reps the ability to write content related to the products, specials, promotions, etc. they are selling via the CRP.
GateIn’s support for running multiple portal sites and it’s customization and personalization features should go a long way in achieving this vision.
The latest version of Music Explorer FX is now available. It boasts some significant changes, most notably access to full-length, licensed audio tracks. Click the button to launch it, and read on for the new features.
A significant limitation of previous versions of MEFX was the lack of access to licensed audio. Since most music is not freely available, MEFX would have to offer up whatever free content it could find on the internet. So if you brought up Lynyrd Skynyrd, for example, you were likely to come up with five remixes of someone sampling Freebird, when really all you wanted is the studio version of Sweet Home Alabama.
Thanks to a new content provider program between the Echo Nest, and Play.me (a music content provider) this problem is a thing of the past. MEFX can now offer up full-length audio.
By default, MEFX will play 30 second preview clips of any given artist. If you sign in with your play.me account though, you get access to the full-length versions (the sign in button is in the upper right part of the application).
If you don’t have a play.me account, you can register (for free) via MEFX — only an email address is required. A free account nets five hours per week of full-length audio. If you feel like paying money you can get an unlimited amount of audio streaming (a bit of a disclaimer here: I’m told that Play.me is U.S. only…for now).
Beyond access to licensed content, this new version also introduces the Playlist, found in the lower left corner of the application.
Instead of being limited to only playing audio from the artist in the middle as previous versions were, you can now add any artist to the playlist, and continue browsing. This keeps the music playing while you browse around the artist space.
Click the “+” button below the artist to add it to the back of the playlist. If you see something that you want to play immediately, then click the “>” button instead.
Once in the playlist, you can hover over an artist to modify their position in the list.
Since MEFX is now pulling from a real catalog of audio data, the number of tracks per artist has grown significantly (over 20 tracks in some cases). In order to better manage this, you can click on the artist’s image to “flip it over” and view the available tracks. From here you can click on an individual track to include or remove it from the playlist. Here’s a screenshot showing the track list mid-flip.
MEFX 2.0 sports a new look — most notably this is reflected in the “shelf” component at the bottom, where most of the goodies reside.
In addition to the playlist, described above, the artist history resides here on the shelf as well on the right side.
Videos, News, Bios, Reviews, Blog entries — all sorts of aggregated information about the artist is available to you. Just click on the “i” (”info”) button below the artist.
Click the “images” button under the artist to view the image gallery (as with the older versions).
Don’t forget the “shelf popup” in the lower right corner (click the “up arrow” to bring it up).
This extra control panel allows to to tweet your musical journey (as before), adjust the popularity of artist recommendations via the “Fame” knob, and toggle Auto-Play.
Auto-Play will enable MEFX to randomly pick artists and fill the playlist for you. This “auto pilot” mode is great for parties when you want to keep the music going without user intervention and also want something interesting happening on the screen.
I’m excited about this new version of MEFX. I feel that it has crossed over from “interesting experiment” to “useful application”. Please check it out, and let me know what you think.
Check out the main site for more information about MEFX.
Oh, and be sure to check out MEFX 2.0’s mention in a recent Billboard article.
Enjoy!
The CITYTECH Azure Calculator (CAC) is a Silverlight based tool that takes IIS log files as input and produces a graph that shows how much it would cost to run that server on Windows Azure. Check the CITYTECH Azure Calculator out here.
CAC has the ability to parse multiple IIS Log Files, we wanted to allow only one file to be selected, but we observed allowing one file will not produce good results, so we worked on allowing multiple files to be selected and processed.
So we use an OpenFileDialog and allow selecting only “*.log” files and we store the selected file(s) information in List object.
We were reading each file and converting to Byte List and then the List to ByteArray and sending it for processing by the Parser. We observed that it was too memory consuming and had chances of crashing the user’s browser, this required design change, so we then decided to read each file, convert to ByteArray and send it for processing by parser so we do not consume more memory and this design lead to performance improvement by over 50% and no chances of crashing the user’s browser.
So we are just reading the IIS Log files and not uploading it anywhere.
Since it’s a time taking activity to process few 100 meg we wanted to show the progress indicator and to show it we had to use background process to do it. We were contemplating general progress indicator to Silverlight busy indicator, then we decided to use the general progress indicator with the IsIndeterminate=”True” property and in a child window so it’s a nice user experience, when the child window pops up and closes itself.
ThreadPool.QueueUserWorkItem(state =>
{
Action callback = () =>
{
//Close the child window
};
try
{
//Send each file to the Parser
Dispatcher.BeginInvoke(() => Application);
}
catch (Exception ex)
{
callback = () => { throw ex; };
}
Dispatcher.BeginInvoke(callback);
});
This way we achieved a nice user interface as well as least possible memory utilization and multiple file processing.
The CITYTECH Azure Calculator (CAC) is a Silverlight based tool that takes IIS log files as input and produces a graph that shows how much it would cost to run that server on Windows Azure. Check the CITYTECH Azure Calculator out here.
OK, we agreed, we should track information about the visitors using Google Analytics, but how to view that information and what Reports Google provides to analyze it.
There are multiple reports and you can customize it too…
Following are some of the interesting info we can track




Track User Activity, optimize your site and enjoy the results.
References