blob: ac012acb2dcf82a28563401868587483107992c4 [file] [log] [blame]
/*
* 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.openjpa.conf;
import org.apache.openjpa.event.RemoteCommitEventManager;
import org.apache.openjpa.event.RemoteCommitProvider;
import org.apache.openjpa.lib.conf.Configuration;
import org.apache.openjpa.lib.conf.Configurations;
import org.apache.openjpa.lib.conf.PluginValue;
import org.apache.openjpa.lib.util.Options;
import org.apache.openjpa.lib.util.StringUtil;
/**
* Value type used to represent a {@link RemoteCommitProvider}. This
* plugin allows users to specify whether to transmit the ids of added objects
* in the remote commit events distributed.
*
* @author Abe White
*/
public class RemoteCommitProviderValue
extends PluginValue {
private static final String[] ALIASES = new String[]{
"sjvm", "org.apache.openjpa.event.SingleJVMRemoteCommitProvider",
"jms", "org.apache.openjpa.event.JMSRemoteCommitProvider",
"tcp", "org.apache.openjpa.event.TCPRemoteCommitProvider",
};
private Options _opts = null;
private Boolean _transmitPersIds = null;
public RemoteCommitProviderValue() {
super("RemoteCommitProvider", true);
setAliases(ALIASES);
}
@Override
public void setProperties(String props) {
super.setProperties(props);
_opts = null;
_transmitPersIds = null;
}
@Override
public void setString(String str) {
super.setString(str);
_opts = null;
_transmitPersIds = null;
}
/**
* The cached provider.
*/
public RemoteCommitProvider getProvider() {
return (RemoteCommitProvider) get();
}
/**
* The cached provider.
*/
public void setProvider(RemoteCommitProvider provider) {
set(provider);
}
/**
* Whether to transmit persisted object ids in remote commit events.
*/
public boolean getTransmitPersistedObjectIds() {
return Boolean.TRUE.equals(_transmitPersIds);
}
/**
* The cached decorators.
*/
public void setTransmitPersistedObjectIds(boolean transmit) {
_transmitPersIds = (transmit) ? Boolean.TRUE : Boolean.FALSE;
}
/**
* Instantiate the provider.
*/
public RemoteCommitProvider instantiateProvider(Configuration conf) {
return instantiateProvider(conf, true);
}
/**
* Instantiate the provider.
*/
public RemoteCommitProvider instantiateProvider(Configuration conf,
boolean fatal) {
return (RemoteCommitProvider) instantiate(RemoteCommitProvider.class,
conf, fatal);
}
/**
* Configure the remote event manager.
*/
public void configureEventManager(RemoteCommitEventManager mgr) {
parseOptions();
if (_transmitPersIds != null)
mgr.setTransmitPersistedObjectIds(_transmitPersIds);
}
/**
* Override to keep decorators out of transport configuration.
*/
@Override
public Object instantiate(Class type, Configuration conf, boolean fatal) {
Object obj = newInstance(getClassName(), type, conf, fatal);
parseOptions();
Configurations.configureInstance(obj, conf, _opts, getProperty());
set(obj, true);
return obj;
}
private void parseOptions() {
if (_opts != null)
return;
_opts = Configurations.parseProperties(getProperties());
String transmit = StringUtil.trimToNull(_opts.removeProperty
("transmitPersistedObjectIds", "TransmitPersistedObjectIds", null));
if (transmit != null)
_transmitPersIds = Boolean.valueOf (transmit);
}
}