/**
* 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.cxf.jca.cxf;
import java.net.URL;
import java.util.Properties;
import java.util.ResourceBundle;
import java.util.logging.Logger;
import javax.resource.ResourceException;
import javax.resource.spi.ConnectionManager;
import javax.resource.spi.ConnectionRequestInfo;
import javax.resource.spi.ManagedConnection;
import javax.security.auth.Subject;
import org.apache.cxf.Bus;
//import org.apache.cxf.BusFactory;
import org.apache.cxf.common.i18n.BundleUtils;
import org.apache.cxf.common.i18n.Message;
import org.apache.cxf.common.logging.LogUtils;
import org.apache.cxf.jca.core.resourceadapter.AbstractManagedConnectionFactoryImpl;
import org.apache.cxf.jca.core.resourceadapter.AbstractManagedConnectionImpl;
import org.apache.cxf.jca.core.resourceadapter.ResourceAdapterInternalException;
public class ManagedConnectionFactoryImpl
extends AbstractManagedConnectionFactoryImpl
implements CXFManagedConnectionFactory {
private static final long serialVersionUID = -891927761318109853L;
private static final Logger LOG = LogUtils.getL7dLogger(ManagedConnectionFactoryImpl.class);
private static final ResourceBundle BUNDLE = BundleUtils.getBundle(ManagedConnectionFactoryImpl.class);
protected JCABusFactory jcaBusFactory;
public ManagedConnectionFactoryImpl() {
super();
LOG.info("ManagedConnectionFactoryImpl constructed without props by appserver...");
}
public ManagedConnectionFactoryImpl(Properties props) {
super(props);
LOG.info("ManagedConnectionFactoryImpl constructed with props by appserver. props = " + props);
}
public void setLogLevel(String logLevel) {
setProperty(LOG_LEVEL, logLevel);
}
public void setEJBServicePropertiesURL(String name) {
setProperty(EJB_SERVICE_PROPERTIES_URL, name);
}
public void setMonitorEJBServiceProperties(Boolean monitor) {
setProperty(MONITOR_EJB_SERVICE_PROPERTIES, monitor.toString());
}
public void setEJBServicePropertiesPollInterval(Integer pollInterval) {
setProperty(MONITOR_POLL_INTERVAL, pollInterval.toString());
}
public String getLogLevel() {
return getPluginProps().getProperty(LOG_LEVEL);
}
public String getEJBServicePropertiesURL() {
return getPluginProps().getProperty(EJB_SERVICE_PROPERTIES_URL);
}
public Boolean getMonitorEJBServiceProperties() {
return Boolean.valueOf(getPluginProps().getProperty(MONITOR_EJB_SERVICE_PROPERTIES));
}
public Integer getEJBServicePropertiesPollInterval() {
return Integer.valueOf(getPluginProps().getProperty(MONITOR_POLL_INTERVAL,
DEFAULT_MONITOR_POLL_INTERVAL));
}
public URL getEJBServicePropertiesURLInstance() throws ResourceException {
return getPropsURL(getEJBServicePropertiesURL());
}
public String getEJBServantBaseURL() throws ResourceException {
return getPluginProps().getProperty(EJB_SERVANT_BASE_URL);
}
public void setEJBServantBaseURL(String url) throws ResourceException {
setProperty(EJB_SERVANT_BASE_URL, url);
}
// compliance: WL9 checks
// need to ensure multiple instances with same config properties are equal
// multiple instances with same config do not make sense to me
protected void validateReference(AbstractManagedConnectionImpl conn, javax.security.auth.Subject subj) {
}
public Object createConnectionFactory() throws ResourceException {
throw new ResourceAdapterInternalException(
new Message("NON_MANAGED_CONNECTION_IS_NOT_SUPPORTED", BUNDLE).toString());
}
public Object createConnectionFactory(ConnectionManager connMgr) throws ResourceException {
LOG.info("connManager=" + connMgr);
if (connMgr == null) {
throw new ResourceAdapterInternalException(
new Message("NON_MANAGED_CONNECTION_IS_NOT_SUPPORTED", BUNDLE).toString());
}
init(connMgr.getClass().getClassLoader());
LOG.fine("Setting AppServer classloader in jcaBusFactory. " + connMgr.getClass().getClassLoader());
return new ConnectionFactoryImpl(this, connMgr);
}
public ManagedConnection createManagedConnection(Subject subject, ConnectionRequestInfo connReqInfo)
throws ResourceException {
LOG.info("create connection, subject=" + subject + " connReqInfo=" + connReqInfo);
init(Thread.currentThread().getContextClassLoader());
return new ManagedConnectionImpl(this, connReqInfo, subject);
}
public void close() throws javax.resource.spi.ResourceAdapterInternalException {
}
protected synchronized void init(ClassLoader appserverClassLoader) throws ResourceException {
if (jcaBusFactory == null) {
jcaBusFactory = new JCABusFactory(this);
jcaBusFactory.create(appserverClassLoader, getBootstrapContext());
}
}
public Bus getBus() {
return (jcaBusFactory != null) ? jcaBusFactory.getBus() : null;
}
protected Object getBootstrapContext() {
return null;
}
}