i created a new class which reads data from external source and creates order and invoice at the same time.and invoked the class within client/process/ trigger
here is the sample code i wrote
log.debug("creating order");
ItemDTO item = getItemId(item_number);
Integer itemid;
itemid = item.getId();
log.debug("itemid="+itemid);
log.debug("inside createOrder()");
Character type = item_number.charAt(0);
OrderLineWS OrderLine = new OrderLineWS();
OrderLine.setId(0);
OrderLine.setQuantity(quantity);
OrderLine.setItemId(itemid);
OrderLine.setTypeId(typeid);
OrderLine.setAmount("0");
OrderLine.setUseItem(Boolean.TRUE);
OrderLineWS[] orderLineWSs = new OrderLineWS[1];
orderLineWSs[0] = OrderLine;
OrderWS order = new OrderWS();
order.setUserId(userid);
order.setBillingTypeId(1);
order.setCurrencyId(1);
log.debug("setting order");
if (activeUntil != null) {
order.setActiveUntil(activeUntil);
}
log.debug("set active until");
if (createDate == null) {
java.util.Date date = new java.util.Date();
order.setCreateDate(date);
}else{
order.setCreateDate(createDate);
}
log.debug("set create date");
if (item_number.equals("L-004")) {
order.setPeriod(1500);
order.setOwnInvoice(1);
} else {
order.setPeriod(1);
order.setOwnInvoice(0);
}
log.debug("set period and own invoice");
order.setDueDateUnitId(1);
order.setDueDateValue(expireDays);
order.setOrderLines(orderLineWSs);
try {
processItemLine(order.getOrderLines(), 1, company.getId(),
order.getUserId(), order.getCurrencyId(),
order.getPricingFields());
} catch (Exception e) {
throw new SessionInternalError(e);
}
OrderBL orderBL = new OrderBL();
OrderDTO dto = orderBL.getDTO(order);
dto.setId(null);
Integer id = orderBL.create(entityid, userid, dto);
log.debug("order_id="+id);
orderBL.set(id);
return id;
}
private void processItemLine(OrderLineWS[] lines, Integer languageId,
Integer entityId, Integer userId, Integer currencyId,
String pricingFields)
throws SessionInternalError, PluggableTaskException, TaskException {
log = Logger.getLogger(AgencyDBReader.class);
for (OrderLineWS line : lines) {
// get the related item
IItemSessionBean itemSession = (IItemSessionBean) Context.getBean(
Context.Name.ITEM_SESSION);
// get pricing fields if they were set for the order
List fields = null;
if (pricingFields != null) {
fields = Arrays.asList(
PricingField.getPricingFieldsValue(pricingFields));
}
//log.debug(lines);
//log.debug(line)
ItemDTO item = itemSession.get(line.getItemId(),
languageId, userId, currencyId,
entityId, fields);
//ItemDAS itemDas = new ItemDAS();
//line.setItem(itemDas.find(line.getItemId()));
if (line.getUseItem().booleanValue()) {
if (item.getPrice() == null) {
line.setPrice(item.getPercentage());
} else {
line.setPrice(item.getPrice());
}
if (line.getDescription() == null ||
line.getDescription().length() == 0) {
line.setDescription(item.getDescription());
but gets the following exception
2010-08-03 15:32:00,453 DEBUG [com.sapienter.jbilling.server.system.event.EventManager] processing event Subscription Active Event - entity 1 - entity 1
2010-08-03 15:32:00,453 DEBUG [com.sapienter.jbilling.server.pluggableTask.admin.PluggableTaskManager] total classes = 2
2010-08-03 15:32:00,453 INFO [com.sapienter.jbilling.server.system.event.EventManager] No processors for class class com.sapienter.jbilling.server.provisioning.event.SubscriptionActiveEvent
2010-08-03 15:32:00,453 DEBUG [com.sapienter.jbilling.server.order.OrderBL] OrderBL.create(): generated SubscriptionActiveEvent for order: 233001
2010-08-03 15:32:00,468 DEBUG [com.sapienter.jbilling.server.system.event.EventManager] processing event NewOrderEvent: entityId = 1 order = Order = id=233001,baseUserByUserId=2,baseUserByCreatedBy=2,currencyDTO=com.sapienter.jbilling.server.util.db.CurrencyDTO@573206,orderStatusDTO=com.sapienter.jbilling.server.order.db.OrderStatusDTO@f70f8e,orderPeriodDTO=OrderPeriodDTO:[ id=1 company=null periodUnitDTO=null value=null versionNum=1],orderBillingTypeDTO= OrderBillingType=1,activeSince=null,activeUntil=null,createDate=Tue Aug 03 15:32:00 AST 2010,nextBillableDay=null,deleted=0,notify=null,lastNotified=null,notificationStep=null,dueDateUnitId=1,dueDateValue=7,dfFm=null,anticipatePeriods=null,ownInvoice=0,notes=null,notesInInvoice=null,orderProcesses=[],isCurrent=0,versionNum=0 lines:[OrderLine:[id=233202 rderLineType=1500 item=2307 order id=233001 amount=100 quantity=1 price=100 createDatetime=Tue Aug 03 15:32:00 AST 2010 deleted=0 description=Digging license fee versionNum=0 provisioningStatus=com.sapienter.jbilling.server.provisioning.db.ProvisioningStatusDTO@11dc62a provisionningRequestId=null editable=null]-]
2010-08-03 15:32:00,468 DEBUG [com.sapienter.jbilling.server.pluggableTask.admin.PluggableTaskManager] total classes = 2
2010-08-03 15:32:00,468 DEBUG [com.sapienter.jbilling.server.system.event.InternalEventProcessor] Processing NewOrderEvent: entityId = 1 order = Order = id=233001,baseUserByUserId=2,baseUserByCreatedBy=2,currencyDTO=com.sapienter.jbilling.server.util.db.CurrencyDTO@573206,orderStatusDTO=com.sapienter.jbilling.server.order.db.OrderStatusDTO@f70f8e,orderPeriodDTO=OrderPeriodDTO:[ id=1 company=null periodUnitDTO=null value=null versionNum=1],orderBillingTypeDTO= OrderBillingType=1,activeSince=null,activeUntil=null,createDate=Tue Aug 03 15:32:00 AST 2010,nextBillableDay=null,deleted=0,notify=null,lastNotified=null,notificationStep=null,dueDateUnitId=1,dueDateValue=7,dfFm=null,anticipatePeriods=null,ownInvoice=0,notes=null,notesInInvoice=null,orderProcesses=[],isCurrent=0,versionNum=0 lines:[OrderLine:[id=233202 orderLineType=1500 item=2307 order id=233001 amount=100 quantity=1 price=100 createDatetime=Tue Aug 03 15:32:00 AST 2010 deleted=0 description=Digging license fee versionNum=0 provisioningStatus=com.sapienter.jbilling.server.provisioning.db.ProvisioningStatusDTO@11dc62a provisionningRequestId=null editable=null]-] with com.sapienter.jbilling.server.user.balance.DynamicBalanceManagerTask@1bcf620
2010-08-03 15:32:00,468 FATAL [com.sapienter.jbilling.server.order.OrderBL] Create exception creating order entity beancould not initialize proxy - no Session
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:132)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:174)
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:190)
at com.sapienter.jbilling.server.user.db.UserDTO_$$_javassist_49.getCustomer(UserDTO_$$_javassist_49.java)
at com.sapienter.jbilling.server.user.balance.DynamicBalanceManagerTask.updateDynamicBalance(DynamicBalanceManagerTask.java:162)
at com.sapienter.jbilling.server.user.balance.DynamicBalanceManagerTask.process(DynamicBalanceManagerTask.java:66)
at com.sapienter.jbilling.server.system.event.InternalEventProcessor.process(InternalEventProcessor.java:48)
at com.sapienter.jbilling.server.system.event.EventManager.process(EventManager.java:89)
at com.sapienter.jbilling.server.order.OrderBL.create(OrderBL.java:341)
at com.sapienter.jbilling.server.process.AgencyDBReader.createOrder(AgencyDBReader.java:419)
at com.sapienter.jbilling.server.process.AgencyDBReader.trigger(AgencyDBReader.java:145)
at com.sapienter.jbilling.client.process.Trigger.execute(Trigger.java:218)
at org.quartz.core.JobRunShell.run(JobRunShell.java:191)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:516)
solved
calling the class using the object of context class