2014-02-13 4 views
0

Выполняя миграцию в спящем режиме, проблема с bean lib jar. Как вы можете видеть, я привязан ко всем банкам, связанным с репликатором bean.Миграция спящего режима: BeanlibException

Во время выполнения встает вопрос:

 11:56:33,354 ERROR [BeanPopulator] 
propertyName=handler 
readerMethod=public javassist.util.proxy.MethodHandler com.v4common.shared.beans.usermanagement.User_$$_jvstb35_4c.getHandler() 
setterMethod=public void com.v4common.shared.beans.usermanagement.User_$$_jvstb35_4c.setHandler(javassist.util.proxy.MethodHandler) 
[email protected] 
toB[email protected]0 

net.sf.beanlib.BeanlibException: java.lang.NoSuchMethodException: org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.<init>() 
    at net.sf.beanlib.provider.replicator.BeanReplicator.replicateBean(BeanReplicator.java:169) 
    at net.sf.beanlib.hibernate3.Hibernate3JavaBeanReplicator.replicateBean(Hibernate3JavaBeanReplicator.java:71) 
    at net.sf.beanlib.provider.replicator.ReplicatorTemplate.replicateByBeanReplicatable(ReplicatorTemplate.java:125) 
    at net.sf.beanlib.provider.replicator.ReplicatorTemplate.replicate(ReplicatorTemplate.java:120) 
    at net.sf.beanlib.provider.BeanTransformer.transform(BeanTransformer.java:224) 
    at net.sf.beanlib.provider.BeanPopulator.doit(BeanPopulator.java:201) 
    at net.sf.beanlib.provider.BeanPopulator.processSetterMethod(BeanPopulator.java:172) 
    at net.sf.beanlib.provider.BeanPopulator.populate(BeanPopulator.java:270) 
    at net.sf.beanlib.provider.replicator.ReplicatorTemplate.populateBean(ReplicatorTemplate.java:174) 
    at net.sf.beanlib.provider.replicator.BeanReplicator.replicateBean(BeanReplicator.java:173) 
    at net.sf.beanlib.hibernate3.Hibernate3JavaBeanReplicator.replicateBean(Hibernate3JavaBeanReplicator.java:71) 
    at net.sf.beanlib.provider.replicator.ReplicatorTemplate.replicateByBeanReplicatable(ReplicatorTemplate.java:125) 
    at net.sf.beanlib.provider.replicator.ReplicatorTemplate.replicate(ReplicatorTemplate.java:120) 
    at net.sf.beanlib.provider.BeanTransformer.transform(BeanTransformer.java:224) 
    at net.sf.beanlib.provider.BeanPopulator.doit(BeanPopulator.java:201) 
    at net.sf.beanlib.provider.BeanPopulator.processSetterMethod(BeanPopulator.java:172) 
    at net.sf.beanlib.provider.BeanPopulator.populate(BeanPopulator.java:270) 
    at net.sf.beanlib.provider.replicator.ReplicatorTemplate.populateBean(ReplicatorTemplate.java:174) 
    at net.sf.beanlib.provider.replicator.BeanReplicator.replicateBean(BeanReplicator.java:173) 
    at net.sf.beanlib.hibernate3.Hibernate3JavaBeanReplicator.replicateBean(Hibernate3JavaBeanReplicator.java:71) 
    at net.sf.beanlib.provider.replicator.ReplicatorTemplate.replicateByBeanReplicatable(ReplicatorTemplate.java:125) 
    at net.sf.beanlib.provider.replicator.ReplicatorTemplate.replicate(ReplicatorTemplate.java:120) 
    at net.sf.beanlib.provider.BeanTransformer.transform(BeanTransformer.java:224) 
    at net.sf.beanlib.provider.BeanPopulator.doit(BeanPopulator.java:201) 
    at net.sf.beanlib.provider.BeanPopulator.processSetterMethod(BeanPopulator.java:172) 
    at net.sf.beanlib.provider.BeanPopulator.populate(BeanPopulator.java:270) 
    at net.sf.beanlib.provider.replicator.ReplicatorTemplate.populateBean(ReplicatorTemplate.java:174) 
    at net.sf.beanlib.provider.replicator.BeanReplicator.replicateBean(BeanReplicator.java:173) 
    at net.sf.beanlib.hibernate3.Hibernate3JavaBeanReplicator.replicateBean(Hibernate3JavaBeanReplicator.java:71) 
    at net.sf.beanlib.provider.replicator.ReplicatorTemplate.replicateByBeanReplicatable(ReplicatorTemplate.java:125) 
    at net.sf.beanlib.provider.replicator.ReplicatorTemplate.replicate(ReplicatorTemplate.java:120) 
    at net.sf.beanlib.provider.BeanTransformer.transform(BeanTransformer.java:224) 
    at net.sf.beanlib.hibernate.HibernateBeanReplicator.copy(HibernateBeanReplicator.java:133) 
    at net.sf.beanlib.hibernate.HibernateBeanReplicator.copy(HibernateBeanReplicator.java:111) 
    at com.v4common.shared.util.other.ConversionUtil.copyProperties(ConversionUtil.java:364) 
    at com.nextenders.dao.UserDetailsDao.fetchAllPostForUser(UserDetailsDao.java:3368) 
    at com.nextenders.dao.UserDetailsDao.processsRequest(UserDetailsDao.java:119) 
    at com.nextenders.common.DaoReceiver.processRequest(DaoReceiver.java:86) 
    at com.nextenders.common.DaoHandler.handleRequest(DaoHandler.java:12) 
    at com.nextenders.facadeimplementation.facade.UserFacade.fetchAllPostForUser(UserFacade.java:1526) 
    at com.nextenders.facadeimplementation.facade.UserFacade.getDataOnLogIn(UserFacade.java:2671) 
    at com.nextenders.facadeimplementation.facade.UserFacade.doLogin(UserFacade.java:2356) 
    at com.nextenders.server.LoginServlet.doPost(LoginServlet.java:304) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1097) 
    at com.nextenders.server.ExceptionHandler.doFilter(ExceptionHandler.java:28) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1088) 
    at com.nextenders.server.BaseFilter.doFilter(BaseFilter.java:79) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1088) 
    at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:66) 
    at com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:118) 
    at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:113) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1088) 
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360) 
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) 
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729) 
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405) 
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
    at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49) 
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
    at org.mortbay.jetty.Server.handle(Server.java:324) 
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505) 
    at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843) 
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647) 
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211) 
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380) 
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395) 
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488) 

