2016-08-30 8 views
0

Я пытаюсь запустить два встроенных сервера Tomcat в одном приложении, но я получаю исключение, которое имя «Tomcat» уже зарегистрировано как MBean. Запуск двух серверов Tomcat в двух разных процессах работает нормально. Это просто, когда я пытаюсь запустить два сервера Tomcat в рамках одного процесса.Выполнение двух серверов Tomcat в одном приложении не выполняется при регистрации MBean

У меня есть причины, по которым я не хочу создавать два коннектора в одном экземпляре сервера Tomcat, короче говоря, я запускаю модульные тесты, которым необходимо запустить три сервера, и я хочу запустить три отдельных сервера, потому что так оно и есть будет работать в реальном мире не на одном сервере с несколькими коннекторами.

Мне интересно, есть ли способ изменить имя, которое использует сервер Tomcat для регистрации MBean, или даже просто полностью отключить весь MBean?

Для записи ниже трассировки стека, что я получаю, когда я начала два экземпляра Tomcat в том же процессе:

SEVERE: Error registering Tomcat:j2eeType=Servlet,name=gor,WebModule=//localhost/gorserver,J2EEApplication=none,J2EEServer=none 
javax.management.InstanceAlreadyExistsException: Tomcat:j2eeType=Servlet,name=gor,WebModule=//localhost/gorserver,J2EEApplication=none,J2EEServer=none 
    at com.sun.jmx.mbeanserver.Repository.addMBean(Repository.java:437) 
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerWithRepository(DefaultMBeanServerInterceptor.java:1898) 
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerDynamicMBean(DefaultMBeanServerInterceptor.java:966) 
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerObject(DefaultMBeanServerInterceptor.java:900) 
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:324) 
    at com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:522) 
    at org.apache.tomcat.util.modeler.Registry.registerComponent(Registry.java:742) 
    at org.apache.catalina.util.LifecycleMBeanBase.register(LifecycleMBeanBase.java:158) 
    at org.apache.catalina.util.LifecycleMBeanBase.initInternal(LifecycleMBeanBase.java:61) 
    at org.apache.catalina.core.ContainerBase.initInternal(ContainerBase.java:1080) 
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:136) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5508) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1571) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1561) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

Aug 30, 2016 2:20:57 AM org.apache.catalina.util.LifecycleMBeanBase register 
WARNING: Failed to register object [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[/gorserver].StandardWrapper[gor]] with name [Tomcat:j2eeType=Servlet,name=gor,WebModule=//localhost/gorserver,J2EEApplication=none,J2EEServer=none] during component initialisation 
javax.management.InstanceAlreadyExistsException: Tomcat:j2eeType=Servlet,name=gor,WebModule=//localhost/gorserver,J2EEApplication=none,J2EEServer=none 
    at com.sun.jmx.mbeanserver.Repository.addMBean(Repository.java:437) 
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerWithRepository(DefaultMBeanServerInterceptor.java:1898) 
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerDynamicMBean(DefaultMBeanServerInterceptor.java:966) 
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerObject(DefaultMBeanServerInterceptor.java:900) 
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:324) 
    at com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:522) 
    at org.apache.tomcat.util.modeler.Registry.registerComponent(Registry.java:742) 
    at org.apache.catalina.util.LifecycleMBeanBase.register(LifecycleMBeanBase.java:158) 
    at org.apache.catalina.util.LifecycleMBeanBase.initInternal(LifecycleMBeanBase.java:61) 
    at org.apache.catalina.core.ContainerBase.initInternal(ContainerBase.java:1080) 
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:136) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5508) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1571) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1561) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

ответ

0

В конце концов выяснилось, что это может быть исправлено, давая каждый контекст, который добавляется к сервер Tomcat уникальное имя (например, добавление номер порта сервера, оно добавляется к):

context.setName("MyServerContext_" + httpPort); 

Это приводит к MBeans, имеющих различные имена.

 Смежные вопросы

  • Нет связанных вопросов^_^