Tuesday, February 25, 2003

Web services tutorial

Web services tutorial


The Web services Tutorial on IBM WebSphere SDK for Web services V5.0 (WSDK) was just released.
WSDK Tutorial

The tutorial series focuses on JSR 101, JSR 109, J2EE, Web Services Interoperability Organization (WS-I), UDDI, Web services security (WS-Security) specification and more.

1) Introduction to Web services and the WSDK
Jacob Weintraub; Rick Hightower; Kyle Gabhart; Peter Schmitz; David Fraser
February 2003



This tutorial is the first part of an eight part tutorial series. The tutorial series introduces you to Web services concepts and technology, demonstrates how to practically apply them using the IBM WebSphere SDK for Web services V5.0 (WSDK), and explores the current state of Web services technology.

2) Introduction to Web services and the WSDK



XML Web services fundamentals
Downloading, installing, and running IBM WebSphere SDK for Web Services (WSDK)
SOAP, WSDL, and UDDI Primer
WSDK features and tools

3) Creating a Web service from a Java class



Introduction to JAX-RPC
Exposing a Java class as a Web service
Lab: Creating a Web service from a simple Java class
WSDK and JSR109 Components
Lab: Creating a Web service from Java class with complex types


4) Creating a Web service from a Stateless Session Bean (EJB)



Introduction to JSR109 and EJB
Exposing EJB as Web services
Lab: Creating a Web service from an EJB
Using EJBs as Web service clients
Lab: Creating a Web service EJB client
Describing Web Services: WSDL

5) Describing Web services with WSDL



WSDL Architecture (including messaging and encoding styles)
Mapping between WSDL and Java programming language
Digging in Deeper with WSDL and WSDL4j
Using the WSDK's WSDL2Java tool
Lab: Describing Web services

6) Publishing your Services: UDDI



The UDDI Publish API
Publish Process: Interface definition, implementation, WSDL generation, service publishing
Setting up the WSDK UDDI registry
Publishing services to the registry
Lab: Publishing Web services


7) Discovering Web services: UDDI



Digging in deeper with UDDI and UDDI4j
The UDDI Query API
The discovery process: Lookup, interface generation, and implementation
The WSDK, service discovery, and service invocation
Lab: Discovering Web services

8) Securing Web services



HTTP, HTTPS, and SSL3
Digital encryption and XML digital signatures
WS-Security
Securing a SOAP payload
Working with IBM XML Security Suite
Lab: Secure Web services


I've been checking out my buddies blog.... Erik Hatcher Blog Gee.... Why didn't they ask me to go kyaking? I wouldn't have gone, but hey it is the thought that counts. My last extreme sport was snow boarding. Okay okay.... it was not very extreme.... I never left the bunny slope, and I still hurt.




Thursday, February 20, 2003

George sent me the patent number of the patent that we authored.

6,510,550

Wednesday, February 19, 2003

I am still a Java fan. I think .Net competition is making Java better.

JDK 1.5 is Java's answers to cool C# language features
Java Server Faces is Java's answers to the ASP.Net cool event model
IBM WSAD (and others) is Java's answer to Visual Studio .Net
Apache Axis and IBM WSDK is Java's answer to ASP.Net web services.


Tuesday, February 18, 2003

It's a boy! I just found out today that my wife and I are having a baby boy!
Lucas Richard Hightower is on the way.

Monday, February 17, 2003

I am speaking for the Complete Programmer Network series in Philly on April 11-13th and St. Louis on May
30-June 1st on the following sessions:


1) Title: J2EE development with XDoclet and Ant

Abstract: Covers developing J2EE components with XDoclet. XDoclet can drastically speed J2EE development by generating component support files by embedding meta data in what looks like JavaDoc tags of the component implementation. Demonstrates developing Custom Tags, Entity Beans, Session Beans, and Struts Actions with the assistance of XDoclet combined with Ant.


2) Title: Principles and Practices of Effective Developers

Abstract: Regardless of methodology or technology there are certain universal practices and principles of effective developers. Covers how to use these principles and practices to make effective decisions on methodology, technology selection and dealing with management, other developers and customers.


3) Title: Extending Struts: Bending Struts to fit your needs

Abstract: Okay you think you have mastered Struts, but you wish it could just do this one special thing? This session shows you how to go beyond the Struts basics to extend the framework to fit you needs. Struts was designed to be extensible. Learn how to extend it. Advance Struts topics about extending the framework using Struts plugins, and extending the Action Servlet, Custom Actions, the RequestProcessor, and more. This is an advanced topic that assumes previous knowledge of Struts.

4) Title: Advanced Struts:
Abstract: These are advanced topics that assumes previous knowledge of
Struts.
Advance Struts
* Uploading files with Struts Forms
* Defining your own custom tags using Struts
* Generating Struts config with XDoclet and Ant
* Using BeanUtils, and PropertyUtils
* Using Velocity instead of JSP for views
* Using JSTL instead of Struts tags for views
* Unit testing Struts Actions with Cactus
* Unit testing Struts based Custom Tags with Cactus
I am speaking at TheServerSide.com Sypmposium in June in Boston.

Java Web Services Update: IBM WSDK
Rick HighTower

Covers features, APIs and tools delivered with IBM's new Web Services Development Kit. IBM is really showing leadership wrt to Web Services, and new WSDK is way ahead of the curve in delivering on the vision of Web Services for Java developers. The new version of IBM's WSDK is going to release this year before the show. Specifically the WSDK is including features associated with JSR 109 and JSR 101 and additional work done by IBM wrt WSI. This session will cover those features with examples and follow up material.


J2EE development with XDoclet and Ant
Rick HighTower

Covers developing J2EE components with XDoclet. XDoclet can drastically speed J2EE development by generating component support files by embedding meta data in what looks like JavaDoc tags of the component implementation. Demonstrates developing Custom Tags, Entity Beans, Session Beans, and Struts Actions with the assistance of XDoclet combined with Ant.

They listed me as follows:

Rick Hightower. Author, Java Tools to Extreme Programming, Mastering Tomcat co-aurhor.
Presenting: Java Web Services Update: IBM WSDK and J2EE development with XDoclet and Ant

Opps... I am not the co author of Mastering Tomcat. I did author about 1/5 of the book Mastering Tomcat (2 large chapters). One of the presentations is based on the XDoclet material I created for the book. The other presentation is based on the IBM WSDK tutorials I contributed for.

I've been talking about this mysterious project for a while. I never gave it a name because it was top secret or so I thought. "LPc Tech Team Selected to author IBM developerWorks Web Services Tutorial Series" was on our website for the last month. I did not realize that it was public on our website since 1.17.03. The project that I was burning the midnight oil was the tutorials for the WSDK 5.0. I worked on the tutorial with Kyle Gabhart, David Fraser, Jacob Weintrub, Rawn Shah (editor of IBM developerWorks), Simon Nash (CTO of IBM Technology), Peter ? and quite a few others. It was a blast of a project to work on. And it was fun working with the newest and latest Web services tools from IBM. Download the WSDK 5 now!. They have really simplified Web service development a lot.


BTW WSDK stands for IBM WebSphere SDK for Web Services (WSDK) Version 5.0.

"WSDK 5.0 is designed to address the needs of experienced Java programmers who want to quickly learn how Web services can be created using existing Java components and achieve seamless integration with disparate systems. The WSDK combines the industry-leading expertise of IBM in Web services with the power and functionality of the IBM WebSphere Application Server 5.0 to offer a low-risk, affordable entry to Web services. Future versions will implement new Web services features in support of profiles and scenarios defined by the Web Services Interoperability Organization (WS-I.org)."

"Supporting the latest specifications for Web services including WS-Security, SOAP, WSDL, and UDDI, WSDK 5.0 can help you build and test Web services that can be optionally integrated with other legacy services using IBM WebSphere Studio V5.0, and deployed on industry-leading IBM WebSphere Application Server V5.0."

Thursday, February 06, 2003

I met with Andy Barton and Nicholas Lesiecki for lunch. We ate at Gavi's. Andy and Nick are from eBlox (ebloX) and they have really tuned the eXtreme Programming for doing contract work and outsourcing of projects. Nick has a book coming out on aspectJ. I can't wait to get a copy.

I am trying to get them to do some project together. I hope they can work with us. They are a real asset to any team.

Too Extreme?


What is in a name? Too Extreme



I like everything about eXtreme Programming except the name. Why?

Here is how extreme is defined at dictionary.com:


extreme
adj.


  1. Most remote in any direction; outermost or farthest: the extreme edge of the field.

  2. Being in or attaining the greatest or highest degree; very intense: extreme pleasure; extreme pain.

  3. Extending far beyond the norm: an extreme conservative. See Synonyms at excessive.

  4. Of the greatest severity; drastic: took extreme measures to conserve fuel.

  5. Sports.
    Very dangerous or difficult: extreme rafting.
    Participating or tending to participate in a very dangerous or difficult sport: an extreme skier.

  6. Archaic. Final; last.





Went Kent Beck coined the term eXtreme Programming I think he meant the second definition as in very intense. However when most people think of extreme (thanks in a large part to Mountain Dew commercials) they think of third (beyond the norm) and the fifth (very dangerous or difficult).



