Need to learn J2EE and friends

N

nroberts

I've recently been assigned as engineer to adopt a product written in
Java that uses J2EE, EJB, and Struts. After the upcoming maintenance
release a decision to re-engineer the product has already been made.

I have tons of experience in C++ and in object oriented programming,
and in that regard Java is no challenge to me...only a slightly
different syntax and a different API. The architecture of
"enterprise" applications though is entirely new and as I get into
it...quite a bit foreign. There seems to be a rigor and logic to the
Java way that I need to learn. I did a modicum of work on dynamic web
programming with PHP way back in the day but even that appears quite
different from what I'm tasked to work on now. My primary experience
is in desktop application programming.

I went to the local instance of Barnse and Noble to find something to
help but found little of value. The most tempting offering was a
generic book on SOA but I was not sure how much help it would be and
it was rather expensive. I'm not even sure SOA would be topical since
we're not developing a "service" at all. I'm working through a
tutorial on using Eclipse with glassfish but at some point I need to
break out of the IDE and understand the generic project structure. We
appear to be using Ant for the build process... Frankly, I wasn't
sure would help me as I looked at the bookshelf. Most books just
seemed to be thick for the sake of being thick, going over things like
XML syntax basics, while I need concise, upper level treatment and
overview.

I need to get up to speed on the concepts regarding these multi-tier
web programs and how they fit in with Beans and Struts...perhaps new
technologies that would be of help as well. I need to learn the
differences between application programming and "enterprise"
programming and I also need to learn what I need to learn...because I
don't even seem to really know that either.

Where would be a good place to start?
 
L

Lew

nroberts said:
I've recently been assigned as engineer to adopt a product written in
Java that uses J2EE, EJB, and Struts. After the upcoming maintenance
release a decision to re-engineer the product has already been made.

I have tons of experience in C++ and in object oriented programming,
and in that regard Java is no challenge to me...only a slightly
different syntax and a different API. The architecture of
"enterprise" applications though is entirely new and as I get into
it...quite a bit foreign. There seems to be a rigor and logic to the
Java way that I need to learn. I did a modicum of work on dynamic web
programming with PHP way back in the day but even that appears quite
different from what I'm tasked to work on now. My primary experience
is in desktop application programming.

I went to the local instance of Barnse and Noble to find something to
help but found little of value. The most tempting offering was a
generic book on SOA but I was not sure how much help it would be and
it was rather expensive. I'm not even sure SOA would be topical since
we're not developing a "service" at all. I'm working through a
tutorial on using Eclipse with glassfish but at some point I need to
break out of the IDE and understand the generic project structure. We
appear to be using Ant for the build process... Frankly, I wasn't
sure would help me as I looked at the bookshelf. Most books just
seemed to be thick for the sake of being thick, going over things like
XML syntax basics, while I need concise, upper level treatment and
overview.

I need to get up to speed on the concepts regarding these multi-tier
web programs and how they fit in with Beans and Struts...perhaps new
technologies that would be of help as well. I need to learn the
differences between application programming and "enterprise"
programming and I also need to learn what I need to learn...because I
don't even seem to really know that either.

Where would be a good place to start?

When you say "J2EE" and "EJB", do you have any information on what versionsof those you're working with? Also, what specific implementation are you using (WebLogic, JBoss, Glassfish, ...)? Or are you tasked with picking animplementation?

It makes a difference what version you're using. The abbreviation "J2EE" is somewhat out of date, referring to an older version of the spec that is harder to work with than the current version, "Java EE" (Java Enterprise Edition).

http://java.sun.com/javaee/6/docs/tutorial/doc/
(Java EE 5 is the older version. "J2EE" refers to still older versions.)

"EJB", or "Enterprise Java Beans", has changed a lot with the spec upgrade.There used to be two kinds, "session beans" and "entity beans". Entity beans have fallen into disfavor, being replaced by the Java Persistence API (JPA). Entity beans were never easy to work with, but JPA is a joy. (Use EclipseLink or OpenJPA rather than Hibernate if you can help it. If you must use Hibernate, use it as a JPA library, not in its native mode.)

Nowadays you have session beans - stateful and stateless - and management beans. They are much easier to use in Java EE than they were in J2EE. The old way involved a lot of fooferol around "home interface" and "remote interface" that were hard to use. Nowadays we use annotations (syntactic elements identified by a leading "@" character such as "@Session") and things just sort of automagically happen in the application server.

