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.

3d73332968c0bf62e1ece7299deb8b37?s=128

Baruch Sadogursky

March 15, 2013
Tweet

Transcript

  1. None
  2. • • •

  3. • • •

  4. None
  5. None
  6. None
  7. None
  8. None
  9. None
  10. None
  11. None
  12. None
  13. None
  14. None
  15. None
  16. None
  17. None
  18. None
  19. None
  20. None
  21. None
  22. None
  23. Benefits for the user:

  24. Benefits for the user: – Zero maintenance

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

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

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

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

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

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

    Always updated Drawbacks for the user: – Can’t install plugins
  31. None
  32. None
  33. None
  34. None
  35. None
  36. None
  37. None
  38. None
  39. None
  40. None
  41. None
  42. None
  43.  

  44.    

  45.      

  46.        

  47. None
  48.  

  49.    

  50.      

  51.        

  52. None
  53. None
  54. None
  55. None
  56. Java 7: 07/2011

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

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

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

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

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

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

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

    + 24 months = Java 9: 12/2015
  64. None
  65. None
  66. None
  67. None
  68. None
  69. None
  70. None
  71. None
  72. None
  73.   

  74.    

  75.      

  76.       

  77.        

  78.          

  79.          

  80.          

     
  81. ┌── lib ├── webapps │ ├── customer-name │ ├── other-customer-name

    │ └── many other customers └── other dirs (bin, conf, log, etc)
  82. None
  83. None
  84. None
  85. None
  86. None
  87. None
  88. None
  89. None
  90. None
  91. None
  92. public class AppCtxHolder implements ApplicationContextAware { private static ApplicationContext ctx;

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

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

    public AppCtxHolder() { } public void setApplicationContext(ApplicationContext applicationContext) { ctx = applicationContext; } public static ApplicationContext getApplicationContext() { return ctx; } }
  95. None
  96. None
  97. None
  98. None
  99. None
  100. None
  101. None
  102. None
  103. None
  104. ┌── 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)
  105. ┌── 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)
  106. ┌── 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)
  107. ┌── 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)
  108. ┌── 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)
  109. ┌── 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)
  110. ┌── 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)
  111. ┌── 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)
  112. None
  113. None
  114. None
  115. None
  116. None
  117. None
  118. None
  119. None
  120. None
  121. None
  122. None
  123. None
  124. None
  125. None
  126. None
  127. None