The name eXtreme Programming is probably one of the reasons it is so well known (the name is powerful),
yet at times the biggest problem with adoption is sometimes the very name that made the movement popular.
eXtreme Programming is about quality not reckless danger and unwarranted risk. eXtreme Programming
is about an intense customer-centric, safe, and risk averse development.



I see shops that are in real pain. Yet management wont give eXtreme Programming a second thought
because in their mind it is associated with reckless, risky, sloppy development.
Nothing could be further from the truth, but how do you convince people of this


Tuesday, February 04, 2003

I did so well on the stuff I was suppose to do that they gave me a lot more stuff to do. Everything they gave me to do was already due (late). Jacob and I have been burning the midnight oil getting this project out the door. I worked all last night till 5 AM on the project, then this 9:30 AM Jacob had more stuff for me to do. I just finished (3:00 PM). I think I'll say hello to the wife and kids. Then work on the pile of paperwork (expense reports) that have been festering. LOL :o)

Sunday, February 02, 2003

Ahhhhhhhhhhhhh..... Two days late, but finally done. Not too shabby.... What is the difference between Friday COB and Sunday PM? Usually none, but there were folks waiting for it on the weekend. This project being part of a larger project. I was close.



When I thought the project needed just one more hour.... it took 9! Three hours of that on an International call. (A bit of long distance pair programming... more like pair debugging). Ahhh.... the joys of development.



Tired? Yes

Happy? Yes

Satisfied? Yes

Burnt out? Nothing a nice dinner with friends would not solve

Friday, January 31, 2003

Definition of a software developer with schedule problems....

Level 1 Schedule starts to slip.... what the hell I'll give up exercise (this is the easiest for me to give up).
Level 2 Schedule starts to slip... I'll give up some sleep... 8 hours a day is a waste of time anyway.
Level 3 Schedule starts to slip... I'll give up taking a full hour lunch... Cheetos and Root Beer is enough.
Level 4 Schedule starts to slip... I'll give up personal grooming... Who has got time for friends anyway.

Everyone knows when you unhealthy, sleep deprived, malnurished that you can develop so much faster. Ugh!

Is it too late to become a fire fighter?

Wednesday, January 29, 2003

David Fraser is one of the smartest developers I have ever worked with.
He can figure stuff out. He tries, tries and tries until he gets it.
He has not met an app server he could not configure. They all bend to his will.

Friday, January 10, 2003

Not so Extreme


What if Extreme Programming was not extreme?


Effective Development Principles and Practices for all Methodologies




What if you could take the key principles and ideas from Extreme Programming and package them so that they could be more applicable to any type of process. As a consultant, I cannot always pick the process that the team has chosen. And, quite often there is a lot of resistance to the idea of Extreme Programming but not the ideas of Extreme Programming (read that again). Often times companies have already picked their process and best practices. Can you impact what is in place without causing massive political disruption? Extreme Programming causes much more resistance then it should. Can you seperate the idea of Extreme Programming from the ideas of Extreme Programming? Can you soften the tone of Extreme Programming so that it is not so "in your face different" than the accepted school of thought?




I think you can. According to dictionary.com a principle is "a basic truth, law, or assumption". Since Extreme Programming is based on principles for effective development, then these basic truths must apply to other methodologies and processes. Let's start by renaming this to Principles and Practices of Effective Developers. Then let's soften it to make it more palatable to people who would otherwise have a natural aversion to Extreme Programming. Since this paper is based on XP principles and for that matter agile programming assume all ideas are really variations of ideas presented by Kent Beck, Scott Ambler, Martin Fowler and the rest.




To begin, let's make the following assumption: The Ultimate goal in any software project is to deliver working software in a timely manner. The software should meet the customer’s needs and expectations (at least their needs).


There are many other ancillary goals to achieve this ultimate goal. In addition to many goals, there are many ways to meet those goals. To meet these goals you need to make some key decisions as follows:





  • "Reckless" coding vs. very disciplined

  • No design vs. Paralysis Analysis
    • When is it Paralysis Analysis?
    • Should all projects be treated equal?
    • Pace Maker Embedded Software vs. Online Catalog


  • Use a Lightweight methodology or heavier weight?
    • Ad Hoc vs. RUP or SCRUM or FDD or XP
    • How do you identify what is heavy weight?

  • Code-centric process vs. Document Centric
  • How much design and documentation is enough?



For example: To what level you will design the project up front. The level of detail you put into the design has a relationship to how much feedback you can get back from your customer, and how catastrophic failure would be. For example, if you are writing embedded software for a pace maker, you cannot expect a trial and error approach. The specification, design and testing will all have to be very rigid. On the other hand, an online catalog is a lot less rigid. Often customers don’t know what they want until they can work with a working version, and you expect several iterations of changes (your process should reflect this).


Notice that the most of the choices above are degrees on a continuim. This is nice since they can be adjusted according the project, management style, corporate culture, etc. How do we adjust these? Are there principles to tell us?



The decisions above are not taken lightly. They are different depending on makeup of your team, corporate culture, and type of project you are working on. It is easy to advoacte a rigid process or methodology, but this will not work. Every methodology has its strengths and weaknesses, and no methodology (unchanged) fits every combination of project, corporate culture and team.


Purists and Evangelist be damned, there is no one size process and methodology that fits every organization, corporate culture and project. However, there are principles, values and practices applicable to all projects and are key to making decisions listed above. At times (as a consultant or even an employee), you do not always have the power to change the companies software process.




Now we agree on the goals. What are the things we value the most to reach those goals. Here are the 5 main values lifted mostly from Kent Beck with one stolen from Scott Ambler:



5 values of an Effective Developer



  • Communication

    • Customer Centric, Stories (Use Cases, Feature Descriptions)
    • Shared Knowledge (Pair Programming), Task Estimation
    • Iteration Planning, Design sessions

  • Simplicity

    • Choose simplest thing that will work
    • Choose the simplest design, technology, algorithm, technique

  • Feedback

    • Small iterations, frequent deliveries
    • Pair programming/constant code review
    • Continuous integration, automated unit tests

  • Courage

    • Courage to refactor, estimate, throw away bad code
    • Automated testing breeds courage to change code

  • Humility

    • Trust, Constructive confrontation, Don’t underestimate peers
    • Value others skills: manager, project manager, customer, marketing
    • Arrogance: “Pointy hair boss”, “Dumb customers”, “Unrealistic Project manager”.
    • Senior vs. Junior; Cowboys okay (white hats only); Respect Individuality and Strengths of team members




Communication
:
It should be no surprise that communication should be valued. Any team larger than one needs effective communication. (Even a team that has one developer is larger than one: the customer makes two.) Let's cover some common forms of communication for an effective developer. Stories (Use Cases, Feature Descriptions, User Stories etc.): Have the customer help with the Stories. User Story become major milestones for completion; they communicate to the team the progress of the project. Customer Centric: Let the customer drive through user stories, iteration planning, feature requirements, etc. Prioritize user stories by doing the ones that provide the most business value first (customer picks). Shared Knowledge (Pair Programming, Knowledge Management): Working together is faster than working alone. Code is not reusable unless others know how to reuse it. Task Estimation: Estimate based on past performance. Be honest and task estimation gets easier as the project progresses. Iteration Planning: Refine Stories and estimate tasks for this iteration: work with the customer to do this. Stories are excellent goals for an iteration. If the story is too big, split into two or more stories. Or if the story can not be split split the story parts into two iterations. Design sessions: Design can be done during implementation if it helps you understand problem domain or during Iteration Planning if it helps plan the iteration. Design helps the team communicate ideas quickly. Design until you can proceed with code. Feedback: Feedback is very important. It is hard to judge where a project is and how much progress you are making without feedback. No feedback is like not having a compass. Small iterations, frequent deliveries: This shows that certain features of the system work, complete with unit tests that pass. Also the sooner the user (or marketing) can provide feedback, the more likely the project will stay on track.




Let it go; Don't be dogmatic

I don't see castrophic differences between Use Case Scenarios as compared to User Stories. Use Case Scenarios are much more detailed and are a bit more organized but the goal is very similar to User Stories. Both are used to break the project into milestones and are used to divide a project up into iterations (one for the Unified Process the other for Extreme Programming). From now on, I will refer to this concept as a User Story. Don't be dogmatic about Extreme Programming, RUP or any methodology. You have a better chance of improving your process gradually then you do by taking a dogmatic stance. For Example saying: "Use Cases suck. It is too complex. Let's just do User Stories" will not do much good in a RUP shop. Nothing can stop progress faster than making such a statement. Prefer gradualism. Most of principles of an Effective Developer can be flown under the radar with full support from management. Focus on gradual improvement not arguing or taking dogmatic stances. I agree that it is not as fun, but it is sure more productive.




7 Principles of an Effective Developer








  1. Software is the primary Goal

    • Enabling secondary effort is secondary goal; Use before Reuse
    • Business value before elegance

  2. Provide Rapid Feedback

    • fast feedback = ability to respond;
    • allow customers to steer process (if no customers then customer representative, I.e., marketing)

  3. Assume Simplicity

    • every problem is simple until proven otherwise
    • != skipping design step; design should focus on current iteration only!
    • counter-intuitive to common thought on software design, reuse
    • Do not abuse technology, frameworks or design patterns


  4. Make Incremental Changes

    • Do a little at a time; biggest bang for the buck:
    • Website: refactor most hit pages first

  5. Embrace Change

    • Customer changes mind; Customers steer

  6. Do Quality Work

    • Developers Prefer Quality work; Customer steers

  7. Travel Light

    • Eliminate every process that does not aid in your primary goal
    • Minimalist






