Author: scottbw
Date: Tue Jan 31 21:57:39 2012
New Revision: 1238828
URL: http://svn.apache.org/viewvc?rev=1238828&view=rev
Log:
To try and work around the issues with stale collections of Preference objects
I changed the WidgetAPIImpl and IWidgetInstance.Utilities classes to load the
IPreference instances directly from the PersistenceManager rather than use
widgetInstance.getPreferences(), which doesn't always seem to contain fresh
data. This addresses WOOKIE-306 for now, however longer term we need to get to
the root of all these various JPA-related issues.
Modified:
incubator/wookie/trunk/src/org/apache/wookie/ajaxmodel/impl/WidgetAPIImpl.java
incubator/wookie/trunk/src/org/apache/wookie/beans/IWidgetInstance.java
Modified:
incubator/wookie/trunk/src/org/apache/wookie/ajaxmodel/impl/WidgetAPIImpl.java
URL:
http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/ajaxmodel/impl/WidgetAPIImpl.java?rev=1238828&r1=1238827&r2=1238828&view=diff
==============================================================================
---
incubator/wookie/trunk/src/org/apache/wookie/ajaxmodel/impl/WidgetAPIImpl.java
(original)
+++
incubator/wookie/trunk/src/org/apache/wookie/ajaxmodel/impl/WidgetAPIImpl.java
Tue Jan 31 21:57:39 2012
@@ -54,16 +54,17 @@ public class WidgetAPIImpl implements IW
* @see
org.apache.wookie.ajaxmodel.IWidgetAPI#preferences(java.lang.String)
*/
public List<IPreference> preferences(String id_key) {
- ArrayList<IPreference> prefs = new ArrayList<IPreference>();
- if(id_key == null) return prefs;
- // check if instance is valid
- IPersistenceManager persistenceManager =
PersistenceManagerFactory.getPersistenceManager();
- IWidgetInstance widgetInstance =
persistenceManager.findWidgetInstanceByIdKey(id_key);
- if(widgetInstance==null) return prefs;
- for(IPreference preference : widgetInstance.getPreferences()){
- prefs.add(new PreferenceDelegate(preference));
- }
- return prefs;
+ ArrayList<IPreference> prefs = new ArrayList<IPreference>();
+ if(id_key == null) return prefs;
+ // check if instance is valid
+ IPersistenceManager persistenceManager =
PersistenceManagerFactory.getPersistenceManager();
+ IWidgetInstance widgetInstance =
persistenceManager.findWidgetInstanceByIdKey(id_key);
+ if(widgetInstance==null) return prefs;
+ IPreference[] preferences =
persistenceManager.findByValue(IPreference.class, "widgetInstance",
widgetInstance);
+ for (IPreference pref: preferences){
+ prefs.add(new PreferenceDelegate(pref));
+ }
+ return prefs;
}
/* (non-Javadoc)
Modified:
incubator/wookie/trunk/src/org/apache/wookie/beans/IWidgetInstance.java
URL:
http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/beans/IWidgetInstance.java?rev=1238828&r1=1238827&r2=1238828&view=diff
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/beans/IWidgetInstance.java
(original)
+++ incubator/wookie/trunk/src/org/apache/wookie/beans/IWidgetInstance.java Tue
Jan 31 21:57:39 2012
@@ -15,7 +15,11 @@
package org.apache.wookie.beans;
import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.wookie.beans.util.IPersistenceManager;
+import org.apache.wookie.beans.util.PersistenceManagerFactory;
import org.apache.wookie.w3c.ILocalizedElement;
/**
@@ -216,22 +220,21 @@ public interface IWidgetInstance extends
public static class Utilities
{
- /**
- * Get preference with specified key for widget instance.
- *
- * @param key shared data key
- * @return shared data
- */
- public static IPreference getPreference(IWidgetInstance
widgetInstance, String key)
- {
- for (IPreference preference : widgetInstance.getPreferences())
- {
- if (preference.getDkey().equals(key))
- {
- return preference;
- }
- }
- return null;
- }
+ /**
+ * Get preference with specified key for widget instance.
+ *
+ * @param key shared data key
+ * @return shared data
+ */
+ public static IPreference getPreference(IWidgetInstance widgetInstance,
String key)
+ {
+ IPersistenceManager persistenceManager =
PersistenceManagerFactory.getPersistenceManager();
+ Map<String, Object> map = new HashMap<String, Object>();
+ map.put("widgetInstance", widgetInstance);//$NON-NLS-1$
+ map.put("dkey", key);//$NON-NLS-1$
+ IPreference[] preference =
persistenceManager.findByValues(IPreference.class, map);
+ if (preference.length == 1) return preference[0];
+ return null;
+ }
}
}