SlideShare a Scribd company logo
1 of 71
Download to read offline
Roberto Cortez
JavaOne 2015
#CON3212
Migration Tales from
Java EE 5 to 7
Roberto Cortez
Speaker, Blogger, Passionate Developer
twitter:
@radcortez
mail:
radcortez@yahoo.com
blog:
http://www.radcortez.com
This presentation is NOT about:
• Technology X versus Y
• Follow a step by step plan (BANG! You’re done)
• Each case is different
It’s about:
• Sharing knowledge
• Telling our story
• Learning about possible issues
Questions?
Questions?
As soon as you have them!
A little bit of History
• Java EE 5 (2006) and Java EE 7 (2013) are 7
years apart
• 7 years in technology is like a century
• Major changes introduced between 5 and 7
A little bit of History
JPA JMS JCA
Interceptors
JTA
Common
Annotations
EJB
Servlet
JSF JSP
EL
JAX-WS
A little bit of History
JPA JMS JCA
Interceptors
JTA
Common
Annotations
EJB
Servlet
JSF JSP
EL
JAX-WS
Bean
Validation
CDI
Managed Beans
CDI
Extensions
Web
Fragments
JAX-WS
JAX-RS
A little bit of History
JPA JMS JCA
Interceptors
JTA
Common
Annotations
EJB
Servlet
JSF JSP
EL
JAX-WS
Batch
Concurrency
JSON WebSocket
Bean
Validation
CDI
Managed Beans
CDI
Extensions
Web
Fragments
JAX-WS
JAX-RS
The Platform
• Segurnet acts as an integration network for the
Insurance sector in Portugal.
• It’s central to the Business
• New challenges to keep the platform going
The Platform
• SOA based Architecture
• XML Messages by WS or Batch
• Online Application
A few Numbers
• 65 Companies
• 32 258 Active Users
• 141 084 250 Page Views
• 325 605 701 Server Requests
Legacy
• Since 2007 the platform is using Java EE 5
technology in a Java 6 environment
• Other technologies are also used: GWT, Spring,
Batch, Apache Projects, Velocity, BIRT
• Runs in a JBoss 4.2.3 server
Stop the LegacyLinesofCode
0
350
700
1050
1400
2009 2010 2011 2012 2013 2014 2015 2016
1 170k1 135k
935k
810k
600k
490k
300k
130k
Motivations to Migrate
• Benefit from the latest improvements
• Java 6 EOL in Q1 2013
• Increased maintenance costs
• Hard to keep developers interested
The Prelude
• Migrations are not straightforward
• It’s difficult to know the path
• Expect the unexpected
On with the Journey
• Delays new Business Features
• Non negotiable deadline
• One Shot
Strategy: Feature Freeze?
• Keep Development going
• Best for Business
• Requires more discipline and planning
• By Module, Canary, Application
Strategy: Combined?
• Application Server Upgrade to Wildfly 8.2.0
• Update / Duplicate Environments
• Support Tools also need Migration / Tweaking
(Maven, Jenkins, Sonar)
First steps
Walking the Path
Dependency Chaos
• Code tied to the Application Server
• Code tied to specific Java EE implementations
(especially Hibernate)
• In house code to bypass Java EE 5 limitations
Dependency Chaos
Dependency Chaos
<dependency>

<groupId>javax.ejb</groupId>

<artifactId>ejb-api</artifactId>

<version>3.0</version>

</dependency>
Dependency Chaos
<dependency>

<groupId>javax.persistence</groupId>

<artifactId>persistence-api</artifactId>

<version>1.0</version>

</dependency>
<dependency>

<groupId>javax.ejb</groupId>

<artifactId>ejb-api</artifactId>

<version>3.0</version>

</dependency>
Dependency Chaos
<dependency>

<groupId>javax.persistence</groupId>

<artifactId>persistence-api</artifactId>

<version>1.0</version>

</dependency>
<dependency>

<groupId>javax.ejb</groupId>

<artifactId>ejb-api</artifactId>

<version>3.0</version>

</dependency>
<dependency>

<groupId>javax.transaction</groupId>

<artifactId>jta</artifactId>

<version>1.1</version>

</dependency>
Dependency Chaos
<dependency>

<groupId>javax.persistence</groupId>

<artifactId>persistence-api</artifactId>

<version>1.0</version>

</dependency>
<dependency>

<groupId>javax.ejb</groupId>

<artifactId>ejb-api</artifactId>

