SlideShare una empresa de Scribd logo
1 de 180
HOW WE TOOK OUR SERVER-
SIDE JAVA APPLICATION TO THE
CLOUDand liked what we got
WHO’S TALKING?
linkd.in/jbaruch
Developer who?
3
Developer who?
4
WHAT FROG?
WHAT FROG?
WHAT FROG?
WHAT FROG?
WHAT FROG?
WHAT FROG?
One more thing!
bDaHiD1bit.ly/
JUC Israel - July 16, 2014
SO…
First things First.
Poll time!
I use binary repository:
Poll time!
I use binary repository:
 Naturally, Artifactory!
Poll time!
I use binary repository:
 Naturally, Artifactory!
 Shame on me,
but still Nexus…
Poll time!
I use binary repository:
 Naturally, Artifactory!
 Shame on me,
but still Nexus…
 I don’t like features, I use Archiva
Poll time!
I use binary repository:
 Naturally, Artifactory!
 Shame on me,
but still Nexus…
 I don’t like features, I use Archiva
 I am a caveman, binary what?
In the beginning…
In the beginning…
Yet Another Java Server App
Rabbit?!
Checksum storage
Checksum storage
Checksum storage
Checksum storage
Append Only, GC-ed
Artifactory 3 – 10 times faster!
(Not bastards)
Moving Forward
Moving Forward
Moving Forward
Moving Forward
Moving Forward
Artifactory SaaS
etc.
What you like about it:
What you like about it:
– No need to maintain the server
What you like about it:
– No need to maintain the server
– Fanatic tech support
What you like about it:
– No need to maintain the server
– Fanatic tech support
– Always up to date!
What you like about it:
– No need to maintain the server
– Fanatic tech support
– Always up to date!
What you don’t like about it:
What you like about it:
– No need to maintain the server
– Fanatic tech support
– Always up to date!
What you don’t like about it:
– Can’t deploy your own plugins!
What you like about it:
– No need to maintain the server
– Fanatic tech support
– Always up to date!
What you don’t like about it:
– Can’t deploy your own plugins!
What you like about it:
– No need to maintain the server
– Fanatic tech support
– Always up to date!
What you don’t like about it:
– Can’t deploy your own plugins!
Artifactory SaaS
etc.
Sh.t-load of artifacts!
Terabytes.
FEBRUARY
Terabytes.
FEBRUARY
MAY
Terabytes.
FEBRUARY
MAY
AUGUST
Terabytes.
AUGUST
MAY
JANUARY
Bring Them On!
To The Cloud
Bullshit Bingo
Much ado about *aaS
* As A Service
* As A Service
Self-service
* As A Service
Self-service Multi-tenancy
Controversial example ahead!
You might find it inaccurate.
If you are annoyed by that feeling,
try to remember – it’s just an
example.
GaaE: Google as an Example
Product Self
Service
Multi-
tenant
* aaS
GaaE: Google as an Example
Product Self
Service
Multi-
tenant
* aaS
Gmail
  Not *aaS,
web-app
GaaE: Google as an Example
Product Self
Service
Multi-
tenant
* aaS
Gmail
  Not *aaS,
web-app
Google Apps
  SaaS
GaaE: Google as an Example
Product Self
Service
Multi-
tenant
* aaS
Gmail
  Not *aaS,
web-app
Google Apps
  SaaS
Google App
Engine
  PaaS
GaaE: Google as an Example
Product Self
Service
Multi-
tenant
* aaS
Gmail
  Not *aaS,
web-app
Google Apps
  SaaS
Google App
Engine
  PaaS
Google Compute
Engine
  IaaS
AaaE: Amazon as an Example
Product Self
Service
Multi-
tenant
* aaS
AaaE: Amazon as an Example
Product Self
Service
Multi-
tenant
* aaS
Amazon store
  Not *aaS,
web-app
AaaE: Amazon as an Example
Product Self
Service
Multi-
tenant
* aaS
Amazon store
  Not *aaS,
web-app
aStore
  SaaS
AaaE: Amazon as an Example
Product Self
Service
Multi-
tenant
* aaS
Amazon store
  Not *aaS,
web-app
aStore
  SaaS
Amazon Elastic
Beantalk
  PaaS
AaaE: Amazon as an Example
Product Self
Service
Multi-
tenant
* aaS
Amazon store
  Not *aaS,
web-app
aStore
  SaaS
Amazon Elastic
Beantalk
  PaaS
Amazon Elastic Cloud
  IaaS
SaaS pains
Multi-tenancy
Looks good! When to expect?
Extrapolate
This
Given:
Release Java 7 07/2011
Release Java 8 12/2012
Given:
Release Java 7 07/2011
Release Java 8 12/2012
Find:
Release Java 9?
Java 8: 12/2012
Java 8: 12/2012
-
Java 7: 07/2011
Java 8: 12/2012
-
Java 7: 07/2011
=
15 Months cycle
Java 8: 12/2012
-
Java 7: 07/2011
=
15 Months cycle
conclusion: Java 9: 05/2013
Java 8: 12/2012
-
Java 7: 07/2011
=
15 Months cycle
conclusion: Java 9: 05/2013
It’s almost a year ago!
Oh, wait…
Java 8 is not out yet!
Observation: When Mark
writes about trains it
means release delay
Here you go:
Java 7: 07/2011
Java 7: 07/2011
+ 24 Months =
Java 7: 07/2011
+ 24 Months =
Java 8: 07/2013
You wish!
Java 7: 07/2011
+ 24 Months =
Java 8: 07/2013
Java 7: 07/2011
+ 24 Months =
Java 8: 01/2014
Whatever mark says
Java 7: 07/2011
+ 24 Months =
Java 8: 01/2014
+ 24 Months =
Java 9: 01/2016
Whatever mark says
You think this is it?
Java 7: 07/2011
+ 24 Months =
Java 8: 03/2014
Whatever mark says
Java 7: 07/2011
+ 24 Months =
Java 8: 03/2014
+ 24 Months =
Whatever mark says
Java 7: 07/2011
+ 24 Months =
Java 8: 03/2014
+ 24 Months =
Java 9: 03/2016
Whatever mark says
Java 7: 07/2011
+ 24 Months =
Java 8: 03/2014
+ 24 Months =
Java 9: 03/2016
(if no more train blog posts)
Whatever mark says
Java 7: 07/2011
+ 24 месяца =
Java 8: 03/2014
+ 24 месяца =
Java 9: 03/2016
(Если не будет больше
постов про поезд)
Сколько Марк скажет
Multi-tenancy types
Multi-tenancy Type
Multi-tenancy types
Multi-tenancy Type
Data Separation
Multi-tenancy types
Multi-tenancy Type
Data Separation
Application Separation
Multi-tenancy types
Multi-tenancy Type
Data Separation
Application Separation
Process Separation
GaaE for Multi Tenancy types
Product Multi-tenancy Type
GaaE for Multi Tenancy types
Product Multi-tenancy Type
Google Apps Data Separation
GaaE for Multi Tenancy types
Product Multi-tenancy Type
Google Apps Data Separation
Google App Engine Application Separation
GaaE for Multi Tenancy types
Product Multi-tenancy Type
Google Apps Data Separation
Google App Engine Application Separation
Google Compute
Engine
Process Separation
Strategy Pros Cons
Separating data
Separating
application
Separating
processes
Let’s compare!
Strategy Pros Cons
Separating data  Normal Java Application
Separating
application
Separating
processes
Let’s compare!
Strategy Pros Cons
Separating data  Normal Java Application  Manual state
separation
 Complicated and
