You can find the full source code for this website in the Seam package in the directory /examples/wiki. It is licensed under the LGPL.
Adding the @Veto annotation to all persistent entities is considered a best practice in most cases. The purpose of this annotation is to prevent the BeanManager from managing an entity as a Bean. This feature is currently made available to Seam Solder 3.0 and is proposed for the coming CDI 1.1 specifiction.
When an entity is annotated @Veto no injections will take place. The reasoning behind this is to prevent the BeanManager to perform operations that may cause the JPA provider to break.
In Seam Persistence a post-load lifecycle is added to enable post injection.
@Entity @Veto public class Foo { /* This will not be respected by the BeanManager */ @Inject private Logger log; /* This annotation is managed by the EnityManager and not the BeanManager */ @Column private String bar; }
All JPA persistent entities should be marked with @Veto as this will prohibit BeanManager to interfere with the EntityManager, This includes MappedSuperclass, Embedded, ModelListeners, etc.
You can also annotate a package-info.java to let a whole package be marked veto.