commons-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From jcar...@apache.org
Subject svn commit: r965009 - in /commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy/provider/remoting: JaxRpcProvider.java RmiProvider.java SessionBeanProvider.java package.html
Date Sat, 17 Jul 2010 04:23:38 GMT
Author: jcarman
Date: Sat Jul 17 04:23:37 2010
New Revision: 965009

URL: http://svn.apache.org/viewvc?rev=965009&view=rev
Log:
All tests pass (with some commented out to get a clean compile)

Added:
    commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy/provider/remoting/JaxRpcProvider.java
    commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy/provider/remoting/RmiProvider.java
    commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy/provider/remoting/SessionBeanProvider.java
    commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy/provider/remoting/package.html

Added: commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy/provider/remoting/JaxRpcProvider.java
URL: http://svn.apache.org/viewvc/commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy/provider/remoting/JaxRpcProvider.java?rev=965009&view=auto
==============================================================================
--- commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy/provider/remoting/JaxRpcProvider.java
(added)
+++ commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy/provider/remoting/JaxRpcProvider.java
Sat Jul 17 04:23:37 2010
@@ -0,0 +1,171 @@
+/*
+ * 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.commons.proxy.provider.remoting;
+
+import org.apache.commons.proxy.ObjectProvider;
+import org.apache.commons.proxy.exception.ObjectProviderException;
+
+import javax.xml.namespace.QName;
+import javax.xml.rpc.Service;
+import javax.xml.rpc.ServiceException;
+import javax.xml.rpc.ServiceFactory;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+/**
+ * Returns a proxy for a JAX-RPC-based service.
+ * <p/>
+ * <p>
+ * <b>Dependencies</b>:
+ * <ul>
+ * <li>A JAX-RPC implementation</li>
+ * </ul>
+ * </p>
+ *
+ * @author James Carman
+ * @since 1.0
+ */
+public class JaxRpcProvider<T> implements ObjectProvider<T>
+{
+//**********************************************************************************************************************
+// Fields
+//**********************************************************************************************************************
+
+    private Class<T> serviceInterface;
+    private String wsdlUrl;
+    private String serviceNamespaceUri;
+    private String serviceLocalPart;
+    private String servicePrefix;
+    private String portNamespaceUri;
+    private String portLocalPart;
+    private String portPrefix;
+
+//**********************************************************************************************************************
+// Constructors
+//**********************************************************************************************************************
+
+    public JaxRpcProvider()
+    {
+    }
+
+    public JaxRpcProvider( Class<T> serviceInterface )
+    {
+        this.serviceInterface = serviceInterface;
+    }
+
+//**********************************************************************************************************************
+// ObjectProvider Implementation
+//**********************************************************************************************************************
+
+    public T getObject()
+    {
+        try
+        {
+            final Service service = ( wsdlUrl == null ?
+                    ServiceFactory.newInstance().createService(getServiceQName()) : ServiceFactory
+                    .newInstance().createService(new URL(wsdlUrl), getServiceQName()) );
+            final QName portQName = getPortQName();
+            return serviceInterface.cast(portQName == null ? service.getPort(serviceInterface)
:
+                    service.getPort(portQName, serviceInterface));
+        }
+        catch( ServiceException e )
+        {
+            throw new ObjectProviderException("Unable to create JAX-RPC service proxy.",
e);
+        }
+        catch( MalformedURLException e )
+        {
+            throw new ObjectProviderException("Invalid URL given.", e);
+        }
+    }
+
+//**********************************************************************************************************************
+// Getter/Setter Methods
+//**********************************************************************************************************************
+
+    public void setPortLocalPart( String portLocalPart )
+    {
+        this.portLocalPart = portLocalPart;
+    }
+
+    public void setPortNamespaceUri( String portNamespaceUri )
+    {
+        this.portNamespaceUri = portNamespaceUri;
+    }
+
+    public void setPortPrefix( String portPrefix )
+    {
+        this.portPrefix = portPrefix;
+    }
+
+    public void setServiceInterface( Class<T> serviceInterface )
+    {
+        this.serviceInterface = serviceInterface;
+    }
+
+    public void setServiceLocalPart( String serviceLocalPart )
+    {
+        this.serviceLocalPart = serviceLocalPart;
+    }
+
+    public void setServiceNamespaceUri( String serviceNamespaceUri )
+    {
+        this.serviceNamespaceUri = serviceNamespaceUri;
+    }
+
+    public void setServicePrefix( String servicePrefix )
+    {
+        this.servicePrefix = servicePrefix;
+    }
+
+    public void setWsdlUrl( String wsdlUrl )
+    {
+        this.wsdlUrl = wsdlUrl;
+    }
+
+//**********************************************************************************************************************
+// Other Methods
+//**********************************************************************************************************************
+
+    private QName getPortQName()
+    {
+        return getQName(portNamespaceUri, portLocalPart, portPrefix);
+    }
+
+    private QName getQName( String namespaceUri, String localPart, String prefix )
+    {
+        if( namespaceUri != null && localPart != null && prefix != null )
+        {
+            return new QName(namespaceUri, localPart, prefix);
+        }
+        else if( namespaceUri != null && localPart != null )
+        {
+            return new QName(namespaceUri, localPart);
+        }
+        else if( localPart != null )
+        {
+            return new QName(localPart);
+        }
+        return null;
+    }
+
+    private QName getServiceQName()
+    {
+        return getQName(serviceNamespaceUri, serviceLocalPart, servicePrefix);
+    }
+}
+