critical schema
Separating
application
Separating
processes
Let’s compare!
Strategy Pros Cons
Separating data  Normal Java Application  Manual state
separation
 Complicated and
critical schema
Separating
application
Separating
processes
Let’s compare!

Strategy Pros Cons
Separating data  Normal Java Application  Manual state
separation
 Complicated and
critical schema
Separating
application
Separating
processes
 No shared state
 Simple transition from
existing
Let’s compare!

Strategy Pros Cons
Separating data  Normal Java Application  Manual state
separation
 Complicated and
critical schema
Separating
application
Separating
processes
 No shared state
 Simple transition from
existing
 JVM per tenant!
Let’s compare!

Strategy Pros Cons
Separating data  Normal Java Application  Manual state
separation
 Complicated and
critical schema
Separating
application
Separating
processes
 No shared state
 Simple transition from
existing
 JVM per tenant!
Let’s compare!


Strategy Pros Cons
Separating data  Normal Java Application  Manual state
separation
 Complicated and
critical schema
Separating
application
 No shared state
 Simple transition from
existing
Separating
processes
 No shared state
 Simple transition from
existing
 JVM per tenant!
Let’s compare!


Strategy Pros Cons
Separating data  Normal Java Application  Manual state
separation
 Complicated and
critical schema
Separating
application
 No shared state
 Simple transition from
existing
Separating
processes
 No shared state
 Simple transition from
existing
 JVM per tenant!
Let’s compare!



Strategy Pros Cons
Separating data  Normal Java Application  Manual state
separation
 Complicated and
critical schema
Separating
application
 No shared state
 Simple transition from
existing
 Stay tuned…
Separating
processes
 No shared state
 Simple transition from
existing
 JVM per tenant!
Let’s compare!



Separate WARs: Tomcat Root
┌── lib
├── webapps
│ ├── customer-name
│ ├── other-customer-name
│ └── many other customers
└── other dirs (bin, conf, log, etc)
Separate WARs
Separate WARs
Separate WARs
That was the
PermGen.
Yup.
We love our toys
We love our toys
Artifactory-3.0.1.warwebappWEB-INFlib$du –m
51 .
To the common ClassLoader!
Will it work?_________
Will it work?
‹ Object state
_________
Will it work?
‹ Object state
‹ Static state
_________
“Static State Quest I”
(Sierra, who else?)
Spring Framework
The Evil
App. Context Holder Pattern
The Evil
App. Context Holder Pattern
public class AppCtxHolder implements ApplicationContextAware {
private static ApplicationContext ctx;
public AppCtxHolder() { }
public void setApplicationContext(ApplicationContext applicationContext) {
ctx = applicationContext;
}
public static ApplicationContext getApplicationContext() {
return ctx;
}
}
The Evil
App. Context Holder Pattern
public class AppCtxHolder implements ApplicationContextAware {
private static ApplicationContext ctx;
public AppCtxHolder() { }
public void setApplicationContext(ApplicationContext applicationContext) {
ctx = applicationContext;
}
public static ApplicationContext getApplicationContext() {
return ctx;
}
}
The Evil
App. Context Holder Pattern
public class AppCtxHolder implements ApplicationContextAware {
private static ApplicationContext ctx;
public AppCtxHolder() { }
public void setApplicationContext(ApplicationContext applicationContext) {
ctx = applicationContext;
}
public static ApplicationContext getApplicationContext() {
return ctx;
}
}
Apache Wicket
Apache Wicket
We love Wicket,
cause it allows
people who hate
UI development
to develop a UI,
which people
don’t hate
Apache Wicket
Logger
Logger
CATS Software
Jackrabbit
Jackrabbit
Heap-wide Caches
Don’t actually have
to read this
Tomcat Root – Where are the
JARs?┌── 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)
Tomcat Root – Where are the
JARs?┌── 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)
Tomcat Root – Where are the
JARs?┌── 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)
Tomcat Root – Global lib folder
┌── 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)
Tomcat Root – Global lib folder
┌── 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)
Tomcat Root – Global lib folder
┌── 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)
Tomcat Root – Global lib folder
┌── 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)
Tomcat Root – Global lib folder
┌── 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)
PaaS or IaaS?
PaaS or IaaS?
Self-Service?
Prevent the Fork!
The process
Artifactory is built with
Artifactory!
The Process
The Process
The Process
The Process
The Process
The Process
The Process
The Process
It’s all about right tools
Also right tools
The Paradigm…
Now we do it the other way around
Actually, now we do it the right way!
And we love what we got!
And we love what we got!
NO, THANK YOU!

Más contenido relacionado

La actualidad más candente

I Don't Test Often ...
I Don't Test Often ...I Don't Test Often ...
I Don't Test Often ...Gareth Bowles
 
Tallinn Estonia Advanced Java Meetup Spark + TensorFlow = TensorFrames Oct 24...
Tallinn Estonia Advanced Java Meetup Spark + TensorFlow = TensorFrames Oct 24...Tallinn Estonia Advanced Java Meetup Spark + TensorFlow = TensorFrames Oct 24...
Tallinn Estonia Advanced Java Meetup Spark + TensorFlow = TensorFrames Oct 24...Chris Fregly
 
Coscup 2013 : Continuous Integration on top of hadoop
Coscup 2013 : Continuous Integration on top of hadoopCoscup 2013 : Continuous Integration on top of hadoop
Coscup 2013 : Continuous Integration on top of hadoopWisely chen
 
[Japanese] How Reactive Streams and Akka Streams change the JVM Ecosystem @ R...
[Japanese] How Reactive Streams and Akka Streams change the JVM Ecosystem @ R...[Japanese] How Reactive Streams and Akka Streams change the JVM Ecosystem @ R...
[Japanese] How Reactive Streams and Akka Streams change the JVM Ecosystem @ R...Konrad Malawski
 
Riot Games Scalable Data Warehouse Lecture at UCSB / UCLA
Riot Games Scalable Data Warehouse Lecture at UCSB / UCLARiot Games Scalable Data Warehouse Lecture at UCSB / UCLA
Riot Games Scalable Data Warehouse Lecture at UCSB / UCLAsean_seannery
 
Where Node.JS Meets iOS
Where Node.JS Meets iOSWhere Node.JS Meets iOS
Where Node.JS Meets iOSSam Rijs
 
Red Hat Nordics 2020 - Apache Camel 3 the next generation of enterprise integ...
Red Hat Nordics 2020 - Apache Camel 3 the next generation of enterprise integ...Red Hat Nordics 2020 - Apache Camel 3 the next generation of enterprise integ...
Red Hat Nordics 2020 - Apache Camel 3 the next generation of enterprise integ...Claus Ibsen
 
