gemmellr commented on code in PR #2:
URL: 
https://github.com/apache/activemq-artemis-console/pull/2#discussion_r1578032690


##########
artemis-console-war/pom.xml:
##########
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You 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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.activemq</groupId>
+        <artifactId>artemis-console-project</artifactId>
+        <version>1.0.0-SNAPSHOT</version>
+    </parent>
+
+    <groupId>org.apache.activemq</groupId>
+    <artifactId>artemis-console-war</artifactId>
+    <packaging>war</packaging>
+
+
+    <name>ActiveMQ Artemis Console War</name>
+
+    <dependencies>
+        <!-- mandatory core hawito modules -->
+        <dependency>
+            <groupId>io.hawt</groupId>
+            <artifactId>hawtio-system</artifactId>
+        </dependency>
+
+        <!-- Servlet API is provided by the container -->
+        <dependency>
+            <groupId>jakarta.servlet</groupId>
+            <artifactId>jakarta.servlet-api</artifactId>
+            <scope>provided</scope>
+        </dependency>
+
+        <!-- Logging -->
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <finalName>${project.artifactId}</finalName>
+
+        <plugins>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-war-plugin</artifactId>
+                <configuration>
+                <nonFilteredFileExtensions>
+                <!-- default value contains jpg,jpeg,gif,bmp,png -->
+                    <nonFilteredFileExtension>woff2</nonFilteredFileExtension>
+                    <nonFilteredFileExtension>woff</nonFilteredFileExtension>
+                </nonFilteredFileExtensions>

Review Comment:
   This bit is misaligned.



