You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by dj...@apache.org on 2006/10/03 21:29:45 UTC
svn commit: r452600 [3/3] - in /incubator/openejb/trunk/openejb2: ./ modules/
modules/openejb-builder/src/test/java/org/apache/openejb/corba/security/config/tss/
modules/openejb-core/src/main/java/org/apache/openejb/corba/
modules/openejb-core/src/main...
Added: incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/main/java/org/apache/openejb/yoko/ORBConfigAdapter.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/main/java/org/apache/openejb/yoko/ORBConfigAdapter.java?view=auto&rev=452600
==============================================================================
--- incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/main/java/org/apache/openejb/yoko/ORBConfigAdapter.java (added)
+++ incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/main/java/org/apache/openejb/yoko/ORBConfigAdapter.java Tue Oct 3 12:29:42 2006
@@ -0,0 +1,355 @@
+/**
+ * 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.yoko;
+
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Properties;
+import java.net.InetSocketAddress;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.omg.CORBA.ORB;
+import org.omg.CSIIOP.EstablishTrustInClient;
+import org.omg.Security.Confidentiality;
+import org.omg.Security.EstablishTrustInTarget;
+import org.omg.Security.NoProtection;
+
+import org.apache.geronimo.gbean.GBeanLifecycle;
+
+import org.apache.geronimo.security.deploy.DefaultDomainPrincipal;
+import org.apache.geronimo.security.deploy.DefaultPrincipal;
+import org.apache.geronimo.security.deploy.DefaultRealmPrincipal;
+
+import org.apache.openejb.corba.CORBABean;
+import org.apache.openejb.corba.CSSBean;
+import org.apache.openejb.corba.NameService;
+import org.apache.openejb.corba.ORBConfiguration;
+import org.apache.openejb.corba.security.config.ConfigAdapter;
+import org.apache.openejb.corba.security.config.ConfigException;
+import org.apache.openejb.corba.security.config.css.CSSCompoundSecMechConfig;
+import org.apache.openejb.corba.security.config.css.CSSCompoundSecMechListConfig;
+import org.apache.openejb.corba.security.config.css.CSSConfig;
+import org.apache.openejb.corba.security.config.tss.TSSConfig;
+import org.apache.openejb.corba.security.config.ssl.SSLConfig;
+import org.apache.openejb.corba.security.config.tss.TSSSSLTransportConfig;
+import org.apache.openejb.corba.security.config.tss.TSSTransportMechConfig;
+
+import org.apache.yoko.orb.CosNaming.tnaming.TransientNameService;
+import org.apache.yoko.orb.CosNaming.tnaming.TransientServiceException;
+
+
+/**
+ * A ConfigAdapter instance for the Apache Yoko
+ * CORBA support.
+ * @version $Revision$ $Date$
+ */
+public class ORBConfigAdapter implements GBeanLifecycle, ConfigAdapter {
+
+ private final Log log = LogFactory.getLog(ORBConfigAdapter.class);
+
+ // static registry used to hook up bean instances with
+ private static final HashMap registry = new HashMap();
+
+ public ORBConfigAdapter() {
+ }
+
+ /**
+ * Start the config adapter GBean. This is basically
+ * an opportunity to set any system properties
+ * required to make the ORB hook ups. In particular,
+ * this makes the ORB hookups for the RMI over IIOP
+ * support.
+ *
+ * @exception Exception
+ */
+ public void doStart() throws Exception {
+ // define the default ORB for ORB.init();
+ System.setProperty("org.omg.CORBA.ORBClass", "org.apache.yoko.orb.CORBA.ORB");
+ System.setProperty("org.omg.CORBA.ORBSingletonClass", "org.apache.yoko.orb.CORBA.ORBSingleton");
+
+ // redirect the RMI implementation to use the Yoko ORB.
+ System.setProperty("javax.rmi.CORBA.PortableRemoteObjectClass", "org.apache.yoko.rmi.impl.PortableRemoteObjectImpl");
+ System.setProperty("javax.rmi.CORBA.StubClass", "org.apache.yoko.rmi.impl.StubImpl");
+ // this hooks the util class and allows us to override certain functions
+ System.setProperty("javax.rmi.CORBA.UtilClass", "org.apache.openejb.corba.util.UtilDelegateImpl");
+ // this tells the openejb UtilDelegateImpl which implementation to delegate non-overridden
+ // operations to.
+ System.setProperty("org.apache.openejb.corba.UtilDelegateClass", "org.apache.yoko.rmi.impl.UtilImpl");
+ log.debug("Started Yoko ORBConfigAdapter");
+ }
+
+ public void doStop() throws Exception {
+ // nothing really required here.
+ log.debug("Stopped Yoko ORBConfigAdapter");
+ }
+
+ public void doFail() {
+ // nothing much to do.
+ log.warn("Failed Yoko ORBConfigAdapter");
+ }
+
+ /**
+ * Create an ORB for a CORBABean server context.
+ *
+ * @param server The CORBABean that owns this ORB's configuration.
+ *
+ * @return An ORB instance configured for the CORBABean.
+ * @exception ConfigException
+ */
+ public ORB createServerORB(CORBABean server) throws ConfigException {
+ return createORB(server.getURI(), (ORBConfiguration)server, translateToArgs(server), translateToProps(server));
+ }
+
+ /**
+ * Create an ORB for a CSSBean client context.
+ *
+ * @param client The configured CSSBean used for access.
+ *
+ * @return An ORB instance configured for this client access.
+ * @exception ConfigException
+ */
+ public ORB createClientORB(CSSBean client) throws ConfigException {
+ return createORB(client.getURI(), (ORBConfiguration)client, translateToArgs(client), translateToProps(client));
+ }
+
+ /**
+ * Create a transient name service instance using the
+ * specified host name and port.
+ *
+ * @param host The String host name.
+ * @param port The port number of the listener.
+ *
+ * @return An opaque object that represents the name service.
+ * @exception ConfigException
+ */
+ public Object createNameService(String host, int port) throws ConfigException {
+ try {
+ // create a name service using the supplied host and publish under the name "NameService"
+ TransientNameService service = new TransientNameService(host, port, "NameService");
+ service.run();
+ // the service instance is returned as an opaque object.
+ return service;
+ } catch (TransientServiceException e) {
+ throw new ConfigException("Error starting transient name service", e);
+ }
+ }
+
+ /**
+ * Destroy a name service instance created by a
+ * prior call to createNameService().
+ *
+ * @param ns The opaque name service object returned from a
+ * prior call to createNameService().
+ */
+ public void destroyNameService(Object ns) {
+ // The name service instance handles its own shutdown.
+ ((TransientNameService)ns).destroy();
+ }
+
+ /**
+ * Static method used by SocketFactory instances to
+ * retrieve the CORBABean or CSSBean that holds its
+ * configuration information. The String name has
+ * been passed to the SocketFactory as part of its
+ * initialization parameters.
+ *
+ * @param name The name of the bean holding the configuration
+ * information.
+ *
+ * @return The bean mapping for this SocketFactory instance.
+ */
+ public static ORBConfiguration getConfiguration(String name) {
+ return (ORBConfiguration)registry.get(name);
+ }
+
+ /**
+ * Create an ORB instance using the configured argument
+ * and property bundles.
+ *
+ * @param name The String name of the configuration GBean used to
+ * create this ORB.
+ * @param config The GBean configuration object required by the
+ * SocketFactory instance.
+ * @param args The String arguments passed to ORB.init().
+ * @param props The property bundle passed to ORB.init().
+ *
+ * @return An ORB constructed from the provided args and properties.
+ */
+ private ORB createORB(String name, ORBConfiguration config, String[] args, Properties props) {
+ try {
+ // we need to stuff this reference in the registry so that the SocketFactory can find it
+ // when it initializes.
+ registry.put(name, config);
+ return ORB.init(args, props);
+
+ } finally {
+ // remove the configuration object from the registry now that the ORB has initialized. We
+ // don't want to create a memory leak on the GBean.
+ registry.remove(name);
+ }
+ }
+
+ /**
+ * Translate a CORBABean configuration into an
+ * array of arguments used to configure the ORB
+ * instance.
+ *
+ * @param server The CORBABean we're creating an ORB instance for.
+ *
+ * @return A String{} array containing the initialization
+ * arguments.
+ * @exception ConfigException
+ */
+ private String[] translateToArgs(CORBABean server) throws ConfigException {
+ ArrayList list = new ArrayList();
+
+ TSSConfig config = server.getTssConfig();
+
+ // if the TSSConfig includes principal information, we need to add argument values
+ // for this information.
+ DefaultPrincipal principal = config.getDefaultPrincipal();
+ if (principal != null) {
+ if (principal instanceof DefaultRealmPrincipal) {
+ DefaultRealmPrincipal realmPrincipal = (DefaultRealmPrincipal) principal;
+ list.add("default-realm-principal::" + realmPrincipal.getRealm() + ":" + realmPrincipal.getDomain() + ":"
+ + realmPrincipal.getPrincipal().getClassName() + ":" + realmPrincipal.getPrincipal().getPrincipalName());
+ } else if (principal instanceof DefaultDomainPrincipal) {
+ DefaultDomainPrincipal domainPrincipal = (DefaultDomainPrincipal) principal;
+ list.add("default-domain-principal::" + domainPrincipal.getDomain() + ":"
+ + domainPrincipal.getPrincipal().getClassName() + ":" + domainPrincipal.getPrincipal().getPrincipalName());
+ } else {
+ list.add("default-principal::" + principal.getPrincipal().getClassName() + ":" + principal.getPrincipal().getPrincipalName());
+ }
+ }
+
+ // enable the connection plugin
+ enableSocketFactory(server.getURI(), list);
+
+ NameService nameService = server.getNameService();
+ // if we have a name service to enable as an initial ref, add it to the init processing.
+ if (nameService != null) {
+ list.add("-ORBInitRef");
+ list.add("NameService=" + nameService.getURI());
+ }
+
+ if (log.isDebugEnabled()) {
+ for (Iterator iter = list.iterator(); iter.hasNext();) {
+ log.debug(iter.next());
+ }
+ }
+
+ return (String[]) list.toArray(new String[list.size()]);
+ }
+
+ private Properties translateToProps(CORBABean server) throws ConfigException {
+ Properties result = new Properties();
+
+ result.put("org.omg.CORBA.ORBClass", "org.apache.yoko.orb.CORBA.ORB");
+ result.put("org.omg.CORBA.ORBSingletonClass", "org.apache.yoko.orb.CORBA.ORBSingleton");
+ result.put("org.omg.PortableInterceptor.ORBInitializerClass.org.apache.openejb.corba.transaction.TransactionInitializer", "");
+ result.put("org.omg.PortableInterceptor.ORBInitializerClass.org.apache.openejb.corba.security.SecurityInitializer", "");
+ result.put("org.omg.PortableInterceptor.ORBInitializerClass.org.apache.openejb.yoko.ORBInitializer", "");
+
+ result.put("yoko.orb.oa.endpoint", "iiop --host " + server.getHost() + " --port " + server.getPort());
+
+ if (log.isDebugEnabled()) {
+ log.debug("translateToProps(TSSConfig)");
+ for (Enumeration iter = result.keys(); iter.hasMoreElements();) {
+ String key = (String) iter.nextElement();
+ log.debug(key + " = " + result.getProperty(key));
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Translate a CSSBean configuration into the
+ * argument bundle needed to instantiate the
+ * ORB instance.
+ *
+ * @param client The CSSBean holding the configuration.
+ *
+ * @return A String array to be passed to ORB.init().
+ * @exception ConfigException
+ */
+ private String[] translateToArgs(CSSBean client) throws ConfigException {
+ ArrayList list = new ArrayList();
+
+ // enable the connection plugin
+ enableSocketFactory(client.getURI(), list);
+
+ if (log.isDebugEnabled()) {
+ for (Iterator iter = list.iterator(); iter.hasNext();) {
+ log.debug(iter.next());
+ }
+ }
+
+ return (String[]) list.toArray(new String[list.size()]);
+ }
+
+ /**
+ * Add arguments to the ORB.init() argument list
+ * required to enable the SocketFactory used for
+ * SSL support.
+ *
+ * @param uri The URI name of the configuration GBean (either a
+ * CSSBean or a CORBABean).
+ * @param args
+ */
+ private void enableSocketFactory(String uri, List args) {
+ args.add("-IIOPconnectionHelper");
+ args.add("org.apache.openejb.yoko.SocketFactory");
+ args.add("-IIOPconnectionHelperArgs");
+ args.add(uri);
+ }
+
+
+ /**
+ * Translate a CSSBean configuration into the
+ * property bundle necessary to configure the
+ * ORB instance.
+ *
+ * @param client The CSSBean holding the configuration.
+ *
+ * @return A property bundle that can be passed to ORB.init();
+ * @exception ConfigException
+ */
+ private Properties translateToProps(CSSBean client) throws ConfigException {
+ Properties result = new Properties();
+
+ result.put("org.omg.CORBA.ORBClass", "org.apache.yoko.orb.CORBA.ORB");
+ result.put("org.omg.CORBA.ORBSingletonClass", "org.apache.yoko.orb.CORBA.ORBSingleton");
+ result.put("org.omg.PortableInterceptor.ORBInitializerClass.org.apache.openejb.corba.transaction.TransactionInitializer", "");
+ result.put("org.omg.PortableInterceptor.ORBInitializerClass.org.apache.openejb.corba.security.SecurityInitializer", "");
+ result.put("org.omg.PortableInterceptor.ORBInitializerClass.org.apache.openejb.yoko.ORBInitializer", "");
+
+ if (log.isDebugEnabled()) {
+ log.debug("translateToProps(CSSConfig)");
+ for (Enumeration iter = result.keys(); iter.hasMoreElements();) {
+ String key = (String) iter.nextElement();
+ log.debug(key + " = " + result.getProperty(key));
+ }
+ }
+ return result;
+ }
+}
Propchange: incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/main/java/org/apache/openejb/yoko/ORBConfigAdapter.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/main/java/org/apache/openejb/yoko/ORBConfigAdapter.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/main/java/org/apache/openejb/yoko/ORBConfigAdapter.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/main/java/org/apache/openejb/yoko/ORBConfigAdapterGBean.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/main/java/org/apache/openejb/yoko/ORBConfigAdapterGBean.java?view=auto&rev=452600
==============================================================================
--- incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/main/java/org/apache/openejb/yoko/ORBConfigAdapterGBean.java (added)
+++ incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/main/java/org/apache/openejb/yoko/ORBConfigAdapterGBean.java Tue Oct 3 12:29:42 2006
@@ -0,0 +1,45 @@
+/**
+ * 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.yoko;
+
+import org.apache.geronimo.gbean.GBeanInfo;
+import org.apache.geronimo.gbean.GBeanInfoBuilder;
+import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
+
+/**
+ * @version $Revision$ $Date$
+ */
+public final class ORBConfigAdapterGBean extends org.apache.openejb.corba.security.config.ConfigAdapterGBean {
+
+ public static final GBeanInfo GBEAN_INFO;
+
+ public ORBConfigAdapterGBean() {
+ }
+
+ static {
+ GBeanInfoBuilder infoFactory = GBeanInfoBuilder.createStatic(ORBConfigAdapterGBean.class, "ORB Configuration Adapater", ORBConfigAdapter.class, NameFactory.ORB_CONFIG);
+ infoFactory.setConstructor(new String[]{});
+ infoFactory.addInterface(org.apache.openejb.corba.security.config.ConfigAdapter.class);
+
+ GBEAN_INFO = infoFactory.getBeanInfo();
+ }
+
+ public static GBeanInfo getGBeanInfo() {
+ return GBEAN_INFO;
+ }
+}
+
Propchange: incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/main/java/org/apache/openejb/yoko/ORBConfigAdapterGBean.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/main/java/org/apache/openejb/yoko/ORBConfigAdapterGBean.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/main/java/org/apache/openejb/yoko/ORBConfigAdapterGBean.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/main/java/org/apache/openejb/yoko/ORBInitializer.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/main/java/org/apache/openejb/yoko/ORBInitializer.java?view=auto&rev=452600
==============================================================================
--- incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/main/java/org/apache/openejb/yoko/ORBInitializer.java (added)
+++ incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/main/java/org/apache/openejb/yoko/ORBInitializer.java Tue Oct 3 12:29:42 2006
@@ -0,0 +1,82 @@
+/**
+ * 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.yoko;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.omg.CORBA.LocalObject;
+import org.omg.PortableInterceptor.ORBInitInfo;
+import org.omg.PortableInterceptor.ORBInitInfoPackage.DuplicateName;
+
+/**
+ * @version $Revision$ $Date$
+ */
+public class ORBInitializer extends LocalObject implements org.omg.PortableInterceptor.ORBInitializer {
+
+ private final Log log = LogFactory.getLog(ORBInitializer.class);
+
+ public ORBInitializer() {
+ if (log.isDebugEnabled()) log.debug("ORBInitializer.<init>");
+ }
+
+ /**
+ * Called during ORB initialization. If it is expected that initial
+ * services registered by an interceptor will be used by other
+ * interceptors, then those initial services shall be registered at
+ * this point via calls to
+ * <code>ORBInitInfo.register_initial_reference</code>.
+ *
+ * @param info provides initialization attributes and operations by
+ * which Interceptors can be registered.
+ */
+ public void pre_init(ORBInitInfo info) {
+ }
+
+ /**
+ * Called during ORB initialization. If a service must resolve initial
+ * references as part of its initialization, it can assume that all
+ * initial references will be available at this point.
+ * <p/>
+ * Calling the <code>post_init</code> operations is not the final
+ * task of ORB initialization. The final task, following the
+ * <code>post_init</code> calls, is attaching the lists of registered
+ * interceptors to the ORB. Therefore, the ORB does not contain the
+ * interceptors during calls to <code>post_init</code>. If an
+ * ORB-mediated call is made from within <code>post_init</code>, no
+ * request interceptors will be invoked on that call.
+ * Likewise, if an operation is performed which causes an IOR to be
+ * created, no IOR interceptors will be invoked.
+ *
+ * @param info provides initialization attributes and
+ * operations by which Interceptors can be registered.
+ */
+ public void post_init(ORBInitInfo info) {
+
+ try {
+ if (log.isDebugEnabled()) log.debug("Registering IOR interceptor");
+
+ try {
+ info.add_server_request_interceptor(new ServiceContextInterceptor());
+ } catch (DuplicateName dn) {
+ log.error("Error registering interceptor", dn);
+ }
+ } catch (RuntimeException re) {
+ log.error("Error registering interceptor", re);
+ throw re;
+ }
+ }
+}
Propchange: incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/main/java/org/apache/openejb/yoko/ORBInitializer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/main/java/org/apache/openejb/yoko/ORBInitializer.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/main/java/org/apache/openejb/yoko/ORBInitializer.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/main/java/org/apache/openejb/yoko/ServiceContextInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/main/java/org/apache/openejb/yoko/ServiceContextInterceptor.java?view=auto&rev=452600
==============================================================================
--- incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/main/java/org/apache/openejb/yoko/ServiceContextInterceptor.java (added)
+++ incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/main/java/org/apache/openejb/yoko/ServiceContextInterceptor.java Tue Oct 3 12:29:42 2006
@@ -0,0 +1,95 @@
+/**
+ * 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.yoko;
+
+import java.net.Socket;
+import javax.net.ssl.SSLSession;
+import javax.net.ssl.SSLSocket;
+
+import org.apache.yoko.orb.PortableInterceptor.ServerRequestInfoExt;
+import org.apache.yoko.orb.OCI.TransportInfo;
+import org.apache.yoko.orb.OCI.IIOP.TransportInfo_impl;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.omg.CORBA.LocalObject;
+import org.omg.PortableInterceptor.ServerRequestInfo;
+import org.omg.PortableInterceptor.ServerRequestInterceptor;
+
+import org.apache.openejb.corba.security.SSLSessionManager;
+
+/**
+ * A service context interceptor to help manage
+ * SSL security information for incoming connections.
+ * @version $Revision$ $Date$
+ */
+final class ServiceContextInterceptor extends LocalObject implements ServerRequestInterceptor {
+
+ private final Log log = LogFactory.getLog(ServiceContextInterceptor.class);
+
+ public ServiceContextInterceptor() {
+ if (log.isDebugEnabled()) log.debug("<init>");
+ }
+
+ public void receive_request(ServerRequestInfo ri) {
+ }
+
+ public void receive_request_service_contexts(ServerRequestInfo ri) {
+
+ if (log.isDebugEnabled()) log.debug("Looking for SSL Session");
+
+ // for an incoming request, we need to see if the request is coming in on
+ // an SSLSocket. If this is using a secure connection, then we register the
+ // request and SSLSession with the session manager.
+ ServerRequestInfoExt riExt = (ServerRequestInfoExt) ri;
+ TransportInfo_impl connection = (TransportInfo_impl)riExt.getTransportInfo();
+ if (connection != null) {
+ Socket socket = connection.socket();
+ if (socket != null && socket instanceof SSLSocket) {
+ if (log.isDebugEnabled()) log.debug("Found SSL Session");
+ SSLSocket sslSocket = (SSLSocket) socket;
+
+ SSLSessionManager.setSSLSession(ri.request_id(), sslSocket.getSession());
+ }
+ }
+ }
+
+ public void send_exception(ServerRequestInfo ri) {
+ // clean any SSL session information if we registered.
+ SSLSession old = SSLSessionManager.clearSSLSession(ri.request_id());
+ if (log.isDebugEnabled() && old != null) log.debug("Removing SSL Session for send_exception");
+ }
+
+ public void send_other(ServerRequestInfo ri) {
+ // clean any SSL session information if we registered.
+ SSLSession old = SSLSessionManager.clearSSLSession(ri.request_id());
+ if (log.isDebugEnabled() && old != null) log.debug("Removing SSL Session for send_reply");
+ }
+
+ public void send_reply(ServerRequestInfo ri) {
+ // clean any SSL session information if we registered.
+ SSLSession old = SSLSessionManager.clearSSLSession(ri.request_id());
+ if (log.isDebugEnabled() && old != null) log.debug("Removing SSL Session for send_reply");
+ }
+
+ public void destroy() {
+ if (log.isDebugEnabled()) log.debug("Destroy");
+ }
+
+ public String name() {
+ return "org.apache.openejb.yoko.ServiceContextInterceptor";
+ }
+}
Propchange: incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/main/java/org/apache/openejb/yoko/ServiceContextInterceptor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/main/java/org/apache/openejb/yoko/ServiceContextInterceptor.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/main/java/org/apache/openejb/yoko/ServiceContextInterceptor.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/main/java/org/apache/openejb/yoko/SocketFactory.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/main/java/org/apache/openejb/yoko/SocketFactory.java?view=auto&rev=452600
==============================================================================
--- incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/main/java/org/apache/openejb/yoko/SocketFactory.java (added)
+++ incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/main/java/org/apache/openejb/yoko/SocketFactory.java Tue Oct 3 12:29:42 2006
@@ -0,0 +1,440 @@
+/**
+ * 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.yoko;
+
+import java.io.IOException;
+import java.net.ConnectException;
+import java.net.InetAddress;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.net.URI;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import javax.net.ssl.SSLServerSocket;
+import javax.net.ssl.SSLServerSocketFactory;
+import javax.net.ssl.SSLSocket;
+import javax.net.ssl.SSLSocketFactory;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.omg.CORBA.COMM_FAILURE;
+import org.omg.CORBA.CompletionStatus;
+import org.omg.CORBA.ORB;
+import org.omg.CSIIOP.Confidentiality;
+import org.omg.CSIIOP.EstablishTrustInClient;
+import org.omg.CSIIOP.EstablishTrustInTarget;
+import org.omg.CSIIOP.NoProtection;
+import org.omg.CSIIOP.TAG_CSI_SEC_MECH_LIST;
+import org.omg.IOP.TaggedComponent;
+import org.omg.CORBA.DynAnyPackage.Invalid;
+import org.omg.CORBA.Policy;
+import org.omg.IOP.IOR;
+
+import org.apache.openejb.corba.ORBConfiguration;
+import org.apache.openejb.corba.security.config.ConfigUtil;
+import org.apache.openejb.corba.security.config.tss.TSSCompoundSecMechListConfig;
+import org.apache.openejb.corba.security.config.tss.TSSSSLTransportConfig;
+import org.apache.openejb.corba.security.config.tss.TSSTransportMechConfig;
+import org.apache.openejb.corba.security.config.css.CSSConfig;
+import org.apache.openejb.corba.security.config.tss.TSSConfig;
+import org.apache.openejb.corba.security.config.ssl.SSLConfig;
+import org.apache.openejb.corba.security.config.ssl.SSLCipherSuiteDatabase;
+import org.apache.openejb.corba.util.Util;
+
+import org.apache.geronimo.gbean.AbstractName;
+import org.apache.geronimo.kernel.Kernel;
+import org.apache.geronimo.kernel.KernelRegistry;
+
+import org.apache.yoko.orb.OCI.IIOP.ConnectionHelper;
+import org.apache.yoko.orb.OCI.ProfileInfo;
+import org.apache.yoko.orb.OCI.ProfileInfoHolder;
+
+
+/**
+ * Socket factory instance used to interface openejb2
+ * with the Yoko ORB. Also enables the ORB for
+ * SSL-type connections.
+ * @version $Revision$ $Date$
+ */
+public class SocketFactory implements ConnectionHelper {
+
+ private final static Log log = LogFactory.getLog(SocketFactory.class);
+
+ // The initialized SSLSocketFactory obtained from the Geronimo KeystoreManager.
+ private SSLSocketFactory socketFactory = null;
+ // The initialized SSLServerSocketFactory obtained from the Geronimo KeystoreManager.
+ private SSLServerSocketFactory serverSocketFactory = null;
+ // the ORB consumer that defines our configuration
+ private ORBConfiguration config;
+ // The initialized SSLConfig we use to retrieve the SSL socket factories.
+ private SSLConfig sslConfig = null;
+ // The set of cypher suites we use with the SSL connection.
+ private String[] cipherSuites;
+ // indicates whether client authentication is supported by this transport.
+ private boolean clientAuthSupported;
+ // indicates whether client authentication is required by this transport.
+ private boolean clientAuthRequired;
+ // supports and requires values used to retrieve the cipher suites.
+ int supports = NoProtection.value;
+ int requires = NoProtection.value;
+ // the orb we're attached to
+ private ORB orb;
+
+ public SocketFactory() {
+ }
+
+ /**
+ * Initialize the socket factory instance.
+ *
+ * @param orb The hosting ORB.
+ * @param configName The initialization parameter passed to the socket factor.
+ * This contains the abstract name of our configurator,
+ * which we retrieve from a registry.
+ */
+ public void init(ORB orb, String configName) {
+ this.orb = orb;
+ clientAuthSupported = false;
+ clientAuthRequired = false;
+ // retrieve the configuration from the config adapter registry.
+ config = (ORBConfiguration)ORBConfigAdapter.getConfiguration(configName);
+ if (config == null) {
+ throw new RuntimeException("Unable to resolve ORB configuration " + configName);
+ }
+ // get the configuration from the hosting bean and decode what needs to be implemented.
+ sslConfig = config.getSslConfig();
+ TSSConfig tssConfig = config.getTssConfig();
+ TSSTransportMechConfig transportMech = tssConfig.getTransport_mech();
+ // if we have a transport mech defined, this is the configuration for any listeners we end up
+ // creating.
+ if (transportMech != null) {
+ if (transportMech instanceof TSSSSLTransportConfig) {
+ TSSSSLTransportConfig transportConfig = (TSSSSLTransportConfig) transportMech;
+ supports = transportConfig.getSupports();
+ requires = transportConfig.getRequires();
+ }
+ }
+
+ // now set our listener creation flags based on the supports and requires values from the
+ // TSS config.
+ if ((supports & EstablishTrustInClient.value) != 0) {
+ clientAuthSupported = true;
+
+ if ((requires & EstablishTrustInClient.value) != 0) {
+ clientAuthRequired = true;
+ }
+ }
+
+ if ((supports & EstablishTrustInTarget.value) != 0) {
+ clientAuthSupported = true;
+
+ if ((requires & EstablishTrustInTarget.value) != 0) {
+ clientAuthRequired = true;
+ }
+ }
+
+ if (log.isDebugEnabled()) {
+ log.debug("Creating Yoko SocketFactor for GBean " + configName);
+ log.debug(" SUPPORTS: " + ConfigUtil.flags(supports));
+ log.debug(" REQUIRES: " + ConfigUtil.flags(requires));
+ }
+ }
+
+ /**
+ * Create a client socket of the appropriate
+ * type using the provided IOR and Policy information.
+ *
+ * @param ior The target IOR of the connection.
+ * @param policies Policies in effect for this ORB.
+ * @param address The target address of the connection.
+ * @param port The connection port.
+ *
+ * @return A Socket (either plain or SSL) configured for connection
+ * to the target.
+ * @exception IOException
+ * @exception ConnectException
+ */
+ public Socket createSocket(IOR ior, Policy[] policies, InetAddress address, int port) throws IOException, ConnectException {
+ ProfileInfoHolder holder = new ProfileInfoHolder();
+ // we need to extract the profile information from the IOR to see if this connection has
+ // any transport-level security defined.
+ if (org.apache.yoko.orb.OCI.IIOP.Util.extractProfileInfo(ior, holder)) {
+ ProfileInfo profileInfo = holder.value;
+ for (int i = 0; i < profileInfo.components.length; i++) {
+ // we're lookoing for the security mechanism items.
+ if (profileInfo.components[i].tag == TAG_CSI_SEC_MECH_LIST.value) {
+ try {
+ // decode and pull the transport information.
+ TSSCompoundSecMechListConfig config = TSSCompoundSecMechListConfig.decodeIOR(Util.getCodec(), profileInfo.components[i]);
+ for (int j = 0; j < config.size(); j++) {
+ TSSTransportMechConfig transport_mech = config.mechAt(j).getTransport_mech();
+ if (transport_mech instanceof TSSSSLTransportConfig) {
+ TSSSSLTransportConfig transportConfig = (TSSSSLTransportConfig) transport_mech;
+
+ int supports = transportConfig.getSupports();
+ int requires = transportConfig.getRequires();
+
+ if (log.isDebugEnabled()) {
+
+ log.debug("IOR from target " + address.getHostName() + ":" + port);
+ log.debug(" SUPPORTS: " + ConfigUtil.flags(supports));
+ log.debug(" REQUIRES: " + ConfigUtil.flags(requires));
+ }
+
+ // if we don't require any TLS, then just create a plain socket.
+ if ((NoProtection.value & requires) == NoProtection.value) {
+ break;
+ }
+ // we need SSL, so create an SSLSocket for this connection.
+ return createSSLSocket(address.getHostName(), port, supports, requires);
+ }
+ }
+ } catch (Exception e) {
+ // do nothing
+ }
+ }
+ }
+ }
+
+ // if security is not required, just create a plain Socket.
+ if (log.isDebugEnabled()) log.debug("Created plain endpoint to " + address.getHostName() + ":" + port);
+ return new Socket(address, port);
+ }
+
+ /**
+ * Create a loopback connection to the hosting
+ * ORB.
+ *
+ * @param address The address information for the server.
+ * @param port The target port.
+ *
+ * @return An appropriately configured socket based on the
+ * listener characteristics.
+ * @exception IOException
+ * @exception ConnectException
+ */
+ public Socket createSelfConnection(InetAddress address, int port) throws IOException, ConnectException {
+ // the requires information tells us whether we created a plain or SSL listener. We need to create one
+ // of the matching type.
+
+ if ((NoProtection.value & requires) == NoProtection.value) {
+ if (log.isDebugEnabled()) log.debug("Created plain endpoint to " + address.getHostName() + ":" + port);
+ return new Socket(address, port);
+ }
+ else {
+ return createSSLSocket(address.getHostName(), port, supports, requires);
+ }
+ }
+
+ /**
+ * Create a server socket listening on the given port.
+ *
+ * @param port The target listening port.
+ * @param backlog The desired backlog value.
+ *
+ * @return An appropriate server socket for this connection.
+ * @exception IOException
+ * @exception ConnectException
+ */
+ public ServerSocket createServerSocket(int port, int backlog) throws IOException, ConnectException {
+ // if no protection is required, just create a plain socket.
+ if ((NoProtection.value & requires) == NoProtection.value) {
+ if (log.isDebugEnabled()) log.debug("Created plain server socket for port " + port);
+ return new ServerSocket(port, backlog);
+ }
+ else {
+ // SSL is required. Create one from the SSLServerFactory retrieved from the config. This will
+ // require additional QOS configuration after creation.
+ SSLServerSocket serverSocket = (SSLServerSocket)getServerSocketFactory().createServerSocket(port, backlog);
+ configureServerSocket(serverSocket);
+ return serverSocket;
+ }
+ }
+
+ /**
+ * Create a server socket for this connection.
+ *
+ * @param port The target listener port.
+ * @param backlog The requested backlog value for the connection.
+ * @param address The host address information we're publishing under.
+ *
+ * @return An appropriately configured ServerSocket for this
+ * connection.
+ * @exception IOException
+ * @exception ConnectException
+ */
+ public ServerSocket createServerSocket(int port, int backlog, InetAddress address) throws IOException, ConnectException {
+ // if no protection is required, just create a plain socket.
+ System.out.println("Creating a server socket on port " + port);
+ if ((NoProtection.value & requires) == NoProtection.value) {
+ if (log.isDebugEnabled()) log.debug("Created plain server socket for port " + port);
+ return new ServerSocket(port, backlog, address);
+ }
+ else {
+ // SSL is required. Create one from the SSLServerFactory retrieved from the config. This will
+ // require additional QOS configuration after creation.
+ SSLServerSocket serverSocket = (SSLServerSocket)getServerSocketFactory().createServerSocket(port, backlog, address);
+ configureServerSocket(serverSocket);
+ return serverSocket;
+ }
+ }
+
+ /**
+ * On-demand creation of an SSL socket factory, using the provided
+ * Geronimo SSLConfig information.
+ *
+ * @return The SSLSocketFactory this connection should be using to create
+ * secure connections.
+ */
+ private SSLSocketFactory getSocketFactory() throws IOException {
+ // first use?
+ if (socketFactory == null) {
+ // the SSLConfig is optional, so if it's not there, use the default SSLSocketFactory.
+ if (sslConfig == null) {
+ socketFactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
+ }
+ else {
+ // ask the SSLConfig bean to create a factory for us.
+ try {
+ socketFactory = (SSLSocketFactory)sslConfig.createSSLFactory(Thread.currentThread().getContextClassLoader());
+ } catch (Exception e) {
+ throw new IOException("Unable to create client SSL socket factory: " + e.getMessage());
+ }
+ }
+ }
+ return socketFactory;
+ }
+
+ /**
+ * On-demand creation of an SSL server socket factory, using the provided
+ * Geronimo SSLConfig information.
+ *
+ * @return The SSLServerSocketFactory this connection should be using to create
+ * secure connections.
+ */
+ private SSLServerSocketFactory getServerSocketFactory() throws IOException {
+ // first use?
+ if (serverSocketFactory == null) {
+ // the SSLConfig is optional, so if it's not there, use the default SSLSocketFactory.
+ if (sslConfig == null) {
+ serverSocketFactory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
+ }
+ else {
+ try {
+ serverSocketFactory = (SSLServerSocketFactory)sslConfig.createSSLServerFactory(Thread.currentThread().getContextClassLoader());
+ } catch (Exception e) {
+ throw new IOException("Unable to create server SSL socket factory: " + e.getMessage());
+ }
+ }
+ // we have a socket factory....now get our cipher suite set based on our requirements and what's
+ // available from the factory.
+ if (cipherSuites == null) {
+ cipherSuites = SSLCipherSuiteDatabase.getCipherSuites(requires, supports, serverSocketFactory.getSupportedCipherSuites());
+ }
+ }
+ return serverSocketFactory;
+ }
+
+
+ /**
+ * Set the server socket configuration to our required
+ * QOS values.
+ *
+ * @param serverSocket
+ * The newly created SSLServerSocket.
+ *
+ * @exception IOException
+ * @exception ConnectException
+ */
+ private void configureServerSocket(SSLServerSocket serverSocket) throws IOException, ConnectException {
+ // set the authentication value and cipher suite info.
+ serverSocket.setEnabledCipherSuites(cipherSuites);
+ serverSocket.setWantClientAuth(clientAuthSupported);
+ serverSocket.setNeedClientAuth(clientAuthRequired);
+ serverSocket.setSoTimeout(60 * 1000);
+
+ if (log.isDebugEnabled()) {
+ log.debug("Created SSL server socket on port " + serverSocket.getLocalPort());
+ log.debug(" client authentication " + (clientAuthSupported ? "SUPPORTED" : "UNSUPPORTED"));
+ log.debug(" client authentication " + (clientAuthRequired ? "REQUIRED" : "OPTIONAL"));
+ log.debug(" cipher suites:");
+
+ for (int i = 0; i < cipherSuites.length; i++) {
+ log.debug(" " + cipherSuites[i]);
+ }
+ }
+ }
+
+ /**
+ * Create an SSL client socket using the IOR-encoded
+ * security characteristics.
+ *
+ * @param host The target host name.
+ * @param port The target connection port.
+ * @param supports The connections supports information.
+ * @param requires The connection requires information.
+ *
+ * @return An appropriately configured client SSLSocket.
+ * @exception IOException
+ * @exception ConnectException
+ */
+ private Socket createSSLSocket(String host, int port, int supports, int requires) throws IOException, ConnectException {
+ SSLSocketFactory factory = getSocketFactory();
+ SSLSocket socket = (SSLSocket) factory.createSocket(host, port);
+
+ socket.setSoTimeout(60 * 1000);
+
+ // figure out the supports and requires information from the flag values.
+ boolean authSupported = false;
+ boolean authRequired = false;
+
+ if ((supports & EstablishTrustInClient.value) != 0) {
+ authSupported = true;
+
+ if ((requires & EstablishTrustInClient.value) != 0) {
+ authRequired = true;
+ }
+ }
+
+ if ((supports & EstablishTrustInTarget.value) != 0) {
+ authSupported = true;
+
+ if ((requires & EstablishTrustInTarget.value) != 0) {
+ authSupported = true;
+ }
+ }
+
+ // get a set of cipher suites appropriate for this connections requirements.
+ // We request this for each connection, since the outgoing IOR's requirements may be different from
+ // our server listener requirements.
+ String[] iorSuites = SSLCipherSuiteDatabase.getCipherSuites(requires, supports, serverSocketFactory.getSupportedCipherSuites());
+ socket.setEnabledCipherSuites(iorSuites);
+ socket.setWantClientAuth(authSupported);
+ socket.setNeedClientAuth(authRequired);
+
+ if (log.isDebugEnabled()) {
+ log.debug("Created SSL socket to " + host + ":" + port);
+ log.debug(" client authentication " + (authSupported ? "SUPPORTED" : "UNSUPPORTED"));
+ log.debug(" client authentication " + (authRequired ? "REQUIRED" : "OPTIONAL"));
+ log.debug(" cipher suites:");
+
+ for (int i = 0; i < iorSuites.length; i++) {
+ log.debug(" " + iorSuites[i]);
+ }
+ }
+ return socket;
+ }
+}
Propchange: incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/main/java/org/apache/openejb/yoko/SocketFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/main/java/org/apache/openejb/yoko/SocketFactory.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/main/java/org/apache/openejb/yoko/SocketFactory.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/test/java/org/apache/openejb/corba/security/config/tss/TSSConfigEditorTest.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/test/java/org/apache/openejb/corba/security/config/tss/TSSConfigEditorTest.java?view=auto&rev=452600
==============================================================================
--- incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/test/java/org/apache/openejb/corba/security/config/tss/TSSConfigEditorTest.java (added)
+++ incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/test/java/org/apache/openejb/corba/security/config/tss/TSSConfigEditorTest.java Tue Oct 3 12:29:42 2006
@@ -0,0 +1,102 @@
+/**
+ * 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.corba.security.config.tss;
+
+import java.io.ByteArrayInputStream;
+import java.util.ArrayList;
+import java.util.Properties;
+
+import junit.framework.TestCase;
+import org.apache.xmlbeans.XmlCursor;
+import org.apache.xmlbeans.XmlException;
+import org.apache.xmlbeans.XmlObject;
+
+import org.apache.geronimo.common.DeploymentException;
+
+import org.apache.geronimo.gbean.AbstractName;
+import org.apache.geronimo.kernel.Jsr77Naming;
+import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
+import org.apache.geronimo.kernel.Naming;
+import org.apache.geronimo.kernel.repository.Artifact;
+
+import org.omg.CORBA.SystemException;
+import org.apache.openejb.corba.CORBABean;
+import org.apache.openejb.corba.security.config.ConfigAdapter;
+
+
+/**
+ * @version $Revision$ $Date$
+ */
+public class TSSConfigEditorTest extends TestCase {
+
+ private XmlObject getXmlObject(String xmlString) throws XmlException {
+ XmlObject xmlObject = XmlObject.Factory.parse(xmlString);
+ XmlCursor xmlCursor = xmlObject.newCursor();
+ try {
+ xmlCursor.toFirstChild();
+ return xmlCursor.getObject();
+ } finally {
+ xmlCursor.dispose();
+ }
+ }
+
+ private static final String TEST_XML4 = " <tss:tss xmlns:tss=\"http://openejb.apache.org/xml/ns/corba-tss-config-2.1\" xmlns:sec=\"http://geronimo.apache.org/xml/ns/security-1.2\">\n" +
+ " <tss:default-principal>\n" +
+ " <sec:principal class=\"org.apache.geronimo.security.realm.providers.GeronimoUserPrincipal\" name=\"guest\"/>\n" +
+ " </tss:default-principal>\n" +
+ " <tss:SSL port=\"6685\" hostname=\"localhost\">\n" +
+ " <tss:supports>Integrity Confidentiality EstablishTrustInTarget EstablishTrustInClient</tss:supports>\n" +
+ " <tss:requires>Integrity Confidentiality EstablishTrustInClient</tss:requires>\n" +
+ " </tss:SSL>\n" +
+ " <tss:compoundSecMechTypeList>\n" +
+ " <tss:compoundSecMech>\n" +
+ " <tss:GSSUP targetName=\"geronimo-properties-realm\"/>\n" +
+ " <tss:sasMech>\n" +
+ " <tss:identityTokenTypes><tss:ITTAnonymous/><tss:ITTPrincipalNameGSSUP principal-class=\"org.apache.geronimo.security.realm.providers.GeronimoUserPrincipal\" domain=\"foo\"/><tss:ITTDistinguishedName domain=\"foo\"/><tss:ITTX509CertChain domain=\"foo\"/></tss:identityTokenTypes>\n" +
+ " </tss:sasMech>\n" +
+ " </tss:compoundSecMech>\n" +
+ " </tss:compoundSecMechTypeList>\n" +
+ " </tss:tss>";
+
+ public void testCORBABean() throws Exception {
+ ClassLoader classLoader = getClass().getClassLoader();
+ Naming naming = new Jsr77Naming();
+ AbstractName testName = naming.createRootName(new Artifact("test", "stuff", "", "ear"), "gbean", NameFactory.CORBA_SERVICE) ;
+ ConfigAdapter configAdapter = new org.apache.openejb.yoko.ORBConfigAdapter();
+ CORBABean corbaBean = new CORBABean(testName, configAdapter, "localhost", 8050, classLoader, null, null, null);
+ XmlObject xmlObject = getXmlObject(TEST_XML4);
+ TSSConfigEditor editor = new TSSConfigEditor();
+ Object o = editor.getValue(xmlObject, null, classLoader);
+ TSSConfig tss = (TSSConfig) o;
+
+ corbaBean.setTssConfig(tss);
+
+ try {
+ corbaBean.doStart();
+ } catch(SystemException se) {
+ se.printStackTrace();
+ fail(se.getCause().getMessage());
+ } finally {
+ try {
+ corbaBean.doStop();
+ } catch (Throwable e) {
+
+ }
+ }
+ }
+}
+
Propchange: incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/test/java/org/apache/openejb/corba/security/config/tss/TSSConfigEditorTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/test/java/org/apache/openejb/corba/security/config/tss/TSSConfigEditorTest.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/test/java/org/apache/openejb/corba/security/config/tss/TSSConfigEditorTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/test/java/org/apache/openejb/yoko/NameServiceTest.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/test/java/org/apache/openejb/yoko/NameServiceTest.java?view=auto&rev=452600
==============================================================================
--- incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/test/java/org/apache/openejb/yoko/NameServiceTest.java (added)
+++ incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/test/java/org/apache/openejb/yoko/NameServiceTest.java Tue Oct 3 12:29:42 2006
@@ -0,0 +1,88 @@
+/**
+ * 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.yoko;
+
+import java.util.Properties;
+import java.io.File;
+
+import org.apache.openejb.corba.NameService;
+
+import junit.framework.TestCase;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.geronimo.system.serverinfo.ServerInfo;
+import org.apache.geronimo.system.serverinfo.BasicServerInfo;
+import org.omg.CORBA.ORB;
+import org.omg.CosNaming.NameComponent;
+import org.omg.CosNaming.NamingContextExt;
+import org.omg.CosNaming.NamingContextExtHelper;
+
+/**
+ * @version $Revision$ $Date$
+ */
+public class NameServiceTest extends TestCase {
+ private static final Log log = LogFactory.getLog(NameServiceTest.class);
+ private ORB orb;
+ private NameService nameService;
+
+ protected void setUp() throws Exception {
+ // before we do anything make sure the sun orb is present
+ try {
+ getClass().getClassLoader().loadClass("org.apache.yoko.orb.CosNaming.tnaming.TransientNameService");
+ } catch (ClassNotFoundException e) {
+ log.info("Yoko orb is not present in this vm, so this test can't run");
+ return;
+ }
+
+ String tmpDir = System.getProperty("java.io.tmpdir");
+ ServerInfo serverInfo = new BasicServerInfo(tmpDir);
+
+ ORBConfigAdapter adapter = new ORBConfigAdapter();
+ // make sure all system properties are initialized.
+ adapter.doStart();
+ nameService = new NameService(serverInfo, adapter, "localhost", 8050);
+ nameService.doStart();
+
+ // create the ORB
+ Properties properties = new Properties();
+ String[] initArgs = { "-ORBInitRef", "NameService=" + nameService.getURI() };
+ orb = ORB.init(initArgs, properties);
+ }
+
+ protected void tearDown() throws Exception {
+ if (nameService == null) {
+ return;
+ }
+ orb.destroy();
+ nameService.doStop();
+ }
+
+ public void testOrb() throws Exception {
+ if (nameService == null) {
+ return;
+ }
+
+ NamingContextExt ctx = NamingContextExtHelper.narrow(orb.resolve_initial_references("NameService"));
+ NamingContextExt rootNamingContext = ctx;
+ NameComponent name[] = ctx.to_name("foo/bar/baz");
+ for (int i = 0; i < name.length; i++) {
+ NameComponent nameComponent = name[i];
+ ctx = NamingContextExtHelper.narrow(ctx.bind_new_context(new NameComponent[] {nameComponent}));
+ }
+ ctx.rebind(ctx.to_name("plan"), rootNamingContext);
+ }
+}
Propchange: incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/test/java/org/apache/openejb/yoko/NameServiceTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/test/java/org/apache/openejb/yoko/NameServiceTest.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: incubator/openejb/trunk/openejb2/modules/openejb-yoko/src/test/java/org/apache/openejb/yoko/NameServiceTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: incubator/openejb/trunk/openejb2/modules/pom.xml
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb2/modules/pom.xml?view=diff&rev=452600&r1=452599&r2=452600
==============================================================================
--- incubator/openejb/trunk/openejb2/modules/pom.xml (original)
+++ incubator/openejb/trunk/openejb2/modules/pom.xml Tue Oct 3 12:29:42 2006
@@ -11,15 +11,30 @@
<version>2.2-incubating-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
-
+
<artifactId>modules</artifactId>
<name>OpenEJB :: Modules</name>
<packaging>pom</packaging>
-
+
<modules>
<module>openejb-pkgen-builder</module>
<module>openejb-core</module>
<module>openejb-builder</module>
+ <module>openejb-yoko</module>
</modules>
+
+ <profiles>
+ <profile>
+ <id>sunorb</id>
+ <activation>
+ <property>
+ <name>sunorb</name>
+ </property>
+ </activation>
+ <modules>
+ <module>openejb-sunorb</module>
+ </modules>
+ </profile>
+ </profiles>
</project>
Modified: incubator/openejb/trunk/openejb2/pom.xml
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb2/pom.xml?view=diff&rev=452600&r1=452599&r2=452600
==============================================================================
--- incubator/openejb/trunk/openejb2/pom.xml (original)
+++ incubator/openejb/trunk/openejb2/pom.xml Tue Oct 3 12:29:42 2006
@@ -9,9 +9,7 @@
<groupId>org.apache.openejb</groupId>
<artifactId>openejb</artifactId>
<packaging>pom</packaging>
-
<version>2.2-incubating-SNAPSHOT</version>
-
<inceptionYear>1999</inceptionYear>
<description>OpenEJB EJB Container</description>
<url>http://incubator.apache.org/projects/openejb</url>
@@ -62,6 +60,7 @@
<tranqlVendorsVersion>1.1</tranqlVendorsVersion>
<tranqlVersion>1.4-SNAPSHOT</tranqlVersion>
<xmlbeansVersion>2.0.0</xmlbeansVersion>
+ <yokoVersion>1.0-incubating-M1-SNAPSHOT</yokoVersion>
</properties>
<organization>
@@ -659,6 +658,18 @@
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.yoko</groupId>
+ <artifactId>yoko-core</artifactId>
+ <version>${yokoVersion}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.yoko</groupId>
+ <artifactId>yoko-spec-corba</artifactId>
+ <version>${yokoVersion}</version>
+ </dependency>
+
</dependencies>
</dependencyManagement>
@@ -673,7 +684,6 @@
<build>
<defaultGoal>install</defaultGoal>
-
<pluginManagement>
<plugins>
<plugin>