Wrox Home  
Search P2P Archive for: Go

  Return to Index  

enterprise_java_beans thread: Composite Primary Key to Foreign Key map in weblogic 6.0


Message #1 by "burhan uddin ahmed" <burhanist@y...> on Sun, 24 Feb 2002 07:02:11
I have a table named GL_CHART_OF_ACCOUNT having a compound primary key
(account_ref_id,company_code). The above PK is also a foreign key in the 
same table (self relationship). The relationship is one to many. I have 
made an entity bean representing the above table. I have an abstract 
method "setGL_CHART_OF_ACCOUNT(GL_CHART_OF_ACCOUNT cAccount)" for updating 
a relation. GL_CHART_OF_ACCOUNT is an EjbObject. 

Now I am updating a row 

First I call cAccounts=ejbFindByPrimaryKey(new 
com.gl.beans.GL_CHART_OF_ACCOUNT_PK(account_ref_id,company_code)). 






It returns the remote interface. 

when I update a row and call setGL_CHART_OF_ACCOUNT(cAccount) it throws 

Remote Exception EJB Exception: ; nested exception is: 
weblogic.transaction.RollbackException: Unexpected exception in 
beforeCompletion: sync = 
weblogic.ejb20.internal.TxManager$TxListener@1... 






Error writing from beforeCompletion - with nested exception: 

[weblogic.utils.NestedRuntimeException: Error writing from 
beforeCompletion - with nested exception: 

[java.rmi.NoSuchObjectException: Exception from 
ejbStore:javax.ejb.NoSuchEntityException: Bean with primary key: 
com.gl.beans.GL_CHART_OF_ACCOUNT_PK@1... not found.]] 






How do i fix it please give me the response........? During entity 
creation it is working fine 

I am using weblogic6.0Sp2 with EJB2.0 

Foreign keys are avaliable for all the values 
(account_ref_id,company_code). actualy the row which it says not found is 
the child row which i am trying to update and it 100% exists. The 
adminstation tool of weblogic server also shows that the row is present in 
the cache. 

