| /* |
| * 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.ode.ra; |
| |
| import org.apache.ode.ra.transports.OdeTransport; |
| import org.apache.ode.ra.transports.rmi.RMITransport; |
| |
| import java.io.PrintWriter; |
| import java.rmi.RemoteException; |
| import java.util.Set; |
| |
| import javax.resource.ResourceException; |
| import javax.resource.spi.ConnectionManager; |
| import javax.resource.spi.ConnectionRequestInfo; |
| import javax.resource.spi.ManagedConnection; |
| import javax.resource.spi.ManagedConnectionFactory; |
| import javax.security.auth.Subject; |
| |
| /** |
| * JCA {@link ManagedConnectionFactory} implementation. |
| */ |
| public class OdeManagedConnectionFactory implements ManagedConnectionFactory { |
| private static final long serialVersionUID = 1L; |
| private PrintWriter _logWriter; |
| |
| /** Default connection request information. */ |
| private OdeConnectionRequestInfo _defaultCRI = new OdeConnectionRequestInfo(null,""); |
| |
| public OdeManagedConnectionFactory() { |
| try { |
| setTransport(RMITransport.class.getName()); |
| } catch (ResourceException re) { |
| //ignore (perhaps we should log) |
| } |
| } |
| |
| public void setTransport(String transportClassName) throws ResourceException { |
| try { |
| Class tclass = Class.forName(transportClassName); |
| _defaultCRI.transport = (OdeTransport) tclass.newInstance(); |
| } catch (IllegalAccessException e) { |
| ResourceException re = new ResourceException("Class-access error for transport class \"" + transportClassName + "\". ", e); |
| throw re; |
| } catch (InstantiationException e) { |
| ResourceException re = new ResourceException("Error instantiating transport class \"" + transportClassName + "\". ", e ); |
| throw re; |
| } catch (ClassNotFoundException e) { |
| ResourceException re = new ResourceException("Transport class \"" + transportClassName + "\" not found in class path. ", e); |
| throw re; |
| |
| } |
| } |
| |
| public void setURL(String url) throws ResourceException { |
| _defaultCRI.url = url; |
| } |
| |
| public void setProperty(String key, String val) throws ResourceException { |
| if (key.equals("URL")) |
| setURL(val); |
| else if (key.equals("Transport")) |
| setTransport(val); |
| else |
| _defaultCRI.properties.setProperty(key,val); |
| } |
| |
| public Object createConnectionFactory() throws ResourceException { |
| return new OdeConnectionFactoryImpl(this, new OdeConnectionManager()); |
| } |
| |
| public Object createConnectionFactory(ConnectionManager connectionManager) throws ResourceException { |
| return new OdeConnectionFactoryImpl(this, connectionManager); |
| } |
| |
| public ManagedConnection createManagedConnection(Subject subject, ConnectionRequestInfo connectionRequestInfo) throws ResourceException { |
| OdeConnectionRequestInfo cri = (OdeConnectionRequestInfo) (connectionRequestInfo != null ? connectionRequestInfo : _defaultCRI); |
| |
| if (cri.transport == null) |
| throw new ResourceException("No transport."); |
| |
| try { |
| return new OdeManagedConnectionImpl(cri.transport.createPipe(cri.url, cri.properties), subject, connectionRequestInfo); |
| } catch (RemoteException ex) { |
| ResourceException re = new ResourceException("Unable to create connection: " + ex.getMessage(), ex); |
| throw re; |
| } |
| } |
| |
| public ManagedConnection matchManagedConnections(Set candidates, Subject subject, ConnectionRequestInfo connectionRequestInfo) |
| throws ResourceException |
| { |
| return null; //To change body of implemented methods use File | Settings | File Templates. |
| } |
| |
| public PrintWriter getLogWriter() throws ResourceException { |
| return _logWriter; |
| } |
| |
| public void setLogWriter(PrintWriter printWriter) throws ResourceException { |
| _logWriter = printWriter; |
| } |
| |
| |
| } |