<version>3.0</version>

</dependency>
<dependency>

<groupId>javax.transaction</groupId>

<artifactId>jta</artifactId>

<version>1.1</version>

</dependency>
<dependency>

<groupId>javax.servlet.jsp</groupId>

<artifactId>jsp-api</artifactId>

<version>2.1</version>

</dependency>
Dependency Chaos
<dependency>

<groupId>javax.persistence</groupId>

<artifactId>persistence-api</artifactId>

<version>1.0</version>

</dependency>
<dependency>

<groupId>javax.ejb</groupId>

<artifactId>ejb-api</artifactId>

<version>3.0</version>

</dependency>
<dependency>

<groupId>javax.transaction</groupId>

<artifactId>jta</artifactId>

<version>1.1</version>

</dependency>
<dependency>

<groupId>javax.servlet</groupId>

<artifactId>servlet-api</artifactId>

<version>2.5</version>

</dependency>
<dependency>

<groupId>javax.servlet.jsp</groupId>

<artifactId>jsp-api</artifactId>

<version>2.1</version>

</dependency>
Dependency Chaos
<dependency>

<groupId>javax.persistence</groupId>

<artifactId>persistence-api</artifactId>

<version>1.0</version>

</dependency>
<dependency>

<groupId>javax.ejb</groupId>

<artifactId>ejb-api</artifactId>

<version>3.0</version>

</dependency>
<dependency>

<groupId>javax.transaction</groupId>

<artifactId>jta</artifactId>

<version>1.1</version>

</dependency>
<dependency>

<groupId>javax.servlet</groupId>

<artifactId>servlet-api</artifactId>

<version>2.5</version>

</dependency>
<dependency>

<groupId>javax.servlet.jsp</groupId>

<artifactId>jsp-api</artifactId>

<version>2.1</version>

</dependency>
<dependency>

<groupId>jboss</groupId>

<artifactId>jboss-ejb-api</artifactId>

<version>4.2.3.GA</version>

</dependency>
Dependency Chaos
<dependency>

<groupId>javax.persistence</groupId>

<artifactId>persistence-api</artifactId>

<version>1.0</version>

</dependency>
<dependency>

<groupId>javax.ejb</groupId>

<artifactId>ejb-api</artifactId>

<version>3.0</version>

</dependency>
<dependency>

<groupId>javax.transaction</groupId>

<artifactId>jta</artifactId>

<version>1.1</version>

</dependency>
<dependency>

<groupId>javax.servlet</groupId>

<artifactId>servlet-api</artifactId>

<version>2.5</version>

</dependency>
<dependency>

<groupId>javax.servlet.jsp</groupId>

<artifactId>jsp-api</artifactId>

<version>2.1</version>

</dependency>
<dependency>

<groupId>jboss</groupId>

<artifactId>jboss-annotations-ejb3</artifactId>

<version>4.2.3.GA</version>

</dependency>
<dependency>

<groupId>jboss</groupId>

<artifactId>jboss-ejb-api</artifactId>

<version>4.2.3.GA</version>

</dependency>
Dependency Chaos
<dependency>

<groupId>javax.persistence</groupId>

<artifactId>persistence-api</artifactId>

<version>1.0</version>

</dependency>
<dependency>

<groupId>javax.ejb</groupId>

<artifactId>ejb-api</artifactId>

<version>3.0</version>

</dependency>
<dependency>

<groupId>javax.transaction</groupId>

<artifactId>jta</artifactId>

<version>1.1</version>

</dependency>
<dependency>

<groupId>javax.servlet</groupId>

<artifactId>servlet-api</artifactId>

<version>2.5</version>

</dependency>
<dependency>

<groupId>javax.servlet.jsp</groupId>

<artifactId>jsp-api</artifactId>

<version>2.1</version>

</dependency>
<dependency>

<groupId>jboss</groupId>

<artifactId>jboss-annotations-ejb3</artifactId>

<version>4.2.3.GA</version>

</dependency>
<dependency>

<groupId>jboss</groupId>

<artifactId>jboss-ejb-api</artifactId>

<version>4.2.3.GA</version>

</dependency>
<dependency>

<groupId>org.hibernate</groupId>

<artifactId>hibernate-annotations</artifactId>

<version>3.2.4.sp1</version>

</dependency>
Dependency Chaos
<dependency>

<groupId>javax.persistence</groupId>

<artifactId>persistence-api</artifactId>

