Skip to content

Commit b68a5fe

Browse files
Merge pull request #6107 from eclipse/jetty-10.0.x-JavaxWebSocketContainerProvider
Make the JavaxWebSocketClientContainer.getContainer(HttpClient) method static.
2 parents 7a9e01a + 47ec9b1 commit b68a5fe

File tree

5 files changed

+69
-12
lines changed

5 files changed

+69
-12
lines changed

jetty-util/src/main/java/org/eclipse/jetty/util/component/Container.java

+40
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,46 @@ default List<EventListener> getEventListeners()
152152
return Collections.unmodifiableList(new ArrayList<>(getBeans(EventListener.class)));
153153
}
154154

155+
/**
156+
* A utility method to add a bean to a container.
157+
* @param parent the parent container.
158+
* @param child the child bean.
159+
* @return true if the child was added as a bean, false if parent was not instance of {@link Container} or bean was already present.
160+
*/
161+
static boolean addBean(Object parent, Object child)
162+
{
163+
if (parent instanceof Container)
164+
return ((Container)parent).addBean(child);
165+
return false;
166+
}
167+
168+
/**
169+
* A utility method to add a bean to a container.
170+
* @param parent the parent container.
171+
* @param child the child bean.
172+
* @param managed whether to managed the lifecycle of the bean.
173+
* @return true if the child was added as a bean, false if parent was not instance of {@link Container} or bean was already present.
174+
*/
175+
static boolean addBean(Object parent, Object child, boolean managed)
176+
{
177+
if (parent instanceof Container)
178+
return ((Container)parent).addBean(child, managed);
179+
return false;
180+
}
181+
182+
/**
183+
* A utility method to remove a bean from a container.
184+
* @param parent the parent container.
185+
* @param child the child bean.
186+
* @return true if parent was an instance of {@link Container} and the bean was removed.
187+
*/
188+
static boolean removeBean(Object parent, Object child)
189+
{
190+
if (parent instanceof Container)
191+
return ((Container)parent).removeBean(child);
192+
return false;
193+
}
194+
155195
/**
156196
* A listener for Container events.
157197
* If an added bean implements this interface it will receive the events

jetty-util/src/main/java/org/eclipse/jetty/util/component/ContainerLifeCycle.java

+7-7
Original file line numberDiff line numberDiff line change
@@ -474,9 +474,9 @@ public boolean addEventListener(EventListener listener)
474474
if (listener instanceof InheritedListener && b.isManaged() && b._bean instanceof Container)
475475
{
476476
if (b._bean instanceof ContainerLifeCycle)
477-
((ContainerLifeCycle)b._bean).addBean(listener, false);
477+
Container.addBean(b._bean, listener, false);
478478
else
479-
((Container)b._bean).addBean(listener);
479+
Container.addBean(b._bean, listener);
480480
}
481481
}
482482
}
@@ -499,8 +499,8 @@ public boolean removeEventListener(EventListener listener)
499499
{
500500
cl.beanRemoved(this, b._bean);
501501

502-
if (listener instanceof InheritedListener && b.isManaged() && b._bean instanceof Container)
503-
((Container)b._bean).removeBean(listener);
502+
if (listener instanceof InheritedListener && b.isManaged())
503+
Container.removeBean(b._bean, listener);
504504
}
505505
}
506506
return true;
@@ -541,9 +541,9 @@ private void manage(Bean bean)
541541
if (l instanceof InheritedListener)
542542
{
543543
if (bean._bean instanceof ContainerLifeCycle)
544-
((ContainerLifeCycle)bean._bean).addBean(l, false);
544+
Container.addBean(bean._bean, l, false);
545545
else
546-
((Container)bean._bean).addBean(l);
546+
Container.addBean(bean._bean, l);
547547
}
548548
}
549549
}
@@ -579,7 +579,7 @@ private void unmanage(Bean bean)
579579
for (Container.Listener l : _listeners)
580580
{
581581
if (l instanceof InheritedListener)
582-
((Container)bean._bean).removeBean(l);
582+
Container.removeBean(bean._bean, l);
583583
}
584584
}
585585
bean._managed = Managed.UNMANAGED;

jetty-websocket/websocket-javax-client/pom.xml

+11
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,17 @@
4545
<version>${project.version}</version>
4646
<scope>test</scope>
4747
</dependency>
48+
<dependency>
49+
<groupId>org.eclipse.jetty</groupId>
50+
<artifactId>jetty-jmx</artifactId>
51+
<version>${project.version}</version>
52+
<scope>test</scope>
53+
</dependency>
54+
<dependency>
55+
<groupId>org.eclipse.jetty</groupId>
56+
<artifactId>jetty-slf4j-impl</artifactId>
57+
<scope>test</scope>
58+
</dependency>
4859
</dependencies>
4960

5061
<build>

jetty-websocket/websocket-javax-client/src/main/java/org/eclipse/jetty/websocket/javax/client/JavaxWebSocketClientContainerProvider.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ protected WebSocketContainer getContainer()
6060
* @param httpClient a pre-configured {@link HttpClient} to be used by the implementation.
6161
* @see #getContainer()
6262
*/
63-
public WebSocketContainer getContainer(HttpClient httpClient)
63+
public static WebSocketContainer getContainer(HttpClient httpClient)
6464
{
6565
JavaxWebSocketClientContainer clientContainer = new JavaxWebSocketClientContainer(httpClient);
6666
// See: https://github.com/eclipse-ee4j/websocket-api/issues/212

jetty-websocket/websocket-javax-client/src/test/java/examples/SecureClientContainerExample.java

+10-4
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
package examples;
1515

16+
import java.lang.management.ManagementFactory;
1617
import java.net.URI;
1718
import java.util.concurrent.TimeUnit;
1819
import javax.websocket.ClientEndpointConfig;
@@ -21,9 +22,11 @@
2122
import org.eclipse.jetty.client.HttpClient;
2223
import org.eclipse.jetty.client.http.HttpClientTransportOverHTTP;
2324
import org.eclipse.jetty.io.ClientConnector;
25+
import org.eclipse.jetty.jmx.MBeanContainer;
26+
import org.eclipse.jetty.util.component.Container;
2427
import org.eclipse.jetty.util.component.LifeCycle;
2528
import org.eclipse.jetty.util.ssl.SslContextFactory;
26-
import org.eclipse.jetty.websocket.javax.client.internal.JavaxWebSocketClientContainer;
29+
import org.eclipse.jetty.websocket.javax.client.JavaxWebSocketClientContainerProvider;
2730

2831
public class SecureClientContainerExample
2932
{
@@ -76,9 +79,12 @@ public static WebSocketContainer getConfiguredWebSocketContainer() throws Except
7679
clientConnector.setSslContextFactory(ssl);
7780

7881
HttpClient httpClient = new HttpClient(new HttpClientTransportOverHTTP(clientConnector));
79-
JavaxWebSocketClientContainer clientContainer = new JavaxWebSocketClientContainer(httpClient);
80-
clientContainer.addManaged(httpClient); // allow clientContainer to own httpClient (for start/stop lifecycle)
81-
clientContainer.start();
82+
WebSocketContainer clientContainer = JavaxWebSocketClientContainerProvider.getContainer(httpClient);
83+
84+
// Components can be added as a bean to the WebSocketContainer with the Container static method.
85+
MBeanContainer mbeanContainer = new MBeanContainer(ManagementFactory.getPlatformMBeanServer());
86+
Container.addBean(clientContainer, mbeanContainer);
87+
8288
return clientContainer;
8389
}
8490
}

0 commit comments

Comments
 (0)