SQLContainer in multithreading Vaadin applications

I welcome!

I use the
SQLContainer add- on
and faced with
this problem
in the implementation of concurrent access to shared resources.
Anybody can explain this exception stack? As can be connected placement of the child window, and methods of the class
FreeformQuery.java
? I would be very grateful for your help!


InnerSysThermBtnClickListener$1.run
-


...
screenWindow.addWindow(resultQueryWin);
...


Window.addWindow
-


...
attachWindow(window);
...


Window.attachWindow
-


...
w.setParent(this);
...


AbstractComponent.setParent
-


...
attach();
...


Panel.attach
-


...
content.attach();
...


AbstractComponentContainer.attach
-


...
(i.next()).attach();
...


Table.attach
-


...
refreshRenderedCells();
...


Table.refreshRenderedCells
-


...
refreshRenderedCells();
...


AbstractSelect.size
-


...
return items.size();
...


SQLContainer.size
-


...
updateCount();
...


SQLContainer.updateCount
-


...
refresh();
...


SQLContainer.refresh
-


...
fireContentsChange();


SQLContainer.fireContentsChange
-


...
((Container.ItemSetChangeListener) l[ i ]
)
...


Table.containerItemSetChange


...
super.containerItemSetChange(event);
...


AbstractSelect.containerItemSetChange
-


...
fireItemSetChange();
...


AbstractSelect.fireItemSetChange
-


...
((Container.ItemSetChangeListener) listeners[ i ]
)
...


Table.containerItemSetChange
-


...
setCurrentPageFirstItemIndex(getCurrentPageFirstItemIndex(), false);
...


Table.setCurrentPageFirstItemIndex
-


...
if (isLastId(currentPageFirstItemId)) {
...


Table.isLastId
-


...
return ((Container.Ordered) items).isLastId(itemId);
...


SQLContainer.isLastId
-


...
return lastItemId().equals(itemId);
...


SQLContainer.lastItemId
-


...
updateOffsetAndCache(size - 1);
...


SQLContainer.updateOffsetAndCache
-


...
getPage();
...


SQLContainer.getPage
-


...
delegate.beginTransaction();
...


FreeformQuery.beginTransaction
-


...
throw new IllegalStateException("A transaction is already active!");
...

The result is -
java.lang.IllegalStateException: A transaction is already active!

This impression, if you look at the picture, that mixed methods, and there is no synchronization.


11941.png