This is very neat stuff.

A quibble:  I think the ObjectName should be
"org.apache.tapestry5:service=PagePool"  (i.e., reflecting that
PagePool here is the service id, not the service interface).



On Wed, May 26, 2010 at 12:05 AM,  <[email protected]> wrote:
> Author: drobiazko
> Date: Wed May 26 07:05:38 2010
> New Revision: 948348
>
> URL: http://svn.apache.org/viewvc?rev=948348&view=rev
> Log:
> TAP5-978: Provide remote management of the page pool settings
>
> Added:
>    
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/MBeanSupport.java
>    (with props)
>    
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/MBeanSupportImpl.java
>    (with props)
>    
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PagePoolImplMBean.java
>    (with props)
>    
> tapestry/tapestry5/trunk/tapestry-core/src/test/app1/RemotePoolManagement.tml
>    
> tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/RemotePoolManagement.java
>    (with props)
> Modified:
>    
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/InternalModule.java
>    
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PagePoolImpl.java
>    
> tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/CoreBehaviorsTests.java
>    
> tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java
>
> Modified: 
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/InternalModule.java
> URL: 
> http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/InternalModule.java?rev=948348&r1=948347&r2=948348&view=diff
> ==============================================================================
> --- 
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/InternalModule.java
>  (original)
> +++ 
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/InternalModule.java
>  Wed May 26 07:05:38 2010
> @@ -14,6 +14,7 @@
>
>  package org.apache.tapestry5.internal.services;
>
> +import javax.management.ObjectName;
>  import javax.servlet.http.Cookie;
>
>  import org.apache.tapestry5.SymbolConstants;
> @@ -36,6 +37,7 @@ import org.apache.tapestry5.ioc.services
>  import org.apache.tapestry5.ioc.services.ClasspathURLConverter;
>  import org.apache.tapestry5.ioc.services.PerthreadManager;
>  import org.apache.tapestry5.ioc.services.PropertyShadowBuilder;
> +import org.apache.tapestry5.ioc.services.RegistryShutdownHub;
>  import org.apache.tapestry5.services.*;
>  import org.apache.tapestry5.services.templates.ComponentTemplateLocator;
>  import org.slf4j.Logger;
> @@ -170,7 +172,9 @@ public class InternalModule
>     InvalidationEventHub templatesHub,
>
>     @ComponentMessages
> -    InvalidationEventHub messagesHub)
> +    InvalidationEventHub messagesHub,
> +
> +    MBeanSupport managedBeanSupport)
>     {
>         // This covers invalidations due to changes to classes
>
> @@ -188,6 +192,29 @@ public class InternalModule
>
>         updateListenerHub.addUpdateListener(service);
>
> +        final ObjectName objectName = 
> buildObjectName("org.apache.tapestry5:type=PagePool");
> +
> +        managedBeanSupport.register(service, objectName);
> +
> +        return service;
> +    }
> +
> +    private ObjectName buildObjectName(String name)
> +    {
> +        try
> +        {
> +            return new ObjectName(name);
> +        }
> +        catch (Exception e)
> +        {
> +            throw new RuntimeException(e);
> +        }
> +    }
> +
> +    public MBeanSupport buildMBeanSupport(RegistryShutdownHub shutdownHub, 
> @Autobuild MBeanSupportImpl service)
> +    {
> +        shutdownHub.addRegistryShutdownListener(service);
> +
>         return service;
>     }
>
>
> Added: 
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/MBeanSupport.java
> URL: 
> http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/MBeanSupport.java?rev=948348&view=auto
> ==============================================================================
> --- 
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/MBeanSupport.java
>  (added)
> +++ 
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/MBeanSupport.java
>  Wed May 26 07:05:38 2010
> @@ -0,0 +1,42 @@
> +// Copyright 20010 The Apache Software Foundation
> +//
> +// Licensed under the Apache License, Version 2.0 (the "License");
> +// you may not use this file except in compliance with the License.
> +// You may obtain a copy of the License at
> +//
> +//     http://www.apache.org/licenses/LICENSE-2.0
> +//
> +// Unless required by applicable law or agreed to in writing, software
> +// distributed under the License is distributed on an "AS IS" BASIS,
> +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> +// See the License for the specific language governing permissions and
> +// limitations under the License.
> +
> +package org.apache.tapestry5.internal.services;
> +
> +import javax.management.ObjectName;
> +
> +/**
> + * Creates an MBean server and registers MBeans with the created server. The 
> registered MBeans are unregistered when Registry is shut down.
> + *
> + * @since 5.2.0
> + */
> +public interface MBeanSupport
> +{
> +
> +    /**
> +     * Registers the specified MBean with the server.
> +     *
> +     * @param bean the MBean instance
> +     * @param objectName the name for the MBean
> +     */
> +    void register(final Object bean, final ObjectName objectName);
> +
> +    /**
> +     * Unregisters the specified MBean from the server.
> +     *
> +     * @param objectName the name for the MBean
> +     */
> +    void unregister(final ObjectName objectName);
> +
> +}
> \ No newline at end of file
>
> Propchange: 
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/MBeanSupport.java
> ------------------------------------------------------------------------------
>    svn:eol-style = native
>
> Propchange: 
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/MBeanSupport.java
> ------------------------------------------------------------------------------
>    svn:mime-type = text/plain
>
> Added: 
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/MBeanSupportImpl.java
> URL: 
> http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/MBeanSupportImpl.java?rev=948348&view=auto
> ==============================================================================
> --- 
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/MBeanSupportImpl.java
>  (added)
> +++ 
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/MBeanSupportImpl.java
>  Wed May 26 07:05:38 2010
> @@ -0,0 +1,101 @@
> +// Copyright 20010 The Apache Software Foundation
> +//
> +// Licensed under the Apache License, Version 2.0 (the "License");
> +// you may not use this file except in compliance with the License.
> +// You may obtain a copy of the License at
> +//
> +//     http://www.apache.org/licenses/LICENSE-2.0
> +//
> +// Unless required by applicable law or agreed to in writing, software
> +// distributed under the License is distributed on an "AS IS" BASIS,
> +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> +// See the License for the specific language governing permissions and
> +// limitations under the License.
> +
> +package org.apache.tapestry5.internal.services;
> +
> +import static java.lang.String.format;
> +
> +import java.lang.management.ManagementFactory;
> +import java.util.List;
> +import java.util.Set;
> +
> +import javax.management.MBeanServer;
> +import javax.management.MBeanServerFactory;
> +import javax.management.ObjectInstance;
> +import javax.management.ObjectName;
> +
> +import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
> +import org.apache.tapestry5.ioc.services.RegistryShutdownListener;
> +import org.slf4j.Logger;
> +
> +public class MBeanSupportImpl implements MBeanSupport, 
> RegistryShutdownListener
> +{
> +    private Logger logger;
> +
> +    private MBeanServer server;
> +
> +    private final Set<ObjectName> registeredBeans = 
> CollectionFactory.newSet();
> +
> +    public MBeanSupportImpl(Logger logger)
> +    {
> +        this.logger = logger;
> +
> +        // TODO: Agent Id should be configurable
> +        final List<MBeanServer> servers = 
> MBeanServerFactory.findMBeanServer(null);
> +
> +        if (servers != null && 0 <  servers.size())
> +        {
> +            this.server = servers.get(0);
> +        }
> +
> +        if (this.server == null)
> +        {
> +            this.server = ManagementFactory.getPlatformMBeanServer();
> +        }
> +    }
> +
> +    public void register(final Object object, final ObjectName objectName)
> +    {
> +        try
> +        {
> +            this.server.registerMBean(object, objectName);
> +
> +            this.registeredBeans.add(objectName);
> +
> +            this.logger.info(format("Registered MBean '%s' with server", 
> objectName));
> +        }
> +        catch (final Exception e)
> +        {
> +            this.logger.error(format("Failed to register MBean '%s' with 
> server", objectName), e);
> +        }
> +    }
> +
> +    public void unregister(final ObjectName objectName)
> +    {
> +        if (this.server.isRegistered(objectName))
> +        {
> +            try
> +            {
> +                this.server.unregisterMBean(objectName);
> +
> +                this.logger.info(format("Unegistered MBean '%s' from 
> server", objectName));
> +            }
> +            catch (final Exception e)
> +            {
> +                this.logger.error(String.format("Failed to unregister MBean 
> '%s' from server", objectName), e);
> +            }
> +        }
> +    }
> +
> +    public void registryDidShutdown()
> +    {
> +        for (final ObjectName name : this.registeredBeans)
> +        {
> +            unregister(name);
> +        }
> +
> +        this.registeredBeans.clear();
> +
> +    }
> +}
>
> Propchange: 
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/MBeanSupportImpl.java
> ------------------------------------------------------------------------------
>    svn:eol-style = native
>
> Propchange: 
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/MBeanSupportImpl.java
> ------------------------------------------------------------------------------
>    svn:mime-type = text/plain
>
> Modified: 
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PagePoolImpl.java
> URL: 
> http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PagePoolImpl.java?rev=948348&r1=948347&r2=948348&view=diff
> ==============================================================================
> --- 
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PagePoolImpl.java
>  (original)
> +++ 
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PagePoolImpl.java
>  Wed May 26 07:05:38 2010
> @@ -14,6 +14,7 @@
>
>  package org.apache.tapestry5.internal.services;
>
> +import org.apache.tapestry5.SymbolConstants;
>  import org.apache.tapestry5.internal.structure.Page;
>  import org.apache.tapestry5.ioc.annotations.IntermediateType;
>  import org.apache.tapestry5.ioc.annotations.Symbol;
> @@ -47,7 +48,7 @@ import java.util.Map;
>  *
>  * @see org.apache.tapestry5.internal.services.PagePoolCache
>  */
> -public class PagePoolImpl implements PagePool, InvalidationListener, 
> UpdateListener
> +public class PagePoolImpl implements PagePool, InvalidationListener, 
> UpdateListener, PagePoolImplMBean
>  {
>     private final Logger logger;
>
> @@ -55,13 +56,13 @@ public class PagePoolImpl implements Pag
>
>     private final ThreadLocale threadLocale;
>
> -    private final int softLimit;
> +    private int softLimit;
>
> -    private final long softWait;
> +    private long softWait;
>
> -    private final int hardLimit;
> +    private int hardLimit;
>
> -    private final long activeWindow;
> +    private long activeWindow;
>
>     private final Map<PageLocator, PagePoolCache> pool = 
> CollectionFactory.newMap();
>
> @@ -71,16 +72,16 @@ public class PagePoolImpl implements Pag
>
>                         ThreadLocale threadLocale,
>
> -                       �...@symbol("tapestry.page-pool.soft-limit")
> +                       �...@symbol(SymbolConstants.PAGE_POOL_SOFT_LIMIT)
>                         int softLimit,
>
> -                       �...@symbol("tapestry.page-pool.soft-wait") 
> @IntermediateType(TimeInterval.class)
> +                       �...@symbol(SymbolConstants.PAGE_POOL_SOFT_WAIT) 
> @IntermediateType(TimeInterval.class)
>                         long softWait,
>
> -                       �...@symbol("tapestry.page-pool.hard-limit")
> +                       �...@symbol(SymbolConstants.PAGE_POOL_HARD_LIMIT)
>                         int hardLimit,
>
> -                       �...@symbol("tapestry.page-pool.active-window") 
> @IntermediateType(TimeInterval.class)
> +                       �...@symbol(SymbolConstants.PAGE_POOL_ACTIVE_WINDOW) 
> @IntermediateType(TimeInterval.class)
>                         long activeWindow)
>     {
>         this.logger = logger;
> @@ -165,4 +166,53 @@ public class PagePoolImpl implements Pag
>             cache.cleanup();
>         }
>     }
> +
> +    public int getSoftLimit()
> +    {
> +        return softLimit;
> +    }
> +
> +    public void setSoftLimit(int softLimit)
> +    {
> +        this.softLimit = softLimit;
> +
> +        objectWasInvalidated();
> +    }
> +
> +    public long getSoftWait()
> +    {
> +        return softWait;
> +    }
> +
> +    public void setSoftWait(long softWait)
> +    {
> +        this.softWait = softWait;
> +
> +        objectWasInvalidated();
> +    }
> +
> +    public int getHardLimit()
> +    {
> +        return hardLimit;
> +    }
> +
> +    public void setHardLimit(int hardLimit)
> +    {
> +        this.hardLimit = hardLimit;
> +
> +        objectWasInvalidated();
> +    }
> +
> +    public long getActiveWindow()
> +    {
> +        return activeWindow;
> +    }
> +
> +    public void setActiveWindow(long activeWindow)
> +    {
> +        this.activeWindow = activeWindow;
> +
> +        objectWasInvalidated();
> +    }
> +
>  }
>
> Added: 
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PagePoolImplMBean.java
> URL: 
> http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PagePoolImplMBean.java?rev=948348&view=auto
> ==============================================================================
> --- 
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PagePoolImplMBean.java
>  (added)
> +++ 
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PagePoolImplMBean.java
>  Wed May 26 07:05:38 2010
> @@ -0,0 +1,78 @@
> +// Copyright 2010 The Apache Software Foundation
> +//
> +// Licensed under the Apache License, Version 2.0 (the "License");
> +// you may not use this file except in compliance with the License.
> +// You may obtain a copy of the License at
> +//
> +//     http://www.apache.org/licenses/LICENSE-2.0
> +//
> +// Unless required by applicable law or agreed to in writing, software
> +// distributed under the License is distributed on an "AS IS" BASIS,
> +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> +// See the License for the specific language governing permissions and
> +// limitations under the License.
> +package org.apache.tapestry5.internal.services;
> +
> +
> +
> +/**
> + * Exposes page pool settings as managed properties of a MBean.
> + *
> + * @since 5.2.0
> + */
> +public interface PagePoolImplMBean
> +{
> +    /**
> +     * Returns the soft limit.
> +     *
> +     * @see org.apache.tapestry5.SymbolConstants#PAGE_POOL_SOFT_LIMIT
> +     */
> +    int getSoftLimit();
> +
> +    /**
> +     * Sets the soft limit.
> +     */
> +    void setSoftLimit(int softLimit);
> +
> +    /**
> +     * Returns the soft wait.
> +     *
> +     * @see org.apache.tapestry5.SymbolConstants#PAGE_POOL_SOFT_WAIT
> +     */
> +    long getSoftWait();
> +
> +    /**
> +     * Sets the soft wait.
> +     */
> +    void setSoftWait(long softWait);
> +
> +    /**
> +     * Returns the hard limit.
> +     *
> +     * @see org.apache.tapestry5.SymbolConstants#PAGE_POOL_HARD_LIMIT
> +     *
> +     * @deprecated The hard limit will be removed in a later release of 
> Tapestry, as the maximum number of instance
> +     *             is easily controlled by limiting the number of request 
> handling threads in the servlet container.
> +     */
> +    int getHardLimit();
> +
> +    /**
> +     * Sets the hard limit.
> +     *
> +     * @deprecated The hard limit will be removed in a later release of 
> Tapestry, as the maximum number of instance
> +     *             is easily controlled by limiting the number of request 
> handling threads in the servlet container.
> +     */
> +    void setHardLimit(int hardLimit);
> +
> +    /**
> +     * Returns the active window.
> +     *
> +     * @see org.apache.tapestry5.SymbolConstants#PAGE_POOL_ACTIVE_WINDOW
> +     */
> +    long getActiveWindow();
> +
> +    /**
> +     * Sets the active window.
> +     */
> +    void setActiveWindow(long activeWindow);
> +}
>
> Propchange: 
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PagePoolImplMBean.java
> ------------------------------------------------------------------------------
>    svn:eol-style = native
>
> Propchange: 
> tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PagePoolImplMBean.java
> ------------------------------------------------------------------------------
>    svn:mime-type = text/plain
>
> Added: 
> tapestry/tapestry5/trunk/tapestry-core/src/test/app1/RemotePoolManagement.tml
> URL: 
> http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/app1/RemotePoolManagement.tml?rev=948348&view=auto
> ==============================================================================
> --- 
> tapestry/tapestry5/trunk/tapestry-core/src/test/app1/RemotePoolManagement.tml 
> (added)
> +++ 
> tapestry/tapestry5/trunk/tapestry-core/src/test/app1/RemotePoolManagement.tml 
> Wed May 26 07:05:38 2010
> @@ -0,0 +1,7 @@
> +<html t:type="Border" 
> xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd";>
> +
> +  <h1>Remote Pool Management Demo</h1>
> +
> +  <p>SoftWait: ${softWait}</p>
> +
> +</html>
> \ No newline at end of file
>
> Modified: 
> tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/CoreBehaviorsTests.java
> URL: 
> http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/CoreBehaviorsTests.java?rev=948348&r1=948347&r2=948348&view=diff
> ==============================================================================
> --- 
> tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/CoreBehaviorsTests.java
>  (original)
> +++ 
> tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/CoreBehaviorsTests.java
>  Wed May 26 07:05:38 2010
> @@ -1488,4 +1488,13 @@ public class CoreBehaviorsTests extends
>         assertText("id=no-override", "[pre-app]");
>         assertText("id=override", "[app]");
>     }
> +
> +    /** TAP5-978 */
> +   �...@test
> +    public void remote_pool_management()
> +    {
> +        clickThru("Remote Pool Management");
> +
> +        assertTextPresent("SoftWait: 10");
> +    }
>  }
>
> Modified: 
> tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java
> URL: 
> http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java?rev=948348&r1=948347&r2=948348&view=diff
> ==============================================================================
> --- 
> tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java
>  (original)
> +++ 
> tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java
>  Wed May 26 07:05:38 2010
> @@ -435,7 +435,9 @@ public class Index
>                     new Item("unavailablecomponentdemo", "Report Location of 
> Unavailable Component",
>                             "Report Location of Unavailable Component"),
>
> -                    new Item("discardafterdemo", "@DiscardAfter Demo", "Demo 
> using @DiscardAfter annotation")
> +                    new Item("discardafterdemo", "@DiscardAfter Demo", "Demo 
> using @DiscardAfter annotation"),
> +
> +                    new Item("remotepoolmanagement", "Remote Pool 
> Management", "Proves that Page Pool MBean is registered")
>
>             );
>
>
> Added: 
> tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/RemotePoolManagement.java
> URL: 
> http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/RemotePoolManagement.java?rev=948348&view=auto
> ==============================================================================
> --- 
> tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/RemotePoolManagement.java
>  (added)
> +++ 
> tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/RemotePoolManagement.java
>  Wed May 26 07:05:38 2010
> @@ -0,0 +1,31 @@
> +// Copyright 2010 The Apache Software Foundation
> +//
> +// Licensed under the Apache License, Version 2.0 (the "License");
> +// you may not use this file except in compliance with the License.
> +// You may obtain a copy of the License at
> +//
> +//     http://www.apache.org/licenses/LICENSE-2.0
> +//
> +// Unless required by applicable law or agreed to in writing, software
> +// distributed under the License is distributed on an "AS IS" BASIS,
> +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> +// See the License for the specific language governing permissions and
> +// limitations under the License.
> +package org.apache.tapestry5.integration.app1.pages;
> +
> +import java.lang.management.ManagementFactory;
> +
> +import javax.management.MBeanServer;
> +import javax.management.ObjectName;
> +
> +public class RemotePoolManagement
> +{
> +
> +    public Object getSoftWait() throws Exception
> +    {
> +        MBeanServer server = ManagementFactory.getPlatformMBeanServer();
> +
> +        return server.getAttribute(new 
> ObjectName("org.apache.tapestry5:type=PagePool"), "SoftWait");
> +    }
> +
> +}
>
> Propchange: 
> tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/RemotePoolManagement.java
> ------------------------------------------------------------------------------
>    svn:eol-style = native
>
> Propchange: 
> tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/RemotePoolManagement.java
> ------------------------------------------------------------------------------
>    svn:mime-type = text/plain
>
>
>



-- 
Howard M. Lewis Ship

Creator of Apache Tapestry

The source for Tapestry training, mentoring and support. Contact me to
learn how I can get you up and productive in Tapestry fast!

(971) 678-5210
http://howardlewisship.com

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to