2016-02-25 1 views
0

A BulkBeanException вызывается, когда iBatis пытается применить карту результатов, но не согласован между развертываниями через одну и ту же банку (локально это хорошо, развертывание сервера не является).net.sf.cglib.beans.BulkBeanException с использованием iBatis и Spring

Я понял, как остановить проблему (см. Мой ответ ниже), но мне больше интересно узнать о стратегиях диагностики того, почему cglibification произошло/произошло по-разному в разных средах исполнения. Я предполагаю, что непоследовательное поведение связано с различиями в порядке загрузки библиотек, но не выяснили, как это подтвердить ($PATH и $CLASSPATH разрешены к тому же в разных средах). Есть ли что-то еще, на что я должен смотреть?

Got ошибка

  • java -jar <jar> на CentOS поле
  • Mule во время выполнения с помощью Eclipse, на OS X

Не получаю ошибку

  • java -jar <jar> на OS X
  • JUnit с помощью Maven на OS X
  • JUnit с помощью Eclipse, на OS X

трассировки стека

Caused by: com.ibatis.common.jdbc.exception.NestedSQLException: 
--- The error occurred in ibatis/MyClassName.xml. 
--- The error occurred while applying a result map. 
--- Check the MyClassName.result. 
--- The error happened while setting a property on the result object. 
--- Cause: net.sf.cglib.beans.BulkBeanException: 1 
     at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryWithCallback(MappedStatement.java:204) ~[mybatis-2.3.5.jar!/:?] 
     at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryForList(MappedStatement.java:139) ~[mybatis-2.3.5.jar!/:?] 
     at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:578) ~[mybatis-2.3.5.jar!/:?] 
     at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:552) ~[mybatis-2.3.5.jar!/:?] 
     at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForList(SqlMapSessionImpl.java:118) ~[mybatis-2.3.5.jar!/:?] 
     at org.springframework.orm.ibatis.SqlMapClientTemplate$3.doInSqlMapClient(SqlMapClientTemplate.java:298) ~[mybatis-2-spring-1.0.1.jar!/:1.0.1] 
     at org.springframework.orm.ibatis.SqlMapClientTemplate$3.doInSqlMapClient(SqlMapClientTemplate.java:296) ~[mybatis-2-spring-1.0.1.jar!/:1.0.1] 
     at org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:203) ~[mybatis-2-spring-1.0.1.jar!/:1.0.1] 
     ... 77 more 

ответ

1

Java-боб, на который Ibatis пытается применить результат у карты были необычные (небиологически-совместимые?) сеттеры. Эти сеттеры не вернули void как стандарт, но вернули сам объект, так что операции set могли быть скованы (у нас есть некоторые программисты Haskell, работающие над этим проектом :)).

Когда это происходило, оно было решено путем изменения методов сеттера обратно в их предыдущее состояние, где они были определены с возвратом void.