Reactive Streams, j.u.concurrent & Beyond!
Reactive Streams, j.u.concurrent & Beyond!Reactive Streams, j.u.concurrent & Beyond!
Reactive Streams, j.u.concurrent & Beyond!Konrad Malawski
 
J1 2015 "Debugging Java Apps in Containers: No Heavy Welding Gear Required"
J1 2015 "Debugging Java Apps in Containers: No Heavy Welding Gear Required"J1 2015 "Debugging Java Apps in Containers: No Heavy Welding Gear Required"
J1 2015 "Debugging Java Apps in Containers: No Heavy Welding Gear Required"Daniel Bryant
 
SouJava May 2020: Apache Camel 3 - the next generation of enterprise integration
SouJava May 2020: Apache Camel 3 - the next generation of enterprise integrationSouJava May 2020: Apache Camel 3 - the next generation of enterprise integration
SouJava May 2020: Apache Camel 3 - the next generation of enterprise integrationClaus Ibsen
 
Best Practices for Middleware and Integration Architecture Modernization with...
Best Practices for Middleware and Integration Architecture Modernization with...Best Practices for Middleware and Integration Architecture Modernization with...
Best Practices for Middleware and Integration Architecture Modernization with...Claus Ibsen
 
Release the Monkeys ! Testing in the Wild at Netflix
Release the Monkeys !  Testing in the Wild at NetflixRelease the Monkeys !  Testing in the Wild at Netflix
Release the Monkeys ! Testing in the Wild at NetflixGareth Bowles
 
From Data to Actions and Insights at Conviva with Rui Zhang and Yan Li
From Data to Actions and Insights at Conviva with Rui Zhang and Yan Li From Data to Actions and Insights at Conviva with Rui Zhang and Yan Li
From Data to Actions and Insights at Conviva with Rui Zhang and Yan Li Databricks
 
Microservices with Apache Camel
Microservices with Apache CamelMicroservices with Apache Camel
Microservices with Apache CamelClaus Ibsen
 
How Reactive Streams & Akka Streams change the JVM Ecosystem
How Reactive Streams & Akka Streams change the JVM EcosystemHow Reactive Streams & Akka Streams change the JVM Ecosystem
How Reactive Streams & Akka Streams change the JVM EcosystemKonrad Malawski
 
Getting started with Apache Camel presentation at BarcelonaJUG, january 2014
Getting started with Apache Camel presentation at BarcelonaJUG, january 2014Getting started with Apache Camel presentation at BarcelonaJUG, january 2014
Getting started with Apache Camel presentation at BarcelonaJUG, january 2014Claus Ibsen
 

La actualidad más candente (20)

Hystrix
HystrixHystrix
Hystrix
 
I Don't Test Often ...
I Don't Test Often ...I Don't Test Often ...
I Don't Test Often ...
 
Tallinn Estonia Advanced Java Meetup Spark + TensorFlow = TensorFrames Oct 24...
Tallinn Estonia Advanced Java Meetup Spark + TensorFlow = TensorFrames Oct 24...Tallinn Estonia Advanced Java Meetup Spark + TensorFlow = TensorFrames Oct 24...
Tallinn Estonia Advanced Java Meetup Spark + TensorFlow = TensorFrames Oct 24...
 
Apache Lucene for Java EE Developers
Apache Lucene for Java EE DevelopersApache Lucene for Java EE Developers
Apache Lucene for Java EE Developers
 
Coscup 2013 : Continuous Integration on top of hadoop
Coscup 2013 : Continuous Integration on top of hadoopCoscup 2013 : Continuous Integration on top of hadoop
Coscup 2013 : Continuous Integration on top of hadoop
 
[Japanese] How Reactive Streams and Akka Streams change the JVM Ecosystem @ R...
[Japanese] How Reactive Streams and Akka Streams change the JVM Ecosystem @ R...[Japanese] How Reactive Streams and Akka Streams change the JVM Ecosystem @ R...
[Japanese] How Reactive Streams and Akka Streams change the JVM Ecosystem @ R...
 
Riot Games Scalable Data Warehouse Lecture at UCSB / UCLA
Riot Games Scalable Data Warehouse Lecture at UCSB / UCLARiot Games Scalable Data Warehouse Lecture at UCSB / UCLA
Riot Games Scalable Data Warehouse Lecture at UCSB / UCLA
 
Where Node.JS Meets iOS
Where Node.JS Meets iOSWhere Node.JS Meets iOS
Where Node.JS Meets iOS
 
Red Hat Nordics 2020 - Apache Camel 3 the next generation of enterprise integ...
Red Hat Nordics 2020 - Apache Camel 3 the next generation of enterprise integ...Red Hat Nordics 2020 - Apache Camel 3 the next generation of enterprise integ...
Red Hat Nordics 2020 - Apache Camel 3 the next generation of enterprise integ...
 
Reactive Streams, j.u.concurrent & Beyond!
Reactive Streams, j.u.concurrent & Beyond!Reactive Streams, j.u.concurrent & Beyond!
Reactive Streams, j.u.concurrent & Beyond!
 
J1 2015 "Debugging Java Apps in Containers: No Heavy Welding Gear Required"
J1 2015 "Debugging Java Apps in Containers: No Heavy Welding Gear Required"J1 2015 "Debugging Java Apps in Containers: No Heavy Welding Gear Required"
J1 2015 "Debugging Java Apps in Containers: No Heavy Welding Gear Required"
 
Big data made easy with a Spark
Big data made easy with a SparkBig data made easy with a Spark
Big data made easy with a Spark
 
SouJava May 2020: Apache Camel 3 - the next generation of enterprise integration
SouJava May 2020: Apache Camel 3 - the next generation of enterprise integrationSouJava May 2020: Apache Camel 3 - the next generation of enterprise integration
SouJava May 2020: Apache Camel 3 - the next generation of enterprise integration
 
Best Practices for Middleware and Integration Architecture Modernization with...
Best Practices for Middleware and Integration Architecture Modernization with...Best Practices for Middleware and Integration Architecture Modernization with...
Best Practices for Middleware and Integration Architecture Modernization with...
 
Release the Monkeys ! Testing in the Wild at Netflix
Release the Monkeys !  Testing in the Wild at NetflixRelease the Monkeys !  Testing in the Wild at Netflix
Release the Monkeys ! Testing in the Wild at Netflix
 
From Data to Actions and Insights at Conviva with Rui Zhang and Yan Li
From Data to Actions and Insights at Conviva with Rui Zhang and Yan Li From Data to Actions and Insights at Conviva with Rui Zhang and Yan Li
From Data to Actions and Insights at Conviva with Rui Zhang and Yan Li
 
Microservices with Apache Camel
Microservices with Apache CamelMicroservices with Apache Camel
Microservices with Apache Camel
 
Python+gradle
Python+gradlePython+gradle
Python+gradle
 
How Reactive Streams & Akka Streams change the JVM Ecosystem
How Reactive Streams & Akka Streams change the JVM EcosystemHow Reactive Streams & Akka Streams change the JVM Ecosystem
How Reactive Streams & Akka Streams change the JVM Ecosystem
 
