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

How we took our server side application to the...

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: – Zero maintenance – Support –

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

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

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

    Always updated Drawbacks for the user: – Can’t install plugins
  5. Java 7: 07/2011 + 24 months = Java 8: 09/2013

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

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

    + 24 months = Java 9: 12/2015
  8. ┌── lib ├── webapps │ ├── customer-name │ ├── other-customer-name

    │ └── many other customers └── other dirs (bin, conf, log, etc)
  9. public class AppCtxHolder implements ApplicationContextAware { private static ApplicationContext ctx;

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

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

    public AppCtxHolder() { } public void setApplicationContext(ApplicationContext applicationContext) { ctx = applicationContext; } public static ApplicationContext getApplicationContext() { return ctx; } }
  12. ┌── 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)
  13. ┌── 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)
  14. ┌── 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)
  15. ┌── 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)
  16. ┌── 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)
  17. ┌── 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)
  18. ┌── 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)
  19. ┌── 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)