You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@turbine.apache.org by jo...@apache.org on 2001/10/13 01:56:33 UTC

cvs commit: jakarta-turbine-fulcrum/src/services/java/org/apache/fulcrum/intake TurbineIntakeService.java

jon         01/10/12 16:56:33

  Modified:    src/services/java/org/apache/fulcrum/intake
                        TurbineIntakeService.java
  Log:
  make sure to close a stream
  
  methodize the writeAppData code so that it can be reused internally. this
  is to get around a possible exception that i just ran into:
  
  2001-10-12 16:25:53,292 [HttpProcessor[8080][0]] ERROR
  org.apache.fulcrum.Turbin
  eServices - Could not instantiate tool org.apache.turbine.tool.IntakeTool
  to add
   to the context
  java.io.EOFException
          at java.io.DataInputStream.readFully(DataInputStream.java:158)
          at
  java.io.ObjectInputStream.readFully(ObjectInputStream.java:2071)
          at
  java.io.ObjectInputStream.inputClassFields(ObjectInputStream.java:225
  2)
          at
  java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:51
  9)
          at java.util.ArrayList.readObject(ArrayList.java:523)
          at java.lang.reflect.Method.invoke(Native Method)
          at
  java.io.ObjectInputStream.invokeObjectReader(ObjectInputStream.java:2
  214)
          at
  java.io.ObjectInputStream.inputObject(ObjectInputStream.java:1411)
          at
  java.io.ObjectInputStream.readObject(ObjectInputStream.java:386)
          at
  java.io.ObjectInputStream.inputClassFields(ObjectInputStream.java:226
  3)
          at
  java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:51
  9)
          at
  org.apache.fulcrum.intake.xmlmodel.XmlField.readObject(XmlField.java:
  556)
          at java.lang.reflect.Method.invoke(Native Method)
          at
  java.io.ObjectInputStream.invokeObjectReader(ObjectInputStream.java:2
  214)
          at
  java.io.ObjectInputStream.inputObject(ObjectInputStream.java:1411)
          at
  java.io.ObjectInputStream.readObject(ObjectInputStream.java:386)
          at
  java.io.ObjectInputStream.readObject(ObjectInputStream.java:236)
          at java.util.ArrayList.readObject(ArrayList.java:531)
          at java.lang.reflect.Method.invoke(Native Method)
          at
  java.io.ObjectInputStream.invokeObjectReader(ObjectInputStream.java:2
  214)
          at
  java.io.ObjectInputStream.inputObject(ObjectInputStream.java:1411)
          at
  java.io.ObjectInputStream.readObject(ObjectInputStream.java:386)
          at
  java.io.ObjectInputStream.inputClassFields(ObjectInputStream.java:226
  3)
          at
  java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:51
  9)
          at
  java.io.ObjectInputStream.inputObject(ObjectInputStream.java:1412)
          at
  java.io.ObjectInputStream.readObject(ObjectInputStream.java:386)
          at
  java.io.ObjectInputStream.readObject(ObjectInputStream.java:236)
          at java.util.ArrayList.readObject(ArrayList.java:531)
          at java.lang.reflect.Method.invoke(Native Method)
          at
  java.io.ObjectInputStream.invokeObjectReader(ObjectInputStream.java:2
  214)
          at
  java.io.ObjectInputStream.inputObject(ObjectInputStream.java:1411)
          at
  java.io.ObjectInputStream.readObject(ObjectInputStream.java:386)
          at
  java.io.ObjectInputStream.inputClassFields(ObjectInputStream.java:226
  3)
          at
  java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:51
  9)
          at
  java.io.ObjectInputStream.inputObject(ObjectInputStream.java:1412)
          at
  java.io.ObjectInputStream.readObject(ObjectInputStream.java:386)
          at
  java.io.ObjectInputStream.readObject(ObjectInputStream.java:236)
          at
  org.apache.fulcrum.intake.TurbineIntakeService.init(TurbineIntakeServ
  ice.java:166)
          at
  org.apache.fulcrum.BaseServiceBroker.getService(BaseServiceBroker.jav
  a:630)
          at
  org.apache.fulcrum.intake.TurbineIntake.getService(TurbineIntake.java
  :253)
          at
  org.apache.fulcrum.intake.TurbineIntake.getGroupNames(TurbineIntake.j
  ava:196)
          at org.apache.fulcrum.intake.Intake.<init>(Intake.java:97)
          at org.apache.turbine.tool.IntakeTool.<init>(IntakeTool.java:72)
          at java.lang.Class.newInstance0(Native Method)
          at java.lang.Class.newInstance(Class.java:237)
          at
  org.apache.fulcrum.factory.TurbineFactoryService.getInstance(TurbineF
  actoryService.java:396)
          at
  org.apache.fulcrum.factory.TurbineFactoryService.getInstance(TurbineF
  actoryService.java:214)
          at
  org.apache.fulcrum.pool.TurbinePoolService.getInstance(TurbinePoolSer
  vice.java:390)
          at
  org.apache.turbine.services.pull.TurbinePullService.populateWithReque
  stTools(TurbinePullService.java:467)
          at
  org.apache.turbine.services.pull.TurbinePullService.populateContext(T
  urbinePullService.java:393)
          at
  org.apache.turbine.services.pull.TurbinePullService.getRuntimeContext
  (TurbinePullService.java:367)
          at
  org.apache.turbine.services.pull.TurbinePull.getRuntimeContext(Turbin
  ePull.java:107)
          at
  org.apache.turbine.modules.Module.getTemplateContext(Module.java:150)
          at
  org.tigris.scarab.pages.ScarabPage.preExecuteAction(ScarabPage.java:8
  2)
          at org.apache.turbine.Turbine.doGet(Turbine.java:265)
  
  Revision  Changes    Path
  1.3       +55 -30    jakarta-turbine-fulcrum/src/services/java/org/apache/fulcrum/intake/TurbineIntakeService.java
  
  Index: TurbineIntakeService.java
  ===================================================================
  RCS file: /home/cvs/jakarta-turbine-fulcrum/src/services/java/org/apache/fulcrum/intake/TurbineIntakeService.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- TurbineIntakeService.java	2001/09/29 00:46:29	1.2
  +++ TurbineIntakeService.java	2001/10/12 23:56:33	1.3
  @@ -87,7 +87,7 @@
    * on an XML specification.
    *
    * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
  - * @version $Id: TurbineIntakeService.java,v 1.2 2001/09/29 00:46:29 jon Exp $
  + * @version $Id: TurbineIntakeService.java,v 1.3 2001/10/12 23:56:33 jon Exp $
    */
   public class TurbineIntakeService
       extends BaseService
  @@ -161,51 +161,30 @@
               if ( serialAppData.exists()
                    && serialAppData.lastModified() > xmlFile.lastModified() )
               {
  -                InputStream in = new FileInputStream(serialAppData);
  -                ObjectInputStream p = new ObjectInputStream(in);
  -                appData = (AppData)p.readObject();
  -                in.close();
  -            }
  -            else
  -            {
  -                XmlToAppData xmlApp = new XmlToAppData();
  -                appData = xmlApp.parseFile(xmlPath);
  -                OutputStream out = null;
                   InputStream in = null;
                   try
                   {
  -                    // write the appData file out
  -                    out = new FileOutputStream(serialAppData);
  -                    ObjectOutputStream p = new ObjectOutputStream(out);
  -                    p.writeObject(appData);
  -                    p.flush();
  -
  -                    // read the file back in. for some reason on OSX 10.1
  -                    // this is necessary.
                       in = new FileInputStream(serialAppData);
  -                    ObjectInputStream pin = new ObjectInputStream(in);
  -                    appData = (AppData)pin.readObject();
  +                    ObjectInputStream p = new ObjectInputStream(in);
  +                    appData = (AppData)p.readObject();
                   }
                   catch (Exception e)
                   {
  -                    getCategory().info(
  -                        "Intake initialization could not be serialized " +
  -                        "because writing to " + appDataPath + " was not " +
  -                        "allowed.  This will require that the xml file be " +
  -                        "parsed when restarting the application.");
  +                    // We got a corrupt file for some reason
  +                    writeAppData(xmlPath, appDataPath, serialAppData);
                   }
                   finally
                   {
  -                    if (out != null)
  -                    {
  -                        out.close();
  -                    }
                       if (in != null)
                       {
                           in.close();
                       }
                   }
               }
  +            else
  +            {
  +                writeAppData(xmlPath, appDataPath, serialAppData);
  +            }
   
               groupNames = new String[appData.getGroups().size()];
               groupKeyMap = new HashMap();
  @@ -243,6 +222,52 @@
           {
               throw new InitializationException(
                   "TurbineIntakeService failed to initialize", e);
  +        }
  +    }
  +
  +    /**
  +     * This method writes the appData file into Objects and stores
  +     * the information into this classes appData property
  +     */
  +    private void writeAppData(String xmlPath, String appDataPath, File serialAppData)
  +        throws Exception
  +    {
  +        XmlToAppData xmlApp = new XmlToAppData();
  +        appData = xmlApp.parseFile(xmlPath);
  +        OutputStream out = null;
  +        InputStream in = null;
  +        try
  +        {
  +            // write the appData file out
  +            out = new FileOutputStream(serialAppData);
  +            ObjectOutputStream p = new ObjectOutputStream(out);
  +            p.writeObject(appData);
  +            p.flush();
  +
  +            // read the file back in. for some reason on OSX 10.1
  +            // this is necessary.
  +            in = new FileInputStream(serialAppData);
  +            ObjectInputStream pin = new ObjectInputStream(in);
  +            appData = (AppData)pin.readObject();
  +        }
  +        catch (Exception e)
  +        {
  +            getCategory().info(
  +                "Intake initialization could not be serialized " +
  +                "because writing to " + appDataPath + " was not " +
  +                "allowed.  This will require that the xml file be " +
  +                "parsed when restarting the application.");
  +        }
  +        finally
  +        {
  +            if (out != null)
  +            {
  +                out.close();
  +            }
  +            if (in != null)
  +            {
  +                in.close();
  +            }
           }
       }
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: turbine-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: turbine-dev-help@jakarta.apache.org