fed deserializer cbp file instead of inputStream, so that we can write back 
upgraded Omodel.


Project: http://git-wip-us.apache.org/repos/asf/ode/repo
Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/f23e68ed
Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/f23e68ed
Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/f23e68ed

Branch: refs/heads/ODE-912
Commit: f23e68ede2a4011af6b8a3c583c3f2478325458e
Parents: 565ccda
Author: fangzhen <[email protected]>
Authored: Tue Aug 12 21:22:16 2014 +0800
Committer: fangzhen <[email protected]>
Committed: Tue Aug 12 21:22:16 2014 +0800

----------------------------------------------------------------------
 .../org/apache/ode/bpel/iapi/ProcessConf.java   |   7 +
 .../compiler_2_0/JavaSerializationTest.java     |   2 +-
 .../ode/bpel/compiler_2_0/MigrationTest.java    |   7 +-
 .../apache/ode/bpel/obj/serde/DeSerializer.java | 139 +++++++++++++------
 .../org/apache/ode/bpel/engine/BpelProcess.java |  16 +--
 .../org/apache/ode/store/DeploymentUnitDir.java |   3 +-
 .../org/apache/ode/store/ProcessConfImpl.java   |   8 ++
 .../java/org/apache/ode/jbi/OdeContext.java     |  16 +--
 8 files changed, 126 insertions(+), 72 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ode/blob/f23e68ed/bpel-api/src/main/java/org/apache/ode/bpel/iapi/ProcessConf.java