A working system that provides business value is the ultimate goal. The ability to provide more features, extend, and reuse is an important secondary goal: never cloud your primary goal! Don’t add code features until you need them. Don’t apply design patterns until you have to. In fact, the early application of Design Patterns is epedemic in many big design up front shops. This can slow development down to a crawl. (P.S. I believe in the utility of Design Patterns; just not how they get abused.)


Assume simplicity. Do not clutter the architecture with unneeded features. Try the simplest way first. Objects can be replaced. Concentrate on interfaces and collaboration not perfection or purity. The customer does not care if you used the latest buzzword technology or not. Their emphasis is on business value.


Make incremental changes. Avoid sweeping changes in architecture. If changes are needed, focus on providing the most business value. Test the water before diving in.


Complex systems are difficult to specify. Customers don’t know what they really want until they see what they don’t want. Embrace this. Don’t fight it. Let them drive what features are the most important and what gets done first. Projects that are 50% done but are useful to customers are better than projects that are “100% done” but nothing like the customer needs or wants.


Customers hate shoddy work. Developers hate delivering shoddy work. It feels good to deliver a solid system. Nothing breaks morale faster than delivering garbage.


Travel light by eliminating every process and task that does not aid the ultimate goal. Review your process often and improve on it. Evolve it.


12 Practices of an Effective Developer




  1. Planning game: Do iterative development. Finish a story per iteration. If the story is too long, split it up. Try to keep the iterations short. Base task estimation on past experience of similar tasks. Calculate each developers task factor in ideal days. Add a factor for each developers estimation bias. Train developers to get closer and closer to ideal days. Developers should never excluded from planning (otherwise no buy in and no valuable input).

  2. Small Release: The smaller the release; the sooner you get the feedback. Feedback is through customer using what you have completed.

  3. Simple Designs : As simple as the project will allow. Add complexity only when needed through refactoring. Don’t try to guess reusable areas too early. Design until you understand the domain enough to build an iteration. Refine your design each iteration.

  4. Automated Testing : A feature does not exist unless there is a test that proves it works. Try to catch most bugs before they hit QA. Then QA will allow less bugs to filter through to the customer. Every bug found gets a test case that can force it; then it is fixed.

  5. Continuous Integration: Build, deploy and test in the integration environment often. The build does not work until all of the automated testing passes.

  6. Refactoring : When you embrace change, you realize that it is harder to predict what the final set of features will be added or needed (Conversely, what you deliver will be what the customer needs). Thus many architecture decisions can and should be delayed. This delay allows you to write a working system sooner; and allows you to gain additional insight into the problem domain. Since the tests are setup before the code is written, refactoring is facilitated. Refactoring is usually triggered when adding a new feature to the system breaks the systems coherent design, I.e., when the code starts to stink.

  7. Shared Knowledge : It is hard to reuse a piece of code you do not know exists. Sometimes the least effective way to share knowledge is through meetings and documentation. It is often easier to understand how a piece of code works by looking at a unit test case, reading an ad hoc description in WIKI, or pair programming than by looking at API docs. Pair programming is when two developers work on a task together after each task you switch partners. At first glance to many managers, this seems ineffective. However, it saves in duplication of efforts: reinventing the wheel. Less code to invent equates to less code to maintain and a simplified code base. The typical experience with many projects is vast acceleration of efforts and the production of a quality code base. You cannot reuse code if you do not know it exists. You cannot reuse code if you don’t know how to use it. The spread of project knowledge (domain and technology) by pair programming is viral and it is exponetially more effective than meetings. This is the main point folks miss about pair programming. The viral spread of knowledge. The other points about pair programming are secondary in my opinion.

  8. Team Ownership: Team ownership is the teams collective ownership of the project. This allows project flexibility as any developer can be assigned to any piece of the system. This often requires that each developer be versant in many aspect of development, which generally improves morale but puts a heavy burden on the skill sets needed and training. This can be alleviated through shared knowledge: particularly through pair programming. Management should also be willing to train employees. (2 weeks of training per quarter; budgets allowing)

  9. 40-hour week: How effective are you if you work 80 hours in one week? How effective are you if you do this several weeks in a row? What happens with the quality of the project? Occasional sprints are okay. But software development is a marathon race. Go home. Come back refreshed.

  10. On-site customer representative: The customer representative, which can be the customer or marketing or someone else who advocates the customer interests effectively, needs to be active in the project. This is especially the case during the planning game.

  11. Common Vision: You need to cultivate a common vision of the project with your customer. What does the project need to do? What is the vernacular of the domain? Are you using the customer-speak when you design and code the system?

  12. Coding Standard: Variety is the spice of life; except for software development. Agree on a coding standard and enforce it. Be flexible; don’t get into the bracket wars (see humility value). This transcends naming conventions and digs into other metrics, e.g., average lines of code, how to handle exceptions, and the like.



    I am not done yet. But this is a good start an outline of where I want to go.

    Random Thought: If you think pair programming 100% of the time is a waste of resources. How about pair programming 25% or 10%?
    TODO: Discuss XP's design per iteration vs. UP's elaborate design per iteration?

Thursday, January 09, 2003


I find that consultants at times have a hard time mentoring. The goals are a lot different. The mentors goal is to make himself obsolete, i.e., the company he is working for eventually does not need him. The contractors goal is to get more contracts. Contractors have this nasty way of multiplying. This is not to say that contractors are bad. They are not.

Tuesday, December 31, 2002

I just had a great vacation. I was in a ski lodge in Colorado (Powderhorn). I learned how to snow board (sort of).



The first day of vacation, me and the kids went sledding. This is quite a treat if you come from Tucson AZ like we do.




The first day of sledding, we hit a tree. Ouch. Actually the sled spun around, and I hit the tree breaking the kids fall on my rib cage.




The second day of sledding. I decided to sit this day out (mostly). I spent my time carrying my daughter's sled up the hill for her.
Then giving her a starter push. Then running down the hill. Repeat.




My oldest son is big enough to carry his own, and my youngest son is not old enough to sled.




I did go down the hill once more. Some kids setup a jump. My goal was to avoid the jump at all cost.
My glasses fogged up (zero visibility) and my sled ended up going backwards most of the way down the hill.
Needless to say.... I did not avoid the jump. I caught big air, and landed on my rump (really hard).




I wish I had video tapes of the two sledding accidents. They must have been funny to watch.




A few days later, I took snow boarding lessons. I fell on the same injured rump many times.
It was fun and I stuck with it longer than I wanted to stick with it. I used the reasoning that I paid for snow
boarding lessons and I am going to use them no matter what.




Adam Carr and Missy Carr (my sister) went with us. Our kids took skiiing lessons together. They did really well.
Adam is a software security guru at HP. Adam was amazed at how well the kids did after two days of skiing lessons.




I spent a good portion of my time playing cards, drinking hot choclate, and generally having a good time.
I am healing, and I am ready for a new year of Java development. Rested and ready to go... just a little sore.




Friday, December 06, 2002

I've got this strange email message from Rational..... Here it is for your enjoyment....

A Tour Through the RUP Plug-In for XP Webinar- Register now!
************************************************************************
FREE WEBINAR: RUP and XP: A Tour Through the RUP Plug-In for XP

Date: December 11, 2002 and February 19, 2003
Time: 4 PM - 5 PM ET

**GUEST SPEAKER: Robert Martin of Object Mentor

Register at:
http://www.rational.com/events/webinars/details.jsp?EVENTID=2087
eXtreme Programming (XP) is a software development method that allows
small to medium teams, in the right circumstances, to work effectively
with low ceremony, producing high-quality software. This Webinar,
developed and presented by Rational and Object Mentor, a leading XP
consulting company, explores the new RUP Plug-In for XP. We look at the
features of the Plug-In, the benefits it delivers for teams wishing to
employ XP, and how it fits in within the complete RUP platform.

This Webinar will help you to:
* identify the key principles and benefits of XP,
* determine if XP is appropriate for your project(s),
* and understand how the RUP Plug-In architecture allows you to
configure your process for your project.

Yada yada yada
...

We look forward to having you join us.
The Rational Team

I think this is a strong testament to the popularity of XP. In the post boom era, the focus will be more on RESULTS than on "ceremony" for the sake of "ceremony". Is this amazing? I find it so. Maybe this will once and for all end the XP vs. RUP/UP debate. I doubt it. My opinion has always been that your team should study several methodologies and then adopt the one that best fits the organization and corporate culture (not to mention the application and customers). My feelling is that even if you adopt UP, you should adopt some of the XP practices and principles.

