from tomcat to java ee, making the transition with tomee

69
David Blevins | Apache Tomcat to JavaEE with Apache TomEE

Upload: jaxconf

Post on 09-May-2015

2.377 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: From Tomcat to Java EE, making the transition with TomEE

David Blevins | Apache

Tomcat to JavaEE with Apache TomEE

Page 2: From Tomcat to Java EE, making the transition with TomEE

@[email protected]

@ApachTomEE / #TomEEhttp://tomee.apache.org

Page 3: From Tomcat to Java EE, making the transition with TomEE

What is Apache TomEE?

Page 4: From Tomcat to Java EE, making the transition with TomEE

Tomcat + JavaEE = TomEE• Java EE 6 Web Profile certified• Tomcat through and through• All Apache components

– OpenJPA– OpenWebBeans– OpenEJB– MyFaces

• Core Values– Be small– Be certified– Be Tomcat

Page 5: From Tomcat to Java EE, making the transition with TomEE

Flavors of TomEE• Apache TomEE Web Profile (Java EE 6 Certified)

– CDI– EJB– JPA– JSF– Bean Validation

• Apache TomEE Plus– JAX-RS– JAX-WS– JMS

• Embedded Apache TomEE

Page 6: From Tomcat to Java EE, making the transition with TomEE

Basic Stats

• Size– 27mb

• Memory usage– very little required– passes TCK with default 64mb

• Agility:– Eclipse deploy ~700ms– embedded test 2-4 seconds

Page 7: From Tomcat to Java EE, making the transition with TomEE

Certification• Certified on Amazon EC2

– t1.micro linux images,– 100 spot instances– 613mb memory– 64mb used, 549mb free– t1.micros have slow disks, memory is critical

• Current certified OSs– Amazon Linux AMI 2011.09, EBS boot, EC2 t1.micro– Amazon Linux AMI 2011.09, EBS boot, EC2 m1.small– Amazon Linux AMI 2011.09, EBS boot, EC2 c1.medium

• Runs daily• Got a Cloud?

– Donate time!

Page 8: From Tomcat to Java EE, making the transition with TomEE

“If you are concerned about performance and footprint, but can accept that you'll have to solve problems yourself, go TomEE. (TomEE seems to be _much_ faster than <XXX>)”

-- Jonathan Fisher, User List, July 3rd 2012

“From an architect that switched from <XXX> to Tomee. I can tell you Tomee kicks <XXX>'s ass in every way. Memory, speed, reliability, validation, you name it.”

-- Zeeman, User List, July 3rd 2012

“There is also one point to note. TomEE is insanely fast! ”

-- Łukasz Budnik, CXF JAX-RS on Apache TomEE @ DZone, May 23rd 2012

Page 9: From Tomcat to Java EE, making the transition with TomEE

Gaps in Tomcat

Page 10: From Tomcat to Java EE, making the transition with TomEE

Gaps in Tomcat• No Transaction support• No Connection Pooling support

– Pooling should be transactional• No Integrated Security• No support for Global JNDI

– java:module– java:app– java:global

• No support for @DataSourceDefinition• No support for new <env-entry> types:

– java.lang.Class– Enums

Page 11: From Tomcat to Java EE, making the transition with TomEE

Gaps in Tomcat• No @Resource

– UserTransaction– BeanManager– Validator– ValidatorFactory– Topic/Queue– ConnectionFactory

• No @PersistenceUnit• No @PersistenceContext• No @Inject• No @EJB• No @WebServiceRef

Page 12: From Tomcat to Java EE, making the transition with TomEE

Migration Issues

Page 13: From Tomcat to Java EE, making the transition with TomEE

Building your own app server

• Including API jars in the webapp– JPA API– JSF API– etc.

• Including implementations in webapp– Mojarra (works in trunk)– Bitronix/Atomikos

• Non-compliant DataSource and JPA– too many years of Do It Yourself– providers not enforcing rules

