/* * 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; } }