MEECROWAVE-201 ensure client and server buses can be shared
git-svn-id: https://svn.apache.org/repos/asf/openwebbeans/meecrowave/trunk@1862453 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/meecrowave-core/src/main/java/org/apache/meecrowave/Meecrowave.java b/meecrowave-core/src/main/java/org/apache/meecrowave/Meecrowave.java
index 3dbefdb..98fccbb 100644
--- a/meecrowave-core/src/main/java/org/apache/meecrowave/Meecrowave.java
+++ b/meecrowave-core/src/main/java/org/apache/meecrowave/Meecrowave.java
@@ -276,6 +276,9 @@
final AtomicReference<Runnable> releaseSCI = new AtomicReference<>();
final ServletContainerInitializer meecrowaveInitializer = (c, ctx1) -> {
+ ctx1.setAttribute("meecrowave.configuration", configuration);
+ ctx1.setAttribute("meecrowave.instance", Meecrowave.this);
+
new OWBAutoSetup().onStartup(c, ctx1);
if (Cxfs.IS_PRESENT) {
new CxfCdiAutoSetup().onStartup(c, ctx1);
@@ -355,8 +358,6 @@
ctx.getResources().setCachingAllowed(configuration.webResourceCached);
break;
case Lifecycle.BEFORE_INIT_EVENT:
- ctx.getServletContext().setAttribute("meecrowave.configuration", configuration);
- ctx.getServletContext().setAttribute("meecrowave.instance", Meecrowave.this);
if (configuration.loginConfig != null) {
ctx.setLoginConfig(configuration.loginConfig.build());
}
@@ -808,6 +809,10 @@
}
}
+ public ConfigurableBus getClientBus() {
+ return clientBus;
+ }
+
/**
* Store away the current system property for restoring it later
* during shutdown.
diff --git a/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/MeecrowaveBus.java b/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/MeecrowaveBus.java
index ecdb2c4..cf73320 100644
--- a/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/MeecrowaveBus.java
+++ b/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/MeecrowaveBus.java
@@ -39,23 +39,32 @@
@Typed({MeecrowaveBus.class, Bus.class})
@ApplicationScoped
public class MeecrowaveBus implements Bus, ClassUnwrapper {
- private final ConfigurableBus delegate = new ConfigurableBus();
+ private final ConfigurableBus delegate;
protected MeecrowaveBus() {
- // no-op: for proxies
+ delegate= null;
}
@Inject
public MeecrowaveBus(final ServletContext context) {
- setProperty(ClassUnwrapper.class.getName(), this);
-
final ClassLoader appLoader = context.getClassLoader();
- setExtension(appLoader, ClassLoader.class); // ServletController locks on the classloader otherwise
+ final Meecrowave meecrowave = Meecrowave.class.cast(context.getAttribute("meecrowave.instance"));
final Meecrowave.Builder builder = Meecrowave.Builder.class.cast(context.getAttribute("meecrowave.configuration"));
- if (builder != null && builder.isJaxrsProviderSetup()) {
- delegate.initProviders(builder, appLoader);
+ if (meecrowave.getClientBus() == null) {
+ delegate = new ConfigurableBus();
+ if (builder != null && builder.isJaxrsProviderSetup()) {
+ delegate.initProviders(builder, appLoader);
+ }
+ } else {
+ delegate = meecrowave.getClientBus();
+ if (builder != null && !builder.isInitializeClientBus() && builder.isJaxrsProviderSetup()) {
+ delegate.initProviders(builder, appLoader);
+ }
}
+
+ setProperty(ClassUnwrapper.class.getName(), this);
+ setExtension(appLoader, ClassLoader.class); // ServletController locks on the classloader otherwise
}
diff --git a/meecrowave-core/src/test/java/org/apache/meecrowave/johnzon/JohnzonBufferTest.java b/meecrowave-core/src/test/java/org/apache/meecrowave/johnzon/JohnzonBufferTest.java
index 4b709a3..c84a11f 100644
--- a/meecrowave-core/src/test/java/org/apache/meecrowave/johnzon/JohnzonBufferTest.java
+++ b/meecrowave-core/src/test/java/org/apache/meecrowave/johnzon/JohnzonBufferTest.java
@@ -40,7 +40,7 @@
.request(MediaType.APPLICATION_JSON)
.get(String.class);
assertEquals("{\"isbn\":\"dummyisbn\"}", jsonResponse);
- //X TODO work in progress! assertEquals(1, DebugJohnzonBufferStrategy.getCounter());
+ assertEquals(3, DebugJohnzonBufferStrategy.getCounter()); // reader fact -> parser fact (2 buffers) + writer -> generator (1 buffer)
} finally {
client.close();
}