(If you want to learn more about this topic, I suggest Scott Amber's book Agile Modeling.)

The biggest problem I see is the dogmatic attitude of many XP and RUP practitioners. Hopefully this seminar will meet somewhere in the middle.


I've got this strange email message from Rational..... Here it is for your enjoyment....

A Tour Through the RUP Plug-In for XP Webinar- Register now!
************************************************************************
FREE WEBINAR: RUP and XP: A Tour Through the RUP Plug-In for XP

Date: December 11, 2002 and February 19, 2003
Time: 4 PM - 5 PM ET

**GUEST SPEAKER: Robert Martin of Object Mentor

Register at:
http://www.rational.com/events/webinars/details.jsp?EVENTID=2087
eXtreme Programming (XP) is a software development method that allows
small to medium teams, in the right circumstances, to work effectively
with low ceremony, producing high-quality software. This Webinar,
developed and presented by Rational and Object Mentor, a leading XP
consulting company, explores the new RUP Plug-In for XP. We look at the
features of the Plug-In, the benefits it delivers for teams wishing to
employ XP, and how it fits in within the complete RUP platform.

This Webinar will help you to:
* identify the key principles and benefits of XP,
* determine if XP is appropriate for your project(s),
* and understand how the RUP Plug-In architecture allows you to
configure your process for your project.

Yada yada yada
...

We look forward to having you join us.
The Rational Team

I think this is a strong testament to the popularity of XP. In the post boom era, the focus will be more on RESULTS than on "ceremony" for the sake of "ceremony". Is this amazing? I find it so. Maybe this will once and for all end the XP vs. RUP/UP debate. I doubt it. My opinion has always been that your team should study several methodologies and then adopt the one that best fits the organization and corporate culture (not to mention the application and customers). My feelling is that even if you adopt UP, you should adopt some of the XP practices and principles.

(If you want to learn more about this topic, I suggest Scott Amber's book Agile Modeling.)

The biggest problem I see is the dogmatic attitude of many XP and RUP practitioners. Hopefully this seminar will meet somewhere in the middle.


Monday, November 25, 2002

I've worked with a few frameworks for doing web services. I really, really like Apache Axis.
I've worked with a few frameworks for doing web services. I really, really like Apache Axis.

Friday, November 22, 2002

> A good review of an interesting book:
> http://slashdot.org/article.pl?sid=02/11/13/1550230


I was reading through some of the slashdot posts. The part I find funny about the whole XP debate is that is often not the case of RUP vs. XP. More likely (in my travels anyway)... it is XP vs. nothing.... Or XP vs. Anarchy. In this case, XP always wins. A bar glass could win against complete anarchy.

I enjoy teamwork. I enjoy bouncing ideas off of colleagues. I enjoy learning from them as well as sharing new ways of thinking with them. I enjoy working a full day programming instead of contemplating navel lint in a big muckyedy muck meetings. Most of all, I enjoy writing high quality code!

XP is not for everyone. It is not for every organization. But it is the way I prefer to work. Given the choice, I rather have RUP than Anarchy. RUP/UP is good. XP requires a real good team so by default it has a lot of success.

XP does not mean there will be no design. XP does not mean there will be no planning. In fact, XP (done right) is very structured and focused.

I was thinking the other day.... I don't like .Net, but I really like C#. Has anyone ported C# to the Java Virtual Machine? I think I would use it. (at least try it)
I pulled an allnighter last night. I was making good progress on this project, and I did not want to stop. I am too old for this. Actually, it was not going to be an allnighter until I ran into some things that did not work the way we planned. It seemed better to make the delivery date than to sleep. Plus, this has been one of those projects where nothing works like it should. I took a good chunk of yesterday just researching the technology and architecture.... you know regrouping... licking my wounds. This gave me the raw data to figure out problems that use to stump me. Now I laugh at those problems.... HAH!

Thursday, November 21, 2002

Hey I got this email note from BrainBench about my XML test score.
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Great Test Score!

Hi Richard,

Congrats on the nice score you got on our XML beta test. Actually, it's a great score considering there have been a lot of attempts so far and you scored in the top 10!

We need to incorporate feedback from this beta test into the test. I thought I'd inquire with you to see if you might be interested. I know you've got the knowledge, the question is....do you have the interest?

Based on your knowledge, feedback from the test and the item results from the beta test, you will recommend changes in the questions, the choices and difficulty level changes. For reviewing and incorporating the feedback, the pay is $400! Based on your work and how quickly this is done, there is a possible bonus also.

Our requirements of you are that you have experience in the field, have access to MS Access (version 7.0 or higher) and could turn the test around in a week.

Please let me know if you are interested. If so, please provide me with a convenient time/number to reach you, so that I can go over the task in greater detail.

Please do try to get back to me as soon as you can, however, as I am extending the same offer to others with scores of a similar rating who excelled on the test.

Again, great score!

Randy Kraemer
Test Development Manager
Brainbench, Inc.

We measure the skills that drive your success.
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

Monday, November 18, 2002

Things are going well. No one answered my posts on the WSDK forum. Kyle Gabhart helpled me figure out how to deploy my web service on the WSDK. It is now deployed. Yeah. Kyle is my hero.

Wednesday, November 13, 2002

I just took three XML tests on BrainBench(BB): XML Concepts, XML Module and XML. It has been a while since I took the test, and my knowledge of the subject has been expanded. I missed master level on XML, but got it on the XML Concepts, and XML module test. The XML module is the replacement for XML, but it is still in beta.

The funny thing is that I got in the 98 percentile on the XML test, but did not get master level. This means that less than 2% of the people taking the test get master level scores. I missed master level by 0.07.

The tests seem to be too focused on XSL, and they hardley cover DTD, entity declarations, mixing DTD with namespaces, etc. I did really well on the XSL part. Where I messed up is on the industry jargon.

The XML Module, which is in beta, does not show up on my BB transcripts. But here are my results that BB emailed me. I did much better on the beta than the real test.
The beta test allows you to add comments for improvements. I added a lot of comments (this increased my average response time to 90 seconds). Warning:Don't take the test unless you really get XSL.

Dear Richard Hightower,

Thank you for taking a Beta Test!

We appreciate your time. Although you will not receive a certificate
since the test
is still under construction, you have played an integral
part of the test development process.
Our assessments are delivered to companies worldwide to
improve selection, development, and skills tracking processes.
If you were a corporate customer, this is the output you
would receive after an employee or a potential employee took
an assessment for your company. You could also view this
information via the web immediately upon its completion.

----------------------------------------------------------------------

Date: 2002-11-13 18:40:42(US EST)
Client: Brainbench, Inc.
Profile Name: Beta XML Module (BETA XMLMOD)
Test taker: Richard Hightower
Pin: PRRS222BRPASGRY
----------------------------------------------------------------------
Module 1: XML Module
Score: 4.13 (Scale of 1 - 5 where 5.0 = Best)
Higher than 96% of all previous test takers.

Demonstrates a clear understanding of many advanced concepts
within this topic. Appears capable of mentoring others on most
projects in this area.

----------------------------------------------------------------------
Module 2: XML Module
Score: 4.61 (Scale of 1 - 5 where 5.0 = Best)
Higher than 99% of all previous test takers.

Demonstrates understanding of most advanced concepts within the
subject area. Appears capable of mentoring others on the most
complex projects.

----------------------------------------------------------------------
Weighted Average Score: 4.37
Total Test Time: 64 minutes, 24 seconds
Avg. time per question: 96 seconds
----------------------------------------------------------------------

On a lighter note I saw the movie ISpy last night. This is the best Eddie Murphy in the last five years. ISpy was really good.

I met with Erik Hatcher at the Lone Star Software Symposium. We talked about what it would take to make a standard mappings for CMR (EJB CMR) with XDoclet. He has done a lot of work with the XDoclet Struts templates, and had some great ideas and insight on how to proceed.

I am teaching a XML, XML and Java (JAXP, DOM, SAX, JDOM and JAXB), and XSL course this week, and my attention is really focused on this course. Every night I am reading the course material for the next day. I am familiar with the topics already, and have used them in the real world. The trick is getting familiar with the slides, and material.

Thursday, November 07, 2002

I just bought the IBM WebSphere Bible. I stayed up last night reading it. I stopped reading when my eyes started to bleed. I did not see the solution to the exact problem I was having, but the book gave me plenty of ideas where to look. This book (so far) seems to be a really excellent resource for IBM WebSphere. My only complaint is that I did not buy this sooner.

I kept waking up in the middle of the night. I had some weird dreams about WebSphere. I don't remember any of them..... I only remember that I kept waking up and I was dreaming about work. I had no problems sleeping this AM. I got up at the crack of 9:30 AM.

Wednesday, November 06, 2002

Fun with XDoclet.
I tried to get a simple CMP bean to work with the new XDoclet
features. I used the new @ejb.persistence. I did not get any error messages, but
the CMP field mapings did not get generated in the resin.ejb file.

Then Ara of XDoclet fame told me: "That's because the resin module doesn't support ejb.persistence tags
yet."

So I set out to learn a few things about XDoclet with some help from Erik Hatcher...
I modified the resin CMP mapping template. It was really easy to change.
I had to modify the file resin_ejb.xdt file. I tested it and it works for simple CMPs.

Then Erik told me to make it backwards compatible with the old way, and I did.
Then I started to wonder about relationship mappings.....

I checked and I could not find any standard xdoclet cmr mappings either
documented or in the examples that ship with XDoclet.

This seems a little harder than just changing the template like Resin CMP
support. Any direction on how to attack this would be great! I am going to
pick Erik's brain this weekend, and read the XDoclet chapters in his Ant
book for prep.

My idea on how to manifest cmr support in the tags.....

Add an extra parameter to @ejb.relation called relation-column-name and target-relation-column-name (for unidirectional support).

This idea got shot down by Aslak Hellesøy [aslak.hellesoy@netcom.no]. He stated the following:

"""
I would study the existing proprietary @tags and try to come up with a
common denominator. Don't forget that a foreign key is _not_ the same as a
foreign key _column_. Some foreign keys consist of multiple foreign key
columns, and the tags would have to account for that. This means that it's
*no* good to add key/foreign key attributes to the @ejb.relation tag (which
might seem intuitive at first). We need a separate tag for foreign keys, so
that it can be repeated once for each foreign key column in the foreign key
that corresponds to the relation. Picture:

+---+ +---+
| X | | Y |
+---+ +---+
|*a |\__/| m |
|*b |/ \| n |
+---+ +---+

This is one relation between table/EJB X and Y. It has one foreign key that
consists of 2 foreign key columns. -So we need 2 tags to describe the
relation.

Have a look at
http://boss.bekk.no/boss/middlegen/samples/airline/ejb/ReservationBean.java.
html, more specifically the getPerson() method to see an example. You'll see
single-column foreign keys (which is the most common scenario). -But we
should support the less common scenario as described above.

Also look at a "picture" of the database:
http://boss.bekk.no/boss/middlegen/ (click the screenshot).

As you see, both JBoss and WebLogic identify the foreign key columns by
declaring the column name. -But! JBoss uses the java bean property - in this
case "flightId" which corresponds to the getFlightId() method - to identify
the primary key column. A primary key column will _always_ have a
corresponding getter/java property in an EJB, so this is a safe assumption.
However, you might have a foreign key column for which there is no
corresponding getter/java property, so in order to identify the foreign key
column, you have to declare the database column name. WebLogic uses a
different approach, which is also safe: Use the rdbms column name for both
pk and fk.

Going for the JBoss "way", using java for pk columns and sql for fk columns
is the way to go IMO. It's possible to deduce the corresponding rdbms pk
column for an EJB pk field by looking at the @ejb.persistence tag, so the
WebLogic descriptors can still be generated correctly. Therefore my approach
is:

@rdbms.relation
foreign-key-column="some_database_column"

primary-key-field="someJavaPropertyWhoseMethodHasAnEjbPersistenceTagThatMaps
ToTheRdbmsColumn"

Now a little challenge: How would you represent the non-common info? JBoss
has a fk-constraint="true|false" proprietary attribute on the current
@jboss.relation tag. Where do you specify that now? It would be best to
specify it on the same @rdbms.relation tag. It bloats the tag a little bit
with "proprietaryness" but it's better than adding a third tag. -And in the
case where you have a foreign key that consists of 2+ columns you'd have to
invent an additional name attribute so you could link the jboss info to the
correct @rdbms.relation tag. Therefore:

@rdbms.relation
foreign-key-column="some_database_column"

primary-key-field="someJavaPropertyWhoseMethodHasAnEjbPersistenceTagThatMaps
ToTheRdbmsColumn"
jboss-fk-konstraint="true"

I.e. any non standard attributes are still on the same tag, but with a
prefix indicating that it's not standard. (By the way this is the same
approach we're probably going to use for proprietary EJB-QL extensions on
the @ejb.finder tag. There will be weblogic-ql and jboss-ql attributes.)

I also suggest you read my "Synergy" post on my (old) blog (in case you
aren't confused enough by now ;-)
http://www.freeroller.net/page/rinkrank
"""

Then I asked....
> Is anyone working on this? I think this should be added to this release in
> beta.
>

and he replied:
"""
Nobody is working on this, and it would be great if you wanted to look at
it. It shouldn't be any more comlicated than what you already did for
@ejb.relation in Resin. -The hard part is coming up with the "right" tags,
and I have a good tummy-feeling that my proposal a few lines up is the way
to go.

"""


BTW I just got permission to include the XDoclet stuff I wrote
for Mastering

Tomcat for the Xdoclet documentation. This is a tutorial on XDoclet mainly
geared toward Servlets, Custom Tags and Struts. Ara A. said he was
interested in including this as part of the docs. or at least link to it
from the docs. I need to change the examples to use dots instead of colons
and test it with the version of Xdoclet in beta, other than that....

I've been digging into IBM WSDK. It is fun stuff. I am wondering what the default user name and password is for the version of WebSphere that ships with the WSDK is.... I just bought the IBM WebSphere Bible. I'll let you know what I think of it.

I recently updated the Resin templates for XDoclet to work with the new @ejb.persistence tag for EJB CMP mappings to RDBMS. I submitted the change to the XDoclet list. Erik Hatcher walked me through how to make the changes. It was quite simple. I made the template backwards compatible to the older style of Resin CMP mapping to ease the migration. I have not had time to update the XDoclet EJB tutorial that I wrote to reflect the new sytle. Too little time in the day....

I am reading three new Struts books. Struts has been evolving quite a bit. I am really interested in learning about the Struts Validator. (Send me a good link if you have one...)

Wednesday, October 30, 2002

Thanks Rikard Oberg for setting the world straight on the nasty benchmark at the TheServerSide.com.

Review of "The Petstore Revisited: J2EE vs .NET Application Server Performance Benchmark"

Who in there right mind would use BMP? This benchmark is nuts. Wow! I can't believe this. Ouch.

Having actually developed and deployed high performance J2EE applications to production, I am glad Rikard spent the time poking holes in this benchmark. I hate to see J2EE get a black eye when it makes no sense.

Real comparison





Tuesday, October 29, 2002

Somebody asked me some questions about EJB, stubs, skeletons and their relationship to EJBHome and EJBObject

My answers are marked with **

Question:
Is it correct to say:
"The instance of the EJBHome object on the client side is created by the
EJB tool and is the stub.

Answer
** It would be more correct to say that the client talks to the EJBHome object through the stub generated by RMIC (or vendor equiv). The stub is an artifact of RMI not EJB per se. The EJBHome object is created by the vendor with EJBC (or vendor equiv).

Question:
Is it correct to say:
"The instance of the EJBObject on the server side is created by the EJB
tool (AppServer/Containter) and is the skeleton."

My Answer
** The EJBObject is accessed through the skeleton. It is not the skeleton.
The EJBObject is generated by the vendor to include support for persistence (CMP only), security and transaction support. It is a proxy object as is the stub (the stub is a proxy too). The stub is a proxy to provide remoteness. The EJBObject is a proxy to provide transaction, security, etc. support. The stub is the pitcher and the skeleton is the reciever. Together the stub and skeletong marshal requests from the client to server; this includes serializing parameters to the server object and responses to the client.

Random thoughts on Agile and Unified Process (over design)


Random thoughts on Agile and Unified Process

:

One of the issues with software methodologies and processes are that they tend to be extremely heavy weight or “non existent”. Many organizations have a documented process and methodology that no one follows due to the heavy burden of the mandated process. Most organizations seem to follow two extremes: ad hoc process, or heavy weight process. Ad hoc process is sometimes referred to as “no process”. I don't believe any organization can truly have no process.

The issues of having a heavy weight process seems to multiply as many popular processes combined to make the unified process. By combining the thoughts and ideas of many groups and schools of thought, the Unified Process (UP) if followed in detail has in essence created a process that is too heavy weight for most organizations. Most advocates of the Unified Process, advocate a scaled down version of UP. I am not against UP. In fact, I believe there are many projects and corporated cultures that demmand something like UP.

There is value in having a process. There is also harm in adopting a process that has too much baggage. The primary focus should be on providing customer value and not generating artifacts. Some organizations get so bogged down in generating artifacts that they forget the emphasis should be on providing business value through software, i.e., the working code is the most important artifact.

A backlash against process and methodology seems to produce a bumper crop of interest in alternative methodologies and processes as follows: Featured Driven Design (Coad, abbreviation FDD), Extreme Programming (Beck, abbreviation XP), and SCRUM among many others. These methodologies and processes claim to be either light -
weight alternative methodologies or anti processes and anti methodologies.

For example, XP believes that the focus of all organizations should be on providing business value, and that the main artifacts in the process should be working code. XP does not like to use words like process and methodology yet XP is a process that is focused on quality code that provides customer value.

These groups of alternative methodologies organized into a group called the Agile Alliance. Agile projects tend to be very successful for dynamic teams. This is not to say the Unified Process does not work for some organizations. In fact, there is benefit in adopting a process and following it, and UP can be scaled back to fit an organizations culture. Many corporate cultures would be better served by a lighter weight agile methodology.

Often code that does not have a design is criticized heavily, as it should be. But another problem occurs, a less published and cited problem, the over design of code. Code should be as simple as needed to fulfill the customer’s requirements. Complicated designs can lead to as much damage if not more as having no process and poor designs. Many organizations spend too much attention on the newest technologies and applying the latest design patterns. Over design is endemic of a heavy weight process like missapplied UP.

This is not to say that design and design patterns are not useful. On the contrary, all processes mentioned both agile and unified focus on applying design effectively amongst other practices.
It has been a long week.

My week went something like this:

On Monday, I spoke to an IT organization in Manhattan on Web Services. We covered an overview of SOAP, UDDI, WSDL, ebXML and more.

Tuesday through Friday, I taught an Advanced EJB 2.0 course. The course covered EJB CMP, CMR, EJB QL, Session Beans, Entity Beans, Message Driven Beans (MDB), and more. We deployed examples on both IBM WebSphere and BEA WebLogic. This course was the high light of my week. Three students in the course, independently, told me that this was the best technical course that they have ever taken. Everything went very smooth.

While I was in New York, I went with a friend to see a tribute to a composer (his name escapes me). The show was wonderful and I had a really good time. I am not a big fan of musicals and dancing. I much prefer dramas to musicals, but I think my tastes are changing, as I get older. I really enjoyed myself. This is the second musical I have seen in a row that I have enjoyed.

Then on Saturday morning I took a 4AM flight from New York to Chicago to attend the Great Lakes Software Summit. I was a speaker at the Summit. I did a three-hour tutorial on Java Tools for Extreme Programming (XDoclet, Ant, JUnit, JUnitPerf, JMeter, Cactus, HttpUnit, etc.). I also did a three-hour tutorial on EJB 2.0 CMP (CMP, CMR, EJB QL) and XDoclet. I love XDoclet.

This is the second event in the Software Summit from the Complete Programmer Net that I have participated in. It amazes how well groomed and technical the speakers are at this seminar series. The level of technical content, real world experience, and good speakers are top notch. If you are doing enterprise development, and you can attend one conference this year, I highly recommend the Complete Programmers Net Software Summit series. Attendees come up to me at the breaks and say the same thing that I am saying. This seminars are top notch source for new information.

Saturday night at the conference was a lot of fun. Jason Hunter organized a war party of speakers to hit the town in Chicago. Actually, “organized” might be too strong of a word. Hmmm… Jason incited a mass of speakers to go from the Hotel to venture out in the great unknown of downtown Chicago…. unknown to me at least.

Although, I have been to Chicago, I never stray far from my hotel. I am glad he incited such adventureness. We all had a blast. We went to the Navy Pier. The war party of speakers included Bruce Tate (Bitter Java), Sue Speilman (the Struts book author), James Duncan Davidson (the original developer of Ant), Jason Hunter, John Carnell, Maciej Zadwadski (the developer of Ant Hill), Kyle Gabhart (the Java Pro) and many more. More on this later if you are interested.

I attended Sue Spielman’s presentation on Struts 1.1 features. It looks like I have some catching up to do. Struts is really growing and maturing. We started using Struts at eBlox in the early beta days. We were desperate for a good MVC architecture, and Struts fit the bill. It is exciting to see all of the new 1.1 features. I look forward to reading her new book.

I got to spend some quality time with Erik Hatcher the author of Java Development with Ant, one of the best written technical books that I have ever seen. We rode to the airport together. Erik Hatcher and I use to be coworkers at eBlox. In fact, Erik was a key reason we were so successful in using Struts and Ant at eBlox. Erik is awesome.

About the speaker war party descending on Chicago Navy Pier, it is like this. We left a little late. It became the expected case of this… “Where is so and so….” “Well so and so went up to their room to get such and such…” “Hey that sounds like a great idea, I’ll run up to my room and call somebody and this and that really quick” Add a few iterations of this….. (I am guilty of doing this myself.). Then Jason Hunter, our fearless leader, had a great idea to get us out of the door quickly. He came up with a list of car groups, and he went about breaking up the speakers into several car groups. Then somebody somehow picked the destination…. Downtown Chicago. Hey…. It is my kind of town.

Sue, Maciej, John and I were in one car group. And the journey began. I drove and Sue took the helm as the official navigator. Map in hand, she navigated across the 50 mile terrain to Chicago downtown Nava Pier. Sue did a great job of navigation.

At one point however we were at a crossroad. As we approached the oncoming fork, we had to make a last second decision. Veer left and or veer right, the car group was equally divided on which way to go as we cruised 50 miles per hour heading straight for the cement divide. A semi tractor trailer coming up on my left cruising at 70 miles an hour tipped the scale in the favor of heading right. We missed the center divide and we were on our way to Chicago. As it turns out the tractor trailer was right about us going right.

Once we got to Chicago proper, Sue navigated us to the Navy Pier with few detours. It seems the map we were using was a little dated, and streets that once went through now led to a dead end. Cruising through congested traffic use to be such an issue for me, but after going to New York and Boston a few times, I can cruise through traffic with ease.

We ate at a Sushi bar, I had a Steak (beef it is what’s for dinner). This happened to be the best steak that I have ever eaten. It was wonderful. The name of the restaurant was Sushi Yukuu, and it was their grand opening week. If you are ever in Chicago, I highly recommend eating at this restaurant it is fabulous and not too pricey. It is near the Navy pier.

This week I am working on proposals, outlines, and Web Services material. Hopefully, if this next contract comes through I will get a chance to do some mentoring. I really enjoy training, but I am ready to do some mentoring and consulting again.

Wednesday, October 23, 2002

I also spoke with Andrew Barton, the co founder of eBlox, last week. I want us (him and I) to co author a white paper on building an Extreme Programming team. We had a lot of success with XP, and I want to tell the world about it.

Also, it seems Andy has created a XP bidding process. He says the new bidding/planning process really helps ensure that they do not take on "loser projects". I am encouraging him to write a white paper about this.
It is a real shame. I have not blogged in a few weeks. It is amazing how fast time goes by. I am in NY now (I live in Tucson AZ). I spoke to a group of IT professionals on Monday about Web Services. Kyle Gabhart and I (mostly Kyle) created a presentation on Web Services Survival Guide.

Three things I hear a lot in NY:
1) outsourcing to India
2) IBM WebSphere
3) dot Net

