About

I’m a software developer who has focused on Borland Delphi for many years and am now working in Java technologies. Originally from Manchester in the UK, I now live in Cleveland, Ohio in the US.

I’ve spent a lot of time programming after starting with a Commodore 64 when I was 10 years old. I moved on to an Amstrad CPC 6128 where I marveled at the wonders of its floppy disk drive started writing in Z80 Assembly Language using Maxam.

Soon my brother bought an Amiga and since he was in the Royal Navy, he was away a lot which gave me plenty of time to get acquainted with it. I soon started learning about 68000 Assembly language by writing mini-demos and games. I wrote a few articles that were published on disk magazines that were in circulation at time as this was before way before the internet and bulletin boards were out of my reach as I had not phone access.

I then started working on a PC with a C++ compiler where I got interested in both real-time and photo realistic 3D graphics. Once I graduated from University, I took a job at an accounting firm and on my second day there, I was given a copy of Borland Delphi and told me to go learn it which I did. I got pretty good and went on some consulting gigs as a Delphi programmer. As I was away from home a lot, I would spend time reading up on Java which was new at the time. I took the odd job using C and even VB (shudder) but luckily, I got to play to my strengths with Delphi. I moved over to the US in 1999, and have been here since. I worked initially as a Delphi programmer with a consulting firm for 5 years and then went in-house where I’ve been since 2004. Over the last several years, what had been a casual relationship with Java turned in to something more serious and I started spearheading our shift to Java technology full time.

The last several years have shown me a couple of things. Firstly, I was so lucky to work with a solid stable workhorse like Delphi for so many years. It really is a pity that there is no Java equivalent for Delphi and the eco-system can be so fragmented. However, I also learned that working in one isolated technology can limit your skills. I also found out that I really had a lot more to learn about programming. I think my skills have matured and grown in the last several years as much as they had in the rest of my professional career. Not only from a programming perspective but in terms of the development process, thinking about coding, using OOP correctly, and writing proper code. As part of this growth, I have consumed a number of books that really should be read by programmers old and new :

From the technology aspect, having had to learn it all myself, I try to write about it for the benefit of others in a way that I think I would liked to have read about it. One thing that I think is lacking is documentation that actually tells you something rather than just dropping hints on how to figure out your own solution for common problems. While I focus on the core Java EE technologies of JSF, JPA and CDI, I’ve worked with and learned about plenty of others that I have so little time to write about but Wicket and Spring are my two other favorites.

Hope you enjoy the site, and you can contact me here.

Cheers,

Andy Gibson

