Cloud Technologies

Category:
  • Cloud
  • No categories

PaaS Cloud – The Rise of The Developer Entrepreneur

22nd May 2012 in Cloud

In bad times such as recession, there is the inevitable fact that some people will be laid off by their employer. In these circumstances, when software developer are made redundant they usually set-up shop. The majority goes into providing software development services for small company or friends. They set-up websites to promote their services and few focuses on building their own product.

In London, services based company took a massive hit during the downturn and it is still felt now; well the UK and now in a double-dip recession. So what is my point here? It is much harder to sell services and even harder to export services than products. When providing services, your market has geographical constraint; just think what would take for your to sell your services to a potential client 100 miles from your local?
It used to be hard to build products in the past due to high cost of hardware; to build a java-based product you had to find a suitable host and then pay for a dedicated server or VPS. As you are already tightening your belt, it is likely that you do not want to spend £60 + VAT a month on services to host your product and all the headache of troubleshooting it in case of problem.
Enter the PaaS, Platform as a Service. For this posting I am going to look at PaaS from a Java perspective but it should be applicable to any other programming language.
The competition in the PaaS market is fierce there is no single winner yet. Amazon is the leader for IaaS but not much to be deployed on Beanstalk as yet. If you look around the market, you can see that major technology vendor are jumping on the bandwagon:
Some of those PaaS services are free such as OpenShift and CloudBees. OpenShift runs on JBossAS7 and if you are using Eclipse for it becomes a breeze to develop and deploy, but the only downside is that it’s still in beta stage.
Utilising the current ecosystem of PaaS, you can go from:
inception (idea) -> development -> product
for almost nothing. The prototyping is now free for example you can use Heroku to build Facebook apps  making all the Facebook API directly available to your app and hosted for free (until you out grow your free account of course). I will suggest that developers familiarises themselves with Lean Startup and Lean Software Development.
If you are a developer and out-of work, you have no excuse of no building your cloud apps. Even if you do not want to start a business and you can do it as a learning practice and use that to your advantage next time you are interviewing for a new role.
With PaaS Cloud, every developer is a potential entrepreneur and the barriers to entry are almost non-existent. If you are looking for a job, it is no longer acceptable just to have some sample code on GitHub but you should also have a sample project hosted on a free cloud provider to showcase.
  This is blog was written from Cloudstock 2012

Cloud computing vs Open Source – Most CIO cannot tell the difference

20th February 2011 in Cloud

Few weeks ago, I posted a discussion here in a CIO forum on LinkedIn and frankly some of the comments are very interesting to say the least. Now I decided to bring some technical guys to the discussion table. My argument was and still is as follow
“I have been reading many threads about Cloud computing and I came to conclude that most CIO (maybe because of their business background) do not know the difference or real benefits of Cloud computing or Open Source software.

Hi, I am not expecting everyone to agree with me but here is my argument. Most CIOs are interested in Cloud computing because of cost. COST!!? That’s very interesting because to my humble opinion, this only applies to IaaS (Infrastructure as a Service). If you do not want to spend money on hardware and be left with redundant system then IaaS is a good approach but that’s about it. I work with Cloud computing (specifically SaaS) and this next one might hurt my business but it has to be said; SaaS is not cost saving when you comparing it Open Source alternatives that you can host on your IaaS system…. Read more here

