injecting async method seams to fail ?
dreuzel Oct 23, 2007 8:15 AM'im sure to do something wrong but I can not inject an async method
for one reason or another
neither injection does work:
@In(create = true) ProcessingAction processingAction;//Fails
@In("#{processingAction}") ProcessingAction processingAction;/Fails javax.ejb.EJBException: java.lang.IllegalArgumentException: could not set field value: startupManager.#{processingAction}
@In(create = true) ProcessingAction processingAction;//Fails
The create method is successfull as long as the values are not injected
@Startup @Stateful @Scope(ScopeType.APPLICATION) //application required for startup @Name("startupManager") //Name public class StartupManager implements StartupManagerINTF{ // create Interface @Logger private Log log; @In("#{processingAction}") ProcessingAction processingAction;/Fails javax.ejb.EJBException: java.lang.IllegalArgumentException: could not set field value: startupManager.#{processingAction} // @In(create = true) ProcessingAction processingAction;//Fails private QuartzTriggerHandle handle = null; @Create public void create() { log.info("create(): called"); // init int delay = 20; // in seconds long interval = 1000 * delay; Calendar cal = Calendar.getInstance(); cal.setTime(new Date()); cal.add(Calendar.SECOND, delay); // create Processing long processingId=-1; if (processingAction!=null) { processingId = processingAction.createProcessing("serverJob"); // schedule job and save handler this.handle = processingAction.doServerJob(processingId, cal.getTime(), interval); } log.info("create(): id: #0", processingId); } public QuartzTriggerHandle getHandle() {return this.handle ;} @Remove public void destroy() { } }
injected code :
I tried starting
using different scopes but all remain unsuccessfull
@Stateful @Name("processingAction") @Scope(ScopeType.APPLICATION) public class ProcessingAction implements ProcessingActionINTF { // create Interface @Logger private Log log; @In private EntityManager entityManager; public ProcessingAction() {String Procesaction="Processing action";} public ProcessingAction ProcessingAction() {return this;} @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) public long createProcessing(String string) { // create Processing ShedJobStatusDB processing = new ShedJobStatusDB(); String JobId=""+(new Date()).toString()+":"+string; processing.setHandle(JobId); processing.setDescription("Startup stared"); processing.setEnd(new Date()); processing.setGrp("Startup"); processing.setId(1); processing.setUsr("Nobody"); processing.setLastReturnValue(string); processing.setRun(new Date()); processing.setStats("Status"); processing.setRunning(new Date()); processing.setName("processingAction"); // managed context if (entityManager!=null) { entityManager.persist(processing); entityManager.flush(); } processing.setName("serverJob"); // return id return processing.getId(); } @Asynchronous @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) public QuartzTriggerHandle doServerJob(long processingId, @Expiration Date date, @IntervalDuration Long interval) { log.info("doServerJob(): called"); // get bean ShedJobStatusDB processing = entityManager.find(ShedJobStatusDB.class, processingId); // if exists remove if (processing != null) { entityManager.remove(processing); log.info("doServerJob(): removed: id: #0", processingId); } else { // else stop server job try { // nolink startupManager.getHandle().cancel(); } catch (Exception e) { log.error("", e); } log.info("doServerJob(): stopped: id: #0", processingId); } // return new handle return new QuartzTriggerHandle("serverJob"); } @Remove public void destroy() { } }
import org.jboss.annotation.*; import org.jboss.seam.annotations.datamodel.*;//DataModel;DataModelSelection; import org.jboss.seam.*; import org.jboss.seam.annotations.*;//Factory,Name,In,Out,Scope,Logger,Destroy import org.jboss.seam.contexts.*; import org.jboss.seam.annotations.Logger; import org.jboss.seam.log.Log; import org.jboss.seam.faces.*; import javax.persistence.*; //EntityManager;PersistenceContext; import javax.ejb.*;//stateless;stateful,remove import static javax.persistence.PersistenceContextType.*; import static org.jboss.seam.ScopeType.*;//session import org.hibernate.validator.*; import org.jboss.seam.annotations.Transactional; import org.jboss.seam.annotations.async.*; import org.jboss.seam.annotations.async.Asynchronous; import org.jboss.seam.async.*; import org.quartz.*; import org.jboss.seam.ejb.SeamInterceptor; import lib.cyclus.String.*; import com.cycluspro.*; import com.cycluspro.ejb.*; import com.cycluspro.ejb.beurs.*; import com.cycluspro.ejb.common.jobs.*; import com.cycluspro.ejb.common.*;//db import lib.cycluspro.webaccess.*; import lib.cycluspro.Hibernate.HibernateEntity; import lib.cycluspro.string.*; import lib.cycluspro.string.DateInOut; import com.cycluspro.beurs.*; import com.cycluspro.beurs.user.AandelenINTF; import java.util.*; //List;Date; import java.io.*;//Serializable; import java.util.Properties; @Local public interface ProcessingActionINTF { public ProcessingAction ProcessingAction(); public long createProcessing(String string); @Asynchronous @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) public QuartzTriggerHandle doServerJob(long processingId, @Expiration Date date, @IntervalDuration Long interval) ; @Remove public void destroy(); }
Component async is set as well...
please can anyone help
Using seam 2.0.0 CR1
Using jbos 4.2.1GA