Getting started with Apache Camel presentation at BarcelonaJUG, january 2014
Getting started with Apache Camel presentation at BarcelonaJUG, january 2014Getting started with Apache Camel presentation at BarcelonaJUG, january 2014
Getting started with Apache Camel presentation at BarcelonaJUG, january 2014
 

Destacado

Breaking bad habits with GitLab CI
Breaking bad habits with GitLab CIBreaking bad habits with GitLab CI
Breaking bad habits with GitLab CIIvan Nemytchenko
 
Continuous integration and delivery for java based web applications
Continuous integration and delivery for java based web applicationsContinuous integration and delivery for java based web applications
Continuous integration and delivery for java based web applicationsSunil Dalal
 
An Integrated Pipeline for Private and Public Clouds with Jenkins, Artifactor...
An Integrated Pipeline for Private and Public Clouds with Jenkins, Artifactor...An Integrated Pipeline for Private and Public Clouds with Jenkins, Artifactor...
An Integrated Pipeline for Private and Public Clouds with Jenkins, Artifactor...VMware Tanzu
 
Artifactory Docker Integration Webinar
Artifactory Docker Integration WebinarArtifactory Docker Integration Webinar
Artifactory Docker Integration WebinarBaruch Sadogursky
 
Repository Management with JFrog Artifactory
Repository Management with JFrog ArtifactoryRepository Management with JFrog Artifactory
Repository Management with JFrog ArtifactoryStephen Chin
 
Gitlab Training with GIT and SourceTree
Gitlab Training with GIT and SourceTreeGitlab Training with GIT and SourceTree
Gitlab Training with GIT and SourceTreeTeerapat Khunpech
 

Destacado (11)

Devops101
Devops101Devops101
Devops101
 
Breaking bad habits with GitLab CI
Breaking bad habits with GitLab CIBreaking bad habits with GitLab CI
Breaking bad habits with GitLab CI
 
Continuous integration and delivery for java based web applications
Continuous integration and delivery for java based web applicationsContinuous integration and delivery for java based web applications
Continuous integration and delivery for java based web applications
 
DevOps101 (version 2)
DevOps101 (version 2)DevOps101 (version 2)
DevOps101 (version 2)
 
Jenkins Best Practices
Jenkins Best PracticesJenkins Best Practices
Jenkins Best Practices
 
An Integrated Pipeline for Private and Public Clouds with Jenkins, Artifactor...
An Integrated Pipeline for Private and Public Clouds with Jenkins, Artifactor...An Integrated Pipeline for Private and Public Clouds with Jenkins, Artifactor...
An Integrated Pipeline for Private and Public Clouds with Jenkins, Artifactor...
 
Artifactory Docker Integration Webinar
Artifactory Docker Integration WebinarArtifactory Docker Integration Webinar
Artifactory Docker Integration Webinar
 
Artifactory UOC
Artifactory UOCArtifactory UOC
Artifactory UOC
 
Repository Management with JFrog Artifactory
Repository Management with JFrog ArtifactoryRepository Management with JFrog Artifactory
Repository Management with JFrog Artifactory
 
Jenkins Pipelines
Jenkins PipelinesJenkins Pipelines
Jenkins Pipelines
 
Gitlab Training with GIT and SourceTree
Gitlab Training with GIT and SourceTreeGitlab Training with GIT and SourceTree
Gitlab Training with GIT and SourceTree
 

Similar a Taking a Java Application to the Cloud with Artifactory

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 gotHow 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 gotBaruch Sadogursky
 
Follow these reasons to know java’s importance
Follow these reasons to know java’s importanceFollow these reasons to know java’s importance
Follow these reasons to know java’s importancenishajj
 
Django on Jython, PyCon 2009
Django on Jython, PyCon 2009Django on Jython, PyCon 2009
Django on Jython, PyCon 2009Leonardo Soto
 
Advanced iOS Engineering - The Junction Talk
Advanced iOS Engineering - The Junction TalkAdvanced iOS Engineering - The Junction Talk
Advanced iOS Engineering - The Junction TalkOnavo
 
Offline of web applications
Offline of web applicationsOffline of web applications
Offline of web applicationsFDConf
 
Offline for web - Frontend Dev Conf Minsk 2014
Offline for web - Frontend Dev Conf Minsk 2014Offline for web - Frontend Dev Conf Minsk 2014
Offline for web - Frontend Dev Conf Minsk 2014Jan Jongboom
 
Si fa presto a dire serverless
Si fa presto a dire serverlessSi fa presto a dire serverless
Si fa presto a dire serverlessAlessio Coser
 
AliExpress’ Way to Microservices - microXchg 2017
AliExpress’ Way to Microservices  - microXchg 2017AliExpress’ Way to Microservices  - microXchg 2017
AliExpress’ Way to Microservices - microXchg 2017juvenxu
 
Bledar Gjocaj - Java open source
Bledar Gjocaj - Java open sourceBledar Gjocaj - Java open source
Bledar Gjocaj - Java open sourceOpen Labs Albania
 
20091226 名古屋SGGAE/J勉強会発表資料『Lift on GAE/J』
20091226 名古屋SGGAE/J勉強会発表資料『Lift on GAE/J』20091226 名古屋SGGAE/J勉強会発表資料『Lift on GAE/J』
20091226 名古屋SGGAE/J勉強会発表資料『Lift on GAE/J』Ryo RKTM
 
Building JBoss AS 7 for Fedora
Building JBoss AS 7 for FedoraBuilding JBoss AS 7 for Fedora
Building JBoss AS 7 for Fedorawolfc71
 
Stapling and patching the web of now - ForwardJS3, San Francisco
Stapling and patching the web of now - ForwardJS3, San FranciscoStapling and patching the web of now - ForwardJS3, San Francisco
Stapling and patching the web of now - ForwardJS3, San FranciscoChristian Heilmann
 
Get the Top 6 new features in Java 2019
Get the Top 6 new features in Java 2019Get the Top 6 new features in Java 2019
Get the Top 6 new features in Java 2019Aegis Softtech
 