I am not sure that they understood the argument. I was not expecting anybody too agree with me and I wanted CIOs in the group to share their insight not sound like a copy of a Gartner report. Before making any conclusion, keep in mind that I am talking here about Software as a Service (SaaS), as defined here. In network architecture design, the external network  is represented by the “cloud” symbol therefore I would have to agree Wikipedia’s definition of cloud.  It is a software served over an external network regardless of a private network (private cloud) or public network (public cloud). YES – the internet was built on cloud technology. If you use any software over the internet; be it email, search, video or social network, the system is hosted by an external party which you do not have control over. The name cloud is just a marketing gimmick because hosted applications have been around for more than 20 years since Compuserve and Internet Relay Chat (IRC & BBS). So you see, “cloud” is definitely not new. Therefore software delivered over the internet such as Google apps and Salesforce can be also deployed using Open Source alternative. Cloud promises the following: scalability, peace of mind as it maintained by the providers and lower cost. CIO, I will tell you that your software, that it is deployed in the cloud or not will not be able to scale beyond the hardware and network capacity. I have another question for CIOs:
Do CIOs care or know where all their applications are running? 
That question is usually left to the technical team to decide within the budgets of the project and any other company politics. The biggest failures of IT projects is due to the fact that the CIO (or “the business” as it is usually referred as) do not know what they are trying to achieve (lack or misunderstandings of requirements) therefore it goes past the delivery and budget. 
So where does Open Source fits in, one might ask? Open Source software allows a business to take best of breed software and customised them to their own needs for free (as in free beer). If you do not want to support the Open Source software you can get support services but the software is hosted on your own system including your private cloud (Infrastructure as a Service). Let’s put it in to context; if a company requires a CRM system – they can download vTiger, customise it and either support it themselves or buy support. The same goes for an ERP system like Apache Ofbiz and MySQL for database. I am in favour of SaaS offering, after all I run a SaaS-based company. Nevertheless, CIOs do not confuse SaaS as being cheap, if you want something that has a low cost of ownership, then I suggest you go for an Open Source alternative if it exists. So why do I say that most CIO cannot tell the difference; SaaS is not cheap and does not have a lower cost of ownership when comparing it to Open Source alternatives. And by the way, you do not need to have an army of developers to build and customise your Open Source software. Do you really want the SaaS provider on a shared system to have access to your LDAP system? What happens when you want to integrate or port your existing data to your new fancy cloud based system? CIOs should not try to lie to me. I attended many meetings and conferences to know that most of them just want to please the board. What are the differences between cloud and virtualisation? What happens to your existing hardware once you moved your applications to cloud, have you thought of using them for virtualisation? So please do not make uneducated comments as “I don’t know a single CIO who can’t tell the difference between Cloud Computing & Open Source – maybe I move in different circles.” I am not talking about dictionary or Gartner definitions.  
CIOs, after reading this and before replying you should go and sit down with your technical team and ask them the difference, only after that you can provide a good educated comment. If you want to be on the “cloud” train then you are free to do so but if SaaS is not part of cloud offerings, please feel free to enlighten me as I am always willing to learn something new.
Who should make the decisions to go cloud or not? You are the CIOs, you tell me. Is it the developer, the architect, the project manager or the almighty CIOs from his ivory tower? There is no trickery here, every fool can define a word – just do this; think of a word then Google using the following “what is ‘the word’” then voila your definition. If you need someone to school you up then drop me an email. Based on the comments on LinkedIn, all I can say is WOW. Leave the technical aspect to the technical guys and you can focus on playing golf.

ReST Web Services on Google App Engine using NetBeans 6.7

1st November 2009 in Cloud, Coding
When Google announced early this year the availability of the Java language on their cloud system “App Engine”, this was turning point for Java on the web. The reason I am saying that is due to a simple questions; how many hosting providers support Java? And providing free hosting for that purpose… This was a good move in the direction of the JAVA community and the vast list of all the languages that run on the JVM.  But App Engine does not support the full range of the J2EE API. If you are looking to build any EJB, SOAP services or anything that access the file system, then the App Engine is not for you as it does not support it. To make matter worst, some URL connections are not supported by the Google cloud services. I am looking forward to the day when JBoss Seam will be supported entirely by their services without having to hack the code. Alright, it is not that bad; Google App engine supports a number of Java EE frameworks such as Spring.

Alright people, this was a long introduction but I believe it is worth it. You cannot create web services such as SOAP in the Google App Engine therefore, in this short article, I will show you how to develop a ReST based web services that works with the App Engine using NetBeans and Jersey API. Actually, NetBeans comes with Jersey support out the box. Now, let’s get started.
In order to follow the instructions, you will need the following:

NetBeans 6.7+

Google App Engine SDK

Google App Engine Plugin for NetBeans

I would expect you to know to be familiar with JAVA EE development and Google App Engine development. Once you have all the software and components installed, now we can start.

