誰知道這個錯誤怎麼解決 javax.transaction.xa.XAException: 違反協議

lcbdl發表於2005-06-20
最近我遇到一個問題, 呼叫實體Bean更新資料庫的時候出現違反協議異常.具體配置:
DB: Oracle 8i App: Weblogic 8.1

表結構:
SWDM VARCHAR2(7) not null PK
NSRMC VARCHAR2(100) not null,
KHH VARCHAR2(40),
JYDZ VARCHAR2(100),
FDDBR VARCHAR2(20),
FRDH VARCHAR2(50),
BSR VARCHAR2(10),
BSRDH VARCHAR2(50),
BSRSJ VARCHAR2(50),
EMAIL VARCHAR2(50),
ZZJGDMZH VARCHAR2(50),
DLFS VARCHAR2(1) default '0' not null,
WTDZ VARCHAR2(1) default '0' not null,
DAILI VARCHAR2(1) default '0' not null,
BAOYAN VARCHAR2(1) default '0' not null,
APPLYTIME DATE,
REPLYTIME DATE,
SFPZ VARCHAR2(1),
HFNR VARCHAR2(200)

我建立一個CMP實體BEAN來表示這個表. 使用SESSION BEAN來呼叫, 其中有一個方法有問題:
public void approve(String swdm, String approved, String hfnr) throws
UpdateException {
String[] msg = null;
ApplicationHome ah = null;
if (swdm == null) {
msg = new String[] {"使用者申請", "沒有指定稅務程式碼"};
throw new UpdateException(msg);
}
if (approved == null ||
(!(approved.equals(Application.YES) ||
approved.equals(Application.NO)))) {
msg = new String[] {"使用者申請", "是否批准必須是字串0或者1"};
throw new UpdateException(msg);
}

try {
ah = (ApplicationHome) EJBObjectFactory.getEntityBeanHome(
Constant.APPLICATION);

Application a = ah.findByPrimaryKey(swdm);
////////////////////////////////////////////////
// 此處有問題, setSfpz()執行的時候總把資料庫的那個欄位改成亂碼,而且亂碼還經常變化, 有時還丟擲異常, 我使用客戶端測試SessionBean的時候還經常丟擲異常,如果把a.setReplyTime()註釋掉, 則沒有問題.
a.setHfnr(hfnr);
a.setReplytime(new Timestamp(Calendar.getInstance().getTimeInMillis()));
a.setSfpz(approved);
///////////////////////////////////////////////////

} catch (NamingException ex) {
ex.printStackTrace();
msg = new String[] {"使用者申請", "查詢EJB失敗"};
throw new UpdateException(msg);
} catch (FinderException ex) {
ex.printStackTrace();
msg = new String[] {"使用者申請", "沒有找到這個申請, 稅務程式碼:" + swdm};
throw new UpdateException(msg);
}

}

相關文章