Skip to main content

[ejb-spec issues] [JIRA] Issue Comment Edited: (EJB_SPEC-32) Automatic Registration Of @Singleton EJBs As MXBeans

  • From: "rherschke (JIRA)" <jira-no-reply@...>
  • To: issues@...
  • Subject: [ejb-spec issues] [JIRA] Issue Comment Edited: (EJB_SPEC-32) Automatic Registration Of @Singleton EJBs As MXBeans
  • Date: Mon, 11 Mar 2013 22:18:53 +0000 (GMT+00:00)
  • Auto-submitted: auto-generated


    [ 
http://java.net/jira/browse/EJB_SPEC-32?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=358176#action_358176
 ] 

rherschke edited comment on EJB_SPEC-32 at 3/11/13 10:17 PM:
-------------------------------------------------------------

Maybe we can have at least a @Resource injection of the platformmbeanserver 
instead?
So one can implement an interceptor with @AroundConstruct to do the 
registration.

This would pass the rule of separating concerns and will get a clear EJB Pojo 
as well.

Example:
{code}
@Inherited
@InterceptorBinding
@Target({TYPE}) @Retention(RUNTIME) public @interface MBean {
    String value() default "";
}

@Interceptor @MBean
public class MBeanInterceptor {

    @Resource
    MBeanServer server;

    @PostConstruct
    public void registerBean(InvocationContext ctx) {
        ctx.proceed();
        ObjectName on = ... // get objectname from annotation value
        server.register(on, ctx.getTarget());
        // or do the neccessary DynamicMBean work here...
    }

    @PreDestroy
    public void unregister(InvocationContext ctx) {
        ObjectName on = ... // get objectname from annotation
        server.unregister(on);
        ctx.proceed();
    }
}

@Singleton @Startup @MBean("com.example:type=MyMXBean")
public class MyMXBean {
// ...
}
{code}

So with @Resource injection, this will work even on appservers with its own 
MBeanServer, not only with JVM PlatformServer, but the developer do not care 
about this.

Next, @Resource injection could be used also in a normal EJB to do some 
client work (observe notifications, get attributes aso.) with a registered 
mbean without the need to distinguish about the right MBeanServer to be used.

      was (Author: rherschke):
    Maybe we can have at least a @Resource injection of the 
platformmbeanserver instead?
So one can implement an interceptor with @AroundConstruct to do the 
registration.

This would pass the rule of separating concerns and will get a clear EJB Pojo 
as well.

Example:
{code}
@Inherited
@InterceptorBinding
@Target({TYPE, METHOD}) @Retention(RUNTIME) public @interface MBean {
    String value() default "";
}

@Interceptor @MBean
public class MBeanInterceptor {

    @Resource
    MBeanServer server;

    @PostConstruct
    public void registerBean(InvocationContext ctx) {
        ctx.proceed();
        ObjectName on = ... // get objectname from annotation value
        server.register(on, ctx.getTarget());
        // or do the neccessary DynamicMBean work here...
    }

    @PreDestroy
    public void unregister(InvocationContext ctx) {
        ObjectName on = ... // get objectname from annotation
        server.unregister(on);
        ctx.proceed();
    }
}

@Singleton @Startup @MBean("com.example:type=MyMXBean")
public class MyMXBean {
// ...
}
{code}

So with @Resource injection, this will work even on appservers with its own 
MBeanServer, not only with JVM PlatformServer, but the developer do not care 
about this.

Next, @Resource injection could be used also in a normal EJB to do some 
client work (observe notifications, get attributes aso.) with a registered 
mbean without the need to distinguish about the right MBeanServer to be used.
  
> Automatic Registration Of @Singleton EJBs As MXBeans
> ----------------------------------------------------
>
>                 Key: EJB_SPEC-32
>                 URL: http://java.net/jira/browse/EJB_SPEC-32
>             Project: ejb-spec
>          Issue Type: New Feature
>    Affects Versions: 3.2
>            Reporter: abien
>            Assignee: marina vatkina
>             Fix For: 3.2
>
>
> @Singleton EJBs are perfect MXBeans: 
> http://www.adam-bien.com/roller/abien/entry/singleton_the_simplest_possible_jmx
> The registration of @Singleton in JMX runtime, however, requires a bit of 
> plumbing.
> Proposal:
> Auto-registration of all EJB-methods of a @Singleton bean with the @MXBean 
> annotation:
> 1. All accessors should result in attributes (getters in read-only and 
> getters / setters in writable attributes)
> 2. public EJB methods should be exposed as JMX-operations
> 3. A MXBean interface should be optional (it could be auto-generated by the 
> EJB-container)
> 4. The MBean name should be derived from the class.getName() and the type 
> from the class

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://java.net/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


[ejb-spec issues] [JIRA] Issue Comment Edited: (EJB_SPEC-32) Automatic Registration Of @Singleton EJBs As MXBeans

rherschke (JIRA) 03/11/2013

<Possible follow-up(s)>

[ejb-spec issues] [JIRA] Issue Comment Edited: (EJB_SPEC-32) Automatic Registration Of @Singleton EJBs As MXBeans

rherschke (JIRA) 03/11/2013
 
 
Close
loading
Please Confirm
Close