[
https://issues.apache.org/jira/browse/TOMEE-2294?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17136682#comment-17136682
]
Frans commented on TOMEE-2294:
------------------------------
Just tried it again to confirm that I am not going crazy and the TomEE version
I'm working in is actually 7.1.3. It definitely is
Here it is with the system property commented out:
16-Jun-2020 22:17:22.916 INFO [localhost-startStop-1]
org.apache.openejb.assembler.classic.Assembler.startEjbs Started
Ejb(deployment-id=X, ejb-name=X, container=MessageDrivenContainer)
16-Jun-2020 22:17:22.919 INFO [localhost-startStop-1]
org.apache.openejb.assembler.classic.Assembler.createApplication Deployed
Application(path=C:localserver\webapps\ROOT)
16-Jun-2020 22:17:22.951 WARNING [JmsResourceAdapter-worker- - 2]
org.apache.activemq.broker.BrokerService.checkMemorySystemUsageLimits Memory
Usage for the Broker (1024mb) is more than the maximum available for the JVM:
981 mb - resetting to 70% of maximum available: 687 mb
16-Jun-2020 22:17:22.963 INFO [JmsResourceAdapter-worker- - 2]
org.apache.activemq.broker.BrokerService.doStartPersistenceAdapter Using
Persistence Adapter:
KahaDBPersistenceAdapter[C:localserver\conf\activemq-data\broker\KahaDB]
16-Jun-2020 22:17:22.979 INFO [JMX connector]
org.apache.activemq.broker.jmx.ManagementContext$1.run JMX consoles can connect
to service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi
16-Jun-2020 22:17:23.003 INFO [JmsResourceAdapter-worker- - 2]
org.apache.activemq.store.kahadb.MessageDatabase$Metadata.read KahaDB is
version 6
Uncommenting the property, the issue went away again.
16-Jun-2020 22:19:27.312 INFO [localhost-startStop-1]
org.apache.openejb.assembler.classic.Assembler.startEjbs Started
Ejb(deployment-id=X, ejb-name=X, container=MessageDrivenContainer)
16-Jun-2020 22:19:27.314 INFO [localhost-startStop-1]
org.apache.openejb.assembler.classic.Assembler.createApplication Deployed
Application(path=C:\localserver\webapps\ROOT)
16-Jun-2020 22:19:27.350 WARNING [JmsResourceAdapter-worker- - 1]
org.apache.activemq.broker.BrokerService.checkMemorySystemUsageLimits Memory
Usage for the Broker (1024mb) is more than the maximum available for the JVM:
981 mb - resetting to 70% of maximum available: 687 mb
16-Jun-2020 22:19:27.359 INFO [JmsResourceAdapter-worker- - 1]
org.apache.activemq.broker.BrokerService.doStartPersistenceAdapter Using
Persistence Adapter:
KahaDBPersistenceAdapter[C:\localserver\conf\activemq-data\broker\KahaDB]
16-Jun-2020 22:19:27.400 INFO [JmsResourceAdapter-worker- - 1]
org.apache.activemq.store.kahadb.MessageDatabase$Metadata.read KahaDB is
version 6
Setting the log level to FINEST and searching for that INFO text shows that
createConnector is first called just after
org.apache.activemq.broker.BrokerService.checkMemorySystemUsageLimits
Decompiling that class and following back the references to cMSUL shows that
the isUseJmx() property is checked just afterwards. I'm guessing this isn't set
by ?useJmx=
{code}
@Override
public void start() throws Exception {
if (stopped.get() || !started.compareAndSet(false, true)) {
// lets just ignore redundant start() calls
// as its way too easy to not be completely sure if start() has been
// called or not with the gazillion of different configuration
// mechanisms
// throw new IllegalStateException("Already started.");
return;
}
setStartException(null);
stopping.set(false);
preShutdownHooksInvoked.set(false);
startDate = new Date();
MDC.put("activemq.broker", brokerName);
try {
checkMemorySystemUsageLimits();
if (systemExitOnShutdown && useShutdownHook) {
throw new ConfigurationException("'useShutdownHook' property cannot be be used
with 'systemExitOnShutdown', please turn it off (useShutdownHook=false)");
}
processHelperProperties();
if (isUseJmx()) {
// need to remove MDC during starting JMX, as that would otherwise causes
leaks, as spawned threads inheirt the MDC and
// we cannot cleanup clear that during shutdown of the broker.
MDC.remove("activemq.broker");
try {
startManagementContext();
for (NetworkConnector connector : getNetworkConnectors()) {
registerNetworkConnectorMBean(connector);
}
} finally {
MDC.put("activemq.broker", brokerName);
}
}
// in jvm master slave, lets not publish over existing broker till we get the
lock
final BrokerRegistry brokerRegistry = BrokerRegistry.getInstance();
if (brokerRegistry.lookup(getBrokerName()) == null) {
brokerRegistry.bind(getBrokerName(), BrokerService.this);
}
startPersistenceAdapter(startAsync);
startBroker(startAsync);
brokerRegistry.bind(getBrokerName(), BrokerService.this);
} catch (Exception e) {
LOG.error("Failed to start Apache ActiveMQ ({}, {})", getBrokerName(),
brokerId, e);
try {
if (!stopped.get()) {
stop();
}
} catch (Exception ex) {
LOG.warn("Failed to stop broker after failure in start. This exception will be
ignored.", ex);
}
throw e;
} finally {
MDC.remove("activemq.broker");
}
}
{code}
startManagementContext() calls ManagementContext.start(), which brings us back
to startConnector()
Looking at the commit to ActiveMQ5Factory, I'm seeing this line of logging
{code}
Logger.getInstance(LogCategory.OPENEJB_STARTUP,
ActiveMQ5Factory.class).getChildLogger("service").info("ActiveMQ5Factory
creating broker");
{code}
So, searching for 1099|ActiveMQ5Factory in the startup logs I get
{code}
78 16-Jun-2020 23:56:54.728 INFO [main]
org.apache.openejb.resource.activemq.ActiveMQ5Factory.createBroker
ActiveMQ5Factory creating broker
80 16-Jun-2020 23:56:55.018 INFO [main]
org.apache.openejb.resource.activemq.ActiveMQ5Factory.createBroker Using
ActiveMQ startup timeout of 10000ms
81 16-Jun-2020 23:56:55.019 INFO [ActiveMQFactory start and checkpoint]
org.apache.openejb.resource.activemq.ActiveMQ5Factory$1.run Starting ActiveMQ
BrokerService
89 16-Jun-2020 23:56:55.184 INFO [ActiveMQFactory start and checkpoint]
org.apache.openejb.resource.activemq.ActiveMQ5Factory$1.run Starting ActiveMQ
checkpoint
90 16-Jun-2020 23:56:55.184 INFO [main]
org.apache.openejb.resource.activemq.ActiveMQ5Factory.createBroker ActiveMQ
broker started
205 16-Jun-2020 23:56:57.592 INFO [JMX connector]
org.apache.activemq.broker.jmx.ManagementContext$1.run JMX consoles can connect
to service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi
{code}
The log line for broker started is definitely after setCreateConnector(false)
in GitHub
Decompiling org.apache.openejb.resource.activemq.AActiveMQ5Factory.class in
openejb-core.jar from my compile time references shows the code present
{code}
final ManagementContext managementContext = new ManagementContext();
managementContext.setCreateConnector(false);
broker.setManagementContext(managementContext);
{code}
Decompiling the same class from my tomee install's lib/openejb-core-7.1.3.jar
similarly shows it present
{code}
/* 189 */ ManagementContext managementContext = new ManagementContext();
/* 190 */ managementContext.setCreateConnector(false);
/* 191 */ broker.setManagementContext(managementContext);
{code}
Might be time to go to call it a night and try again tomorrow.
Thank you so much for all your help, and for maintaining this wonderful
framework. I really don't know what I'd do without it. You guys are brilliant.
Cheers,
Frans
> Can't disable unauthenticated JMX on 1099
> -----------------------------------------
>
> Key: TOMEE-2294
> URL: https://issues.apache.org/jira/browse/TOMEE-2294
> Project: TomEE
> Issue Type: Bug
> Components: TomEE Core Server
> Reporter: Frans
> Priority: Major
> Fix For: 8.0.3
>
>
> ActiveMQ comes bundled with a JMX host that is default on unauthenticated on
> port 1099.
> {code:java}
> <Resource id="JmsResourceAdapter" type="ActiveMQResourceAdapter">
> BrokerXmlConfig = broker:(vm://broker)?useJmx=false
> ServerUrl = vm://broker
> </Resource>{code}
> Tomee's resource configuration doesn't allow this to be disabled. The above
> doesn't work.
> This can be disabled by inspecting an activemq jar's manifest, pulling down
> the same version of activemq-all, and putting that in the tomee/lib
> directory, at which point this works:
> {code:java}
> <Resource id="JmsResourceAdapter" type="ActiveMQResourceAdapter">
> BrokerXmlConfig = xbean:file:activemq.xml
> ServerUrl = vm://broker
> </Resource>
> {code}
> {code:java}
> <broker xmlns="http://activemq.apache.org/schema/core"
> useJmx="false"
> brokerName="broker"
> useShutdownHook="false"
> persistent="true"
> start="true"
> schedulerSupport="false"
> enableStatistics="false"
> offlineDurableSubscriberTimeout="259200000"
> offlineDurableSubscriberTaskSchedule="3600000">
> {code}
> However, convincing the guy hosting the server to inspect JAR manifests, pull
> down specific jars, and maintain a second configuration file seems like a lot
> of effort to go to just to have the ability to disable unauthenticated access
> to every MBean in the VM
--
This message was sent by Atlassian Jira
(v8.3.4#803005)