java - 无法启动 Guice 存储库注入(inject)器

标签 java hibernate

我正在使用 Spring 3.2.3.RELEASE、Google Guice 3.0、guice-repository 2.1.0、guice-servlet 3.0 和 Hibernate 3。

当我在 servlet 模块(web.xml)中安装 JpaRepository 时,出现运行时错误。

下面是源码

public class JpaGuiceServletConfig extends GuiceServletContextListener {

    @Override
    protected Injector getInjector() {
        return Guice.createInjector(new ServletModule(){
            @Override
             protected void configureServlets() {
                this.install(new JpaRepositoryModule("ptol-persistence-unit") {
                    @Override
                    protected void bindRepositories(RepositoryBinder binder) {
                        binder.bind(CategoryRepository.class).to("ptol-persistence-unit");
                    }
                });
                //filter("/*").through(PersistFilter.class);
             }
        });
    }

}

在 web.xml 中

<!-- Listener Configuration -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <listener>
      <listener-class>phattuonline.common.base.JpaGuiceServletConfig</listener-class>
    </listener>

我收到错误:

Jul 10, 2013 4:37:05 PM org.apache.catalina.core.StandardContext listenerStart
SEVERE: Exception sending context initialized event to listener instance of class phattuonline.common.base.JpaGuiceServletConfig
java.lang.NoSuchMethodError: org.springframework.transaction.annotation.AnnotationTransactionAttributeSource.<init>(Lorg/springframework/transaction/annotation/TransactionAnnotationParser;)V
    at com.google.code.guice.repository.configuration.JpaRepositoryModule.createTransactionAttributeSource(JpaRepositoryModule.java:283)
    at com.google.code.guice.repository.configuration.JpaRepositoryModule.configure(JpaRepositoryModule.java:170)
    at com.google.inject.AbstractModule.configure(AbstractModule.java:59)
    at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:223)
    at com.google.inject.AbstractModule.install(AbstractModule.java:118)
    at phattuonline.common.base.JpaGuiceServletConfig$1.configureServlets(JpaGuiceServletConfig.java:19)
    at com.google.inject.servlet.ServletModule.configure(ServletModule.java:53)
    at com.google.inject.AbstractModule.configure(AbstractModule.java:59)
    at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:223)
    at com.google.inject.spi.Elements.getElements(Elements.java:101)
    at com.google.inject.internal.InjectorShell$Builder.build(InjectorShell.java:133)
    at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:103)
    at com.google.inject.Guice.createInjector(Guice.java:95)
    at com.google.inject.Guice.createInjector(Guice.java:72)
    at com.google.inject.Guice.createInjector(Guice.java:62)
    at phattuonline.common.base.JpaGuiceServletConfig.getInjector(JpaGuiceServletConfig.java:16)
    at com.google.inject.servlet.GuiceServletContextListener.contextInitialized(GuiceServletContextListener.java:45)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4765)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5260)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1525)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1515)
    at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

你知道为什么会发生这个错误吗?交易有问题吗?

谢谢

最佳答案

Guice 存储库模块已经包含对 Spring Data 模块的所有依赖项(如果您仅使用 Guice 作为 DI 框架,则不需要在 POM 上引用 Spring。可能,您的 POM 显式依赖于这些 Spring 模块的另一个版本,因此 Guice 正在尝试读取这个不受支持的显式版本。

参见https://code.google.com/p/guice-repository/wiki/DevGuide?tm=6#Where_i_can_get_it

关于java - 无法启动 Guice 存储库注入(inject)器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17641625/

相关文章:

java - 数组值在循环外更改 - Java

java - 当 inputType 为文本时,EditText 接收按键事件,尽管 Dialog.OnKeyListener 消耗了所有事件

java - 端口和本地端口有什么区别?

java - 使用 EntityManager 验证实体的唯一性

java - Eclipse 中使用 Hibernate 时出现 org.hibernate.HibernateException 错误。!@!

java - 即时更改数据库列类型

java - 我可以指定特定的解析器规则来跳过空格吗?

java - Runtime.exec() 在 tomcat/web 应用程序上不能正常工作

java - 在 H2 中持久化 ManyToMany 实体会引发异常

java - hibernate :无法从 ResultSet 和 IllegalArgumentException:GregorianCalendar.computeTime 读取实体状态