Search in sources :

Example 1 with DynamicMBeanWrapper

use of org.apache.openejb.monitoring.DynamicMBeanWrapper in project tomee by apache.

the class Assembler method deployMBean.

@SuppressWarnings("unchecked")
private void deployMBean(final WebBeansContext wc, final ClassLoader cl, final String mbeanClass, final Properties appMbeans, final String id) {
    if (LocalMBeanServer.isJMXActive()) {
        final Class<?> clazz;
        try {
            clazz = cl.loadClass(mbeanClass);
        } catch (final ClassNotFoundException e) {
            throw new OpenEJBRuntimeException(e);
        }
        // cdi can be off so init with null bean in this case
        final Bean<?> bean;
        final BeanManager bm;
        if (wc == null) {
            bm = null;
            bean = null;
        } else {
            bm = wc.getBeanManagerImpl();
            final Set<Bean<?>> beans = bm.getBeans(clazz);
            bean = bm.resolve(beans);
        }
        // create the MBean instance with cdi if possible or manually otherwise
        final Object instance;
        final CreationalContext creationalContext;
        if (bean == null) {
            try {
                instance = clazz.newInstance();
            } catch (final InstantiationException e) {
                logger.error("the mbean " + mbeanClass + " can't be registered because it can't be instantiated", e);
                return;
            } catch (final IllegalAccessException e) {
                logger.error("the mbean " + mbeanClass + " can't be registered because it can't be accessed", e);
                return;
            }
            creationalContext = null;
        } else {
            creationalContext = bm.createCreationalContext(bean);
            instance = bm.getReference(bean, clazz, creationalContext);
        }
        final MBeanServer server = LocalMBeanServer.get();
        try {
            final MBean annotation = clazz.getAnnotation(MBean.class);
            final ObjectName leaf = annotation == null || annotation.objectName().isEmpty() ? new ObjectNameBuilder("openejb.user.mbeans").set("application", id).set("group", clazz.getPackage().getName()).set("name", clazz.getSimpleName()).build() : new ObjectName(annotation.objectName());
            server.registerMBean(new DynamicMBeanWrapper(wc, instance), leaf);
            appMbeans.put(mbeanClass, leaf.getCanonicalName());
            if (creationalContext != null && (bean.getScope() == null || Dependent.class.equals(bean.getScope()))) {
                creationalContextForAppMbeans.put(leaf, creationalContext);
            }
            logger.info("Deployed MBean(" + leaf.getCanonicalName() + ")");
        } catch (final Exception e) {
            logger.error("the mbean " + mbeanClass + " can't be registered", e);
        }
    }
}
Also used : MBean(org.apache.openejb.api.jmx.MBean) Dependent(javax.enterprise.context.Dependent) InvalidObjectException(java.io.InvalidObjectException) NameAlreadyBoundException(javax.naming.NameAlreadyBoundException) IOException(java.io.IOException) ExecutionException(java.util.concurrent.ExecutionException) ObjectStreamException(java.io.ObjectStreamException) ResourceAdapterInternalException(javax.resource.spi.ResourceAdapterInternalException) URISyntaxException(java.net.URISyntaxException) UndeployException(org.apache.openejb.UndeployException) DefinitionException(javax.enterprise.inject.spi.DefinitionException) ConstructionException(org.apache.xbean.recipe.ConstructionException) MBeanRegistrationException(javax.management.MBeanRegistrationException) InstanceNotFoundException(javax.management.InstanceNotFoundException) ValidationException(javax.validation.ValidationException) MalformedObjectNameException(javax.management.MalformedObjectNameException) DuplicateDeploymentIdException(org.apache.openejb.DuplicateDeploymentIdException) TimeoutException(java.util.concurrent.TimeoutException) NamingException(javax.naming.NamingException) OpenEJBException(org.apache.openejb.OpenEJBException) DeploymentException(javax.enterprise.inject.spi.DeploymentException) NoSuchApplicationException(org.apache.openejb.NoSuchApplicationException) MalformedURLException(java.net.MalformedURLException) OpenEJBRuntimeException(org.apache.openejb.OpenEJBRuntimeException) ResourceBean(org.apache.webbeans.component.ResourceBean) MBean(org.apache.openejb.api.jmx.MBean) Bean(javax.enterprise.inject.spi.Bean) ObjectName(javax.management.ObjectName) OpenEJBRuntimeException(org.apache.openejb.OpenEJBRuntimeException) CreationalContext(javax.enterprise.context.spi.CreationalContext) ObjectNameBuilder(org.apache.openejb.monitoring.ObjectNameBuilder) DynamicMBeanWrapper(org.apache.openejb.monitoring.DynamicMBeanWrapper) BeanManager(javax.enterprise.inject.spi.BeanManager) LocalMBeanServer(org.apache.openejb.monitoring.LocalMBeanServer) MBeanServer(javax.management.MBeanServer)

Example 2 with DynamicMBeanWrapper

use of org.apache.openejb.monitoring.DynamicMBeanWrapper in project tomee by apache.

the class Assembler method createContainer.

