Org.hibernate.AssertionFailure: возможный непотокобезопасный доступ к сеансу.JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Org.hibernate.AssertionFailure: возможный непотокобезопасный доступ к сеансу.

Сообщение Anonymous »

Я разрабатываю веб-приложение с AngularJs в качестве внешнего интерфейса и Spring+Hibernate в качестве уровня обслуживания. Сервисный уровень имеет набор REST API, которые используются AngularJ. Интерфейс приложения не имеет серьезных проблем. Но на уровне обслуживания я столкнулся с некоторыми проблемами параллелизма. В некоторых сценариях мне приходится выполнять параллельные асинхронные вызовы к одним и тем же REST API из одного и того же сеанса http. Когда я это делаю, бывают случаи, когда я получаю вышеуказанную ошибку. На самом деле ошибка каждый раз меняется. Иногда я также получаю исключение NULLPointerException в операции Query.List(). Иногда я получаю исключение TransactionResourceAlreadyClosed. Ниже приложены различные конфигурации и фрагменты кода.

Web.xml

Код: Выделить всё

contextConfigLocation
WEB-INF/config/fs-cxf-serverContext.xml,WEB-INF/config/fs-spring-jpa-config.xml,WEB-INF/config/security-beans.xml



org.springframework.web.context.request.RequestContextListener


org.springframework.web.context.ContextLoaderListener



CorsFilter
org.apache.catalina.filters.CorsFilter

cors.allowed.origins
*


cors.allowed.headers
Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers,Access-Control-Allow-Origin


cors.exposed.headers
Access-Control-Allow-Origin


cors.allowed.methods
GET, POST, PUT, DELETE, OPTIONS,  HEAD



