Paul Balm

Ranch Hand
+ Follow
since Dec 13, 2008
Cows and Likes
Total received
In last 30 days
Total given
Total received
Received in last 30 days
Total given
Given in last 30 days
Forums and Threads
Scavenger Hunt
expand Ranch Hand Scavenger Hunt
expand Greenhorn Scavenger Hunt

Recent posts by Paul Balm

I think that that's an interesting idea -- thank you for posting it -- and I think it's a valuable practice for architects. But I think this may also be an example where real life and the OCMJEA certification diverge a little bit... Especially since you get to design everything from scratch, for every component (app server(s) and DB(s)) you use a cluster and you connect everything with high-availability routers (typically a router with a back-up router attached to it in case of a failure), and you're done. For OCMJEA at the hardware level, there isn't much more to it than that.

I think the risks that you should be concerned about for the certification (this is a certification forum after all) are more of the type: What if this external system takes forever to respond, and what if a hacker gets into my database.
As far as the risks are concerned, I have found myself writing a few risks down, like this can go wrong and that can go wrong. Only to realize, that I was pointing out problems in my architecture, that I should fix rather than to demonstrate that there was a problem. In fact, I found myself writing that if x goes wrong, then I should just change y. So do it, and don't assume it won't be necessary. This is an architecture assignment after all.

What i'm saying is, you should think about the risks before and come up with an architecture that addresses (mitigates) them. When you're done, you write down the risks that have not been completely mitigated yet. When you're done writing down the risks, check them to make sure that you're not pointing out mistakes you made that you should fix.

If you do find your risks are actually mistakes or shortcuts in your architecture, my recommendation would be to fix the architecture and remove the risk.
Good question. I'm afraid that the answer is simple: You don't know how many servers to deploy. Even if you read the book I recommended above, it will tell you to deploy a proof of concept (a small scale version of the real system), and *measure* the performance. Then you calculate the number of servers from there.

Of course that's not feasible for SCEA/OCMJEA. So all you have is gut feeling, but you should try to work out the numbers. For example, maybe your feeling is that a server can handle 50 users before maxing out the CPU. How many page loads and how many HTTP requests per second id thay, considering your performance requirements? Does the number seem to make some sense?

This is a difficult one. If anyone has a better answer, I'd love to hear it!

I'm not sure I understand completely what you're saying, but I have not included the JMS Broker in the component diagram, I've included several queues. I would show the JMS configuration at that level: Queues and Topics.

As to your final remark, if I remember correctly, the external systems should appear in the component diagram. You don't have to detail their internals, because the fact that they're external means you don't know & don't care. But you do need to deal with their interface, so they must appear in your component diagram.

I should get paid by Cade and Sheil for recommending their book so much, but it's well worth the money:

If you just don't have the money, there is also a presentation on the web that is informative, see this post:

Do you have "Cade and Sheil"?

I think it's indispensable in giving you a feeling as to what is expected on the assignment. I would recommend reading all of it to give you a quick refresher of the kind of things you need to take into account, and it also contains some unambiguous hints about do's and don't's for the assignment: "There is currently no reason why you would use Entity Beans for persistence, always use JPA Entities instead." The last part of the book is a complete assignment ready for submission.

This book also has an assignment solution (I have read both books), but I've found this one fairly useless to be honest:

Hi Hugo,

I would say that you need to know conceptually what these things do, and why you would choose them. In the case of application server clusters, it's also good to have a look at the kinds of services that they offer. I recommend not to go crazy: Look at the standard options.

So let me try to explain that a little bit.

Things like load balancers and application clusters are used to address performance issues/requirements. You need to understand that a load balancer is used to distribute traffic across multiple servers in a cluster, so that you can handle more load than a single server could handle. But then you should be aware that if traffic from one user is distributed over multiple servers, for example, the user should have the same shopping cart independently of which web server is handling any particular request. So you need to address the question how each web-server knows about the contents of this users' shopping cart. This is where services of clusters come into play. Take the most standard EJB container, which is Glassfish, and have a read through the Glassfish cluster documentation. Then you will find that Glassfish clusters offer a service called session replication, which could be a solution to the problem of the user's shopping cart.

This is the kind of thing you need to understand.

Specifically about server hardware (machines and network gear), you will get some points for proposing hardware that your solution might run on to spec, but not very many. (See your assignment, it will say how many points you get for each.) So I wouldn't worry too much about this, but I've found this book helpful, although it's no silver bullet:

My colleagues say there are more up-to-date books on this topic, but I think they're probably bragging and jealous. :-)

Good luck!
Reading the question a couple times over, I think that Chennakrishna is planning on organization the components in layers/tiers, but the question is whether within each layer, to create use-case specific components or to group them more by common functionality.