<version>1.0</version>

</dependency>
<dependency>

<groupId>javax.ejb</groupId>

<artifactId>ejb-api</artifactId>

<version>3.0</version>

</dependency>
<dependency>

<groupId>javax.transaction</groupId>

<artifactId>jta</artifactId>

<version>1.1</version>

</dependency>
<dependency>

<groupId>javax.servlet</groupId>

<artifactId>servlet-api</artifactId>

<version>2.5</version>

</dependency>
<dependency>

<groupId>javax.servlet.jsp</groupId>

<artifactId>jsp-api</artifactId>

<version>2.1</version>

</dependency>
<dependency>

<groupId>jboss</groupId>

<artifactId>jboss-annotations-ejb3</artifactId>

<version>4.2.3.GA</version>

</dependency>
<dependency>

<groupId>jboss</groupId>

<artifactId>jboss-ejb-api</artifactId>

<version>4.2.3.GA</version>

</dependency>
<dependency>

<groupId>org.hibernate</groupId>

<artifactId>hibernate</artifactId>

<version>3.2.4.sp1</version>

</dependency><dependency>

<groupId>org.hibernate</groupId>

<artifactId>hibernate-annotations</artifactId>

<version>3.2.4.sp1</version>

</dependency>
Dependency Chaos
<dependency>

<groupId>javax.persistence</groupId>

<artifactId>persistence-api</artifactId>

<version>1.0</version>

</dependency>
<dependency>

<groupId>javax.ejb</groupId>

<artifactId>ejb-api</artifactId>

<version>3.0</version>

</dependency>
<dependency>

<groupId>javax.transaction</groupId>

<artifactId>jta</artifactId>

<version>1.1</version>

</dependency>
<dependency>

<groupId>javax.servlet</groupId>

<artifactId>servlet-api</artifactId>

<version>2.5</version>

</dependency>
<dependency>

<groupId>javax.servlet.jsp</groupId>

<artifactId>jsp-api</artifactId>

<version>2.1</version>

</dependency>
<dependency>

<groupId>jboss</groupId>

<artifactId>jboss-annotations-ejb3</artifactId>

<version>4.2.3.GA</version>

</dependency>
<dependency>

<groupId>jboss</groupId>

<artifactId>jboss-ejb-api</artifactId>

<version>4.2.3.GA</version>

</dependency>
<dependency>

<groupId>jboss</groupId>

<artifactId>jboss-common</artifactId>

<version>4.2.3.GA</version>

</dependency>
<dependency>

<groupId>org.hibernate</groupId>

<artifactId>hibernate</artifactId>

<version>3.2.4.sp1</version>

</dependency><dependency>

<groupId>org.hibernate</groupId>

<artifactId>hibernate-annotations</artifactId>

<version>3.2.4.sp1</version>

</dependency>
Dependency Chaos
<dependency>

<groupId>javax.persistence</groupId>

<artifactId>persistence-api</artifactId>

<version>1.0</version>

</dependency>
<dependency>

<groupId>javax.ejb</groupId>

<artifactId>ejb-api</artifactId>

<version>3.0</version>

</dependency>
<dependency>

<groupId>javax.transaction</groupId>

<artifactId>jta</artifactId>

<version>1.1</version>

</dependency>
<dependency>

<groupId>javax.servlet</groupId>

<artifactId>servlet-api</artifactId>

<version>2.5</version>

</dependency>
<dependency>

<groupId>javax.servlet.jsp</groupId>

<artifactId>jsp-api</artifactId>

<version>2.1</version>

</dependency>
<dependency>

<groupId>jboss</groupId>

<artifactId>jboss-annotations-ejb3</artifactId>

<version>4.2.3.GA</version>

</dependency>
<dependency>

<groupId>jboss</groupId>

<artifactId>jboss-ejb-api</artifactId>

<version>4.2.3.GA</version>

</dependency>
<dependency>

<groupId>jboss</groupId>

<artifactId>jbosssx</artifactId>

<version>4.2.3.GA</version>

</dependency>
<dependency>

<groupId>jboss</groupId>

<artifactId>jboss-common</artifactId>

<version>4.2.3.GA</version>

</dependency>
<dependency>

<groupId>org.hibernate</groupId>

<artifactId>hibernate</artifactId>

<version>3.2.4.sp1</version>

</dependency><dependency>

<groupId>org.hibernate</groupId>

<artifactId>hibernate-annotations</artifactId>

