有关于这个在这么可怕的很多问题,但我已经尝试了一些他们的声音正确的,但我仍然得到为什么Spring的事务管理不能使用这个配置?
org.hibernate.HibernateException: No Session found for current thread
我的服务层类这样的注释:
@Service
public class MyService {
@Autowired
public SomeDao someDao;
@Transactional
public void performSomeTransaction() {/* ... */}
}
我的应用程序上下文XML具有以下相关声明:
<context:component-scan base-package = "com.myapp.business.dao.impl" />
<context:component-scan base-package = "com.myapp.business.services" />
<context:annotation-config />
<tx:annotation-driven transaction-manager = "transactionManager" />
<!-- Hibernate -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="hibernateProperties">
<props>
<prop key="connection.url">jdbc:mysql://localhost:3306/bidapp</prop>
<prop key="connection.username">bidapp</prop>
<prop key="connection.password">pennyfss</prop>
<prop key="connection.driver_class">com.mysql.jdbc.Driver</prop>
<prop key="hibernate.connection.pool_size">10</prop>
<prop key="hibernate.connection.autocommit">false</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="c3p0.acquireIncrement">1</prop>
<prop key="c3p0.max_size">50</prop>
<prop key="c3p0.max_statement">0</prop>
<prop key="c3p0.min_size">10</prop>
<prop key="c3p0.timeout">0</prop>
</props>
</property>
<property name="dataSource" ref="dataSource"></property>
<property name="packagesToScan">
<list>
<value>com.bidapp.business.domain</value>
</list>
</property>
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/bidapp" />
<property name="username" value="bidapp" />
<property name="password" value="pennyfss" />
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
我也有我的dispatcher-servlet.xml
文件与
<mvc:annotation-driven />
<mvc:default-servlet-handler />
<context:component-scan base-package="com.myapp.presentation.controllers" />
<context:annotation-config />
<bean id="viewResolver" class="org.thymeleaf.spring3.view.ThymeleafViewResolver">
<property name="templateEngine" ref="templateEngine" />
</bean>
为什么春季不包裹我的服务与交易?
所以看来这个问题与没有正确获取实例有关。我有以下四郎安全配置:
<bean id = "hibernateRealm" class = "com.bidapp.presentation.shiro.HibernateRealm" >
<property name = "credentialsMatcher" ref = "credentialsMatcher" />
</bean>
<bean id = "credentialsMatcher" class = "com.bidapp.presentation.shiro.JasyptCredentialsMatcher" />
<bean id = "securityManager" class = "org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property name = "realm" ref = "hibernateRealm" />
</bean>
HibernateRealm与@Transactional
注释的服务类。 Spring不应该在代理中包装它,因为它在这里创建它。
我很确定它与1有关。我正在使用shiro安全并声明一个bean服务来引用其中一个安全管理器。有没有解决这个问题的方法? –
我正在向我的Realm类注入一个DAO。指针之后,我自动装配了一个调用DAO的Service类。它使用事务性注释,所以我获得了额外跳跃的代价相同的行为。没什么大不了的。有用。 –