Hi STephen, Stephen Ting wrote:
Hi Thomas,2 solutions:
I solved this mapping problems. Now I can do update of object to the
database. Whereas, if I want to add in a new line item PrItemBO class to
the PrBO class. The new line item is not persist to the database. Where
did I get wrong????
1. lock each new itme to the tx (most simple approach)
2. use ODMG collections instead of normal Collection or Vector attributes. ODMD collections track add() and remove() methods and doe the appropriate locking automatically.
When is the right place to lock the object?
after tx begin, but before any modifications are made!
cheers, Thomas
Thanks in advance
Cheers,
Stephen
public boolean updatePR(PrView view, Site site) throws
BusinessDelegateException {
Implementation odmg = OJB.getInstance();
Database db = odmg.newDatabase();
Transaction tx = null;
try
{ db.open(site.getRepository(), Database.OPEN_READ_WRITE);
tx = odmg.newTransaction(); tx.begin();
PersistenceBroker broker = ((HasBroker) tx).getBroker();
PrBO prUpdate = new PrBO();
prUpdate.setPrNo(view.getPrNo());
prUpdate.setMailId(view.getMailId());
prUpdate.setIssuedBy(view.getIssuedBy());
prUpdate.setCompanyNo(view.getCompanyNo());
String viewDate = view.getPrDate();
SimpleDateFormat newFormat = new
SimpleDateFormat("dd/MM/yyyy");//sql db compliant
Date newDate = null;
try{ newDate = newFormat.parse(viewDate);
}catch(ParseException e){
System.out.println(e.getMessage());
}
prUpdate.setPrDate(new Timestamp(newDate.getTime()));
tx.lock(prUpdate,tx.WRITE); Iterator iterate = view.getItemList().values().iterator();
while(iterate.hasNext()){
PrItemBO itemBO = new PrItemBO();
PrItemBO duplicateItem = null; try{
PrItemView itemView = (PrItemView) iterate.next();
//Try to add in the Line item
if("A".equals(itemView.getProcessed())){
duplicateItem = new PrItemBO();
PropertyUtils.copyProperties(duplicateItem,
itemView);
duplicateItem.setVendorNo("");
duplicateItem.setQtyAprv(new BigDecimal(0.0));
duplicateItem.setProcessed("P");
prUpdate.addItem(duplicateItem);
duplicateItem.setPrBO(prUpdate);
}
PropertyUtils.copyProperties(itemBO, itemView);
prUpdate.addItem(itemBO);
itemBO.setPrBO(prUpdate);
}catch(Exception e){
System.out.println(e.getMessage());
} }
tx.lock(prUpdate,tx.WRITE);
tx.commit();
broker.clearCache();
db.close();
}catch(ODMGException e){
tx.abort();
System.out.println(e.getMessage());
return false;
}
return true;
}
-----Original Message-----
From: Thomas Mahler [mailto:[EMAIL PROTECTED]]
Sent: 29 November 2002 17:43
To: OJB Users List
Subject: Re: One-to-many update error
Hi STephen,
This is a mapping error as indicated by the ERROR messages.
AFAIK PrItemBO does have a property prNo. The (derived ?) class PrItemView does not have the respective getter/setter method?
Try to add these getter/setter on PrItemView.
You could also try to use a different PersistentField
Implementation in OJB.properties.
cheers,
Thomas
Stephen Ting wrote:
What cause the following errors being thrown? The following code is used, where prUpdate is of class PrBOand haveone to many relationship with PrItemBO class.
db.open(site.getRepository(), Database.OPEN_READ_WRITE);
tx = odmg.newTransaction();
tx.begin();
tx.lock(prUpdate,tx.WRITE);
tx.commit();
Can someone please help???
Thanks in advance!
regards,
Stephen
[DEFAULT] ERROR: Error in operation [set] of object
[PersistentFieldPropertyImpl], java.lang.IllegalArgumentException
[DEFAULT] ERROR: Declaring class [my.com.shinyang.einout.business.bo.PrItemBO]
[DEFAULT] ERROR: Property Name [prNo]
[DEFAULT] ERROR: Property Type [java.lang.String]
[DEFAULT] ERROR: anObject was class [my.com.shinyang.einout.purchase.requisition.view.PrItemView]
[DEFAULT] ERROR: aValue was class [java.lang.String] [org.apache.ojb.odmg.TransactionImpl] ERROR: Locking obj my.com.shinyang.einout.business.bo.PrBO@694f12 with lockmode 4 failednull org.apache.ojb.broker.PersistenceBrokerException atorg.apache.ojb.broker.metadata.PersistentFieldPropertyImpl.set(UnknownSource) atorg.apache.ojb.odmg.TransactionImpl.lockCollections(Unknown Source)at org.apache.ojb.odmg.TransactionImpl.register(Unknown Source) atorg.apache.ojb.odmg.TransactionImpl.lock(Unknown Source) atmy.com.shinyang.einout.business.PurchaseRequisitionDelegateImp l.updatePR(PurchaseRequisitionDelegateImpl.java:334) atmy.com.shinyang.einout.purchase.requisition.PurchaseApprovalEd itAction.update(PurchaseApprovalEditAction.java:129) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccess orImpl.java:39) atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMeth odAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:324) atorg.apache.struts.actions.DispatchAction.dispatchMethod(Dispat chAction.java:280) atorg.apache.struts.actions.DispatchAction.execute(DispatchActio n.java:220) atorg.apache.struts.action.RequestProcessor.processActionPerform (RequestProcessor.java:446) atorg.apache.struts.action.RequestProcessor.process(RequestProce ssor.java:266) atorg.apache.struts.action.ActionServlet.process(ActionServlet.j ava:1292)atorg.apache.struts.action.ActionServlet.doPost(ActionServlet.java:510)at javax.servlet.http.HttpServlet.service(HttpServlet.java:760) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilt er(ApplicationFilterChain.java:247) atorg.apache.catalina.core.ApplicationFilterChain.doFilter(Appli cationFilterChain.java:193) atorg.apache.catalina.core.StandardWrapperValve.invoke(StandardW rapperValve.java:260) atorg.apache.catalina.core.StandardPipeline$StandardPipelineValv eContext.invokeNext(StandardPipeline.java:643) atorg.apache.catalina.core.StandardPipeline.invoke(StandardPipel ine.java:480) atorg.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)atorg.apache.catalina.core.StandardContextValve.invoke(StandardC ontextValve.java:191) atorg.apache.catalina.core.StandardPipeline$StandardPipelineValv eContext.invokeNext(StandardPipeline.java:643) atorg.apache.catalina.authenticator.AuthenticatorBase.invoke(Aut henticatorBase.java:527) atorg.apache.catalina.core.StandardPipeline$StandardPipelineValv eContext.invokeNext(StandardPipeline.java:641) atorg.apache.catalina.core.StandardPipeline.invoke(StandardPipel ine.java:480) atorg.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)atorg.apache.catalina.core.StandardContext.invoke(StandardContex t.java:2350) atorg.apache.catalina.core.StandardHostValve.invoke(StandardHost Valve.java:180) atorg.apache.catalina.core.StandardPipeline$StandardPipelineValv eContext.invokeNext(StandardPipeline.java:643) atorg.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDi spatcherValve.java:170) atorg.apache.catalina.core.StandardPipeline$StandardPipelineValv eContext.invokeNext(StandardPipeline.java:641) atorg.apache.catalina.valves.ErrorReportValve.invoke(ErrorReport Valve.java:171) atorg.apache.catalina.core.StandardPipeline$StandardPipelineValv eContext.invokeNext(StandardPipeline.java:641) atorg.apache.catalina.core.StandardPipeline.invoke(StandardPipel ine.java:480) atorg.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)atorg.apache.catalina.core.StandardEngineValve.invoke(StandardEn gineValve.java:174) atorg.apache.catalina.core.StandardPipeline$StandardPipelineValv eContext.invokeNext(StandardPipeline.java:643) atorg.apache.catalina.core.StandardPipeline.invoke(StandardPipel ine.java:480) atorg.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)atorg.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter. java:223)atorg.apache.coyote.http11.Http11Processor.process(Http11Process or.java:405) atorg.apache.coyote.http11.Http11Protocol$Http11ConnectionHandle r.processConnection(Http11Protocol.java:380) atorg.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoi nt.java:508) atorg.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run( ThreadPool.java:533) at java.lang.Thread.run(Thread.java:536) Caused by: java.lang.IllegalArgumentException: object isnot an instanceof declaring class at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccess orImpl.java:39) atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMeth odAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:324) ... 49 more
--
To unsubscribe, e-mail: <mailto:ojb-user-> [EMAIL PROTECTED]>
For
additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