<version>3.2.4.sp1</version>

</dependency>
One JAR to rule them all!
<dependency>

<groupId>javax</groupId>

<artifactId>javaee-api</artifactId>

<version>7.0</version>

</dependency>
Dependencies Updates
• Maven 2.2.1
• Java EE 5
• Spring 2.5.6
• Ehcache 1.5.0
• GWT 1.6.4
• Maven 3.2.3
• Java EE 7
• Spring 4.1.4
• Ehcache 2.8.3
• GWT 2.0.0
Dependencies Resolution
• Try to keep with the Standards
• Introduce additional libraries only if absolutely
necessary
• Easier to move on to new versions
Classloading Hell
• ClassNotFoundException
• NoClassDefFoundError
• ClassCastException
• JBoss dreaded UnifiedClassLoader
Classloading Hell
• Servers change their libraries
• These can clash with your Application libraries
• Need to tune dependencies or rewrite code
Simplify Packaging
• EAR to WAR
• Other packages too: SAR, RAR
• Enough for the majority of Projects
Keep on Walking
Easy to use Goodies
• CDI
• No more Local Interfaces
• Singletons
• Simplified JPA
• Validations
public static <T> T getLocalBean(final Class<T> klass) {
try {
LocalBinding localBinding =
	 	 	 	 	 klass.getAnnotation(LocalBinding.class);
if (localBinding == null) {
throw new BeanNotFoundException(“…”);
}
return (T) initialContext.lookup(localBinding.jndiBinding());
} catch (Exception e) {
throw new BeanNotFoundException(“…”);
}
}
LocalBinding localBinding =
	 	 	 	 	 klass.getAnnotation(LocalBinding.
}
}
}
LocalBinding localBinding =
	 	 	 	 	 klass.getAnnotation(LocalBinding.
}
}
}
@Inject
@Stateless
@Local(UserBusiness.class)
public class UserBusinessBean implements UserBusiness {
…
}
@Stateless
public class UserBusinessBean implements UserBusiness {
…
}
@Stateless
public class UserBusinessBean {
…
}
public class ModuleListener {

private static ModuleListener moduleListener;

private static ModuleBusiness moduleBusiness;



private ModuleListener() {

moduleBusiness =
BeanFactory.getLocalBean(ModuleBusinessBean.class);

}



public static ModuleListener getInstance() {

if (moduleListener == null) {

moduleListener = new ModuleListener();

}

return moduleListener;

}
public class
private static
private static


private
BeanFactory.getLocalBean(ModuleBusinessBean.
}


public static
if
return
public class
private static
private static


private
BeanFactory.getLocalBean(ModuleBusinessBean.
}


public static
if
return
@Singleton
@Singleton

@Lock(LockType.READ)

public class ModuleListener {



@EJB

private ModuleBusiness moduleBusiness;
}
public List<PostalCode> findAddress(final String postalCode,
		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 final String postalCodeExt) {



List<FieldCriteria> criterias = new ArrayList<FieldCriteria>();



criterias.add(new FieldCriteria("code", EQUALS, postalCode,
AND));

criterias.add(new FieldCriteria("extension", EQUALS,
postalCodeExt, AND));



return postalCodesDAO.findAll(PostalCode.class, null, criterias,
null, true);

}
public
		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 final


List<FieldCriteria> criterias =


AND
postalCodeExt


null, true
}
public
		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 final


List<FieldCriteria> criterias =


AND
postalCodeExt


