KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jboss > test > management > test > JSR77SpecUnitTestCase


1 /*
2   * JBoss, Home of Professional Open Source
3   * Copyright 2005, JBoss Inc., and individual contributors as indicated
4   * by the @authors tag. See the copyright.txt in the distribution for a
5   * full listing of individual contributors.
6   *
7   * This is free software; you can redistribute it and/or modify it
8   * under the terms of the GNU Lesser General Public License as
9   * published by the Free Software Foundation; either version 2.1 of
10   * the License, or (at your option) any later version.
11   *
12   * This software is distributed in the hope that it will be useful,
13   * but WITHOUT ANY WARRANTY; without even the implied warranty of
14   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15   * Lesser General Public License for more details.
16   *
17   * You should have received a copy of the GNU Lesser General Public
18   * License along with this software; if not, write to the Free
19   * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
20   * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
21   */

22 package org.jboss.test.management.test;
23
24 import java.lang.reflect.UndeclaredThrowableException JavaDoc;
25 import java.rmi.RemoteException JavaDoc;
26 import java.util.HashSet JavaDoc;
27 import java.util.Iterator JavaDoc;
28 import java.util.Set JavaDoc;
29 import javax.management.JMException JavaDoc;
30 import javax.management.MBeanAttributeInfo JavaDoc;
31 import javax.management.MBeanInfo JavaDoc;
32 import javax.management.Notification JavaDoc;
33 import javax.management.NotificationListener JavaDoc;
34 import javax.management.ObjectName JavaDoc;
35 import javax.management.j2ee.ListenerRegistration JavaDoc;
36 import javax.management.j2ee.Management JavaDoc;
37 import javax.management.j2ee.ManagementHome JavaDoc;
38 import javax.management.j2ee.statistics.StatelessSessionBeanStats JavaDoc;
39 import javax.management.j2ee.statistics.Statistic JavaDoc;
40 import javax.rmi.PortableRemoteObject JavaDoc;
41
42 import junit.framework.Test;
43 import org.jboss.management.j2ee.J2EEManagedObject;
44 import org.jboss.management.j2ee.J2EETypeConstants;
45 import org.jboss.test.JBossTestCase;
46
47 /**
48  * Test of JSR-77 specification conformance using the Management interface.
49  * These test the basic JSR-77 handling and access.
50  *
51  * @author Andreas Schaefer
52  * @author Scott.Stark@jboss.org
53  * @version $Revision: 40282 $
54  */