It seems if you are doing J2EE on Wall Street than you are using IBM Wepshere, which make sense given they already have a lot of the IBM big iron.

I am teaching a course this week (Tuesday through Friday) on Advanced EJB with BEA WebLogic. The course is vendor neutral except for the exercises that are WebLogic centric (at least the build scripts are). This is the third time that I have taught this course this year.

Saturday AM, I fly out ot Chicago to speak at the Great Lakes Software Symposium on Java Tools for Extreme Programming and EJB 2.0 CMP/CMR/EJB QL with XDoclet.

I took some more BrainBench tests last week. I got the highest EJB 2.0 score in the United States (3000+ people took the test in the United States). I got the highest J2EE score in the world (700+ people took the test worldwide). They have a slew of new tests for Web Services that I am considering taking.

Tuesday, October 08, 2002

Brain Wilson had a question on how to configure remote clients to talk to EJB beans in Resin.

You sent me some offline email as well with this questions and others.

I'll try to answer all the questions in this forum so they will be available
for others who search the mailing list.

1) First I would not hardcode the JNDI properties in your source code.
Instead put them in a JNDI properties file called jndi.properties. As long
as this file is on you classpath the JNDI system will find jndi.properties
as a class resource and use it as the default properties for the initial
context and provider URL. Then all you need to do is create an
InitialContext with no arguments. This is the more portable J2EE way to get
your initial context.