The application server is the Java EE engine, such as the aforementioned WebLogic, JBoss or Glassfish; also Geronimo, WebSphere, what-have-you.

You really, really want to avoid the J2EE way of doing things and stick with Java EE. Any application server that doesn't support at least Java EE 5 is going to be hard to work with and likely no longer supported (except maybe at significant expense) by the vendor. The development and maintenance costs of these older versions will outweigh conversion costs to a newer platform.

Download and install Glassfish - it's lightweight enough to run on any decent developer workstation (dual-core or better, 2 GB RAM or better, couple of hundred megs of disk or better).
http://glassfish.java.net/

Use it to work through at least some of the aforementioned tutorial.
http://java.sun.com/javaee/6/docs/tutorial/doc/
 
A

Arne Vajhøj

I've recently been assigned as engineer to adopt a product written in
Java that uses J2EE, EJB, and Struts. After the upcoming maintenance
release a decision to re-engineer the product has already been made.

I have tons of experience in C++ and in object oriented programming,
and in that regard Java is no challenge to me...only a slightly
different syntax and a different API. The architecture of
"enterprise" applications though is entirely new and as I get into
it...quite a bit foreign. There seems to be a rigor and logic to the
Java way that I need to learn. I did a modicum of work on dynamic web
programming with PHP way back in the day but even that appears quite
different from what I'm tasked to work on now. My primary experience
is in desktop application programming.

I went to the local instance of Barnse and Noble to find something to
help but found little of value. The most tempting offering was a
generic book on SOA but I was not sure how much help it would be and
it was rather expensive. I'm not even sure SOA would be topical since
we're not developing a "service" at all. I'm working through a
tutorial on using Eclipse with glassfish but at some point I need to
break out of the IDE and understand the generic project structure. We
appear to be using Ant for the build process... Frankly, I wasn't
sure would help me as I looked at the bookshelf. Most books just
seemed to be thick for the sake of being thick, going over things like
XML syntax basics, while I need concise, upper level treatment and
overview.

I need to get up to speed on the concepts regarding these multi-tier
web programs and how they fit in with Beans and Struts...perhaps new
technologies that would be of help as well. I need to learn the
differences between application programming and "enterprise"
programming and I also need to learn what I need to learn...because I
don't even seem to really know that either.

Where would be a good place to start?

The Java EE tutorial:

http://java.sun.com/javaee/6/docs/tutorial/doc/
http://java.sun.com/javaee/5/docs/tutorial/doc/
http://java.sun.com/j2ee/1.4/docs/tutorial/doc/

(study the newest and the version you will be using)

Arne
 
M

markspace

I've heard what you are going to need to do described as "drinking from
the fire hose." I.e., information is going to come at you very fast at
high pressure and there's going to be way more than you can absorb.

So don't worry if nothing makes sense at first. It's going to be quite
a while before you feel that you're even off training wheels.

As for where to start, you can try here:

<http://download.oracle.com/javaee/6/tutorial/doc/bnblr.html>

For more information, we'll need to know specifically which
specifications you are using. Enterprise web programming is a highly
competitive field for vendors, and the specifications tend to evolve
rapidly.

We'll need to know what version of Glassfish you use, what the
production version is if different, what libraries you use (e.g.
"Struts") and what the version of each is. It's a big deal just to nail
down what your environment is, so this should be a productive first
step. Be aware that Java Enterprise Edition can comprise several
various individual specifications, each with their own set of Jar
files/libraries, so just "JEE" doesn't really describe what you are
doing or what the actual target environment is.
 
A

Arved Sandstrom

I've recently been assigned as engineer to adopt a product written in
Java that uses J2EE, EJB, and Struts. After the upcoming maintenance
release a decision to re-engineer the product has already been made.

I have tons of experience in C++ and in object oriented programming,
and in that regard Java is no challenge to me...only a slightly
different syntax and a different API. The architecture of
"enterprise" applications though is entirely new and as I get into
it...quite a bit foreign. There seems to be a rigor and logic to the
Java way that I need to learn. I did a modicum of work on dynamic web
programming with PHP way back in the day but even that appears quite
different from what I'm tasked to work on now. My primary experience
is in desktop application programming.

