[jboss-cvs] jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki ...

Christian Bauer christian at hibernate.org
Fri Apr 27 06:34:38 EDT 2007


  User: cbauer  
  Date: 07/04/27 06:34:38

  Modified:    examples/wiki/src/main/org/jboss/seam/wiki  WikiInit.java
  Log:
  Now deployable on 4.2 out-of-box (local Hibernate JARs) and optimized SQL and caching
  
  Revision  Changes    Path
  1.3       +168 -1    jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/WikiInit.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: WikiInit.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/WikiInit.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -b -r1.2 -r1.3
  --- WikiInit.java	5 Apr 2007 14:38:26 -0000	1.2
  +++ WikiInit.java	27 Apr 2007 10:34:38 -0000	1.3
  @@ -1,9 +1,28 @@
   package org.jboss.seam.wiki;
   
   import org.jboss.seam.annotations.*;
  +import org.jboss.seam.annotations.Name;
   import org.jboss.seam.ScopeType;
  +import org.jboss.seam.core.Events;
   import org.jboss.seam.contexts.Contexts;
   import org.jboss.seam.log.Log;
  +import org.hibernate.util.NamingHelper;
  +import org.hibernate.jmx.StatisticsService;
  +
  +import javax.management.MBeanServer;
  +import javax.management.MBeanServerFactory;
  +import javax.management.ObjectName;
  +import javax.sql.DataSource;
  +import javax.naming.*;
  +import java.lang.management.ManagementFactory;
  +import java.lang.reflect.Proxy;
  +import java.util.Map;
  +import java.util.HashMap;
  +import java.util.Properties;
  +import java.util.ArrayList;
  +
  +import net.sf.ehcache.CacheManager;
  +import net.sf.ehcache.management.ManagementService;
   
   @Name("wikiInit")
   @Scope(ScopeType.APPLICATION)
  @@ -12,8 +31,156 @@
   
       @Logger static Log log;
   
  +    private ObjectName hibernateMBeanName;
  +
       @Create
  -    public void init() {
  +    public void init() throws Exception {
           log.info("Starting LaceWiki...");
  +
  +        //System.out.println(listJNDITree(""));
  +
  +        log.info("registering Hibernate statistics MBean");
  +        hibernateMBeanName = new ObjectName("Hibernate:type=statistics,application=laceWiki");
  +        StatisticsService mBean = new StatisticsService();
  +        mBean.setSessionFactoryJNDIName("SessionFactories/laceWikiSF");
  +        ManagementFactory.getPlatformMBeanServer().registerMBean(mBean, hibernateMBeanName);
  +
  +    }
  +
  +    @Destroy
  +    public void shutdown() throws Exception {
  +        log.info("Stopping LaceWiki");
  +
  +        log.info("unregistering Hibernate statistics MBean");
  +        ManagementFactory.getPlatformMBeanServer().unregisterMBean(hibernateMBeanName);
  +    }
  +
  +    /** Utility to debug JBoss JNDI problems */
  +    public static String listJNDITree(String namespace) {
  +        StringBuffer buffer = new StringBuffer(4096);
  +        try {
  +            Properties props = new Properties();
  +            Context context = new InitialContext(props); // From jndi.properties
  +            if (namespace!= null)
  +                context = (Context) context.lookup(namespace);
  +            buffer.append("Namespace: " + namespace +"\n");
  +            buffer.append("#####################################\n");
  +            list(context, " ", buffer, true);
  +            buffer.append("#####################################\n");
  +        }
  +        catch (NamingException e) {
  +            buffer.append("Failed to get InitialContext, " + e.toString(true));
  +        }
  +        return buffer.toString();
  +    }
  +
  +    private static void list(Context ctx, String indent, StringBuffer buffer, boolean verbose) {
  +        ClassLoader loader = Thread.currentThread().getContextClassLoader();
  +        try {
  +            NamingEnumeration ne = ctx.list("");
  +            while (ne.hasMore()) {
  +                NameClassPair pair = (NameClassPair) ne.next();
  +
  +                String name = pair.getName();
  +                String className = pair.getClassName();
  +                boolean recursive = false;
  +                boolean isLinkRef = false;
  +                boolean isProxy = false;
  +                Class c = null;
  +                try {
  +                    c = loader.loadClass(className);
  +
  +                    if (Context.class.isAssignableFrom(c))
  +                        recursive = true;
  +                    if (LinkRef.class.isAssignableFrom(c))
  +                        isLinkRef = true;
  +
  +                    isProxy = Proxy.isProxyClass(c);
  +                }
  +                catch (ClassNotFoundException cnfe) {
  +                    // If this is a $Proxy* class its a proxy
  +                    if (className.startsWith("$Proxy")) {
  +                        isProxy = true;
  +                        // We have to get the class from the binding
  +                        try {
  +                            Object p = ctx.lookup(name);
  +                            c = p.getClass();
  +                        }
  +                        catch (NamingException e) {
  +                            Throwable t = e.getRootCause();
  +                            if (t instanceof ClassNotFoundException) {
  +                                // Get the class name from the exception msg
  +                                String msg = t.getMessage();
  +                                if (msg != null) {
  +                                    // Reset the class name to the CNFE class
  +                                    className = msg;
  +                                }
  +                            }
  +                        }
       }
  +                }
  +
  +                buffer.append(indent + " +- " + name);
  +
  +                // Display reference targets
  +                if (isLinkRef) {
  +                    // Get the
  +                    try {
  +                        Object obj = ctx.lookupLink(name);
  +
  +                        LinkRef link = (LinkRef) obj;
  +                        buffer.append("[link -> ");
  +                        buffer.append(link.getLinkName());
  +                        buffer.append(']');
  +                    }
  +                    catch (Throwable t) {
  +                        buffer.append("invalid]");
  +                    }
  +                }
  +
  +                // Display proxy interfaces
  +                if (isProxy) {
  +                    buffer.append(" (proxy: " + pair.getClassName());
  +                    if (c != null) {
  +                        Class[] ifaces = c.getInterfaces();
  +                        buffer.append(" implements ");
  +                        for (int i = 0; i < ifaces.length; i++) {
  +                            buffer.append(ifaces[i]);
  +                            buffer.append(',');
  +                        }
  +                        buffer.setCharAt(buffer.length() - 1, ')');
  +                    } else {
  +                        buffer.append(" implements " + className + ")");
  +                    }
  +                } else if (verbose) {
  +                    buffer.append(" (class: " + pair.getClassName() + ")");
  +                }
  +
  +                buffer.append('\n');
  +                if (recursive) {
  +                    try {
  +                        Object value = ctx.lookup(name);
  +                        if (value instanceof Context) {
  +                            Context subctx = (Context) value;
  +                            list(subctx, indent + " |  ", buffer, verbose);
  +                        } else {
  +                            buffer.append(indent + " |   NonContext: " + value);
  +                            buffer.append('\n');
  +                        }
  +                    }
  +                    catch (Throwable t) {
  +                        buffer.append("Failed to lookup: " + name + ", errmsg=" + t.getMessage());
  +                        buffer.append('\n');
  +                    }
  +                }
  +            }
  +            ne.close();
  +        }
  +        catch (NamingException ne) {
  +            buffer.append("error while listing context " + ctx.toString() + ": " + ne.toString(true));
  +        }
  +    }
  +
  +
  +
   }
  
  
  



More information about the jboss-cvs-commits mailing list