CorsFilter
/*



springSecurityFilterChain
org.springframework.web.filter.DelegatingFilterProxy


springSecurityFilterChain
/*



Servlet to Initialize and shutdown the Scheduler
QuartzInitializer
org.quartz.ee.servlet.QuartzInitializerServlet

config-file
quartz.properties


shutdown-on-unload
true


start-scheduler-on-load
true

2


CXFServlet
org.apache.cxf.transport.servlet.CXFServlet
1



CXFServlet
/services/*



jdbc/foodsafetyDS
javax.sql.DataSource
Container
Shareable

Конфигурация JPA
Hibernate.cfg.xml

Код: Выделить всё


com.mysql.jdbc.Driver
org.hibernate.dialect.MySQLDialect
java:comp/env/jdbc/foodsafetyDS
update
false


Я создал простой контроллер отдыха, используя CXF. Конечная точка REST показана ниже

Код: Выделить всё

@Path("/units")
@Produces(MediaType.APPLICATION_JSON)
public interface UnitService extends Serializable {

@GET
@Path("/getGraphData/{type}")
@Produces(MediaType.APPLICATION_JSON)
public UnitServiceBean getGraphData(@PathParam("type") String type)
throws FoodSafetyException;


Реализация контроллера показана ниже

xxxServiceImpl.java

Код: Выделить всё

@Service("unit")
@Transactional
public class xxxServiceImpl implements xxxService {

private static final long serialVersionUID = 1L;

@Autowired
xxxDelegate xxxDelegate;

@Override
public UnitServiceBean getGraphData(String type) throws FoodSafetyException {
UnitServiceBean bean = new UnitServiceBean();

List data = unitDelegate.getGraphData(type);
....
....
return bean;
}
Делегат вызывает DAO. (На данный момент мы не представили бизнес-объект). Реализация DAO показана ниже

Код: Выделить всё

@Component
public class UnitDAOImpl extends FoodSafetyDAO implements UnitDAO {
@Override
public List getGraphData(String type) {
List data = new ArrayList();
Map readings = new HashMap();

SimpleDateFormat df = CommonConstants.TIME_FORMATTER;

// Get all the Units
Query query = getSession().getNamedQuery(
QueryConstants.FIND_UNITS_BY_TYPE);
query.setParameter(QueryConstants.TYPE, type);
List units = (List) query.list();
if (units != null && units.size() != 0) {
.....
.....

for (UnitEntity unit : units) {
Calendar cal1 = Calendar.getInstance();
cal1.add(Calendar.DAY_OF_YEAR, -1);
query = getSession().getNamedQuery(
QueryConstants.FIND_READING_BY_UNIT_TIME).setLong(
QueryConstants.UNIT_ID, unit.getUnitId());

List rr = query.list();
...
...
}
}

return data;
}
Теперь, когда я вызываю службу REST «getGraphData» один раз с помощью POSTMAN и т. д., она работает нормально, без каких-либо проблем. Но когда я имитирую одновременный вызов этой службы отдыха, я получаю следующую ошибку

Код: Выделить всё

Caused by: org.hibernate.AssertionFailure:  p o s s i b l e   n o n - t h r e a d s a f e   a c c e s s   t o   t h e   s e s s i o n < b r   / > a t   o r g . h i b e r n a t e . e n g i n e . i n t e r n a l . T w o P h a s e L o a d . i n i t i a l i z e E n t i t y ( T w o P h a s e L o a d . j a v a : 1 3 0 ) < b r   / > a t   o r g . h i b e r n a t e . l o a d e r . L o a d e r . i n i t i a l i z e E n t i t i e s A n d C o l l e c t i o n s ( L o a d e r . j a v a : 1 1 0 8 ) < b r   / > a t   o r g . h i b e r n a t e . l o a d e r . L o a d e r . p r o c e s s R e s u l t S e t ( L o a d e r . j a v a : 9 6 4 ) < b r   / > a t   o r g . h i b e r n a t e . l o a d e r . L o a d e r . d o Q u e r y ( L o a d e r . j a v a : 9 1 1 ) < b r   / > a t   o r g . h i b e r n a t e . l o a d e r . L o a d e r . d o Q u e r y A n d I n i t i a l i z e N o n L a z y C o l l e c t i o n s ( L o a d e r . j a v a : 3 4 2 ) < b r   / > a t   o r g . h i b e r n a t e . l o a d e r . L o a d e r . d o L i s t ( L o a d e r . j a v a : 2 5 2 6 ) < b r   / > a t   o r g . h i b e r n a t e . l o a d e r . L o a d e r . d o L i s t ( L o a d e r . j a v a : 2 5 1 2 ) < b r   / > a t   o r g . h i b e r n a t e . l o a d e r . L o a d e r . l i s t I g n o r e Q u e r y C a c h e ( L o a d e r . j a v a : 2 3 4 2 ) < b r   / > a t   o r g . h i b e r n a t e . l o a d e r . L o a d e r . l i s t ( L o a d e r . j a v a : 2 3 3 7 ) < b r   / > a t   o r g . h i b e r n a t e . l o a d e r . h q l . Q u e r y L o a d e r . l i s t ( Q u e r y L o a d e r . j a v a : 4 9 5 ) < b r   / > a t   o r g . h i b e r n a t e . h q l . i n t e r n a l . a s t . Q u e r y T r a n s l a t o r I m p l . l i s t ( Q u e r y T r a n s l a t o r I m p l . j a v a : 3 5 6 ) < b r   / > a t   o r g . h i b e r n a t e . e n g i n e . q u e r y . s p i . H Q L Q u e r y P l a n . p e r f o r m L i s t ( H Q L Q u e r y P l a n . j a v a : 1 9 5 ) < b r   / > a t   o r g . h i b e r n a t e . i n t e r n a l . S e s s i o n I m p l . l i s t ( S e s s i o n I m p l . j a v a : 1 2 6 9 ) < b r   / > a t   o r g . h i b e r n a t e . i n t e r n a l . Q u e r y I m p l . l i s t ( Q u e r y I m p l . j a v a : 1 0 1 ) < b r   / > a t   c o m . c t s . f o o d S a f e t y . m o d e l . d a o . i m p l . U n i t D A O I m p l . g e t G r a p h D a t a ( U n i t D A O I m p l . j a v a : 2 5 5 ) < b r   / > a t   s u n . r e f l e c t . N a t i v e M e t h o d A c c e s s o r I m p l . i n v o k e 0 ( N a t i v e   M e t h o d ) < b r   / > a t   s u n . r e f l e c t . N a t i v e M e t h o d A c c e s s o r I m p l . i n v o k e ( N a t i v e M e t h o d A c c e s s o r I m p l . j a v a : 3 9 ) < b r   / > a t   s u n . r e f l e c t . D e l e g a t i n g M e t h o d A c c e s s o r I m p l . i n v o k e ( D e l e g a t i n g M e t h o d A c c e s s o r I m p l . j a v a : 2 5 ) < b r   / > a t   j a v a . l a n g . r e f l e c t . M e t h o d . i n v o k e ( M e t h o d . j a v a : 5 9 7 ) < b r   / > a t   o r g . s p r i n g f r a m e w o r k . a o p . s u p p o r t . A o p U t i l s . i n v o k e J o i n p o i n t U s i n g R e f l e c t i o n ( A o p U t i l s . j a v a : 3 1 7 ) < b r   / > a t   o r g . s p r i n g f r a m e w o r k . a o p . f r a m e w o r k . R e f l e c t i v e M e t h o d I n v o c a t i o n . i n v o k e J o i n p o i n t ( R e f l e c t i v e M e t h o d I n v o c a t i o n . j a v a : 1 8 3 ) < b r   / > a t   o r g . s p r i n g f r a m e w o r k . a o p . f r a m e w o r k . R e f l e c t i v e M e t h o d I n v o c a t i o n . p r o c e e d ( R e f l e c t i v e M e t h o d I n v o c a t i o n . j a v a : 1 5 0 ) < b r   / > a t   o r g . s p r i n g f r a m e w o r k . a o p . f r a m e w o r k . a d a p t er.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:51)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.aspectj.AspectJAfterAdvice.invoke(AspectJAfterAdvice.java:42)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:91)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at com.sun.proxy.$Proxy51.getGraphData(Unknown Source)
at com.cts.foodSafety.delegate.UnitDelegate.getGraphData(UnitDelegate.java:39)
at com.cts.foodSafety.delegate.UnitDelegate$$FastClassByCGLIB$$aac35d0d.invoke()
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:698)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:51)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.aspectj.AspectJAfterAdvice.invoke(AspectJAfterAdvice.java:42)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:91)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:631)
at com.cts.foodSafety.delegate.UnitDelegate$$EnhancerByCGLIB$$75af66.getGraphData()
at com.cts.foodSafety.service.impl.UnitServiceImpl.getGraphData(UnitServiceImpl.java:108)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:51)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.aspectj.AspectJAfterAdvice.invoke(AspectJAfterAdvice.java:42)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:55)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:96)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:260)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:91)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at com.sun.proxy.$Proxy72.getGraphData(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:180)
at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:96)
Клиент, который я использовал для одновременного запроса, показан ниже

Код: Выделить всё

public class RestClient implements Runnable{

private String i;

public RestClient(String x) {
i=x;
}
public static void main(String[] args) {

for(int i =1;i

Подробнее здесь: [url]https://stackoverflow.com/questions/35200973/org-hibernate-assertionfailure-possible-non-threadsafe-access-to-the-session[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»