Question

How to reliably count active sessions in J2EE web application

Asked by: mrgordonz

Hi JBoss/Java Experts,

This is a somewhat long post, for which I apologise, but I want to ensure I have included all pertinent information.

I would like to reliably monitor (and report on) the number of active sessions for a particular web application deployed on JBoss 4.0.5 (the server is Windows Server 2003).

Initially I looked around for monitoring tools (eg: Hyperic) which would do all this for me, but alas, all of them seemed to monitor everything EXCEPT active sessions for a particular web app. But I did find one piece of software (AdventNet Application Manager) which does the next best thing (for my purposes) - it will execute a script and monitor the output of the script.

For example, say I have a script called sessions.bat, and when it is executed it will (somehow) output the number of sessions to a log file, sessions.log . Sample contents of the log file might be:

active_sessions=35
session_count=672
max_active_sessions=82
rejected_session_creations=0
expired_sessions=637
longest_session_alive_time=6618
average_session_alive_time=1944

AdventNet Application Manager will execute the script at a desired interval (say every 15 minutes), and then read the contents of the resulting log file. I can even specify that it needs to look for specific strings (eg: "active_sessions"), and monitor the corresponding numeric values (it even creates pretty graphs for me!).

BUT - I need a script which will output the number of active sessions.

I have done a bunch of searching, and posted on other forums, and so far the consensus seems to be I need to write my own class which implements HttpSessionListener, and have a couple of methods to monitor when sessions are created and destroyed, and tally the session count somehow. I'm a pretty mediocre Java programmer, so I hunted around for some code which kind of seems to do the trick, but in my testing I found that the session count wasn't accurate (for details see my post at http://forums.sun.com/thread.jspa?threadID=5322822).

One person suggested I have a look at the "JBoss Management Console" (http://my-server:8180/web-console/),

      "...then in the console function tree find: Monitoring - > Web Status -> Full Status.
      You will get a page with loads of stats on the right side.
      Find [Application list] and link to your application, simply click on it
      and at the top of the page you will see all the stats that you need..."

I had a look at this and it looks perfect - it gives me more information than I was expecting, like Active sessions, Session count, Max active sessions, Rejected session creations, Expired sessions, Longest session alive time, and Average session alive time.

But my question is this: how does JBoss get this info when viewing the Management Console? I've been told by someone who replied to my post that this information is not stored in a log file (or anywhere).  If it isn't stored, presumably there is an API of some kind which is being called/invoked by the Management Console to gather/retrieve that info. Or do I have it completely wrong? What is interesting to me is that JBoss can get this information without me having to write a custom class. How does it do this?

My preferred solution is to have a batch script (eg: sessions.bat) which calls some API(s) (or a custom class) which will return the current values for those different metrics (Active sessions , Session count , Max active sessions, Rejected session creations, Expired sessions , Longest session alive time , Average session alive time)? Or can they only be viewed via the Management Console? If the batch script can't get the values directly, can I get this information in a class that I write (or "borrow")?

In my ideal world, the batch script would look something like this:

@echo off
 
REM **************************************************
REM *       APPLICATION SESSION INFO                 *
REM *                                                *
REM *  This script retrieves the session info        *
REM *  for MyApp and writes it to a log file.        *
REM *                                                *
REM **************************************************
 
set LOG_FILE=C:\logs\sessions.log
 
REM Initialize the variables
set ACTIVE_SESSIONS=0
set SESSION_COUNT=0
set MAX_ACTIVE_SESSIONS=0
set REJECTED_SESSION_CREATIONS=0
set EXPIRED_SESSIONS=0
set LONGEST_SESSION_ALIVE_TIME=0
set AVERAGE_SESSION_ALIVE_TIME=0
 
set ACTIVE_SESSIONS=[some magic code to get the info]
set SESSION_COUNT=[some magic code to get the info]
set MAX_ACTIVE_SESSIONS=[some magic code to get the info]
set REJECTED_SESSION_CREATIONS=[some magic code to get the info]
set EXPIRED_SESSIONS=[some magic code to get the info]
set LONGEST_SESSION_ALIVE_TIME=[some magic code to get the info]
set AVERAGE_SESSION_ALIVE_TIME=[some magic code to get the info]
 
echo active_sessions=%ACTIVE_SESSIONS% > %LOG_FILE%
echo session_count=%SESSION_COUNT% >> %LOG_FILE%
echo max_active_sessions=%MAX_ACTIVE_SESSIONS% >> %LOG_FILE%
echo rejected_session_creations=%REJECTED_SESSION_CREATIONS% >> %LOG_FILE%
echo expired_sessions=%EXPIRED_SESSIONS% >> %LOG_FILE%
echo longest_session_alive_time=%LONGEST_SESSION_ALIVE_TIME% >> %LOG_FILE%
echo average_session_alive_time=%AVERAGE_SESSION_ALIVE_TIME% >> %LOG_FILE%

This log file can then be parsed by the monitoring software, and it will produce pretty graphs and reports for my customers. :)

The bit that is missing is [some magic code to get the info]. Can someone suggest how I might do this?

Please, please, someone tell me it is possible to get this information!

Cheers,

Paul Hobbs

This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.

Subscribe now for full access to Experts Exchange and get

Instant Access to this Solution

  • Plus...
  • 30 Day FREE access, no risk, no obligation
  • Collaborate with the world's top tech experts
  • Unlimited access to our exclusive solution database
  • Never be left without tech help again

Subscribe Now

Asked On
2008-08-20 at 06:56:40ID23663083
Tags

JBoss

,

JBoss Application Server

,

4.0.5

,

Sun JDK 1.4.2

Topics

Jboss Application Server

,

Java Programming Language

,

J2EE

Participating Experts
2
Points
500
Comments
16

Trusted by hundreds of thousands everyday for fast, accurate and reliable tech support.

  • "The time we save is the biggest benefit of Experts Exchange to Warner Bros. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange." Mike Kapnisakis, Warner Bros.
  • "Our team likes having a resource that is more secure than just using Google and most experts using this service really know their stuff. It's nice to look here first versus using Google." Dayna Sellner, Lockheed Martin
  • "Anytime that I've been stumped with a problem, 9 out of 10 times Experts Exchange has either the accepted solution or an open discussion of the potential solution to the problem." Kenny Red, eBay Inc.

See what Experts Exchange can do for you.

Got a question?

We've got the answer.

Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.

Screenshot of Experts Exchange Knowledgebase

Need individual assistance?

Our experts are ready to help.

If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.

Screenshot of Experts Exchange Knowledgebase

Want to learn from the best?

Read articles from industry experts.

Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.

Screenshot of an Article

Working on a long term project?

Store your work and research.

Save solutions to your questions, answers you’ve discovered through searching plus helpful articles in your personal knowledgebase for easy future access.

Screenshot of Experts Exchange Knowledgebase

Access the answers to your technology questions today.

Subscribe Now

30-day free trial. Register in 60 seconds.

What Makes Experts Exchange Unique?

Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Trusted by the world's most respected brands.

image of each brand's logo

Faithfully serving IT professionals since 1996.

Experts Exchange Logo

Try it out and discover for yourself.

Subscribe Now

30-day free trial. Register in 60 seconds.

Related Solutions

  1. How to migrate j2ee application from tomcat to jboss.
    Currently I have an j2ee application which runs on both jboss and tomcat, both installed separately. I need to start jboss and tomcat at the same time. I thought since jboss has tomcat built in, why can't I just run one instance of jboss? But it won't find the web pages if I...

Free Tech Articles

  1. WARNING: 5 Reasons why you should NEVER fix a computer for free.
    It is in our nature to love the puzzle. We are obsessed. The lot of us. We love puzzles. We love the challenge. We thrive on finding the answer. We hate disarray. It bothers us deep in our soul. W...
  2. SCCM OSD Basic troubleshooting
    SCCM 2007 OSD is a fantastic way to deploy operating systems, however, like most things SCCM issues can sometimes be difficult to resolve due to the sheer volume of logs to sift through and the dispe...
  3. Migrate Small Business Server 2003 to Exchange 2010 and Windows 2008 R2
    This guide is intended to provide step by step instructions on how to migrate from Small Business Server 2003 to Windows 2008 R2 with Exchange 2010. For this migration to work you will need the fo...
  4. Create a Win7 Gadget
    This article shows you how to create a simple "Gadget" -- a sort of mini-application supported by Windows 7 and Vista. Gadgets can be dropped anywhere on the desktop to provide instant information, ...
  5. Outlook continually prompting for username and password
    There have been a lot of questions recently regarding Outlook prompting for a username and password whilst using Exchange 2007. There are a few reasons why this would happen and I will try to cover t...
  6. Backup Exchange 2010 Information Store using Windows Backup
    There seems to be quite a lot of confusion around the ability to backup Exchange 2010 using the built in Windows Backup feature. This stems from the omission of this feature prior to Exchange 2007 s...

Cloud Class Webinars

  1. Avoiding Bugs in Microsoft Access
    Alison Balter takes and in-depth look at avoiding bugs in Access. In this webinar you will learn about using the immediate window to debug your applications, invoking the debugger, using breakpoints to troubleshoot, stepping through code, setting the next statement to execute, ...
  2. Top 10 Best New Features in Visio 2010
    Scott Helmers gives live demonstrations of the top 10 new features in Visio 2010. This webinar will teach you how to create compelling diagrams by adding shapes to the page with a single click, linking the shapes in a diagram to data in Excel (or SQL Server, or SharePoint), ...
  3. IT Consultant Business Secrets Revealed
    Michael Munger, Experts Exchange tech pro and IT consultant, pulls back the curtain on his very successful businesses and answers question on every IT consultant and business owner should know about. He shares secrets on what he did to solve the 5 most common problems in IT, ...
  4. Disaster Recovery and Business Continuity
    Quest CTO, Mike Billon, gives an overview of the steps involved in building a dunamic disaster recovery plan. Through case studies and an examination of software/hardware tooles for monitoring and testing, you'll gain a better understandin of where you are, where you want ...
  5. Organize Your Visio Diagrams with Containers and Lists
    Scott Helmers uses cross functional flowcharts, wireframe diagrams, data graphic legends and seating charts to teach you: how to ustilize all three new structured diagram components in Visio 2010, the best practices for organizeing shapes in previous version of Visio, how to organize ...
  6. How to Us Objects, Properties, Events and Methods in Microsoft Access
    Alison Dalter gives an in-depbth look at objects, properties, events and methods in Microsoft Access. In this webinar you will learn about using the object browser, referring to objects, working with properties and methods, working with object variables, understanding the ...

Join the Community

Give a Little. Get a Lot.

Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.

Join the Community

Answers

 

by: TomasHelgiPosted on 2008-08-20 at 07:29:41ID: 22269904

 

by: TomasHelgiPosted on 2008-08-20 at 07:32:02ID: 22269933

And some listener examples as well
http://www.java2s.com/Code/Java/Servlets/Listener.htm

Regards,
   Tomas Helgi

 

by: rrz@871311Posted on 2008-08-20 at 08:02:11ID: 22270357

I agree with Tomas.  Also look at this old discussion.  
http://www.experts-exchange.com/Programming/Languages/Java/J2EE/JSP/Q_20514811.html

 

by: mrgordonzPosted on 2008-08-20 at 19:45:30ID: 22275773

Thanks for the links to the various examples of custom classes for counting sessions.  However, I am still unsure about a couple of things:

1.  Assuming I use one of the sample classes, how do I get the session count values into a batch script so I can output to a simple log file?  Can I do something like this in a batch script:

set ACTIVE_SESSIONS=com.myapp.SessionCounter.getSessionCount()

Is that feasible?  I guess what I am asking is what would I need to substitute for [some magic code to get the info] in order to get the info into my batch script?

Alternatively, can I get the class to create the log file directly, so that the batch script simply calls/executes the class, and then the results are inserted into the log file by the class itself?

I don't want to use a JSP page because that doesn't actually help me with respect to my end goal - ie: a log file which is parsed by the monitoring software.


2.   I take it that there is no way for me to retrieve the metrics provided by the JBoss Management Console by any means other can a custom class?  Surely if the JBoss Management Console can get those values without me implementing a custom class, there must be some other way to get that info???


3.  When I view the info via JBoss Management Console, there is more than just a session count - it also shows me things like max session count, average session alive time, etc.  Can this info be retrieved any way other than via JBoss Management Console?

I have attached a little flow chart of how I would like this process to work.  There are 5 steps in the process.  I can currently do steps 1, 4, and 5.  The missing pieces of the puzzle are steps 2 and 3.

Please bear in mind I am not a Java programmer, so please be specific.

Cheers,

Paul

 

by: rrz@871311Posted on 2008-08-20 at 22:16:28ID: 22276395

A HttpSessionListener could do steps 1,2,3, and 4.  Maybe something like  this.

public class UsersListener implements HttpSessionListener {
  private Hashtable sessionsTable = null;
  private ArrayList aliveTimeList = new ArrayList();
  Timer timer = new Timer();
  timer.scheduleAtFixedRate(timerTask,firstTime,period);
                                                   
  private int getCount(){
                         sessionsTable.size();
  }
  private synchronized ArrayList getCurrentList(){
                                                  // TO DO: get list and make a new one
  }
  public void sessionCreated(HttpSessionEvent event) {
                           String id = event.getSession().getId();
                           if(sessionsTable == null)sessionsTable = new Hashtable();
                           sessionsTable.put(id, System.currentTimeMillis());
                           
  }
  public void sessionDestroyed(HttpSessionEvent event) {
                           String id = event.getSession().getId();
                           if(sessionsTable.containsKey(id)){
                                 long aliveTime = System.currentTimeMillis() - sessionsTable.get(id);
                                 aliveTimeList.add(new Long(aliveTime));
                                 sessionsTable.remove(id);          
                           }
                           
  }
}
// TO DO: TimerTask that will get Count and list and write to log file.
//        think about synchronization more
//  I will have more time to work on this weekend.

 

by: mrgordonzPosted on 2008-08-21 at 10:55:06ID: 22282327

Can I avoid writing a custom class completely by using twiddle? I know next to nothing about twiddle, and the little I do know I have learned in the past hour by Googling it. From what I can see it will allow me to execute a command which will return any one of the values which is available via the JBoss Management Console.

Is this easier then writing a class?

 

by: rrz@871311Posted on 2008-08-21 at 12:51:44ID: 22283666

>Can I avoid writing a custom class completely by using twiddle?    
I don't know anything about twiddle. I don't use jboss either.   I use Tomcat.

 

by: mrgordonzPosted on 2008-08-21 at 16:52:12ID: 22285324

That might be an issue - I am using JBoss 4.0.5

 

by: mrgordonzPosted on 2008-09-07 at 23:57:07ID: 22415116

Hi Tomas,

One person suggested I have a look at the "JBoss Management Console" (http://my-server:8180/web-console/),

     "...then in the console function tree find: Monitoring - > Web Status -> Full Status.
     You will get a page with loads of stats on the right side.
     Find [Application list] and link to your application, simply click on it
     and at the top of the page you will see all the stats that you need..."

I had a look at this and it looks perfect - it gives me more information than I was expecting, like Active sessions, Session count, Max active sessions, Rejected session creations, Expired sessions, Longest session alive time, and Average session alive time.  I am really only interested in Active Sessions.

Do you know of a way to retrieve that information?  I assume that because the number of Active Sessions is available in the JBoss Management Console, that there is some kind of API which can be called to return that information.

Is there any difference between the information provided in the  JBoss Management Console and the session information that would be provided by a custom class (eg: one of the samples you provided links for)?

Cheers,

Paul Hobbs

 

by: TomasHelgiPosted on 2008-09-08 at 00:23:19ID: 22415197

    Hi Paul!

Well the JBoss Management Console is an MBean (Management Bean) so if you know how to connect to a MBean then you could retrieve
this information :)
http://wiki.jboss.org/wiki/JBossMonitoring
http://www.informit.com/guides/content.aspx?g=java&seqNum=214
http://lists.jboss.org/pipermail/jboss-user/2006-August/007026.html

http://java.sun.com/j2se/1.5.0/docs/guide/management/overview.html
http://java.sun.com/developer/technicalArticles/J2SE/jmx.html

Hope this helps.

Regards,
    Tomas Helgi

 

by: mrgordonzPosted on 2008-09-08 at 02:34:31ID: 22415714

Hi Tomas,

If I knew how to connect to an MBean it might help. Alas, I know nothing about MBeans or how to connect to them.  Also, regrettably I don't have time to spend hours learning about MBeans - my TO DO list is long enough as it is!

I am looking for a quick fix here - someone who has done something similar before (or even the same) and who is able to share their code or specific steps.  If you look at the image I attached in an earlier post, it gives you a clear idea of what I want to achieve.  The bits I need help with are steps 2 and 3.

Cheers,

Paul

 

by: rrz@871311Posted on 2008-09-08 at 08:43:37ID: 22418519

>I am really only interested in Active Sessions.    
>I am looking for a quick fix here  
Ok, just use a listener.  

import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class SessionListener implements HttpSessionListener {
  HashSet sessionSet = null;
  ServletContext application = null;
  public void sessionCreated(HttpSessionEvent event) {
             HttpSession session = event.getSession();
             if(application == null)application = session.getServletContext();
             sessionSet = (HashSet)application.getAttribute("sessionSet");
             if(sessionSet == null){
                        application.setAttribute("sessionSet",new HashSet());  
                        sessionSet = (HashSet)application.getAttribute("sessionSet");
             }
             sessionSet.add(session.getId());                        
  }
  public void sessionDestroyed(HttpSessionEvent event) {
                                       sessionSet.remove(event.getSession().getId());
  }
}

Register it in your web app's web.xml with

    <listener>
              <listener-class>rrz.SessionListener</listener-class>
    </listener>

and test it on a JSP with  

<%
   session.setMaxInactiveInterval(3);   // for easy testing
%>
Session count is <%=((HashSet)application.getAttribute("sessionSet")).size()%>

 

by: mrgordonzPosted on 2008-09-08 at 13:39:18ID: 22421293

Hi rrz,

Instead of using a JSP to call that class, can the class be called from a batch file?  Or even better (from my perspective) - can that class simply output the session count to a file?  I am guessing that the SessionListener class is automatically called every time a session is either created or destroyed, which is what increments/decrements the variable sessionSet.  The JSP is simply retrieving the current value stored in the variable and displaying it in a browser.  Is my guess correct?  I am not interested in displaying the session count in a browser - I want that session count in a log file.

I have found a code sample which shows me how to output a string to a file (http://www.java2s.com/Code/Java/File-Input-Output/Filereadandwrite.htm) - I am just wondering if there are any restrictions that you may be aware of?

Cheers,

Paul

 

by: mrgordonzPosted on 2008-09-08 at 19:20:36ID: 22423848

Hi rrz and Tomas,

I have finally solved the problem.  Someone on another forum pointed me in the direction of the specific MBean I needed, so I wrote a little VBScript batch file which gets the activeSessions attribute from the MBean.  I have attached the code for the VBScript file.

Thanks for trying to help out.  I am happy to split the points evenly between you (if that is OK with you).

Cheers,

Paul

' Author: phobbs 
' Date: 2008/09/09
' Revision: 1.0
' Name: getSessions.vbs
' Purpose: Queries the MBean to retrieve active session count
' MBean Name:      Domain Name:    jboss.web
'                  type:           Manager
'                  host:           localhost
'                  path:           /MyApp
 
'Usage:
' getSessions.vbs
' activeSessions is output to log file D:\MyApp\log\session_count.log
' if there is an error, output to log file D:\MyApp\log\session_count_errors.log
 
'========================================================================================
 
Function GetActiveSessionCount()
 
    On Error Resume Next
 
    Const ForWriting = 2
 
    Dim strURL
    Dim log_file
    Dim error_log
    Dim fso_write
    Dim WriteFile
    Dim intStart
    Dim intEnd
    Dim htmlStream
    Dim activeSessionsBlock
    Dim sessionCount
    
    strURL = "http://localhost:8180/jmx-console/HtmlAdaptor?action=inspectMBean&name=jboss.web:host=localhost,path=/MyApp,type=Manager"
    log_file  = "D:\MyApp\log\session_count.log"
    error_log  = "D:\MyApp\log\session_count_errors.log"
    Set fso_write = CreateObject("Scripting.FileSystemObject")
 
    'get the HTML response from the URL
    htmlStream = GetHtml(strURL)
 
    'get rid of all the text between <td>activeSessions</td> and <td>Number of active sessions at this moment</td>
    intStart = InStr(htmlStream, "<td>activeSessions</td>")
    intEnd   = InStr(htmlStream, "<td>Number of active sessions at this moment</td>")
    activeSessionsBlock = Mid(htmlStream, intStart, intEnd - intStart)
 
    'replace all carriage returns, line breaks, tabs and spaces
    activeSessionsBlock = Replace(activeSessionsBlock,Chr(10),"")
    activeSessionsBlock = Replace(activeSessionsBlock,Chr(13),"")
    activeSessionsBlock = Replace(activeSessionsBlock,Chr(9),"")
    activeSessionsBlock = Replace(activeSessionsBlock," ","")
 
    'get rid of everything except the session count number
    activeSessionsBlock = Replace(activeSessionsBlock,"<td>activeSessions</td>","")
    activeSessionsBlock = Replace(activeSessionsBlock,"<td>int</td>","")
    activeSessionsBlock = Replace(activeSessionsBlock,"<td>R</td>","")
    activeSessionsBlock = Replace(activeSessionsBlock,"<td>","")
    activeSessionsBlock = Replace(activeSessionsBlock,"</td>","")
    sessionCount = activeSessionsBlock
    
    If IsNumeric(sessionCount) Then
        Set WriteFile = fso_write.OpenTextFile(log_file, ForWriting, True)
        WriteFile.WriteLine "active_sessions=" & sessionCount
    Else
        Set WriteFile = fso_write.OpenTextFile(error_log, ForWriting, True)
        WriteFile.WriteLine "There was an error"
        WriteFile.WriteLine "active_sessions=" & sessionCount
    End If
    
    Set strURL = Nothing
    Set log_file = Nothing
    Set error_log = Nothing
    Set fso_write = Nothing
    Set WriteFile = Nothing
    Set intStart = Nothing
    Set intEnd = Nothing
    Set htmlStream = Nothing
    Set activeSessionsBlock = Nothing
    Set sessionCount = Nothing
 
End Function
 
'========================================================================================
 
Function GetHtml(sURL)
 
    On Error Resume Next
 
    Set oHTML = CreateObject("Microsoft.XMLHTTP")
    'Set oHTTP = Createobject("WinHttp.WinHttpRequest.5.1")
    Set oWeb = CreateObject("InternetExplorer.Application")
    oWeb.navigate (sURL)
    oHTML.open "GET" , sURL, false
    oHTML.send
    GetHtml = oHTML.responseText
 
End Function
 
'========================================================================================
 
GetActiveSessionCount	

                                              
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:

Select allOpen in new window

 

by: rrz@871311Posted on 2008-09-08 at 19:24:56ID: 22423861

>I have finally solved the problem.  
good
>I am happy to split the points evenly between you (if that is OK with you).  
OK with me.

20120131-EE-VQP-002

3 Ways to Join

30-Day Free Trial

The Experts

98% positive feedback on 31,087 answers since March 2000. angeliii is a Microsoft Most Valuable Professional for his work with MS SQL Server & Develoment.

He has also proven his knowledge of Visual Basic Programming, PHP Scripting and Oracle Databases.

The Experts

97% positive feedback on 10,752 answers since July 2000. lrmoore has more than 18 years experience in the networking industry.

The six-time Mircosoft MVPs specialties include firewalls, virtual private networking, and network management.

Testimonials

"...and excellent source for support... Kind of like having your very own IT dept." Electriciansnet

Testimonials

"I was apprehensive at signing up at first. However... it has already made my life as an IT administrator much easier." JaCrews

Testimonials

"WOW! You guys have great, active, and knowledgeable people on here." moore50

Business Clients

Business Clients

In the Press

"If you’ve got a question... Experts Exchange can supply an answer.”

In the Press

"...an invaluable aid for both IT professionals and those who require tech support."

In the Press

"where IT professionals provide quick answers on just about any topic"

Business Account Plans

Loading Advertisement...