I don't know much about JEE.
But I do know how I would like to be introduced to it.
The other answers provide links for documentation. If I were to learn JEE I would go through them few times - definitely. I already tried, but every time I read it I had this though at back of my head "Ok, I know what and how... Yet nowhere do they explain why!"
And if You were my boss, I'd really much appreciate if You could provide some real world examples why and when the technology is needed.
Lets take JMS for example. The documentation provides some vague reasoning: "Messaging systems can help decoupling parts of the system in a cohesive way". Huh, that's basically the same reason about every feature in Java from basic syntax, object orientation and design patterns. So my question is: Why so many ways to do the same?
One of the satisfying answers would be similar to:
It's because messaging queues can bridge different languages together. You can do it with RPC (SOAP or REST) and messaging is just another way. It brings extra features with it, so You are aided with some basic messaging day-to-day routine: what to do when message is lost or the receiver is down. [Here goes the most important part:] Let's say You integrate with some big company's architecture. Most probably their architecture provides some really useful stuff already. Say You wan't to send SMS for sysadmins when something with Your program goes wrong. The company might already provide subsystem for sending SMSes and the best way to do it is by messaging system.
So, as a graduate I must say I've been fed up with a theory. Connect those vague ("reusable", "decoupled", "light", "indirect", "dynamic") words to a real-world use cases. And since You are already working on it, it should come naturally to You.
Oh, and there is also a great JEE tutorial here: NetBeans ecommerce tutorial