Return-Path: Delivered-To: apmail-geronimo-scm-archive@www.apache.org Received: (qmail 46074 invoked from network); 15 Jan 2006 23:36:47 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 15 Jan 2006 23:36:47 -0000 Received: (qmail 9236 invoked by uid 500); 15 Jan 2006 23:36:47 -0000 Delivered-To: apmail-geronimo-scm-archive@geronimo.apache.org Received: (qmail 9228 invoked by uid 500); 15 Jan 2006 23:36:47 -0000 Mailing-List: contact scm-help@geronimo.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: List-Post: Reply-To: dev@geronimo.apache.org List-Id: Delivered-To: mailing list scm@geronimo.apache.org Received: (qmail 9217 invoked by uid 99); 15 Jan 2006 23:36:47 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 15 Jan 2006 15:36:47 -0800 X-ASF-Spam-Status: No, hits=-9.4 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [209.237.227.194] (HELO minotaur.apache.org) (209.237.227.194) by apache.org (qpsmtpd/0.29) with SMTP; Sun, 15 Jan 2006 15:36:45 -0800 Received: (qmail 46035 invoked by uid 65534); 15 Jan 2006 23:36:25 -0000 Message-ID: <20060115233625.46034.qmail@minotaur.apache.org> Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r369280 - /geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/ Date: Sun, 15 Jan 2006 23:36:20 -0000 To: scm@geronimo.apache.org From: jstrachan@apache.org X-Mailer: svnmailer-1.0.5 X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N Author: jstrachan Date: Sun Jan 15 15:36:05 2006 New Revision: 369280 URL: http://svn.apache.org/viewcvs?rev=369280&view=rev Log: A spike for a simple API for working with stateful session bean state from OpenEJB, ServiceMix or Tuscany; its very simple to use & has all thats required from the perspective of the client; we should be able to layer this on pretty much any implementation technology like WADI et al Added: geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/Locator.java geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/NoSuchSessionException.java geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/Server.java geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/Session.java geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/SessionAlreadyExistsException.java geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/SessionDestroyedException.java geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/SessionException.java geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/SessionLocation.java geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/SessionNotLocalException.java geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/SessionNotMovableException.java geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/WriteLockTimedOutException.java Modified: geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/package.html Added: geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/Locator.java URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/Locator.java?rev=369280&view=auto ============================================================================== --- geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/Locator.java (added) +++ geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/Locator.java Sun Jan 15 15:36:05 2006 @@ -0,0 +1,37 @@ +/* + * Copyright 2005-2006 The Apache Software Foundation. + * + * 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 + * + * 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.session; + +/** + * This is the main API to locating where sessions are located, to create + * new sessions and to view the available servers. There is a single Locator per + * local {@link Server}. + * + * @version $Revision: $ + */ +public interface Locator { + + /** + * Finds the session location which could be local or remote + */ + public SessionLocation getSessionLocation(String clientID); + + Session createSession(String sessionId) throws SessionAlreadyExistsException; + + public Server[] getRemoteServers(); + + public Server getLocalServer(); +} Added: geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/NoSuchSessionException.java URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/NoSuchSessionException.java?rev=369280&view=auto ============================================================================== --- geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/NoSuchSessionException.java (added) +++ geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/NoSuchSessionException.java Sun Jan 15 15:36:05 2006 @@ -0,0 +1,30 @@ +/* + * Copyright 2005-2006 The Apache Software Foundation. + * + * 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 + * + * 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.session; + +/** + * An attempt was made to access an exception which does not exist. + * + * @version $Revision: $ + */ +public class NoSuchSessionException extends SessionException { + + private static final long serialVersionUID = 4002448240048003002L; + + public NoSuchSessionException(String sessionId) { + super("No such session ID: " + sessionId, sessionId); + } +} Added: geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/Server.java URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/Server.java?rev=369280&view=auto ============================================================================== --- geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/Server.java (added) +++ geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/Server.java Sun Jan 15 15:36:05 2006 @@ -0,0 +1,47 @@ +/* + * Copyright 2005-2006 The Apache Software Foundation. + * + * 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 + * + * 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.session; + +/** + * Represents a logical server which is either the local server or a remote + * server. + * + * @version $Revision: $ + */ +public interface Server { + + /** + * Returns the unique name of this server + */ + String getName(); + + /** + * Returns the addresses on which you can communicate with the server which is + * required for redirecting or proxying requests for remote sessions + */ + String[] getAddresses(String protocol); + + /** + * Configures the available addresses that can be used to connect to this server + */ + void setAddresses(String string, String[] strings); + + /** + * Is this the local in-JVM server or a remote server + */ + public boolean isLocalServer(); + +} Added: geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/Session.java URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/Session.java?rev=369280&view=auto ============================================================================== --- geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/Session.java (added) +++ geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/Session.java Sun Jan 15 15:36:05 2006 @@ -0,0 +1,60 @@ +/* + * Copyright 2005-2006 The Apache Software Foundation. + * + * 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 + * + * 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.session; + +/** + * The state for a stateful session client which always exists in the local JVM; it is never remote. + * + * There is only one instance of this object in the system for a given session + * ID; even when using buddy groups to replicate session state there will only + * be one Session; the others are just backups of the serialized state (a + * byte[]) and not an actual usable Session object. + * + * @version $Revision: $ + */ +public interface Session { + + /** + * Returns the Id of the session. + */ + public String getSessionId(); + + /** + * Releases the session so that its changed state can be replicated to its + * buddies (once a write lock can be acquired as there may be concurrent + * access to this session). + * + */ + public void release(); + + /** + * Creates the state for the given key. + */ + public void addState(String key, Object value); + + /** + * This method assumes that the client will update the state object and so + * if you are using a state backup mechanism then this method call marks the + * entry as modified. + */ + public Object getState(String key); + + /** + * Removes the state entry for the given key (such as if an EJB stateful + * session bean is destroyed) + */ + public Object removeState(String key); +} Added: geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/SessionAlreadyExistsException.java URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/SessionAlreadyExistsException.java?rev=369280&view=auto ============================================================================== --- geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/SessionAlreadyExistsException.java (added) +++ geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/SessionAlreadyExistsException.java Sun Jan 15 15:36:05 2006 @@ -0,0 +1,31 @@ +/* + * Copyright 2005-2006 The Apache Software Foundation. + * + * 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 + * + * 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.session; + +/** + * An attempt was made to create a new session which was already created by another + * process or thread. + * + * @version $Revision: $ + */ +public class SessionAlreadyExistsException extends SessionException { + + private static final long serialVersionUID = 7152083589480056760L; + + public SessionAlreadyExistsException(String sessionId) { + super("The session already exists for ID: " + sessionId, sessionId); + } +} Added: geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/SessionDestroyedException.java URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/SessionDestroyedException.java?rev=369280&view=auto ============================================================================== --- geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/SessionDestroyedException.java (added) +++ geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/SessionDestroyedException.java Sun Jan 15 15:36:05 2006 @@ -0,0 +1,38 @@ +/* + * Copyright 2005-2006 The Apache Software Foundation. + * + * 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 + * + * 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.session; + +/** + * An attempt was made to use a session that has already been destroyed. + * + * @version $Revision: $ + */ +public class SessionDestroyedException extends RuntimeException { + + private static final long serialVersionUID = 7834900446243654015L; + + private final String sessionId; + + public SessionDestroyedException(String sessionId) { + super("The session is already destroyed: " + sessionId); + this.sessionId = sessionId; + } + + public String getSessionId() { + return sessionId; + } + +} Added: geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/SessionException.java URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/SessionException.java?rev=369280&view=auto ============================================================================== --- geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/SessionException.java (added) +++ geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/SessionException.java Sun Jan 15 15:36:05 2006 @@ -0,0 +1,40 @@ +/* + * Copyright 2005-2006 The Apache Software Foundation. + * + * 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 + * + * 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.session; + +/** + * An exception occurred working with a given session. + * + * @version $Revision: $ + */ +public class SessionException extends Exception { + + private static final long serialVersionUID = 1880705415197036320L; + + private final String sessionId; + + public SessionException(String message, String sessionId) { + super(message); + this.sessionId = sessionId; + } + + /** + * Returns the Session Id that causes the exception + */ + public String getSessionId() { + return sessionId; + } +} Added: geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/SessionLocation.java URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/SessionLocation.java?rev=369280&view=auto ============================================================================== --- geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/SessionLocation.java (added) +++ geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/SessionLocation.java Sun Jan 15 15:36:05 2006 @@ -0,0 +1,75 @@ +/* + * Copyright 2005-2006 The Apache Software Foundation. + * + * 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 + * + * 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.session; + +/** + * Represents the location of a session which could be local or remote. + * + * @version $Revision: $ + */ +public interface SessionLocation { + + /** + * Is the session local to this JVM so that it can be used directly or + * must the user redirect, proxy or move. + */ + boolean isLocal(); + + /** + * Is this session movable. + */ + boolean isMovable(); + + /** + * Returns the session ID. + */ + String getSessionId(); + + /** + * Returns the server (JVM) where this session is currently located so that + * you can redirector proxy to the actual server where the session is hosted + * or maybe use some server metadata to make a decision if its worth moving + * it. + */ + Server getServer(); + + /** + * Acquires the current session handle; you must release it when you have + * done. + * + * NOTE this session object is not thread safe + * + * @see Session#release() + */ + Session getSession() throws SessionNotLocalException; + + /** + * Moves the remote session to this JVM and acquires the current session; + * you must release it when you have done. + * + * NOTE this session object is not thread safe + * + * @see Session#release() + */ + Session moveLocally() throws NoSuchSessionException, WriteLockTimedOutException, SessionNotLocalException, + SessionNotMovableException; + + /** + * Destroys the session from the system + */ + void destroy() throws SessionNotLocalException; + +} Added: geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/SessionNotLocalException.java URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/SessionNotLocalException.java?rev=369280&view=auto ============================================================================== --- geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/SessionNotLocalException.java (added) +++ geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/SessionNotLocalException.java Sun Jan 15 15:36:05 2006 @@ -0,0 +1,31 @@ +/* + * Copyright 2005-2006 The Apache Software Foundation. + * + * 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 + * + * 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.session; + +/** + * An attempt was mode to use local access to a session which is remote. + * + * @version $Revision: $ + */ +public class SessionNotLocalException extends SessionException { + + private static final long serialVersionUID = -53844606425457569L; + + public SessionNotLocalException(String sessionId) { + super("The session is not local: " + sessionId, sessionId); + } + +} Added: geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/SessionNotMovableException.java URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/SessionNotMovableException.java?rev=369280&view=auto ============================================================================== --- geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/SessionNotMovableException.java (added) +++ geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/SessionNotMovableException.java Sun Jan 15 15:36:05 2006 @@ -0,0 +1,31 @@ +/* + * Copyright 2005-2006 The Apache Software Foundation. + * + * 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 + * + * 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.session; + +/** + * The Session is not movable. + * + * @version $Revision: $ + */ +public class SessionNotMovableException extends SessionException { + + private static final long serialVersionUID = -4266816494370986532L; + + public SessionNotMovableException(String sessionId) { + super("The session is not movable for ID: " + sessionId, sessionId); + } + +} Added: geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/WriteLockTimedOutException.java URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/WriteLockTimedOutException.java?rev=369280&view=auto ============================================================================== --- geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/WriteLockTimedOutException.java (added) +++ geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/WriteLockTimedOutException.java Sun Jan 15 15:36:05 2006 @@ -0,0 +1,30 @@ +/* + * Copyright 2005-2006 The Apache Software Foundation. + * + * 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 + * + * 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.session; + +/** + * The remote lock timed out while trying to move the session + * + * @version $Revision: $ + */ +public class WriteLockTimedOutException extends SessionException { + + private static final long serialVersionUID = 7717527292815502849L; + + public WriteLockTimedOutException(String sessionId) { + super("The remote write lock timed out for session ID: " + sessionId, sessionId); + } +} Modified: geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/package.html URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/package.html?rev=369280&r1=369279&r2=369280&view=diff ============================================================================== --- geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/package.html (original) +++ geronimo/trunk/modules/session/src/java/org/apache/geronimo/session/package.html Sun Jan 15 15:36:05 2006 @@ -4,8 +4,6 @@ -

Geronimo :: Session

-

This library provides a simple API for working with stateful session state so that it is easy to integrate different state management technologies into projects like OpenEJB, ServiceMix or Tuscany while also