geronimo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Bill Dudney <bdud...@apache.org>
Subject Re: svn commit: r446519 [4/4] - in /geronimo/sandbox/gcache: ./ openwire/ openwire/src/ openwire/src/main/ openwire/src/main/java/ openwire/src/main/java/org/ openwire/src/main/java/org/apache/ openwire/src/main/java/org/apache/geronimo/ openwire/src/main/...
Date Fri, 15 Sep 2006 07:37:26 GMT
Hey Jason,

Thanks for the helping hand ;-P

I've submitted a JIRA and a patch;

http://issues.apache.org/jira/browse/GERONIMO-2407

that does several things;

1) gets the code to compile - there were several references to other  
packages and old code so i updated all that
2) fixes the legal gak mentioned by Jason - a detailed pass over all  
the classes would be appreciated Jason
3) formats all the code to standard (no tabs etc) - an indenting pass  
would be great too Jason

Arguably I should have left the formatting for later but since I'd  
already added the legal gak I figured I'd already hosed the diff anyway.

So the substantive changes;

1) I added NodeInfo and NodeId classs and changed everything that  
said BrokerId or BrokerInfo to NodeId and NodeInfo respectively - the  
idea being that in the old world for this code we had Broker's and  
the 'root' object and in this code its going to be nodes.
2) moved the wire format negotioation stuff into the interface - need  
input
3) Made the TCPTransportServer use the ObjectStreamWireFormatFactory  
instead of the openwire.
4) Added the ObjectStreamWireFormatFactory

feedback is welcome and expected.

TTFN,

-bd-

On Sep 14, 2006, at 11:45 PM, Jason Dillon wrote:

> oooh.... wildcard imports... naughty :-P
>
> You might also want to sick to a standard header, nix the html bits:
>
> /*
> * Licensed to the Apache Software Foundation (ASF) under one
> * or more contributor license agreements.  See the NOTICE file
> * distributed with this work for additional information
> * regarding copyright ownership.  The ASF licenses this file
> * to you under the Apache License, Version 2.0 (the
> * "License"); you may not use this file except in compliance
> * with the License.  You may obtain a copy of the License at
> *
> *  http://www.apache.org/licenses/LICENSE-2.0
> *
> * Unless required by applicable law or agreed to in writing,
> * software distributed under the License is distributed on an
> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> * KIND, either express or implied.  See the License for the
> * specific language governing permissions and limitations
> * under the License.
> */
>
> --jason
>
>
> On Sep 14, 2006, at 9:57 PM, jgenender@apache.org wrote:
>
>> Added: geronimo/sandbox/gcache/openwire/src/main/java/org/apache/ 
>> geronimo/openwire/util/MarshallingSupport.java
>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/gcache/openwire/ 
>> src/main/java/org/apache/geronimo/openwire/util/ 
>> MarshallingSupport.java?view=auto&rev=446519
>> ===================================================================== 
>> =========
>> --- geronimo/sandbox/gcache/openwire/src/main/java/org/apache/ 
>> geronimo/openwire/util/MarshallingSupport.java (added)
>> +++ geronimo/sandbox/gcache/openwire/src/main/java/org/apache/ 
>> geronimo/openwire/util/MarshallingSupport.java Thu Sep 14 21:57:24  
>> 2006
>> @@ -0,0 +1,309 @@
>> +package org.apache.geronimo.openwire.util;
>> +
>> +import java.io.*;
>> +import java.util.*;
>> +
>> +/**
>> + * Copyright 2006 The Apache Software Foundation
>> + * <p/>
>> + * Licensed under the Apache License, Version 2.0 (the "License");
>> + * you may not use this file except in compliance with the License.
>> + * You may obtain a copy of the License at
>> + * <p/>
>> + * http://www.apache.org/licenses/LICENSE-2.0
>> + * <p/>
>> + * Unless required by applicable law or agreed to in writing,  
>> software
>> + * distributed under the License is distributed on an "AS IS" BASIS,
>> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express  
>> or implied.
>> + * See the License for the specific language governing  
>> permissions and
>> + * limitations under the License.
>> + */
>> +public class MarshallingSupport {
>> +
>> +    public static final byte NULL                    = 0;
>> +    public static final byte BOOLEAN_TYPE            = 1;
>> +    public static final byte BYTE_TYPE               = 2;
>> +    public static final byte CHAR_TYPE               = 3;
>> +    public static final byte SHORT_TYPE              = 4;
>> +    public static final byte INTEGER_TYPE            = 5;
>> +    public static final byte LONG_TYPE               = 6;
>> +    public static final byte DOUBLE_TYPE             = 7;
>> +    public static final byte FLOAT_TYPE              = 8;
>> +    public static final byte STRING_TYPE             = 9;
>> +    public static final byte BYTE_ARRAY_TYPE         = 10;
>> +    public static final byte MAP_TYPE                = 11;
>> +    public static final byte LIST_TYPE               = 12;
>> +    public static final byte BIG_STRING_TYPE         = 13;
>> +
>> +    static  public void marshalPrimitiveMap(Map map,  
>> DataOutputStream out) throws IOException {
>> +        if( map == null ) {
>> +            out.writeInt(-1);
>> +        } else {
>> +            out.writeInt(map.size());
>> +            for (Iterator iter = map.keySet().iterator();  
>> iter.hasNext();) {
>> +                String name = (String) iter.next();
>> +                out.writeUTF(name);
>> +                Object value = map.get(name);
>> +                marshalPrimitive(out, value);
>> +            }
>> +        }
>> +    }
>> +
>> +    static public Map unmarshalPrimitiveMap(DataInputStream in)  
>> throws IOException {
>> +        return unmarshalPrimitiveMap(in, Integer.MAX_VALUE);
>> +    }
>> +
>> +    /**
>> +     * @param in
>> +     * @return
>> +     * @throws IOException
>> +     * @throws IOException
>> +     */
>> +    public static Map unmarshalPrimitiveMap(DataInputStream in,  
>> int max_property_size) throws IOException {
>> +        int size = in.readInt();
>> +        if( size > max_property_size ) {
>> +            throw new IOException("Primitive map is larger than  
>> the allowed size: "+size);
>> +        }
>> +        if( size < 0 ) {
>> +            return null;
>> +        } else {
>> +            HashMap rc = new HashMap(size);
>> +            for(int i=0; i < size; i++) {
>> +                String name = in.readUTF();
>> +                rc.put(name, unmarshalPrimitive(in));
>> +            }
>> +            return rc;
>> +        }
>> +
>> +    }
>> +
>> +    public static void marshalPrimitiveList(List list,  
>> DataOutputStream out) throws IOException {
>> +        out.writeInt(list.size());
>> +        for (Iterator iter = list.iterator(); iter.hasNext();) {
>> +            Object element = (Object) iter.next();
>> +            marshalPrimitive(out, element);
>> +        }
>> +    }
>> +
>> +    public static List unmarshalPrimitiveList(DataInputStream in)  
>> throws IOException {
>> +        int size = in.readInt();
>> +        List answer = new ArrayList(size);
>> +        while (size-- > 0) {
>> +            answer.add(unmarshalPrimitive(in));
>> +        }
>> +        return answer;
>> +    }
>> +
>> +    static public void marshalPrimitive(DataOutputStream out,  
>> Object value) throws IOException {
>> +        if( value == null ) {
>> +            out.writeByte(NULL);
>> +        } else if( value.getClass() == Boolean.class ) {
>> +            out.writeByte(BOOLEAN_TYPE);
>> +            out.writeBoolean(((Boolean)value).booleanValue());
>> +        } else if( value.getClass() == Byte.class ) {
>> +            out.writeByte(BYTE_TYPE);
>> +            out.writeByte(((Byte)value).byteValue());
>> +        } else if( value.getClass() == Character.class ) {
>> +            out.writeByte(CHAR_TYPE);
>> +            out.writeChar(((Character)value).charValue());
>> +        } else if( value.getClass() == Short.class ) {
>> +            out.writeByte(SHORT_TYPE);
>> +            out.writeShort(((Short)value).shortValue());
>> +        } else if( value.getClass() == Integer.class ) {
>> +            out.writeByte(INTEGER_TYPE);
>> +            out.writeInt(((Integer)value).intValue());
>> +        } else if( value.getClass() == Long.class ) {
>> +            out.writeByte(LONG_TYPE);
>> +            out.writeLong(((Long)value).longValue());
>> +        } else if( value.getClass() == Float.class ) {
>> +            out.writeByte(FLOAT_TYPE);
>> +            out.writeFloat(((Float)value).floatValue());
>> +        } else if( value.getClass() == Double.class ) {
>> +            out.writeByte(DOUBLE_TYPE);
>> +            out.writeDouble(((Double)value).doubleValue());
>> +        } else if( value.getClass() == byte[].class ) {
>> +            out.writeByte(BYTE_ARRAY_TYPE);
>> +            out.writeInt(((byte[])value).length);
>> +            out.write(((byte[])value));
>> +        } else if( value.getClass() == String.class ) {
>> +            String s = (String)value;
>> +
>> +            // If it's too big, out.writeUTF may not able able to  
>> write it out.
>> +            if( s.length() < Short.MAX_VALUE/4 ) {
>> +                out.writeByte(STRING_TYPE);
>> +                out.writeUTF((String)value);
>> +            } else {
>> +                out.writeByte(BIG_STRING_TYPE);
>> +                writeUTF8(out, s);
>> +            }
>> +
>> +        } else if( value instanceof Map) {
>> +            out.writeByte(MAP_TYPE);
>> +            marshalPrimitiveMap((Map) value, out);
>> +        } else if( value instanceof List) {
>> +            out.writeByte(LIST_TYPE);
>> +            marshalPrimitiveList((List) value, out);
>> +        } else {
>> +            throw new IOException("Object is not a primitive:  
>> "+value);
>> +        }
>> +    }
>> +
>> +
>> +    static public Object unmarshalPrimitive(DataInputStream in)  
>> throws IOException {
>> +        Object value=null;
>> +        switch( in.readByte() ) {
>> +        case BYTE_TYPE:
>> +            value = new Byte(in.readByte());
>> +            break;
>> +        case BOOLEAN_TYPE:
>> +            value = in.readBoolean() ? Boolean.TRUE : Boolean.FALSE;
>> +            break;
>> +        case CHAR_TYPE:
>> +            value = new Character(in.readChar());
>> +            break;
>> +        case SHORT_TYPE:
>> +            value = new Short(in.readShort());
>> +            break;
>> +        case INTEGER_TYPE:
>> +            value = new Integer(in.readInt());
>> +            break;
>> +        case LONG_TYPE:
>> +            value = new Long(in.readLong());
>> +            break;
>> +        case FLOAT_TYPE:
>> +            value = new Float(in.readFloat());
>> +            break;
>> +        case DOUBLE_TYPE:
>> +            value = new Double(in.readDouble());
>> +            break;
>> +        case BYTE_ARRAY_TYPE:
>> +            value = new byte[in.readInt()];
>> +            in.readFully((byte[])value);
>> +            break;
>> +        case STRING_TYPE:
>> +            value = in.readUTF();
>> +            break;
>> +        case BIG_STRING_TYPE:
>> +            value = readUTF8(in);
>> +            break;
>> +        case MAP_TYPE:
>> +            value = unmarshalPrimitiveMap(in);
>> +            break;
>> +        case LIST_TYPE:
>> +            value = unmarshalPrimitiveList(in);
>> +            break;
>> +        }
>> +        return value;
>> +    }
>> +
>> +    static public void writeUTF8(DataOutput dataOut, String text)  
>> throws IOException {
>> +        if (text != null) {
>> +            int strlen = text.length();
>> +            int utflen = 0;
>> +            char[] charr = new char[strlen];
>> +            int c, count = 0;
>> +
>> +            text.getChars(0, strlen, charr, 0);
>> +
>> +            for (int i = 0; i < strlen; i++) {
>> +                c = charr[i];
>> +                if ((c >= 0x0001) && (c <= 0x007F)) {
>> +                    utflen++;
>> +                } else if (c > 0x07FF) {
>> +                    utflen += 3;
>> +                } else {
>> +                    utflen += 2;
>> +                }
>> +            }
>> +            //TODO diff: Sun code - removed
>> +            byte[] bytearr = new byte[utflen + 4]; //TODO diff:  
>> Sun code
>> +            bytearr[count++] = (byte) ((utflen >>> 24) & 0xFF); // 
>> TODO diff: Sun code
>> +            bytearr[count++] = (byte) ((utflen >>> 16) & 0xFF); // 
>> TODO diff: Sun code
>> +            bytearr[count++] = (byte) ((utflen >>> 8) & 0xFF);
>> +            bytearr[count++] = (byte) ((utflen >>> 0) & 0xFF);
>> +            for (int i = 0; i < strlen; i++) {
>> +                c = charr[i];
>> +                if ((c >= 0x0001) && (c <= 0x007F)) {
>> +                    bytearr[count++] = (byte) c;
>> +                } else if (c > 0x07FF) {
>> +                    bytearr[count++] = (byte) (0xE0 | ((c >> 12)  
>> & 0x0F));
>> +                    bytearr[count++] = (byte) (0x80 | ((c >> 6) &  
>> 0x3F));
>> +                    bytearr[count++] = (byte) (0x80 | ((c >> 0) &  
>> 0x3F));
>> +                } else {
>> +                    bytearr[count++] = (byte) (0xC0 | ((c >> 6) &  
>> 0x1F));
>> +                    bytearr[count++] = (byte) (0x80 | ((c >> 0) &  
>> 0x3F));
>> +                }
>> +            }
>> +            dataOut.write(bytearr);
>> +
>> +        } else {
>> +            dataOut.writeInt(-1);
>> +        }
>> +    }
>> +
>> +    static public String readUTF8(DataInput dataIn) throws  
>> IOException {
>> +        int utflen = dataIn.readInt(); //TODO diff: Sun code
>> +        if (utflen > -1) {
>> +            StringBuffer str = new StringBuffer(utflen);
>> +            byte bytearr[] = new byte[utflen];
>> +            int c, char2, char3;
>> +            int count = 0;
>> +
>> +            dataIn.readFully(bytearr, 0, utflen);
>> +
>> +            while (count < utflen) {
>> +                c = bytearr[count] & 0xff;
>> +                switch (c >> 4) {
>> +                    case 0:
>> +                    case 1:
>> +                    case 2:
>> +                    case 3:
>> +                    case 4:
>> +                    case 5:
>> +                    case 6:
>> +                    case 7:
>> +                        /* 0xxxxxxx */
>> +                        count++;
>> +                        str.append((char) c);
>> +                        break;
>> +                    case 12:
>> +                    case 13:
>> +                        /* 110x xxxx 10xx xxxx */
>> +                        count += 2;
>> +                        if (count > utflen) {
>> +                            throw new UTFDataFormatException();
>> +                        }
>> +                        char2 = bytearr[count - 1];
>> +                        if ((char2 & 0xC0) != 0x80) {
>> +                            throw new UTFDataFormatException();
>> +                        }
>> +                        str.append((char) (((c & 0x1F) << 6) |  
>> (char2 & 0x3F)));
>> +                        break;
>> +                    case 14:
>> +                        /* 1110 xxxx 10xx xxxx 10xx xxxx */
>> +                        count += 3;
>> +                        if (count > utflen) {
>> +                            throw new UTFDataFormatException();
>> +                        }
>> +                        char2 = bytearr[count - 2]; //TODO diff:  
>> Sun code
>> +                        char3 = bytearr[count - 1]; //TODO diff:  
>> Sun code
>> +                        if (((char2 & 0xC0) != 0x80) || ((char3 &  
>> 0xC0) != 0x80)) {
>> +                            throw new UTFDataFormatException();
>> +                        }
>> +                        str.append((char) (((c & 0x0F) << 12) |  
>> ((char2 & 0x3F) << 6) | ((char3 & 0x3F) << 0)));
>> +                        break;
>> +                    default :
>> +                        /* 10xx xxxx, 1111 xxxx */
>> +                        throw new UTFDataFormatException();
>> +                }
>> +            }
>> +            // The number of chars produced may be less than utflen
>> +            return new String(str);
>> +        } else {
>> +            return null;
>> +        }
>> +    }
>> +
>> +
>> +}
>> +
>>
>> Propchange: geronimo/sandbox/gcache/openwire/src/main/java/org/ 
>> apache/geronimo/openwire/util/MarshallingSupport.java
>> --------------------------------------------------------------------- 
>> ---------
>>     svn:eol-style = native
>>
>> Propchange: geronimo/sandbox/gcache/openwire/src/main/java/org/ 
>> apache/geronimo/openwire/util/MarshallingSupport.java
>> --------------------------------------------------------------------- 
>> ---------
>>     svn:keywords = Date Revision
>>
>> Propchange: geronimo/sandbox/gcache/openwire/src/main/java/org/ 
>> apache/geronimo/openwire/util/MarshallingSupport.java
>> --------------------------------------------------------------------- 
>> ---------
>>     svn:mime-type = text/plain
>>
>> Added: geronimo/sandbox/gcache/openwire/src/main/java/org/apache/ 
>> geronimo/openwire/util/ServiceStopper.java
>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/gcache/openwire/ 
>> src/main/java/org/apache/geronimo/openwire/util/ 
>> ServiceStopper.java?view=auto&rev=446519
>> ===================================================================== 
>> =========
>> --- geronimo/sandbox/gcache/openwire/src/main/java/org/apache/ 
>> geronimo/openwire/util/ServiceStopper.java (added)
>> +++ geronimo/sandbox/gcache/openwire/src/main/java/org/apache/ 
>> geronimo/openwire/util/ServiceStopper.java Thu Sep 14 21:57:24 2006
>> @@ -0,0 +1,97 @@
>> +package org.apache.geronimo.openwire.util;
>> +
>> +import org.apache.geronimo.openwire.Service;
>> +import org.apache.commons.logging.LogFactory;
>> +import org.apache.commons.logging.Log;
>> +
>> +import java.util.Iterator;
>> +import java.util.List;
>> +
>> +/**
>> + * Copyright 2006 The Apache Software Foundation
>> + * <p/>
>> + * Licensed under the Apache License, Version 2.0 (the "License");
>> + * you may not use this file except in compliance with the License.
>> + * You may obtain a copy of the License at
>> + * <p/>
>> + * http://www.apache.org/licenses/LICENSE-2.0
>> + * <p/>
>> + * Unless required by applicable law or agreed to in writing,  
>> software
>> + * distributed under the License is distributed on an "AS IS" BASIS,
>> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express  
>> or implied.
>> + * See the License for the specific language governing  
>> permissions and
>> + * limitations under the License.
>> + */
>> +public class ServiceStopper {
>> +    private Throwable firstException;
>> +
>> +     /**
>> +      * Stops the given service, catching any exceptions that are  
>> thrown.
>> +      */
>> +     public void stop(Service service) {
>> +         try {
>> +             if( service!=null ) {
>> +                 service.stop();
>> +             }
>> +         }
>> +         catch (Exception e) {
>> +             onException(service, e);
>> +         }
>> +     }
>> +
>> +     /**
>> +      * Performs the given code to stop some service handling the  
>> exceptions
>> +      * which may be thrown properly
>> +      */
>> +     public void run(Callback stopClosure) {
>> +         try {
>> +             stopClosure.execute();
>> +         }
>> +         catch (Throwable e) {
>> +             onException(stopClosure, e);
>> +         }
>> +     }
>> +
>> +     /**
>> +      * Stops a list of services
>> +      */
>> +     public void stopServices(List services) {
>> +         for (Iterator iter = services.iterator(); iter.hasNext 
>> ();) {
>> +             Service service = (Service) iter.next();
>> +             stop(service);
>> +         }
>> +     }
>> +
>> +     public void onException(Object owner, Throwable e) {
>> +         logError(owner, e);
>> +         if (firstException == null) {
>> +             firstException = e;
>> +         }
>> +     }
>> +
>> +     /**
>> +      * Throws the first exception that was thrown if there was one.
>> +      */
>> +     public void throwFirstException() throws Exception {
>> +         if (firstException != null) {
>> +             if (firstException instanceof Exception) {
>> +                 Exception e = (Exception) firstException;
>> +                 throw e;
>> +             }
>> +             else if (firstException instanceof RuntimeException) {
>> +                 RuntimeException e = (RuntimeException)  
>> firstException;
>> +                 throw e;
>> +             }
>> +             else {
>> +                 throw new RuntimeException("Unknown type of  
>> exception: " + firstException, firstException);
>> +             }
>> +         }
>> +     }
>> +
>> +     protected void logError(Object service, Throwable e) {
>> +         Log log = LogFactory.getLog(service.getClass());
>> +         log.error("Could not stop service: " + service + ".  
>> Reason: " + e, e);
>> +     }
>> +
>> +
>> +}
>>
>> Propchange: geronimo/sandbox/gcache/openwire/src/main/java/org/ 
>> apache/geronimo/openwire/util/ServiceStopper.java
>> --------------------------------------------------------------------- 
>> ---------
>>     svn:eol-style = native
>>
>> Propchange: geronimo/sandbox/gcache/openwire/src/main/java/org/ 
>> apache/geronimo/openwire/util/ServiceStopper.java
>> --------------------------------------------------------------------- 
>> ---------
>>     svn:keywords = Date Revision
>>
>> Propchange: geronimo/sandbox/gcache/openwire/src/main/java/org/ 
>> apache/geronimo/openwire/util/ServiceStopper.java
>> --------------------------------------------------------------------- 
>> ---------
>>     svn:mime-type = text/plain
>>
>> Added: geronimo/sandbox/gcache/openwire/src/main/java/org/apache/ 
>> geronimo/openwire/util/ServiceSupport.java
>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/gcache/openwire/ 
>> src/main/java/org/apache/geronimo/openwire/util/ 
>> ServiceSupport.java?view=auto&rev=446519
>> ===================================================================== 
>> =========
>> --- geronimo/sandbox/gcache/openwire/src/main/java/org/apache/ 
>> geronimo/openwire/util/ServiceSupport.java (added)
>> +++ geronimo/sandbox/gcache/openwire/src/main/java/org/apache/ 
>> geronimo/openwire/util/ServiceSupport.java Thu Sep 14 21:57:24 2006
>> @@ -0,0 +1,88 @@
>> +package org.apache.geronimo.openwire.util;
>> +
>> +import  
>> edu.emory.mathcs.backport.java.util.concurrent.atomic.AtomicBoolean;
>> +import org.apache.geronimo.openwire.Service;
>> +import org.apache.commons.logging.Log;
>> +import org.apache.commons.logging.LogFactory;
>> +
>> +/**
>> + * Copyright 2006 The Apache Software Foundation
>> + * <p/>
>> + * Licensed under the Apache License, Version 2.0 (the "License");
>> + * you may not use this file except in compliance with the License.
>> + * You may obtain a copy of the License at
>> + * <p/>
>> + * http://www.apache.org/licenses/LICENSE-2.0
>> + * <p/>
>> + * Unless required by applicable law or agreed to in writing,  
>> software
>> + * distributed under the License is distributed on an "AS IS" BASIS,
>> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express  
>> or implied.
>> + * See the License for the specific language governing  
>> permissions and
>> + * limitations under the License.
>> + */
>> +public abstract class ServiceSupport implements Service {
>> +    private static final Log log = LogFactory.getLog 
>> (ServiceSupport.class);
>> +
>> +    private AtomicBoolean started = new AtomicBoolean(false);
>> +    private AtomicBoolean stopping = new AtomicBoolean(false);
>> +    private AtomicBoolean stopped = new AtomicBoolean(false);
>> +
>> +    public static void dispose(Service service) {
>> +        try {
>> +            service.stop();
>> +        }
>> +        catch (Exception e) {
>> +            log.debug("Could not stop service: " + service + ".  
>> Reason: " + e, e);
>> +        }
>> +    }
>> +
>> +    public void start() throws Exception {
>> +        if (started.compareAndSet(false, true)) {
>> +            doStart();
>> +        }
>> +    }
>> +
>> +    public void stop() throws Exception {
>> +        if (stopped.compareAndSet(false, true)) {
>> +            stopping.set(true);
>> +            ServiceStopper stopper = new ServiceStopper();
>> +            try {
>> +                doStop(stopper);
>> +            }
>> +            catch (Exception e) {
>> +                stopper.onException(this, e);
>> +            }
>> +            stopped.set(true);
>> +            started.set(false);
>> +            stopping.set(false);
>> +            stopper.throwFirstException();
>> +        }
>> +    }
>> +
>> +    /**
>> +     * @return true if this service has been started
>> +     */
>> +    public boolean isStarted() {
>> +        return started.get();
>> +    }
>> +
>> +    /**
>> +     * @return true if this service is in the process of closing
>> +     */
>> +    public boolean isStopping() {
>> +        return stopping.get();
>> +    }
>> +
>> +
>> +    /**
>> +     * @return true if this service is closed
>> +     */
>> +    public boolean isStopped() {
>> +        return stopped.get();
>> +    }
>> +
>> +    protected abstract void doStop(ServiceStopper stopper) throws  
>> Exception;
>> +
>> +    protected abstract void doStart() throws Exception;
>> +}
>> +
>>
>> Propchange: geronimo/sandbox/gcache/openwire/src/main/java/org/ 
>> apache/geronimo/openwire/util/ServiceSupport.java
>> --------------------------------------------------------------------- 
>> ---------
>>     svn:eol-style = native
>>
>> Propchange: geronimo/sandbox/gcache/openwire/src/main/java/org/ 
>> apache/geronimo/openwire/util/ServiceSupport.java
>> --------------------------------------------------------------------- 
>> ---------
>>     svn:keywords = Date Revision
>>
>> Propchange: geronimo/sandbox/gcache/openwire/src/main/java/org/ 
>> apache/geronimo/openwire/util/ServiceSupport.java
>> --------------------------------------------------------------------- 
>> ---------
>>     svn:mime-type = text/plain
>>
>> Added: geronimo/sandbox/gcache/openwire/src/main/java/org/apache/ 
>> geronimo/openwire/util/URISupport.java
>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/gcache/openwire/ 
>> src/main/java/org/apache/geronimo/openwire/util/URISupport.java? 
>> view=auto&rev=446519
>> ===================================================================== 
>> =========
>> --- geronimo/sandbox/gcache/openwire/src/main/java/org/apache/ 
>> geronimo/openwire/util/URISupport.java (added)
>> +++ geronimo/sandbox/gcache/openwire/src/main/java/org/apache/ 
>> geronimo/openwire/util/URISupport.java Thu Sep 14 21:57:24 2006
>> @@ -0,0 +1,295 @@
>> +package org.apache.geronimo.openwire.util;
>> +
>> +import java.net.URI;
>> +import java.net.URISyntaxException;
>> +import java.net.URLDecoder;
>> +import java.net.URLEncoder;
>> +import java.util.*;
>> +import java.io.UnsupportedEncodingException;
>> +
>> +/**
>> + * Copyright 2006 The Apache Software Foundation
>> + * <p/>
>> + * Licensed under the Apache License, Version 2.0 (the "License");
>> + * you may not use this file except in compliance with the License.
>> + * You may obtain a copy of the License at
>> + * <p/>
>> + * http://www.apache.org/licenses/LICENSE-2.0
>> + * <p/>
>> + * Unless required by applicable law or agreed to in writing,  
>> software
>> + * distributed under the License is distributed on an "AS IS" BASIS,
>> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express  
>> or implied.
>> + * See the License for the specific language governing  
>> permissions and
>> + * limitations under the License.
>> + */
>> +public class URISupport {
>> +
>> +    public static class CompositeData {
>> +        String scheme;
>> +        String path;
>> +        URI components[];
>> +        Map parameters;
>> +        String fragment;
>> +        public String host;
>> +
>> +        public URI[] getComponents() {
>> +            return components;
>> +        }
>> +        public String getFragment() {
>> +            return fragment;
>> +        }
>> +        public Map getParameters() {
>> +            return parameters;
>> +        }
>> +        public String getScheme() {
>> +            return scheme;
>> +        }
>> +        public String getPath() {
>> +            return path;
>> +        }
>> +        public String getHost() {
>> +            return host;
>> +        }
>> +
>> +        public URI toURI() throws URISyntaxException {
>> +            StringBuffer sb = new StringBuffer();
>> +            if( scheme!=null ) {
>> +                sb.append(scheme);
>> +                sb.append(':');
>> +            }
>> +
>> +            if( host!=null && host.length()!=0 ) {
>> +                sb.append(host);
>> +            } else {
>> +                sb.append('(');
>> +                for (int i = 0; i < components.length; i++) {
>> +                    if( i!=0 )
>> +                        sb.append(',');
>> +                    sb.append(components[i].toString());
>> +                }
>> +                sb.append(')');
>> +            }
>> +
>> +            if( path !=null ) {
>> +                sb.append('/');
>> +                sb.append(path);
>> +            }
>> +            if(!parameters.isEmpty()) {
>> +                sb.append("?");
>> +                sb.append(createQueryString(parameters));
>> +            }
>> +            if( fragment!=null ) {
>> +                sb.append("#");
>> +                sb.append(fragment);
>> +            }
>> +            return new URI(sb.toString());
>> +        }
>> +    }
>> +
>> +    public static Map parseQuery(String uri) throws  
>> URISyntaxException{
>> +        try{
>> +            Map rc=new HashMap();
>> +            if(uri!=null){
>> +                String[] parameters=uri.split("&");
>> +                for(int i=0;i<parameters.length;i++){
>> +                    int p=parameters[i].indexOf("=");
>> +                    if(p>=0){
>> +                        String name= URLDecoder.decode(parameters 
>> [i].substring(0,p),"UTF-8");
>> +                        String value=URLDecoder.decode(parameters 
>> [i].substring(p+1),"UTF-8");
>> +                        rc.put(name,value);
>> +                    }else{
>> +                        rc.put(parameters[i],null);
>> +                    }
>> +                }
>> +            }
>> +            return rc;
>> +        }catch(UnsupportedEncodingException e){
>> +            throw (URISyntaxException) new URISyntaxException 
>> (e.toString(),"Invalid encoding").initCause(e);
>> +        }
>> +    }
>> +
>> +    public static Map parseParamters(URI uri) throws  
>> URISyntaxException {
>> +        return uri.getQuery()==null ? Collections.EMPTY_MAP :  
>> parseQuery(stripPrefix(uri.getQuery(), "?"));
>> +    }
>> +
>> +    /**
>> +     * Removes any URI query from the given uri
>> +     */
>> +    public static URI removeQuery(URI uri) throws  
>> URISyntaxException {
>> +        return createURIWithQuery(uri, null);
>> +    }
>> +
>> +    /**
>> +     * Creates a URI with the given query
>> +     */
>> +    public static URI createURIWithQuery(URI uri, String query)  
>> throws URISyntaxException {
>> +        return new URI(uri.getScheme(), uri.getUserInfo(),  
>> uri.getHost(), uri.getPort(), uri.getPath(), query, uri.getFragment 
>> ());
>> +    }
>> +
>> +    public static CompositeData parseComposite(URI uri) throws  
>> URISyntaxException {
>> +
>> +        CompositeData rc = new CompositeData();
>> +        rc.scheme = uri.getScheme();
>> +        String ssp = stripPrefix(uri.getSchemeSpecificPart().trim 
>> (), "//").trim();
>> +
>> +        parseComposite(uri, rc, ssp);
>> +
>> +        rc.fragment = uri.getFragment();
>> +        return rc;
>> +    }
>> +
>> +    private static void parseComposite(URI uri, CompositeData rc,  
>> String ssp) throws URISyntaxException {
>> +        String componentString;
>> +        String params;
>> +
>> +        if(!checkParenthesis(ssp)){
>> +            throw new URISyntaxException(uri.toString(), "Not a  
>> matching number of '(' and ')' parenthesis");
>> +        }
>> +
>> +        int p;
>> +        int intialParen = ssp.indexOf("(");
>> +        if( intialParen==0 ) {
>> +            rc.host = ssp.substring(0, intialParen);
>> +            p = rc.host.indexOf("/");
>> +            if( p >= 0 ) {
>> +                rc.path = rc.host.substring(p);
>> +                rc.host = rc.host.substring(0,p);
>> +            }
>> +            p = ssp.lastIndexOf(")");
>> +            componentString = ssp.substring(intialParen+1,p);
>> +            params = ssp.substring(p+1).trim();
>> +
>> +        } else {
>> +            componentString = ssp;
>> +            params="";
>> +        }
>> +
>> +        String components[] = splitComponents(componentString);
>> +        rc.components=new URI[components.length];
>> +        for (int i = 0; i < components.length; i++) {
>> +            rc.components[i] = new URI(components[i].trim());
>> +        }
>> +
>> +        p = params.indexOf("?");
>> +        if( p >= 0 ) {
>> +            if( p > 0) {
>> +                rc.path = stripPrefix(params.substring(0, p), "/");
>> +            }
>> +            rc.parameters = parseQuery(params.substring(p+1));
>> +        } else {
>> +            if( params.length() > 0 )
>> +                rc.path = stripPrefix(params, "/");
>> +            rc.parameters = Collections.EMPTY_MAP;
>> +        }
>> +    }
>> +
>> +    private static String[] splitComponents(String str) {
>> +        ArrayList l = new ArrayList();
>> +
>> +        int last=0;
>> +        int depth = 0;
>> +        char chars[] = str.toCharArray();
>> +        for( int i=0; i < chars.length; i ++ ) {
>> +            switch( chars[i] ) {
>> +            case '(':
>> +                depth++;
>> +                break;
>> +            case ')':
>> +                depth--;
>> +                break;
>> +            case ',':
>> +                if( depth == 0 ) {
>> +                    String s = str.substring(last, i);
>> +                    l.add(s);
>> +                    last=i+1;
>> +                }
>> +            }
>> +        }
>> +
>> +        String s = str.substring(last);
>> +        if( s.length() !=0 )
>> +            l.add(s);
>> +
>> +        String rc[] = new String[l.size()];
>> +        l.toArray(rc);
>> +        return rc;
>> +    }
>> +
>> +    public static String stripPrefix(String value, String prefix) {
>> +        if( value.startsWith(prefix) )
>> +            return value.substring(prefix.length());
>> +        return value;
>> +    }
>> +
>> +    public static URI stripScheme(URI uri) throws  
>> URISyntaxException {
>> +        return new URI(stripPrefix(uri.getSchemeSpecificPart 
>> ().trim(), "//"));
>> +    }
>> +
>> +    public static String createQueryString(Map options) throws  
>> URISyntaxException {
>> +        try {
>> +            if(options.size()>0) {
>> +                StringBuffer rc = new StringBuffer();
>> +                boolean first=true;
>> +                for (Iterator iter = options.keySet().iterator();  
>> iter.hasNext();) {
>> +                    if( first )
>> +                        first=false;
>> +                    else
>> +                        rc.append("&");
>> +
>> +                    String key = (String) iter.next();
>> +                    String value = (String)options.get(key);
>> +                    rc.append(URLEncoder.encode(key, "UTF-8"));
>> +                    rc.append("=");
>> +                    rc.append(URLEncoder.encode(value, "UTF-8"));
>> +                }
>> +                return rc.toString();
>> +            } else {
>> +                return "";
>> +            }
>> +        } catch (UnsupportedEncodingException e) {
>> +            throw (URISyntaxException)new URISyntaxException 
>> (e.toString(), "Invalid encoding").initCause(e);
>> +        }
>> +    }
>> +
>> +    /**
>> +     * Creates a URI from the original URI and the remaining  
>> paramaters
>> +     * @throws URISyntaxException
>> +     */
>> +    public static URI createRemainingURI(URI originalURI, Map  
>> params) throws URISyntaxException {
>> +        String s = createQueryString(params);
>> +        if( s.length()==0 )
>> +            s = null;
>> +        return createURIWithQuery(originalURI, s);
>> +    }
>> +
>> +    static public URI changeScheme(URI bindAddr, String scheme)  
>> throws URISyntaxException {
>> +        return new URI(scheme, bindAddr.getUserInfo(),  
>> bindAddr.getHost(), bindAddr.getPort(), bindAddr.getPath(),  
>> bindAddr.getQuery(), bindAddr.getFragment());
>> +    }
>> +
>> +    public static boolean checkParenthesis(String str){
>> +        boolean result=true;
>> +        if(str!=null){
>> +            int open=0;
>> +            int closed=0;
>> +
>> +            int i=0;
>> +            while((i=str.indexOf('(',i)) >=0 ){
>> +                i++;
>> +                open++;
>> +            }
>> +            i=0;
>> +            while((i=str.indexOf(')',i)) >=0 ){
>> +                i++;
>> +                closed++;
>> +            }
>> +            result = open == closed;
>> +        }
>> +        return result;
>> +    }
>> +
>> +    public int indexOfParenthesisMatch(String str){
>> +        int result = -1;
>> +
>> +        return result;
>> +    }
>> +}
>>
>> Propchange: geronimo/sandbox/gcache/openwire/src/main/java/org/ 
>> apache/geronimo/openwire/util/URISupport.java
>> --------------------------------------------------------------------- 
>> ---------
>>     svn:eol-style = native
>>
>> Propchange: geronimo/sandbox/gcache/openwire/src/main/java/org/ 
>> apache/geronimo/openwire/util/URISupport.java
>> --------------------------------------------------------------------- 
>> ---------
>>     svn:keywords = Date Revision
>>
>> Propchange: geronimo/sandbox/gcache/openwire/src/main/java/org/ 
>> apache/geronimo/openwire/util/URISupport.java
>> --------------------------------------------------------------------- 
>> ---------
>>     svn:mime-type = text/plain
>>
>> Added: geronimo/sandbox/gcache/openwire/src/main/java/org/apache/ 
>> geronimo/openwire/wireformat/ObjectStreamWireFormat.java
>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/gcache/openwire/ 
>> src/main/java/org/apache/geronimo/openwire/wireformat/ 
>> ObjectStreamWireFormat.java?view=auto&rev=446519
>> ===================================================================== 
>> =========
>> --- geronimo/sandbox/gcache/openwire/src/main/java/org/apache/ 
>> geronimo/openwire/wireformat/ObjectStreamWireFormat.java (added)
>> +++ geronimo/sandbox/gcache/openwire/src/main/java/org/apache/ 
>> geronimo/openwire/wireformat/ObjectStreamWireFormat.java Thu Sep  
>> 14 21:57:24 2006
>> @@ -0,0 +1,75 @@
>> +/**
>> + *
>> + * Licensed to the Apache Software Foundation (ASF) under one or  
>> more
>> + * contributor license agreements.  See the NOTICE file  
>> distributed with
>> + * this work for additional information regarding copyright  
>> ownership.
>> + * The ASF licenses this file to You under the Apache License,  
>> Version 2.0
>> + * (the "License"); you may not use this file except in  
>> compliance with
>> + * the License.  You may obtain a copy of the License at
>> + *
>> + * http://www.apache.org/licenses/LICENSE-2.0
>> + *
>> + * Unless required by applicable law or agreed to in writing,  
>> software
>> + * distributed under the License is distributed on an "AS IS" BASIS,
>> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express  
>> or implied.
>> + * See the License for the specific language governing  
>> permissions and
>> + * limitations under the License.
>> + */
>> +package org.apache.geronimo.openwire.wireformat;
>> +
>> +import java.io.DataInputStream;
>> +import java.io.DataOutputStream;
>> +import java.io.IOException;
>> +import java.io.ObjectOutputStream;
>> +
>> +import org.apache.geronimo.openwire.util.ByteSequence;
>> +import org.apache.geronimo.openwire.util.ByteArrayOutputStream;
>> +import org.apache.geronimo.openwire.util.ByteArrayInputStream;
>> +import  
>> org.apache.geronimo.openwire.util.ClassLoadingAwareObjectInputStream;
>> +
>> +/**
>> + * A simple implementation which uses Object Stream serialization.
>> + *
>> + * @version $Revision$
>> + */
>> +public class ObjectStreamWireFormat implements WireFormat {
>> +
>> +    public ByteSequence marshal(Object command) throws IOException {
>> +        ByteArrayOutputStream baos = new ByteArrayOutputStream();
>> +        DataOutputStream ds = new DataOutputStream(baos);
>> +        marshal(command, ds);
>> +        ds.close();
>> +        return baos.toByteSequence();
>> +    }
>> +
>> +    public Object unmarshal(ByteSequence packet) throws  
>> IOException {
>> +        return unmarshal(new DataInputStream(new  
>> ByteArrayInputStream(packet)));
>> +    }
>> +
>> +    public void marshal(Object command, DataOutputStream ds)  
>> throws IOException {
>> +        ObjectOutputStream out = new ObjectOutputStream(ds);
>> +        out.writeObject(command);
>> +        out.flush();
>> +        out.reset();
>> +    }
>> +
>> +    public Object unmarshal(DataInputStream ds) throws IOException {
>> +        try {
>> +            ClassLoadingAwareObjectInputStream in = new  
>> ClassLoadingAwareObjectInputStream(ds);
>> +            Object command;
>> +            command = in.readObject();
>> +            in.close();
>> +            return command;
>> +        } catch (ClassNotFoundException e) {
>> +            throw (IOException)new IOException("unmarshal failed:  
>> "+e).initCause(e);
>> +        }
>> +    }
>> +
>> +    public void setVersion(int version) {
>> +    }
>> +
>> +    public int getVersion() {
>> +        return 0;
>> +    }
>> +
>> +}
>>
>> Propchange: geronimo/sandbox/gcache/openwire/src/main/java/org/ 
>> apache/geronimo/openwire/wireformat/ObjectStreamWireFormat.java
>> --------------------------------------------------------------------- 
>> ---------
>>     svn:eol-style = native
>>
>> Propchange: geronimo/sandbox/gcache/openwire/src/main/java/org/ 
>> apache/geronimo/openwire/wireformat/ObjectStreamWireFormat.java
>> --------------------------------------------------------------------- 
>> ---------
>>     svn:keywords = Date Revision
>>
>> Propchange: geronimo/sandbox/gcache/openwire/src/main/java/org/ 
>> apache/geronimo/openwire/wireformat/ObjectStreamWireFormat.java
>> --------------------------------------------------------------------- 
>> ---------
>>     svn:mime-type = text/plain
>>
>> Added: geronimo/sandbox/gcache/openwire/src/main/java/org/apache/ 
>> geronimo/openwire/wireformat/WireFormat.java
>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/gcache/openwire/ 
>> src/main/java/org/apache/geronimo/openwire/wireformat/ 
>> WireFormat.java?view=auto&rev=446519
>> ===================================================================== 
>> =========
>> --- geronimo/sandbox/gcache/openwire/src/main/java/org/apache/ 
>> geronimo/openwire/wireformat/WireFormat.java (added)
>> +++ geronimo/sandbox/gcache/openwire/src/main/java/org/apache/ 
>> geronimo/openwire/wireformat/WireFormat.java Thu Sep 14 21:57:24 2006
>> @@ -0,0 +1,65 @@
>> +/**
>> + *
>> + * Licensed to the Apache Software Foundation (ASF) under one or  
>> more
>> + * contributor license agreements.  See the NOTICE file  
>> distributed with
>> + * this work for additional information regarding copyright  
>> ownership.
>> + * The ASF licenses this file to You under the Apache License,  
>> Version 2.0
>> + * (the "License"); you may not use this file except in  
>> compliance with
>> + * the License.  You may obtain a copy of the License at
>> + *
>> + * http://www.apache.org/licenses/LICENSE-2.0
>> + *
>> + * Unless required by applicable law or agreed to in writing,  
>> software
>> + * distributed under the License is distributed on an "AS IS" BASIS,
>> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express  
>> or implied.
>> + * See the License for the specific language governing  
>> permissions and
>> + * limitations under the License.
>> + */
>> +package org.apache.geronimo.openwire.wireformat;
>> +
>> +import java.io.DataInputStream;
>> +import java.io.DataOutputStream;
>> +import java.io.IOException;
>> +
>> +import org.apache.geronimo.openwire.util.ByteSequence;
>> +
>> +
>> +/**
>> + * Provides a mechanism to marshal commands into and out of packets
>> + * or into and out of streams, Channels and Datagrams.
>> + *
>> + * @version $Revision$
>> + */
>> +public interface WireFormat {
>> +
>> +    /**
>> +     * Packet based marshaling
>> +     */
>> +    ByteSequence marshal(Object command) throws IOException;
>> +
>> +    /**
>> +     * Packet based un-marshaling
>> +     */
>> +    Object unmarshal(ByteSequence packet) throws IOException;
>> +
>> +    /**
>> +     * Stream based marshaling
>> +     */
>> +    void marshal(Object command, DataOutputStream out) throws  
>> IOException;
>> +
>> +    /**
>> +     * Packet based un-marshaling
>> +     */
>> +    Object unmarshal(DataInputStream in) throws IOException;
>> +
>> +    /**
>> +     * @param version - the version of the wire format
>> +     */
>> +    public void setVersion(int version);
>> +
>> +    /**
>> +     * @return the version of the wire format
>> +     */
>> +    public int getVersion();
>> +
>> +}
>>
>> Propchange: geronimo/sandbox/gcache/openwire/src/main/java/org/ 
>> apache/geronimo/openwire/wireformat/WireFormat.java
>> --------------------------------------------------------------------- 
>> ---------
>>     svn:eol-style = native
>>
>> Propchange: geronimo/sandbox/gcache/openwire/src/main/java/org/ 
>> apache/geronimo/openwire/wireformat/WireFormat.java
>> --------------------------------------------------------------------- 
>> ---------
>>     svn:keywords = Date Revision
>>
>> Propchange: geronimo/sandbox/gcache/openwire/src/main/java/org/ 
>> apache/geronimo/openwire/wireformat/WireFormat.java
>> --------------------------------------------------------------------- 
>> ---------
>>     svn:mime-type = text/plain
>>
>> Added: geronimo/sandbox/gcache/openwire/src/main/java/org/apache/ 
>> geronimo/openwire/wireformat/WireFormatFactory.java
>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/gcache/openwire/ 
>> src/main/java/org/apache/geronimo/openwire/wireformat/ 
>> WireFormatFactory.java?view=auto&rev=446519
>> ===================================================================== 
>> =========
>> --- geronimo/sandbox/gcache/openwire/src/main/java/org/apache/ 
>> geronimo/openwire/wireformat/WireFormatFactory.java (added)
>> +++ geronimo/sandbox/gcache/openwire/src/main/java/org/apache/ 
>> geronimo/openwire/wireformat/WireFormatFactory.java Thu Sep 14  
>> 21:57:24 2006
>> @@ -0,0 +1,22 @@
>> +/**
>> + *
>> + * Licensed to the Apache Software Foundation (ASF) under one or  
>> more
>> + * contributor license agreements.  See the NOTICE file  
>> distributed with
>> + * this work for additional information regarding copyright  
>> ownership.
>> + * The ASF licenses this file to You under the Apache License,  
>> Version 2.0
>> + * (the "License"); you may not use this file except in  
>> compliance with
>> + * the License.  You may obtain a copy of the License at
>> + *
>> + * http://www.apache.org/licenses/LICENSE-2.0
>> + *
>> + * Unless required by applicable law or agreed to in writing,  
>> software
>> + * distributed under the License is distributed on an "AS IS" BASIS,
>> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express  
>> or implied.
>> + * See the License for the specific language governing  
>> permissions and
>> + * limitations under the License.
>> + */
>> +package org.apache.geronimo.openwire.wireformat;
>> +
>> +public interface WireFormatFactory {
>> +    WireFormat createWireFormat();
>> +}
>>
>> Propchange: geronimo/sandbox/gcache/openwire/src/main/java/org/ 
>> apache/geronimo/openwire/wireformat/WireFormatFactory.java
>> --------------------------------------------------------------------- 
>> ---------
>>     svn:eol-style = native
>>
>> Propchange: geronimo/sandbox/gcache/openwire/src/main/java/org/ 
>> apache/geronimo/openwire/wireformat/WireFormatFactory.java
>> --------------------------------------------------------------------- 
>> ---------
>>     svn:keywords = Date Revision
>>
>> Propchange: geronimo/sandbox/gcache/openwire/src/main/java/org/ 
>> apache/geronimo/openwire/wireformat/WireFormatFactory.java
>> --------------------------------------------------------------------- 
>> ---------
>>     svn:mime-type = text/plain
>>
>> Modified: geronimo/sandbox/gcache/pom.xml
>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/gcache/pom.xml? 
>> view=diff&rev=446519&r1=446518&r2=446519
>> ===================================================================== 
>> =========
>> --- geronimo/sandbox/gcache/pom.xml (original)
>> +++ geronimo/sandbox/gcache/pom.xml Thu Sep 14 21:57:24 2006
>> @@ -17,6 +17,7 @@
>>      </scm>
>>
>>      <modules>
>> +        <module>openwire</module>
>>          <module>client</module>
>>          <module>server</module>
>>      </modules>
>> @@ -42,6 +43,12 @@
>>                  <groupId>backport-util-concurrent</groupId>
>>                  <artifactId>backport-util-concurrent</artifactId>
>>                  <version>2.0_01_pd</version>
>> +            </dependency>
>> +
>> +            <dependency>
>> +                <groupId>commons-logging</groupId>
>> +                <artifactId>commons-logging</artifactId>
>> +                <version>1.0.4</version>
>>              </dependency>
>>
>>              <dependency>
>>
>>
>


Mime
View raw message