11 thoughts on “About

  1. Dear Andy,

    please tell me where should I put those listener’s codes from JSF. Let’s take the Trinidad component’s valueChangeListener atrribute for example. As the reference says it accept only method reference. So should I create a Spring Bean and put the listener’s code into it? And what if the listener code have to get data from database? Just make a service method for which it can delegate to and thats all? I’m affraid it’s not that simple. By the way here comes the main question. What does Spring Web Flow for then? I guess it should handle Model and View like controllers do. But with putting the data access out into some bean I by-pass the flow controller. Please enlight me. I’m new in this. And sorry for my english too.

    Regards,
    Arnold

  2. Hey Arnold, I’m not sure which post you are commenting on, but if you let me know, I’ll move it there. As for your questions :

    Typically, value change listeners would go on the backing bean, which in Seams case is the EJB/Seam POJO and for Spring it would be a spring bean. Since you mention Spring Web Flow, you could make it reference a backing bean that is part of the web flow and it would be a stateful backing bean. You would access data the same way you do in beans in other places.

    With Spring, you should be putting your data access code into a service layer or a DAO layer that is injected into your spring JSF backing beans or Spring MVC controllers so they can use the data access features of those beans.

    Hope this helps,

    Cheers,

    Andy Gibson

  3. Hi,

    First I’m glad you answered me so soon. I guess my comments would be right place in your “Creating A Spring Web Flow JSF Project From Scratch” post.

    If I can reach the model layer from Spring JSF backing beans through injected service layer or DAO layer then what’s the purpose of flow definition and the whole SWF? I think it breaks the Spring MVC concept. The Spring JSF Beans assume the responsibility or role of Spring controllers . Wouldn’t be simplier to use just Spring JSF Beans which delegate to service layer etc. like before the SWF was. Nowadays it’s simplier thanks to the fact now Spring has the ability to manage the JSF backing beans in it’s container. It’s not clear for me yet what SWF can do for me. It looks awesome theoretically but in practice there are problems without a clear answer given by SWF. I don’t like mixing technologies this way.

    Here is another simple task. What if I have two inputtext component on a page and when I write into the first one some text such as “blue” the other one changes its color to blue. I think it’s a too fine-grained problem, so the flow can’t handle this. I have to put this code into a backing bean. How did you solve this with just the good old Spring MVC? What did you write into the controller to handle this task?

    Regards,
    Arnold

  4. I guess i found the question for my last question. I think if I wanna to create a project based on Spring MVC and JSF I should just put the listeners code into a controller and inject the service beans into it. But now with SWF I have to put this code into the Spring JSF beans not into the flow definition namely the flow controller. I scatter the code.

  5. The SWF brings conversational pages to your applications, so for example, if you are writing a multi-page wizard, you can use a conversation to hold the state (beans, entities etc) from one page to the next. It also lets you decouple navigation in such multi-page conversations and put it in the spring web flow.

    You seem to be focused on using event listeners to handle form interaction when you really just need to worry about it when the form is posted. With spring web flow, the form is posted with an action string <h:commandButton action=”doSomething”/>, and any processing is invoked by the spring web flow in response to the “doSomething” action.

    Take a look at my Seam versus Spring Web Flow / Wicket articles :

    http://www.andygibson.net/blog/index.php/2009/08/01/seam-versus-spring-web-flow-versus-wicket/

    It includes a whole chapter on using Spring Web Flow in an application that lets you view/edit/list items and it uses JSF. That should give you an idea.

    Cheers,

    Andy

  6. Hey Andy,

    Could you advise to me for these problems:
    I’m using Trinidad components and just those, ’cause I have to. There is a form with some input components
    (combobox, inputtext etc.) and a send button. I have to enforce some form constraints without rerender the whole page like Ajax do I guess, but I must not use Ajax just Trinidad. It’s like booking-faces sample application’s client side validators for credit card number and name but it’s more complicated ’cause it’s server side and context aware if you know what I try to mean (e.g. input fields’ readonly value depends on another input fields’ values). As I see my only options are the value change listeners.

    If I have 3 single checkbox on the page that change for example a SQL selection should I make a stateful backing bean to store these 3 values or may I just store them in scope variables?

  7. Oops, that first sentence is very incomprehensible and maybe the others too, but I hope you got the point.

  8. Yep, I think I got you, well, first off, I’ve not really used Trinidad or it’s partial page rendering so I’m not much help there. I would get the page working in full redisplay mode before working out the ajaxy partial updates.

    You can implement the 3 checkboxes without any kind of state management. You hook the checkboxes to 3 boolean properties in a request scoped bean and have the bean fetch the data based on the 3 boolean values. Each time you post the form back the values are put into the bean, used to generate the sql, and the 3 values are rendered back to the page. So the values are held client side, posted back, validation is performed and the boolean values and error messages are sent back down to the client. While Ajax may only update part of the page, you would need to post back the whole form (all 3 boolean values) to be able to generate the sql. On the plus side, it would be completely stateless since the state is stored on the client.

  9. You said that “the bean fetch the data based on the 3 boolean values”. So if I can fetch the data in backing bean through service or straight through dao layer (as I know the service layer should reach data with the help of dao layer to achive the business logic, that’s straight for) where should business logic “live”? In the service layer and backing beans? Or just in service layer? Or should I bother with service layer eventually? If the business logic in backing beans like that checkbox value holder above than how can I handle security questions(authorisation) and transaction management. DAO is getting closer to “death” thanks to JPA and the dao layer is migrating into service layer if I’m right. Although I did not deal with the JPA a lot, since we have an own data access solution (you know some kind of homegrown framework), which is badder though, than JPA, but we have to use that.

Comments are closed.