Here is an example properties file for accessing weblogic (resin example
will follow)
Sample Listing....

java.naming.factory.initial=weblogic.jndi.WLInitialContextFactory
java.naming.provider.url=t3://localhost:7001

2) Now the question becomes how do you configure the above for Resin. I think
the answer is here
http://www.caucho.com/resin-ee/ejb-ref/ejb-jndi.xtp. Although the link does
not specify client access per se or the jndi.properties file.

Try changing the JNDI properties file as follows for hessian...

java.naming.factory.initial=com.caucho.hessian.HessianContextFactory
java.naming.provider.url=http:///hessian

Try changing the JNDI properties file as follows for burlap...

java.naming.factory.initial=com.caucho.burlap.BurlapContextFactory
java.naming.provider.url=http:///burlap

I have not tried this with Resin, but I have done similar things when
working with WebLogic and Sun's RI. I've only done local beans for web apps
with Resin EE in production.

3) You are not done yet. You also have to expose hessian protocol from your
web application that houses your enterprise beans. I found information how
to do this here...
http://www.caucho.com/resin-ee/ejb-ref/ejb-server.xtp

Add the following mapping to your web application's deployment descriptor
for burlap.







Strangely.... The documentation only explains Burlap instead of Hessian.
Hessian is the preferred way to access the bean remotely (faster, but does
not sneak through firewalls as well as Burlap).

Based on the logical nature of most of the Resin package naming, I make the
following guess on configuring Hessian. (I'll try this when I add this
information to the tutorial I am writing).







4) Lastly it seems you are doing this mainly to test your enterprise beans.
I suggest using Cactus to test local beans. I think there is too much
configuration and runtime overhead to use remote beans just to test beans
that will naturally run locally within the confines of a web application.

Thursday, September 26, 2002


Pere Torrodellas had a question about Identity keys, WebLogic and EJB CMP CMR as follows:

"I'm trying to develop a CMP bean on a DB table that has a column defined as "auto increment", i.e. I don't set any value for this attribute in ejbCreate() and the DB manager sets it when the row is inserted.

