This is a very general question as I know what a web service is and I know what a web request is however there are too many times when I expect to see the web service in the web service dashlet but instead see it in the web request dashlet. Can you tell me how AppMon determines where to put it?
I believe it works as follows:
If a sensor (such as Java Web Services sensor, or .NET Web Services sensor) detect that the call is a web service, it will be assigned "Web Service", otherwise, it will be a "Web Request".
This can be confusing because there are a large number of Web Services Frameworks we support. Do a find on "Web Service Stacks" in the link below for details of which ones we support:
Like all Dynatrace sensors the Web Services and Web Requests dashlets are populated using data captured from the Java Web Services and Java Web Requests Knowledge Sensor Packs that come built into Application Monitoring.
Like any sensors these packs are looking for specific methods to capture (and categorize) these calls. You can see these sensor details by going to Settings > Dynatrace Server > Sensor Packs within your AppMon Client. Use extreme caution when viewing this screen, you do not want to accidentally change one of these out of the box sensor packs.
Thanks Dave and Markie! I did check out those links and took a look at the sensors. And I do understand what you are saying that one of the two sensors is recognizing a method so categorizes it as either a web service or a web request. But I'm still missing a key point that would bring an understanding to this...
...So I spent several hours tonight digging a lot deeper. I determined from the purepaths that there is a subtle difference. That is; some use doGet and some use doPost. So magnifying this more, I brought up the Methods dashlet in a separate dashboard and:
1. Did a search on doGet and went to their purepaths from there I could drill down to Web Requests to see entries (the web services had 0 entries).
2. Did a search on doPost and went to their purepaths from there I could drill down to Web Services to see entries (from their I could also drill to web requests to see entries there too).
What's interesting is both the doGet and the doPost both come from the same class:
Though if you look in the details of the methods dashlet:
1. the doGet it's API is: Servlet
2. the doPut it's API is: Java Web Services, Servlet
So what is the difference between the doGet and the doPut where one is perceived as a web request by the Java Web Request sensor and the other perceived as a web service by the Java Web Service sensor.
Any help with this to get me a little closer to understanding this would be greatly appreciated.
I just tested this in easyTravel and found that my web services originate from these methods:
org.apache.axis2.transport.http.AxisServlet.doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) Java Web Services
org.apache.axis2.transport.http.AxisServlet.doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
So, it seems to work fine for this Axis class for both doGet and doPost. This class does not get picked up as Servlet or Java Web Request, either.
I tried to find your class in the Java Web Services and Servlets sensors, but had no luck.
I did find this class:
and it had only "doPost" and "service" methods instrumented in the Web Services Sensor Pack, so can you check if com.ibm.ws.websvcs.transport.http.WASAxis2Servlet inherits from it by decompiling that class? If so, maybe we just need to add "doGet" instrumentation to this Sensor Pack.
Thanks so much Dave for this great research. I'll have to ask my point person if they can tell me if this was inherited from the class you found. If so I will talk to Dynatrace to see if adding the doGet to that class will cause any bad ripple affect, hopefully not, and/or ask what they would recommend. Thanks again for your insight with this!