my code is ************************************************************ 
public void updateChartOfAccounts(Integer accountRefId,String 
companyCode,String accountCode,String accountDesc,String accountNo,String 
basis,String accountLevel,String accountNature,String timeStamp,String 
parentCompanyCode,String parentAccountCode) throws 
RemoteException,FinderException,AccountCodeNotExistsException,CompanyN 
otExistsException,RecordHasBeenUpdatedException,ParentAccountCodeNotEx 
istsException,NoSuchObjectException { GL_CHART_OF_ACCOUNT glChartOfAccount 
= null; lookupCompanyHome(); lookupChartOfAccountHome(); try { //Find 
Remote Interface of the Parent ChartOfAccount Row if 
(parentCompanyCode.equals("") == false) { try { glParentChartOfAccount = 
glChartOfAccountHome.findByCompany_CodeAndAccount_Code 
(parentCompanyCode,parentAccountCode); } catch(javax.ejb.FinderException 
ex) { log("GL_CHART_OF_ACCOUNT_SESSION_EJB.updateChartOfAccounts() 
ParentAccountCodeNotExists Exception........................... "); throw 
new ParentAccountCodeNotExistsException ("Record1:Parent Account 
Code "+parentAccountCode+" Not Exists for 
Company "+parentCompanyCode); } } else { glParentChartOfAccount = 
null; } //Find Remote Interface of the Current ChartOfAccount Row try { 
glChartOfAccount = glChartOfAccountHome.findByCompany_CodeAndAccount_Code 
(companyCode,accountCode); } catch(javax.ejb.FinderException ex) { throw 
new AccountCodeNotExistsException ("Record1:Account Code Not Exists for 
Company "+companyCode); } Find Remote Interface of the Company Row try { 
glCompany= glCompanyHome.findByPrimaryKey(companyCode); } catch
(javax.ejb.FinderException ex) { throw new CompanyNotExistsException 
("Record1:Company Not Exists"); } 

glChartOfAccount.setAccount_Desc(accountDesc); 
glChartOfAccount.setAccount_No(accountNo); glChartOfAccount.setBasis
(basis); glChartOfAccount.setAccount_Level(accountLevel); 
glChartOfAccount.setAccount_Nature(accountNature); 
glChartOfAccount.setGL_CHART_OF_ACCOUNT(glParentChartOfAccount); 
glChartOfAccount.setTimeStamp(new java.sql.Timestamp(new java.util.Date
().getTime())); } catch(java.rmi.RemoteException ex) { log
("GL_CHART_OF_ACCOUNT_SESSION_EJB.updateChartOfAccounts() 
RemoteException........................... "); log(ex.getMessage()); } 
catch(Exception ex) { log
("GL_CHART_OF_ACCOUNT_SESSION_EJB.updateChartOfAccounts() 
Exception........................... "); log(ex.getMessage()); } } 
********************************************************** 
glChartOfAccount.setGL_CHART_OF_ACCOUNT(glParentChartOfAccount); 

the above method is throwing the exception 

<Jun 22, 2000 1:34:34 AM GMT+05:00 <Error <EJB <Exception during commit of 
transaction transaction=(IdHash=3428656,Name = [EJB 
GL_CHART_OF_ACCOUNT_SESSION_EJBImpl.updateChartOfAccounts 
()],Xid=289:b37b632e804b4999,Status=Rolled back. [Reason = 
weblogic.utils.NestedRuntimeException: Error writing from 
beforeCompletion - with nested exception: [java.rmi.NoSuchObjectException: 
Exception from ejbStore:javax.ejb.NoSuchEntityException: Bean with primary 
key: 'com.gl.beans.GL_CHART_OF_ACCOUNT_PK@1...' not 
found.]],numRepliesOwedMe=0,numRepliesOwedOthers=0,seconds since 
begin=0,seconds left=30,SCInfo[myserver]= (state=rolledback),properties
({weblogic.transaction.name=[EJB 
GL_CHART_OF_ACCOUNT_SESSION_EJBImpl.updateChartOfAccounts()]})): 
java.rmi.NoSuchObjectException: Exception from 
ejbStore:javax.ejb.NoSuchEntityException: Bean with primary 
key: 'com.gl.beans.GL_CHART_OF_ACCOUNT_PK@1...' not found. at 
weblogic.ejb20.internal.EJBRuntimeUtils.throwRemoteException 
(EJBRuntimeUtils.java:57) at 
weblogic.ejb20.manager.DBManager.beforeCompletion (DBManager.java:364) at 
weblogic.ejb20.internal.TxManager$TxListener.beforeCompletion 
(TxManager.java:211) at 
weblogic.transaction.internal.ServerSCInfo.callBeforeCompletions 
(ServerSCInfo.java:511) at 
weblogic.transaction.internal.ServerSCInfo.startPrePrepareAndChain 
(ServerSCInfo.java:78) at 
weblogic.transaction.internal.ServerTransactionImpl.localPrePrepareAnd 
Chain(ServerTransactionImpl.java:893) at 
weblogic.transaction.internal.ServerTransactionImpl.globalPrePrepare 
(ServerTransactionImpl.java:1229) at 
weblogic.transaction.internal.ServerTransactionImpl.commit 
(ServerTransactionImpl.java:168) at 
weblogic.ejb20.internal.BaseEJBObject.postInvoke (BaseEJBObject.java:201) 
at com.gl.beans.GL_CHART_OF_ACCOUNT_SESSION_EJBEOImpl.updateChartOfAccoun 
ts(GL_CHART_OF_ACCOUNT_SESSION_EJBEOImpl.java:80) at 
client.gl.beans.ChartOfAccountBean.editChartOfAccount 
(ChartOfAccountBean.java:107) at 
client.gl.beans.ChartOfAccountBean.processRequest 
(ChartOfAccountBean.java:64) at 
jsp_servlet._chartofaccountscontroller._jspService 
(_chartofaccountscontroller.java:240) at 
weblogic.servlet.jsp.JspBase.service(JspBase.java:27) at 
weblogic.servlet.internal.ServletStubImpl.invokeServlet 
(ServletStubImpl.java:213) at 
weblogic.servlet.internal.ServletStubImpl.invokeServlet 
(ServletStubImpl.java:246) at 
weblogic.servlet.internal.WebAppServletContext.invokeServlet 
(WebAppServletContext.java:1265) at 
weblogic.servlet.internal.ServletRequestImpl.execute 
(ServletRequestImpl.java:1631) at weblogic.kernel.ExecuteThread.execute 
(ExecuteThread.java:137) at weblogic.kernel.ExecuteThread.run
(ExecuteThread.java:120) 






**************************************************************** My PK 
class is as follow 

package com.gl.beans; 

import java.io.Serializable; 

final public class GL_CHART_OF_ACCOUNT_PK implements Serializable { 
private transient int m_hashCode = -1; public java.lang.Integer 
account_Ref_Id; public java.lang.String company_Code; 

public GL_CHART_OF_ACCOUNT_PK() { } public GL_CHART_OF_ACCOUNT_PK
(java.lang.Integer account_Ref_Id, java.lang.String company_Code) { 
this.account_Ref_Id = account_Ref_Id; this.company_Code = company_Code; } 
public int hashCode() { if (-1 == m_hashCode) { m_hashCode = 
(account_Ref_Id.hashCode()) ^ (company_Code.hashCode ()); } return 
m_hashCode; } public boolean equals(Object other) { try { 
com.gl.beans.GL_CHART_OF_ACCOUNT_PK other2 = 
(com.gl.beans.GL_CHART_OF_ACCOUNT_PK) other; return 
(this.account_Ref_Id.equals(other2.account_Ref_Id)) && 
(this.company_Code.equals(other2.company_Code)); } catch
(ClassCastException ex) { return false; } } } } 
************************************************************The following 
setter method gives the above error: 
glChartOfAccount.setGL_CHART_OF_ACCOUNT(glParentChartOfAccount); 

  Return to Index