null, true
}
JPA Criteria
API
public List<PostalCode> findAddress(final String postalCode,
		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 final String postalCodeExt) {



CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<PostalCode> cq = cb.createQuery(PostalCode.class);
Root<PostalCode> root = cq.from(PostalCode.class);
cq.select(root).where(

cb.equal(root.get(PostalCode_.code), postalCode),

cb.equal(root.get(PostalCode_.extension), postalCodeExt));
TypedQuery<PostalCode> query = em.createQuery(cq);

return query.getResultList();
}


}
Query query = manager.createNativeQuery(

"BEGIN PAC_GS_COMPENSATION_CHAMBER.
execute_compensation_chamber(
:protocol, :eligibility, :identifier, :userId); END;");



query.setParameter("protocol", protocol);

query.setParameter("eligibility", eligibility);

query.setParameter("identifier", identifier);

query.setParameter("userId", userId);

query.executeUpdate();
Query query =
execute_compensation_chamber(
:protocol, :eligibility, :identifier, :userId); END;"


query.setParameter(
query.setParameter(
query.setParameter(
query.setParameter(
query.executeUpdate();
Query query =
execute_compensation_chamber(
:protocol, :eligibility, :identifier, :userId); END;"


query.setParameter(
query.setParameter(
query.setParameter(
query.setParameter(
query.executeUpdate();
@NamedStoredProcedureQuery
public static int fieldEntityMaxLenght(Class clazz, String field)
throws Exception {

int maxLength = 0;

if (field != null) {

Column annotation =
clazz.getDeclaredField(field).getAnnotation(Column.class);

maxLength = annotation.length();

}

return maxLength;

}
public static void rejectIfMaxLengthExceeded(String field, int
maxLength) {

if (field != null && field.length() > maxLength) { … }
}
public static int
clazz.getDeclaredField(field).getAnnotation(
maxLength = annotation.length()
}
}
public static void
maxLength) {
}
public static int
clazz.getDeclaredField(field).getAnnotation(
maxLength = annotation.length()
}
}
public static void
maxLength) {
}
@NotNull
@Max
The End of a Journey
Was it worth it?
• Removed Code
• Code is growing at a slower pace
• Easier to maintain
Was it worth it?
• Productivity (1 minute deploy time vs 5)
• Performance JVM (10 to 25% increase)
• Developers Happy :)
Setbacks
• Started in May 2013, finished October 2015
• Underestimate the Job
• Business demands priorities
Setbacks
• Vendors moved slowly to EE 7
• Blocked by Wildfly bugs
• Missed dates multiple times
• Not enough confidence in tests
New Horizons
• Jumped straight away to Java 8
• Ready to face new Java EE versions
• Easier to upgrade or change Server
New Horizons
• Proper Testing frameworks (Arquillian)
• Keep simplifying the code (JMS, Batch)
• Adopt new specifications (Websockets)
Thank you for Attending!
twitter:
@radcortez
mail:
radcortez@yahoo.com
blog:
http://www.radcortez.com

More Related Content

What's hot

Enterprise Architectures with Ruby (and Rails)
Enterprise Architectures with Ruby (and Rails)Enterprise Architectures with Ruby (and Rails)
Enterprise Architectures with Ruby (and Rails)
Konstantin Gredeskoul
 
Hybrid Mobile Development with Apache Cordova and
Hybrid Mobile Development with Apache Cordova and Hybrid Mobile Development with Apache Cordova and
Hybrid Mobile Development with Apache Cordova and
Ryan Cuprak
 

What's hot (20)

Enterprise Architectures with Ruby (and Rails)
Enterprise Architectures with Ruby (and Rails)Enterprise Architectures with Ruby (and Rails)
Enterprise Architectures with Ruby (and Rails)
 
Just enough app server
Just enough app serverJust enough app server
Just enough app server
 
JavaCro'15 - Everything a Java EE Developer needs to know about the JavaScrip...
JavaCro'15 - Everything a Java EE Developer needs to know about the JavaScrip...JavaCro'15 - Everything a Java EE Developer needs to know about the JavaScrip...
JavaCro'15 - Everything a Java EE Developer needs to know about the JavaScrip...
 
JavaOne 2015 CON7547 "Beyond the Coffee Cup: Leveraging Java Runtime Technolo...
JavaOne 2015 CON7547 "Beyond the Coffee Cup: Leveraging Java Runtime Technolo...JavaOne 2015 CON7547 "Beyond the Coffee Cup: Leveraging Java Runtime Technolo...
JavaOne 2015 CON7547 "Beyond the Coffee Cup: Leveraging Java Runtime Technolo...
 
DevNexus 2019: Migrating to Java 11
DevNexus 2019: Migrating to Java 11DevNexus 2019: Migrating to Java 11
DevNexus 2019: Migrating to Java 11
 
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"
 
History of Java 1/2
History of Java 1/2History of Java 1/2
History of Java 1/2
 
2015 JavaOne EJB/CDI Alignment
2015 JavaOne EJB/CDI Alignment2015 JavaOne EJB/CDI Alignment
2015 JavaOne EJB/CDI Alignment
 
Top 50 java ee 7 best practices [con5669]
Top 50 java ee 7 best practices [con5669]Top 50 java ee 7 best practices [con5669]
Top 50 java ee 7 best practices [con5669]
 
Migrating to Java 11
Migrating to Java 11Migrating to Java 11
Migrating to Java 11
 
Modules in Java? Finally! (OpenJDK 9 Jigsaw, JSR376)
Modules in Java? Finally! (OpenJDK 9 Jigsaw, JSR376)Modules in Java? Finally! (OpenJDK 9 Jigsaw, JSR376)
Modules in Java? Finally! (OpenJDK 9 Jigsaw, JSR376)
 
Sbt, idea and eclipse
Sbt, idea and eclipseSbt, idea and eclipse
Sbt, idea and eclipse
 
Perl Testing Consideration (seen from other languages)
Perl Testing Consideration (seen from other languages)Perl Testing Consideration (seen from other languages)
Perl Testing Consideration (seen from other languages)
 
EuroPython 2011 - How to build complex web applications having fun?
EuroPython 2011 - How to build complex web applications having fun?EuroPython 2011 - How to build complex web applications having fun?
EuroPython 2011 - How to build complex web applications having fun?
 
Hybrid Mobile Development with Apache Cordova and
Hybrid Mobile Development with Apache Cordova and Hybrid Mobile Development with Apache Cordova and
Hybrid Mobile Development with Apache Cordova and
 
Digpen 7: Why choose Laravel?
Digpen 7: Why choose Laravel?Digpen 7: Why choose Laravel?
Digpen 7: Why choose Laravel?
 
Stackato v6
Stackato v6Stackato v6
Stackato v6
 
Preparing for java 9 modules upload
Preparing for java 9 modules uploadPreparing for java 9 modules upload
Preparing for java 9 modules upload
 
Wicket 10 years and beyond
Wicket   10 years and beyond Wicket   10 years and beyond
Wicket 10 years and beyond
 
Project Jigsaw in JDK 9: Modularity Comes To Java
Project Jigsaw in JDK 9: Modularity Comes To JavaProject Jigsaw in JDK 9: Modularity Comes To Java
Project Jigsaw in JDK 9: Modularity Comes To Java
 

Viewers also liked

Coimbra JUG - 2º Encontro - O primeiro contacto com Java EE 7
Coimbra JUG - 2º Encontro - O primeiro contacto com Java EE 7Coimbra JUG - 2º Encontro - O primeiro contacto com Java EE 7
Coimbra JUG - 2º Encontro - O primeiro contacto com Java EE 7
Roberto Cortez
 
Coimbra JUG - 1º Encontro - As novidades do Java 8
Coimbra JUG - 1º Encontro - As novidades do Java 8Coimbra JUG - 1º Encontro - As novidades do Java 8
Coimbra JUG - 1º Encontro - As novidades do Java 8
Roberto Cortez
 
Multi modularized project setup with gulp, typescript and angular.js
Multi modularized project setup with gulp, typescript and angular.jsMulti modularized project setup with gulp, typescript and angular.js
Multi modularized project setup with gulp, typescript and angular.js
David Amend
 

Viewers also liked (20)

Development Horror Stories
Development Horror StoriesDevelopment Horror Stories
Development Horror Stories
 
Geecon 2014 - Five Ways to Not Suck at Being a Java Freelancer
Geecon 2014 - Five Ways to Not Suck at Being a Java FreelancerGeecon 2014 - Five Ways to Not Suck at Being a Java Freelancer
Geecon 2014 - Five Ways to Not Suck at Being a Java Freelancer
 
Coimbra JUG - 2º Encontro - O primeiro contacto com Java EE 7
Coimbra JUG - 2º Encontro - O primeiro contacto com Java EE 7Coimbra JUG - 2º Encontro - O primeiro contacto com Java EE 7
Coimbra JUG - 2º Encontro - O primeiro contacto com Java EE 7
 
Java EE 7 Batch processing in the Real World
Java EE 7 Batch processing in the Real WorldJava EE 7 Batch processing in the Real World
Java EE 7 Batch processing in the Real World
 
The 5 People in your Organization that grow Legacy Code
The 5 People in your Organization that grow Legacy CodeThe 5 People in your Organization that grow Legacy Code
The 5 People in your Organization that grow Legacy Code
 
2013 05 java 7 brown bag part 1 - new features and migration strategy
2013 05 java 7 brown bag part 1 - new features and migration strategy2013 05 java 7 brown bag part 1 - new features and migration strategy
2013 05 java 7 brown bag part 1 - new features and migration strategy
 
Александр Захаров "Использование EntityGraph в JPA 2.1"
Александр Захаров "Использование EntityGraph в JPA 2.1"Александр Захаров "Использование EntityGraph в JPA 2.1"
Александр Захаров "Использование EntityGraph в JPA 2.1"
 
Java 5 and 6 New Features
Java 5 and 6 New FeaturesJava 5 and 6 New Features
Java 5 and 6 New Features
 
Gwt presentation
Gwt presentationGwt presentation
Gwt presentation
 
Javascript & Angular .js for the enterprise, lessons learned, typescript scal...
Javascript & Angular .js for the enterprise, lessons learned, typescript scal...Javascript & Angular .js for the enterprise, lessons learned, typescript scal...
Javascript & Angular .js for the enterprise, lessons learned, typescript scal...
 
Reasons to migrate to modern web development with JavaScript
Reasons to migrate to modern web development with JavaScriptReasons to migrate to modern web development with JavaScript
Reasons to migrate to modern web development with JavaScript
 
Gwt widget frameworks_presentation
Gwt widget frameworks_presentationGwt widget frameworks_presentation
Gwt widget frameworks_presentation
 
The First Contact with Java EE 7
The First Contact with Java EE 7The First Contact with Java EE 7
The First Contact with Java EE 7
 
Coimbra JUG - 1º Encontro - As novidades do Java 8
Coimbra JUG - 1º Encontro - As novidades do Java 8Coimbra JUG - 1º Encontro - As novidades do Java 8
Coimbra JUG - 1º Encontro - As novidades do Java 8
 
Java EE 7 meets Java 8
Java EE 7 meets Java 8Java EE 7 meets Java 8
Java EE 7 meets Java 8
 
Multi modularized project setup with gulp, typescript and angular.js
Multi modularized project setup with gulp, typescript and angular.jsMulti modularized project setup with gulp, typescript and angular.js
Multi modularized project setup with gulp, typescript and angular.js
 
Angularjs practical project experiences with javascript development in a bank
Angularjs practical project experiences with javascript development in a bankAngularjs practical project experiences with javascript development in a bank
Angularjs practical project experiences with javascript development in a bank
 
Do you need microservices architecture?
Do you need microservices architecture?Do you need microservices architecture?
Do you need microservices architecture?
 
Guia de Semana at GlassFish Community Event, JavaOne 2011
Guia de Semana at GlassFish Community Event, JavaOne 2011Guia de Semana at GlassFish Community Event, JavaOne 2011
Guia de Semana at GlassFish Community Event, JavaOne 2011
 
Parleys.com at GlassFish Community Event, JavaOne 2011
Parleys.com at GlassFish Community Event, JavaOne 2011Parleys.com at GlassFish Community Event, JavaOne 2011
Parleys.com at GlassFish Community Event, JavaOne 2011
 

Similar to Migration tales from java ee 5 to 7

Ramarao_US_NewNumber_Promatrix_Webservice
Ramarao_US_NewNumber_Promatrix_WebserviceRamarao_US_NewNumber_Promatrix_Webservice
Ramarao_US_NewNumber_Promatrix_Webservice
Ramarao Behara
 
Ramarao_US_NewNumber_Promatrix_Webservice
Ramarao_US_NewNumber_Promatrix_WebserviceRamarao_US_NewNumber_Promatrix_Webservice
Ramarao_US_NewNumber_Promatrix_Webservice
Ramarao Behara
 

Similar to Migration tales from java ee 5 to 7 (20)

CollabSphere 2018 - Java in Domino After XPages
CollabSphere 2018 - Java in Domino After XPagesCollabSphere 2018 - Java in Domino After XPages
CollabSphere 2018 - Java in Domino After XPages
 
Java EE 7 Soup to Nuts at JavaOne 2014
Java EE 7 Soup to Nuts at JavaOne 2014Java EE 7 Soup to Nuts at JavaOne 2014
Java EE 7 Soup to Nuts at JavaOne 2014
 
Engage 2019 - De04. Java with Domino After XPages
Engage 2019 - De04. Java with Domino After XPagesEngage 2019 - De04. Java with Domino After XPages
Engage 2019 - De04. Java with Domino After XPages
 
Enterprise java unit-1_chapter-1
Enterprise java unit-1_chapter-1Enterprise java unit-1_chapter-1
Enterprise java unit-1_chapter-1
 
Resume & CV
Resume & CVResume & CV
Resume & CV
 
AdoptJSRJavaEE8CON
AdoptJSRJavaEE8CONAdoptJSRJavaEE8CON
AdoptJSRJavaEE8CON
 
Participate @JavaOne Brazil 2012
Participate @JavaOne Brazil 2012Participate @JavaOne Brazil 2012
Participate @JavaOne Brazil 2012
 
Jozi-JUG JDK 9 Unconference
Jozi-JUG JDK 9 UnconferenceJozi-JUG JDK 9 Unconference
Jozi-JUG JDK 9 Unconference
 
JavaOne Latin America Participate in Shaping Java's Future
JavaOne Latin America Participate in Shaping Java's Future JavaOne Latin America Participate in Shaping Java's Future
JavaOne Latin America Participate in Shaping Java's Future
 
The State of Java under Oracle at JCertif 2011
The State of Java under Oracle at JCertif 2011The State of Java under Oracle at JCertif 2011
The State of Java under Oracle at JCertif 2011
 
Web development in JavaEE7 with JSF, does it still matter?
Web development in JavaEE7 with JSF, does it still matter?Web development in JavaEE7 with JSF, does it still matter?
Web development in JavaEE7 with JSF, does it still matter?
 
The Evolution of Java
The Evolution of JavaThe Evolution of Java
The Evolution of Java
 
Join the Java Evolution GIDS Bangalore & Pune
Join the Java Evolution GIDS Bangalore & PuneJoin the Java Evolution GIDS Bangalore & Pune
Join the Java Evolution GIDS Bangalore & Pune
 
Voxxed Athens 2018 - Java EE is dead Long live jakarta EE!
Voxxed Athens 2018 - Java EE is dead Long live jakarta EE!Voxxed Athens 2018 - Java EE is dead Long live jakarta EE!
Voxxed Athens 2018 - Java EE is dead Long live jakarta EE!
 
Ramarao_US_NewNumber_Promatrix_Webservice
Ramarao_US_NewNumber_Promatrix_WebserviceRamarao_US_NewNumber_Promatrix_Webservice
Ramarao_US_NewNumber_Promatrix_Webservice
 
Ramarao_US_NewNumber_Promatrix_Webservice
Ramarao_US_NewNumber_Promatrix_WebserviceRamarao_US_NewNumber_Promatrix_Webservice
Ramarao_US_NewNumber_Promatrix_Webservice
 
Talk Oracle Code One 2019
Talk Oracle Code One 2019Talk Oracle Code One 2019
Talk Oracle Code One 2019
 
Java: Create The Future Keynote
Java: Create The Future KeynoteJava: Create The Future Keynote
Java: Create The Future Keynote
 
Case Study of Financial Web System Development and Operations with Oracle Web...
Case Study of Financial Web System Development and Operations with Oracle Web...Case Study of Financial Web System Development and Operations with Oracle Web...
Case Study of Financial Web System Development and Operations with Oracle Web...
 
Resume
ResumeResume
Resume
 

More from Roberto Cortez

More from Roberto Cortez (6)

Chasing the RESTful Trinity - Client CLI and Documentation
Chasing the RESTful Trinity - Client CLI and DocumentationChasing the RESTful Trinity - Client CLI and Documentation
Chasing the RESTful Trinity - Client CLI and Documentation
 
Baking a Microservice PI(e)
Baking a Microservice PI(e)Baking a Microservice PI(e)
Baking a Microservice PI(e)
 
GraalVM and MicroProfile - A Polyglot Microservices Solution
GraalVM and MicroProfile - A Polyglot Microservices SolutionGraalVM and MicroProfile - A Polyglot Microservices Solution
GraalVM and MicroProfile - A Polyglot Microservices Solution
 
Deconstructing and Evolving REST Security
Deconstructing and Evolving REST SecurityDeconstructing and Evolving REST Security
Deconstructing and Evolving REST Security
 
Lightweight Enterprise Java With Microprofile
Lightweight Enterprise Java With MicroprofileLightweight Enterprise Java With Microprofile
Lightweight Enterprise Java With Microprofile
 
Cluster your MicroProfile Application using CDI and JCache
Cluster your MicroProfile Application using CDI and JCacheCluster your MicroProfile Application using CDI and JCache
Cluster your MicroProfile Application using CDI and JCache
 

Recently uploaded

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Recently uploaded (20)

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...
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu SubbuApidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
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
 
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
 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source Milvus
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelNavi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 

Migration tales from java ee 5 to 7