This sounds like a Singleton pattern me. You could create a different class that is a Singleton that holds the static reference to the ObjectOutputStream. Then just have your pointcut get the object Singleton instance and have it write the data to the file.
On 2/19/09 6:07 PM, "baumar" <[email protected]> wrote: > > Hi, > > I'm trying to save information from several pointcut. More precise: I try to > catch method call that eventually will match some conditions, write it to a > class called DetailedSignature implements Serializable and save that > information in one place. > > As far as I - as aspectJ-newbie - understood, I cannot open a file for the > whole life of an aspect, as there is no constructor. Therefore I tried to > use an ObjectOutputStream like this: > > pointcut methodWithReturnValue() : (execution(!void > *.*(..))&&(!within(org.test.serversimulation.DetailedSignature)) > &&(!within(org.test.serversimulation.SignatureCracker)) > &&(!within(junit.*))); > > after() returning(Object o) : methodWithReturnValue() { > > try { > File testDataFile = new File("serializedTest.data"); > FileOutputStream fout = new FileOutputStream(testDataFile, > true); > ObjectOutputStream oos = new ObjectOutputStream(fout); > oos.writeObject(detailedSignature); > oos.flush(); > oos.close(); > > System.out.println("wrote detailedSignature > "+detailedSignature.toString()); > } > catch (Exception e) { e.printStackTrace(); } > } > > The program runs fine and I actually can see the data I want in the file. > But when I try to read it, I get the exception: > > java.io.StreamCorruptedException: invalid type code: AC > > Now I searched and found that this always seems to happen when trying to > append to an ObjectOutputStream multiple times > (http://forums.sun.com/thread.jspa?threadID=5177084) > > Now I'm a bit at a loss. I was thinking of trying to write kind of > bruteforce the information to a text file and based on that read and > recreate the object manually, but that is certainly not very flexible. > > Does anyone know a way how to keep the outputstream open and pass it to > several matches of the pointcut? > Or would you know a more elegant strategy of saving objects from within > several matches of a pointcut? > > Thanks for help > > Mark > > > > > (start of the file with captured method > > ¬í sr +org.test.serversimulation.DetailedSignature˜Ë±W„çÅ > Z isLiteralValueL allmodifierst Ljava/lang/String;L > callingobjectClassnameq ~ L callingobjectMethodNameq ~ L > callingobjectPackageq ~ L callingobjectPackageAndClassq ~ L > callingobjectParametersq ~ L modifierst Ljava/util/ArrayList;L > parametersq ~ L returnValueClassq ~ L returnValuePackageq ~ L > returnValuePackageAndClassq ~ L signatureLongStringq ~ > ... all methods catched appear in the file. Ron DiFrango Manager and Architect | CapTech Ventures (804) 855-9196-6308 | [email protected] _______________________________________________ aspectj-users mailing list [email protected] https://dev.eclipse.org/mailman/listinfo/aspectj-users