End to end testing Single Page Apps & APIs with Cucumber.js and Puppeteer (Em...
End to end testing Single Page Apps & APIs with Cucumber.js and Puppeteer (Em...End to end testing Single Page Apps & APIs with Cucumber.js and Puppeteer (Em...
End to end testing Single Page Apps & APIs with Cucumber.js and Puppeteer (Em...Paul Jensen
 
Advanced deployment scenarios (netcoreconf)
Advanced deployment scenarios (netcoreconf)Advanced deployment scenarios (netcoreconf)
Advanced deployment scenarios (netcoreconf)Sergio Navarro Pino
 
Introduction to Play Framework
Introduction to Play FrameworkIntroduction to Play Framework
Introduction to Play FrameworkWarren Zhou
 

Similar a Taking a Java Application to the Cloud with Artifactory (20)

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 gotHow 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
 
Just enough app server
Just enough app serverJust enough app server
Just enough app server
 
Follow these reasons to know java’s importance
Follow these reasons to know java’s importanceFollow these reasons to know java’s importance
Follow these reasons to know java’s importance
 
Django on Jython, PyCon 2009
Django on Jython, PyCon 2009Django on Jython, PyCon 2009
Django on Jython, PyCon 2009
 
Migrating Beyond Java 8
Migrating Beyond Java 8Migrating Beyond Java 8
Migrating Beyond Java 8
 
Advanced iOS Engineering - The Junction Talk
Advanced iOS Engineering - The Junction TalkAdvanced iOS Engineering - The Junction Talk
Advanced iOS Engineering - The Junction Talk
 
Offline of web applications
Offline of web applicationsOffline of web applications
Offline of web applications
 
Offline for web - Frontend Dev Conf Minsk 2014
Offline for web - Frontend Dev Conf Minsk 2014Offline for web - Frontend Dev Conf Minsk 2014
Offline for web - Frontend Dev Conf Minsk 2014
 
Si fa presto a dire serverless
Si fa presto a dire serverlessSi fa presto a dire serverless
Si fa presto a dire serverless
 
GWT Reloaded
GWT ReloadedGWT Reloaded
GWT Reloaded
 
AliExpress’ Way to Microservices - microXchg 2017
AliExpress’ Way to Microservices  - microXchg 2017AliExpress’ Way to Microservices  - microXchg 2017
AliExpress’ Way to Microservices - microXchg 2017
 
Bledar Gjocaj - Java open source
Bledar Gjocaj - Java open sourceBledar Gjocaj - Java open source
Bledar Gjocaj - Java open source
 
20091226 名古屋SGGAE/J勉強会発表資料『Lift on GAE/J』
20091226 名古屋SGGAE/J勉強会発表資料『Lift on GAE/J』20091226 名古屋SGGAE/J勉強会発表資料『Lift on GAE/J』
20091226 名古屋SGGAE/J勉強会発表資料『Lift on GAE/J』
 
Building JBoss AS 7 for Fedora
Building JBoss AS 7 for FedoraBuilding JBoss AS 7 for Fedora
Building JBoss AS 7 for Fedora
 
Stapling and patching the web of now - ForwardJS3, San Francisco
Stapling and patching the web of now - ForwardJS3, San FranciscoStapling and patching the web of now - ForwardJS3, San Francisco
Stapling and patching the web of now - ForwardJS3, San Francisco
 
Get the Top 6 new features in Java 2019
Get the Top 6 new features in Java 2019Get the Top 6 new features in Java 2019
Get the Top 6 new features in Java 2019
 
End to end testing Single Page Apps & APIs with Cucumber.js and Puppeteer (Em...
End to end testing Single Page Apps & APIs with Cucumber.js and Puppeteer (Em...End to end testing Single Page Apps & APIs with Cucumber.js and Puppeteer (Em...
End to end testing Single Page Apps & APIs with Cucumber.js and Puppeteer (Em...
 
Advanced deployment scenarios (netcoreconf)
Advanced deployment scenarios (netcoreconf)Advanced deployment scenarios (netcoreconf)
Advanced deployment scenarios (netcoreconf)
 
Introduction to Play Framework
Introduction to Play FrameworkIntroduction to Play Framework
Introduction to Play Framework
 
Introduce Django
Introduce DjangoIntroduce Django
Introduce Django
 

Más de Baruch Sadogursky

DevOps Patterns & Antipatterns for Continuous Software Updates @ NADOG April ...
DevOps Patterns & Antipatterns for Continuous Software Updates @ NADOG April ...DevOps Patterns & Antipatterns for Continuous Software Updates @ NADOG April ...
DevOps Patterns & Antipatterns for Continuous Software Updates @ NADOG April ...Baruch Sadogursky
 
DevOps Patterns & Antipatterns for Continuous Software Updates @ DevOps.com A...
DevOps Patterns & Antipatterns for Continuous Software Updates @ DevOps.com A...DevOps Patterns & Antipatterns for Continuous Software Updates @ DevOps.com A...
DevOps Patterns & Antipatterns for Continuous Software Updates @ DevOps.com A...Baruch Sadogursky
 
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Oracle Code NY...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Oracle Code NY...DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Oracle Code NY...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Oracle Code NY...Baruch Sadogursky
 
Data driven devops as presented at QCon London 2018
Data driven devops as presented at QCon London 2018Data driven devops as presented at QCon London 2018
Data driven devops as presented at QCon London 2018Baruch Sadogursky
 
A Research Study Into DevOps Bottlenecks as presented at Oracle Code LA 2018
A Research Study Into DevOps Bottlenecks as presented at Oracle Code LA 2018A Research Study Into DevOps Bottlenecks as presented at Oracle Code LA 2018
A Research Study Into DevOps Bottlenecks as presented at Oracle Code LA 2018Baruch Sadogursky
 
Java Puzzlers NG S03 a DevNexus 2018
Java Puzzlers NG S03 a DevNexus 2018Java Puzzlers NG S03 a DevNexus 2018
Java Puzzlers NG S03 a DevNexus 2018Baruch Sadogursky
 
Where the Helm are your binaries? as presented at Canada Kubernetes Meetups
Where the Helm are your binaries? as presented at Canada Kubernetes MeetupsWhere the Helm are your binaries? as presented at Canada Kubernetes Meetups
Where the Helm are your binaries? as presented at Canada Kubernetes MeetupsBaruch Sadogursky
 
Data driven devops as presented at Codemash 2018
Data driven devops as presented at Codemash 2018Data driven devops as presented at Codemash 2018
Data driven devops as presented at Codemash 2018Baruch Sadogursky
 
A Research Study into DevOps Bottlenecks as presented at Codemash 2018
A Research Study into DevOps Bottlenecks as presented at Codemash 2018A Research Study into DevOps Bottlenecks as presented at Codemash 2018
A Research Study into DevOps Bottlenecks as presented at Codemash 2018Baruch Sadogursky
 
Best Practices for Managing Docker Versions as presented at JavaOne 2017
Best Practices for Managing Docker Versions as presented at JavaOne 2017Best Practices for Managing Docker Versions as presented at JavaOne 2017
Best Practices for Managing Docker Versions as presented at JavaOne 2017Baruch Sadogursky
 
Troubleshooting & Debugging Production Microservices in Kubernetes as present...
Troubleshooting & Debugging Production Microservices in Kubernetes as present...Troubleshooting & Debugging Production Microservices in Kubernetes as present...
Troubleshooting & Debugging Production Microservices in Kubernetes as present...Baruch Sadogursky
 
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Devoxx 2017
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Devoxx 2017DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Devoxx 2017
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Devoxx 2017Baruch Sadogursky
 
Amazon Alexa Skills vs Google Home Actions, the Big Java VUI Faceoff as prese...
Amazon Alexa Skills vs Google Home Actions, the Big Java VUI Faceoff as prese...Amazon Alexa Skills vs Google Home Actions, the Big Java VUI Faceoff as prese...
Amazon Alexa Skills vs Google Home Actions, the Big Java VUI Faceoff as prese...Baruch Sadogursky
 
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at DevOps Days Be...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at DevOps Days Be...DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at DevOps Days Be...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at DevOps Days Be...Baruch Sadogursky
 
Java Puzzlers NG S02: Down the Rabbit Hole as it was presented at The Pittsbu...
Java Puzzlers NG S02: Down the Rabbit Hole as it was presented at The Pittsbu...Java Puzzlers NG S02: Down the Rabbit Hole as it was presented at The Pittsbu...
Java Puzzlers NG S02: Down the Rabbit Hole as it was presented at The Pittsbu...Baruch Sadogursky
 
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at The Pittsburgh...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at The Pittsburgh...DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at The Pittsburgh...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at The Pittsburgh...Baruch Sadogursky
 
Let’s Wing It: A Study in DevRel Strategy
 Let’s Wing It: A Study in DevRel Strategy Let’s Wing It: A Study in DevRel Strategy
Let’s Wing It: A Study in DevRel StrategyBaruch Sadogursky
 
Log Driven First Class Customer Support at Scale
Log Driven First Class Customer Support at ScaleLog Driven First Class Customer Support at Scale
Log Driven First Class Customer Support at ScaleBaruch Sadogursky
 
[Webinar] The Frog And The Butler: CI Pipelines For Modern DevOps
[Webinar] The Frog And The Butler: CI Pipelines For Modern DevOps[Webinar] The Frog And The Butler: CI Pipelines For Modern DevOps
[Webinar] The Frog And The Butler: CI Pipelines For Modern DevOpsBaruch Sadogursky
 
Patterns and antipatterns in Docker image lifecycle as was presented at DC Do...
Patterns and antipatterns in Docker image lifecycle as was presented at DC Do...Patterns and antipatterns in Docker image lifecycle as was presented at DC Do...
Patterns and antipatterns in Docker image lifecycle as was presented at DC Do...Baruch Sadogursky
 

Más de Baruch Sadogursky (20)

DevOps Patterns & Antipatterns for Continuous Software Updates @ NADOG April ...
DevOps Patterns & Antipatterns for Continuous Software Updates @ NADOG April ...DevOps Patterns & Antipatterns for Continuous Software Updates @ NADOG April ...
DevOps Patterns & Antipatterns for Continuous Software Updates @ NADOG April ...
 
DevOps Patterns & Antipatterns for Continuous Software Updates @ DevOps.com A...
DevOps Patterns & Antipatterns for Continuous Software Updates @ DevOps.com A...DevOps Patterns & Antipatterns for Continuous Software Updates @ DevOps.com A...
DevOps Patterns & Antipatterns for Continuous Software Updates @ DevOps.com A...
 
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Oracle Code NY...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Oracle Code NY...DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Oracle Code NY...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Oracle Code NY...
 
Data driven devops as presented at QCon London 2018
Data driven devops as presented at QCon London 2018Data driven devops as presented at QCon London 2018
Data driven devops as presented at QCon London 2018
 
A Research Study Into DevOps Bottlenecks as presented at Oracle Code LA 2018
A Research Study Into DevOps Bottlenecks as presented at Oracle Code LA 2018A Research Study Into DevOps Bottlenecks as presented at Oracle Code LA 2018
A Research Study Into DevOps Bottlenecks as presented at Oracle Code LA 2018
 
Java Puzzlers NG S03 a DevNexus 2018
Java Puzzlers NG S03 a DevNexus 2018Java Puzzlers NG S03 a DevNexus 2018
Java Puzzlers NG S03 a DevNexus 2018
 
Where the Helm are your binaries? as presented at Canada Kubernetes Meetups
Where the Helm are your binaries? as presented at Canada Kubernetes MeetupsWhere the Helm are your binaries? as presented at Canada Kubernetes Meetups
Where the Helm are your binaries? as presented at Canada Kubernetes Meetups
 
Data driven devops as presented at Codemash 2018
Data driven devops as presented at Codemash 2018Data driven devops as presented at Codemash 2018
Data driven devops as presented at Codemash 2018
 
A Research Study into DevOps Bottlenecks as presented at Codemash 2018
A Research Study into DevOps Bottlenecks as presented at Codemash 2018A Research Study into DevOps Bottlenecks as presented at Codemash 2018
A Research Study into DevOps Bottlenecks as presented at Codemash 2018
 
Best Practices for Managing Docker Versions as presented at JavaOne 2017
Best Practices for Managing Docker Versions as presented at JavaOne 2017Best Practices for Managing Docker Versions as presented at JavaOne 2017
Best Practices for Managing Docker Versions as presented at JavaOne 2017
 
Troubleshooting & Debugging Production Microservices in Kubernetes as present...
Troubleshooting & Debugging Production Microservices in Kubernetes as present...Troubleshooting & Debugging Production Microservices in Kubernetes as present...
Troubleshooting & Debugging Production Microservices in Kubernetes as present...
 
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Devoxx 2017
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Devoxx 2017DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Devoxx 2017
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Devoxx 2017
 
Amazon Alexa Skills vs Google Home Actions, the Big Java VUI Faceoff as prese...
Amazon Alexa Skills vs Google Home Actions, the Big Java VUI Faceoff as prese...Amazon Alexa Skills vs Google Home Actions, the Big Java VUI Faceoff as prese...
Amazon Alexa Skills vs Google Home Actions, the Big Java VUI Faceoff as prese...
 
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at DevOps Days Be...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at DevOps Days Be...DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at DevOps Days Be...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at DevOps Days Be...
 
Java Puzzlers NG S02: Down the Rabbit Hole as it was presented at The Pittsbu...
Java Puzzlers NG S02: Down the Rabbit Hole as it was presented at The Pittsbu...Java Puzzlers NG S02: Down the Rabbit Hole as it was presented at The Pittsbu...
Java Puzzlers NG S02: Down the Rabbit Hole as it was presented at The Pittsbu...
 
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at The Pittsburgh...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at The Pittsburgh...DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at The Pittsburgh...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at The Pittsburgh...
 
Let’s Wing It: A Study in DevRel Strategy
 Let’s Wing It: A Study in DevRel Strategy Let’s Wing It: A Study in DevRel Strategy
Let’s Wing It: A Study in DevRel Strategy
 
Log Driven First Class Customer Support at Scale
Log Driven First Class Customer Support at ScaleLog Driven First Class Customer Support at Scale
Log Driven First Class Customer Support at Scale
 
[Webinar] The Frog And The Butler: CI Pipelines For Modern DevOps
[Webinar] The Frog And The Butler: CI Pipelines For Modern DevOps[Webinar] The Frog And The Butler: CI Pipelines For Modern DevOps
[Webinar] The Frog And The Butler: CI Pipelines For Modern DevOps
 
Patterns and antipatterns in Docker image lifecycle as was presented at DC Do...
Patterns and antipatterns in Docker image lifecycle as was presented at DC Do...Patterns and antipatterns in Docker image lifecycle as was presented at DC Do...
Patterns and antipatterns in Docker image lifecycle as was presented at DC Do...
 

Último

Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 

Último (20)

Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 

Taking a Java Application to the Cloud with Artifactory

  • 1. HOW WE TOOK OUR SERVER- SIDE JAVA APPLICATION TO THE CLOUDand liked what we got
  • 11. One more thing! bDaHiD1bit.ly/ JUC Israel - July 16, 2014
  • 12. SO…
  • 14.
  • 15. Poll time! I use binary repository:
  • 16. Poll time! I use binary repository:  Naturally, Artifactory!
  • 17. Poll time! I use binary repository:  Naturally, Artifactory!  Shame on me, but still Nexus…
  • 18. Poll time! I use binary repository:  Naturally, Artifactory!  Shame on me, but still Nexus…  I don’t like features, I use Archiva
  • 19. Poll time! I use binary repository:  Naturally, Artifactory!  Shame on me, but still Nexus…  I don’t like features, I use Archiva  I am a caveman, binary what?
  • 22. Yet Another Java Server App
  • 24.
  • 30.
  • 31. Artifactory 3 – 10 times faster! (Not bastards)
  • 32.
  • 39.
  • 40. What you like about it:
  • 41. What you like about it: – No need to maintain the server
  • 42. What you like about it: – No need to maintain the server – Fanatic tech support
  • 43. What you like about it: – No need to maintain the server – Fanatic tech support – Always up to date!
  • 44. What you like about it: – No need to maintain the server – Fanatic tech support – Always up to date! What you don’t like about it:
  • 45. What you like about it: – No need to maintain the server – Fanatic tech support – Always up to date! What you don’t like about it: – Can’t deploy your own plugins!
  • 46. What you like about it: – No need to maintain the server – Fanatic tech support – Always up to date! What you don’t like about it: – Can’t deploy your own plugins!
  • 47. What you like about it: – No need to maintain the server – Fanatic tech support – Always up to date! What you don’t like about it: – Can’t deploy your own plugins!
  • 58. * As A Service
  • 59. * As A Service Self-service
  • 60. * As A Service Self-service Multi-tenancy
  • 61. Controversial example ahead! You might find it inaccurate. If you are annoyed by that feeling, try to remember – it’s just an example.
  • 62. GaaE: Google as an Example Product Self Service Multi- tenant * aaS
  • 63. GaaE: Google as an Example Product Self Service Multi- tenant * aaS Gmail   Not *aaS, web-app
  • 64. GaaE: Google as an Example Product Self Service Multi- tenant * aaS Gmail   Not *aaS, web-app Google Apps   SaaS
  • 65. GaaE: Google as an Example Product Self Service Multi- tenant * aaS Gmail   Not *aaS, web-app Google Apps   SaaS Google App Engine   PaaS
  • 66. GaaE: Google as an Example Product Self Service Multi- tenant * aaS Gmail   Not *aaS, web-app Google Apps   SaaS Google App Engine   PaaS Google Compute Engine   IaaS
  • 67. AaaE: Amazon as an Example Product Self Service Multi- tenant * aaS
  • 68. AaaE: Amazon as an Example Product Self Service Multi- tenant * aaS Amazon store   Not *aaS, web-app
  • 69. AaaE: Amazon as an Example Product Self Service Multi- tenant * aaS Amazon store   Not *aaS, web-app aStore   SaaS
  • 70. AaaE: Amazon as an Example Product Self Service Multi- tenant * aaS Amazon store   Not *aaS, web-app aStore   SaaS Amazon Elastic Beantalk   PaaS
  • 71. AaaE: Amazon as an Example Product Self Service Multi- tenant * aaS Amazon store   Not *aaS, web-app aStore   SaaS Amazon Elastic Beantalk   PaaS Amazon Elastic Cloud   IaaS
  • 74.
  • 75. Looks good! When to expect?
  • 77. Given: Release Java 7 07/2011 Release Java 8 12/2012
  • 78. Given: Release Java 7 07/2011 Release Java 8 12/2012 Find: Release Java 9?
  • 79.
  • 82. Java 8: 12/2012 - Java 7: 07/2011 = 15 Months cycle
  • 83. Java 8: 12/2012 - Java 7: 07/2011 = 15 Months cycle conclusion: Java 9: 05/2013
  • 84. Java 8: 12/2012 - Java 7: 07/2011 = 15 Months cycle conclusion: Java 9: 05/2013 It’s almost a year ago! Oh, wait… Java 8 is not out yet!
  • 85. Observation: When Mark writes about trains it means release delay
  • 88. Java 7: 07/2011 + 24 Months =
  • 89. Java 7: 07/2011 + 24 Months = Java 8: 07/2013
  • 91. Java 7: 07/2011 + 24 Months = Java 8: 07/2013
  • 92. Java 7: 07/2011 + 24 Months = Java 8: 01/2014 Whatever mark says
  • 93. Java 7: 07/2011 + 24 Months = Java 8: 01/2014 + 24 Months = Java 9: 01/2016 Whatever mark says
  • 94. You think this is it?
  • 95. Java 7: 07/2011 + 24 Months = Java 8: 03/2014 Whatever mark says
  • 96. Java 7: 07/2011 + 24 Months = Java 8: 03/2014 + 24 Months = Whatever mark says
  • 97. Java 7: 07/2011 + 24 Months = Java 8: 03/2014 + 24 Months = Java 9: 03/2016 Whatever mark says
  • 98. Java 7: 07/2011 + 24 Months = Java 8: 03/2014 + 24 Months = Java 9: 03/2016 (if no more train blog posts) Whatever mark says
  • 99. Java 7: 07/2011 + 24 месяца = Java 8: 03/2014 + 24 месяца = Java 9: 03/2016 (Если не будет больше постов про поезд) Сколько Марк скажет
  • 100.
  • 103. Multi-tenancy types Multi-tenancy Type Data Separation Application Separation
  • 104. Multi-tenancy types Multi-tenancy Type Data Separation Application Separation Process Separation
  • 105. GaaE for Multi Tenancy types Product Multi-tenancy Type
  • 106. GaaE for Multi Tenancy types Product Multi-tenancy Type Google Apps Data Separation
  • 107. GaaE for Multi Tenancy types Product Multi-tenancy Type Google Apps Data Separation Google App Engine Application Separation
  • 108. GaaE for Multi Tenancy types Product Multi-tenancy Type Google Apps Data Separation Google App Engine Application Separation Google Compute Engine Process Separation
  • 109. Strategy Pros Cons Separating data Separating application Separating processes Let’s compare!
  • 110. Strategy Pros Cons Separating data  Normal Java Application Separating application Separating processes Let’s compare!
  • 111. Strategy Pros Cons Separating data  Normal Java Application  Manual state separation  Complicated and critical schema Separating application Separating processes Let’s compare!
  • 112. Strategy Pros Cons Separating data  Normal Java Application  Manual state separation  Complicated and critical schema Separating application Separating processes Let’s compare! 
  • 113. Strategy Pros Cons Separating data  Normal Java Application  Manual state separation  Complicated and critical schema Separating application Separating processes  No shared state  Simple transition from existing Let’s compare! 
  • 114. Strategy Pros Cons Separating data  Normal Java Application  Manual state separation  Complicated and critical schema Separating application Separating processes  No shared state  Simple transition from existing  JVM per tenant! Let’s compare! 
  • 115. Strategy Pros Cons Separating data  Normal Java Application  Manual state separation  Complicated and critical schema Separating application Separating processes  No shared state  Simple transition from existing  JVM per tenant! Let’s compare!  
  • 116. Strategy Pros Cons Separating data  Normal Java Application  Manual state separation  Complicated and critical schema Separating application  No shared state  Simple transition from existing Separating processes  No shared state  Simple transition from existing  JVM per tenant! Let’s compare!  
  • 117. Strategy Pros Cons Separating data  Normal Java Application  Manual state separation  Complicated and critical schema Separating application  No shared state  Simple transition from existing Separating processes  No shared state  Simple transition from existing  JVM per tenant! Let’s compare!   
  • 118. Strategy Pros Cons Separating data  Normal Java Application  Manual state separation  Complicated and critical schema Separating application  No shared state  Simple transition from existing  Stay tuned… Separating processes  No shared state  Simple transition from existing  JVM per tenant! Let’s compare!   
  • 119. Separate WARs: Tomcat Root ┌── lib ├── webapps │ ├── customer-name │ ├── other-customer-name │ └── many other customers └── other dirs (bin, conf, log, etc)
  • 122. Separate WARs That was the PermGen. Yup.
  • 123. We love our toys
  • 124. We love our toys Artifactory-3.0.1.warwebappWEB-INFlib$du –m 51 .
  • 125.
  • 126. To the common ClassLoader!
  • 128. Will it work? ‹ Object state _________
  • 129. Will it work? ‹ Object state ‹ Static state _________
  • 130. “Static State Quest I” (Sierra, who else?)
  • 132. The Evil App. Context Holder Pattern
  • 133. The Evil App. Context Holder Pattern public class AppCtxHolder implements ApplicationContextAware { private static ApplicationContext ctx; public AppCtxHolder() { } public void setApplicationContext(ApplicationContext applicationContext) { ctx = applicationContext; } public static ApplicationContext getApplicationContext() { return ctx; } }
  • 134. The Evil App. Context Holder Pattern public class AppCtxHolder implements ApplicationContextAware { private static ApplicationContext ctx; public AppCtxHolder() { } public void setApplicationContext(ApplicationContext applicationContext) { ctx = applicationContext; } public static ApplicationContext getApplicationContext() { return ctx; } }
  • 135. The Evil App. Context Holder Pattern public class AppCtxHolder implements ApplicationContextAware { private static ApplicationContext ctx; public AppCtxHolder() { } public void setApplicationContext(ApplicationContext applicationContext) { ctx = applicationContext; } public static ApplicationContext getApplicationContext() { return ctx; } }
  • 137. Apache Wicket We love Wicket, cause it allows people who hate UI development to develop a UI, which people don’t hate
  • 139. Logger
  • 140. Logger
  • 146. Tomcat Root – Where are the JARs?┌── 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)
  • 147. Tomcat Root – Where are the JARs?┌── 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)
  • 148. Tomcat Root – Where are the JARs?┌── 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)
  • 149. Tomcat Root – Global lib folder ┌── 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)
  • 150. Tomcat Root – Global lib folder ┌── 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)
  • 151. Tomcat Root – Global lib folder ┌── 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)
  • 152. Tomcat Root – Global lib folder ┌── 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)
  • 153. Tomcat Root – Global lib folder ┌── 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)
  • 158.
  • 159.
  • 161.
  • 162.
  • 163.
  • 164. Artifactory is built with Artifactory!
  • 173. It’s all about right tools
  • 176. Now we do it the other way around
  • 177. Actually, now we do it the right way!
  • 178. And we love what we got!
  • 179. And we love what we got!