In order to get the value assigned to the column in the same client method that created it, I invoke a finder that retrieves the just created Bean by looking for another column value.

To my dismay, the contents of the "auto increment" attribute is still null, which suggests that either the container has not yet performed the insert in the DB, or it performs a first search in its storage instead of accessing the persistent media.

How can I force the container to immediately store the bean in the DB and refresh its data to get the automatically generated value? I suppose I could do it with a BMP (right?), but I'd rather use a CMP if possible."

Here is my response


I read your question, and the first thing that popped in my mind was which app server are you using....

The app server you are you using can really impact how to handle auto increment ids. I hope they fix this part of the spec. up before EJB 2.2. Some EJB containers handle auto Ids transparently (e.g. Resin EE). Some EJB containers do no handle them at all. And, Some App servers require special mojo in the configuration files...

I saw that you stated you are using WebLogic 6.1.

WebLogic 6.1 uses the special mojo configuration file approach. (Hey can I identify that as a pattern... the special mojo pattern.... probably not)

In your cmp mapping file (weblogic-cmp-rdbms-jar.xml)

You will need to add one of these
<automatic-key-generation>
<generator-type>NAMED_SEQUENCE_TABLE</generator-type>
<generator-name>CUSTOMER_SEQUENCE_TABLE</generator-name>
<key-cache-size>10</key-cache-size>
</automatic-key-generation>


There are several generator types depending on what database you are using. For example there is one specific to Oracle, and one Specific to MS SQL Server. I don't know why they don't have one specific to the IDENTIY keyword which is standard SQL 92 but they don't.

MS SQL Server uses the IDENTIY keyword, Oracle 8 does not, but most other RDBMS servers do (DB2, MYSQL, Access, HyperSonic SQL, Cloudscape and so on) so you can try this approach with non MS SQL Server.

If possible use the NAMED_SEQUENCE_TABLE for the generator.... it is the most portable. This is a hard sell if you are in an Oracle shop and you using Sequences in that case use the Oracle Sequence option. Refer to the weblogic docs for more information on <generator-type>s.


Here is what the DDL would look like for the NAMED_SEQUENCE_TABLE approach for a simple Customer EJB.


-- customer
-- customer has many orders
create table TBL_CUSTOMER (
CUSTOMER_ID INT primary key,
FIRST_NAME varchar (25),
LAST_NAME varchar (25),
EMAIL varchar (100),
PHONE varchar (25)
);

create table CUSTOMER_SEQUENCE_TABLE(SEQUENCE integer);
insert into CUSTOMER_SEQUENCE_TABLE values (100);

Here is the rest of the mappings for this example to put it all into context....


<weblogic-rdbms-bean>
<ejb-name>Customer</ejb-name>

<data-source-name>mysource</data-source-name>

<table-name>TBL_CUSTOMER</table-name>

<!-- Study these mappings from the TBL_CUSTOMER columns to the Customer EJB cmp fields -->

<field-map>
<cmp-field>iD</cmp-field>
<dbms-column>CUSTOMER_ID</dbms-column>
</field-map>
<field-map>
<cmp-field>firstName</cmp-field>
<dbms-column>FIRST_NAME</dbms-column>
</field-map>
<field-map>
<cmp-field>lastName</cmp-field>
<dbms-column>LAST_NAME</dbms-column>
</field-map>
<field-map>
<cmp-field>phone</cmp-field>
<dbms-column>PHONE</dbms-column>
</field-map>
<field-map>
<cmp-field>email</cmp-field>
<dbms-column>EMAIL</dbms-column>
</field-map>

<!-- TODO study this finder method -->


<weblogic-query>
<query-method>
<method-name>findByEmail</method-name>
<method-params>
<method-param>java.lang.String</method-param>
</method-params>
</query-method>
<weblogic-ql>SELECT DISTINCT OBJECT(c) FROM Customer c where c.email = ?1</weblogic-ql>
</weblogic-query>


<!-- TODO study this auto key generator -->




<automatic-key-generation>
<generator-type>NAMED_SEQUENCE_TABLE</generator-type>
<generator-name>CUSTOMER_SEQUENCE_TABLE</generator-name>
<key-cache-size>10</key-cache-size>
</automatic-key-generation>


<!-- Note that the autokey generator relies on a table with one record.
The build.sql has DDL that builds such tables for each entity bean -->


</weblogic-rdbms-bean>




Wednesday, September 25, 2002

My review of WebLogic Bible finally got published on Slashdot....

"The BEA WebLogic Server Bible is an enjoyable read. If you have been using WebLogic off and on since before EJB (Enterprise JavaBeans) existed, you will still learn a bunch of new tricks. This is an excellent reference that can be read from cover to cover. The book focuses on small examples with an emphasis of deploying and configuring the examples in the WebLogic environment."

There are plenty of examples of setting up your WebLogic configuration, with explanations of what the different parameters are and when to use them for Servlets, JSP, EJB, JMS, and more; just what you need when you are having those configuration problems and a great reference to have around when you get stuck. If you like going from concept to implementation, then this is the book for you.

Unlike some other WebLogic centric books, the Bible's coverage of EJB CMP/CMR was good. Also, the coverage of performance monitoring was really well done. And, the ideas for optimization and the thought process behind it was also really well done. These are just a few examples of a really well written technical manual--the missing WebLogic Manual.

A couple areas of concern (some just nits):

1) A few times the examples were WebLogic centric when they could have been written them in a cross platform manner (wrt J2EE ). (Note: A prerequisite of this book is a working knowledge of J2EE.)

2) The EJB examples hard coded the JNDI parameters instead of using the jndi.properties file in the classpath, which is the preferred approach for cross platform J2EE development.

Granted, at times you have to write things WebLogic centric to utilize WebLogic-specific extensions to J2EE, but the book also did this at times when it was not really necessary to do so. A J2EE veteran will catch the difference, and a J2EE novice will not. Bottom line: you should have a working knowledge of J2EE before reading this book and there will not be any problem.