I went to the local instance of Barnse and Noble to find something to
help but found little of value. The most tempting offering was a
generic book on SOA but I was not sure how much help it would be and
it was rather expensive. I'm not even sure SOA would be topical since
we're not developing a "service" at all. I'm working through a
tutorial on using Eclipse with glassfish but at some point I need to
break out of the IDE and understand the generic project structure. We
appear to be using Ant for the build process... Frankly, I wasn't
sure would help me as I looked at the bookshelf. Most books just
seemed to be thick for the sake of being thick, going over things like
XML syntax basics, while I need concise, upper level treatment and
overview.

I need to get up to speed on the concepts regarding these multi-tier
web programs and how they fit in with Beans and Struts...perhaps new
technologies that would be of help as well. I need to learn the
differences between application programming and "enterprise"
programming and I also need to learn what I need to learn...because I
don't even seem to really know that either.

Where would be a good place to start?

In addition to what the others said (basically, start working through
the Java EE tutorial), I'll add a few notes:

1. As you begin teasing apart what a J2EE/Java EE application does, do
keep in mind that at their core these API families are 95 percent about
writing web apps. Plain and simple. Whether it's the Struts framework
building upon the Servlet API in the web tier, or session beans in the
services layer that encapsulate your business logic and provide
scalability and lifecycle management, it's all about scalable and
distributed servicing of requests.

2. If you understand the Servlet API in the web tier, and session beans
and message-driven beans in the business layer, those are the real guts
of a J2EE/Java EE app. Almost everything else builds on that. I hope
fervently that you are not afflicted with a J2EE 1.3 or 1.4 application
that makes use of EJB2.x enterprise (session/entity) beans.

3. Name-dropping: Struts, like Java Server Faces (JSF), or Wicket, or
Tapestry, etc, is a web-tier framework that aims to simplify processing
of requests. A fairly common characteristic is support of MVC. I hope
that you are using Struts 2, and not Struts 1. Technologies like JSP and
Facelets are _view_ technologies, and are used by these web frameworks.

4. Talking to databases: JPA (Java Persistence API) is an orthogonal API
that is equally applicable to (desktop) Java, namely Java SE, or
"enterprise" Java, namely Java EE. It's an API for object relational
mapping, and combines lessons learned from ORMs like JDO, Hibernate,
Toplink etc. If the app that you are confronted with does not use it,
then I expect that either it's old and uses EJB 2.x entity beans, or it
uses native ORM APIs for something like Hibernate or TopLink, or it uses
straight JDBC.

5. More name-dropping: you may hear Spring mentioned. This is an entire
family of frameworks. The core of Spring is Java object configuration
and management through an "inversion of control" (IoC) container, using
dependency lookup and injection. There are many other Spring
frameworks/libraries for web MVC, transactions, security, web services etc.

There was a decent rationale for using Spring IoC back in the day, like
in the earlier versions (1.x and 2.0) By the time Spring 2.5 came out
what was available in Java EE (Java EE 5) was already caught up, and now
with Java EE 6, Spring is basically pointless. *My* opinion. If anyone
suggests Spring to you as "the way to go" ask them why they think so,
and if it has to do with making up for some ancient version of J2EE then
recommend an upgrade to Java EE 6 instead.

6. "Enterprise" in "J2EE" or "Java EE" or "Enterprise Java" means "web".
Official documentation may not put it quite so baldly, but it's
basically all about handling HTTP/HTTPS requests from web browsers, or
SOAP requests coming in over HTTP/HTTPS for a Java web service.

The other main non-negligible input mechanism is messaging (JMS, or Java
Message Service).

There are obviously some other aspects to "enterprise", like being able
to talk to other systems like an EIS (you'll see the Connector
architecture discussed in the tutorial). But fundamentally it's about
being a web app.

7. SOA: nobody in your shop may be tossing the term around right now,
but it doesn't hurt to be aware of basic SOA early on. Make yourself a
SOA resource and it will help you. At this stage of the game you will
actually improve the application overall by ensuring that it is modular,
and that the building blocks in the business tier are actually small-s
services in the SOA sense, without actually ever worrying about web
service endpoints or ESB or workflow.

