我正在使用Spring专门为使用Hibernate的DAO类连接依赖项,但是我得到了一个令我困惑的异常:
$ Proxy58无法强制转换为UserDao
我的DAO配置如下:
<bean id="userDao" class="com.domain.app.dao.UserDao">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
Run Code Online (Sandbox Code Playgroud)
我有一个接口,抽象基类和最终实现如下.
接口:
public interface Dao {
public void save(Object object);
public Object load(long id);
public void delete(Object object);
public void setSessionFactory(SessionFactory sessionFactory);
}
Run Code Online (Sandbox Code Playgroud)
抽象基类:
public abstract class BaseDao implements Dao {
private SessionFactory sessionFactory;
@Transactional
@Override
public void save(Object object) {
PersistentEntity obj = (PersistentEntity) object;
currentSession().saveOrUpdate(obj);
}
@Transactional
@Override
public abstract Object load(long id);
@Transactional
@Override
public void delete(Object object) {
// TODO: this method!
}
public …
Run Code Online (Sandbox Code Playgroud) 尽管这个项目已经为我工作了一段时间,但是当我尝试在Tomcat中部署我的应用程序上下文时,我现在遇到异常:
Servlet /testapp threw load() exception
java.lang.NoSuchMethodError: org.springframework.core.convert.converter.ConverterRegistry.addConverter(Ljava/lang/Class;Ljava/lang/Class;Lorg/springframework/core/convert/converter/Converter;)V
at org.springframework.core.convert.support.DefaultConversionService.addScalarConverters(DefaultConversionService.java:62)
Run Code Online (Sandbox Code Playgroud)
从我读过的内容来看,如果在应用程序中编译了多个版本的Spring,就会发生这种情况.但是,我已经完全清除了我的本地依赖库,以确认我的构建路径中只有我想要的版本.我的依赖关系如下:
<properties>
<java-version>1.6</java-version>
<org.springframework.version>3.1.0.RELEASE</org.springframework.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<dependencies>
<!-- CGLIB, only required and used for @Configuration usage -->
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib-nodep</artifactId>
<version>2.2.2</version>
</dependency>
<!-- Test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
<!-- @Inject -->
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>1.9.4</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.4</version>
</dependency>
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-eclipse-plugin</artifactId>
<version>2.8</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${org.springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework.version}</version>
<optional>false</optional>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version> …
Run Code Online (Sandbox Code Playgroud) 我试图将Tyrus部署到Tomcat 8容器并且失败了.根据文档,我应该能够部署包含我的类和支持Tyrus类/依赖项的WAR,并且所有使用@ServerEndpoint注释的类都应该在WAR中找到并部署为websocket端点.这条指令给了我一点点因为我没有在部署描述符中定义任何类型的过滤器,但我决定在Tomcat 8中支持JSR 356时我必须以某种方式取决于一些未知的魔法.事实证明,没有这样的魔力.注意:我正在使用Tomcat 8,因为我的理解是它支持JSR 356 websocket标准.另外,我的JDK是最新的Java 7版本.
我花了一些时间研究这个并发现人们通过从命令行运行服务器实例(org.glassfish.tyrus.server.Server)作为Java应用程序,成功地通过Tyrus发布websocket端点.我试过这个并且它有效.但是,我无法找到在Tomcat上部署WAR的任何成功.
有没有人对在Tomcat 8上通过Tyrus成功发布websocket端点所需的步骤有所了解?
deployment ×2
spring ×2
tomcat ×2
casting ×1
hibernate ×1
java ×1
spring-mvc ×1
tyrus ×1
websocket ×1