1 package sessionViewer.business; 2 3 4 import com.lutris.appserver.server.*; 5 6 import com.lutris.appserver.server.httpPresentation.servlet.*; 7 import javax.servlet.*; 8 import javax.servlet.http.*; 9 10 import sessionViewer.spec.*; 11 import java.util.List ; 12 import java.util.Properties ; 13 import java.util.Vector ; 14 import java.util.Hashtable ; 15 import java.util.Enumeration ; 16 import java.util.StringTokenizer ; 17 import java.util.Set ; 18 import java.util.Date ; 19 import javax.management.*; 20 import javax.management.ObjectName ; 21 import org.apache.commons.modeler.Registry; 22 import com.lutris.appserver.server.session.*; 23 import com.lutris.appserver.server.sessionEnhydra.*; 24 import com.lutris.appserver.server.user.User; 25 26 27 public class GlobalImpl implements Global { 28 29 30 31 private static String jonasName="jonas"; 34 35 private static MBeanServer mBeanServer; 36 37 public void initialize() { 38 39 try{ 40 jonasName=System.getProperty("jonas.name"); 41 }catch(Exception e){ 42 jonasName="jonas"; 43 } 44 45 if(jonasName==null) 46 jonasName="jonas"; 47 48 49 } 50 51 52 public static Properties getServletNames() 53 { 54 try{ 55 56 57 ObjectName oname = new ObjectName (jonasName+":j2eeType=WebModule,*"); 58 59 Set enhydraMBeans= getMBeanServer().queryNames(oname,null); 60 Object [] oi=enhydraMBeans.toArray(); 61 62 Properties apps = new Properties (); 63 64 for(int i=0;i<oi.length;i++) 65 { 66 String context=(String )getMBeanServer().getAttribute((ObjectName )oi[i],"path"); 67 String docBase=(String )getMBeanServer().getAttribute((ObjectName )oi[i],"docBase"); 68 if(context!=null&&docBase!=null) 69 apps.setProperty(context,docBase); 70 } 71 72 73 return apps; 74 75 }catch(Exception e){ 76 return null; 77 } 78 } 79 80 81 public static Integer getSessionNumber(String context,String docBase){ 82 83 boolean isEnhydraApp = false; 84 boolean isStandardSessionManager = false; 85 86 String sessionManagerClassName = null; 87 ObjectName enhydraSessionManagerON = null; 88 89 90 try{ 91 92 ObjectName onameEnhydra = new ObjectName ("EnhydraApplications:type=Context,*"); 93 Set enhydraMBeans= getMBeanServer().queryNames(onameEnhydra,null); 94 Object [] oi=enhydraMBeans.toArray(); 95 96 97 98 for(int i=0;i<oi.length;i++) 99 { 100 String appName = (String )getMBeanServer().invoke((ObjectName )oi[i],"getAppName",new Object [0], new String [0]); 101 102 String appRealContext = (String )getMBeanServer().invoke((ObjectName )oi[i],"getAppRealContext",new Object [0], new String [0]); 103 104 appRealContext = appRealContext.replaceAll("\\\\","/"); 105 106 if(appRealContext.endsWith("/")) 107 appRealContext = appRealContext.substring(0,appRealContext.length()-1); 108 109 110 if(appRealContext.endsWith(docBase)) 111 { 112 113 114 115 isEnhydraApp =true; 116 enhydraSessionManagerON = new ObjectName ("EnhydraApplications:type=SessionManager,name="+appName); 117 118 try{ 119 sessionManagerClassName = (String )getMBeanServer().getAttribute(enhydraSessionManagerON,"Class"); 120 }catch(AttributeNotFoundException e){ 121 sessionManagerClassName = "com.lutris.appserver.server.sessionEnhydra.StandardSessionManager"; 122 }catch(Exception e){ 123 return new Integer (0); 124 } 125 126 127 if(sessionManagerClassName==null) 128 sessionManagerClassName = "com.lutris.appserver.server.sessionEnhydra.StandardSessionManager"; 129 130 131 if(sessionManagerClassName.equals("com.lutris.appserver.server.sessionEnhydra.StandardSessionManager") || sessionManagerClassName.equals("com.lutris.appserver.server.sessionEnhydra.SimpleServletSessionManager")) 132 { 133 isStandardSessionManager = true; 134 } 135 else 136 { 137 isStandardSessionManager = false; 138 } 139 break; 140 } 141 142 } 144 if(isEnhydraApp && isStandardSessionManager) 145 { 146 Integer sessionNumber = (Integer )getMBeanServer().invoke(enhydraSessionManagerON, "activeSessionCount", new Object [0], new String [0]); 147 return sessionNumber; 148 } 149 else 150 { 151 152 try{ 153 154 ObjectName oname = new ObjectName (jonasName+":type=Manager,path="+context+",*"); 155 156 157 Set enhydraMBean= getMBeanServer().queryNames(oname,null); 158 Object [] oii=enhydraMBean.toArray(); 159 160 161 return (Integer )getMBeanServer().getAttribute((ObjectName )oii[0],"activeSessions"); 162 }catch(Exception e){ 163 return new Integer (0); 164 } 165 } 166 167 }catch(Exception e){ 168 return new Integer (0); 169 } 170 } 171 172 public static String [] getSessionIds(String name){ 173 try{ 174 175 176 177 Properties map = getServletNames(); 178 179 String warName = (String )map.getProperty(name); 180 181 String [] result; 182 183 boolean isEnhydraApp = false; 184 boolean isStandardSessionManager = false; 185 186 String sessionManagerClassName = null; 187 ObjectName enhydraSessionManagerON = null; 188 189 190 ObjectName onameEnhydra = new ObjectName ("EnhydraApplications:type=Context,*"); 191 Set enhydraMBeans= getMBeanServer().queryNames(onameEnhydra,null); 192 Object [] oi=enhydraMBeans.toArray(); 193 194 195 for(int i=0;i<oi.length;i++){ 196 197 198 199 202 203 String appName = (String )getMBeanServer().invoke((ObjectName )oi[i],"getAppName",new Object [0], new String [0]); 205 206 String appRealContext = (String )getMBeanServer().invoke((ObjectName )oi[i],"getAppRealContext",new Object [0], new String [0]); 207 208 appRealContext = appRealContext.replaceAll("\\\\","/"); 209 210 if(appRealContext.endsWith("/")) 211 appRealContext = appRealContext.substring(0,appRealContext.length()-1); 212 213 if(appRealContext.endsWith(warName)) 214 215 { 216 isEnhydraApp =true; 217 enhydraSessionManagerON = new ObjectName ("EnhydraApplications:type=SessionManager,name="+appName); 218 219 try{ 220 sessionManagerClassName = (String )getMBeanServer().getAttribute(enhydraSessionManagerON,"Class"); 221 }catch(AttributeNotFoundException e){ 222 sessionManagerClassName = "com.lutris.appserver.server.sessionEnhydra.StandardSessionManager"; 223 }catch(Exception e){ 224 return new String [0]; 225 } 226 if(sessionManagerClassName==null) 227 sessionManagerClassName = "com.lutris.appserver.server.sessionEnhydra.StandardSessionManager"; 228 229 230 if(sessionManagerClassName.equals("com.lutris.appserver.server.sessionEnhydra.StandardSessionManager") || sessionManagerClassName.equals("com.lutris.appserver.server.sessionEnhydra.SimpleServletSessionManager")) 231 { 232 isStandardSessionManager = true; 233 } 234 else 235 { 236 isStandardSessionManager = false; 237 } 238 break; 239 240 } 241 242 } 244 if(isEnhydraApp && isStandardSessionManager) 245 { 246 247 SessionManager manager = (SessionManager)getMBeanServer().invoke(enhydraSessionManagerON, "getSessionManager", new Object [0], new String [0]); 248 249 java.util.Enumeration sessionKeys = manager.getSessionKeys(); 250 251 result=new String [((StandardSessionManager)manager).activeSessionCount()]; 252 int y=0; 253 while (sessionKeys.hasMoreElements()) 254 { 255 result[y] = (String ) sessionKeys.nextElement(); 256 y++; 257 } 258 259 return result; 260 261 } 262 else 263 { 264 265 ObjectName oname = new ObjectName (jonasName+":type=Manager,path="+name+",*"); 266 267 268 Set enhydraMBean= getMBeanServer().queryNames(oname,null); 269 Object [] oii=enhydraMBean.toArray(); 270 271 Object [] params=new Object [0]; 272 String [] signature=new String [0]; 273 String temp=(String ) getMBeanServer().invoke((ObjectName )oii[0],"listSessionIds",params, signature); 274 275 276 StringTokenizer st=new StringTokenizer (temp); 277 result=new String [st.countTokens()]; 278 int yy=0; 279 280 while(st.hasMoreTokens()) 281 { 282 283 result[yy]=st.nextToken(); 284 yy++; 285 } 286 287 288 return result; 289 } 290 291 292 }catch(Exception e){ 293 return new String [0]; 294 } 295 } 296 297 298 299 300 public static Hashtable getData(String name,String sessionID){ 301 try{ 302 Properties map = getServletNames(); 303 304 305 String warName = (String )map.getProperty(name); 306 Hashtable result=new Hashtable (); 307 308 boolean isEnhydraApp = false; 309 boolean isStandardSessionManager = false; 310 311 String sessionManagerClassName = null; 312 ObjectName enhydraSessionManagerON = null; 313 314 ObjectName onameEnhydra = new ObjectName ("EnhydraApplications:type=Context,*"); 315 Set enhydraMBeans= getMBeanServer().queryNames(onameEnhydra,null); 316 Object [] oi=enhydraMBeans.toArray(); 317 318 for(int i=0;i<oi.length;i++){ 319 322 323 String appName = (String )getMBeanServer().invoke((ObjectName )oi[i],"getAppName",new Object [0], new String [0]); 325 326 String appRealContext = (String )getMBeanServer().invoke((ObjectName )oi[i],"getAppRealContext",new Object [0], new String [0]); 327 328 appRealContext = appRealContext.replaceAll("\\\\","/"); 329 330 if(appRealContext.endsWith("/")) 331 appRealContext = appRealContext.substring(0,appRealContext.length()-1); 332 333 if(appRealContext.endsWith(warName)) 334 { 335 isEnhydraApp =true; 336 enhydraSessionManagerON = new ObjectName ("EnhydraApplications:type=SessionManager,name="+appName); 337 338 try{ 339 sessionManagerClassName = (String )getMBeanServer().getAttribute(enhydraSessionManagerON,"Class"); 340 }catch(AttributeNotFoundException e){ 341 sessionManagerClassName = "com.lutris.appserver.server.sessionEnhydra.StandardSessionManager"; 342 }catch(Exception e){ 343 return new Hashtable (); 344 } 345 if(sessionManagerClassName==null) 346 sessionManagerClassName = "com.lutris.appserver.server.sessionEnhydra.StandardSessionManager"; 347 348 349 if(sessionManagerClassName.equals("com.lutris.appserver.server.sessionEnhydra.StandardSessionManager") || sessionManagerClassName.equals("com.lutris.appserver.server.sessionEnhydra.SimpleServletSessionManager")) 350 { 351 isStandardSessionManager = true; 352 } 353 else 354 { 355 isStandardSessionManager = false; 356 } 357 break; 358 } 359 360 } 362 if(isEnhydraApp && isStandardSessionManager) 363 { 364 365 SessionManager sessionManager = (SessionManager)getMBeanServer().invoke(enhydraSessionManagerON, "getSessionManager", new Object [0], new String [0]); 366 367 Session session = sessionManager.getSession(Thread.currentThread(),sessionID); 368 HttpSession httpses=session.getHttpSession(); 369 370 User user=session.getUser(); 371 372 if(user!=null) 373 result.put("User",user.getName()); 374 375 try { 376 result.put("SessionData",session.getSessionData().toString()); 377 }catch (Exception e){ 378 } 379 380 381 Date d = new Date (httpses.getCreationTime()); 382 result.put("CreationTime",d.toString()); 383 Date dd = new Date (httpses.getLastAccessedTime()); 384 result.put("LastAccessedTime",dd.toString()); 385 386 387 Enumeration attEnum = httpses.getAttributeNames(); 388 389 String temp = null; 390 391 392 Vector names=new Vector (); 393 Vector values=new Vector (); 394 395 while (attEnum.hasMoreElements()) { 396 temp = (String )attEnum.nextElement(); 397 398 names.addElement(temp); 399 400 try { 401 402 values.addElement(((Object )httpses.getAttribute(temp)).toString()); 403 404 } catch (Exception e){ 405 values.addElement(new String ("Couldn't get attribute value!")); 406 } 407 408 } 409 result.put("AttributeNames",names); 410 result.put("AttributeValues",values); 411 412 return result; 413 414 } 415 else 416 { 417 try{ 418 ObjectName oname = new ObjectName (jonasName+":type=Manager,path="+name+",*"); 419 420 421 Set enhydraMBean= getMBeanServer().queryNames(oname,null); 422 Object [] oii=enhydraMBean.toArray(); 423 424 Object [] params=new Object []{ sessionID }; 425 String [] signature=new String []{ "java.lang.String" }; 426 String lastAccessedTime=(String ) getMBeanServer().invoke((ObjectName )oii[0],"getLastAccessedTime",params, signature); 427 428 Object [] params1=new Object []{ sessionID , "session"}; 429 String [] signature1=new String []{ "java.lang.String" , "java.lang.String" }; 430 String objekat=(String ) getMBeanServer().invoke((ObjectName )oii[0],"getSessionAttribute",params1, signature1); 431 432 433 if(objekat!=null) 434 { 435 StringTokenizer st=new StringTokenizer (objekat,"\n"); 436 437 while(st.hasMoreTokens()) 438 { 439 String temp=st.nextToken(); 440 if(temp.startsWith("CreationTime:")) 441 result.put("CreationTime",temp.substring(temp.indexOf(":")+1)); 442 if(temp.startsWith("User:")) 443 result.put("User",temp.substring(temp.indexOf(":")+1)); 444 if(temp.startsWith("SessionData:")) 445 result.put("SessionData",temp.substring(temp.indexOf(":")+1)); 446 } 447 } 448 449 450 result.put("LastAccessedTime",lastAccessedTime); 451 452 Vector names=new Vector (); 453 Vector values=new Vector (); 454 455 456 return result; 457 }catch(Exception e){ 458 return new Hashtable (); 459 } 460 } 461 462 463 464 465 }catch(Exception e){ 466 return new Hashtable (); 467 } 468 469 470 } 471 472 473 private static MBeanServer getMBeanServer() 474 { 475 if(mBeanServer==null) 476 mBeanServer = Registry.getRegistry(null, null).getMBeanServer(); 477 478 return mBeanServer; 479 } 480 } | Popular Tags |