Asynchronous problem
iwannugraha Mar 1, 2010 4:33 AMHi, i have a problem with @Asynchronous method
this is my Bean
package com.domain.matricehrm.session; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import javax.ejb.Remove; import javax.ejb.Stateful; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import org.jboss.seam.ScopeType; import org.jboss.seam.annotations.Destroy; import org.jboss.seam.annotations.In; import org.jboss.seam.annotations.Logger; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Out; import org.jboss.seam.annotations.Scope; import org.jboss.seam.annotations.datamodel.DataModel; import org.jboss.seam.annotations.web.RequestParameter; import org.jboss.seam.log.Log; import com.domain.matricehrm.entity.Employee; import com.domain.matricehrm.entity.Paymenttask; import com.domain.matricehrm.entity.Payrollperiod; @Stateful @Scope(ScopeType.SESSION) @Name("paymentbillingAction") public class PaymentbillingAction implements Paymentbilling, Serializable { /** * */ private static final long serialVersionUID = 1L; private Integer period; private String loccode; private String deptcode; private String groupcode; private String idemployee; private List<String> itemselects = new ArrayList<String>(); public String[] noRegs; public PaymentbillingAction(){ } public PaymentbillingAction(Integer period, String loccode, String deptcode, String groupcode, String idemployee, List<String> itemselects){ this.period = period; this.loccode = loccode; this.deptcode = deptcode; this.groupcode = groupcode; this.idemployee = idemployee; this.itemselects = itemselects; } @DataModel List<Employee> selectedemployees; @DataModel List<Payrollperiod> pperiods; @In(required = false) Asynpayment asyncpayment; @PersistenceContext //(type=PersistenceContextType.EXTENDED) EntityManager em; @DataModel List<String> employeeRegisters; @Out(required = false) Employee employee; @Logger private Log log; @RequestParameter String freqpay; private Paymenttask payments; @In(required = false) @Out(required = false, scope = ScopeType.SESSION) private List<Employee> hasilEmployee = new ArrayList<Employee>(); private Paymenttask paytask = new Paymenttask(); @In(required = false) @Out(required = false, scope = ScopeType.SESSION) private String paramRegister = new String(); @In(required = false) @Out(required = false, scope = ScopeType.SESSION) private Integer periodID; // VARIABLE - VARIABLE String locationcode; String departmentcode; String employeegroup; String employeeid; String payfrekuency; String[] arrayRegs; String pemisah = ","; String semikolon = "'"; Integer regsize; @SuppressWarnings("unchecked") public void pilihPegawai(){ // inisialisasi(); periodID = getPeriod(); locationcode = ""; departmentcode = ""; employeegroup = ""; employeeid = ""; List<Payrollperiod> periodes = em.createQuery("select per, taxparam from Payrollperiod per "+ "INNER JOIN FETCH per.taxparameter taxparam "+ "where per.payrollperiodid= :perID") .setParameter("perID", periodID) .getResultList(); pperiods = periodes; for (Payrollperiod prd : pperiods) { payfrekuency = prd.getPeriodtype(); freqpay = payfrekuency; } locationcode = getLoccode(); departmentcode = getDeptcode(); employeegroup = getGroupcode(); if (locationcode == null || locationcode.equals("")) { locationcode = "%"; } if (departmentcode == null || departmentcode.equals("")) { departmentcode = "%"; } if (employeegroup == null || employeegroup.equals("")) { employeegroup = "%"; } if (freqpay == null || freqpay.equals("")) { freqpay = "%";} hasilEmployee = em.createQuery("select emp, pos, dep, loc, emppay, payscheme From Employee emp "+ "INNER JOIN FETCH emp.position pos "+ "INNER JOIN FETCH emp.position.department dep "+ "INNER JOIN FETCH emp.position.department.location loc "+ "INNER JOIN FETCH emp.employeepayroll emppay "+ "INNER JOIN FETCH emp.employeepayroll.payrollschema payscheme "+ "where emp.position.department.location.code like :locid "+ "and emp.position.department.code like :depid "+ "and emp.employeepayroll.payrollschema.schemaname like :scheme "+ "and emp.employeepayroll.payfrequency like :payfrekuen ") .setParameter("locid", locationcode) .setParameter("depid", departmentcode) .setParameter("scheme", employeegroup) .setParameter("payfrekuen", freqpay) .getResultList(); } public void prosesBilling(){ // periodID = getPeriod(); // merubah data list employee menjadi string employeeRegisters = new ArrayList<String>(); employeeRegisters = getItemselects(); if (employeeRegisters.size() > 0 ) { regsize = employeeRegisters.size(); noRegs = new String[regsize]; noRegs = employeeRegisters.toArray(new String[regsize]); arrayRegs = new String[regsize]; arrayRegs[0] = semikolon+noRegs[0]+semikolon; for (int n = 1; n <= employeeRegisters.size() - 1; n++) { arrayRegs[n] = pemisah+semikolon+noRegs[n]+semikolon; log.info("registerNo "+arrayRegs[n]); } // cara baru perubahan array ke string dengan menggunakan buffer StringBuffer result = new StringBuffer(); if (noRegs.length > 0) { result.append(semikolon+noRegs[0]+semikolon); for (int i=1; i<noRegs.length; i++) { result.append(pemisah); result.append(semikolon); result.append(noRegs[i]); result.append(semikolon); } } paramRegister = result.toString(); }else { paramRegister = semikolon+"%"+semikolon; } log.info("========== parsing ke synchronous proses =========>>>>>>"); asyncpayment.prosesHitung(regs); System.out.println("coba ke DB"); for(int i = 1; i<= 5; i ++) { this.paytask = new Paymenttask(); this.paytask.setPeriodinfo("olaa ciecie beibeh"); em.persist(this.paytask); log.info("simpan"); } } public void reset() { } @Destroy @Remove public void destroy() { } // getter dan setter.. public void setPeriod(Integer period) { this.period = period; } public Integer getPeriod() { return period; } public void setLoccode(String loccode) { this.loccode = loccode; } public String getLoccode() { return loccode; } public void setDeptcode(String deptcode) { this.deptcode = deptcode; } public String getDeptcode() { return deptcode; } public void setGroupcode(String groupcode) { this.groupcode = groupcode; } public String getGroupcode() { return groupcode; } public void setIdemployee(String idemployee) { this.idemployee = idemployee; } public String getIdemployee() { return idemployee; } public void setItemselects(List<String> itemselects) { this.itemselects = itemselects; } public List<String> getItemselects() { return itemselects; } public void setPayments(Paymenttask payments) { this.payments = payments; } public Paymenttask getPayments() { return payments; } } and this is my stateless bean, package com.domain.matricehrm.session; import java.io.Serializable; import javax.ejb.Stateless; import org.jboss.seam.annotations.Logger; import org.jboss.seam.annotations.Name; import org.jboss.seam.log.Log; @Stateless @Name("asyncpayment") public class Asyncpayment implements Asynchronouspayment, Serializable{ /** * */ private static final long serialVersionUID = 1L; /** * */ @Logger Log log; public void prosesHitung(String gila) { try { // Contexts.getEventContext().set("payments",payments); do some work here.. } catch (Exception e) { log.error("Error trying to process payment..", e); } } public void goBilling(){ log.info("testing"); } } this is my interface.. package com.domain.matricehrm.session; import javax.ejb.Local; import org.jboss.seam.annotations.async.Asynchronous; @Local public interface Asynchronouspayment { @Asynchronous public void prosesHitung(String gila); @Asynchronous public void goBilling(); }
and the problem is i can't call processHitung();
please how to solve my problem..