[jboss-svn-commits] JBL Code SVN: r35043 - in labs/jbosstm/trunk: ArjunaCore/txoj/classes/com/arjuna/ats/txoj/common and 6 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Sep 7 09:11:14 EDT 2010
Author: jhalliday
Date: 2010-09-07 09:11:13 -0400 (Tue, 07 Sep 2010)
New Revision: 35043
Modified:
labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/common/arjPropertyManager.java
labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/common/recoveryPropertyManager.java
labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/txoj/common/txojPropertyManager.java
labs/jbosstm/trunk/ArjunaJTA/jdbc/classes/com/arjuna/ats/jdbc/common/jdbcPropertyManager.java
labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/jta/common/jtaPropertyManager.java
labs/jbosstm/trunk/ArjunaJTS/jts/classes/com/arjuna/ats/jts/common/jtsPropertyManager.java
labs/jbosstm/trunk/ArjunaJTS/orbportability/classes/com/arjuna/orbportability/common/opPropertyManager.java
labs/jbosstm/trunk/XTS/WS-C/dev/src/org/jboss/jbossts/xts/environment/XTSPropertyManager.java
labs/jbosstm/trunk/common/classes/com/arjuna/common/internal/util/propertyservice/BeanPopulator.java
Log:
Change property mechanism to allow multiple, named instances of the various environment bean classes. JBTM-787
Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/common/arjPropertyManager.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/common/arjPropertyManager.java 2010-09-07 09:42:12 UTC (rev 35042)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/common/arjPropertyManager.java 2010-09-07 13:11:13 UTC (rev 35043)
@@ -42,16 +42,16 @@
{
public static CoreEnvironmentBean getCoreEnvironmentBean()
{
- return BeanPopulator.getSingletonInstance(CoreEnvironmentBean.class);
+ return BeanPopulator.getDefaultInstance(CoreEnvironmentBean.class);
}
public static CoordinatorEnvironmentBean getCoordinatorEnvironmentBean()
{
- return BeanPopulator.getSingletonInstance(CoordinatorEnvironmentBean.class);
+ return BeanPopulator.getDefaultInstance(CoordinatorEnvironmentBean.class);
}
public static ObjectStoreEnvironmentBean getObjectStoreEnvironmentBean()
{
- return BeanPopulator.getSingletonInstance(ObjectStoreEnvironmentBean.class);
+ return BeanPopulator.getDefaultInstance(ObjectStoreEnvironmentBean.class);
}
}
Modified: labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/common/recoveryPropertyManager.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/common/recoveryPropertyManager.java 2010-09-07 09:42:12 UTC (rev 35042)
+++ labs/jbosstm/trunk/ArjunaCore/arjuna/classes/com/arjuna/ats/arjuna/common/recoveryPropertyManager.java 2010-09-07 13:11:13 UTC (rev 35043)
@@ -30,6 +30,6 @@
{
public static RecoveryEnvironmentBean getRecoveryEnvironmentBean()
{
- return BeanPopulator.getSingletonInstance(RecoveryEnvironmentBean.class);
+ return BeanPopulator.getDefaultInstance(RecoveryEnvironmentBean.class);
}
}
\ No newline at end of file
Modified: labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/txoj/common/txojPropertyManager.java
===================================================================
--- labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/txoj/common/txojPropertyManager.java 2010-09-07 09:42:12 UTC (rev 35042)
+++ labs/jbosstm/trunk/ArjunaCore/txoj/classes/com/arjuna/ats/txoj/common/txojPropertyManager.java 2010-09-07 13:11:13 UTC (rev 35043)
@@ -42,6 +42,6 @@
{
public static TxojEnvironmentBean getTxojEnvironmentBean()
{
- return BeanPopulator.getSingletonInstance(TxojEnvironmentBean.class);
+ return BeanPopulator.getDefaultInstance(TxojEnvironmentBean.class);
}
}
\ No newline at end of file
Modified: labs/jbosstm/trunk/ArjunaJTA/jdbc/classes/com/arjuna/ats/jdbc/common/jdbcPropertyManager.java
===================================================================
--- labs/jbosstm/trunk/ArjunaJTA/jdbc/classes/com/arjuna/ats/jdbc/common/jdbcPropertyManager.java 2010-09-07 09:42:12 UTC (rev 35042)
+++ labs/jbosstm/trunk/ArjunaJTA/jdbc/classes/com/arjuna/ats/jdbc/common/jdbcPropertyManager.java 2010-09-07 13:11:13 UTC (rev 35043)
@@ -32,8 +32,6 @@
import com.arjuna.common.internal.util.propertyservice.BeanPopulator;
-import java.util.concurrent.atomic.AtomicBoolean;
-
/**
* Property manager wrapper for the JDBC module.
*/
@@ -41,6 +39,6 @@
{
public static JDBCEnvironmentBean getJDBCEnvironmentBean()
{
- return BeanPopulator.getSingletonInstance(JDBCEnvironmentBean.class);
+ return BeanPopulator.getDefaultInstance(JDBCEnvironmentBean.class);
}
}
Modified: labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/jta/common/jtaPropertyManager.java
===================================================================
--- labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/jta/common/jtaPropertyManager.java 2010-09-07 09:42:12 UTC (rev 35042)
+++ labs/jbosstm/trunk/ArjunaJTA/jta/classes/com/arjuna/ats/jta/common/jtaPropertyManager.java 2010-09-07 13:11:13 UTC (rev 35043)
@@ -39,6 +39,6 @@
{
public static JTAEnvironmentBean getJTAEnvironmentBean()
{
- return BeanPopulator.getSingletonInstance(JTAEnvironmentBean.class);
+ return BeanPopulator.getDefaultInstance(JTAEnvironmentBean.class);
}
}
Modified: labs/jbosstm/trunk/ArjunaJTS/jts/classes/com/arjuna/ats/jts/common/jtsPropertyManager.java
===================================================================
--- labs/jbosstm/trunk/ArjunaJTS/jts/classes/com/arjuna/ats/jts/common/jtsPropertyManager.java 2010-09-07 09:42:12 UTC (rev 35042)
+++ labs/jbosstm/trunk/ArjunaJTS/jts/classes/com/arjuna/ats/jts/common/jtsPropertyManager.java 2010-09-07 13:11:13 UTC (rev 35043)
@@ -40,6 +40,6 @@
{
public static JTSEnvironmentBean getJTSEnvironmentBean()
{
- return BeanPopulator.getSingletonInstance(JTSEnvironmentBean.class);
+ return BeanPopulator.getDefaultInstance(JTSEnvironmentBean.class);
}
}
Modified: labs/jbosstm/trunk/ArjunaJTS/orbportability/classes/com/arjuna/orbportability/common/opPropertyManager.java
===================================================================
--- labs/jbosstm/trunk/ArjunaJTS/orbportability/classes/com/arjuna/orbportability/common/opPropertyManager.java 2010-09-07 09:42:12 UTC (rev 35042)
+++ labs/jbosstm/trunk/ArjunaJTS/orbportability/classes/com/arjuna/orbportability/common/opPropertyManager.java 2010-09-07 13:11:13 UTC (rev 35043)
@@ -42,6 +42,6 @@
{
public static OrbPortabilityEnvironmentBean getOrbPortabilityEnvironmentBean()
{
- return BeanPopulator.getSingletonInstance(OrbPortabilityEnvironmentBean.class);
+ return BeanPopulator.getDefaultInstance(OrbPortabilityEnvironmentBean.class);
}
}
Modified: labs/jbosstm/trunk/XTS/WS-C/dev/src/org/jboss/jbossts/xts/environment/XTSPropertyManager.java
===================================================================
--- labs/jbosstm/trunk/XTS/WS-C/dev/src/org/jboss/jbossts/xts/environment/XTSPropertyManager.java 2010-09-07 09:42:12 UTC (rev 35042)
+++ labs/jbosstm/trunk/XTS/WS-C/dev/src/org/jboss/jbossts/xts/environment/XTSPropertyManager.java 2010-09-07 13:11:13 UTC (rev 35043)
@@ -2,8 +2,6 @@
import com.arjuna.common.internal.util.propertyservice.BeanPopulator;
-import java.io.IOException;
-import java.io.InputStream;
import java.util.Enumeration;
import java.util.Properties;
@@ -15,27 +13,27 @@
{
public static WSCEnvironmentBean getWSCEnvironmentBean()
{
- return BeanPopulator.getSingletonInstance(WSCEnvironmentBean.class, xtsProperties);
+ return BeanPopulator.getDefaultInstance(WSCEnvironmentBean.class, xtsProperties);
}
public static WSCFEnvironmentBean getWSCFEnvironmentBean()
{
- return BeanPopulator.getSingletonInstance(WSCFEnvironmentBean.class, xtsProperties);
+ return BeanPopulator.getDefaultInstance(WSCFEnvironmentBean.class, xtsProperties);
}
public static WSTEnvironmentBean getWSTEnvironmentBean()
{
- return BeanPopulator.getSingletonInstance(WSTEnvironmentBean.class, xtsProperties);
+ return BeanPopulator.getDefaultInstance(WSTEnvironmentBean.class, xtsProperties);
}
public static RecoveryEnvironmentBean getRecoveryEnvironmentBean()
{
- return BeanPopulator.getSingletonInstance(RecoveryEnvironmentBean.class, xtsProperties);
+ return BeanPopulator.getDefaultInstance(RecoveryEnvironmentBean.class, xtsProperties);
}
public static XTSEnvironmentBean getXTSEnvironmentBean()
{
- return BeanPopulator.getSingletonInstance(XTSEnvironmentBean.class, xtsProperties);
+ return BeanPopulator.getDefaultInstance(XTSEnvironmentBean.class, xtsProperties);
}
private static Properties mergeSystemProperties(Properties properties)
Modified: labs/jbosstm/trunk/common/classes/com/arjuna/common/internal/util/propertyservice/BeanPopulator.java
===================================================================
--- labs/jbosstm/trunk/common/classes/com/arjuna/common/internal/util/propertyservice/BeanPopulator.java 2010-09-07 09:42:12 UTC (rev 35042)
+++ labs/jbosstm/trunk/common/classes/com/arjuna/common/internal/util/propertyservice/BeanPopulator.java 2010-09-07 13:11:13 UTC (rev 35043)
@@ -36,34 +36,53 @@
*/
public class BeanPopulator
{
- private static final ConcurrentMap<Class, Object> singletonBeanInstances = new ConcurrentHashMap<Class, Object>();
+ private static final ConcurrentMap<String, Object> beanInstances = new ConcurrentHashMap<String, Object>();
+ private static final String DEFAULT_NAME = "default";
- public static <T> T getSingletonInstance(Class<T> beanClass) throws RuntimeException {
- return getSingletonInstance(beanClass, null);
+ public static <T> T getDefaultInstance(Class<T> beanClass) throws RuntimeException {
+ return getNamedInstance(beanClass, DEFAULT_NAME, null);
}
- public static <T> T getSingletonInstance(Class<T> beanClass, Properties properties) throws RuntimeException {
+ public static <T> T getDefaultInstance(Class<T> beanClass, Properties properties) throws RuntimeException {
+ return getNamedInstance(beanClass, DEFAULT_NAME, properties);
+ }
+
+ public static <T> T getNamedInstance(Class<T> beanClass, String name) throws RuntimeException {
+ return getNamedInstance(beanClass, name, null);
+ }
+
+ public static <T> T getNamedInstance(Class<T> beanClass, String name, Properties properties) throws RuntimeException {
+
+ if(name == null) {
+ name = DEFAULT_NAME;
+ }
+ String key = beanClass.getCanonicalName()+":"+name;
+
// we don't mind sometimes instantiating the bean multiple times,
// as long as the duplicates never escape into the outside world.
- if(!singletonBeanInstances.containsKey(beanClass)) {
+ if(!beanInstances.containsKey(key)) {
T bean = null;
try {
bean = beanClass.newInstance();
if (properties != null) {
- configureFromProperties(bean, properties);
+ configureFromProperties(bean, name, properties);
} else {
Properties defaultProperties = PropertiesFactory.getDefaultProperties();
- configureFromProperties(bean, defaultProperties);
+ configureFromProperties(bean, name, defaultProperties);
}
} catch (Exception e) {
throw new RuntimeException(e);
}
- singletonBeanInstances.putIfAbsent(beanClass, bean);
+ beanInstances.putIfAbsent(key, bean);
}
- return (T)singletonBeanInstances.get(beanClass);
+ return (T) beanInstances.get(key);
}
+ public static void configureFromProperties(Object bean, Properties properties) throws Exception {
+ configureFromProperties(bean, DEFAULT_NAME, properties);
+ }
+
/**
* Examine the properties of the provided bean and update them to match the values of the corresponding
* properties in the Properties.
@@ -74,13 +93,16 @@
* matching according to the JavaBeans naming conventions, determine the corresponding property key.
*
* Several key names are tried, with the first match being used:
- * For scalar properties: The FQN of the bean followed by the field name,
- * the short name of the bean followed by the field name, and finally the bean classes' PropertyPrefix annotation
+ * For scalar properties: The FQN of the bean class, optionally followed by the bean name, followed by the field name,
+ * e.g. com.arjuna.FooBean.theField or com.arjuna.FooBean.theName.theField
+ * the short class name of the bean, optionally followed by the bean name, followed by the field name,
+ * e.g. FooBean.theField or FooBean.theName.theField
+ * and finally the bean classes' PropertyPrefix annotation
* value followed by the name of the field, the last being except in cases where the field has a FullPropertyName
* annotation, in which case its value is used instead.
* For vector (in the math sense - the type is actually normally List/Map) properties, a single property key matched
* according to the prior rules will be treated as having a compound value which will be tokenized into
- * elements based on whitespace and inserted into the list in token order or further tokenised on = for Map key/value.
+ * elements based on whitespace and inserted into the list in token order or further tokenized on = for Map key/value.
* If no such key is found, the value of the field's ConcatenationPrefix annotation
* is treated as a name prefix and the list elements are assembled from the values of any properties having
* key values starting with the prefix. These are inserted into the list in order of the key's name sort position.
@@ -94,10 +116,11 @@
* from the value read from the Properties, use the setter to update the bean.
*
* @param bean a JavaBean, the target of the property updates and source for defaults.
+ * @param instanceName the (optional, use null for default) name for the bean instance.
* @param properties a Properties object, the source of the configuration overrides.
* @throws Exception if the configuration of the bean fails.
*/
- public static void configureFromProperties(Object bean, Properties properties) throws Exception {
+ public static void configureFromProperties(Object bean, String instanceName, Properties properties) throws Exception {
if(!bean.getClass().isAnnotationPresent(PropertyPrefix.class)) {
throw new Exception("no PropertyPrefix found on "+bean.getClass().getName());
@@ -129,9 +152,9 @@
}
if(field.isAnnotationPresent(ConcatenationPrefix.class) || field.getType().getName().startsWith("java.util")) {
- handleGroupProperty(bean, properties, field, setter, getter);
+ handleGroupProperty(bean, instanceName, properties, field, setter, getter);
} else {
- handleSimpleProperty(bean, properties, field, setter, getter);
+ handleSimpleProperty(bean, instanceName, properties, field, setter, getter);
}
}
}
@@ -147,18 +170,18 @@
*/
public static String printState() {
StringBuffer buffer = new StringBuffer();
- for(Object bean : singletonBeanInstances.values()) {
+ for(Object bean : beanInstances.values()) {
printBean(bean, buffer);
}
return buffer.toString();
}
- private static void handleGroupProperty(Object bean, Properties properties, Field field, Method setter, Method getter)
+ private static void handleGroupProperty(Object bean, String instanceName, Properties properties, Field field, Method setter, Method getter)
throws Exception
{
List<String> lines = new LinkedList<String>();
- String valueFromProperties = getValueFromProperties(bean, properties, field, bean.getClass().getSimpleName());
+ String valueFromProperties = getValueFromProperties(bean, instanceName, properties, field, bean.getClass().getSimpleName());
if(valueFromProperties != null)
{
@@ -229,13 +252,13 @@
}
}
- private static void handleSimpleProperty(Object bean, Properties properties, Field field, Method setter, Method getter)
+ private static void handleSimpleProperty(Object bean, String instanceName, Properties properties, Field field, Method setter, Method getter)
throws Exception
{
PropertyPrefix prefixAnnotation = bean.getClass().getAnnotation(PropertyPrefix.class);
String prefix = prefixAnnotation.prefix();
- String valueFromProperties = getValueFromProperties(bean, properties, field, prefix);
+ String valueFromProperties = getValueFromProperties(bean, instanceName, properties, field, prefix);
if(valueFromProperties != null) {
@@ -279,21 +302,41 @@
}
}
- private static String getValueFromProperties(Object bean, Properties properties, Field field, String prefix)
+ private static String getValueFromProperties(Object bean, String instanceName, Properties properties, Field field, String prefix)
{
String propertyFileKey;
String valueFromProperties = null;
+ if(instanceName == null) {
+ instanceName = DEFAULT_NAME;
+ }
+
if(valueFromProperties == null) {
- propertyFileKey = bean.getClass().getCanonicalName()+"."+field.getName();
- valueFromProperties = properties.getProperty(propertyFileKey);
+
+ if(DEFAULT_NAME.equals(instanceName)) {
+ propertyFileKey = bean.getClass().getCanonicalName()+"."+field.getName();
+ valueFromProperties = properties.getProperty(propertyFileKey);
+ }
+
+ if(valueFromProperties == null) {
+ propertyFileKey = bean.getClass().getCanonicalName()+"."+instanceName+"."+field.getName();
+ valueFromProperties = properties.getProperty(propertyFileKey);
+ }
}
if(valueFromProperties == null) {
- propertyFileKey = bean.getClass().getSimpleName()+"."+field.getName();
- valueFromProperties = properties.getProperty(propertyFileKey);
+
+ if(DEFAULT_NAME.equals(instanceName)) {
+ propertyFileKey = bean.getClass().getSimpleName()+"."+field.getName();
+ valueFromProperties = properties.getProperty(propertyFileKey);
+ }
+
+ if(valueFromProperties == null) {
+ propertyFileKey = bean.getClass().getSimpleName()+"."+instanceName+"."+field.getName();
+ valueFromProperties = properties.getProperty(propertyFileKey);
+ }
}
-
+
if (valueFromProperties == null) {
propertyFileKey = prefix+field.getName();
More information about the jboss-svn-commits
mailing list