This is an automated email from the ASF dual-hosted git repository.
rzo1 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tomee.git
The following commit(s) were added to refs/heads/main by this push:
new ea864a0d3e TOMEE-4700 - Drop openejb-hessian (#2931)
ea864a0d3e is described below
commit ea864a0d3ed2696190a83dd5cfe5bef5218e295e
Author: Richard Zowalla <[email protected]>
AuthorDate: Fri Sep 11 20:22:56 2026 +0200
TOMEE-4700 - Drop openejb-hessian (#2931)
---
server/openejb-hessian/pom.xml | 77 ------
.../java/org/apache/openejb/cdi/api/Hessian.java | 32 ---
.../openejb/cdi/internal/HessianExtension.java | 214 ---------------
.../hessian/HessianInitialContextFactory.java | 149 -----------
.../openejb/server/hessian/HessianRegistry.java | 32 ---
.../server/hessian/HessianRegistryImpl.java | 74 -----
.../openejb/server/hessian/HessianServer.java | 155 -----------
.../openejb/server/hessian/HessianService.java | 282 -------------------
.../server/hessian/OpenEJBHessianServlet.java | 41 ---
.../server/hessian/TomcatHessianRegistry.java | 298 ---------------------
.../hessian | 10 -
.../jakarta.enterprise.inject.spi.Extension | 1 -
.../server/hessian/HessianCdiByConfigTest.java | 105 --------
.../openejb/server/hessian/HessianCdiTest.java | 116 --------
.../server/hessian/HessianInitialContextTest.java | 103 -------
.../server/hessian/HessianRegistryImplTest.java | 33 ---
.../openejb/server/hessian/HessianServiceTest.java | 103 -------
.../server/hessian/LimitedBasicValveTest.java | 89 ------
server/pom.xml | 1 -
19 files changed, 1915 deletions(-)
diff --git a/server/openejb-hessian/pom.xml b/server/openejb-hessian/pom.xml
deleted file mode 100644
index d2247a4217..0000000000
--- a/server/openejb-hessian/pom.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<?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/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <artifactId>server</artifactId>
- <groupId>org.apache.tomee</groupId>
- <version>11.0.0-SNAPSHOT</version>
- </parent>
-
- <artifactId>openejb-hessian</artifactId>
- <name>TomEE :: Server :: Hessian</name>
-
- <properties>
- <tomee.build.name>${project.groupId}.server.hessian</tomee.build.name>
- </properties>
- <dependencies>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>openejb-http</artifactId>
- <version>11.0.0-SNAPSHOT</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.tomcat</groupId>
- <artifactId>tomcat-catalina</artifactId>
- <version>${tomcat.version}</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>tomee-catalina</artifactId>
- <version>${project.version}</version>
- <scope>provided</scope>
- </dependency>
-
- <dependency>
- <groupId>com.caucho</groupId>
- <artifactId>hessian</artifactId>
- <version>4.0.66</version>
- <scope>provided</scope>
- </dependency>
- </dependencies>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-plugin</artifactId>
- <configuration>
- <reuseForks>false</reuseForks>
- <argLine>
- --add-opens=java.base/java.lang=ALL-UNNAMED
- </argLine>
- </configuration>
- </plugin>
- </plugins>
- </build>
-</project>
diff --git
a/server/openejb-hessian/src/main/java/org/apache/openejb/cdi/api/Hessian.java
b/server/openejb-hessian/src/main/java/org/apache/openejb/cdi/api/Hessian.java
deleted file mode 100644
index 68586ce960..0000000000
---
a/server/openejb-hessian/src/main/java/org/apache/openejb/cdi/api/Hessian.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * 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.
- */
-package org.apache.openejb.cdi.api;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-@Target(ElementType.TYPE)
-@Retention(RetentionPolicy.RUNTIME)
-public @interface Hessian {
- String path() default "";
-
- boolean sendCollectionType() default true;
-
- Class<?> serializerFactory() default Object.class;
-}
diff --git
a/server/openejb-hessian/src/main/java/org/apache/openejb/cdi/internal/HessianExtension.java
b/server/openejb-hessian/src/main/java/org/apache/openejb/cdi/internal/HessianExtension.java
deleted file mode 100644
index ab6370c426..0000000000
---
a/server/openejb-hessian/src/main/java/org/apache/openejb/cdi/internal/HessianExtension.java
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * 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.
- */
-package org.apache.openejb.cdi.internal;
-
-import org.apache.openejb.AppContext;
-import org.apache.openejb.OpenEJBRuntimeException;
-import org.apache.openejb.assembler.classic.AppInfo;
-import org.apache.openejb.cdi.OpenEJBLifecycle;
-import org.apache.openejb.cdi.api.Hessian;
-import org.apache.openejb.core.WebContext;
-import org.apache.openejb.loader.SystemInstance;
-import org.apache.openejb.server.hessian.HessianRegistry;
-import org.apache.openejb.server.hessian.HessianServer;
-import org.apache.openejb.server.hessian.HessianService;
-import org.apache.openejb.spi.ContainerSystem;
-import org.apache.webbeans.config.WebBeansContext;
-import org.apache.webbeans.container.BeanManagerImpl;
-
-import jakarta.enterprise.context.Dependent;
-import jakarta.enterprise.event.Observes;
-import jakarta.enterprise.inject.spi.AfterDeploymentValidation;
-import jakarta.enterprise.inject.spi.Bean;
-import jakarta.enterprise.inject.spi.BeanManager;
-import jakarta.enterprise.inject.spi.BeforeBeanDiscovery;
-import jakarta.enterprise.inject.spi.BeforeShutdown;
-import jakarta.enterprise.inject.spi.Extension;
-import jakarta.enterprise.inject.spi.ProcessBean;
-import jakarta.enterprise.inject.spi.ProcessSessionBean;
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.logging.Logger;
-
-public class HessianExtension implements Extension {
- private static final Logger LOGGER =
Logger.getLogger(HessianExtension.class.getName());
-
- private final Collection<Deployment> toDeploy = new ArrayList<>();
- private final Collection<DeployedEndpoint> deployed = new ArrayList<>();
-
- private AppInfo appInfo;
-
- protected void init(final @Observes BeforeBeanDiscovery
beforeBeanDiscovery) {
- appInfo = OpenEJBLifecycle.CURRENT_APP_INFO.get();
- if (appInfo == null) {
- throw new IllegalStateException("Without OpenEJBLifecycle this
Extension can't work correctly");
- }
- }
-
- protected <X> void findHessianWebServices(final @Observes ProcessBean<X>
processBean) {
- if (ProcessSessionBean.class.isInstance(processBean)) {
- return;
- }
-
- final Bean<X> bean = processBean.getBean();
- final Class<?> beanClass = bean.getBeanClass();
- for (final Class<?> itf : beanClass.getInterfaces()) {
- final Hessian hessian = itf.getAnnotation(Hessian.class);
- final String key = "openejb.hessian." + beanClass.getName() + "_"
+ itf.getName() + ".path";
- final String path = appInfo.properties.getProperty(key,
SystemInstance.get().getProperty(key));
- if (hessian != null || path != null) {
- toDeploy.add(new Deployment(itf, path, bean));
- }
- }
- }
-
- protected void deploy(final @Observes AfterDeploymentValidation
afterDeploymentValidation, final BeanManager bm) {
- final HessianService service =
SystemInstance.get().getComponent(HessianService.class);
- if (service == null) {
- LOGGER.severe("HessianService not yet started, no hessian CDI
webservices will be deployed");
- return;
- }
-
- final HessianRegistry registry = service.getRegistry();
-
- final String appName = findAppName();
- for (final Deployment deployment : toDeploy) {
- final Hessian hessian =
deployment.itf.getAnnotation(Hessian.class);
- final HessianServer server;
- try {
- server = new
HessianServer(deployment.bean.getBeanClass().getClassLoader());
- } catch (final HessianServer.HessianIsMissingException e) {
- LOGGER.info("Hessian is not available so openejb-hessian will
not deploy any service");
- break;
- }
-
- try {
- if (hessian != null && hessian.serializerFactory() !=
Object.class &&
!hessian.serializerFactory().isInstance(server.getSerializerFactory())) {
-
server.serializerFactory(hessian.serializerFactory().newInstance());
- }
- } catch (final Exception e) {
- throw new OpenEJBRuntimeException(e);
- }
- if (hessian != null) {
- server.sendCollectionType(hessian.sendCollectionType());
- }
- if (Dependent.class.equals(deployment.bean.getScope())) {
- LOGGER.warning("@Dependent can lead to memory leaks ATM");
- }
- server.createSkeleton(bm.getReference(deployment.bean,
deployment.itf, null), deployment.itf);
-
- final String name = getName(deployment.path, deployment.itf);
- try {
- LOGGER.info("Hessian(url=" +
registry.deploy(deployment.itf.getClassLoader(), server,
- service.getVirtualHost(), appName,
- service.getAuthMethod(), service.getTransportGuarantee(),
- service.getRealmName(), name) + ", interface=" + name +
")");
- deployed.add(new DeployedEndpoint(appName, name));
- } catch (final URISyntaxException e) {
- throw new OpenEJBRuntimeException(e);
- }
- }
- toDeploy.clear();
- }
-
- private String findAppName() {
- if (appInfo.webAppAlone) {
- return appInfo.webApps.iterator().next().contextRoot;
- }
-
- for (final AppContext app :
SystemInstance.get().getComponent(ContainerSystem.class).getAppContexts()) {
- for (final WebContext webContext : app.getWebContexts()) {
- if (isSameContext(webContext.getWebBeansContext())) {
- String contextRoot = webContext.getContextRoot();
- if (contextRoot != null) {
- if (contextRoot.startsWith("/")) {
- return contextRoot.substring(1);
- }
- return contextRoot;
- }
- return webContext.getId();
- }
- }
- if (isSameContext(app.getWebBeansContext())) {
- return app.getId();
- }
- }
- throw new IllegalArgumentException("Can't find application matching
bean manager");
- }
-
- private boolean isSameContext(final WebBeansContext app) {
- final BeanManagerImpl bm = app.getBeanManagerImpl();
- try {
- return bm.isInUse() &&
equals(bm.getExtension(HessianExtension.class));
- } catch (final Exception e) {
- return false;
- }
- }
-
- protected void shutdown(final @Observes BeforeShutdown unused) {
- final HessianService service =
SystemInstance.get().getComponent(HessianService.class);
- if (service == null) {
- return;
- }
-
- final HessianRegistry registry = service.getRegistry();
- for (final DeployedEndpoint pair : deployed) {
- registry.undeploy(service.getVirtualHost(), pair.app, pair.name);
- LOGGER.info("Undeployed CDI hessian service " + pair.name);
- }
- deployed.clear();
- }
-
- private static String getName(final String path, final Class<?> itf) {
- if (path != null) {
- return path;
- }
-
- final Hessian hessian = itf.getAnnotation(Hessian.class);
- if (hessian != null) {
- final String name = hessian.path();
- if (name.isEmpty()) {
- return itf.getName();
- }
- return name;
- }
- return itf.getName();
- }
-
- protected static class Deployment {
- private final Class<?> itf;
- private final String path;
- private final Bean<?> bean;
-
- public Deployment(final Class<?> itf, final String path, final Bean<?>
bean) {
- this.itf = itf;
- this.path = path;
- this.bean = bean;
- }
- }
-
- protected static class DeployedEndpoint {
- private final String app;
- private final String name;
-
- protected DeployedEndpoint(final String app, final String name) {
- this.app = app;
- this.name = name;
- }
- }
-}
diff --git
a/server/openejb-hessian/src/main/java/org/apache/openejb/client/hessian/HessianInitialContextFactory.java
b/server/openejb-hessian/src/main/java/org/apache/openejb/client/hessian/HessianInitialContextFactory.java
deleted file mode 100644
index d9c595270a..0000000000
---
a/server/openejb-hessian/src/main/java/org/apache/openejb/client/hessian/HessianInitialContextFactory.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * 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.
- */
-package org.apache.openejb.client.hessian;
-
-import org.apache.openejb.OpenEJBRuntimeException;
-import org.apache.openejb.core.ivm.naming.ContextWrapper;
-import org.apache.openejb.util.reflection.Reflections;
-
-import javax.naming.Context;
-import javax.naming.Name;
-import javax.naming.NamingException;
-import javax.naming.spi.InitialContextFactory;
-import java.lang.reflect.Constructor;
-import java.util.Hashtable;
-
-// all is done by reflection to let the use provide hessian in the app
-public class HessianInitialContextFactory implements InitialContextFactory {
- public static final String API = "openejb.hessian.client.api";
- public static final String FORCE_SERIALIZABLE =
"openejb.hessian.client.force-serializable";
- public static final String CHUNKED = "openejb.hessian.client.chunked";
- public static final String DEBUG = "openejb.hessian.client.debug";
- public static final String READ_TIMEOUT =
"openejb.hessian.client.read-timeout";
- public static final String CONNECT_TIMEOUT =
"openejb.hessian.client.connect-timeout";
-
- private static final Class<?>[] BOOLEAN_PARAM = new
Class<?>[]{boolean.class};
- private static final Class<?>[] LONG_PARAM = new Class<?>[]{long.class};
- private static final Class<?>[] STRING_PARAM = new
Class<?>[]{String.class};
- private static final Class<?>[] CREATE_PARAM = new Class<?>[]{Class.class,
String.class, ClassLoader.class};
-
- @Override
- public Context getInitialContext(final Hashtable<?, ?> environment) throws
NamingException {
- return new HessianContext(environment);
- }
-
- private static class HessianContext extends ContextWrapper {
- private final Hashtable<?, ?> environment;
- private final ClassLoader loader;
- private final String url;
- private final Class<?> api;
- private final boolean allowNonSerializable;
- private final String user;
- private final String password;
- private final boolean chunked;
- private final boolean debug;
- private final int readTimeout;
- private final int connectTimeout;
- private final Constructor<?> factoryConstructor;
- private final Constructor<?> serializerConstructor;
-
- public HessianContext(final Hashtable<?, ?> environment) {
- super(null); // will lead to NPE if used but shouldn't be used in
practise
- this.environment = environment;
-
- String baseUrl =
String.class.cast(environment.get(Context.PROVIDER_URL));
- if (baseUrl == null) {
- throw new IllegalArgumentException("provider url should be
set");
- }
- if (!baseUrl.endsWith("/")) {
- baseUrl += '/';
- }
-
- this.url = baseUrl;
-
- this.loader = Thread.currentThread().getContextClassLoader();
- this.user =
String.class.cast(environment.get(Context.SECURITY_PRINCIPAL));
- this.password =
String.class.cast(environment.get(Context.SECURITY_CREDENTIALS));
- this.allowNonSerializable = environment.get(FORCE_SERIALIZABLE) ==
null || !"true".equals(String.class.cast(environment.get(FORCE_SERIALIZABLE)));
- this.chunked = environment.get(CHUNKED) == null ||
"true".equals(String.class.cast(environment.get(CHUNKED)));
- this.debug =
"true".equals(String.class.cast(environment.get(DEBUG)));
- this.readTimeout = environment.get(READ_TIMEOUT) == null ? -1 :
Integer.parseInt(String.class.cast(environment.get(READ_TIMEOUT)));
- this.connectTimeout = environment.get(CONNECT_TIMEOUT) == null ?
-1 : Integer.parseInt(String.class.cast(environment.get(CONNECT_TIMEOUT)));
-
- final String apiClassname =
String.class.cast(environment.get(API));
- if (apiClassname != null) {
- try {
- api = loader.loadClass(apiClassname);
- } catch (final ClassNotFoundException e) {
- throw new OpenEJBRuntimeException(e);
- }
- } else {
- api = null;
- }
-
- try {
- factoryConstructor =
loader.loadClass("com.caucho.hessian.client.HessianProxyFactory").getConstructor(ClassLoader.class);
- serializerConstructor =
loader.loadClass("com.caucho.hessian.io.SerializerFactory").getConstructor(ClassLoader.class);
- } catch (final Exception e) {
- throw new OpenEJBRuntimeException(e);
- }
- }
-
- @Override
- public Object lookup(final Name name) throws NamingException {
- return lookup(name.toString());
- }
-
- @Override
- public Object lookup(final String name) throws NamingException {
- try {
- final Object clientFactory =
factoryConstructor.newInstance(loader);
- final Object factory =
serializerConstructor.newInstance(loader);
- Reflections.invokeByReflection(factory,
"setAllowNonSerializable", BOOLEAN_PARAM, new Object[]{allowNonSerializable});
- Reflections.invokeByReflection(clientFactory,
"setSerializerFactory", new
Class<?>[]{serializerConstructor.getDeclaringClass()}, new Object[]{factory});
- if (user != null) {
- Reflections.invokeByReflection(clientFactory, "setUser",
STRING_PARAM, new Object[]{user});
- Reflections.invokeByReflection(clientFactory,
"setPassword", STRING_PARAM, new Object[]{password});
- }
- Reflections.invokeByReflection(clientFactory,
"setChunkedPost", BOOLEAN_PARAM, new Object[]{chunked});
- Reflections.invokeByReflection(clientFactory, "setDebug",
BOOLEAN_PARAM, new Object[]{debug});
- Reflections.invokeByReflection(clientFactory,
"setReadTimeout", LONG_PARAM, new Object[]{readTimeout});
- Reflections.invokeByReflection(clientFactory,
"setConnectTimeout", LONG_PARAM, new Object[]{connectTimeout});
-
- final String completeUrl = url + name;
- try {
- if (api != null) { // just use it
- return Reflections.invokeByReflection(clientFactory,
"create", CREATE_PARAM, new Object[]{api, completeUrl, loader});
- }
-
- return Reflections.invokeByReflection(clientFactory,
"create", STRING_PARAM, new Object[]{completeUrl});
- } catch (final Exception e) {
- throw new NamingException(e.getMessage());
- }
- } catch (final Exception e) {
- throw new OpenEJBRuntimeException(e);
- }
-
-
- }
-
- @Override
- public Hashtable<?, ?> getEnvironment() throws NamingException {
- return environment;
- }
- }
-}
diff --git
a/server/openejb-hessian/src/main/java/org/apache/openejb/server/hessian/HessianRegistry.java
b/server/openejb-hessian/src/main/java/org/apache/openejb/server/hessian/HessianRegistry.java
deleted file mode 100644
index 29fa27841e..0000000000
---
a/server/openejb-hessian/src/main/java/org/apache/openejb/server/hessian/HessianRegistry.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * 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.
- */
-package org.apache.openejb.server.hessian;
-
-import org.apache.openejb.loader.SystemInstance;
-
-import java.net.URISyntaxException;
-
-public interface HessianRegistry {
- static final String HESSIAN =
SystemInstance.get().getProperty("openejb.hessian.subcontext", "/hessian/");
-
- String deploy(ClassLoader loader, HessianServer server,
- String host, String app,
- String authMethod, String transportGuarantee, String
realmName,
- String name) throws URISyntaxException;
-
- public void undeploy(String host, String app, String name);
-}
diff --git
a/server/openejb-hessian/src/main/java/org/apache/openejb/server/hessian/HessianRegistryImpl.java
b/server/openejb-hessian/src/main/java/org/apache/openejb/server/hessian/HessianRegistryImpl.java
deleted file mode 100644
index 7918a39610..0000000000
---
a/server/openejb-hessian/src/main/java/org/apache/openejb/server/hessian/HessianRegistryImpl.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * 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.
- */
-package org.apache.openejb.server.hessian;
-
-import org.apache.openejb.OpenEJBRuntimeException;
-import org.apache.openejb.loader.SystemInstance;
-import org.apache.openejb.server.httpd.HttpListener;
-import org.apache.openejb.server.httpd.HttpListenerRegistry;
-import org.apache.openejb.server.httpd.HttpRequest;
-import org.apache.openejb.server.httpd.HttpResponse;
-import org.apache.openejb.server.httpd.OpenEJBHttpRegistry;
-import org.apache.openejb.server.httpd.util.HttpUtil;
-
-public class HessianRegistryImpl extends OpenEJBHttpRegistry implements
HessianRegistry {
- @Override
- public String deploy(final ClassLoader loader, final HessianServer
listener, final String host,
- final String app, final String authMethod, final
String transportGuarantee,
- final String realmName, final String name) {
- if (authMethod != null && !"NONE".equalsIgnoreCase(authMethod)) {
- throw new IllegalArgumentException("authMethod '" + authMethod +
"' is not supported by the embedded hessian registry for '" + name
- + "', use authMethod=NONE or the Tomcat registry");
- }
- if (transportGuarantee != null &&
!"NONE".equalsIgnoreCase(transportGuarantee)) {
- throw new IllegalArgumentException("transportGuarantee '" +
transportGuarantee + "' is not supported by the embedded hessian registry for
'" + name
- + "', use transportGuarantee=NONE or the Tomcat registry");
- }
- final String path = generateEndpointName(app, name);
- addWrappedHttpListener(new HessianListener(listener), loader, path);
- return HttpUtil.selectSingleAddress(getResolvedAddresses(path));
- }
-
- @Override
- public void undeploy(String host, String app, String name) {
-
SystemInstance.get().getComponent(HttpListenerRegistry.class).removeHttpListener(generateEndpointName(app,
name));
- }
-
- private static String generateEndpointName(final String app, final String
name) {
- return "/" + app + HESSIAN + name;
- }
-
- protected static class HessianListener implements HttpListener {
- private final HessianServer delegate;
-
- protected HessianListener(final HessianServer server) {
- this.delegate = server;
- }
-
- @Override
- public void onMessage(final HttpRequest request, final HttpResponse
response) throws Exception {
- try {
- delegate.invoke(request.getInputStream(),
response.getOutputStream());
- } catch (final Throwable throwable) {
- if (Exception.class.isInstance(throwable)) {
- throw Exception.class.cast(throwable);
- }
- throw new OpenEJBRuntimeException(throwable.getMessage(),
throwable);
- }
- }
- }
-}
diff --git
a/server/openejb-hessian/src/main/java/org/apache/openejb/server/hessian/HessianServer.java
b/server/openejb-hessian/src/main/java/org/apache/openejb/server/hessian/HessianServer.java
deleted file mode 100644
index 3ffd3a9ab3..0000000000
---
a/server/openejb-hessian/src/main/java/org/apache/openejb/server/hessian/HessianServer.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * 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.
- */
-package org.apache.openejb.server.hessian;
-
-import org.apache.openejb.OpenEJBRuntimeException;
-import org.apache.openejb.util.reflection.Reflections;
-
-import java.io.BufferedInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-// done by reflection to let hessian be in the app
-public class HessianServer {
- public static final String CONTENT_TYPE_HESSIAN = "application/x-hessian";
-
- private static final Class<?>[] BOOLEAN_PARAM = new
Class<?>[]{boolean.class};
- private static final Object[] TRUE_PARAM = new Object[]{true};
-
- private final ClassLoader loader;
- private final Class<?> serializerFactoryClass;
-
- private Object serializerFactory;
- private Object skeleton;
- private Logger debugLogger = null;
-
- public HessianServer(final ClassLoader classLoader) throws
HessianIsMissingException {
- this.loader = classLoader;
-
- try {
- serializerFactoryClass =
classLoader.loadClass("com.caucho.hessian.io.SerializerFactory");
- serializerFactory =
serializerFactoryClass.getConstructor(ClassLoader.class).newInstance(loader);
- } catch (final Exception e) {
- throw new HessianIsMissingException(e);
- }
- Reflections.invokeByReflection(serializerFactory,
"setAllowNonSerializable", BOOLEAN_PARAM, TRUE_PARAM);
- }
-
- public HessianServer serializerFactory(final Object serializerFactory) {
- this.serializerFactory = serializerFactory;
- return this;
- }
-
- public HessianServer sendCollectionType(final boolean sendCollectionType) {
- Reflections.invokeByReflection(serializerFactory,
"setSendCollectionType", BOOLEAN_PARAM, new Object[]{sendCollectionType});
- return this;
- }
-
- public HessianServer debug(boolean debug) {
- this.debugLogger = (debug ? Logger.getLogger("OpenEJB.hessian.DEBUG")
: null);
- return this;
- }
-
- public HessianServer createSkeleton(final Object instance, final Class<?>
itf) {
- try {
- skeleton =
loader.loadClass("com.caucho.hessian.server.HessianSkeleton").getConstructor(Object.class,
Class.class).newInstance(instance, itf);
- } catch (final Exception e) {
- throw new OpenEJBRuntimeException(e);
- }
- return this;
- }
-
- public Object getSerializerFactory() {
- return serializerFactory;
- }
-
- public void invoke(final InputStream inputStream, final OutputStream
outputStream) throws Throwable {
- InputStream isToUse = inputStream;
- OutputStream osToUse = outputStream;
-
- if (debugLogger != null && debugLogger.isLoggable(Level.FINE)) {
- isToUse =
InputStream.class.cast(loader.loadClass("com.caucho.hessian.io.HessianDebugInputStream").getConstructor(InputStream.class,
Logger.class, Level.class).newInstance(inputStream, debugLogger, Level.FINE));
- Reflections.invokeByReflection(isToUse, "startTop2", new
Class<?>[0], null);
-
- osToUse =
OutputStream.class.cast(loader.loadClass("com.caucho.hessian.io.HessianDebugOutputStream").getConstructor(OutputStream.class,
Logger.class, Level.class).newInstance(outputStream, debugLogger, Level.FINE));
- Reflections.invokeByReflection(osToUse, "startTop2", new
Class<?>[0], null);
- }
-
- if (!isToUse.markSupported()) {
- isToUse = new BufferedInputStream(isToUse);
- isToUse.mark(1);
- }
-
- int code = isToUse.read();
- int major;
- int minor;
-
- Object in;
- Object out;
-
- if (code == 'H' || code == 'C') { // Hessian 2.0 stream
- major = isToUse.read();
- minor = isToUse.read();
- if (major != 0x02) {
- throw new IOException("Version " + major + "." + minor + " is
not understood");
- }
- in =
loader.loadClass("com.caucho.hessian.io.Hessian2Input").getConstructor(InputStream.class).newInstance(isToUse);
- out =
loader.loadClass("com.caucho.hessian.io.Hessian2Output").getConstructor(OutputStream.class).newInstance(osToUse);
- Reflections.invokeByReflection(in, "readCall", new Class<?>[0],
null);
- } else if (code == 'c') { // Hessian 1.0 call
- major = isToUse.read();
- minor = isToUse.read();
- in =
loader.loadClass("com.caucho.hessian.io.HessianInput").getConstructor(InputStream.class).newInstance(isToUse);
- if (major >= 2) {
- out =
loader.loadClass("com.caucho.hessian.io.Hessian2Output").getConstructor(OutputStream.class).newInstance(osToUse);
- } else {
- out =
loader.loadClass("com.caucho.hessian.io.HessianOutput").getConstructor(OutputStream.class).newInstance(osToUse);
- }
- } else {
- throw new IOException("Expected 'H'/'C' (Hessian 2.0) or 'c'
(Hessian 1.0) in hessian input at " + code);
- }
-
- Reflections.invokeByReflection(in, "setSerializerFactory", new
Class<?>[]{serializerFactoryClass}, new Object[]{serializerFactory});
- Reflections.invokeByReflection(out, "setSerializerFactory", new
Class<?>[]{serializerFactoryClass}, new Object[]{serializerFactory});
-
- try {
- Reflections.invokeByReflection(skeleton, "invoke", new
Class<?>[]{loader.loadClass("com.caucho.hessian.io.AbstractHessianInput"),
loader.loadClass("com.caucho.hessian.io.AbstractHessianOutput")}, new
Object[]{in, out});
- } finally {
- try {
- Reflections.invokeByReflection(in, "close", new Class<?>[0],
null);
- isToUse.close();
- } catch (final IOException ex) {
- // ignore
- }
- try {
- Reflections.invokeByReflection(out, "close", new Class<?>[0],
null);
- osToUse.close();
- } catch (final IOException ex) {
- // ignore
- }
- }
- }
-
- public static class HessianIsMissingException extends Exception {
- public HessianIsMissingException(final Exception e) {
- super(e);
- }
- }
-}
diff --git
a/server/openejb-hessian/src/main/java/org/apache/openejb/server/hessian/HessianService.java
b/server/openejb-hessian/src/main/java/org/apache/openejb/server/hessian/HessianService.java
deleted file mode 100644
index 469262d1a4..0000000000
---
a/server/openejb-hessian/src/main/java/org/apache/openejb/server/hessian/HessianService.java
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
- * 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.
- */
-package org.apache.openejb.server.hessian;
-
-import org.apache.openejb.BeanContext;
-import org.apache.openejb.OpenEJBRuntimeException;
-import org.apache.openejb.assembler.classic.AppInfo;
-import org.apache.openejb.assembler.classic.Assembler;
-import org.apache.openejb.assembler.classic.EjbJarInfo;
-import org.apache.openejb.assembler.classic.EnterpriseBeanInfo;
-import
org.apache.openejb.assembler.classic.event.AssemblerAfterApplicationCreated;
-import
org.apache.openejb.assembler.classic.event.AssemblerBeforeApplicationDestroyed;
-import
org.apache.openejb.assembler.classic.event.NewEjbAvailableAfterApplicationCreated;
-import org.apache.openejb.loader.SystemInstance;
-import org.apache.openejb.observer.Observes;
-import org.apache.openejb.server.SelfManaging;
-import org.apache.openejb.server.ServerService;
-import org.apache.openejb.server.ServiceException;
-import org.apache.openejb.server.httpd.HttpListenerRegistry;
-import org.apache.openejb.spi.ContainerSystem;
-import org.apache.openejb.util.LogCategory;
-import org.apache.openejb.util.Logger;
-import org.apache.openejb.util.proxy.ProxyEJB;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.Socket;
-import java.net.URISyntaxException;
-import java.util.Collection;
-import java.util.Properties;
-
-public class HessianService implements ServerService, SelfManaging {
- private static final Logger LOGGER =
Logger.getInstance(LogCategory.OPENEJB_SERVER.createChild("hessian"),
HessianService.class);
-
- private boolean disabled;
- private boolean debug;
- private boolean sendCollectionType;
- private String serializerFactory;
- private String realmName;
- private String virtualHost;
- private String transportGuarantee;
- private String authMethod;
-
- private HessianRegistry registry;
-
- private void deploy(final AppInfo app, final Collection<BeanContext>
beanContexts) {
- if (disabled) {
- return;
- }
-
- for (final BeanContext beanContext : beanContexts) {
- final Class<?> remoteItf =
beanContext.getBusinessRemoteInterface();
- if (remoteItf == null) {
- continue;
- }
-
- final ClassLoader old =
Thread.currentThread().getContextClassLoader();
- final ClassLoader classLoader = beanContext.getClassLoader();
- Thread.currentThread().setContextClassLoader(classLoader);
-
- try {
- final HessianServer server;
- try {
- server = new HessianServer(classLoader).debug(debug);
- } catch (final HessianServer.HessianIsMissingException e) {
- LOGGER.info("Hessian is not available so openejb-hessian
will not deploy any service");
- break;
- }
-
- if (serializerFactory != null) {
- try {
-
server.serializerFactory(classLoader.loadClass(serializerFactory).newInstance()).sendCollectionType(sendCollectionType);
- } catch (final Exception e) {
- throw new OpenEJBRuntimeException(e);
- }
- } else {
- server.sendCollectionType(sendCollectionType);
- }
-
- server.createSkeleton(ProxyEJB.simpleProxy(beanContext, new
Class<?>[]{remoteItf}), remoteItf);
-
- try {
- LOGGER.info("Hessian(url=" + registry.deploy(classLoader,
server, virtualHost, appName(app, beanContext), authMethod, transportGuarantee,
realmName, String.class.cast(beanContext.getDeploymentID())) + ", interface=" +
remoteItf.getName() + ")");
- } catch (final URISyntaxException e) {
- throw new OpenEJBRuntimeException(e);
- }
- } finally {
- Thread.currentThread().setContextClassLoader(old);
- }
- }
- }
-
- @Override
- public void start() throws ServiceException {
- SystemInstance.get().addObserver(this);
- SystemInstance.get().setComponent(HessianService.class, this);
- registry = setRegistry();
-
- final Assembler assembler =
SystemInstance.get().getComponent(Assembler.class);
- if (assembler != null) {
- for (final AppInfo appInfo : assembler.getDeployedApplications()) {
- deploy(new AssemblerAfterApplicationCreated(appInfo,
SystemInstance.get().getComponent(ContainerSystem.class).getAppContext(appInfo.appId),
null));
- }
- }
- }
-
- private HessianRegistry setRegistry() {
- HessianRegistry registry =
SystemInstance.get().getComponent(HessianRegistry.class);
- if (registry == null) {
- try { // if tomcat
-
HessianService.class.getClassLoader().loadClass("org.apache.catalina.Context");
- registry = new TomcatHessianRegistry();
- } catch (final Throwable t) { // else if embedded
- if
(SystemInstance.get().getComponent(HttpListenerRegistry.class) != null) {
- registry = new HessianRegistryImpl();
- } else {
- throw new IllegalStateException("openejb-http is missing
at classpath");
- }
- }
- SystemInstance.get().setComponent(HessianRegistry.class, registry);
- }
- return registry;
- }
-
- public HessianRegistry getRegistry() {
- return registry;
- }
-
- @Override
- public void stop() throws ServiceException {
- SystemInstance.get().removeObserver(this);
- }
-
- @Override
- public void service(final InputStream in, final OutputStream out) throws
ServiceException, IOException {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void service(final Socket socket) throws ServiceException,
IOException {
- throw new UnsupportedOperationException();
- }
-
- public void newEjbToDeploy(final @Observes
NewEjbAvailableAfterApplicationCreated event) {
- deploy(event.getApp(), event.getBeanContexts());
- }
-
- public void deploy(final @Observes AssemblerAfterApplicationCreated event)
{
- final AppInfo appInfo = event.getApp();
- deploy(appInfo, event.getContext().getBeanContexts());
- }
-
- public void undeploy(@Observes final AssemblerBeforeApplicationDestroyed
event) {
- if (disabled) {
- return;
- }
-
- for (final BeanContext beanContext :
event.getContext().getBeanContexts()) {
- final Class<?> remoteItf =
beanContext.getBusinessRemoteInterface();
- if (remoteItf == null) {
- continue;
- }
-
- final String name =
String.class.cast(beanContext.getDeploymentID());
- registry.undeploy(virtualHost, appName(event.getApp(),
beanContext), name);
- LOGGER.info("Undeployed hessian service " + name);
- }
- }
-
- public static String appName(final AppInfo app, final BeanContext
beanContext) {
- if (!app.webApps.isEmpty()) {
- for (final EjbJarInfo ejbJar : app.ejbJars) {
- for (final EnterpriseBeanInfo bean : ejbJar.enterpriseBeans) {
- if (bean.ejbName.equals(beanContext.getEjbName())) {
- if (ejbJar.webapp) {
- return ejbJar.moduleName;
- }
- }
- }
- }
- }
- return app.appId;
- }
-
- @Override
- public String getName() {
- return "hessian";
- }
-
- @Override
- public String getIP() {
- return "n/a";
- }
-
- @Override
- public int getPort() {
- return -1;
- }
-
- public boolean isDisabled() {
- return disabled;
- }
-
- public void setDisabled(final boolean disabled) {
- this.disabled = disabled;
- }
-
- public boolean isDebug() {
- return debug;
- }
-
- public void setDebug(final boolean debug) {
- this.debug = debug;
- }
-
- public boolean isSendCollectionType() {
- return sendCollectionType;
- }
-
- public void setSendCollectionType(final boolean sendCollectionType) {
- this.sendCollectionType = sendCollectionType;
- }
-
- public String getRealmName() {
- return realmName;
- }
-
- public void setRealmName(final String realmName) {
- this.realmName = realmName;
- }
-
- public String getVirtualHost() {
- return virtualHost;
- }
-
- public void setVirtualHost(final String virtualHost) {
- this.virtualHost = virtualHost;
- }
-
- public String getTransportGuarantee() {
- return transportGuarantee;
- }
-
- public void setTransportGuarantee(final String transportGuarantee) {
- this.transportGuarantee = transportGuarantee;
- }
-
- public String getAuthMethod() {
- return authMethod;
- }
-
- public void setAuthMethod(final String authMethod) {
- this.authMethod = authMethod;
- }
-
- @Override
- public void init(final Properties props) throws Exception {
- disabled = Boolean.parseBoolean(props.getProperty("disabled",
"false"));
- debug = Boolean.parseBoolean(props.getProperty("debug", "false"));
- sendCollectionType =
Boolean.parseBoolean(props.getProperty("sendCollectionType", "false"));
- realmName = props.getProperty("realmName");
- transportGuarantee = props.getProperty("transportGuarantee", "NONE");
- virtualHost = props.getProperty("virtualHost", "localhost");
- authMethod = props.getProperty("authMethod", "NONE");
- serializerFactory = props.getProperty("serializerFactory", null);
- }
-}
diff --git
a/server/openejb-hessian/src/main/java/org/apache/openejb/server/hessian/OpenEJBHessianServlet.java
b/server/openejb-hessian/src/main/java/org/apache/openejb/server/hessian/OpenEJBHessianServlet.java
deleted file mode 100644
index 2524898b74..0000000000
---
a/server/openejb-hessian/src/main/java/org/apache/openejb/server/hessian/OpenEJBHessianServlet.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * 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.
- */
-package org.apache.openejb.server.hessian;
-
-import jakarta.servlet.ServletException;
-import jakarta.servlet.ServletRequest;
-import jakarta.servlet.ServletResponse;
-import jakarta.servlet.http.HttpServlet;
-import java.io.IOException;
-
-public class OpenEJBHessianServlet extends HttpServlet {
- private final HessianServer delegate;
-
- public OpenEJBHessianServlet(final HessianServer listener) {
- this.delegate = listener;
- }
-
- @Override
- public void service(final ServletRequest req, final ServletResponse res)
throws ServletException, IOException {
- res.setContentType(HessianServer.CONTENT_TYPE_HESSIAN);
- try {
- delegate.invoke(req.getInputStream(), res.getOutputStream());
- } catch (final Throwable throwable) {
- throw new ServletException(throwable);
- }
- }
-}
diff --git
a/server/openejb-hessian/src/main/java/org/apache/openejb/server/hessian/TomcatHessianRegistry.java
b/server/openejb-hessian/src/main/java/org/apache/openejb/server/hessian/TomcatHessianRegistry.java
deleted file mode 100644
index 705c718be7..0000000000
---
a/server/openejb-hessian/src/main/java/org/apache/openejb/server/hessian/TomcatHessianRegistry.java
+++ /dev/null
@@ -1,298 +0,0 @@
-/*
- * 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.
- */
-package org.apache.openejb.server.hessian;
-
-import org.apache.catalina.Container;
-import org.apache.catalina.Context;
-import org.apache.catalina.Engine;
-import org.apache.catalina.Service;
-import org.apache.catalina.Valve;
-import org.apache.catalina.Wrapper;
-import org.apache.catalina.authenticator.BasicAuthenticator;
-import org.apache.catalina.authenticator.DigestAuthenticator;
-import org.apache.catalina.authenticator.NonLoginAuthenticator;
-import org.apache.catalina.authenticator.SSLAuthenticator;
-import org.apache.catalina.connector.Connector;
-import org.apache.catalina.connector.Request;
-import org.apache.catalina.connector.Response;
-import org.apache.catalina.core.StandardContext;
-import org.apache.catalina.core.StandardServer;
-import org.apache.commons.lang3.tuple.MutablePair;
-import org.apache.commons.lang3.tuple.Pair;
-import org.apache.openejb.assembler.classic.WebAppBuilder;
-import org.apache.openejb.loader.SystemInstance;
-import org.apache.openejb.server.httpd.util.HttpUtil;
-import org.apache.tomcat.util.descriptor.web.LoginConfig;
-import org.apache.tomcat.util.descriptor.web.SecurityCollection;
-import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
-import org.apache.tomee.catalina.IgnoredStandardContext;
-import org.apache.tomee.catalina.OpenEJBValve;
-import org.apache.tomee.catalina.TomcatWebAppBuilder;
-import org.apache.tomee.loader.TomcatHelper;
-
-import jakarta.servlet.ServletException;
-import java.io.IOException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class TomcatHessianRegistry implements HessianRegistry {
- private static final String TOMEE_HESSIAN_SECURITY_ROLE_PREFIX =
"tomee.hessian.security-role.";
-
- private final Map<String, Pair<Context, Integer>> fakeContexts = new
HashMap<>();
-
- private Engine engine;
- private List<Connector> connectors;
-
- public TomcatHessianRegistry() {
- final StandardServer standardServer = TomcatHelper.getServer();
- for (final Service service : standardServer.findServices()) {
- if (Engine.class.isInstance(service.getContainer())) {
- connectors = Arrays.asList(service.findConnectors());
- engine = Engine.class.cast(service.getContainer());
- break;
- }
- }
- }
-
- @Override
- public String deploy(final ClassLoader loader, final HessianServer
listener,
- final String hostname, final String app,
- final String authMethod, final String
transportGuarantee,
- final String realmName, final String name) throws
URISyntaxException {
- Container host = engine.findChild(hostname);
- if (host == null) {
- host = engine.findChild(engine.getDefaultHost());
- if (host == null) {
- throw new IllegalArgumentException("Invalid virtual host '" +
engine.getDefaultHost() + "'. Do you have a matching Host entry in the
server.xml?");
- }
- }
-
- final String contextRoot = contextName(app);
- Context context = Context.class.cast(host.findChild(contextRoot));
- final boolean applicationContext = context != null &&
!fakeContexts.containsKey(contextRoot);
- if (context == null) {
- Pair<Context, Integer> fakeContext = fakeContexts.get(contextRoot);
- if (fakeContext != null) {
- context = fakeContext.getLeft();
- fakeContext.setValue(fakeContext.getValue() + 1);
- } else {
- context = Context.class.cast(host.findChild(contextRoot));
- if (context == null) {
- fakeContext = fakeContexts.get(contextRoot);
- if (fakeContext == null) {
- context = createNewContext(loader, authMethod,
transportGuarantee, realmName, app);
- fakeContext = new MutablePair<>(context, 1);
- fakeContexts.put(contextRoot, fakeContext);
- } else {
- context = fakeContext.getLeft();
- fakeContext.setValue(fakeContext.getValue() + 1);
- }
- }
- }
- }
-
- final String realAuthMethod = authMethod == null ? null :
authMethod.toUpperCase();
- if (applicationContext && realAuthMethod != null &&
!"NONE".equals(realAuthMethod)) {
- // an existing web context keeps its own login configuration, only
the BASIC valve can be added to it
- if (!"BASIC".equals(realAuthMethod)) {
- throw new IllegalArgumentException("authMethod '" + authMethod
+ "' cannot be applied to the existing context '"
- + contextRoot + "', refusing to deploy hessian servlet '"
+ name + "'");
- }
- if (transportGuarantee != null &&
!"NONE".equalsIgnoreCase(transportGuarantee)) {
- throw new IllegalArgumentException("transportGuarantee '" +
transportGuarantee + "' cannot be applied to the existing context '"
- + contextRoot + "', refusing to deploy hessian servlet '"
+ name + "'");
- }
- if (!StandardContext.class.isInstance(context)) {
- throw new IllegalArgumentException("authMethod '" + authMethod
+ "' cannot be applied to context '"
- + contextRoot + "' (" + context.getClass().getName() + "),
refusing to deploy hessian servlet '" + name + "'");
- }
- }
-
- final String servletMapping = generateServletPath(name);
-
- Wrapper wrapper =
Wrapper.class.cast(context.findChild(servletMapping));
- if (wrapper != null) {
- throw new IllegalArgumentException("Servlet " + servletMapping + "
in web application context " + context.getName() + " already exists");
- }
-
- wrapper = context.createWrapper();
- wrapper.setName(HESSIAN.replace("/", "") + "_" + name);
- wrapper.setServlet(new OpenEJBHessianServlet(listener));
- context.addChild(wrapper);
- context.addServletMappingDecoded(servletMapping, wrapper.getName());
-
- if ("BASIC".equals(realAuthMethod) &&
StandardContext.class.isInstance(context)) {
- final StandardContext standardContext =
StandardContext.class.cast(context);
-
- boolean found = false;
- for (final Valve v : standardContext.getPipeline().getValves()) {
- if (LimitedBasicValve.class.isInstance(v) ||
BasicAuthenticator.class.isInstance(v)) {
- found = true;
- break;
- }
- }
- if (!found) {
- standardContext.addValve(new LimitedBasicValve());
- }
- }
-
- final List<String> addresses = new ArrayList<>();
- for (final Connector connector : connectors) {
- for (final String mapping : wrapper.findMappings()) {
- final URI address = new URI(connector.getScheme(), null,
host.getName(), connector.getPort(), contextRoot + mapping, null, null);
- addresses.add(address.toString());
- }
- }
- return HttpUtil.selectSingleAddress(addresses);
- }
-
- private static Context createNewContext(final ClassLoader classLoader,
final String rAuthMethod, final String rTransportGuarantee, final String
realmName, final String name) {
- String path = name;
- if (path == null) {
- path = "/";
- }
- if (!path.startsWith("/")) {
- path = "/" + path;
- }
-
- final StandardContext context = new IgnoredStandardContext();
- context.setPath(path);
- context.setDocBase("");
- context.setParentClassLoader(classLoader);
- context.setDelegate(true);
- context.setName(name);
-
TomcatWebAppBuilder.class.cast(SystemInstance.get().getComponent(WebAppBuilder.class)).initJ2EEInfo(context);
-
- // Configure security
- String authMethod = rAuthMethod;
- if (authMethod != null) {
- authMethod = authMethod.toUpperCase();
- }
- String transportGuarantee = rTransportGuarantee;
- if (transportGuarantee != null) {
- transportGuarantee = transportGuarantee.toUpperCase();
- }
- if (authMethod != null && !"NONE".equals(authMethod)) {
- if ("BASIC".equals(authMethod) || "DIGEST".equals(authMethod) ||
"CLIENT-CERT".equals(authMethod)) {
-
- //Setup a login configuration
- final LoginConfig loginConfig = new LoginConfig();
- loginConfig.setAuthMethod(authMethod);
- loginConfig.setRealmName(realmName);
- context.setLoginConfig(loginConfig);
-
- //Setup a default Security Constraint
- final String securityRole =
SystemInstance.get().getProperty(TOMEE_HESSIAN_SECURITY_ROLE_PREFIX + name,
"default");
- for (final String role : securityRole.split(",")) {
- final SecurityCollection collection = new
SecurityCollection();
- collection.addMethod("GET");
- collection.addMethod("POST");
- collection.addPattern("/*");
- collection.setName(role);
-
- final SecurityConstraint sc = new SecurityConstraint();
- sc.addAuthRole("*");
- sc.addCollection(collection);
- sc.setAuthConstraint(true);
- sc.setUserConstraint(transportGuarantee);
-
- context.addConstraint(sc);
- context.addSecurityRole(role);
- }
- } else {
- throw new IllegalArgumentException("Unsupported authMethod '"
+ rAuthMethod + "': supported values are BASIC, DIGEST and CLIENT-CERT");
- }
-
- //Set the proper authenticator
- switch (authMethod) {
- case "BASIC":
- context.addValve(new BasicAuthenticator());
- break;
- case "DIGEST":
- context.addValve(new DigestAuthenticator());
- break;
- case "CLIENT-CERT":
- context.addValve(new SSLAuthenticator());
- break;
- case "NONE":
- context.addValve(new NonLoginAuthenticator());
- break;
- }
-
- context.getPipeline().addValve(new OpenEJBValve());
- } else {
- throw new IllegalArgumentException("Invalid authMethod: " +
authMethod);
- }
-
- return context;
- }
-
- private static String generateServletPath(String name) {
- return HESSIAN + name;
- }
-
- private static String contextName(final String app) {
- if (!app.startsWith("/") && !app.isEmpty()) {
- return "/" + app;
- }
- return app;
- }
-
- @Override
- public void undeploy(final String hostname, final String app, final String
name) {
- Container host = engine.findChild(hostname);
- if (host == null) {
- host = engine.findChild(engine.getDefaultHost());
- if (host == null) {
- throw new IllegalArgumentException("Invalid virtual host '" +
engine.getDefaultHost() + "'. Do you have a matching Host entry in the
server.xml?");
- }
- }
-
- final String contextRoot = contextName(app);
- final Pair<Context, Integer> fakeContext =
fakeContexts.get(contextRoot);
-
- if (fakeContext != null) {
- fakeContext.setValue(fakeContext.getValue() - 1);
- if (fakeContext.getValue() == 0) {
- fakeContexts.remove(contextRoot);
- host.removeChild(fakeContext.getKey());
- }
- }
- }
-
- protected static class LimitedBasicValve extends BasicAuthenticator {
- @Override
- public void invoke(final Request request, final Response response)
throws IOException, ServletException {
- String requestURI = request.getDecodedRequestURI();
- final String contextPath = request.getContextPath();
- if (contextPath != null && !contextPath.isEmpty() &&
requestURI.startsWith(contextPath)) {
- requestURI = requestURI.substring(contextPath.length());
- }
- if (requestURI.startsWith(HESSIAN)) {
- if (!authenticate(request, response)) {
- return;
- }
- }
- getNext().invoke(request, response);
- }
- }
-}
diff --git
a/server/openejb-hessian/src/main/resources/META-INF/org.apache.openejb.server.ServerService/hessian
b/server/openejb-hessian/src/main/resources/META-INF/org.apache.openejb.server.ServerService/hessian
deleted file mode 100644
index d5d8e8c3e7..0000000000
---
a/server/openejb-hessian/src/main/resources/META-INF/org.apache.openejb.server.ServerService/hessian
+++ /dev/null
@@ -1,10 +0,0 @@
-server = org.apache.openejb.server.hessian.HessianService
-disabled = ${openejb.profile.custom}
-
-# NONE, INTEGRAL or CONFIDENTIAL
-transportGuarantee = NONE
-
-# NONE, BASIC
-authMethod = NONE
-
-# realmName =
diff --git
a/server/openejb-hessian/src/main/resources/META-INF/services/jakarta.enterprise.inject.spi.Extension
b/server/openejb-hessian/src/main/resources/META-INF/services/jakarta.enterprise.inject.spi.Extension
deleted file mode 100644
index bc37b190a0..0000000000
---
a/server/openejb-hessian/src/main/resources/META-INF/services/jakarta.enterprise.inject.spi.Extension
+++ /dev/null
@@ -1 +0,0 @@
-org.apache.openejb.cdi.internal.HessianExtension
diff --git
a/server/openejb-hessian/src/test/java/org/apache/openejb/server/hessian/HessianCdiByConfigTest.java
b/server/openejb-hessian/src/test/java/org/apache/openejb/server/hessian/HessianCdiByConfigTest.java
deleted file mode 100644
index 025897edb0..0000000000
---
a/server/openejb-hessian/src/test/java/org/apache/openejb/server/hessian/HessianCdiByConfigTest.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * 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.
- */
-package org.apache.openejb.server.hessian;
-
-import com.caucho.hessian.client.HessianProxyFactory;
-import com.caucho.hessian.io.SerializerFactory;
-import org.apache.openejb.jee.WebApp;
-import org.apache.openejb.junit.ApplicationComposer;
-import org.apache.openejb.testing.Classes;
-import org.apache.openejb.testing.Configuration;
-import org.apache.openejb.testing.EnableServices;
-import org.apache.openejb.testing.Module;
-import org.apache.openejb.testng.PropertiesBuilder;
-import org.apache.openejb.util.NetworkUtil;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import jakarta.enterprise.context.ApplicationScoped;
-import java.net.MalformedURLException;
-import java.util.Properties;
-
-import static org.hamcrest.CoreMatchers.instanceOf;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
-
-@EnableServices({"hessian", "httpejbd"})
-@RunWith(ApplicationComposer.class)
-public class HessianCdiByConfigTest {
-
- private static int port = -1;
-
- @BeforeClass
- public static void beforeClass() {
- port = NetworkUtil.getNextAvailablePort();
- }
-
- @Module
- @Classes(cdi = true, value = MyCdiHessianService.class)
- public WebApp webApp() {
- return new WebApp().contextRoot("web");
- }
-
- @Configuration
- public Properties config() {
- return new PropertiesBuilder().p("openejb.hessian." +
MyCdiHessianService.class.getName() + "_" + CdiService.class.getName() +
".path", "foo")
- .p("httpejbd.port", Integer.toString(port)).build();
- }
-
- @Test
- public void client() throws MalformedURLException {
- final ClassLoader loader =
Thread.currentThread().getContextClassLoader();
- final HessianProxyFactory clientFactory = new
HessianProxyFactory(loader);
- final SerializerFactory factory = new SerializerFactory(loader);
- factory.setAllowNonSerializable(true);
- clientFactory.setSerializerFactory(factory);
- final CdiService client =
CdiService.class.cast(clientFactory.create(CdiService.class,
"http://127.0.0.1:" + port + "/web/hessian/foo"));
-
- final Out out = client.call(new In("test"));
- assertThat(out, instanceOf(Out.class));
- assertEquals("test", out.value);
- }
-
- public static interface CdiService {
- Out call(In in);
- }
-
- @ApplicationScoped
- public static class MyCdiHessianService implements CdiService {
- @Override
- public Out call(final In in) {
- return new Out(in.value);
- }
- }
-
- public static class In {
- private String value;
-
- public In(String value) {
- this.value = value;
- }
- }
-
- public static class Out {
- private String value;
-
- public Out(String value) {
- this.value = value;
- }
- }
-}
diff --git
a/server/openejb-hessian/src/test/java/org/apache/openejb/server/hessian/HessianCdiTest.java
b/server/openejb-hessian/src/test/java/org/apache/openejb/server/hessian/HessianCdiTest.java
deleted file mode 100644
index 5d67470f07..0000000000
---
a/server/openejb-hessian/src/test/java/org/apache/openejb/server/hessian/HessianCdiTest.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * 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.
- */
-package org.apache.openejb.server.hessian;
-
-import com.caucho.hessian.client.HessianProxyFactory;
-import com.caucho.hessian.io.SerializerFactory;
-import org.apache.openejb.cdi.api.Hessian;
-import org.apache.openejb.jee.WebApp;
-import org.apache.openejb.junit.ApplicationComposer;
-import org.apache.openejb.testing.Classes;
-import org.apache.openejb.testing.Configuration;
-import org.apache.openejb.testing.EnableServices;
-import org.apache.openejb.testing.Module;
-import org.apache.openejb.testng.PropertiesBuilder;
-import org.apache.openejb.util.NetworkUtil;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import jakarta.enterprise.context.ApplicationScoped;
-import jakarta.inject.Inject;
-import java.net.MalformedURLException;
-import java.util.Properties;
-
-import static org.hamcrest.CoreMatchers.instanceOf;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertThat;
-
-@EnableServices({"hessian", "httpejbd"})
-@RunWith(ApplicationComposer.class)
-public class HessianCdiTest {
-
- private static int port = -1;
-
- @BeforeClass
- public static void beforeClass() {
- port = NetworkUtil.getNextAvailablePort();
- }
-
- @Configuration
- public Properties props() {
- return new PropertiesBuilder().p("httpejbd.port",
Integer.toString(port)).build();
- }
-
- @Module
- @Classes(cdi = true, value = {MyCdiHessianService.class, CdiBean.class})
- public WebApp webApp() {
- return new WebApp().contextRoot("web");
- }
-
- @Test
- public void client() throws MalformedURLException {
- final ClassLoader loader =
Thread.currentThread().getContextClassLoader();
- final HessianProxyFactory clientFactory = new
HessianProxyFactory(loader);
- final SerializerFactory factory = new SerializerFactory(loader);
- factory.setAllowNonSerializable(true);
- clientFactory.setSerializerFactory(factory);
- final CdiService client =
CdiService.class.cast(clientFactory.create(CdiService.class,
"http://127.0.0.1:" + port + "/web/hessian/service"));
-
- final Out out = client.call(new In("test"));
- assertThat(out, instanceOf(Out.class));
- assertEquals("test", out.value);
- }
-
- @Hessian(path = "service")
- public static interface CdiService {
- Out call(In in);
- }
-
- @ApplicationScoped
- public static class MyCdiHessianService implements CdiService {
- @Inject
- private CdiBean bean;
-
- @Override
- public Out call(final In in) {
- assertNotNull(bean);
- return new Out(in.value);
- }
- }
-
- public static class In {
- private String value;
-
- public In(String value) {
- this.value = value;
- }
- }
-
- public static class Out {
- private String value;
-
- public Out(String value) {
- this.value = value;
- }
- }
-
- public static class CdiBean {
-
- }
-}
diff --git
a/server/openejb-hessian/src/test/java/org/apache/openejb/server/hessian/HessianInitialContextTest.java
b/server/openejb-hessian/src/test/java/org/apache/openejb/server/hessian/HessianInitialContextTest.java
deleted file mode 100644
index d7d217eaf6..0000000000
---
a/server/openejb-hessian/src/test/java/org/apache/openejb/server/hessian/HessianInitialContextTest.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * 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.
- */
-package org.apache.openejb.server.hessian;
-
-import org.apache.openejb.client.hessian.HessianInitialContextFactory;
-import org.apache.openejb.junit.ApplicationComposer;
-import org.apache.openejb.testing.Configuration;
-import org.apache.openejb.testing.EnableServices;
-import org.apache.openejb.testing.Module;
-import org.apache.openejb.testng.PropertiesBuilder;
-import org.apache.openejb.util.NetworkUtil;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import jakarta.ejb.Remote;
-import jakarta.ejb.Singleton;
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import java.util.Properties;
-
-import static org.hamcrest.CoreMatchers.instanceOf;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
-
-@EnableServices({"hessian", "httpejbd"})
-@RunWith(ApplicationComposer.class)
-public class HessianInitialContextTest {
-
- private static int port = -1;
-
- @BeforeClass
- public static void beforeClass() {
- port = NetworkUtil.getNextAvailablePort();
- }
-
- @Configuration
- public Properties props() {
- return new PropertiesBuilder().p("httpejbd.port",
Integer.toString(port)).build();
- }
-
- @Module
- public Class<?>[] classes() {
- return new Class<?>[]{Server.class};
- }
-
- @Test
- public void client() throws Exception {
- final MyApi client = MyApi.class.cast(
- new InitialContext(new PropertiesBuilder()
- .p(Context.INITIAL_CONTEXT_FACTORY,
HessianInitialContextFactory.class.getName())
- .p(Context.PROVIDER_URL, "http://127.0.0.1:" + port +
"/HessianInitialContextTest/hessian/")
- .build())
- .lookup("Server"));
-
- final Out out = client.call(new In("test"));
- assertThat(out, instanceOf(Out.class));
- assertEquals("test", out.value);
- }
-
- @Remote
- public static interface MyApi {
- Out call(In in);
- }
-
- @Singleton
- public static class Server implements MyApi {
- @Override
- public Out call(final In in) {
- return new Out(in.value);
- }
- }
-
- public static class In {
- private String value;
-
- public In(final String value) {
- this.value = value;
- }
- }
-
- public static class Out {
- private String value;
-
- public Out(final String value) {
- this.value = value;
- }
- }
-}
diff --git
a/server/openejb-hessian/src/test/java/org/apache/openejb/server/hessian/HessianRegistryImplTest.java
b/server/openejb-hessian/src/test/java/org/apache/openejb/server/hessian/HessianRegistryImplTest.java
deleted file mode 100644
index 232673bdec..0000000000
---
a/server/openejb-hessian/src/test/java/org/apache/openejb/server/hessian/HessianRegistryImplTest.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * 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.
- */
-package org.apache.openejb.server.hessian;
-
-import org.junit.Test;
-
-public class HessianRegistryImplTest {
- @Test(expected = IllegalArgumentException.class)
- public void rejectsAuthMethod() {
- new
HessianRegistryImpl().deploy(Thread.currentThread().getContextClassLoader(),
null,
- "localhost", "myapp", "BASIC", "NONE", null, "MyBean");
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void rejectsTransportGuarantee() {
- new
HessianRegistryImpl().deploy(Thread.currentThread().getContextClassLoader(),
null,
- "localhost", "myapp", "NONE", "CONFIDENTIAL", null, "MyBean");
- }
-}
diff --git
a/server/openejb-hessian/src/test/java/org/apache/openejb/server/hessian/HessianServiceTest.java
b/server/openejb-hessian/src/test/java/org/apache/openejb/server/hessian/HessianServiceTest.java
deleted file mode 100644
index c709a7ffa1..0000000000
---
a/server/openejb-hessian/src/test/java/org/apache/openejb/server/hessian/HessianServiceTest.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * 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.
- */
-package org.apache.openejb.server.hessian;
-
-import com.caucho.hessian.client.HessianProxyFactory;
-import com.caucho.hessian.io.SerializerFactory;
-import org.apache.openejb.junit.ApplicationComposer;
-import org.apache.openejb.testing.Configuration;
-import org.apache.openejb.testing.EnableServices;
-import org.apache.openejb.testing.Module;
-import org.apache.openejb.testng.PropertiesBuilder;
-import org.apache.openejb.util.NetworkUtil;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import jakarta.ejb.Remote;
-import jakarta.ejb.Singleton;
-import java.net.MalformedURLException;
-import java.util.Properties;
-
-import static org.hamcrest.CoreMatchers.instanceOf;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
-
-@EnableServices({"hessian", "httpejbd"})
-@RunWith(ApplicationComposer.class)
-public class HessianServiceTest {
-
- private static int port = -1;
-
- @BeforeClass
- public static void beforeClass() {
- port = NetworkUtil.getNextAvailablePort();
- }
-
- @Configuration
- public Properties props() {
- return new PropertiesBuilder().p("httpejbd.port",
Integer.toString(port)).build();
- }
-
- @Module
- public Class<?>[] classes() {
- return new Class<?>[]{MyHessianWebService.class};
- }
-
- @Test
- public void client() throws MalformedURLException {
- final ClassLoader loader =
Thread.currentThread().getContextClassLoader();
- final HessianProxyFactory clientFactory = new
HessianProxyFactory(loader);
- final SerializerFactory factory = new SerializerFactory(loader);
- factory.setAllowNonSerializable(true);
- clientFactory.setSerializerFactory(factory);
- final HessianWebService client =
HessianWebService.class.cast(clientFactory.create(HessianWebService.class,
"http://127.0.0.1:" + port + "/HessianServiceTest/hessian/" +
MyHessianWebService.class.getSimpleName()));
-
- final Out out = client.call(new In("test"));
- assertThat(out, instanceOf(Out.class));
- assertEquals("test", out.value);
- }
-
- @Remote
- public static interface HessianWebService {
- Out call(In in);
- }
-
- @Singleton
- public static class MyHessianWebService implements HessianWebService {
- @Override
- public Out call(final In in) {
- return new Out(in.value);
- }
- }
-
- public static class In {
- private String value;
-
- public In(String value) {
- this.value = value;
- }
- }
-
- public static class Out {
- private String value;
-
- public Out(String value) {
- this.value = value;
- }
- }
-}
diff --git
a/server/openejb-hessian/src/test/java/org/apache/openejb/server/hessian/LimitedBasicValveTest.java
b/server/openejb-hessian/src/test/java/org/apache/openejb/server/hessian/LimitedBasicValveTest.java
deleted file mode 100644
index f3e93e081d..0000000000
---
a/server/openejb-hessian/src/test/java/org/apache/openejb/server/hessian/LimitedBasicValveTest.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * 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.
- */
-package org.apache.openejb.server.hessian;
-
-import org.apache.catalina.connector.Connector;
-import org.apache.catalina.connector.Request;
-import org.apache.catalina.connector.Response;
-import org.apache.catalina.core.StandardContext;
-import org.apache.catalina.core.StandardEngine;
-import org.apache.catalina.core.StandardHost;
-import org.apache.catalina.core.StandardService;
-import org.apache.catalina.valves.ValveBase;
-import org.junit.Test;
-
-import java.io.IOException;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import jakarta.servlet.ServletException;
-import jakarta.servlet.http.HttpServletResponse;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-public class LimitedBasicValveTest {
- @Test
- public void rootContext() throws Exception {
- assertTrue(authenticates("", "/hessian/MyBean"));
- assertFalse(authenticates("", "/other"));
- }
-
- @Test
- public void nonRootContext() throws Exception {
- assertTrue(authenticates("/myapp", "/myapp/hessian/MyBean"));
- assertFalse(authenticates("/myapp", "/myapp/other"));
- }
-
- private static boolean authenticates(final String contextPath, final
String uri) throws IOException, ServletException {
- final AtomicBoolean authenticated = new AtomicBoolean();
- final AtomicBoolean invokedNext = new AtomicBoolean();
-
- final TomcatHessianRegistry.LimitedBasicValve valve = new
TomcatHessianRegistry.LimitedBasicValve() {
- @Override
- public boolean authenticate(final Request request, final
HttpServletResponse response) {
- authenticated.set(true);
- return true;
- }
- };
- valve.setNext(new ValveBase() {
- @Override
- public void invoke(final Request request, final Response response)
{
- invokedNext.set(true);
- }
- });
-
- final StandardEngine engine = new StandardEngine();
- engine.setService(new StandardService());
- final StandardHost host = new StandardHost();
- host.setParent(engine);
- final StandardContext context = new StandardContext();
- context.setParent(host);
- context.setPath(contextPath);
-
- final Connector connector = new Connector();
- final Request request = new Request(connector, new
org.apache.coyote.Request());
- request.getCoyoteRequest().requestURI().setString(uri);
- request.getCoyoteRequest().decodedURI().setString(uri);
- request.getMappingData().context = context;
- request.getMappingData().contextSlashCount = contextPath.isEmpty() ? 0
: 1;
-
- valve.invoke(request, new Response(new org.apache.coyote.Response()));
-
- assertTrue(invokedNext.get());
- return authenticated.get();
- }
-}
diff --git a/server/pom.xml b/server/pom.xml
index a70be79df9..6379fe52e2 100644
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -48,7 +48,6 @@
<module>openejb-ssh</module>
<module>openejb-common-cli</module>
<module>openejb-bonecp</module>
- <module>openejb-hessian</module>
</modules>
<dependencies>