----------------------------------------------------------------------
diff --git a/bpel-api/src/main/java/org/apache/ode/bpel/iapi/ProcessConf.java 
b/bpel-api/src/main/java/org/apache/ode/bpel/iapi/ProcessConf.java
index 653fd29..526a199 100644
--- a/bpel-api/src/main/java/org/apache/ode/bpel/iapi/ProcessConf.java
+++ b/bpel-api/src/main/java/org/apache/ode/bpel/iapi/ProcessConf.java
@@ -84,8 +84,15 @@ public interface ProcessConf {
     /**
      * Get the CBP stream.
      * @return new stream to the CBP file.
+     * @deprecated use {@link #getCBPFile()} instead.
      */
     InputStream getCBPInputStream();
+    
+    /**
+     * Get the CBP file
+     * @return the CBP file
+     */
+    File getCBPFile();
 
     /**
      * Get the CBP file size.

http://git-wip-us.apache.org/repos/asf/ode/blob/f23e68ed/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/JavaSerializationTest.java
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/JavaSerializationTest.java
 
b/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/JavaSerializationTest.java
index a0c1126..eb4002d 100644
--- 
a/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/JavaSerializationTest.java
+++ 
b/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/JavaSerializationTest.java
@@ -40,7 +40,7 @@ public class JavaSerializationTest extends GoodCompileTest{
                        serializer.serialize(new FileOutputStream(cbpPath), 
                                        origi, format);
 
-                       DeSerializer deserializer = new DeSerializer(new 
FileInputStream(cbpPath));
+                       DeSerializer deserializer = new DeSerializer(new 
File(cbpPath));
                        OProcess desered = deserializer.deserialize();
 
                DeepEqualityHelper de = new DeepEqualityHelper();

http://git-wip-us.apache.org/repos/asf/ode/blob/f23e68ed/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/MigrationTest.java
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/MigrationTest.java
 
b/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/MigrationTest.java
index c9e4094..970a351 100644
--- 
a/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/MigrationTest.java
+++ 
b/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/MigrationTest.java
@@ -3,20 +3,16 @@ package org.apache.ode.bpel.compiler_2_0;
 import static org.junit.Assert.assertEquals;
 
 import java.io.File;
-import java.io.FileInputStream;
 import java.net.URI;
 import java.net.URL;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.ode.bpel.o.Serializer;
 import org.apache.ode.bpel.obj.OProcess;
 import org.apache.ode.bpel.obj.migrate.DeepEqualityHelper;
 import org.apache.ode.bpel.obj.migrate.DomElementComparator;
 import org.apache.ode.bpel.obj.migrate.ExtensibeImplEqualityComp;
 import org.apache.ode.bpel.obj.migrate.ObjectTraverser;
-import org.apache.ode.bpel.obj.migrate.OmOld2new;
-import org.apache.ode.bpel.obj.migrate.OmUpgradeVisitor;
 import org.apache.ode.bpel.obj.migrate.UpgradeChecker;
 import org.apache.ode.bpel.obj.serde.DeSerializer;
 import org.junit.Assert;
@@ -42,8 +38,7 @@ public class MigrationTest extends GoodCompileTest{
             OProcess nu = _compiler.compile2OProcess(bpelFile, 0);
                __log.debug("compiled new OProcess " + nu.getFieldContainer());
                
-               DeSerializer deSerializer = new DeSerializer(new 
FileInputStream(oldCbpFile));
-               deSerializer.setWriteBackFile(oldCbpFile); //writeback newest
+               DeSerializer deSerializer = new DeSerializer(oldCbpFile);
                OProcess migrated = deSerializer.deserialize();
                __log.debug("Read and migrated old OProcess " + 
migrated.getFieldContainer());
                

http://git-wip-us.apache.org/repos/asf/ode/blob/f23e68ed/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/DeSerializer.java
----------------------------------------------------------------------
diff --git 
a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/DeSerializer.java 
b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/DeSerializer.java
index cdea0d5..300ca12 100644
--- a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/DeSerializer.java
+++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/DeSerializer.java
@@ -4,6 +4,7 @@ import java.io.BufferedInputStream;
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.File;
+import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
@@ -33,17 +34,31 @@ import 
org.apache.ode.bpel.obj.serde.OmSerdeFactory.SerializeFormat;
  * @see OmSerdeFactory
  */
 public class DeSerializer {
-    private static final Log __log = LogFactory.getLog(DeSerializer.class);
+       private static final Log __log = LogFactory.getLog(DeSerializer.class);
 
-    private OProcessWrapper wrapper = new OProcessWrapper();
+       private OProcessWrapper wrapper = new OProcessWrapper();
        private InputStream is;
        private File writeBackFile;
+       private File cbpFile;
 
-       public DeSerializer(InputStream is) {
+       /**
+        * Constructor to create deserializer to deserialize from file.
+        * @param cbpFile the serialized compiled cbp file
+        * @throws FileNotFoundException
+        */
+       public DeSerializer(File cbpFile) throws FileNotFoundException {
+               this(new FileInputStream(cbpFile));
+               this.cbpFile = cbpFile;
+       }
+
+       DeSerializer(InputStream is) {
                this.is = new BufferedInputStream(is);
                deserializeHeader();
        }
 
+       /**
+        * Constructor to create serializer.
+        */
        public DeSerializer() {
        }
 
@@ -58,10 +73,11 @@ public class DeSerializer {
                wrapper.setFormat(format);
                serialize(out);
        }
-       private void serialize(OutputStream out){
+
+       private void serialize(OutputStream out) {
                try {
-               DataOutputStream dos = new DataOutputStream(out);
-               dos.write(wrapper.getMagic());
+                       DataOutputStream dos = new DataOutputStream(out);
+                       dos.write(wrapper.getMagic());
                        ObjectOutputStream oos = new ObjectOutputStream(out);
                        oos.writeObject(wrapper.getFormat());
                        oos.writeLong(wrapper.getCompileTime());
@@ -83,21 +99,22 @@ public class DeSerializer {
 
        private void deserializeHeader() {
                try {
-               DataInputStream oin = new DataInputStream(is);
-               oin.mark(OProcessWrapper.CURRENT_MAGIC_NUMBER.length + 2);
-               byte[] magic = new 
byte[OProcessWrapper.CURRENT_MAGIC_NUMBER.length];
-               oin.read(magic, 0, magic.length);
-               if (Arrays.equals(Serializer.MAGIC_NUMBER_OFH_20040908, magic) 
||
-                               
Arrays.equals(Serializer.MAGIC_NUMBER_OFH_20061101, magic)){
-                       oin.reset();
-                       Serializer serializer = new Serializer(is);
-                       wrapper.setMagic(magic);
-                       wrapper.setGuid(serializer.guid);
-                       wrapper.setCompileTime(serializer.compileTime);
-                       wrapper.setType(serializer.type);
-                       
wrapper.setFormat(SerializeFormat.FORMAT_SERIALIZED_LEGACY);
-               }else{
-                       ObjectInputStream ois = new ObjectInputStream(is);
+                       DataInputStream oin = new DataInputStream(is);
+                       oin.mark(OProcessWrapper.CURRENT_MAGIC_NUMBER.length + 
2);
+                       byte[] magic = new 
byte[OProcessWrapper.CURRENT_MAGIC_NUMBER.length];
+                       oin.read(magic, 0, magic.length);
+                       if (Arrays.equals(Serializer.MAGIC_NUMBER_OFH_20040908, 
magic)
+                                       || 
Arrays.equals(Serializer.MAGIC_NUMBER_OFH_20061101,
+                                                       magic)) {
+                               oin.reset();
+                               Serializer serializer = new Serializer(is);
+                               wrapper.setMagic(magic);
+                               wrapper.setGuid(serializer.guid);
+                               wrapper.setCompileTime(serializer.compileTime);
+                               wrapper.setType(serializer.type);
+                               
wrapper.setFormat(SerializeFormat.FORMAT_SERIALIZED_LEGACY);
+                       } else {
+                               ObjectInputStream ois = new 
ObjectInputStream(is);
                                wrapper = new OProcessWrapper();
                                wrapper.setMagic(magic);
                                wrapper.setFormat((SerializeFormat) 
ois.readObject());
@@ -106,8 +123,13 @@ public class DeSerializer {
                                wrapper.setType((QName) ois.readObject());
                                wrapper.setOtherHeaders((Map<String, Object>) 
(ois.readObject()));
                                wrapper.checkValid();
-               }
+                       }
                } catch (Exception e1) {
+                       try {
+                               is.close();
+                       } catch (IOException e2) {
+                               e2.printStackTrace();
+                       }
                        SerializaionRtException e = new SerializaionRtException(
                                        "Error when reading Headers during 
deseriazation");
                        e.initCause(e1);
@@ -115,11 +137,28 @@ public class DeSerializer {
                }
        }
 
+       /**
+        * Deserialize the compiled <code>OProcess</code>.
+        * @return The deserialized OProcess
+        */
        public OProcess deserialize() {
                OmSerdeFactory factory = new OmSerdeFactory();
                factory.setFormat(wrapper.getFormat());
-               OmDeserializer de = factory.createOmDeserializer(is);
-               OProcess process = de.deserialize();
+               OProcess process = null;
+               try {
+                       OmDeserializer de = factory.createOmDeserializer(is);
+                       process = de.deserialize();
+               } finally {
+                       if (cbpFile != null) {
+                               //this means that <code>is</code> is 
constructed from cbpFile,
+                               // and we are reaponsible to close it.
+                               try {
+                                       is.close();
+                               } catch (IOException e) {
+                                       e.printStackTrace();
+                               }
+                       }
+               }
                wrapper.setProcess(process);
                //upgrade
                UpgradeChecker checker = new UpgradeChecker();
@@ -131,30 +170,48 @@ public class DeSerializer {
                        traverser = new ObjectTraverser();
                        traverser.accept(upgrader);
                        traverser.traverseObject(process);
-                       if (writeBackFile != null){
-                               writeBack();
-                       }
+                       writeBack();
                }
                return process;
        }
 
        private void writeBack() {
+               if (writeBackFile == null && cbpFile == null) {
+                       // we dont kown where to writeback;
+                       return;
+               }
+               if (writeBackFile == null) {
+                       // write back to original cbp file;
+                       writeBackFile = cbpFile;
+               }
                byte[] magic = wrapper.getMagic();
-        if (Arrays.equals(Serializer.MAGIC_NUMBER_OFH_20040908, magic) ||
-                       Arrays.equals(Serializer.MAGIC_NUMBER_OFH_20061101, 
magic)){
-               //upgrade to new omodel magic and format
-               wrapper.setMagic(OProcessWrapper.CURRENT_MAGIC_NUMBER);
-               wrapper.setFormat(OmSerdeFactory.FORMAT_SERIALIZED_DEFAULT);
-        }
-        OutputStream wbStream;
-               try {
-                       if (writeBackFile.exists()){
-                               writeBackFile.renameTo(new 
File(writeBackFile.getAbsolutePath()+ ".bak"));
+               if (Arrays.equals(Serializer.MAGIC_NUMBER_OFH_20040908, magic)
+                               || 
Arrays.equals(Serializer.MAGIC_NUMBER_OFH_20061101, magic)) {
+                       //upgrade to new omodel magic and format
+                       wrapper.setMagic(OProcessWrapper.CURRENT_MAGIC_NUMBER);
+                       
wrapper.setFormat(OmSerdeFactory.FORMAT_SERIALIZED_DEFAULT);
+               }
+               OutputStream wbStream = null;
+               if (writeBackFile.exists()) {
+                       if (writeBackFile.renameTo(new 
File(writeBackFile.getAbsolutePath()
+                                       + ".bak"))) {
+                               try {
+                                       wbStream = new 
FileOutputStream(writeBackFile);
+                                       serialize(wbStream);
+                               } catch (FileNotFoundException e) {
+                                       __log.info("Error when write back 
upgraded process. file not found");
+                               } finally {
+                                       if (wbStream != null) {
+                                               try {
+                                                       wbStream.close();
+                                               } catch (IOException e) {
+                                                       e.printStackTrace();
+                                               }
+                                       }
+                               }
+                       } else {
+                               __log.debug("backup file failed. skip writing 
back upgraded file");
                        }
-                       wbStream = new FileOutputStream(writeBackFile);
-                       serialize(wbStream);
-               } catch (FileNotFoundException e) {
-                       __log.info("Error when write back upgraded process. 
file not found");
                }
        }
 

http://git-wip-us.apache.org/repos/asf/ode/blob/f23e68ed/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java
----------------------------------------------------------------------
diff --git 
a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java 
b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java
index 77ed24e..817201a 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java
@@ -18,6 +18,7 @@
  */
 package org.apache.ode.bpel.engine;
 
+import java.io.File;
 import java.io.InputStream;
 import java.net.URI;
 import java.util.ArrayList;
@@ -65,10 +66,7 @@ import org.apache.ode.bpel.obj.OExpressionLanguage;
 import org.apache.ode.bpel.obj.OMessageVarType;
 import org.apache.ode.bpel.obj.OPartnerLink;
 import org.apache.ode.bpel.obj.OProcess;
-import org.apache.ode.bpel.obj.OProcessWrapper;
 import org.apache.ode.bpel.obj.serde.DeSerializer;
-import org.apache.ode.bpel.obj.serde.OmDeserializer;
-import org.apache.ode.bpel.obj.serde.OmSerdeFactory;
 import org.apache.ode.bpel.runtime.BpelRuntimeContext;
 import org.apache.ode.bpel.runtime.ExpressionLanguageRuntimeRegistry;
 import org.apache.ode.bpel.runtime.InvalidProcessException;
@@ -563,9 +561,9 @@ public class BpelProcess {
      *            input stream
      * @return process information from configuration database
      */
-    private OProcess deserializeCompiledProcess(InputStream is) throws 
Exception {
+    private OProcess deserializeCompiledProcess(File file) throws Exception {
         OProcess compiledProcess;
-        DeSerializer deserializer = new DeSerializer(is);
+        DeSerializer deserializer = new DeSerializer(file);
         compiledProcess = deserializer.deserialize();
         return compiledProcess;
     }
@@ -878,12 +876,8 @@ public class BpelProcess {
                 __log.debug("Rehydrating process " + _pconf.getProcessId());
             }
             try {
-                InputStream inputStream = _pconf.getCBPInputStream();
-                try {
-                    _oprocess = deserializeCompiledProcess(inputStream);
-                } finally {
-                    inputStream.close();
-                }
+               File file = _pconf.getCBPFile();
+               _oprocess = deserializeCompiledProcess(file);
             } catch (Exception e) {
                 String errmsg = "The process " + _pid + " is no longer 
available.";
                 __log.error(errmsg, e);

http://git-wip-us.apache.org/repos/asf/ode/blob/f23e68ed/bpel-store/src/main/java/org/apache/ode/store/DeploymentUnitDir.java
----------------------------------------------------------------------
diff --git 
a/bpel-store/src/main/java/org/apache/ode/store/DeploymentUnitDir.java 
b/bpel-store/src/main/java/org/apache/ode/store/DeploymentUnitDir.java
index 213c7de..3c5e577 100644
--- a/bpel-store/src/main/java/org/apache/ode/store/DeploymentUnitDir.java
+++ b/bpel-store/src/main/java/org/apache/ode/store/DeploymentUnitDir.java
@@ -218,8 +218,7 @@ class DeploymentUnitDir {
     private CBPInfo loadCBPInfo(File f) {
         InputStream is = null;
         try {
-            is = new FileInputStream(f);
-            DeSerializer deserializer = new DeSerializer(is);
+            DeSerializer deserializer = new DeSerializer(f);
             CBPInfo info = new 
CBPInfo(deserializer.getWrapper().getType(),deserializer.getWrapper().getGuid(),
 f);
             return info;
         } catch (Exception e) {

http://git-wip-us.apache.org/repos/asf/ode/blob/f23e68ed/bpel-store/src/main/java/org/apache/ode/store/ProcessConfImpl.java
----------------------------------------------------------------------
diff --git a/bpel-store/src/main/java/org/apache/ode/store/ProcessConfImpl.java 
b/bpel-store/src/main/java/org/apache/ode/store/ProcessConfImpl.java
index d78601f..cf556c6 100644
--- a/bpel-store/src/main/java/org/apache/ode/store/ProcessConfImpl.java
+++ b/bpel-store/src/main/java/org/apache/ode/store/ProcessConfImpl.java
@@ -269,6 +269,14 @@ public class ProcessConfImpl implements ProcessConf {
             throw new ContextException("File Not Found: " + cbpInfo.cbp, e);
         }
     }
+    
+    @Override
+    public File getCBPFile(){
+        CBPInfo cbpInfo = _du.getCBPInfo(getType());
+        if (cbpInfo == null)
+            throw new ContextException("CBP record not found for type " + 
getType());
+        return cbpInfo.cbp;
+    }
 
     public long getCBPFileSize() {
         CBPInfo cbpInfo = _du.getCBPInfo(getType());

http://git-wip-us.apache.org/repos/asf/ode/blob/f23e68ed/jbi/src/main/java/org/apache/ode/jbi/OdeContext.java
----------------------------------------------------------------------
diff --git a/jbi/src/main/java/org/apache/ode/jbi/OdeContext.java 
b/jbi/src/main/java/org/apache/ode/jbi/OdeContext.java
index f633a43..c8fed8d 100644
--- a/jbi/src/main/java/org/apache/ode/jbi/OdeContext.java
+++ b/jbi/src/main/java/org/apache/ode/jbi/OdeContext.java
@@ -18,7 +18,7 @@
  */
 package org.apache.ode.jbi;
 
-import java.io.InputStream;
+import java.io.File;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Map;
@@ -48,10 +48,7 @@ import org.apache.ode.bpel.iapi.EndpointReference;
 import org.apache.ode.bpel.iapi.ProcessConf;
 import org.apache.ode.bpel.obj.OPartnerLink;
 import org.apache.ode.bpel.obj.OProcess;
-import org.apache.ode.bpel.obj.OProcessWrapper;
 import org.apache.ode.bpel.obj.serde.DeSerializer;
-import org.apache.ode.bpel.obj.serde.OmDeserializer;
-import org.apache.ode.bpel.obj.serde.OmSerdeFactory;
 import org.apache.ode.bpel.pmapi.InstanceManagement;
 import org.apache.ode.bpel.pmapi.ProcessManagement;
 import org.apache.ode.jbi.msgmap.Mapper;
@@ -198,14 +195,11 @@ final public class OdeContext {
             service = new OdeService(this, endpoint);
         try {
             ProcessConf pc = _store.getProcessConfiguration(pid);
-            InputStream is = pc.getCBPInputStream();
+            File cbpFile = pc.getCBPFile();
             OProcess compiledProcess = null;
-            try {
-               DeSerializer deserializer = new DeSerializer(is);
-                compiledProcess = deserializer.deserialize();
-            } finally {
-                is.close();
-            }
+               DeSerializer deserializer = new DeSerializer(cbpFile);
+            compiledProcess = deserializer.deserialize();
+            
             QName portType = null;
             for (Map.Entry<String, Endpoint> provide : 
pc.getProvideEndpoints().entrySet()) {
                 if (provide.getValue().equals(endpoint)) {

Reply via email to