Questions: I assume you meant "adapt", not "adopt", in keeping with the
"re-engineer" somewhat later on. Any information you can supply about
the nature of the requested adaptations, and leeway that you have for
suggesting improvements, and timelines, would help us.

For my part I've been doing J2EE/Java EE, with the odd vacation, since
the year 2000. It's my bread and butter. Others here have similar
experience levels. So I suspect we can help.

AHS
 
N

nroberts

Questions: I assume you meant "adapt", not "adopt", in keeping with the
"re-engineer" somewhat later on. Any information you can supply about
the nature of the requested adaptations, and leeway that you have for
suggesting improvements, and timelines, would help us.

First off, thanks to everyone that responded. I'm trying to digest.
Lots of things I need to figure out to answer some of the questions
posed. I might not get back today, but thanks for replying and I'll
come back with responses soon.

As to this one, I meant "adopt" as in the 'provide this orphan a home'
sense. The previous engineer retired a couple months before I arrived
and its been without one since.

I believe I'll have about 6 weeks before having to do anything to the
product. I think I can do those changes without having to know the
architecture and theories too much since they're all business level
changes...I think. I have 6 weeks because that's what it'll take for
the analyst or whoever to get requirements to me. After that they
want to re-engineer the entire architecture so I'd hope I have some
input there. From what I can tell it could use some of my design
input but I also need to understand "enterprise" architectures in
general.

I do have "Core J2EE Patterns, 2nd Ed." and "Core JavaServer Faces"
from the business's bookshelf. I started with the former but since it
was Labor Day weekend I spent most my time drunk or swimming in the
ocean...so I haven't gotten far :p
 
N

nroberts

nroberts wrote:

When you say "J2EE" and "EJB", do you have any information on what versions of those you're working with?  Also, what specific implementation are you using (WebLogic, JBoss, Glassfish, ...)?  Or are you tasked with picking an implementation?

Looks like the current version is JBoss 4.0 - looks to me like this is
J2EE 1.4? I may have the ability to change this in the future but
this is what the current view is.

Nowadays you have session beans - stateful and stateless - and managementbeans.  They are much easier to use in Java EE than they were in J2EE.  The old way involved a lot of fooferol around "home interface" and "remote interface" that were hard to use.  Nowadays we use annotations (syntactic elements identified by a leading "@" character such as "@Session") and things just sort of automagically happen in the application server.

I've seen the '@' element in a tutorial I'm working through:
http://programming.manessinger.com/tutorials/an-eclipse-glassfish-java-ee-6-tutorial/

In the code I see a lot of classes called 'XxxHome' that inherit from
javax.ejb.EJBHome. No use of '@'. So I gather I need to learn the
hard way too...
Download and install Glassfish - it's lightweight enough to run on any decent developer workstation (dual-core or better, 2 GB RAM or better, coupleof hundred megs of disk or better).http://glassfish.java.net/