Added: commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy/provider/remoting/RmiProvider.java
URL: http://svn.apache.org/viewvc/commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy/provider/remoting/RmiProvider.java?rev=965009&view=auto
==============================================================================
--- commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy/provider/remoting/RmiProvider.java
(added)
+++ commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy/provider/remoting/RmiProvider.java
Sat Jul 17 04:23:37 2010
@@ -0,0 +1,152 @@
+/*
+ * 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.commons.proxy.provider.remoting;
+
+import org.apache.commons.proxy.ObjectProvider;
+import org.apache.commons.proxy.exception.ObjectProviderException;
+
+import java.rmi.NotBoundException;
+import java.rmi.RemoteException;
+import java.rmi.registry.LocateRegistry;
+import java.rmi.registry.Registry;
+import java.rmi.server.RMIClientSocketFactory;
+
+/**
+ * Provides an object by looking it up in an RMI registry.
+ *
+ * @author James Carman
+ * @since 1.0
+ */
+public class RmiProvider<T> implements ObjectProvider<T>
+{
+//**********************************************************************************************************************
+// Fields
+//**********************************************************************************************************************
+
+    private String host = "localhost";
+    private int port = Registry.REGISTRY_PORT;
+    private RMIClientSocketFactory clientSocketFactory;
+    private String name;
+
+//**********************************************************************************************************************
+// Constructors
+//**********************************************************************************************************************
+
+    public RmiProvider()
+    {
+    }
+
+    public RmiProvider( String name )
+    {
+        setName(name);
+    }
+
+    public RmiProvider( String host, String name )
+    {
+        setHost(host);
+        setName(name);
+    }
+
+    public RmiProvider( String host, int port, String name )
+    {
+        setHost(host);
+        setName(name);
+        setPort(port);
+    }
+
+    public RmiProvider( String host, int port, RMIClientSocketFactory clientSocketFactory,
String name )
+    {
+        setHost(host);
+        setPort(port);
+        setClientSocketFactory(clientSocketFactory);
+        setName(name);
+    }
+
+//**********************************************************************************************************************
+// ObjectProvider Implementation
+//**********************************************************************************************************************
+
+    @SuppressWarnings("unchecked")
+    public T getObject()
+    {
+        Registry reg;
+        try
+        {
+            reg = getRegistry();
+            return (T)reg.lookup(name);
+        }
+        catch( NotBoundException e )
+        {
+            throw new ObjectProviderException("Name " + name + " not found in registry at
" + host + ":" + port + ".",
+                    e);
+        }
+        catch( RemoteException e )
+        {
+            throw new ObjectProviderException(
+                    "Unable to lookup service named " + name + " in registry at " + host
+ ":" + port + ".", e);
+        }
+    }
+
+//**********************************************************************************************************************
+// Getter/Setter Methods
+//**********************************************************************************************************************
+
+    public void setClientSocketFactory( RMIClientSocketFactory clientSocketFactory )
+    {
+        this.clientSocketFactory = clientSocketFactory;
+    }
+
+    public void setHost( String host )
+    {
+        this.host = host;
+    }
+
+    public void setName( String name )
+    {
+        this.name = name;
+    }
+
+    public void setPort( int port )
+    {
+        this.port = port;
+    }
+
+//**********************************************************************************************************************
+// Other Methods
+//**********************************************************************************************************************
+
+    private Registry getRegistry()
+    {
+        try
+        {
+            if( clientSocketFactory != null )
+            {
+                return LocateRegistry.getRegistry(host, port, clientSocketFactory);
+            }
+            else
+            {
+                return LocateRegistry.getRegistry(host, port);
+            }
+        }
+        catch( RemoteException e )
+        {
+            throw new ObjectProviderException("Unable to locate registry at " + host + ":"
+ port + ".", e);
+        }
+    }
+}
+

