Update of /cvsroot/ebxmlms/ebxmlms/src/hk/hku/cecid/phoenix/message/handler
In directory sc8-pr-cvs1:/tmp/cvs-serv28800/src/hk/hku/cecid/phoenix/message/handler
Modified Files:
FilePersistenceHandler.java MessageServer.java
ObjectStorePersistenceHandler.java Transaction.java
Log Message:
Change the MessageServer to store and read the Message Listener from
PersistenceHandler rather than object store.
Index: FilePersistenceHandler.java
===================================================================
RCS file: /cvsroot/ebxmlms/ebxmlms/src/hk/hku/cecid/phoenix/message/handler/FilePersistenceHandler.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** FilePersistenceHandler.java 5 Jan 2004 09:57:43 -0000 1.3
--- FilePersistenceHandler.java 5 Jan 2004 11:24:08 -0000 1.4
***************
*** 220,223 ****
--- 220,232 ----
/**
+ * If this method return true, the output stream can only be gotten once
+ * from the datasource created
+ * @return the boolean to set whether to block output stream gotten twice
+ * from the data source.
+ */
+ protected boolean isBlockingOutputStream() {
+ return true;
+ }
+ /**
* The self implemented FileDataSource
* The reason to re-implement it is to support the getOutputStream()
***************
*** 288,292 ****
throw new IOException("Cannot get OutputStream");
}
! outputStreamGotten = true;
return new FileOutputStream(file);
}
--- 297,301 ----
throw new IOException("Cannot get OutputStream");
}
! setOutputStreamGetFail();
return new FileOutputStream(file);
}
***************
*** 297,301 ****
*/
private void setOutputStreamGetFail() {
! outputStreamGotten = true;
}
}
--- 306,312 ----
*/
private void setOutputStreamGetFail() {
! if (isBlockingOutputStream()) {
! outputStreamGotten = true;
! }
}
}
Index: MessageServer.java
===================================================================
RCS file: /cvsroot/ebxmlms/ebxmlms/src/hk/hku/cecid/phoenix/message/handler/MessageServer.java,v
retrieving revision 1.144
retrieving revision 1.145
diff -C2 -d -r1.144 -r1.145
*** MessageServer.java 15 Dec 2003 09:51:34 -0000 1.144
--- MessageServer.java 5 Jan 2004 11:24:08 -0000 1.145
***************
*** 84,87 ****
--- 84,90 ----
import java.io.IOException;
import java.io.InputStream;
+ import java.io.ObjectInputStream;
+ import java.io.ObjectOutputStream;
+ import java.io.OutputStream;
import java.io.PushbackInputStream;
import java.net.URL;
***************
*** 2505,2512 ****
--- 2508,2522 ----
resultSet = query.executeQuery();
final String objectName;
+ final DataSource dataSource;
+ PersistenceHandler handler
+ = PersistenceManager.getObjectStorePersistenceHandler();
if (!resultSet.next()) {
+ dataSource = handler.createNewObject();
+ objectName = dataSource.getName();
+ /*
objectName = DirectoryManager.getObjectStoreFileName
(appContext.getCpaId() + appContext.getConversationId()
+ appContext.getService() + appContext.getAction());
+ */
update =
DbTableManager.DBTABLE_MSH_CONFIG.getInsertQuery(tx.getConnection(),
***************
*** 2547,2550 ****
--- 2557,2561 ----
throw new MessageServerException(err);
}
+ dataSource = handler.getObject(objectName);
logger.debug("update MSHConfig");
update =
***************
*** 2578,2584 ****
);
}
!
String path = objectStore + File.separator + objectName;
tx.storeObject(messageListener, path);
tx.executeUpdate(new PreparedStatement[]{update});
} catch (MessageServerException e) {
--- 2589,2622 ----
);
}
! /**
String path = objectStore + File.separator + objectName;
tx.storeObject(messageListener, path);
+ */
+ OutputStream stream = null;
+ ObjectOutputStream objStream = null;
+ try {
+ stream = dataSource.getOutputStream();
+ objStream = new ObjectOutputStream(stream);
+ objStream.writeObject(messageListener);
+ objStream.flush();
+ } catch (IOException e) {
+ String err = ErrorMessages.getMessage(
+ ErrorMessages.ERR_HERMES_FILE_IO_ERROR, e,
+ "cannot store object to Persistence Handler "
+ + "using name : " + objectName);
+ throw new TransactionException(err);
+ } catch (Exception e) {
+ String err = ErrorMessages.getMessage(
+ ErrorMessages.ERR_HERMES_UNKNOWN_ERROR, e);
+ throw new TransactionException(err);
+ } finally {
+ if (stream != null) {
+ stream.close();
+ }
+ if (objStream != null) {
+ objStream.close();
+ }
+ }
+ tx.storePersistenceObject(objectName, handler);
tx.executeUpdate(new PreparedStatement[]{update});
} catch (MessageServerException e) {
***************
*** 2647,2654 ****
null : new URL(urlStr);
! final String objectName =
! resultSet.getString(DbTableManager.ATTRIBUTE_MESSAGE_LISTENER);
final MessageListener messageListener = (MessageListener)
! tx.readObject(objectStore + File.separator + objectName);
final MessageServiceHandlerConfig config =
--- 2685,2730 ----
null : new URL(urlStr);
! final String objectName = resultSet.getString(
! DbTableManager.ATTRIBUTE_MESSAGE_LISTENER);
! /*
final MessageListener messageListener = (MessageListener)
! tx.readObject(objectStore + File.separator + objectName);
! */
! PersistenceHandler handler
! = PersistenceManager.getObjectStorePersistenceHandler();
! InputStream stream = null;
! ObjectInputStream objStream = null;
! final MessageListener messageListener;
! try {
! stream = handler.getObject(objectName).getInputStream();
! objStream = new ObjectInputStream(stream);
! messageListener = (MessageListener) objStream.readObject();
! } catch (IOException e) {
! String err = ErrorMessages.getMessage(
! ErrorMessages.ERR_HERMES_FILE_IO_ERROR, e,
! "cannot read object to Persistence Handler "
! + "using name : " + objectName);
! logger.error(err);
! throw new TransactionException(err);
! } catch (ClassNotFoundException e) {
! String err = ErrorMessages.getMessage(
! ErrorMessages.ERR_HERMES_FILE_IO_ERROR, e,
! "cannot read object to Persistence Handler "
! + "using name : " + objectName);
! logger.error(err);
! throw new TransactionException(err);
! } catch (Exception e) {
! String err = ErrorMessages.getMessage(
! ErrorMessages.ERR_HERMES_UNKNOWN_ERROR, e);
! logger.error(err);
! throw new TransactionException(err);
! } finally {
! if (stream != null) {
! stream.close();
! }
! if (objStream != null) {
! objStream.close();
! }
! }
final MessageServiceHandlerConfig config =
Index: ObjectStorePersistenceHandler.java
===================================================================
RCS file: /cvsroot/ebxmlms/ebxmlms/src/hk/hku/cecid/phoenix/message/handler/ObjectStorePersistenceHandler.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** ObjectStorePersistenceHandler.java 31 Dec 2003 04:06:42 -0000 1.1
--- ObjectStorePersistenceHandler.java 5 Jan 2004 11:24:09 -0000 1.2
***************
*** 131,133 ****
--- 131,142 ----
setCurrentDirectory(objectDir);
}
+ /**
+ * If this method return true, the output stream can only be gotten once
+ * from the datasource created
+ * @return the boolean to set whether to block output stream gotten twice
+ * from the data source.
+ */
+ protected boolean isBlockingOutputStream() {
+ return false;
+ }
}
Index: Transaction.java
===================================================================
RCS file: /cvsroot/ebxmlms/ebxmlms/src/hk/hku/cecid/phoenix/message/handler/Transaction.java,v
retrieving revision 1.17
retrieving revision 1.18
diff -C2 -d -r1.17 -r1.18
*** Transaction.java 5 Jan 2004 09:57:43 -0000 1.17
--- Transaction.java 5 Jan 2004 11:24:09 -0000 1.18
***************
*** 277,284 ****
--- 277,301 ----
}
+ /**
+ * store the persistence object to the transaction,
+ * will be removed if the transaction rollback.
+ * @param name the name of the persistence object
+ * @param handler the persistence handler of the persistence object
+ */
public void storePersistenceObject(String name,
PersistenceHandler handler) {
persistenceList.add(new PersistenceObject(handler, name));
}
+
+ /**
+ * remove the persistence object from the transaction,
+ * the object will not be affect if the transaction is rollback or commit.
+ * @param name the name of the persistence object
+ * @param handler the persistence handler of the persistence object
+ */
+ public void removePersistenceObject(String name,
+ PersistenceHandler handler) {
+ persistenceList.remove(new PersistenceObject(handler, name));
+ }
/**
***************
*** 590,598 ****
*
* @author pykoon
- * @version $Revision$
*/
private class PersistenceObject {
private PersistenceHandler handler;
private String name;
public PersistenceObject(PersistenceHandler handler, String name) {
this.name = name;
--- 607,628 ----
*
* @author pykoon
*/
private class PersistenceObject {
+
+ /**
+ * The PersistenceHandler associate with the Persistence object
+ */
private PersistenceHandler handler;
+
+ /**
+ * The name of the Persistence object
+ */
private String name;
+
+ /**
+ * Construct the Persistence Object
+ * @param handler the PersistecneHandler
+ * @param name the name of the Persistence Object
+ */
public PersistenceObject(PersistenceHandler handler, String name) {
this.name = name;
***************
*** 600,609 ****
--- 630,655 ----
}
+ /**
+ * get the PersistenceHandler
+ * @return the PersistenceHandler
+ */
public PersistenceHandler getPersistenceHandler() {
return handler;
}
+ /**
+ * get the name of Persistence Object
+ * @return the name of the Persistence Object
+ */
public String getName() {
return name;
+ }
+
+ public boolean equals(Object a) {
+ if (a instanceof PersistenceObject) {
+ PersistenceObject obj = (PersistenceObject) a;
+ return obj.handler == handler && name.equals(obj.name);
+ }
+ return false;
}
}
|