In general (as I understand it) working with JEE is esentially building CRUD applications on a large and possibly distributed scale; can this become sort of repetitive (and a bit boring sometimes) work? I'm trying to decide if JEE is something I would want to be working with and would appreciate if any experienced developer would answer.
Not all applications are CRUD applications. In fact, most software that I've worked on was much more than just CRUD operations.
For example, a system I've been working on for a large part of the past year is a payment system. On one side it works with PIN terminals and cash registers, and on the other side with computers of banks and credit card companies. There's a lot of interesting stuff going on in this system; it has to be secure ofcourse and it must be highly available and reliable. I've learned a lot about how the world of electronic payments works in this project.
Another project I've worked on a few years ago is a new traveler information system for the railways. The Dutch railways are replacing all the information signs on the stations with electronic screens, and a new computer system had to be built to gather all the information to display on those screens from many different sources (the train planning, the train traffic control center, etc.). Also a very interesting project to work on.
Those are just two examples of what I've been working on.
I can't speak specifically about CRUD and J2EE, but...
I work on a team that writes interfaces. Application 'A' needs to send data to applications 'B', 'C', and 'D'. A sends out xml, but B wants HL7, C wants a different version of HL7, and C wants xml-like messages, but not 'true XML'.
B only wants THIS and THAT, but C wants everything, and D only wants it if THAT field contains THIS piece of information...
I've done it for two years, and each day is a new challenge, letting me learn new things all the time. Some applications have TCP/IP connections, some use MQ-Series, some use FTP...no two are ever the same.
So...All I do all day is write interface code, to pass messages from 'A' to 'B', but it NEVER gets old.
There are only two hard things in computer science: cache invalidation, naming things, and off-by-one errors