2016-12-05 12 views
0

일부 배경; DeltaManager를 사용하여 클러스터 된 Tomcat7 인스턴스에서 실행중인 Liferay 6.2.GA6에서 포틀릿으로 Vaadin 7 애플리케이션을 실행하고 있습니다.Vaadin 요청 내에서 Liferay의 APPLICATION_SCOPE에 속성을 설정할 수있는 방법은 무엇입니까?

다른 포틀릿에서 볼 수있는 사용자 레벨 세션 속성을 내 Vaadin 응용 프로그램에 설정하려고 시도하고 적절하게 반응합니다.

아래의 코드는 스레드 교착 상태가 발생합니다.

'  
PortletSession session = ((WrappedPortletSession)UI.getCurrent().getSesion()).getPortletSession(); 
session.setAttribute("CURRENT_NOTIFICATION",notificationDTO,PortletSession.APPLICATION_SCOPE); 

내 결과 약식 스레드 덤프 ...

"http-nio-8081-exec-80" - Thread [email protected] 
    java.lang.Thread.State: WAITING 
    at sun.misc.Unsafe.park(Native Method) 
    - waiting to lock <7c3f1e38> (a java.util.concurrent.locks.ReentrantReadWriteLock$NonfairSync) owned by "http-nio-8081-exec-82" [email protected] 
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186) 
    at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:834) 
    at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:867) 
    at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1197) 
    at java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock.lock(ReentrantReadWriteLock.java:945) 
    at org.apache.catalina.ha.session.DeltaSession.lock(DeltaSession.java:199) 
    at org.apache.catalina.ha.session.DeltaSession.setAttribute(DeltaSession.java:726) 
    at org.apache.catalina.ha.session.DeltaSession.setAttribute(DeltaSession.java:711) 
    at org.apache.catalina.session.StandardSessionFacade.setAttribute(StandardSessionFacade.java:154) 
    at com.liferay.portlet.PortletSessionImpl.setAttribute(PortletSessionImpl.java:188) 
    at mypackage.com.view.NotificationEntryView.enter(NotificationEntryView.java:181) 


    "http-nio-8081-exec-82" - Thread [email protected] 
    java.lang.Thread.State: WAITING 
    at sun.misc.Unsafe.park(Native Method) 
    - waiting to lock <fa6510c> (a java.util.concurrent.locks.ReentrantLock$NonfairSync) owned by "http-nio-8081-exec-80" [email protected] 
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186) 
    at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:834) 
    at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:867) 
    at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1197) 
    at java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:214) 
    at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:290) 
    at com.vaadin.server.VaadinSession.writeObject(VaadinSession.java:1432) 
    at sun.reflect.GeneratedMethodAccessor1827.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:988) 
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1495) 
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431) 
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177) 
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347) 
    at org.apache.catalina.ha.session.DeltaRequest$AttributeInfo.writeExternal(DeltaRequest.java:407) 
    at org.apache.catalina.ha.session.DeltaRequest.writeExternal(DeltaRequest.java:300) 
    at org.apache.catalina.ha.session.DeltaRequest.serialize(DeltaRequest.java:314) 
    at org.apache.catalina.ha.session.DeltaManager.serializeDeltaRequest(DeltaManager.java:610) 
    at org.apache.catalina.ha.session.DeltaManager.requestCompleted(DeltaManager.java:996) 
    - locked <5603aa01> (a org.apache.catalina.ha.session.DeltaRequest) 

이 PorletSession에서의 setAttribute 호출이 이미 (종류-의) 교착 된 보유 세션 만약 angel에 대한 잠금을 시도 DeltaSession를 트리거 것으로 보인다 .

Vaadin은 VaadinSession 또는 UI.access()를 사용하여 제안합니다. 이것은 도움이되지 못했습니다.

다음 아이디어는 수동으로 VaadinSession을 잠금 해제하고 속성을 설정 한 다음 VaadinSession을 다시 잠그는 것이 위험한 것으로 보입니다.

누구든지 솔루션을 추천 할 수 있습니까?

답변

0

사용자 세션 속성을 설정하기 전에 VaadinSession을 잠금 해제하면 교착 상태 문제가 해결 된 것으로 보이며 VaadinSession을 다시 잠그는 것도 효과가있는 것 같습니다.

문제가 해결되었습니다.