Author: struberg
Date: Sun Jul 17 20:48:17 2011
New Revision: 1147714
URL: http://svn.apache.org/viewvc?rev=1147714&view=rev
Log:
OWB-573 cache previously calculated hashCode to improve performance to the
original level
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java?rev=1147714&r1=1147713&r2=1147714&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java
Sun Jul 17 20:48:17 2011
@@ -94,6 +94,14 @@ public abstract class AbstractOwbBean<T>
/**Beans injection points*/
protected Set<InjectionPoint> injectionPoints = new
HashSet<InjectionPoint>();
+ /**
+ * We gonna cache the hashCode since it is used millions of times per
second.
+ * Beans are pretty much static once they got constructed. So it's easy to
+ * cache it and reset the cache to the default of 0 on a change
+ * which means it should get recalculated.
+ */
+ private int cachedHashCode = 0;
+
/**
* This string will be used for passivating the Bean.
@@ -346,6 +354,7 @@ public abstract class AbstractOwbBean<T>
{
this.implScopeType = scopeType;
this.scopeClass = this.implScopeType.annotationType();
+ cachedHashCode = 0;
}
/**
@@ -378,6 +387,7 @@ public abstract class AbstractOwbBean<T>
this.stereoTypeClasses = null; // will get rebuilt on the next request
this.stereoTypes.add(stereoType);
+ cachedHashCode = 0;
}
/**
@@ -388,6 +398,7 @@ public abstract class AbstractOwbBean<T>
public void addApiType(Class<?> apiType)
{
this.apiTypes.add(apiType);
+ cachedHashCode = 0;
}
/**
@@ -418,6 +429,7 @@ public abstract class AbstractOwbBean<T>
public void addQualifier(Annotation qualifier)
{
this.implQualifiers.add(qualifier);
+ cachedHashCode = 0;
}
/**
@@ -430,6 +442,7 @@ public abstract class AbstractOwbBean<T>
if (this.name == null)
{
this.name = name;
+ cachedHashCode = 0;
}
else
{
@@ -480,6 +493,7 @@ public abstract class AbstractOwbBean<T>
public void setNullable(boolean nullable)
{
this.nullable = nullable;
+ cachedHashCode = 0;
}
/**
@@ -489,7 +503,7 @@ public abstract class AbstractOwbBean<T>
public void setSerializable(boolean serializable)
{
this.serializable = serializable;
-
+ cachedHashCode = 0;
}
/**
@@ -498,7 +512,6 @@ public abstract class AbstractOwbBean<T>
@Override
public boolean isNullable()
{
-
return this.nullable;
}
@@ -533,6 +546,7 @@ public abstract class AbstractOwbBean<T>
public void setSpecializedBean(boolean specialized)
{
this.specializedBean = specialized;
+ cachedHashCode = 0;
}
/**
@@ -541,6 +555,7 @@ public abstract class AbstractOwbBean<T>
public void setEnabled(boolean enabled)
{
this.enabled = enabled;
+ cachedHashCode = 0;
}
/**
@@ -709,6 +724,11 @@ public abstract class AbstractOwbBean<T>
@Override
public int hashCode()
{
+ if (cachedHashCode != 0)
+ {
+ return cachedHashCode;
+ }
+
final int prime = 31;
int result = 1;
result = prime * result + ((apiTypes == null) ? 0 :
apiTypes.hashCode());
@@ -726,6 +746,7 @@ public abstract class AbstractOwbBean<T>
result = prime * result + ((stereoTypeClasses == null) ? 0 :
stereoTypeClasses.hashCode());
result = prime * result + ((stereoTypes == null) ? 0 :
stereoTypes.hashCode());
result = prime * result + ((webBeansType == null) ? 0 :
webBeansType.hashCode());
+ cachedHashCode = result;
return result;
}