##########
README.md:
##########
@@ -1 +1,62 @@
-# activemq-artemis-console
+# Apache ActiveMQ Artemis Console
+
+
+The [Apache ActiveMQ Artemis](https://activemq.apache.org/components/artemis/) 
Console Plugin is written using [Hawtio v4](https://github.com/hawtio/hawtio).
+The plugin is written in TypeScript. Since a Hawtio plugin is based on React 
and [Webpack Module Federation](https://module-federation.github.io/),
+this project uses Yarn v3 and [CRACO](https://craco.js.org/) as the build 
tools.
+
+The WAR file created by this project is consumed by ActiveMQ Artemis but can 
be developed and run standalone.
+
+
+### Build
+
+The following command first builds the `artemis-console-extension` frontend 
project and then compiles and packages 
+the main Java project Web Archive in `artemis-console-war`.
+
+```console
+mvn clean install
+```
+
+Building the frontend project 'artemis-console-extension' can take time, so if 
you build it once and make no changes on the project afterwards, you 
+can speed up the whole build by skipping the frontend part next time.
+
+```console
+mvn install -Dskip.yarn
+```
+
+### Test run
+
+You can quickly run and test the console by using `jetty-maven-plugin` 
configured in `pom.xml`. It launches an embedded 
+Jetty server and deploys the plugin WAR application. From the 
'artemis-console-war' directory run:
+
+```console
+cd artemis-console-war
+mvn jetty:run -Dskip.yarn
+```
+
+You can access the Artemis console with the sample plugin at: 
<http://localhost:8080/console/>

Review Comment:
   When I try this, I see Jetty starting, and can load a Hawtio console by 
visiting the link, but there is nothing about Artemis in it...there are 
Connect, JMX, and Runtime tabs in the left menu. After a bit of blind prodding 
and looking at my broker console I figured out I needed to 'Connect' it to 
'http://localhost:8161/console/jolokia"; ...maybe need some more doc here? Such 
as referencing the _later_ doc that I only then noticed is at the bottom of the 
readme for the _other_ way of doing a local startup for dev (which I haven't 
tried as I don't have yarn system installed, and didn't try to figure out how 
to use the ones from the maven build)



##########
artemis-console-war/pom.xml:
##########
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You 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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.activemq</groupId>
+        <artifactId>artemis-console-project</artifactId>
+        <version>1.0.0-SNAPSHOT</version>
+    </parent>
+
+    <groupId>org.apache.activemq</groupId>
+    <artifactId>artemis-console-war</artifactId>
+    <packaging>war</packaging>
+
+
+    <name>ActiveMQ Artemis Console War</name>
+
+    <dependencies>
+        <!-- mandatory core hawito modules -->
+        <dependency>
+            <groupId>io.hawt</groupId>
+            <artifactId>hawtio-system</artifactId>
+        </dependency>
+
+        <!-- Servlet API is provided by the container -->
+        <dependency>
+            <groupId>jakarta.servlet</groupId>
+            <artifactId>jakarta.servlet-api</artifactId>
+            <scope>provided</scope>
+        </dependency>
+
+        <!-- Logging -->
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <finalName>${project.artifactId}</finalName>
+
+        <plugins>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-war-plugin</artifactId>
+                <configuration>
+                <nonFilteredFileExtensions>
+                <!-- default value contains jpg,jpeg,gif,bmp,png -->
+                    <nonFilteredFileExtension>woff2</nonFilteredFileExtension>
+                    <nonFilteredFileExtension>woff</nonFilteredFileExtension>
+                </nonFilteredFileExtensions>
+                    <webResources>
+                        <!-- Add the plugin build to web resources -->
+                        <resource>
+                            <filtering>true</filtering>
+                            
<directory>../artemis-console-extension/artemis-extension/build</directory>
+                            <includes>
+                                <include>**/*.*</include>
+                            </includes>
+                            <excludes>
+                                <exclude>log4j.properties</exclude>
+                            </excludes>
+                        </resource>
+                    </webResources>
+                </configuration>
+            </plugin>
+
+            <plugin>
+                <groupId>org.eclipse.jetty</groupId>
+                <artifactId>jetty-maven-plugin</artifactId>
+                <version>${jetty-version}</version>

Review Comment:
   One consequence of prior PR comments around removing the logback deps from 
the war, because the broker already uses and supplies Log4J2, is that using 
this now generates warnings about there being no logging binding when doing 
"mvn jetty:run -Dskip.yarn" as advised. Could one be supplied here solely for 
this development usage?



##########
artemis-console-war/pom.xml:
##########
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You 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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.activemq</groupId>
+        <artifactId>artemis-console-project</artifactId>
+        <version>1.0.0-SNAPSHOT</version>
+    </parent>
+
+    <groupId>org.apache.activemq</groupId>
+    <artifactId>artemis-console-war</artifactId>
+    <packaging>war</packaging>
+
+
+    <name>ActiveMQ Artemis Console War</name>
+
+    <dependencies>
+        <!-- mandatory core hawito modules -->
+        <dependency>
+            <groupId>io.hawt</groupId>
+            <artifactId>hawtio-system</artifactId>
+        </dependency>
+
+        <!-- Servlet API is provided by the container -->
+        <dependency>
+            <groupId>jakarta.servlet</groupId>
+            <artifactId>jakarta.servlet-api</artifactId>
+            <scope>provided</scope>
+        </dependency>
+
+        <!-- Logging -->
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <finalName>${project.artifactId}</finalName>

Review Comment:
   Why have this rather than the usual versioned artifacts (well, the name will 
still be versioned when deployed, even with this...part of what makes it 
unusual)



##########
artemis-console-extension/artemis-extension/src/artemis-extension/artemis/brokers/BrokerTopology.tsx:
##########
@@ -0,0 +1,671 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+import * as React from 'react';
+
+import { RegionsIcon as Icon1 } from '@patternfly/react-icons';
+import { FolderOpenIcon as Icon2 } from '@patternfly/react-icons';
+import { ClusterIcon } from '@patternfly/react-icons';
+
+import {
+  ColaLayout,
+  ComponentFactory,
+  DefaultEdge,
+  DefaultGroup,
+  DefaultNode,
+  DragObjectWithType,
+  Edge,
+  EdgeModel,
+  EdgeStyle,
+  Graph,
+  GraphComponent,
+  graphDropTargetSpec,
+  GRAPH_LAYOUT_END_EVENT,
+  groupDropTargetSpec,
+  Layout,
+  LayoutFactory,
+  Model,
+  ModelKind,
+  Node,
+  nodeDragSourceSpec,
+  nodeDropTargetSpec,
+  NodeModel,
+  NodeShape,
+  NodeStatus,
+  observer,
+  SELECTION_EVENT,
+  TopologyView,
+  Visualization,
+  VisualizationProvider,
+  VisualizationSurface,
+  withDndDrop,
+  WithDndDropProps,
+  withDragNode,
+  WithDragNodeProps,
+  withPanZoom,
+  withSelection,
+  WithSelectionProps,
+  withTargetDrag
+} from '@patternfly/react-topology';
+import { useEffect, useState } from 'react';
+import { artemisService, BrokerInfo } from '../artemis-service';
+import { eventService } from '@hawtio/react';
+import { ToolbarItem, Select, SelectVariant, SelectOption } from 
'@patternfly/react-core';
+
+
+const BadgeColors = [
+  {
+    name: 'A',
+    badgeColor: '#ace12e',
+    badgeTextColor: '#0f280d',
+    badgeBorderColor: '#486b00'
+  },
+  {
+    name: 'B',
+    badgeColor: '#F2F0FC',
+    badgeTextColor: '#5752d1',
+    badgeBorderColor: '#CBC1FF'
+  },
+  {
+    name: 'Broker',
+    badgeColor: '#c12766',
+    badgeTextColor: 'white',
+    badgeBorderColor: '#CBC1FF'
+  },
+  {
+    name: 'Address',
+    badgeColor: '#3e489f',
+    badgeTextColor: 'white',
+    badgeBorderColor: '#CBC1FF'
+  },
+  {
+    name: 'Queue',
+    badgeColor: '#50621d',
+    badgeTextColor: 'white',
+    badgeBorderColor: '#CBC1FF'
+  },
+  {
+    name: 'Internal Address',
+    badgeColor: 'white',
+    badgeTextColor: 'black',
+    badgeBorderColor: '#CBC1FF'
+  },
+  {
+    name: 'Internal Queue',
+    badgeColor: 'white',
+    badgeTextColor: 'black',
+    badgeBorderColor: '#CBC1FF'
+  }
+];
+
+interface ControllerState {
+  selectedIds: string[];
+  viewOptions: ViewOptions;
+}
+
+type CustomNodeProps = {
+  element: Node;
+} & WithDragNodeProps;
+
+const CustomNode: React.FC<CustomNodeProps & WithSelectionProps & 
WithDragNodeProps & WithDndDropProps> = ({ element, onSelect, selected, ...rest 
 }) => {
+
+  const data = element.getData();
+  const Icon = data.isAlternate ? Icon2 : Icon1;
+  const badgeColors = BadgeColors.find(badgeColor => badgeColor.name === 
data.badge);
+
+  return (  
+    <DefaultNode
+      element={element}
+      showStatusDecorator
+      badgeColor={badgeColors?.badgeColor}
+      badgeTextColor={badgeColors?.badgeTextColor}
+      badgeBorderColor={badgeColors?.badgeBorderColor} 
+      className="artemisBroker"
+      onSelect={onSelect}
+      selected={selected}
+      {...rest}
+    >
+      <g transform={`translate(25, 25)`}>
+        <Icon style={{ color: '#393F44' }} width={25} height={25} />
+      </g>
+    </DefaultNode>
+  );
+};
+
+const BrokerCustomNode: React.FC<CustomNodeProps & WithSelectionProps & 
WithDragNodeProps & WithDndDropProps> = observer(({ element, onSelect, 
selected, ...rest }) => {
+  const data = element.getData();
+  const Icon = ClusterIcon;
+  const badgeColors = BadgeColors.find(badgeColor => badgeColor.name === 
data.badge);
+  const { viewOptions } = element.getController().getState<ControllerState>();
+
+  return (
+    <DefaultNode
+      element={element}
+      showStatusDecorator
+      badge={data.badge}
+      badgeColor={badgeColors?.badgeColor}
+      badgeTextColor={badgeColors?.badgeTextColor}
+      badgeBorderColor={badgeColors?.badgeBorderColor}
+      showLabel={viewOptions.showLabels}
+      className="artemisBroker"
+      onSelect={onSelect}
+      selected={selected}
+      {...rest}
+    >
+      <g transform={`translate(25, 25)`}>
+        <Icon style={{ color: '#393F44' }} width={25} height={25} />
+      </g>
+    </DefaultNode>
+  );
+});
+
+const AddressCustomNode: React.FC<CustomNodeProps & WithSelectionProps & 
WithDragNodeProps & WithDndDropProps> = ({ element, onSelect, selected, ...rest 
 }) => {
+  const data = element.getData();
+  const badgeColors = BadgeColors.find(badgeColor => badgeColor.name === 
data.badge);
+  const { viewOptions } = element.getController().getState<ControllerState>();
+
+  return (
+    <DefaultNode
+      element={element}
+      showStatusDecorator
+      badge={data.badge}
+      badgeColor={badgeColors?.badgeColor}
+      badgeTextColor={badgeColors?.badgeTextColor}
+      badgeBorderColor={badgeColors?.badgeBorderColor} 
+      showLabel={viewOptions.showLabels}
+      onSelect={onSelect}
+      selected={selected}
+      className="artemisAddress"
+      {...rest}
+    >
+    </DefaultNode>
+  );
+};
+
+const InternalAddressCustomNode: React.FC<CustomNodeProps & WithSelectionProps 
& WithDragNodeProps & WithDndDropProps> = ({ element, onSelect, selected, 
...rest  }) => {
+  const data = element.getData();
+  const badgeColors = BadgeColors.find(badgeColor => badgeColor.name === 
data.badge);
+  const { viewOptions } = element.getController().getState<ControllerState>();
+
+  return (
+    <DefaultNode
+      element={element}
+      showStatusDecorator
+      badge={data.badge}
+      badgeColor={badgeColors?.badgeColor}
+      badgeTextColor={badgeColors?.badgeTextColor}
+      badgeBorderColor={badgeColors?.badgeBorderColor} 
+      showLabel={viewOptions.showLabels}
+      className="artemisInternalAddress"
+      onSelect={onSelect}
+      selected={selected}
+      {...rest}
+    >
+    </DefaultNode>
+  );
+};
+
+
+const QueueCustomNode: React.FC<CustomNodeProps & WithSelectionProps & 
WithDragNodeProps & WithDndDropProps> = ({ element, onSelect, selected, ...rest 
 }) => {
+  const data = element.getData();
+  const badgeColors = BadgeColors.find(badgeColor => badgeColor.name === 
data.badge);
+  const { viewOptions } = element.getController().getState<ControllerState>();
+
+  return (
+    <DefaultNode
+      element={element}
+      showStatusDecorator
+      badge={data.badge}
+      badgeColor={badgeColors?.badgeColor}
+      badgeTextColor={badgeColors?.badgeTextColor}
+      badgeBorderColor={badgeColors?.badgeBorderColor}
+      showLabel={viewOptions.showLabels} 
+      className="artemisQueue"
+      onSelect={onSelect}
+      selected={selected}
+      {...rest}
+    >
+    </DefaultNode>
+  );
+};
+
+const InternalQueueCustomNode: React.FC<CustomNodeProps & WithSelectionProps & 
WithDragNodeProps & WithDndDropProps> = ({ element, onSelect, selected, ...rest 
 }) => {
+  const data = element.getData();
+  const badgeColors = BadgeColors.find(badgeColor => badgeColor.name === 
data.badge);
+  const { viewOptions } = element.getController().getState<ControllerState>();
+
+  return (
+    <DefaultNode
+      element={element}
+      showStatusDecorator
+      badge={data.badge}
+      badgeColor={badgeColors?.badgeColor}
+      badgeTextColor={badgeColors?.badgeTextColor}
+      badgeBorderColor={badgeColors?.badgeBorderColor}
+      showLabel={viewOptions.showLabels} 
+      className="artemisInternalQueue"
+      onSelect={onSelect}
+      selected={selected}
+      {...rest}
+    >
+    </DefaultNode>
+  );
+};
+
+const customLayoutFactory: LayoutFactory = (type: string, graph: Graph): 
Layout | undefined => {
+  switch (type) {
+    case 'Cola':
+      return new ColaLayout(graph);
+    default:
+      return new ColaLayout(graph, { layoutOnDrag: true });
+  }
+};
+
+const CONNECTOR_TARGET_DROP = 'connector-target-drop';
+
+const customComponentFactory: ComponentFactory = (kind: ModelKind, type: 
string): any => {
+  switch (type) {
+    case 'group':
+      return 
withDndDrop(groupDropTargetSpec)(withDragNode(nodeDragSourceSpec('group'))(withSelection()(DefaultGroup)));
+    default:
+      switch (kind) {
+        case ModelKind.graph:
+          return 
withDndDrop(graphDropTargetSpec())(withPanZoom()(GraphComponent));
+        case ModelKind.node:
+          switch(type) {
+            case 'broker':
+              return withDndDrop(nodeDropTargetSpec([CONNECTOR_TARGET_DROP]))(
+                withDragNode(nodeDragSourceSpec('node', true, 
true))(BrokerCustomNode));
+            case 'address':
+              return withDndDrop(nodeDropTargetSpec([CONNECTOR_TARGET_DROP]))(
+                withDragNode(nodeDragSourceSpec('node', true, 
true))(AddressCustomNode));
+            case 'queue':
+              return withDndDrop(nodeDropTargetSpec([CONNECTOR_TARGET_DROP]))(
+                withDragNode(nodeDragSourceSpec('node', true, 
true))(QueueCustomNode));
+            case 'internalAddress':
+              return withDndDrop(nodeDropTargetSpec([CONNECTOR_TARGET_DROP]))(
+                withDragNode(nodeDragSourceSpec('node', true, 
true))(InternalAddressCustomNode));
+            case 'internalQueue':
+              return withDndDrop(nodeDropTargetSpec([CONNECTOR_TARGET_DROP]))(
+                withDragNode(nodeDragSourceSpec('node', true, 
true))(InternalQueueCustomNode));
+            default:
+              return withDndDrop(nodeDropTargetSpec([CONNECTOR_TARGET_DROP]))(
+                withDragNode(nodeDragSourceSpec('node', true, 
true))(CustomNode));
+          }
+        case ModelKind.edge:
+          return withTargetDrag<
+            DragObjectWithType,
+            Node,
+            { dragging?: boolean },
+            {
+              element: Edge;
+            }
+          >({
+            item: { type: CONNECTOR_TARGET_DROP },
+            begin: (monitor, props) => {
+              props.element.raise();
+              return props.element;
+            },
+            drag: (event, monitor, props) => {
+              props.element.setEndPoint(event.x, event.y);
+            },
+            end: (dropResult, monitor, props) => {
+              if (monitor.didDrop() && dropResult && props) {
+                props.element.setTarget(dropResult);
+              }
+              props.element.setEndPoint();
+            },
+            collect: monitor => ({
+              dragging: monitor.isDragging()
+            })
+            // @ts-ignore
+          })(DefaultEdge);
+        default:
+          return undefined;
+      }
+  }
+};
+
+const BROKER_NODE_DIAMETER = 75;
+const ADDRESS_NODE_DIAMETER = 50;
+const QUEUE_NODE_DIAMETER = 50;
+
+const NODES: NodeModel[] = [];
+const EDGES: EdgeModel[] = [];
+
+interface ViewOptions {
+  showLabels: boolean;
+  showAddresses: boolean;
+  showQueues: boolean;
+  showInternalAddresses: boolean;
+  showInternalQueues: boolean;
+  showConnectors: boolean;
+}
+
+export const DefaultViewOptions: ViewOptions = {
+  showLabels: false,

Review Comment:
   I found it a bit off that the labels are hidden by default. I didnt really 
know what anything was at all as a result, not until I enabled the labels from 
the Node Options, since there is no hover-over detail or legend either.  Just 
some coloured circles. I could guess at the broker one but that was it.



##########
artemis-console-war/pom.xml:
##########
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You 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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.activemq</groupId>
+        <artifactId>artemis-console-project</artifactId>
+        <version>1.0.0-SNAPSHOT</version>
+    </parent>
+
+    <groupId>org.apache.activemq</groupId>
+    <artifactId>artemis-console-war</artifactId>
+    <packaging>war</packaging>
+
+
+    <name>ActiveMQ Artemis Console War</name>
+
+    <dependencies>
+        <!-- mandatory core hawito modules -->
+        <dependency>
+            <groupId>io.hawt</groupId>
+            <artifactId>hawtio-system</artifactId>
+        </dependency>
+
+        <!-- Servlet API is provided by the container -->
+        <dependency>
+            <groupId>jakarta.servlet</groupId>
+            <artifactId>jakarta.servlet-api</artifactId>
+            <scope>provided</scope>
+        </dependency>
+
+        <!-- Logging -->
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+        </dependency>
+    </dependencies>

Review Comment:
   Comment from the earlier PR:
   
   This seems to just be using the output of the build in the other 
module...but it blindly assumes the other module has been built first, and it 
doesnt actually depend on the other module, which means it might not be (e.g 
maven could decide to build them in a different order as they are 
independent....especially in a multi-threaded build execution, where it does do 
the wrong thing).
   
   This module should have a dependency added on the other module to ensure the 
maven reactor knows it must build the other module first. Something like: 
https://github.com/quarkusio/quarkus/blob/3.9.2/bom/application/pom.xml#L6649-L6663
 (which ensures one bom module is built before another bom module uses it 
itself)
   
   (Alternatively, the extension module could actually package its output, and 
this module could then use an actual dependency to get that output.)



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: gitbox-unsubscr...@activemq.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to