You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by ri...@apache.org on 2006/10/04 19:49:05 UTC
svn commit: r452953 - in /incubator/tuscany/java:
sampleapps/bigbank/webclient/src/main/webapp/WEB-INF/
sca/kernel/core/src/main/java/org/apache/tuscany/core/component/event/
sca/runtime/webapp-host/src/main/java/org/apache/tuscany/runtime/webapp/
sca/...
Author: rineholt
Date: Wed Oct 4 10:49:04 2006
New Revision: 452953
URL: http://svn.apache.org/viewvc?view=rev&rev=452953
Log:
HTTP Session support. Seems to work with respect to what BB needs.
Added:
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/event/HttpRequestEnded.java
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/event/HttpRequestStart.java
incubator/tuscany/java/sca/runtime/webapp/src/main/java/org/apache/tuscany/runtime/webapp/TuscanyRequestListener.java
Modified:
incubator/tuscany/java/sampleapps/bigbank/webclient/src/main/webapp/WEB-INF/web.xml
incubator/tuscany/java/sca/runtime/webapp-host/src/main/java/org/apache/tuscany/runtime/webapp/ServletHostImpl.java
incubator/tuscany/java/sca/runtime/webapp-host/src/main/java/org/apache/tuscany/runtime/webapp/WebappRuntimeImpl.java
incubator/tuscany/java/sca/runtime/webapp/src/main/java/org/apache/tuscany/runtime/webapp/WebappRuntime.java
Modified: incubator/tuscany/java/sampleapps/bigbank/webclient/src/main/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sampleapps/bigbank/webclient/src/main/webapp/WEB-INF/web.xml?view=diff&rev=452953&r1=452952&r2=452953
==============================================================================
--- incubator/tuscany/java/sampleapps/bigbank/webclient/src/main/webapp/WEB-INF/web.xml (original)
+++ incubator/tuscany/java/sampleapps/bigbank/webclient/src/main/webapp/WEB-INF/web.xml Wed Oct 4 10:49:04 2006
@@ -39,6 +39,10 @@
<listener>
<listener-class>org.apache.tuscany.runtime.webapp.TuscanySessionListener</listener-class>
</listener>
+
+ <listener>
+ <listener-class>org.apache.tuscany.runtime.webapp.TuscanyRequestListener</listener-class>
+ </listener>
<servlet>
<servlet-name>LoginServlet</servlet-name>
Added: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/event/HttpRequestEnded.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/event/HttpRequestEnded.java?view=auto&rev=452953
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/event/HttpRequestEnded.java (added)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/event/HttpRequestEnded.java Wed Oct 4 10:49:04 2006
@@ -0,0 +1,38 @@
+/*
+ * 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.tuscany.core.component.event;
+
+/**
+ * Propagated when an HTTP-based request has ended.
+ *
+ * @version $$Rev: 430937 $$ $$Date: 2006-08-11 21:17:56 -0400 (Fri, 11 Aug 2006) $$
+ */
+public class HttpRequestEnded extends HttpSessionEvent {
+
+ /**
+ * Creates a new event
+ *
+ * @param source the source of the event
+ * @param id the id of the HTTP session being ended
+ */
+ public HttpRequestEnded(Object source, Object id) {
+ super(source, id);
+ }
+
+}
Added: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/event/HttpRequestStart.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/event/HttpRequestStart.java?view=auto&rev=452953
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/event/HttpRequestStart.java (added)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/event/HttpRequestStart.java Wed Oct 4 10:49:04 2006
@@ -0,0 +1,38 @@
+/*
+ * 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.tuscany.core.component.event;
+
+/**
+ * Propagated when an HTTP-based request has started
+ *
+ * @version $$Rev: 430937 $$ $$Date: 2006-08-11 21:17:56 -0400 (Fri, 11 Aug 2006) $$
+ */
+public class HttpRequestStart extends HttpSessionEvent {
+
+ /**
+ * Creates a new event
+ *
+ * @param source the source of the event
+ * @param id the id of the HTTP session being ended
+ */
+ public HttpRequestStart(Object source, Object id) {
+ super(source, id);
+ }
+
+}
Modified: incubator/tuscany/java/sca/runtime/webapp-host/src/main/java/org/apache/tuscany/runtime/webapp/ServletHostImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/runtime/webapp-host/src/main/java/org/apache/tuscany/runtime/webapp/ServletHostImpl.java?view=diff&rev=452953&r1=452952&r2=452953
==============================================================================
--- incubator/tuscany/java/sca/runtime/webapp-host/src/main/java/org/apache/tuscany/runtime/webapp/ServletHostImpl.java (original)
+++ incubator/tuscany/java/sca/runtime/webapp-host/src/main/java/org/apache/tuscany/runtime/webapp/ServletHostImpl.java Wed Oct 4 10:49:04 2006
@@ -18,6 +18,8 @@
*/
package org.apache.tuscany.runtime.webapp;
+import static org.apache.tuscany.core.component.scope.HttpSessionScopeContainer.HTTP_IDENTIFIER;
+
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
@@ -28,10 +30,15 @@
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
+import org.apache.tuscany.core.component.event.HttpRequestEnded;
+import org.apache.tuscany.core.component.event.HttpRequestStart;
+import org.apache.tuscany.core.component.event.HttpSessionEnd;
+import org.apache.tuscany.core.component.event.HttpSessionStart;
import org.apache.tuscany.host.servlet.ServletRequestInjector;
import org.apache.tuscany.spi.annotation.Autowire;
import org.apache.tuscany.spi.component.ScopeContainer;
import org.apache.tuscany.spi.component.ScopeRegistry;
+import org.apache.tuscany.spi.component.WorkContext;
import org.apache.tuscany.spi.event.Event;
import org.apache.tuscany.spi.event.EventFilter;
import org.apache.tuscany.spi.event.EventPublisher;
@@ -42,13 +49,12 @@
import org.osoa.sca.annotations.Service;
/**
- * A <code>ServletHost</code> implementation that forwards requests to registered servlets
+ * A <code>ServletHost</code> implementation that forwards requests to registered servlets
*/
@Service(ServletHost.class)
public class ServletHostImpl implements ServletHost, ServletRequestInjector, EventPublisher {
protected Map<String, Servlet> servlets;
-
public ServletHostImpl() {
this.servlets = new HashMap<String, Servlet>();
@@ -57,15 +63,20 @@
@Init(eager = true)
public void init() {
}
-
- protected ScopeRegistry registry= null;
-
-
- @Autowire(required=false)
+
+ protected ScopeRegistry registry = null;
+
+ @Autowire(required = false)
public void setSessionScopeContainer(ScopeRegistry registry) {
- this.registry = registry;
+ this.registry = registry;
}
+ WorkContext workContext = null;
+
+ @Autowire(required = false)
+ public void setWorkContext(WorkContext workContext) {
+ this.workContext = workContext;
+ }
public void service(ServletRequest req, ServletResponse resp) throws ServletException, IOException {
assert req instanceof HttpServletRequest : "implementation only supports HttpServletRequest";
@@ -89,29 +100,43 @@
}
public void addListener(RuntimeEventListener listener) {
- throw new UnSupportedRuntimeException("Not Supported");
-
+ throw new UnSupportedRuntimeException("Not Supported");
+
}
public void addListener(EventFilter filter, RuntimeEventListener listener) {
throw new UnSupportedRuntimeException("Not Supported");
-
+
}
public void publish(Event event) {
- if(registry != null){
- ScopeContainer sc = registry.getScopeContainer(Scope.SESSION);
- if(null != sc) {
- sc.onEvent(event);
-
- }
- }
-
+ if (null != registry && (event instanceof HttpSessionStart || event instanceof HttpSessionEnd)) {
+ ScopeContainer sc = registry.getScopeContainer(Scope.SESSION);
+ if (null != sc) {
+ sc.onEvent(event);
+
+ }
+ }
+ if (null != workContext) {
+ if (event instanceof HttpRequestStart) {
+ Object key = ((HttpRequestStart) event).getId();
+ if (null != key) {
+ workContext.setIdentifier(HTTP_IDENTIFIER, ((HttpRequestStart) event).getId());
+ } else { // new request with no session.
+ workContext.clearIdentifier(HTTP_IDENTIFIER);
+ }
+ } else if (event instanceof HttpRequestEnded) {
+ workContext.clearIdentifier(HTTP_IDENTIFIER);
+
+ }
+
+ }
+
}
public void removeListener(RuntimeEventListener listener) {
throw new UnSupportedRuntimeException("Not Supported");
-
+
}
-}
+}
\ No newline at end of file
Modified: incubator/tuscany/java/sca/runtime/webapp-host/src/main/java/org/apache/tuscany/runtime/webapp/WebappRuntimeImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/runtime/webapp-host/src/main/java/org/apache/tuscany/runtime/webapp/WebappRuntimeImpl.java?view=diff&rev=452953&r1=452952&r2=452953
==============================================================================
--- incubator/tuscany/java/sca/runtime/webapp-host/src/main/java/org/apache/tuscany/runtime/webapp/WebappRuntimeImpl.java (original)
+++ incubator/tuscany/java/sca/runtime/webapp-host/src/main/java/org/apache/tuscany/runtime/webapp/WebappRuntimeImpl.java Wed Oct 4 10:49:04 2006
@@ -28,6 +28,8 @@
import org.apache.tuscany.core.bootstrap.Bootstrapper;
import org.apache.tuscany.core.bootstrap.DefaultBootstrapper;
+import org.apache.tuscany.core.component.event.HttpRequestEnded;
+import org.apache.tuscany.core.component.event.HttpRequestStart;
import org.apache.tuscany.core.component.event.HttpSessionEnd;
import org.apache.tuscany.core.component.event.HttpSessionStart;
import org.apache.tuscany.core.component.event.RequestEnd;
@@ -187,6 +189,19 @@
application.publish(endSession);
((EventPublisher)requestInjector).publish(endSession);
}
+
+ public void httpRequestStarted(Object sessionid) {
+ HttpRequestStart httpRequestStart = new HttpRequestStart(this, sessionid);
+ application.publish(httpRequestStart);
+ ((EventPublisher)requestInjector).publish(httpRequestStart);
+ }
+
+ public void httpRequestEnded(Object sessionid) {
+ HttpRequestEnded httpRequestEnded = new HttpRequestEnded(this, sessionid);
+ application.publish(httpRequestEnded);
+ ((EventPublisher)requestInjector).publish(httpRequestEnded);
+ }
+
public void startRequest() {
application.publish(new RequestStart(this));
Added: incubator/tuscany/java/sca/runtime/webapp/src/main/java/org/apache/tuscany/runtime/webapp/TuscanyRequestListener.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/runtime/webapp/src/main/java/org/apache/tuscany/runtime/webapp/TuscanyRequestListener.java?view=auto&rev=452953
==============================================================================
--- incubator/tuscany/java/sca/runtime/webapp/src/main/java/org/apache/tuscany/runtime/webapp/TuscanyRequestListener.java (added)
+++ incubator/tuscany/java/sca/runtime/webapp/src/main/java/org/apache/tuscany/runtime/webapp/TuscanyRequestListener.java Wed Oct 4 10:49:04 2006
@@ -0,0 +1,78 @@
+/*
+ * 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.tuscany.runtime.webapp;
+
+import static org.apache.tuscany.runtime.webapp.Constants.RUNTIME_ATTRIBUTE;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletRequestEvent;
+import javax.servlet.ServletRequestListener;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+/**
+ * Notifies the Tuscany runtime of session creation and expiration events.
+ *
+ * @version $Rev: 441961 $ $Date: 2006-09-10 11:48:29 -0400 (Sun, 10 Sep 2006) $
+ */
+public class TuscanyRequestListener implements ServletRequestListener {
+ private WebappRuntime runtime;
+
+ public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
+
+ final ServletContext context = servletRequestEvent.getServletContext();
+ getRuntime(context);
+ ServletRequest servletRequest = servletRequestEvent.getServletRequest();
+ if (servletRequest instanceof HttpServletRequest) {
+ HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
+ HttpSession session = httpServletRequest.getSession(false);
+ runtime.httpRequestEnded(session.getId());
+
+ }
+
+ }
+
+ public void requestInitialized(ServletRequestEvent servletRequestEvent) {
+
+ final ServletContext context = servletRequestEvent.getServletContext();
+ getRuntime(context);
+ ServletRequest servletRequest = servletRequestEvent.getServletRequest();
+ if (servletRequest instanceof HttpServletRequest) {
+ HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
+ HttpSession session = httpServletRequest.getSession(false);
+ runtime.httpRequestStarted(session == null ? null : session.getId());
+
+ }
+
+ }
+
+ protected WebappRuntime getRuntime(final ServletContext context) {
+ if (runtime == null) {
+
+ runtime = (WebappRuntime) context.getAttribute(RUNTIME_ATTRIBUTE);
+ if (runtime == null) {
+ context.log("requestInitialized", new ServletException("Tuscany runtime not configured"));
+ return null;
+ }
+ }
+ return runtime;
+ }
+}
\ No newline at end of file
Modified: incubator/tuscany/java/sca/runtime/webapp/src/main/java/org/apache/tuscany/runtime/webapp/WebappRuntime.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/runtime/webapp/src/main/java/org/apache/tuscany/runtime/webapp/WebappRuntime.java?view=diff&rev=452953&r1=452952&r2=452953
==============================================================================
--- incubator/tuscany/java/sca/runtime/webapp/src/main/java/org/apache/tuscany/runtime/webapp/WebappRuntime.java (original)
+++ incubator/tuscany/java/sca/runtime/webapp/src/main/java/org/apache/tuscany/runtime/webapp/WebappRuntime.java Wed Oct 4 10:49:04 2006
@@ -62,4 +62,17 @@
* Notification that the web application has stopped servicing a request
*/
void stopRequest();
+
+ /**
+ * httpRequestStarted request has been started with sessid id
+ * @param session id.
+ */
+ void httpRequestStarted(Object id);
+
+ /**
+ * httpRequestEnded request has been ended with sessid id
+ * @param session id.
+ */
+
+ void httpRequestEnded(Object id);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org