Got it installed both from the EE Jdk and with Eclipse as some sort of
package eclipse thing (eclipse wasn't able to restart the glassfish
domain when it wasn't the integrated version).
 
L

Lew

nroberts said:
Looks like the current version is JBoss 4.0 - looks to me like this is

Current version of the project, you mean? JBoss itself has more current versions, up to v. 7.
J2EE 1.4? I may have the ability to change this in the future but
this is what the current view is.

I suggest you change this in the present. It will save your bosses time and money, as has already been mentioned upthread. Bear in mind that Java EE5 is already over five years old, and 1.4 came out in 2003. The differences are significant. You will really, really want to push back on this.

This is the standard notation for annotations, part of Java for quite a while now.
In the code I see a lot of classes called 'XxxHome' that inherit from
javax.ejb.EJBHome. No use of '@'. So I gather I need to learn the
hard way too...

You need to upgrade the project. It will cost your bosses too much to staywith the old way.
Got it installed both from the EE Jdk and with Eclipse as some sort of
package eclipse thing (eclipse wasn't able to restart the glassfish
domain when it wasn't the integrated version).

But since you mention JBoss, you'd probably best stick with that.

Eclipse will plug into any major app server, bundled or not. It's in the documentation somewhere.
 
A

Arne Vajhøj

1. As you begin teasing apart what a J2EE/Java EE application does, do
keep in mind that at their core these API families are 95 percent about
writing web apps. Plain and simple. Whether it's the Struts framework
building upon the Servlet API in the web tier, or session beans in the
services layer that encapsulate your business logic and provide
scalability and lifecycle management, it's all about scalable and
distributed servicing of requests.
6. "Enterprise" in "J2EE" or "Java EE" or "Enterprise Java" means "web".
Official documentation may not put it quite so baldly, but it's
basically all about handling HTTP/HTTPS requests from web browsers, or
SOAP requests coming in over HTTP/HTTPS for a Java web service.

The other main non-negligible input mechanism is messaging (JMS, or Java
Message Service).

There are obviously some other aspects to "enterprise", like being able
to talk to other systems like an EIS (you'll see the Connector
architecture discussed in the tutorial). But fundamentally it's about
being a web app.

I would say that about 50% of Java EE is by nature web oriented, but
80% of Java EE apps have a web interface (I am not counting desktop
apps using SOAP/HTTP as being web here - if we do it would be >95%).

It is perfectly valid to write desktop apps in Java (using Java/IIOP or
SOAP/HTTP) or .NET (using SOAP/HTTP). It is just relative rare out in
the real world (even though I actually know a lot of examples, but
I do not expect that to be representative of the world).

Arne
 
A

Arne Vajhøj

First off, thanks to everyone that responded. I'm trying to digest.
Lots of things I need to figure out to answer some of the questions
posed. I might not get back today, but thanks for replying and I'll
come back with responses soon.

As to this one, I meant "adopt" as in the 'provide this orphan a home'
sense. The previous engineer retired a couple months before I arrived
and its been without one since.

I believe I'll have about 6 weeks before having to do anything to the
product. I think I can do those changes without having to know the
architecture and theories too much since they're all business level
changes...I think. I have 6 weeks because that's what it'll take for
the analyst or whoever to get requirements to me.

Java EE (once known as J2EE) is huge. You will not be able to
learn all of it in 6 weeks - that will require 6 years.

But if the code, the build process and the deployment process
is well documented, then you should be able to make business logic
related changes, rebuild and redeploy.

I do have "Core J2EE Patterns, 2nd Ed." and "Core JavaServer Faces"
from the business's bookshelf.

Core J2EE Patterns is old.

Core JSF is good if you will be using JSF - otherwise it is
irrelevant (and there are a ton of Java web framework out
there).

Arne
 
A

Arne Vajhøj

Looks like the current version is JBoss 4.0 - looks to me like this is
J2EE 1.4? I may have the ability to change this in the future but
this is what the current view is.

JBoss 4.0 is J2EE 1.4.

So you will need to live with that until you can upgrade.

Got it installed both from the EE Jdk and with Eclipse as some sort of
package eclipse thing (eclipse wasn't able to restart the glassfish
domain when it wasn't the integrated version).

Given that JBoss is free, then it makes more sense to use that when you
know that is the final destination.

Arne
 
A

Arved Sandstrom

I would say that about 50% of Java EE is by nature web oriented, but
apps using SOAP/HTTP as being web here - if we do it would be >95%).

I won't disagree with your breakdown: what I really meant was what you
just said, that the large majority of Java EE apps have a web (browser)
interface. And furthermore that this web (browser) interface is the
_primary_ and often only interface.

[ SNIP ]

AHS
 
M

markspace

Core J2EE Patterns is old.

Core JSF is good if you will be using JSF - otherwise it is
irrelevant (and there are a ton of Java web framework out
there).


Actually, Core JavaServer Faces is in its third edition. I've got the
3rd ed. sitting right here next to me on the desk. So unless by CJSF he
means a later edition, then that too is quite old.

But as you say irrelevant unless the app is using JSF.
 
A

Arne Vajhøj

Actually, Core JavaServer Faces is in its third edition. I've got the
3rd ed. sitting right here next to me on the desk. So unless by CJSF he
means a later edition, then that too is quite old.

If it is JSF 2.x then 3rd edition is necessary.

But for 1.x I would say that both 1st and 2nd edition would
be useful. JSF 1.2 introduced a lot of useful stuff, but
the concepts did not change much.
But as you say irrelevant unless the app is using JSF.

If it is old stuff then a Struts book may be needed.

Arne
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,768
Messages
2,569,575
Members
45,053
Latest member
billing-software

Latest Threads

Top