public void createContainer(final ContainerInfo serviceInfo) throws OpenEJBException {
    final ObjectRecipe serviceRecipe = createRecipe(Collections.<ServiceInfo>emptyList(), serviceInfo);
    serviceRecipe.setProperty("id", serviceInfo.id);
    serviceRecipe.setProperty("transactionManager", props.get(TransactionManager.class.getName()));
    serviceRecipe.setProperty("securityService", props.get(SecurityService.class.getName()));
    serviceRecipe.setProperty("properties", new UnsetPropertiesRecipe());
    // MDB container has a resource adapter string name that
    // must be replaced with the real resource adapter instance
    replaceResourceAdapterProperty(serviceRecipe);
    final Object service = serviceRecipe.create();
    // we forced it
    serviceRecipe.getUnsetProperties().remove("id");
    // we forced it
    serviceRecipe.getUnsetProperties().remove("securityService");
    logUnusedProperties(serviceRecipe, serviceInfo);
    final Class interfce = serviceInterfaces.get(serviceInfo.service);
    checkImplementation(interfce, service.getClass(), serviceInfo.service, serviceInfo.id);
    bindService(serviceInfo, service);
    setSystemInstanceComponent(interfce, service);
    props.put(interfce.getName(), service);
    props.put(serviceInfo.service, service);
    props.put(serviceInfo.id, service);
    containerSystem.addContainer(serviceInfo.id, (Container) service);
    // Update the config tree
    config.containerSystem.containers.add(serviceInfo);
    logger.getChildLogger("service").debug("createService.success", serviceInfo.service, serviceInfo.id, serviceInfo.className);
    if (Container.class.isInstance(service) && LocalMBeanServer.isJMXActive()) {
        final ObjectName objectName = ObjectNameBuilder.uniqueName("containers", serviceInfo.id, service);
        try {
            LocalMBeanServer.get().registerMBean(new DynamicMBeanWrapper(new JMXContainer(serviceInfo, (Container) service)), objectName);
            containerObjectNames.add(objectName);
        } catch (final Exception | NoClassDefFoundError e) {
        // no-op
        }
    }
}
Also used : JMXContainer(org.apache.openejb.assembler.monitoring.JMXContainer) Container(org.apache.openejb.Container) DynamicMBeanWrapper(org.apache.openejb.monitoring.DynamicMBeanWrapper) ObjectRecipe(org.apache.xbean.recipe.ObjectRecipe) JMXContainer(org.apache.openejb.assembler.monitoring.JMXContainer) UnsetPropertiesRecipe(org.apache.xbean.recipe.UnsetPropertiesRecipe) InvalidObjectException(java.io.InvalidObjectException) NameAlreadyBoundException(javax.naming.NameAlreadyBoundException) IOException(java.io.IOException) ExecutionException(java.util.concurrent.ExecutionException) ObjectStreamException(java.io.ObjectStreamException) ResourceAdapterInternalException(javax.resource.spi.ResourceAdapterInternalException) URISyntaxException(java.net.URISyntaxException) UndeployException(org.apache.openejb.UndeployException) DefinitionException(javax.enterprise.inject.spi.DefinitionException) ConstructionException(org.apache.xbean.recipe.ConstructionException) MBeanRegistrationException(javax.management.MBeanRegistrationException) InstanceNotFoundException(javax.management.InstanceNotFoundException) ValidationException(javax.validation.ValidationException) MalformedObjectNameException(javax.management.MalformedObjectNameException) DuplicateDeploymentIdException(org.apache.openejb.DuplicateDeploymentIdException) TimeoutException(java.util.concurrent.TimeoutException) NamingException(javax.naming.NamingException) OpenEJBException(org.apache.openejb.OpenEJBException) DeploymentException(javax.enterprise.inject.spi.DeploymentException) NoSuchApplicationException(org.apache.openejb.NoSuchApplicationException) MalformedURLException(java.net.MalformedURLException) OpenEJBRuntimeException(org.apache.openejb.OpenEJBRuntimeException) ObjectName(javax.management.ObjectName)

Example 3 with DynamicMBeanWrapper

use of org.apache.openejb.monitoring.DynamicMBeanWrapper in project tomee by apache.

the class SimpleRouter method JMXOn.

public void JMXOn(final String name) {
    final ObjectNameBuilder jmxName = new ObjectNameBuilder("openejb.management");
    jmxName.set("J2EEServer", "Router");
    jmxName.set("J2EEApplication", name);
    jmxName.set("Type", "SimpleRouter");
    objectName = jmxName.build();
    try {
        LocalMBeanServer.get().registerMBean(new DynamicMBeanWrapper(this), objectName);
    } catch (final Exception e) {
        objectName = null;
    }
}
Also used : ObjectNameBuilder(org.apache.openejb.monitoring.ObjectNameBuilder) DynamicMBeanWrapper(org.apache.openejb.monitoring.DynamicMBeanWrapper) OpenDataException(javax.management.openmbean.OpenDataException) ServletException(javax.servlet.ServletException) IOException(java.io.IOException)

Aggregations

IOException (java.io.IOException)3 DynamicMBeanWrapper (org.apache.openejb.monitoring.DynamicMBeanWrapper)3 InvalidObjectException (java.io.InvalidObjectException)2 ObjectStreamException (java.io.ObjectStreamException)2 MalformedURLException (java.net.MalformedURLException)2 URISyntaxException (java.net.URISyntaxException)2 ExecutionException (java.util.concurrent.ExecutionException)2 TimeoutException (java.util.concurrent.TimeoutException)2 DefinitionException (javax.enterprise.inject.spi.DefinitionException)2 DeploymentException (javax.enterprise.inject.spi.DeploymentException)2 InstanceNotFoundException (javax.management.InstanceNotFoundException)2 MBeanRegistrationException (javax.management.MBeanRegistrationException)2 MalformedObjectNameException (javax.management.MalformedObjectNameException)2 ObjectName (javax.management.ObjectName)2 NameAlreadyBoundException (javax.naming.NameAlreadyBoundException)2 NamingException (javax.naming.NamingException)2 ResourceAdapterInternalException (javax.resource.spi.ResourceAdapterInternalException)2 ValidationException (javax.validation.ValidationException)2 DuplicateDeploymentIdException (org.apache.openejb.DuplicateDeploymentIdException)2 NoSuchApplicationException (org.apache.openejb.NoSuchApplicationException)2