Added: commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy/provider/remoting/SessionBeanProvider.java
URL: http://svn.apache.org/viewvc/commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy/provider/remoting/SessionBeanProvider.java?rev=965009&view=auto
==============================================================================
--- commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy/provider/remoting/SessionBeanProvider.java
(added)
+++ commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy/provider/remoting/SessionBeanProvider.java
Sat Jul 17 04:23:37 2010
@@ -0,0 +1,103 @@
+/*
+ * 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.commons.proxy.provider.remoting;
+
+import org.apache.commons.proxy.ObjectProvider;
+import org.apache.commons.proxy.ProxyUtils;
+import org.apache.commons.proxy.exception.ObjectProviderException;
+
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import javax.rmi.PortableRemoteObject;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.Properties;
+
+/**
+ * Provides a reference to a session bean by looking up the home object and calling (via
reflection) the no-argument
+ * create() method.  This will work for both local and remote session beans.
+ *
+ * @author James Carman
+ * @since 1.0
+ */
+public class SessionBeanProvider<T> implements ObjectProvider<T>
+{
+//**********************************************************************************************************************
+// Fields
+//**********************************************************************************************************************
+
+    private final String jndiName;
+    private final Class homeInterface;
+    private final Properties properties;
+
+//**********************************************************************************************************************
+// Constructors
+//**********************************************************************************************************************
+
+    public SessionBeanProvider( String jndiName, Class homeInterface )
+    {
+        this.jndiName = jndiName;
+        this.homeInterface = homeInterface;
+        this.properties = null;
+    }
+
+    public SessionBeanProvider( String jndiName, Class homeInterface, Properties properties
)
+    {
+        this.jndiName = jndiName;
+        this.homeInterface = homeInterface;
+        this.properties = properties;
+    }
+
+//**********************************************************************************************************************
+// ObjectProvider Implementation
+//**********************************************************************************************************************
+
+    @SuppressWarnings("unchecked")
+    public T getObject()
+    {
+        try
+        {
+            final InitialContext initialContext = properties == null ? new InitialContext()
:
+                    new InitialContext(properties);
+            Object homeObject = PortableRemoteObject.narrow(initialContext.lookup(jndiName),
homeInterface);
+            final Method createMethod = homeObject.getClass().getMethod("create", ProxyUtils.EMPTY_ARGUMENT_TYPES);
+            return (T)createMethod.invoke(homeObject, ProxyUtils.EMPTY_ARGUMENTS);
+        }
+        catch( NoSuchMethodException e )
+        {
+            throw new ObjectProviderException(
+                    "Unable to find no-arg create() method on home interface " + homeInterface.getName()
+ ".", e);
+        }
+        catch( IllegalAccessException e )
+        {
+            throw new ObjectProviderException(
+                    "No-arg create() method on home interface " + homeInterface.getName()
+ " is not accessible.",
+                    e); // Should never happen!
+        }
+        catch( NamingException e )
+        {
+            throw new ObjectProviderException("Unable to lookup EJB home object in JNDI.",
e);
+        }
+        catch( InvocationTargetException e )
+        {
+            throw new ObjectProviderException(
+                    "No-arg create() method on home interface " + homeInterface.getName()
+ " threw an exception.", e);
+        }
+    }
+}
+

Added: commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy/provider/remoting/package.html
URL: http://svn.apache.org/viewvc/commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy/provider/remoting/package.html?rev=965009&view=auto
==============================================================================
--- commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy/provider/remoting/package.html
(added)
+++ commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy/provider/remoting/package.html
Sat Jul 17 04:23:37 2010
@@ -0,0 +1,25 @@
+<!--
+  ~ 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.
+  -->
+
+<html>
+<body>
+<p>
+    This package contains some useful <a href="../../ObjectProvider.html">ObjectProvider</a>
implementations for use
+    in remoting situations (EJB, RMI, Burlap, Hessian, JAX-RPC, etc).
+</p>
+</body>
+</html>



Mime
View raw message