just one comment:

Calling .flush() on every alteration really should not be promoted as a good 
practice.

/max

On Sep 22, 2011, at 24:22, Dan Allen wrote:

> Here's some additional feedback I received from a community member a while 
> back...to merge it into this thread.
> 
> (begin feedback)
> 
> ...from being burned from 3 seam based customers with apps and maintenance.  
> The "Home" or any other name should be just be put into a grave and slowly 
> cast away to sea ;).  It is too heavy and complicated and just about anything 
> inherited (extends) truly causes heartache[Favor Composition over 
> inheritance: Effective Java]. The current seam home has a few super classes 
> above the home and when you try to unit test it (the standard definition of 
> unit-testing including isolation) you get the "No Active Application Context 
> Found (if I remember it right).  That happens because it is tightly coupled 
> with the application.  But not to be hard on Home, I do realize the history 
> of the home object and know it was developed when EL had no parameters. So I 
> have learned a lot since then and I here are some things that I can impart to 
> Seam 3.  
> 
> 1. My "Home" now is a "ServiceBean", and I have one for each "Major" entity, 
> see below.  I have really stewed over this over months and months, and the 
> "Home" of "ServiceBean" should be kept small, focused, reusable, tested and 
> untouched.  It's only task is to update, persist, possibly remove, or some 
> other functions that are required.  In my example below I have custom close 
> action.  Notice also that although these beans are stateful that doesn't mean 
> everything should be, so in these methods I have the parameter of what is 
> being needed to be updated, and not a field.  In other words I don't have @In 
> private Job job, I opted for public boolean update(job).  Mostly because, 
> again, I want to make this service bean reusable so whether I have a 
> #{newJob}, #{copyOfAJob}, or #{managedJob} or whatever component of job I 
> need to work on I only need one jobServiceBean to cater to all my jobs, in 
> whatever conversation I am using.  I also fire events from here if I need to 
> do that. !
   After this is tested, and what I need I usually don't touch it anymore.  If 
I need to enhance I either use a decorator pattern around it, or enhance it in 
an @Observer.  I'll email about that later.
> 
> @Name("jobServiceBean")
> @Scope(ScopeType.CONVERSATION)
> public class JobServiceBean implements JobService {
>     private EntityManager entityManager;
>     private StatusMessages statusMessages;
> 
>     @In
>     public void setEntityManager(EntityManager entityManager) {
>         this.entityManager = entityManager;
>     }
> 
>     @In
>     public void setStatusMessages(StatusMessages statusMessages) {
>         this.statusMessages = statusMessages;
>     }
> 
>     public boolean update(Job job) {
>         this.entityManager.flush();
>         this.statusMessages.add(StatusMessage.Severity.INFO, "Successfully 
> updated job {0}", job.getName());
>         return true;
>     }
> 
>     public boolean close(Job job) {
>         job.setJobStatus(JobStatus.CLOSED);
>         this.entityManager.flush();
>         this.statusMessages.add(StatusMessage.Severity.INFO, "Successfully 
> closed job {0}", job.getName());
>         return true;
>     }
> }
> 
> 2. One thing you may have noticed from above that there is no 'instance' 
> field with corresponding getters or setters like the old 'Home'.   So the 
> ServiceBean in my case is not a full crud, but CUD + your own business 
> methods. That's because that too should be decoupled because we never know 
> the source of the object is.  Is the object created from a factory? from a 
> copy? is it a mapped component, a managed component?  Creation of objects or 
> loading of objects, or the manufacturing of objects from factories should be 
> separate from the "home" or in my case the "ServiceBean".
> 
> (end feedback)
> 
> -- 
> Dan Allen
> Principal Software Engineer, Red Hat | Author of Seam in Action
> Registered Linux User #231597
> 
> http://www.google.com/profiles/dan.j.allen#about
> http://mojavelinux.com
> http://mojavelinux.com/seaminaction
> 
> _______________________________________________
> forge-dev mailing list
> [email protected]
> https://lists.jboss.org/mailman/listinfo/forge-dev

/max
http://about.me/maxandersen




_______________________________________________
seam-dev mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/seam-dev

Reply via email to