Upgrade to Pro — share decks privately, control downloads, hide ads and more …

How we took our server side application to the cloud and liked what we got

How we took our server side application to the cloud and liked what we got

A session at 33rd Degree 2013

Taking traditional Java server-side applications to the multi-tenant Cloud introduces lots of challenges. In this session, we will share our experience of creating a SaaS offering, which is currently being used successfully by the Java community. We will start by reviewing the challenges we faced during the SaaS conversion. Next, we will share our experience with the EC2 platform. We will discuss the importance of automation and how we use tools like Chef and Puppet for SaaS provisioning. Finally, we will describe how creating a SaaS version of our product shifted our way of thinking about software release. We will recommend what’s required to successfully release both SaaS and downloadable versions of your product.

Baruch Sadogursky

March 15, 2013
Tweet

More Decks by Baruch Sadogursky

Other Decks in Technology

Transcript

  1. Benefits for the user:

    View full-size slide

  2. Benefits for the user:
    – Zero maintenance

    View full-size slide

  3. Benefits for the user:
    – Zero maintenance
    – Support

    View full-size slide

  4. Benefits for the user:
    – Zero maintenance
    – Support
    – Always updated

    View full-size slide

  5. Benefits for the user:
    – Zero maintenance
    – Support
    – Always updated
    Drawbacks for the user:

    View full-size slide

  6. Benefits for the user:
    – Zero maintenance
    – Support
    – Always updated
    Drawbacks for the user:
    – Can’t install plugins

    View full-size slide

  7. Benefits for the user:
    – Zero maintenance
    – Support
    – Always updated
    Drawbacks for the user:
    – Can’t install plugins

    View full-size slide

  8. Benefits for the user:
    – Zero maintenance
    – Support
    – Always updated
    Drawbacks for the user:
    – Can’t install plugins

    View full-size slide

  9.  
     

    View full-size slide

  10.  
     
     

    View full-size slide

  11.  
     
     
     

    View full-size slide

  12.  
     

    View full-size slide

  13.  
     
     

    View full-size slide

  14.  
     
     
     

    View full-size slide

  15. Java 7: 07/2011

    View full-size slide

  16. Java 7: 07/2011
    + 24 months =

    View full-size slide

  17. Java 7: 07/2011
    + 24 months =
    Java 8: 07/2013

    View full-size slide

  18. Java 7: 07/2011
    + 24 months =
    Java 8: 09/2013

    View full-size slide

  19. Java 7: 07/2011
    + 24 months =
    Java 8: 09/2013
    + 24 months =

    View full-size slide

  20. Java 7: 07/2011
    + 24 months =
    Java 8: 09/2013
    + 24 months =
    Java 9: 09/2015

    View full-size slide

  21. Java 7: 07/2011
    + 24 months =
    Java 8: 09/2013
    + 24 months =
    Java 9: 12/2015

    View full-size slide

  22. Java 7: 07/2011
    + 24 months =
    Java 8: 09/2013
    + 24 months =
    Java 9: 12/2015

    View full-size slide

  23.  


    View full-size slide

  24.  




    View full-size slide

  25.  





    View full-size slide

  26.  






    View full-size slide

  27.  








    View full-size slide

  28.  









    View full-size slide

  29.  










    View full-size slide

  30. ┌── lib
    ├── webapps
    │ ├── customer-name
    │ ├── other-customer-name
    │ └── many other customers
    └── other dirs (bin, conf, log, etc)

    View full-size slide

  31. public class AppCtxHolder implements ApplicationContextAware {
    private static ApplicationContext ctx;
    public AppCtxHolder() { }
    public void setApplicationContext(ApplicationContext applicationContext) {
    ctx = applicationContext;
    }
    public static ApplicationContext getApplicationContext() {
    return ctx;
    }
    }

    View full-size slide

  32. public class AppCtxHolder implements ApplicationContextAware {
    private static ApplicationContext ctx;
    public AppCtxHolder() { }
    public void setApplicationContext(ApplicationContext applicationContext) {
    ctx = applicationContext;
    }
    public static ApplicationContext getApplicationContext() {
    return ctx;
    }
    }

    View full-size slide

  33. public class AppCtxHolder implements ApplicationContextAware {
    private static ApplicationContext ctx;
    public AppCtxHolder() { }
    public void setApplicationContext(ApplicationContext applicationContext) {
    ctx = applicationContext;
    }
    public static ApplicationContext getApplicationContext() {
    return ctx;
    }
    }

    View full-size slide

  34. ┌── lib
    ├── webapps
    │ ├── customer-name
    │ │ ├── favicon.ico
    │ │ ├── META-INF
    │ │ └── WEB-INF
    │ │ ├── web.xml
    │ │ └── classes
    │ │ └── DUMMY.TXT
    │ ├── other-customer-name
    │ │ ├── favicon.ico
    │ │ │ └── META-INF
    │ │ └── WEB-INF
    │ └── many other customers
    └── other dirs (bin, conf, log, etc)

    View full-size slide

  35. ┌── lib
    ├── webapps
    │ ├── customer-name
    │ │ ├── favicon.ico
    │ │ ├── META-INF
    │ │ └── WEB-INF
    │ │ ├── web.xml
    │ │ └── classes
    │ │ └── DUMMY.TXT
    │ ├── other-customer-name
    │ │ ├── favicon.ico
    │ │ │ └── META-INF
    │ │ └── WEB-INF
    │ └── many other customers
    └── other dirs (bin, conf, log, etc)

    View full-size slide

  36. ┌── lib
    ├── webapps
    │ ├── customer-name
    │ │ ├── favicon.ico
    │ │ ├── META-INF
    │ │ └── WEB-INF
    │ │ ├── web.xml
    │ │ └── classes
    │ │ └── DUMMY.TXT
    │ ├── other-customer-name
    │ │ ├── favicon.ico
    │ │ │ └── META-INF
    │ │ └── WEB-INF
    │ └── many other customers
    └── other dirs (bin, conf, log, etc)

    View full-size slide

  37. ┌── lib
    │ ├── artifactory
    │ │ ├── artifactory-*.jar
    │ │ ├── jackrabbit-core-jfrog-2.2.8c.jar
    │ │ ├── spring-core-3.1.1.RELEASE.jar
    │ │ ├── wicket-core-1.5.3.jar
    │ │ └── other jars
    │ ├── catalina.jar
    │ ├── servlet-api.jar
    │ └── other jars
    ├── webapps
    └── other dirs (bin, conf, log, etc)

    View full-size slide

  38. ┌── lib
    │ ├── artifactory
    │ │ ├── artifactory-*.jar
    │ │ ├── jackrabbit-core-jfrog-2.2.8c.jar
    │ │ ├── spring-core-3.1.1.RELEASE.jar
    │ │ ├── wicket-core-1.5.3.jar
    │ │ └── other jars
    │ ├── catalina.jar
    │ ├── servlet-api.jar
    │ └── other jars
    ├── webapps
    └── other dirs (bin, conf, log, etc)

    View full-size slide

  39. ┌── lib
    │ ├── artifactory
    │ │ ├── artifactory-*.jar
    │ │ ├── jackrabbit-core-jfrog-2.2.8c.jar
    │ │ ├── spring-core-3.1.1.RELEASE.jar
    │ │ ├── wicket-core-1.5.3.jar
    │ │ └── other jars
    │ ├── catalina.jar
    │ ├── servlet-api.jar
    │ └── other jars
    ├── webapps
    └── other dirs (bin, conf, log, etc)

    View full-size slide

  40. ┌── lib
    │ ├── artifactory
    │ │ ├── artifactory-*.jar
    │ │ ├── jackrabbit-core-jfrog-2.2.8c.jar
    │ │ ├── spring-core-3.1.1.RELEASE.jar
    │ │ ├── wicket-core-1.5.3.jar
    │ │ └── other jars
    │ ├── catalina.jar
    │ ├── servlet-api.jar
    │ └── other jars
    ├── webapps
    └── other dirs (bin, conf, log, etc)

    View full-size slide

  41. ┌── lib
    │ ├── artifactory
    │ │ ├── artifactory-*.jar
    │ │ ├── jackrabbit-core-jfrog-2.2.8c.jar
    │ │ ├── spring-core-3.1.1.RELEASE.jar
    │ │ ├── wicket-core-1.5.3.jar
    │ │ └── other jars
    │ ├── catalina.jar
    │ ├── servlet-api.jar
    │ └── other jars
    ├── webapps
    └── other dirs (bin, conf, log, etc)

    View full-size slide