Author: rmannibucau
Date: Thu Jan 10 01:21:03 2013
New Revision: 1431170

URL: http://svn.apache.org/viewvc?rev=1431170&view=rev
Log:
reviewing Message class - making it lazy since that's mainly for errors (so no 
in optimal case)+ using concurrenthashmap to avoid synchronization + hashtable

Modified:
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Messages.java

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Messages.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Messages.java?rev=1431170&r1=1431169&r2=1431170&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Messages.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Messages.java
 Thu Jan 10 01:21:03 2013
@@ -17,20 +17,22 @@
 package org.apache.openejb.util;
 
 import java.text.MessageFormat;
+import java.util.Arrays;
 import java.util.Enumeration;
 import java.util.Hashtable;
 import java.util.Locale;
+import java.util.Map;
 import java.util.MissingResourceException;
 import java.util.ResourceBundle;
-import java.util.Arrays;
+import java.util.concurrent.ConcurrentHashMap;
 
 public class Messages {
-    static private Hashtable _rbBundles = new Hashtable();
-    static private Hashtable _rbFormats = new Hashtable();
+    static private Map<String, ResourceBundle> _rbBundles = new 
ConcurrentHashMap<String, ResourceBundle>();
+    static private Map<String, Map<String, MessageFormat>> _rbFormats = new 
ConcurrentHashMap<String, Map<String, MessageFormat>>();
     static private Locale _globalLocale;
 
     private ResourceBundle _messages;
-    private Hashtable _formats;
+    private Map<String, MessageFormat> _formats;
     private Locale _locale;
     private String _resourceName;
 
@@ -44,35 +46,37 @@ public class Messages {
     }
 
     public Messages(String resourceName) {
+        _resourceName = resourceName + ".Messages";
         synchronized (Messages.class) {
             _locale = _globalLocale;
-            _resourceName = resourceName + ".Messages";
-
-            ResourceBundle rb = (ResourceBundle) _rbBundles.get(_resourceName);
-            if (rb == null) {
-                init();
-            } else {
-                _messages = rb;
-                _formats = (Hashtable) _rbFormats.get(_resourceName);
-            }
         }
-
     }
 
     protected void init() {
-        try {
-            if (_locale == null)
-                _messages = ResourceBundle.getBundle(_resourceName);
-            else
-                _messages = ResourceBundle.getBundle(_resourceName, _locale);
-        } catch (Exception except) {
-            _messages = new EmptyResourceBundle();
+        if (_formats != null && _messages != null) {
+            return;
         }
 
-        _formats = new Hashtable();
+        final ResourceBundle rb = _rbBundles.get(_resourceName);
+        if (rb == null) {
+            try {
+                if (_locale == null) {
+                    _messages = ResourceBundle.getBundle(_resourceName);
+                } else {
+                    _messages = ResourceBundle.getBundle(_resourceName, 
_locale);
+                }
+            } catch (Exception except) {
+                _messages = new EmptyResourceBundle();
+            }
+
+            _formats = new ConcurrentHashMap<String, MessageFormat>();
 
-        _rbBundles.put(_resourceName, _messages);
-        _rbFormats.put(_resourceName, _formats);
+            _rbBundles.put(_resourceName, _messages);
+            _rbFormats.put(_resourceName, _formats);
+        } else {
+            _messages = rb;
+            _formats = _rbFormats.get(_resourceName);
+        }
     }
 
     public String format(String message) {
@@ -80,6 +84,7 @@ public class Messages {
     }
 
     public String format(String message, Object... args) {
+        init();
         if (_locale != _globalLocale) {
             synchronized (Messages.class) {
                 init();
@@ -107,6 +112,7 @@ public class Messages {
     }
 
     public String message(String message) {
+        init();
         if (_locale != _globalLocale) {
             synchronized (Messages.class) {
                 init();


Reply via email to