И вы можете увидеть мой путь к классам здесь.

enter image description here

Любые подсказки по этому поводу?

Спасибо за любую помощь.

ответ

1

У меня была идентичная ошибка, и я решил ее с помощью gettign некоторых исходных банок и внесения нескольких изменений. Основная причина erorr заключается в том, что, не признавая класс Javassist, Beanlib пытается клонировать класс Javassist, который включает методы обработчика. Обычно он должен клонировать класс предков. Это то, что делает класс UnEnhance, - находит не-Javassist предка. Для этого нужно уметь определять, какие классы были созданы Javassist

Моя начальная точка не совсем такая же, как у вас, потому что мы использовали версию 3.3.0beta20b из Beanlib, если вы находитесь на 5.0.1beta. Тем не менее, трассировка стека, которую я получил, была идентична той, которую вы показываете, поэтому решение может также применяться к вашему делу. Как и мы, мы были на Javassist версии 3.18.1-GA

В библиотеке BeanlibHibernate класс UnEnancer отвечает за определение классов, которые происходят из Javassist.

  • более ранняя версия Javassist производства класса namees, которые содержали строку "_ $$ Javassist".

  • Более новая версия 3.18.1-GA создает классы, содержащие строку «_ $$ _ jvst». Я могу увидеть ту же строку в вашем примере выше.

  • Очень старая версия дает имена классов, начиная с «» org.javassist.tmp»

Методом isJavassistEnhanced использует условие или искать„старый“и„очень старые“критерии. Это должно быть изменено, так или условие позволяет в третьем случае, когда он смотрит на «новые» строки

Вот код в UnEnhance.java, прежде чем я изменил его:.

private static final String JAVASSIST_STARTWITH = "org.javassist.tmp."; 
private static final String JAVASSIST_INDEXOF = "_$$_javassist_"; 

/** 
* Returns true if the given class is found to be a javassist enhanced class; 
* false otherwise. 
*/ 
private static boolean isJavassistEnhanced(Class c) { 
    String className = c.getName(); 
    // pattern found in javassist 3.4 and 3.6's ProxyFactory 
    return className.startsWith(JAVASSIST_STARTWITH) 
     || className.indexOf(JAVASSIST_INDEXOF) != -1 
    ; 
    } 

А вот после того, как я изменил его:

private static final String JAVASSIST_STARTWITH = "org.javassist.tmp."; 
private static final String JAVASSIST_INDEXOF = "_$$_javassist_"; 
private static final String HB4_JAVASSIST = "_$$_jvst" ; 

/** 
* Returns true if the given class is found to be a javassist enhanced class; 
* false otherwise. 
*/ 
private static boolean isJavassistEnhanced(Class c) { 
    String className = c.getName(); 
    // pattern found in javassist 3.4 and 3.6's ProxyFactory 
    boolean isEnhanced = 
     className.startsWith(JAVASSIST_STARTWITH) 
     || className.indexOf(JAVASSIST_INDEXOF) != -1 
     || className.in`enter code here`dexOf(HB4_JAVASSIST) != -1 // 3.18.1-GA 
     ; 
    return isEnhanced ; 
} 

Я нашел источники в:

http://ebr.springsource.com/repository/app/bundle/version/detail?name=com.springsource.net.sf.beanlib.hibernate&version=3.3.0.beta21

http://ebr.springsource.com/repository/app/bundle/version/detail?name=com.springsource.net.sf.beanlib&version=3.3.0.beta21

С этим изменением, я мог бы принять это как фас, как Hibernate 4.2 .6 и GWT 2.5.0. Я не мог заставить DTO и функциональность newIdentifier работать, но, по-видимому, это не требуется Hibernate4GWT

Смежные вопросы