1.    Create a database structure to store your data. I used MySQL Workbench to design my DB structure (Google App Engine does not used MySQL and does not have plan to support it in the future). This schema is to help you understand the relationship between your entities. You can use any UML tools to design your objects’ relationship. There is a reason I chose to design DB in MySQL, the application generates SQL script which I will upload to MySQL DB. I will show you in the next step the main benefits.
 

2.    Based on your DB schema, create a database. You can use any database you want. I used MySQL to initially store my entities.

3.    Launch your NetBeans application and create new Web Application.
 

3.1    Choose Google App Engine as deployment server, click here to see how to register the App Engine in NetBeans.

4.    Now click on: File -> New File. In the popup window, choose Web Services in the Categories panel and RESTFul Web Services from Database and click next.
 

5.    Choose your the database that you want to generate your Entity classes from and click next. ( in the screenshot I am using the sample DB which came with the NetBeans and JAVA DB server. This is just for illustration purposes only as I have previously generated my Entity Classes from the DB schema I generated in step 1).

6.    Check your Class Names and how they relate to the database. Make any changes that you require in this screen, and then click next.
 

7.    In the next screen, just accept the default values and click finish.
 

Well we have done the hard parts. There is another step that missed out due to the fact that I already written the application. When generating Entities from Database, if you do not have a persistence unit available, it will ask to generate one. Here is more information on how to create a persistence unit with NetBeans. Make sure to make sure to choose “Create” as the table generation strategy.
 

By Now, you should be aware that we have create a back-end application store which we can call using normal http post, get, delete and create. NetBeans RestFull methods allows to use XML or JSON to send data to the services. The responses MIME can be anything you like as long as the application server supports it.
WARNING: JERSEY XML processing is not supported by Google App Engine as it uses JAXB. JAXB accesses API which is forbidden by the App Engine stack. If testing the application on the App engine, use the JSON MIME for your data.
Ok so we have generate the classes and methods require to expose our back-end to other application. As it is, this will not work on Google App Engine so we need to make a final change, this time we need to change the persistence.xml file manually. In the project window under the name of your project, click on Configuration files -> persistence.xml and open the file in the editor. Once the file is open in the editor, click on the XML tab and make the necessary changes to make it look like the screenshot.
 

Here is the content of persistence.xml; modify to reflect your entities and make sure the name of the provider is the same as mine and the properties are exactly the same.

    <?xml version=”1.0″ encoding=”UTF-8″?>
    <persistence version=”1.0″ xmlns=”http://java.sun.com/xml/ns/persistence” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=”http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd”>
        <persistence-unit name=”ReSTWebApplicationPU” transaction-type=”RESOURCE_LOCAL”>
            <provider>org.datanucleus.store.appengine.jpa.DatastorePersistenceProvider</provider>
            <class>com.test.api.Userlogs</class>
            <class>com.test.api.Customer</class>
            <class>com.test.api.User</class>
            <class>com.test.api.Business</class>
            <class>com.test.api.Reviews</class>
            <exclude-unlisted-classes>false</exclude-unlisted-classes>
            <properties>
                <property name=”datanucleus.NontransactionalRead” value=”true”/>
                <property name=”datanucleus.NontransactionalWrite” value=”true”/>
                <property name=”datanucleus.ConnectionURL” value=”appengine”/>
            </properties>
        </persistence-unit>
    </persistence>

Now we are ready to run the application and test it in our local environment. Right click your project name in the projects window and click Test RestFul web services, your favourite web browser with page that shows your resources. You can test your services by clicking on the nodes and or drilling through the nodes.
 

You can also use the Firefox RESTClient Plugin to test your app. Also, Google App Engine does not fully support JPA and might throw some exception about not supporting “integer type object for primary key”. If you do experience this issue, change the type of your key.
This is it for now, looking forward to your feedback, good or bad, they are all welcome. Also, if you need JAVA EE help, contact me directly. Also join me on facebook. Hope the guide or tutorial or whatever you call it, was good enough to help you with something.

Please support my blog and its advertisers by clicking on the interesting products/ services on the right (Google ads).  Cheers.