Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
git-svn-id: http://anonsvn.jboss.org/repos/weld/ri/trunk@320 1c488680-804c-0410-94cd-c6b725194a0e
- Loading branch information
Showing
6 changed files
with
128 additions
and
53 deletions.
There are no files selected for viewing
38 changes: 6 additions & 32 deletions
38
webbeans-ri/src/main/java/org/jboss/webbeans/contexts/BeanMap.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,38 +1,12 @@ | ||
package org.jboss.webbeans.contexts; | ||
|
||
import java.util.Map; | ||
import java.util.concurrent.ConcurrentHashMap; | ||
|
||
import javax.webbeans.manager.Bean; | ||
|
||
import com.google.common.collect.ForwardingMap; | ||
|
||
public class BeanMap extends ForwardingMap<Bean<? extends Object>, Object> | ||
public interface BeanMap | ||
{ | ||
|
||
protected Map<Bean<? extends Object>, Object> delegate; | ||
|
||
public BeanMap() | ||
{ | ||
delegate = new ConcurrentHashMap<Bean<? extends Object>, Object>(); | ||
} | ||
|
||
@SuppressWarnings("unchecked") | ||
public <T extends Object> T get(Bean<? extends T> bean) | ||
{ | ||
return (T) super.get(bean); | ||
} | ||
|
||
@Override | ||
public Map<Bean<? extends Object>, Object> delegate() | ||
{ | ||
return delegate; | ||
} | ||
|
||
@SuppressWarnings("unchecked") | ||
public <T extends Object> T remove(Bean<? extends T> bean) | ||
{ | ||
return (T) super.remove(bean); | ||
} | ||
|
||
public abstract <T extends Object> T get(Bean<? extends T> bean); | ||
public abstract <T extends Object> T remove(Bean<? extends T> bean); | ||
public abstract void clear(); | ||
public abstract Iterable<Bean<? extends Object>> keySet(); | ||
public abstract <T extends Object> T put(Bean<? extends T> bean, T instance); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
77 changes: 65 additions & 12 deletions
77
webbeans-ri/src/main/java/org/jboss/webbeans/contexts/SessionBeanMap.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,40 +1,93 @@ | ||
package org.jboss.webbeans.contexts; | ||
|
||
import java.util.ArrayList; | ||
import java.util.Enumeration; | ||
import java.util.List; | ||
|
||
import javax.servlet.http.HttpSession; | ||
import javax.webbeans.manager.Bean; | ||
|
||
import org.jboss.webbeans.ManagerImpl; | ||
|
||
public class SessionBeanMap extends BeanMap | ||
public class SessionBeanMap implements BeanMap | ||
{ | ||
private static final String KEY_PREFIX = "SessionScoped#"; | ||
|
||
private HttpSession session; | ||
private ManagerImpl manager; | ||
|
||
public SessionBeanMap(ManagerImpl manager) { | ||
private BeanMap cache; | ||
|
||
public SessionBeanMap(ManagerImpl manager) | ||
{ | ||
super(); | ||
this.manager = manager; | ||
cache = new SimpleBeanMap(); | ||
} | ||
|
||
public void setSession(HttpSession session) { | ||
public void setSession(HttpSession session) | ||
{ | ||
this.session = session; | ||
} | ||
@Override | ||
|
||
@SuppressWarnings("unchecked") | ||
public <T> T get(Bean<? extends T> bean) | ||
{ | ||
String id = Integer.toString(manager.getBeans().indexOf(bean)); | ||
T instance = super.get(bean); | ||
session.setAttribute(id, instance); | ||
T instance = cache.get(bean); | ||
if (instance != null) | ||
{ | ||
return instance; | ||
} | ||
String id = KEY_PREFIX + manager.getBeans().indexOf(bean); | ||
instance = (T) session.getAttribute(id); | ||
if (instance != null) | ||
{ | ||
cache.put(bean, instance); | ||
} | ||
return instance; | ||
} | ||
|
||
@Override | ||
public <T> T remove(Bean<? extends T> bean) | ||
{ | ||
T instance = super.remove(bean); | ||
String id = Integer.toString(manager.getBeans().indexOf(bean)); | ||
T instance = get(bean); | ||
String id = KEY_PREFIX + manager.getBeans().indexOf(bean); | ||
session.removeAttribute(id); | ||
cache.remove(bean); | ||
return instance; | ||
} | ||
|
||
@SuppressWarnings("unchecked") | ||
public void clear() | ||
{ | ||
Enumeration names = session.getAttributeNames(); | ||
while (names.hasMoreElements()) { | ||
String name = (String) names.nextElement(); | ||
session.removeAttribute(name); | ||
} | ||
cache.clear(); | ||
} | ||
|
||
public Iterable<Bean<? extends Object>> keySet() | ||
{ | ||
List<Bean<?>> beans = new ArrayList<Bean<?>>(); | ||
|
||
Enumeration names = session.getAttributeNames(); | ||
while (names.hasMoreElements()) { | ||
String name = (String) names.nextElement(); | ||
if (name.startsWith(KEY_PREFIX)) { | ||
String id = name.substring(KEY_PREFIX.length()); | ||
Bean<?> bean = manager.getBeans().get(Integer.parseInt(id)); | ||
beans.add(bean); | ||
} | ||
} | ||
|
||
return beans; | ||
} | ||
|
||
public <T> T put(Bean<? extends T> bean, T instance) | ||
{ | ||
String id = KEY_PREFIX + manager.getBeans().indexOf(bean); | ||
session.setAttribute(id, instance); | ||
return cache.put(bean, instance); | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
53 changes: 53 additions & 0 deletions
53
webbeans-ri/src/main/java/org/jboss/webbeans/contexts/SimpleBeanMap.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
package org.jboss.webbeans.contexts; | ||
|
||
import java.util.Map; | ||
import java.util.Set; | ||
import java.util.concurrent.ConcurrentHashMap; | ||
|
||
import javax.webbeans.manager.Bean; | ||
|
||
import com.google.common.collect.ForwardingMap; | ||
|
||
public class SimpleBeanMap extends ForwardingMap<Bean<? extends Object>, Object> implements BeanMap | ||
{ | ||
|
||
protected Map<Bean<? extends Object>, Object> delegate; | ||
|
||
public SimpleBeanMap() | ||
{ | ||
delegate = new ConcurrentHashMap<Bean<? extends Object>, Object>(); | ||
} | ||
|
||
@SuppressWarnings("unchecked") | ||
public <T extends Object> T get(Bean<? extends T> bean) | ||
{ | ||
return (T) super.get(bean); | ||
} | ||
|
||
@Override | ||
public Map<Bean<? extends Object>, Object> delegate() | ||
{ | ||
return delegate; | ||
} | ||
|
||
@SuppressWarnings("unchecked") | ||
public <T extends Object> T remove(Bean<? extends T> bean) | ||
{ | ||
return (T) super.remove(bean); | ||
} | ||
|
||
public void clear() { | ||
delegate.clear(); | ||
} | ||
|
||
public Set<Bean<? extends Object>> keySet() { | ||
return delegate.keySet(); | ||
} | ||
|
||
@SuppressWarnings("unchecked") | ||
public <T> T put(Bean<? extends T> bean, T instance) | ||
{ | ||
return (T) delegate.put(bean, instance); | ||
} | ||
|
||
} |