Notas del editor

  1. Files are never changed!
  2. Community successJFrog established in 2008JavaOne 2009Pro versionSoftware as a Service (SaaS version)Heavily used by OSS community
  3. Community successJFrog established in 2008JavaOne 2009Pro versionSoftware as a Service (SaaS version)Heavily used by OSS community
  4. Community successJFrog established in 2008JavaOne 2009Pro versionSoftware as a Service (SaaS version)Heavily used by OSS community
  5. Community successJFrog established in 2008JavaOne 2009Pro versionSoftware as a Service (SaaS version)Heavily used by OSS community
  6. Last slide by Baruch
  7. Last slide by Baruch
  8. 30 million requests/weekMostly in the Pacific Time Monday mornings4 TB of artifacts
  9. Multi-tenancyPlatform selection PaaS or IaaSDB schema updates
  10. Using standard Java WAR classloader isolationCreating standard WAR with dependencies in ‘lib’, classes in ‘classes’Creating per-user databaseDone!
  11. Using standard Java WAR classloader isolationCreating standard WAR with dependencies in ‘lib’, classes in ‘classes’Creating per-user databaseDone!
  12. Using standard Java WAR classloader isolationCreating standard WAR with dependencies in ‘lib’, classes in ‘classes’Creating per-user databaseDone!
  13. PerfectMake sure the context is bounded to thread/war
  14. Was goodNew versions added staticmap of applicationsLesson learned: Recheck on each version upgrade
  15. Was goodNew versions added staticmap of applicationsLesson learned: Recheck on each version upgrade
  16. Was goodNew versions added staticmap of applicationsLesson learned: Recheck on each version upgrade
  17. They are not shared – good!Need global management to adjust the size to match all the tenantsWithout global thread pool
  18. Logger fields are (almost) always staticCan’t fight it
  19. We MITM-ed the LoggerFactoryKeeps Loggers per application instead of static
  20. ExamplesTransaction IDTomcat ClassLoaderSolving race condition generates synchronous initialization
  21. Heap-wide temp file cleaner thread A static thread destroying the temp files of the other tenantsNot as funny as it sounds
  22. Heap-wide temp file cleaner thread A static thread destroying the temp files of the other tenantsNot as funny as it sounds
  23. Lucene and other cache solutions are adjusted for the whole heap sizeUse SoftReference based caches
  24. Custom Tomcat (our own jars in Tomcat’s lib)Custom Machine Image with our customized software and configuration
  25. Infrastructure as a Service
  26. Self Service PlatformRegistrationInstance generationDBBackupVirtual HostWARCustomer account management
  27. 3 Versions3 Deployment formatsWARZIPRPMLots of dependencies
  28. Рекурсивный слайд с мимимишным ребенком!!!
  29. Рекурсивный слайд с мимимишным ребенком!!!
  30. We eat our own dog foodArtifactory is built with Artifactory
  31. Snapshots are built, tested & deployed on your build server of choiceWith Artifactory pluginArtifactory “snapshot promotion” to sandbox
  32. Deploying to production using ChefOther options:PuppetBuild Server pluginsZT LiveRebelScripts
  33. Continuously release to the cloudOnce in a while “freezing” it to downloadable version
  34. Rapid feedbackHost server accessDevelopers must think bigStandalone updates well tested by SaaSStandalone application is kind of LTS version
  35. Rapid feedbackHost server accessDevelopers must think bigStandalone updates well tested by SaaSStandalone application is kind of LTS version