Page 14: From Tomcat to Java EE, making the transition with TomEE

(Mis)Information

• Gaps in Knowledge– “that other stuff”

• Misinformation– don’t use X, it’s heavy

• Leads to...– let’s build own own heavy X!

• Bites you– non-portable apps– lacks tens of thousands of tests– lacks shared experience

Page 15: From Tomcat to Java EE, making the transition with TomEE

Closing Gaps in Knowledge

Page 16: From Tomcat to Java EE, making the transition with TomEE

You can’t use this

• unless you understand– JTA Transactions– Container-managed EntityManagers– Container-managed DataSources– How to get references to these, properly!

Page 17: From Tomcat to Java EE, making the transition with TomEE

Not Just EJBs

• Components with Transaction support– Servlets– JSP– JSF Managed Beans– CDI– EJB– JAX-RS REST Services– JAX-WS Web Services

Page 18: From Tomcat to Java EE, making the transition with TomEE

What are Transactions?

Page 19: From Tomcat to Java EE, making the transition with TomEE

“Undo”

Page 20: From Tomcat to Java EE, making the transition with TomEE
Page 21: From Tomcat to Java EE, making the transition with TomEE
Page 22: From Tomcat to Java EE, making the transition with TomEE
Page 23: From Tomcat to Java EE, making the transition with TomEE

Controlling Transactions

• javax.transaction.UserTransaction– Manual approach– Any JavaEE component

• @javax.ejb.TransactionAttribute– Class or method annotation– EJB only

• @javax.transaction.Transactional – Class or method annotation– Any JavaEE component*– Coming in JavaEE 7

Page 24: From Tomcat to Java EE, making the transition with TomEE

Transaction Hooks

• SessionSynchronization– @AfterBegin– @BeforeCompletion– @AfterCompletion

• Events– @Observes(during=IN_PROGRESS)– @Observes(during=BEFORE_COMPLETION)– @Observes(during=AFTER_COMPLETION)

• @Observes(during=AFTER_SUCCESS)• @Observes(during=AFTER_FAILURE)

Page 25: From Tomcat to Java EE, making the transition with TomEE
Page 26: From Tomcat to Java EE, making the transition with TomEE

“Undo” aware Resources

• DataSource• EntityManager• Sending JMS Messages• Receiving JMS Messages• Timers & @Schedule• (more via Java EE connectors)

[Some restrictions apply. Offer void where prohibited. Container-provided resources required. Must be 18 years or older to apply]

Page 27: From Tomcat to Java EE, making the transition with TomEE

More specifically

Page 28: From Tomcat to Java EE, making the transition with TomEE

How does it work?

Page 29: From Tomcat to Java EE, making the transition with TomEE

TOP SECRET(authorized personnel only)

Page 30: From Tomcat to Java EE, making the transition with TomEE

This is not a pipe

Page 31: From Tomcat to Java EE, making the transition with TomEE

Not the real thing

Page 32: From Tomcat to Java EE, making the transition with TomEE

The EntityManager You Get

Page 33: From Tomcat to Java EE, making the transition with TomEE
Page 34: From Tomcat to Java EE, making the transition with TomEE

continued...

Page 35: From Tomcat to Java EE, making the transition with TomEE

The DataSource You Get

Page 36: From Tomcat to Java EE, making the transition with TomEE
Page 37: From Tomcat to Java EE, making the transition with TomEE

better than a pipe

Page 38: From Tomcat to Java EE, making the transition with TomEE

...better than the real thing

• thread-safe• undo-aware• leak-free

Page 39: From Tomcat to Java EE, making the transition with TomEE

All boils down to...

Page 40: From Tomcat to Java EE, making the transition with TomEE

“hashmap”

“listeners”

Page 41: From Tomcat to Java EE, making the transition with TomEE

...but

Page 42: From Tomcat to Java EE, making the transition with TomEE

Won’t work with any of this

