You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by wh...@apache.org on 2005/01/11 18:01:47 UTC

cvs commit: ws-axis/c/tools/org/apache/axis/tools/trace TraceInstrumentor.java Tracer.java tracetool.conf

whitlock    2005/01/11 09:01:47

  Modified:    c/build  buildTransport.xml
               c/src/common AxisTrace.cpp AxisTrace.h
               c/src/engine Axis.cpp SOAPTransportFactory.cpp
               c/src/transport/axis2 Axis2TransportInstantiator.cpp
               c/tools/org/apache/axis/tools/common Configuration.java
               c/tools/org/apache/axis/tools/trace TraceInstrumentor.java
                        Tracer.java tracetool.conf
  Log:
  Add trace to the transport library by passing it the addresses of trace methods, so that it can invoke trace methods by address, avoiding the need for the transport library to be linked with the client library.
  
  Revision  Changes    Path
  1.7       +7 -0      ws-axis/c/build/buildTransport.xml
  
  Index: buildTransport.xml
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/build/buildTransport.xml,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- buildTransport.xml	10 Jan 2005 21:00:31 -0000	1.6
  +++ buildTransport.xml	11 Jan 2005 17:01:47 -0000	1.7
  @@ -25,6 +25,9 @@
                        <define name="AXISTRANSPORTDLL_EXPORTS"/>
                     </defineset>
                  </compiler>
  +               <defineset>
  +                  <define name="ENABLE_AXISTRACE" if="trace"/>
  +               </defineset>
                                 <compiler refid="OS400icc"/>
                  <!-- Linkers -->
                  <linker refid="SolarisLinker"/>
  @@ -45,6 +48,10 @@
                exceptions="true" multithreaded="true">
                  <!-- Compilers -->
                  <compiler refid="AIXxlc"/>
  +               <defineset>
  +                  <define name="ENABLE_AXISTRACE" if="trace"/>
  +               </defineset>
  +
                  <!-- Linkers -->
                  <linker refid="AIXLinker"/>
                  <!-- Files to compile -->
  
  
  
  1.49      +13 -7     ws-axis/c/src/common/AxisTrace.cpp
  
  Index: AxisTrace.cpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/common/AxisTrace.cpp,v
  retrieving revision 1.48
  retrieving revision 1.49
  diff -u -r1.48 -r1.49
  --- AxisTrace.cpp	5 Jan 2005 20:20:21 -0000	1.48
  +++ AxisTrace.cpp	11 Jan 2005 17:01:47 -0000	1.49
  @@ -215,7 +215,7 @@
   
   }
   
  -void AxisTrace::traceLine(const char *data) 
  +void AxisTrace::traceLineInternal(const char *data) 
   {
       if (!isTraceOn()) return;
       m_fileTrace->filePuts(data);
  @@ -224,7 +224,8 @@
       return;
   }
   
  -void AxisTrace::traceEntry(const char *className, const char *methodName, const void *that, int nParms, ...)
  +void AxisTrace::traceEntryInternal(const char *className, const char *methodName, 
  +    const void *that, int nParms, va_list args)
   {
       if (!isTraceOn()) return;
   
  @@ -247,8 +248,6 @@
   		}
   		line += "(";
   
  -		va_list args;
  -		va_start(args, nParms);
   		for (int i=0; i<nParms; i++) {
   			int type = va_arg(args, int);
   			unsigned len = va_arg(args, unsigned);
  @@ -256,7 +255,6 @@
   			if (0!=i) line += ", ";
   			addParameter(line,type,len,value);
   		}
  -            va_end(args);
   
   		line += ")";
   		traceLine(line.c_str());
  @@ -273,7 +271,7 @@
       m_stack.push(name);
   }
   
  -void AxisTrace::traceExit(const char *className, const char *methodName, int returnIndex,
  +void AxisTrace::traceExitInternal(const char *className, const char *methodName, int returnIndex,
   						  int type, unsigned len, void *value)
   {
       if (!isTraceOn()) return;
  @@ -314,7 +312,7 @@
       }
   }
   
  -void AxisTrace::traceCatch(const char *className, const char *methodName, int catchIndex,
  +void AxisTrace::traceCatchInternal(const char *className, const char *methodName, int catchIndex,
   						   int type, unsigned len, void *value)
   {
       if (!isTraceOn()) return;
  @@ -439,6 +437,14 @@
   		line += ">";
   		break;
   	}
  +}
  +
  +void AxisTrace::getTraceEntrypoints(AxisTraceEntrypoints& entrypoints) {
  +    entrypoints.m_traceLine = traceLineInternal;
  +    entrypoints.m_traceEntry = traceEntryInternal;
  +    entrypoints.m_traceExit = traceExitInternal;
  +    entrypoints.m_traceCatch = traceCatchInternal;
  +    entrypoints.m_traceOn = m_bLoggingOn;
   }
   
   /*
  
  
  
  1.21      +82 -5     ws-axis/c/src/common/AxisTrace.h
  
  Index: AxisTrace.h
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/common/AxisTrace.h,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- AxisTrace.h	17 Dec 2004 11:49:44 -0000	1.20
  +++ AxisTrace.h	11 Jan 2005 17:01:47 -0000	1.21
  @@ -27,6 +27,8 @@
   #include "AxisFile.h"
   #include <string>
   #include <stack>
  +#include <stdio.h>
  +#include <stdarg.h>
   
   #if defined(ENABLE_AXISTRACE)  
     #define AXISTRACE1(X, Y) AxisTrace::logaxis(X,Y,__FILE__,__LINE__);
  @@ -75,6 +77,24 @@
   #define TRACETYPE_STRING	14
   #define TRACETYPE_STLSTRING	15
   
  +class AxisTraceEntrypoints {
  +public:
  +    void (*m_traceLine)(const char *data);
  +    void (*m_traceEntry)(const char *className, const char *methodName, const void* that, int nParms, va_list vargs);
  +    void (*m_traceExit)(const char *className, const char *methodName, int returnIndex,
  +		int type=TRACETYPE_UNKNOWN, unsigned len=0, void *value=0);
  +    void (*m_traceCatch)(const char *className, const char *methodName, int catchIndex,
  +		int type=TRACETYPE_UNKNOWN, unsigned len=0, void *value=0);
  +    bool m_traceOn;
  +};
  +
  +#ifdef AXISTRACE_LIBRARY
  +    extern AxisTraceEntrypoints *g_traceEntrypoints;
  +#endif
  +#ifdef AXISTRACE_LIBRARY_MAINENTRYPOINT
  +    AxisTraceEntrypoints *g_traceEntrypoints = NULL;
  +#endif
  +
   class AxisTrace
   {
   public:
  @@ -152,34 +172,91 @@
       /**
        * Finds out whether trace is on.
        */
  +#ifdef AXISTRACE_LIBRARY
  +    static inline bool isTraceOn() { return g_traceEntrypoints->m_traceOn; }
  +#else
       static inline bool isTraceOn() { return m_bLoggingOn; }
  +#endif
   
       /**
        * Traces a single line.
        */  
  -    static void traceLine(const char *data);
  +#ifdef AXISTRACE_LIBRARY
  +    static inline void traceLine(const char *data) {(*g_traceEntrypoints->m_traceLine)(data); }
  +#else
  +    static inline void traceLine(const char *data) {traceLineInternal(data);}
  +#endif
  +    static void traceLineInternal(const char *data);
   
   	/**
   	 * Traces the entry to a method.
   	 */
  -	static void traceEntry(const char *className, const char *methodName, const void* that, int nParms, ...);
  +#ifdef AXISTRACE_LIBRARY
  +    static inline void traceEntry(const char *className, const char *methodName, const void* that, int nParms, ...) { 
  +            va_list vargs;
  +            va_start(vargs,nParms);
  +            (*g_traceEntrypoints->m_traceEntry)(className,methodName,that,nParms,vargs);
  +            va_end(vargs);
  +    }
  +#else
  +    static inline void traceEntry(const char *className, const char *methodName, const void* that, int nParms, ...) {
  +            va_list vargs;
  +            va_start(vargs,nParms);
  +            traceEntryInternal(className,methodName,that,nParms,vargs);
  +            va_end(vargs);
  +    }
  +#endif
  +	static void traceEntryInternal(const char *className, const char *methodName, 
  +            const void* that, int nParms, va_list vargs);
   
   	/**
   	 * Traces the exit to a method.
   	 */
  -	static void traceExit(const char *className, const char *methodName, int returnIndex,
  +#ifdef AXISTRACE_LIBRARY
  +    static inline void traceExit(const char *className, const char *methodName, int returnIndex,
  +		int type=TRACETYPE_UNKNOWN, unsigned len=0, void *value=0) { 
  +            (*g_traceEntrypoints->m_traceExit)(className,methodName,returnIndex,type,len,value); 
  +    }
  +#else
  +    static inline void traceExit(const char *className, const char *methodName, int returnIndex,
  +		int type=TRACETYPE_UNKNOWN, unsigned len=0, void *value=0) {
  +        traceExitInternal(className,methodName,returnIndex,type,len,value);
  +    }
  +#endif
  +	static void traceExitInternal(const char *className, const char *methodName, int returnIndex,
   		int type=TRACETYPE_UNKNOWN, unsigned len=0, void *value=0);
   
   	/**
   	 * Traces something that has been caught
   	 */
  -	static void traceCatch(const char *className, const char *methodName, int catchIndex,
  +#ifdef AXISTRACE_LIBRARY
  +    static inline void traceCatch(const char *className, const char *methodName, int catchIndex,
  +		int type=TRACETYPE_UNKNOWN, unsigned len=0, void *value=0) { 
  +            (*g_traceEntrypoints->m_traceCatch)(className,methodName,catchIndex,type,len,value); 
  +    }
  +#else
  +    static inline void traceCatch(const char *className, const char *methodName, int catchIndex,
  +		int type=TRACETYPE_UNKNOWN, unsigned len=0, void *value=0) {
  +        traceCatchInternal(className,methodName,catchIndex,type,len,value);
  +    }
  +#endif
  +	static void traceCatchInternal(const char *className, const char *methodName, int catchIndex,
   		int type=TRACETYPE_UNKNOWN, unsigned len=0, void *value=0);
  -
         /**
          * Closes the trace file
          */
         static void terminate() { m_bLoggingOn = false; delete m_fileTrace; m_fileTrace = NULL; };
  +
  +      /**
  +       * Returns the trace entrypoints to pass to a dynamically loaded library.
  +       */
  +      static void getTraceEntrypoints(AxisTraceEntrypoints& entrypoints);
  +#ifdef AXISTRACE_LIBRARY
  +      static void setTraceEntrypoints(AxisTraceEntrypoints& entrypoints) {
  +          g_traceEntrypoints = new AxisTraceEntrypoints;
  +          *g_traceEntrypoints = entrypoints;
  +      }
  +#endif
   
   private:
   	static bool m_bLoggingOn;
  
  
  
  1.88      +1 -1      ws-axis/c/src/engine/Axis.cpp
  
  Index: Axis.cpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/engine/Axis.cpp,v
  retrieving revision 1.87
  retrieving revision 1.88
  diff -u -r1.87 -r1.88
  --- Axis.cpp	23 Dec 2004 09:32:10 -0000	1.87
  +++ Axis.cpp	11 Jan 2005 17:01:47 -0000	1.88
  @@ -352,7 +352,6 @@
           if (status == AXIS_SUCCESS)
           {
   			XMLParserFactory::initialize();
  -            SOAPTransportFactory::initialize();
   #if defined(ENABLE_AXISTRACE)
               status = AxisTrace::openFileByClient ();
               /* //Samisa: 01/09/2004
  @@ -364,6 +363,7 @@
               }
               */
   #endif
  +            SOAPTransportFactory::initialize();
   			char *pClientWsddPath = 
   			g_pConfig->getAxisConfProperty(AXCONF_CLIENTWSDDFILEPATH);
   
  
  
  
  1.23      +5 -3      ws-axis/c/src/engine/SOAPTransportFactory.cpp
  
  Index: SOAPTransportFactory.cpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/engine/SOAPTransportFactory.cpp,v
  retrieving revision 1.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- SOAPTransportFactory.cpp	19 Nov 2004 16:22:06 -0000	1.22
  +++ SOAPTransportFactory.cpp	11 Jan 2005 17:01:47 -0000	1.23
  @@ -71,11 +71,13 @@
           else
           {
               // Load function to do lib level inits
  -            void (*initializeLibrary) (void);
  -            initializeLibrary = (void (*)(void))PLATFORM_GETPROCADDR(m_LibHandler, INIT_FUNCTION);
  +            void (*initializeLibrary) (AxisTraceEntrypoints&);
  +            initializeLibrary = (void (*)(AxisTraceEntrypoints&))PLATFORM_GETPROCADDR(m_LibHandler, INIT_FUNCTION);
   
  +            AxisTraceEntrypoints ep;
  +            AxisTrace::getTraceEntrypoints(ep);
               if (initializeLibrary)
  -                 (*initializeLibrary)();
  +                 (*initializeLibrary)(ep);
   
   /*
               // Load functions that does start and stop of event loop
  
  
  
  1.2       +5 -1      ws-axis/c/src/transport/axis2/Axis2TransportInstantiator.cpp
  
  Index: Axis2TransportInstantiator.cpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/transport/axis2/Axis2TransportInstantiator.cpp,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Axis2TransportInstantiator.cpp	16 Nov 2004 02:39:15 -0000	1.1
  +++ Axis2TransportInstantiator.cpp	11 Jan 2005 17:01:47 -0000	1.2
  @@ -19,6 +19,9 @@
    *
    */
   
  +#define AXISTRACE_LIBRARY
  +#define AXISTRACE_LIBRARY_MAINENTRYPOINT
  +#include "../../common/AxisTrace.h"
   
   #ifdef WIN32
   #pragma warning (disable : 4786)
  @@ -60,9 +63,10 @@
   
       /*  initializeLibrary() Is a C interface.
        */
  -    STORAGE_CLASS_INFO void initializeLibrary (void)
  +    STORAGE_CLASS_INFO void initializeLibrary (AxisTraceEntrypoints& ep)
       {
           // Do init actions
  +        AxisTrace::setTraceEntrypoints(ep);
       }
   
       /*  uninitializeLibrary() Is a C interface.
  
  
  
  1.2       +7 -0      ws-axis/c/tools/org/apache/axis/tools/common/Configuration.java
  
  Index: Configuration.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/tools/org/apache/axis/tools/common/Configuration.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Configuration.java	17 Dec 2004 11:49:48 -0000	1.1
  +++ Configuration.java	11 Jan 2005 17:01:47 -0000	1.2
  @@ -33,6 +33,7 @@
   	private static Set macros = new HashSet();
   	private static Set defines = new HashSet();
   	private static Set attributes = new HashSet();
  +	private static Set librarydirs = new HashSet();
   	private static Map others = new HashMap();
   
       /**
  @@ -81,6 +82,8 @@
   				defines.add(value);
   			} else if ("attribute".equals(key)) {
   				attributes.add(value);
  +			} else if ("librarydir".equals(key)) {
  +				librarydirs.add(value);
   			} else {
   				others.put(key, value);
   			}
  @@ -109,6 +112,10 @@
   
   	public static boolean isAttribute(String s) {
   		return attributes.contains(s);
  +	}
  +
  +	public static Set getLibraryDirs() {
  +		return librarydirs;
   	}
   
   	public static String getConfigured(String key) {
  
  
  
  1.2       +8 -1      ws-axis/c/tools/org/apache/axis/tools/trace/TraceInstrumentor.java
  
  Index: TraceInstrumentor.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/tools/org/apache/axis/tools/trace/TraceInstrumentor.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- TraceInstrumentor.java	17 Dec 2004 11:49:48 -0000	1.1
  +++ TraceInstrumentor.java	11 Jan 2005 17:01:47 -0000	1.2
  @@ -74,9 +74,16 @@
   			&& !Configuration.fileExcluded(sourceName)) {
   			Utils.outputDebugString("parsing " + source + "...");
   
  +                  boolean isInLib = false;
  +                  Iterator itDir = Configuration.getLibraryDirs().iterator();
  +                  while (itDir.hasNext()) {
  +                      String libdir= (String)(itDir.next());
  +                      isInLib = isInLib || (-1 != source.getPath().indexOf(libdir));
  +                  }
  +
   			// create a tracer to the output file 
   			Tracer output =
  -				new Tracer(new FileWriter(outputFile, false), depth, headers);
  +				new Tracer(new FileWriter(outputFile, false), depth, headers, isInLib);
   
   			// OK, now we have the output file let's read in the input file !
   			FileReader fr = new FileReader(source);
  
  
  
  1.2       +5 -1      ws-axis/c/tools/org/apache/axis/tools/trace/Tracer.java
  
  Index: Tracer.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/tools/org/apache/axis/tools/trace/Tracer.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Tracer.java	17 Dec 2004 11:49:48 -0000	1.1
  +++ Tracer.java	11 Jan 2005 17:01:47 -0000	1.2
  @@ -72,7 +72,7 @@
   	/**
   	 * @param writer a writer to the output file.
   	 */
  -	Tracer(Writer writer, int depth, Headers headers) throws IOException {
  +	Tracer(Writer writer, int depth, Headers headers, boolean isInLib) throws IOException {
   		super(writer);
   		this.headers = headers;
   		namespace = Configuration.getConfigured("namespace");
  @@ -98,6 +98,9 @@
   		else
   			module = ""; // C-style function
   
  +            String libDirDef = "";
  +            if (isInLib) libDirDef = "#define AXISTRACE_LIBRARY\n";
  +
   		String include = Configuration.getConfigured("include");
   		String includefile = "";
   		if (null == include) {
  @@ -119,6 +122,7 @@
   		String line =
   			hashifdef
   				+ "/* TRACE ADDED BY THE TRACE INSTRUMENTOR TOOL */\n"
  +                        + libDirDef
   				+ "#include "
   				+ includefile
   				+ "\n"
  
  
  
  1.4       +3 -0      ws-axis/c/tools/org/apache/axis/tools/trace/tracetool.conf
  
  Index: tracetool.conf
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/tools/org/apache/axis/tools/trace/tracetool.conf,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- tracetool.conf	10 Jan 2005 10:47:07 -0000	1.3
  +++ tracetool.conf	11 Jan 2005 17:01:47 -0000	1.4
  @@ -46,6 +46,7 @@
   excludefile=AxisTrace.cpp
   excludefile=AxisTrace.h
   excludefile=AxisFile.h
  +excludefile=Axis2TransportInstantiator.cpp
   #
   define=AXIS_CPP_NAMESPACE_START
   define=AXIS_CPP_NAMESPACE_END
  @@ -65,3 +66,5 @@
   ifdef=ENABLE_AXISTRACE
   namespace=axiscpp
   module=AxisTrace
  +librarydir=transport
  +