On Jan 8, 2007, at 7:59 PM, Dain Sundstrom wrote:

I removed the FastThreadLocal class which was cruft from way back in the day when ThreadLocals were very slow. In the process I generified and clean up all uses of ThreadLocal, but have a few questions about some of the code. Hopefully someone who can remember back to early 2000 can help.

On Jan 8, 2007, at 7:50 PM, [EMAIL PROTECTED] wrote:

===================================================================== ========= --- incubator/openejb/trunk/openejb3/container/openejb-core/src/ main/java/org/apache/openejb/core/ServerFederation.java (original) +++ incubator/openejb/trunk/openejb3/container/openejb-core/src/ main/java/org/apache/openejb/core/ServerFederation.java Mon Jan 8 19:50:03 2007
@@ -53,17 +53,20 @@
     }

public static void setApplicationServer(ApplicationServer server) { + // todo why do we restrict null? This makes call to setApplicationServer non symetrical. Throw an exception?
         if (server != null) {
-            threadStorage.set(server);
+            applicationServer.set(server);
         }
     }

Any idea why we don't allow null to be set into the application server? If the thread local holds, null we return localServer.

I think the proper implementation is to make localServer the initValue for the thread local, and if someone attempts to set the application server to null, we throw an exception.

The "if null return the localServer" thing is a situation that's potentially non-existent. The only situation where I can think it'd actually occur is if a bean attempted to serialize a Handle or HomeHandle to disk, but even then I'm not certain. In that situation, the local server is the one asking for the app server and could very well do it's own null check and opt to apply it's own logic if no app server is found.

The other place I imagined it being used, and is definitely not but should be, is if an app server wanted to swap it's proxies coming off the wire with local proxies for better performance should those proxies be used. Even then we just make the private static final a public static final or better move the static final right into the IntraVmServer class.



Modified: incubator/openejb/trunk/openejb3/container/openejb-core/ src/main/java/org/apache/openejb/core/ivm/IntraVmArtifact.java URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/ container/openejb-core/src/main/java/org/apache/openejb/core/ivm/ IntraVmArtifact.java?view=diff&rev=494312&r1=494311&r2=494312 ===================================================================== =========
+    // todo why not put in message catalog?
private static final String NO_ARTIFACT_ERROR = "The artifact this object represents could not be found.";

Is there a primer on how to use the message catalog somewhere?

Nowhere. But, ideally each package would have it's own Messages.properties file. You would then be able to grab your messages by referencing your package name. Better, we could let classes pass in MyClass.class and we could figure out their package name for them... or someday implement a class based strategy and not have to update any code.


@@ -59,11 +54,11 @@
         instanceHandle = in.read();
     }

-    private Object readResolve() throws ObjectStreamException {
-        List list = (List) thread.get();
- if (list == null) throw new InvalidObjectException (NO_MAP_ERROR);
+    protected Object readResolve() throws ObjectStreamException {
+        List<Object> list = handles.get();
         Object artifact = list.get(instanceHandle);
if (artifact == null) throw new InvalidObjectException (NO_ARTIFACT_ERROR + instanceHandle);
+        // todo WHY?
         if (list.size() == instanceHandle + 1) {
             list.clear();
         }

Does anyone know why we clear the list here? This same code exists in org.apache.openejb.proxy.ImmutableArtifact. Is this a duplicate class?

org.apache.openejb.proxy is all duplicate code. It'll get the boot eventually.

-David

Reply via email to