• DataSource– DriverManager.getConnection(...)– new FooDataSource()– autocommit = true

• EntityManager– PersistenceProvider.createEntityManag...– EntityManagerFactory.createEntityManager– EntityTransaction

Page 43: From Tomcat to Java EE, making the transition with TomEE

Avoid Do It Yourself

Page 44: From Tomcat to Java EE, making the transition with TomEE

Rule

• If you didn’t get it from the Container– it isn’t usable with UserTransaction– connections may leak– memory may leak

• Even then there are some BIG notes– EntityManagerFactory

• not usable with UserTransaction– <persistence-unit=RESOURCE_LOCAL>

• not usable with UserTransaction

Page 45: From Tomcat to Java EE, making the transition with TomEE
Page 46: From Tomcat to Java EE, making the transition with TomEE

Common Migration Issues& Mistakes

Page 47: From Tomcat to Java EE, making the transition with TomEE

Wrong

Page 48: From Tomcat to Java EE, making the transition with TomEE

Wrong

Page 49: From Tomcat to Java EE, making the transition with TomEE

Wrong

Page 50: From Tomcat to Java EE, making the transition with TomEE

Still Wrong

Page 51: From Tomcat to Java EE, making the transition with TomEE
Page 52: From Tomcat to Java EE, making the transition with TomEE

The worst of them all

Page 53: From Tomcat to Java EE, making the transition with TomEE

this...

Page 54: From Tomcat to Java EE, making the transition with TomEE

or this...

Page 55: From Tomcat to Java EE, making the transition with TomEE

with THIS!

Page 56: From Tomcat to Java EE, making the transition with TomEE

darn defaults!

Page 57: From Tomcat to Java EE, making the transition with TomEE

There we go

Page 58: From Tomcat to Java EE, making the transition with TomEE

JPA Rules

• RESOURCE_LOCAL– Persistence.createEntityManagerFactory– @PersistenceUnit EntityManagerFactory– <non-jta-data-source>

• JTA– @PersistenceContext EntityManager– <jta-data-source>– <non-jta-data-source>

• No other combinations are valid

Page 59: From Tomcat to Java EE, making the transition with TomEE

Good

• Valid RESOURCE_LOCAL usage

Page 60: From Tomcat to Java EE, making the transition with TomEE

Better

• Valid RESOURCE_LOCAL usage

Page 61: From Tomcat to Java EE, making the transition with TomEE

Best

• Valid JTA usage

Page 62: From Tomcat to Java EE, making the transition with TomEE

DataSource

• Declare– in tomee.xml– in META-INF/resources.xml– via @DataSourceDefinition

• Retrieve– @Resource– <resource-ref>

• Undo-aware and pooled

Page 63: From Tomcat to Java EE, making the transition with TomEE

Declaring• <tomee-home>/conf/tomee.xml

• WEB-INF/resources.xml

Page 64: From Tomcat to Java EE, making the transition with TomEE

Recap

Page 65: From Tomcat to Java EE, making the transition with TomEE

Recap• Use if you need “undo”• Transactions not heavy

– Thread safe management– Help prevent Leaks– Enhance programming

• More than a TransactionManager– TransactionManagers do nothing alone– Resources must cooperate

• Don’t Do It Yourself– Use container-provided resources– no need to re-invent the wheel

Page 66: From Tomcat to Java EE, making the transition with TomEE

Recap

• Components with Transaction support– Servlets– JSP– JSF Managed Beans– CDI– EJB– JAX-RS REST Services– JAX-WS Web Services

Page 67: From Tomcat to Java EE, making the transition with TomEE

Recap

• Transactional Resources– DataSource– EntityManager– Sending JMS Messages– Receiving JMS Messages– Timers & @Schedule– (more via Java EE connectors)

Page 68: From Tomcat to Java EE, making the transition with TomEE

Questions?

Page 69: From Tomcat to Java EE, making the transition with TomEE

Thank You!

@dblevinshttp://tomee.apache.org