次の問題があります。トランザクション状態を「開始、終了、または進行中」に設定できます。これを設定してから、Transactionオブジェクトをサーバーにシリアル化します。サーバーはそれを取得します。最初はチャームのように機能しますが(トランザクションが開始モードの場合)、オブジェクトを再送信すると、今回は「進行中」モードで、サーバーは引き続き「開始」モードでオブジェクトを表示します。シリアル化前の行と逆シリアル化後の行でコードをテストしましたが、これが間違いなく問題の原因です。どんな助けでも大歓迎です。関連するコードスニペットは次のとおりです。
シリアル化
if ((query instanceof Transaction) && !(trx.getTransactionState()==Consts.trx_start)) System.out.println("Not start");
oos.writeObject(query);
oos.flush();
デシリアライズ
while (true) {
Object statement = null;
try {
statement = ois.readObject();
if ((statement instanceof Transaction) && !(((Transaction) statement).getTransactionState()==Consts.trx_start)) System.out.println("Not start 2");
handle_statement(statement, socket);
} catch (IOException e) {
およびTransactionクラス:
public class Transaction extends Statement{
/**
*
*/
private static final long serialVersionUID = -2284996855537430822L;
Statement statement_list;
int trx_state;
/**
*
*/
public Transaction() {
trx_state = Consts.trx_start;;
}
/**
* @param statement
*/
public void setStatement(Statement statement ) {
statement_list = statement;
}
public void setTransactionState(int state) {
trx_state = state;
}
public int getTransactionState() {
return trx_state;
}
/**
* @return
*/
public Statement getStatement() {
return statement_list;
}