[jboss-user] [JBoss Seam] - @PersistenceContext in a SFSB created by a factory

Newlukai do-not-reply at jboss.com
Tue Aug 7 06:14:57 EDT 2007


Hi there,

is it possible to have a PersistenceContext in a bean (don't really know which type it is, sorry, I'm a noob somedays :D) which is created by a factory?

The thing I want to do is to imlpement the possibility to switch the implementation of an interface. This works. In one of these implementations I want to obtain the PersistenceContext and that doesn't work.

But let me show you some code:

@Name("upDownloadFactory")
  | @Scope(ScopeType.APPLICATION)
  | @Startup
  | public class UpDownloadFactory implements Serializable {
  |   private String className;
  |   
  |   @Out(required=false)
  |   private UpDownload upDownload;
  |   
  |   @Factory(value="upDownload", scope=ScopeType.SESSION, autoCreate=true)
  |   public UpDownload getUpDownload() {
  |     if(upDownload == null) {
  |       try {
  |         if(className == null || className.equals("")) {
  |           className = "com.idsscheer.ares.sessions.UpDownloadDatabase";
  |         }
  |         upDownload = (UpDownload) Class.forName(className).newInstance();
  |         ... and so on ...
  |         }
  | 
  |         return upDownload;
  |     }
  | 
  |   public void setClassName(String className) {
  |     this.className = className;
  |   }
  | }
This is the factory I wrote. As you can see the implementation has to be set in components.xml and sets the className property. All those parameters I set in the @Factory annotation shall setup the "upDownload" as SFSB.

Here is one implementation of the managed bean:
@Scope(ScopeType.SESSION)
  | @Stateful
  | public class UpDownloadDatabase implements UpDownload, Serializable {
  |   @PersistenceContext(unitName = "aresDatabase")
  |   private transient EntityManager em;
  |   
  |   public boolean upload(UpDownloadFileinfo fileInfo) {
  |     ... do the upload with em ...
  |   }
  | 
  |   public List<UpDownloadFileinfo> getAttachedFiles(long testactionID) {
  |     ... show a list of attached files ...
  |   }
  | 
  |   @Remove @Destroy
  |   public void destroy() {
  |   }
  | }

In this implementation the EntityManager is needed but on invokation of this bean the console tells me that
Caused by: java.lang.IllegalArgumentException: @PersistenceContext may only be used on session bean or message driven bean components: upDownload
  | 	at org.jboss.seam.Component.initMembers(Component.java:663)
  | 	at org.jboss.seam.Component.<init>(Component.java:253)
  | 	at org.jboss.seam.Component.<init>(Component.java:203)
  | 	at org.jboss.seam.init.Initialization.addComponent(Initialization.java:851)
  | 	... 93 more

Has anybody an idea how to implement such a factory?

Thanks in advance
Newlukai

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4071517#4071517

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4071517



More information about the jboss-user mailing list