2014-04-22 1 views
0

하나의 WAR 응용 프로그램이 있습니다. Websphere 8.0.0.0에 AppSrv01, AppSrv02의 두 가지 프로파일을 생성했습니다.두 개의 서로 다른 websphere 8 개의 프로파일에 공유 된 동일한 어플리케이션이 세션을 공유합니까?

내 응용 프로그램은 MQ 연결, struts 1.1의 J2ee 응용 프로그램을 사용하고 있습니다.

나는 상황 B.

나는 가능한 전체 세션의 메모를 취할 것입니다 내 응용 프로그램에서 세션 리스너가 같은 서버 컨텍스트 A와 AppSrv01 및 AppSrv02 모두 WAR을 배포 한. 아래로

시나리오는 ....입니다

는 가서 로컬 호스트 URL로 로그인 : 9082/A를 그 안에 어떤 페이지로 이동합니다.

url localhost : 9082/B에 로그인하여 로그인하면 동일한 브라우저의 다른 탭에서 해당 페이지로 이동합니다.

로컬 호스트로 이동 : 9082/A, 기존 페이지에서 링크 또는 URL을 클릭하십시오. 서버에서 원격 디버깅에

이 SessionListener에 와서 ...은 아래 스택

Daemon Thread [WebContainer : 10] (Suspended (breakpoint at line 24 in SessionCounterListener)) 
SessionCounterListener.sessionCreated(HttpSessionEvent) line: 24  
WasHttpSessionObserver(HttpSessionObserver).sessionCreated(ISession) line: 111 
SessionEventDispatcher.sessionCreated(ISession) line: 98  
SessionManager.createISession(String, int, boolean) line: 268 
SessionManager.createSession(ServletRequest, ServletResponse, SessionAffinityContext, boolean) line: 640  
WsSessionContext(SessionContext).getIHttpSession(HttpServletRequest, HttpServletResponse, boolean, boolean) line: 485 
WsSessionContext(SessionContext).getIHttpSession(HttpServletRequest, HttpServletResponse, boolean) line: 419  
SRTRequestContext.getSession(boolean, WebApp) line: 104 
SRTServletRequest.getSession(boolean) line: 2099  
SRTServletRequest.getSession() line: 2083 
RequestProcessor.processLocale(HttpServletRequest, HttpServletResponse) line: 631 
RequestProcessor.process(HttpServletRequest, HttpServletResponse) line: 230 
ActionServlet.process(HttpServletRequest, HttpServletResponse) line: 1482 
ActionServlet.doPost(HttpServletRequest, HttpServletResponse) line: 525 
ActionServlet(HttpServlet).service(HttpServletRequest, HttpServletResponse) line: 595 
ActionServlet(HttpServlet).service(ServletRequest, ServletResponse) line: 668 
ServletWrapperImpl(ServletWrapper).service(ServletRequest, ServletResponse, WebAppServletInvocationEvent) line: 1147  
ServletWrapperImpl(ServletWrapper).handleRequest(ServletRequest, ServletResponse, WebAppDispatcherContext) line: 722  
ServletWrapperImpl(ServletWrapper).handleRequest(ServletRequest, ServletResponse) line: 449 
ServletWrapperImpl.handleRequest(ServletRequest, ServletResponse) line: 178 
WebAppFilterManagerImpl(WebAppFilterManager).invokeFilters(ServletRequest, ServletResponse, IServletContext, RequestProcessor, EnumSet<CollaboratorInvocationEnum>) line: 1020 
CacheServletWrapper.handleRequest(ServletRequest, ServletResponse) line: 87 
WSWebContainer(WebContainer).handleRequest(IRequest, IResponse) line: 883 
WSWebContainer.handleRequest(IRequest, IResponse) line: 1659  
WCChannelLink.ready(VirtualConnection) line: 195  
HttpInboundLink.handleDiscrimination() line: 452  
HttpInboundLink.handleNewRequest() line: 511  
HttpInboundLink.processRequest() line: 305 
HttpInboundLink.ready(VirtualConnection) line: 276 
NewConnectionInitialReadCallback.sendToDiscriminators(VirtualConnection, TCPReadRequestContext, boolean) line: 214 
NewConnectionInitialReadCallback.complete(VirtualConnection, TCPReadRequestContext) line: 113 
AioReadCompletionListener.futureCompleted(IAbstractAsyncFuture, Object) line: 165 
AsyncFuture(AbstractAsyncFuture).invokeCallback(ICompletionListener, AbstractAsyncFuture, Object) line: 217 
AsyncFuture(AsyncChannelFuture).fireCompletionActions() line: 161 
AsyncFuture.completed(long) line: 138 
ResultHandler.complete(AsyncFuture, int, int) line: 204 
ResultHandler.runEventProcessingLoop(boolean) line: 775 
ResultHandler$2.run() line: 905 
ThreadPool$Worker.run() line: 1648 

그것은 다른 세션의 인스턴스를 생성한다 주어진을 보여줍니다. 다른 인스턴스를 만드는 이유를 이해해야합니다.

+0

이렇게하면 코드없이 진단하기가 어려울 것입니다. –

답변

0

IE에서 탭을 열 때 IE의 동일한 세션. 따라서 도메인 당 하나의 쿠키 JSESSIONID 만 갖게됩니다.

localhost:9082/A으로 이동하면 JSESSIONID과 같이 SESSIONID-A이 표시됩니다.

localhost:9082/B - 인 경우 SESSIONID-B입니다.

그래서 AppSrv01에서 응용 프로그램에 액세스하면 JSESSIONID은 AppSrv01로 이동하고 SESSIONID-B이됩니다. Appserver는이 세션 ID에 대해 알지 못하므로 새로운 사용자로 생각하고 세션을 만듭니다.

IE-> 파일 -> 새 세션을 열고 AppSrv02에서 위의 문제가 발생하지 않는 응용 프로그램에 액세스 해보십시오.

IEWATCH 또는 Fidler와 같은 것이 있으면 클라이언트/브라우저에서 이동하는 JSESSIONID을 볼 수 있습니다.

+1

감사합니다 user2619241 및 Christian Gärtner. 현재 작동 중입니다. http://www-01.ibm.com/support/docview.wss?uid=swg21225834 – user2894466

관련 문제