There probably is no right or wrong here, as long as you can justify your decision. It depends on the specifics of your assignment (but you can't discuss that here). I think an important question is, what's the simplest solution? Does it have any important disadvantages? And so on.

Also, you can consider having more use-case specific components in the top tier (presentation), with components becoming more generic as you go down to the integration/persistence tier.
I suppose you are familiar with the Gang of Four design patterns. If not, I recommend the Head First book. Are you also familiar with the J2EE pattern catalogue? I'm not sure if knowledge of those is necessary, but it's very helpful at least, because I think that they "score points", if and when applied appropriately of course.
TOGAF is from The Open Group. As I said, I wouldn't do it if you have SCEA already.

As for "going after some real experience", sure, but I think for many, getting the next job is one of the reasons for getting certified. So to say that now, after getting SCEA, you should "get that architect's job" is like saying: Don't do any more certifications. Which is something that I do not agree with in general. I think there are other useful things to learn, depending on your specific goals, but I wouldn't continue doing similar architecture certification. With SCEA, you've reached the end of this line as Sun saw it. Why start on a similar, parallel track when you can do something else as well?
Indeed the right question to ask is what your objectives are, where do you want to go?

I would not do TOGAF if you already have SCEA. Don't certify yourself to death on archtecture, after all, it's only certification and experience as an architect trumps it (almost) always. Also I don't think it's very efficient: Many things that TOGAF should teach you, you should already know if you have SCEA. Finally, to me, it looks a bit suspicious to get multiple architecture certifications. Prospective employers might think: Which one of your architecture certifications is no good, so that you needed to do the other one? Exactly how unsure about your architecting skills are you, that you need multiple certifications?

Assuming you are or want to become an architect and considering you already have SCEA, I would look for training/certification on methodology or quality assurance. E.g. CMMI or Scrum certification.

The ThoughtWorks Technology Radar says to hold off on Scrum certification (see Jan 2011 edition). I haven't figured out why that is yet (you need to scrounge earlier editions to find the motivation), but it might be that Scrum certification specifically is not a good idea right now. I'm just giving you my general ideas. Hope it helps.
You're welcome! And thank you for telling.
Hi Sunderam,

I agree with your thinking. A few comments though: I don't think the typical price of around €2000 is very much for 5 days of training. I took the course "Developing Architectures for Java EE Applications" (my company sponsored it) and I thought the quality was quite reasonable. I thought the course was helpful guidance when doing the assignment.

That said, if I would have had to pay the course myself, I'd have done the same as you and skip it. It's a pity, but it's not worth €2000 of my own money. From the point of view of learning from the certification, I learned most from the books I read to prepare, and from the point of view of using the certification for your career, I think that being able to show that you passed the assignment should be enough.

I think to decide between the different options, more details are needed:
  • how much data is there? (to know how much memory multiple copies would require)
  • how long does a calculation take approximately?
  • how often do new updates come in?

  • If you have an idea of these figures I think it would be clear which of the solutions is best.
    I think I understand. You have a collection of data (prices), a calculation operating on this data that takes some time (calculating weights and average price), and multiple concurrent workers that are updating the data.

    It seems to me that what you need to do is to copy the data before you start a calculation and perform the calculation on the copy. You can start a new calculation every time an update arrives, but note that every calculation holds a copy of the data, so if many updates arrive, your application can run out of memory. You have to limit the number of calculations running at the same time. I don't know how long your calculation takes, but a first step would be to run only calculation at the same time. When it finishes, you start a new one if updates have arrived.

    The other option is to hold all updates of the data until a calculation is done, but this seems like a bad idea. This option implies that you have to queue incoming update information and apply the queued updates when a calculation has finished. While you're applying the updates, new updates can come in... When do you stop?

    I would copy the data.
    No, haven't used that, but I would recommend a plug-in for Eclipse called the Memory Analysis Tool. It has a functionality called the "memory leak suspects finder" which is smarter than me, I mean, very good.

    By the way, this statement does not make sense: Getting OutOfMemoryErrors in a third-party library.

    You run out of memory. At the point just before that, you are exactly at the limit -- all memory available to the JVM is in use and none can be freed up by garbage collection (slight simplification, please ignore). You can reach this limit in any place in your code, irrespective of where memory is being leaked. The OutOfMemoryError happens next time an object is created, for which some memory is needed. The place where you run out of memory does not tell you anything about the location of the problem. Really! Don't get thrown off by this. You need to understand which memory is not released, where you are expecting that it is. This is rarely an easy question to answer, unfortunately.

    10 years ago