Another problem with the book is that it covers WebLogic 6.1, while WebLogic 7.0 is already out. However, the material is still applicable to WebLogic 7.0. The book was released this year as was WebLogic 7.0. This in an unavoidable problem with books focused on such a target market. By the time they update the 1000-page book to WebLogic 7.0, WebLogic 8.0 will probably be out. (Notice I say target not niche... WebLogic's market share is huge.)

Also, in the next edition they should cover the Weblogic specific Ant tags in addition to the console and other means of deploying applications. Ant is the de facto method for building, deploying and testing J2EE applications, and a book like this should reflect this reality.

If you are new to WebLogic, I suggest that you get this book. If you have been working with WebLogic since before the EJB .8 spec., I suggest that you get this book. This book is not a J2EE tutorial, but it covers the basics and focuses on WebLogic specific areas of concern.

Consider this book recommended.



Read: J2EE Container Shootout Summary

Interesting read... mentions XDoclet and the power of EJB CMP.

http://www.rollerweblogger.org/page/roller?catname=Java (Tuesday September 24, 2002 )


Two interesting quotes:

What applications justify the use of EJB?
"""
BEA: Robert says that even for small apps, you should design with future migration to EJB in mind. Use EJB if your developers have the skillset for EJB.
ORACLE: agrees that skillset is important. If you are a database house, you might not want to go the EJB route. EJB is not yet truly mature and does not do all the things that a great database can do.
JBOSS: Mark says: don't access the database directly from Servlets and JSP, use EJB intead. EJB caches data for web applications very well and can be ten times faster than ordinary database access. But Mark doesn't stop there. He goes on to say that some companies allow licensing costs to drive their architecture choices and stay away from EJB because of cost, with JBoss you don't have to worry about licensing costs. From the way the BEA panelist rolls his eyes, I get the feeling that he has come up against Mark before.
"""

Another interesting quote.... about JDO

"""
Do you support JDO and what are your plans for JDO?

JBOSS: we have been supporting JDO for quite a while via Castor and other means. But, JDO has not taken the persistence crown. EJB/CMP is much more powerful than JDO. JBoss is working to decouple the CMP engine from JBoss so that it can be used independently of EJB.
ORACLE: The Oracle app server does not supprt JDO, but our new TopLink product is very close, and may enable Oracle to support JDO in the future.
BEA: does not support JDO and says that JDO is not compelling vs. CMP 2.0.
"""


Also pushes XDoclet.... (another quote)

BEA: Robert says it is very difficult to predict the future, but that he sees that XDoclet-like method and field attribute driven development will be important and that web services will be very important.

Tuesday, September 24, 2002

Someone asked how to setup a connection pool in Resin... I posted the following to Resin group (which worked). Let me try to answer, the most J2EE centric way to accomplish this with Resin. (Please let me know if this is not the most correct way... I know it works,
but...)

Step 1
Add the resource to you web.xml as a child of web-app file after the welcome
file list.

...

jdbc/emp
javax.sql.DataSource
Container

...

Step 2
Add the resource to resin.conf to the as a child of caucho.com




jdbc/emp
javax.sql.DataSource







...

Step 3 copy the JDBC driver to Resin lib

Step 4 Access the data source from you code as follows:

Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource ds = (DataSource) envCtx.lookup("jdbc/emp");
return ds.getConnection();

I have some examples if you would like to look at them.
Let me know and I will email them to you. They come complete with an Ant
build script.

Also, if you get a chance check out this tutorial on Resin EJB and XDoclet
XDoclet EJB Tutorial

I am writing a step by step tutorial for XDoclet and EJB CMP/CMR EJB QL.
Since the tutorial is hosted on a WIKI server, it is collaborative, i.e., you can make changes and additions.

I think it has enough to be useful already, but expect it to grow and evolve into a complete J2EE tutorial with XDoclet.

Please try it out:
http://java-tools.eblox.com/index.php?ResinCMPCMRXDocletTutorial

For now it is based on the examples that I wrote for this tutorial EJB Tutorial.
(The examples have been ported to JBoss and WebLogic with XDoclet already)

-------------------

I wrote two chapters in the upcoming Mastering Tomcat Development from Wiley. I wrote a chapter on Struts and a chapter on Ant/XDoclet. The Struts chapter rewrites a model 1 JSP based application to be a model 2 based Struts application, and it uses XDoclet support. The Ant/XDoclet Chapter has examples of using XDoclet for Custom Tags, Struts, Servlets, EJBs and more.

I am trying to get Wiley to release some of the XDoclet parts online.

Mastering Tomcat Development

http://www.amazon.com/exec/obidos/ASIN/0471237647/rickhightower-20/002-5683012-4771231

If they do, any interest in including them with the XDoclet documentation?

Rick Hightower

Agile Modeling and Scott Amber just came up in conversation....
I wrote a review about Scott's book that was published on Slashdot.

I've been waiting for a book like this. If you are doing software development of any kind, you should read this book. Especially if you are doing Extreme Programming and you errantly believe modeling has no place in XP. Or, your doing the Unified Process and you feel that your models and documents are more important than a working system, or you feel you are bogged down in documentation and required artifacts (more likely). Agile Modeling (AM) is a modeling methodology that enhances your modeling endeavors, whatever your process methodology inclination. Agile modeling will help you effectively incorporate modeling into your organization." Read the rest of Rick's review below.


The title is only partially accurate as the book covers a lot more than modeling. I know from experience that picking titles is tricky (you can't please everyone). You don't need to be a UML expert to get value of this book. Any software developer should be able to appreciate it. Modelers, software developers and Yes, managers will find this material useful. In fact you may want to buy a copy and put it on your manager's desk. This book is original and well thought out. It is also well written and very readable. I wish there were more examples of applying the different artifacts in different phases of the XP life-cycle, but there has to be room for the next edition. The depth is appropriate.

Many UP developers (and those working with other prescriptive processes) get bogged down in the tonnage of documents and artifacts that are required. They wonder if they are ever going to have time to actually write the code.

XP offers a methodology for building high quality software fast. However, many XP developers, and I've spoken to them about this very subject on many occasions, find that XP does include time to do models. This books shows how to integrate XP and modeling.

This book sets the record straight about design and Extreme Programming. Actually, Kent Beck set the record straight with the first book on XP when he said 'In the time it would take you to code one design, you can compare and contrast three designs with pictures.' Kent Beck's views were corrupted over the years for various reasons that Agile Modeling explains, as it clarifies once and for all the relationship between XP and modeling.

The book emphasizes that you should model to understand the problems and only apply the right artifacts, i.e., that not all modeling must lead to writing code.

Despite the title, he AM book transcends just being a book on modeling; the book covers many aspects of developing software. Agile Modeling endeavors to be real. By real I mean it talks about real issues and how things are handled in the real world, not the perfect world covered by most books. For example, the chapter on documentation is an excellent coverage of the subject, but not idealized beyond all usefulness.

Like the original XP book, the AM book lists values, core principles and practices. It also adds supplementary principles like 'Content Is More Important Than Representation.' A key lesson from the book is that models are important if they help you understand and solve problems. And, models do not have to be perfect -- in fact they can be thrown away when you are done with them. After all is said and done, 'Software is your Primary Goal.'

The author, Scott Ambler is the author of numerous books (and by numerous I mean a lot) for the Unified Process, and UML. He also contributed to the Mastering EJB Book, and the Java Elements of Style book. All his work in UP seems strange since AM seems to have closer ties to XP than UP, but that is probably my own warped misconceptions of the world. Bottom line, Scott has mastered the craft of writing and I really enjoyed his writing style. The first few chapters seemed a little slow, probably because their content has been covered before in other books. The chapters on AM and XP, though, were informative and useful (as was the chapter on agile documentation mentioned earlier).

If you are doing software development of any kind, you should read this book. It is an informative and enjoyable read.
The original article is here on slashdot http://books.slashdot.org/article.pl?sid=02/05/07/157241&mode=thread&tid=156

Monday, September 23, 2002

Thoughts on JDO....

My opinion, EJB 2.0 CMP CMR is more mature than JDO. Most JDO implementation "don't fully implement the JDO spec. yet".... that said I think JDO will leap ahead of EJB in the near future...

I also think a future version of EJB 2.2 will merge EJB CMP CMR and JDO just like EJB 2.1 merged EJB and web services. There is really no point in having two frameworks that essentially accomplish the same thing. therefore a later version of EJB will embrace JDO and build on top of it instead of replace it... Just my humble opinion. (note this is just a guess... i have not heard of any such activity)
Another interesting blog article....

http://radio.weblogs.com/0107789/stories/2002/07/09/whyILikeWebwork.html

I first heard about WebWork when I was at XPUniverse. I've been using Struts for a while. I find Struts useful, but sometimes ugly and klugy. I am willing to give WebWork a look.
I read an interesting article about EJB at
http://radio.weblogs.com/0107789/stories/2002/05/24/isEjbAlwaysNecessary.html

At some point, I would like to address this article on a point by point basis.

Thursday, September 19, 2002

Create an XDoclet Resin Tutorial....
http://java-tools.eblox.com/index.php?ResinCMPCMRXDocletTutorial

Thursday, September 12, 2002

I am slowly losing steam. The TCC certificaiton stuff took a lot out of me, and I've been running on empty all week. I'll be glad when I can rest.

Wednesday, September 11, 2002

Well, I completed the Together Control Center Certification. I am now Together Soft certified in UML, J2EE, Java and C++.
Well, as soon as I send in the paper work, I am certified to teach the following TogetherSoft courses:


  • How to Build Better Object Models
  • UML Quickstart
  • Java Quickstart
  • C++ Quickstart
  • J2EE Quickstart


The two day training was very informative and I learned a lot about modeling in color and the DNC. I read the book by Peter Coad on Modeling Java in Color a long time ago, but the concepts really came to life when I heard Ron, the chief mentor, explain it.

I've been a fan of the TogetherSoft toolset for a long time.

Sunday, September 08, 2002

In a few minutes I am leaving for the airport. (1/2 hour). It is off to North Carolina then Minnesota. I am going to Together Control Center certification training in North Carolina then I am teaching advanced Swing in Minnesota. I've been preparing for the TCC Cert a lot. Wish me well.

Saturday, September 07, 2002

I've been working on getting TogetherSoft certified a good chunk of this week.
(8/22/02) I just completed two chapters in the upcoming Mastering Tomcat Development from Wiley. I wrote a chapter on Struts and a chapter on Ant/XDoclet. The Struts chapter rewrites a model 1 JSP based application to be a model 2 based Struts application. The Ant/XDoclet Chapter has examples of using XDoclet for Custom Tags, Struts, Servlets, EJBs and more.



Chris Lechner and Andy Barton from eBlox setup and hosted the WIKI for the Java Tools For Extreme Programming Book.
We now have a book errata. We also have a book review section.

"eBlox has been kind enough to sponsor a Wiki for this book. You can share Errata, Suggestions, and Reviews at http://java-tools.eblox.com/index.php"



Alen Williamson wrote:
"It was good to catch up with people, and I have to say, to thoroughly enjoying grabbing some quality face-to-face time with a number of authors including, Joey Gibson and Rick Hightower to name but a few. Their insight into the current trends and technologies was most enlightening, and hopefully I will be able to snaffle a guest editorial from them at some point."

I'd love to do a guest editorial. Ask me anytime.

I am speaking at the following places:


I am speaking on the following topics (both are 3 hour tutorials):

Sunday, September 01, 2002

My wife got tired of qwest dsl. It was going down every twenty minutes. She hooked up cox communication (cable model) and bought a wireless hub. Now I have a wireless connection at home..... All I need now is an espresso machine and a barista, and I am fully wired. errr... I mean unwired.... Wireless to the hub + cox cable modem is faster than qwest dsl. My wife likes techy things... I just wish she would quit beating me at the XBox games.


Thursday, August 29, 2002

I've been looking at Sun's Java WebServices stuff. Its really neat and its free.
The samples were interesting. The build files seemed to be very broken.
Like maybe somebody changed directory structures completely.
The tutorial examples seem a little messed up as well.
So far, I've been focusing on JAXM.

I wrote two simple clients and a simple server.
One client is a Servlet, and the other client is a Java application.
The examples run under Resin fine.
I've been using the Resin plugin for eclipse, which is very sweet.

Tuesday, August 20, 2002

Updated swing course. Swing is fun. I wonder what SWT is like.
Peter sent me the updates to the example code for CMP/CMR and EJB QL.
The tutorial now works with JBoss.