55 public class JSR77SpecUnitTestCase
56    extends JBossTestCase
57 {
58    // Constants -----------------------------------------------------
59
public static final String JavaDoc TEST_DATASOURCE = "DefaultDS";
60    public static final String JavaDoc TEST_MAIL = "DefaultMail";
61    private String JavaDoc jsr77Domain;
62
63    // Constructors --------------------------------------------------
64

65    public JSR77SpecUnitTestCase(String JavaDoc name)
66    {
67       super(name);
68    }
69
70    // Public --------------------------------------------------------
71

72    /** Test that the JSR77 MEJB is available
73     * @throws Exception
74     */

75    public void testConnect() throws Exception JavaDoc
76    {
77       log.debug("+++ testConnect");
78       Management JavaDoc jsr77MEJB = getManagementEJB();
79       String JavaDoc lDomain = jsr77MEJB.getDefaultDomain();
80       log.debug("+++ testConnect, domain: " + lDomain);
81       jsr77MEJB.remove();
82    }
83
84    /** Test the JSR-77 J2EEDomain availability
85     * @throws Exception
86     */

87    public void testJ2EEDomain()
88       throws
89       Exception JavaDoc
90    {
91       getLog().debug("+++ testJ2EEDomain");
92       Management JavaDoc jsr77MEJB = getManagementEJB();
93       String JavaDoc domain = jsr77MEJB.getDefaultDomain();
94       log.debug("domain=("+domain+")");
95       String JavaDoc nameStr = domain
96          + ":" + J2EEManagedObject.TYPE + "=" + J2EETypeConstants.J2EEDomain
97          + ",name="+domain;
98       log.debug("nameStr=("+nameStr+")");
99       ObjectName JavaDoc domainQuery = new ObjectName JavaDoc(nameStr);
100       log.debug("domainQuery=("+domainQuery+")");
101       Set JavaDoc names = jsr77MEJB.queryNames(domainQuery, null);
102       if (names.isEmpty())
103       {
104          fail("Could not find JSR-77 J2EEDomain '" + J2EETypeConstants.J2EEDomain + "'");
105       }
106       if (names.size() > 1)
107       {
108          fail("Found more than one JSR-77 J2EEDomain '" + J2EETypeConstants.J2EEDomain + "'");
109       }
110       ObjectName JavaDoc jsr77MEJBDomain = (ObjectName JavaDoc) names.iterator().next();
111       getLog().debug("+++ testJ2EEDomain, root: " + jsr77MEJBDomain);
112       jsr77MEJB.remove();
113    }
114
115    /** Test the JSR-77 J2EEServer availability
116     * @throws Exception
117     */

118    public void testJ2EEServer() throws Exception JavaDoc
119    {
120       getLog().debug("+++ testJ2EEServer");
121       Management JavaDoc jsr77MEJB = getManagementEJB();
122       String JavaDoc domainName = jsr77MEJB.getDefaultDomain();
123       ObjectName JavaDoc queryName = new ObjectName JavaDoc(domainName + ":" +
124          J2EEManagedObject.TYPE + "=" + J2EETypeConstants.J2EEServer + "," + "*");
125
126       Set JavaDoc names = jsr77MEJB.queryNames(queryName, null);
127       if (names.isEmpty())
128       {
129          fail("Could not find JSR-77 J2EEServer '" + J2EETypeConstants.J2EEServer + "'");
130       }
131       Iterator JavaDoc iter = names.iterator();
132       ObjectName JavaDoc serverName = null;
133       while (iter.hasNext())
134       {
135          serverName = (ObjectName JavaDoc) iter.next();
136          getLog().debug("J2EEServer: " + serverName);
137       }
138
139       // Get the server info
140
String JavaDoc vendor = (String JavaDoc) jsr77MEJB.getAttribute(serverName, "serverVendor");
141       getLog().debug("ServerVendor: " + vendor);
142       String JavaDoc version = (String JavaDoc) jsr77MEJB.getAttribute(serverName, "serverVersion");
143       getLog().debug("ServerVersion: " + version);
144
145       // Get the list of JVMs
146
String JavaDoc[] jvms = (String JavaDoc[]) jsr77MEJB.getAttribute(serverName, "javaVMs");
147       if (jvms == null || jvms.length == 0)
148          fail("Failed to find any JavaVMs");
149       ObjectName JavaDoc jvm = new ObjectName JavaDoc(jvms[0]);
150       getLog().debug("JavaVMs[0]: " + jvms[0]);
151       String JavaDoc javaVendor = (String JavaDoc) jsr77MEJB.getAttribute(jvm, "javaVendor");
152       getLog().debug("JavaVendor: " + javaVendor);
153       String JavaDoc javaVersion = (String JavaDoc) jsr77MEJB.getAttribute(jvm, "javaVersion");
154       getLog().debug("JavaVersion: " + javaVersion);
155       String JavaDoc node = (String JavaDoc) jsr77MEJB.getAttribute(jvm, "node");
156       getLog().debug("Node: " + node);
157
158       jsr77MEJB.remove();
159    }
160
161    /** Test the JSR-77 JNDIResource availability
162     * @throws Exception
163     */

164    public void testJNDIResource() throws Exception JavaDoc
165    {
166       getLog().debug("+++ testJNDIResource");
167       Management JavaDoc jsr77MEJB = getManagementEJB();
168       String JavaDoc domainName = jsr77MEJB.getDefaultDomain();
169       ObjectName JavaDoc queryName = new ObjectName JavaDoc(domainName + ":" +
170          J2EEManagedObject.TYPE + "=" + J2EETypeConstants.JNDIResource + "," + "*");
171       Set JavaDoc names = jsr77MEJB.queryNames(queryName, null);
172       if (names.isEmpty())
173       {
174          fail("Could not find JSR-77 JNDIResource '" + J2EETypeConstants.JNDIResource + "'");
175       }
176       Iterator JavaDoc iter = names.iterator();
177       while (iter.hasNext())
178          getLog().debug("JNDIResource: " + iter.next());
179       jsr77MEJB.remove();
180    }
181
182    /** Test JavaMailResource availability.
183     * @throws Exception
184     */

185    public void testJavaMailResource() throws Exception JavaDoc
186    {
187       getLog().debug("+++ testJavaMailResource");
188       Management JavaDoc jsr77MEJB = getManagementEJB();
189       String JavaDoc domainName = jsr77MEJB.getDefaultDomain();
190       ObjectName JavaDoc queryName = new ObjectName JavaDoc(domainName + ":" +
191          J2EEManagedObject.TYPE + "=" + J2EETypeConstants.JavaMailResource + "," + "*");
192       Set JavaDoc names = jsr77MEJB.queryNames(queryName, null);
193       if (names.isEmpty())
194       {
195          fail("Could not find JSR-77 JavaMailResource '" + J2EETypeConstants.JavaMailResource + "'");
196       }
197       Iterator JavaDoc iter = names.iterator();
198       while (iter.hasNext())
199          getLog().debug("JavaMailResource: " + iter.next());
200       jsr77MEJB.remove();
201    }
202
203    /** Test JCAResource availability.
204     * @throws Exception
205     */

206    public void testJCAResource() throws Exception JavaDoc
207    {
208       getLog().debug("+++ testJCAResource");
209       Management JavaDoc jsr77MEJB = getManagementEJB();
210       String JavaDoc domainName = jsr77MEJB.getDefaultDomain();
211       ObjectName JavaDoc queryName = new ObjectName JavaDoc(domainName + ":" +
212          J2EEManagedObject.TYPE + "=" + J2EETypeConstants.JCAResource + "," + "*");
213       Set JavaDoc names = jsr77MEJB.queryNames(queryName, null);
214       if (names.isEmpty())
215       {
216          fail("Could not find JSR-77 JCAResource '" + J2EETypeConstants.JCAResource + "'");
217       }
218       Iterator JavaDoc iter = names.iterator();
219       while (iter.hasNext())
220          getLog().debug("JCAResource: " + iter.next());
221       jsr77MEJB.remove();
222    }
223
224    /** Test JTAResource availability.
225     * @throws Exception
226     */

227    public void testJTAResource() throws Exception JavaDoc
228    {
229       getLog().debug("+++ testJTAResource");
230       Management JavaDoc jsr77MEJB = getManagementEJB();
231       String JavaDoc domainName = jsr77MEJB.getDefaultDomain();
232       ObjectName JavaDoc queryName = new ObjectName JavaDoc(domainName + ":" +
233          J2EEManagedObject.TYPE + "=" + J2EETypeConstants.JTAResource + "," + "*");
234       Set JavaDoc names = jsr77MEJB.queryNames(queryName, null);
235       if (names.isEmpty())
236       {
237          fail("Could not find JSR-77 JTAResource '" + J2EETypeConstants.JTAResource + "'");
238       }
239       Iterator JavaDoc iter = names.iterator();
240       while (iter.hasNext())
241          getLog().debug("JTAResource: " + iter.next());
242       jsr77MEJB.remove();
243    }
244
245    /** Test JMSResource availability.
246     * @throws Exception
247     */

248    public void testJMSResource() throws Exception JavaDoc
249    {
250       getLog().debug("+++ testJMSResource");
251       Management JavaDoc jsr77MEJB = getManagementEJB();
252       String JavaDoc domainName = jsr77MEJB.getDefaultDomain();
253       ObjectName JavaDoc queryName = new ObjectName JavaDoc(domainName + ":" +
254          J2EEManagedObject.TYPE + "=" + J2EETypeConstants.JMSResource + "," + "*");
255       Set JavaDoc names = jsr77MEJB.queryNames(queryName, null);
256       if (names.isEmpty())
257       {
258          fail("Could not find JSR-77 JMSResource '" + J2EETypeConstants.JMSResource + "'");
259       }
260       Iterator JavaDoc iter = names.iterator();
261       while (iter.hasNext())
262          getLog().debug("JMSResource: " + iter.next());
263       jsr77MEJB.remove();
264    }
265
266    /** Test the default JCAConnectionFactory availability.
267     * @throws Exception
268     */

269    public void testJCAConnectionFactory()
270       throws
271       Exception JavaDoc
272    {
273       getLog().debug("+++ testJCAConnectionFactory");
274       Management JavaDoc jsr77MEJB = getManagementEJB();
275       Set JavaDoc names = jsr77MEJB.queryNames(
276          getConnectionFactoryName(jsr77MEJB),
277          null
278       );
279       if (names.isEmpty())
280       {
281          fail("Could not found JSR-77 JCAConnectionFactory named '"
282             + TEST_DATASOURCE + "'");
283       }
284       if (names.size() > 1)
285       {
286          fail("Found more than one JSR-77 JCAConnectionFactory named '"
287             + TEST_DATASOURCE + "'");
288       }
289       ObjectName JavaDoc factory = (ObjectName JavaDoc) names.iterator().next();
290       getLog().debug("+++ testJCAConnectionFactory, " + TEST_DATASOURCE
291          + ": " + factory);
292       jsr77MEJB.remove();
293    }
294
295    /** Test EJBModule for the ejb-management.jar
296     * @throws Exception
297     */

298    public void testEJBModule() throws Exception JavaDoc
299    {
300       getLog().debug("+++ testEJBModule");
301       Management JavaDoc jsr77MEJB = getManagementEJB();
302       String JavaDoc domainName = jsr77MEJB.getDefaultDomain();
303       ObjectName JavaDoc mejbModuleName = new ObjectName JavaDoc(domainName + ":" +
304          "J2EEServer=Local,J2EEApplication=null,"
305          + J2EEManagedObject.TYPE + "=" + J2EETypeConstants.EJBModule
306          + ",name=ejb-management.jar");
307       boolean isRegistered = jsr77MEJB.isRegistered(mejbModuleName);
308       assertTrue(mejbModuleName + " is registered", isRegistered);
309       String JavaDoc[] ejbs = (String JavaDoc[]) jsr77MEJB.getAttribute(mejbModuleName, "ejbs");
310       assertTrue("ejb-management.jar.Ejbs.length > 0", ejbs.length > 0);
311       for (int n = 0; n < ejbs.length; n++)
312       {
313          ObjectName JavaDoc ejb = new ObjectName JavaDoc(ejbs[n]);
314          getLog().debug("Ejbs[" + n + "]=" + ejb);
315          StatelessSessionBeanStats JavaDoc stats = (StatelessSessionBeanStats JavaDoc)
316             jsr77MEJB.getAttribute(ejb, "stats");
317          String JavaDoc[] statNames = stats.getStatisticNames();
318          for (int s = 0; s < statNames.length; s++)
319          {
320             Statistic JavaDoc theStat = stats.getStatistic(statNames[s]);
321             getLog().debug(theStat);
322          }
323       }
324       jsr77MEJB.remove();
325    }
326
327    /** A test of accessing all StatelessSessionBean stats
328     * @throws Exception
329     */

330    public void testEJBStats() throws Exception JavaDoc
331    {
332       getLog().debug("+++ testEJBStats");
333       Management JavaDoc jsr77MEJB = getManagementEJB();
334       String JavaDoc beanName = null;
335       String JavaDoc query = "*:j2eeType=StatelessSessionBean,*";
336       log.info(query);
337       ObjectName JavaDoc ejbName = new ObjectName JavaDoc(query);
338       Set JavaDoc managedObjects = jsr77MEJB.queryNames(ejbName, null);
339       log.info("Found " + managedObjects.size() + " objects");
340       Iterator JavaDoc i = managedObjects.iterator();
341       while (i.hasNext())
342       {
343          ObjectName JavaDoc oName = (ObjectName JavaDoc) i.next();
344          beanName = oName.getKeyProperty("name");
345          StatelessSessionBeanStats JavaDoc stats =
346             (StatelessSessionBeanStats JavaDoc) jsr77MEJB.getAttribute(oName,
347                "stats");
348          Statistic JavaDoc[] allStats = stats.getStatistics();
349          for (int s = 0; s < allStats.length; s++)
350          {
351             Statistic JavaDoc theStat = allStats[s];
352             getLog().debug(theStat);
353          }
354       }
355       jsr77MEJB.remove();
356    }
357
358    /** Test WebModule for the jmx-console.war
359     * @throws Exception
360     */

361    public void testWebModule() throws Exception JavaDoc
362    {
363       getLog().debug("+++ testWebModule");
364       Management JavaDoc jsr77MEJB = getManagementEJB();
365       String JavaDoc domainName = jsr77MEJB.getDefaultDomain();
366       ObjectName JavaDoc webModuleName = new ObjectName JavaDoc(domainName + ":" +
367          "J2EEServer=Local,J2EEApplication=null,"
368          + J2EEManagedObject.TYPE + "=" + J2EETypeConstants.WebModule
369          + ",name=jmx-console.war");
370       boolean isRegistered = jsr77MEJB.isRegistered(webModuleName);
371       assertTrue(webModuleName + " is registered", isRegistered);
372       String JavaDoc[] servlets = (String JavaDoc[]) jsr77MEJB.getAttribute(webModuleName, "servlets");
373       assertTrue("jmx-console.war.Servlets.length > 0", servlets.length > 0);
374       for (int n = 0; n < servlets.length; n++)
375          getLog().debug("Servlets[" + n + "]=" + servlets[n]);
376       jsr77MEJB.remove();
377    }
378
379    /** Test ResourceAdapterModule for the jboss-local-jdbc.rar
380     * @throws Exception
381     */

382    public void testResourceAdapterModule() throws Exception JavaDoc
383    {
384       getLog().debug("+++ testResourceAdapterModule");
385       Management JavaDoc jsr77MEJB = getManagementEJB();
386       String JavaDoc domainName = jsr77MEJB.getDefaultDomain();
387       ObjectName JavaDoc rarModuleName = new ObjectName JavaDoc(domainName + ":" +
388          "J2EEServer=Local,J2EEApplication=null,"
389          + J2EEManagedObject.TYPE + "=" + J2EETypeConstants.ResourceAdapterModule
390          + ",name=jboss-local-jdbc.rar");
391       boolean isRegistered = jsr77MEJB.isRegistered(rarModuleName);
392       assertTrue(rarModuleName + " is registered", isRegistered);
393       String JavaDoc[] ras = (String JavaDoc[]) jsr77MEJB.getAttribute(rarModuleName, "resourceAdapters");
394       assertTrue("jboss-local-jdbc.rar.ResourceAdapters.length > 0", ras.length > 0);
395       for (int n = 0; n < ras.length; n++)
396          getLog().debug("ResourceAdapters[" + n + "]=" + ras[n]);
397       jsr77MEJB.remove();
398    }
399
400    /**
401     * Test the notification delivery by restarting Default DataSource
402     */

403    public void testNotificationDeliver()
404       throws Exception JavaDoc
405    {
406       try
407       {
408          getLog().debug("+++ testNotificationDeliver");
409          Management JavaDoc jsr77MEJB = getManagementEJB();
410          Set JavaDoc names = jsr77MEJB.queryNames(getMailName(jsr77MEJB), null);
411          if (names.isEmpty())
412          {
413             fail("Could not found JSR-77 JavaMailResource'" + TEST_MAIL + "'");
414          }
415          ObjectName JavaDoc lMail = (ObjectName JavaDoc) names.iterator().next();
416          Listener JavaDoc lLocalListener = new Listener JavaDoc();
417          ListenerRegistration JavaDoc lListenerFactory = jsr77MEJB.getListenerRegistry();
418          getLog().debug("+++ testNotificationDeliver, add Notification Listener to " + TEST_MAIL +
419             " with Listener Registry: " + lListenerFactory);
420          lListenerFactory.addNotificationListener(
421             lMail,
422             lLocalListener,
423             null,
424             null
425          );
426          getLog().debug("+++ testNotificationDeliver, stop " + TEST_MAIL + "");
427          jsr77MEJB.invoke(lMail, "stop", new Object JavaDoc[]{}, new String JavaDoc[]{});
428          getLog().debug("+++ testNotificationDeliver, start " + TEST_MAIL + "");
429          jsr77MEJB.invoke(lMail, "start", new Object JavaDoc[]{}, new String JavaDoc[]{});
430          // Wait 5 seconds to ensure that the notifications are delivered
431
Thread.sleep(5000);
432          if (lLocalListener.getNumberOfNotifications() < 2)
433          {
434             fail("Not enough notifications received: " + lLocalListener.getNumberOfNotifications());
435          }
436          getLog().debug("+++ testNotificationDeliver, remove Notification Listener from " + TEST_MAIL + "");
437          lListenerFactory.removeNotificationListener(
438             lMail,
439             lLocalListener
440          );
441          jsr77MEJB.remove();
442       }
443       catch (Exception JavaDoc e)
444       {
445          log.debug("failed", e);
446          throw e;
447       }
448    }
449
450    /**
451     * Test the Navigation through the current JSR-77 tree
452     */

453    public void testNavigation()
454       throws Exception JavaDoc
455    {
456       log.info("+++ testNavigation");
457       Management JavaDoc jsr77MEJB = null;
458       try
459       {
460          // Get Management EJB and then the management domain
461
jsr77MEJB = getManagementEJB();
462          String JavaDoc domain = jsr77MEJB.getDefaultDomain();
463          ObjectName JavaDoc domainQuery = new ObjectName JavaDoc(domain
464             + ":" + J2EEManagedObject.TYPE + "=" + J2EETypeConstants.J2EEDomain
465             + ",name="+domain);
466          Set JavaDoc names = jsr77MEJB.queryNames(domainQuery, null);
467
468          if (names.isEmpty())
469          {
470             fail("Could not find any J2EEDomain");
471          }
472          if (names.size() > 1)
473          {
474             fail("Found more than one J2EEDomain, "+names);
475          }
476
477          ObjectName JavaDoc jsr77MEJBDomain = (ObjectName JavaDoc) names.iterator().next();
478          log.info("J2EEDomain: "+jsr77MEJBDomain);
479          jsr77Domain = jsr77MEJBDomain.getDomain();
480          // Report the attributes and references
481
report(jsr77MEJB, jsr77MEJBDomain, new HashSet JavaDoc());
482       }
483       catch (Exception JavaDoc e)
484       {
485          log.debug("failed", e);
486          throw e;
487       }
488       catch (Error JavaDoc err)
489       {
490          log.debug("failed", err);
491          throw err;
492       }
493       finally
494       {
495          if (jsr77MEJB != null)
496          {
497             jsr77MEJB.remove();
498          }
499       }
500    }
501
502    private void report(Management JavaDoc jsr77EJB, ObjectName JavaDoc mbean, HashSet JavaDoc reportedNames)
503       throws JMException JavaDoc,
504       RemoteException JavaDoc
505    {
506       if (mbean == null)
507          return;
508       
509       if (reportedNames.contains(mbean))
510       {
511          log.debug("Skipping already reported MBean: " + mbean);
512          return;
513       }
514
515       log.debug("Begin Report Object: " + mbean);
516       reportedNames.add(mbean);
517       MBeanInfo JavaDoc mbeanInfo = jsr77EJB.getMBeanInfo(mbean);
518       MBeanAttributeInfo JavaDoc[] attrInfo = mbeanInfo.getAttributes();
519       String JavaDoc[] attrNames = new String JavaDoc[attrInfo.length];
520       // First just report all attribute names and types
521
for (int i = 0; i < attrInfo.length; i++)
522       {
523          String JavaDoc name = attrInfo[i].getName();
524          String JavaDoc type = attrInfo[i].getType();
525          boolean readable = attrInfo[i].isReadable();
526          log.debug("Attribute: " + name + ", " + type + ", readable: " + readable);
527          attrNames[i] = attrInfo[i].getName();
528       }
529
530       // Now try to obtain the values
531
for (int i = 0; i < attrNames.length; i++)
532       {
533          String JavaDoc name = attrNames[i];
534          Object JavaDoc value = null;
535          try
536          {
537             if (attrInfo[i].isReadable() == true)
538                value = jsr77EJB.getAttribute(mbean, name);
539          }
540          catch (UndeclaredThrowableException JavaDoc e)
541          {
542             Throwable JavaDoc ex = e.getUndeclaredThrowable();
543             log.debug("Failed to access attribute: " + name + ", " + ex.getMessage());
544          }
545          catch (Exception JavaDoc e)
546          {
547             // HACK: Ignore moved attribute error for message cache on the persistence manager
548
if (name.equals("MessageCache"))
549                continue;
550
551             /* This is not a fatal exception as not all attributes are remotable
552             but all javax.management.* and org.jboss.management.j2ee.* types
553             should be.
554             */

555             log.debug("Failed to access attribute: " + name, e);
556             String JavaDoc type = attrInfo[i].getType();
557             boolean isJSR77Type = type.startsWith("javax.management") ||
558                type.startsWith("org.jboss.management.j2ee");
559             assertTrue("Bad attribute(" + name + ") is not a JSR77 type", isJSR77Type == false);
560          }
561
562          if (value == null)
563          {
564             log.debug("Attribute: " + name + " is empty");
565          }
566          else if (ObjectName JavaDoc.class.getName().equals(attrInfo[i].getType()))
567          {
568             // Check if this attribute should not be followed
569
ObjectName JavaDoc toName = (ObjectName JavaDoc) value;
570             if (checkBlock(toName, name))
571             {
572                log.debug("Blocked Attribute: " + name + " contains: " + toName);
573                continue;
574             }
575             // Report this Object's attribute first
576
log.debug("Attribute: " + name + ", value: " + value + ", is reported");
577             report(jsr77EJB, (ObjectName JavaDoc) value, reportedNames);
578          }
579          else if (ObjectName JavaDoc[].class.getName().equals(attrInfo[i].getType()))
580          {
581             ObjectName JavaDoc[] names = (ObjectName JavaDoc[]) value;
582             for (int j = 0; j < names.length; j++)
583             {
584                ObjectName JavaDoc toName = names[j];
585                // Check if this name should not be followed
586
if (checkBlock(toName, name))
587                {
588                   log.debug("Blocked ObjectName: " + toName);
589                   continue;
590                }
591                log.debug("Attribute: " + name + ", value: " + toName + ", is reported");
592                report(jsr77EJB, toName, reportedNames);
593             }
594          }
595          else
596          {
597             log.debug("Attribute: " + name + " contains: " + value);
598          }
599       }
600       log.debug("End Report Object: " + mbean);
601    }
602
603    /**
604     * @return True if the given attribute must be blocked to avoid
605     * an endless loop in the graph of JSR-77 object name
606     * references (like J2EEServer refences J2EEDeployedObjects
607     * and this references J2EEServer)
608     */

609    private boolean checkBlock(ObjectName JavaDoc name, String JavaDoc attrName)
610    {
611       // If the mbean is not a jsr77 mean ignore the attribute
612
String JavaDoc domain = name == null ? "" : name.getDomain();
613       if( domain.equals(this.jsr77Domain) == false )
614          return true;
615       
616       String JavaDoc type = (String JavaDoc) name.getKeyPropertyList().get(J2EEManagedObject.TYPE);
617       if (J2EETypeConstants.EJBModule.equals(type) ||
618          J2EETypeConstants.WebModule.equals(type) ||
619          J2EETypeConstants.ResourceAdapterModule.equals(type) ||
620          J2EETypeConstants.ServiceModule.equals(type))
621       {
622          if ("Server".equals(attrName))
623          {
624             // Block Attribute Server for any J2EE Deployed Objects
625
return true;
626          }
627       }
628       return "Parent".equals(attrName) ||
629          "ObjectName".equals(attrName);
630    }
631
632    private Management JavaDoc getManagementEJB()
633       throws
634       Exception JavaDoc
635    {
636       getLog().debug("+++ getManagementEJB()");
637       Object JavaDoc lObject = getInitialContext().lookup("ejb/mgmt/MEJB");
638       ManagementHome JavaDoc home = (ManagementHome JavaDoc) PortableRemoteObject.narrow(
639          lObject,
640          ManagementHome JavaDoc.class
641       );
642       getLog().debug("Found JSR-77 Management EJB (MEJB)");
643       return home.create();
644    }
645
646    private ObjectName JavaDoc getConnectionFactoryName(Management JavaDoc jsr77MEJB) throws Exception JavaDoc
647    {
648       String JavaDoc domainName = jsr77MEJB.getDefaultDomain();
649       return new ObjectName JavaDoc(domainName + ":" +
650          J2EEManagedObject.TYPE + "=" + J2EETypeConstants.JCAConnectionFactory + "," +
651          "name=" + TEST_DATASOURCE + "," +
652          "*"
653       );
654    }
655
656    private ObjectName JavaDoc getMailName(Management JavaDoc jsr77MEJB) throws Exception JavaDoc
657    {
658       String JavaDoc domainName = jsr77MEJB.getDefaultDomain();
659       return new ObjectName JavaDoc(domainName + ":" +
660          J2EEManagedObject.TYPE + "=" + J2EETypeConstants.JavaMailResource + "," +
661          "*"
662       );
663    }
664    // Inner classes -------------------------------------------------
665

666    private class Listener implements NotificationListener JavaDoc
667    {
668
669       private int mNrOfNotifications = 0;
670
671       public int getNumberOfNotifications()
672       {
673          return mNrOfNotifications;
674       }
675
676       public void handleNotification(Notification JavaDoc pNotification, Object JavaDoc pHandbank)
677       {
678          mNrOfNotifications++;
679       }
680    }
681
682    public static Test suite() throws Exception JavaDoc
683    {
684       return getDeploySetup(JSR77SpecUnitTestCase.class, "ejb-management.jar");
685    }
686
687 }
688
Popular Tags