小编mik*_*e.l的帖子

如何使用Hibernate为Spring MVC中的读操作应用事务最佳实践?

正如博客/书籍中提到的(例如Mark Richards的Java Transactions Design Strategies),读取操作必须具有Propagation.SUPPORTS属性.

在一个带有Hibernate 4.1的简单Spring 3.1 MVC项目中,场景是:

  • 使用@Transactional进行声明式事务管理
  • org.springframework.orm.hibernate4.LocalSessionFactoryBean的sessionFactory
  • org.springframework.orm.hibernate4.HibernateTransactionManager的事务管理器
  • 带@Transactional的服务类(propagation = Propagation.REQUIRED)
  • 仅使用@Transactional(propagation = Propagation.SUPPORTS)检索结果集(执行读取操作)的Service类的功能
  • 读取操作的功能使用sessionFactory.getCurrentSession()来恢复结果集.get()

当然,当Controller执行读操作的功能时,会引发异常"找不到当前线程的会话",因为没有启动事务并且没有获得会话.

基于上述配置(尽管最好是非侵入性,较少代码等),除非在使用Propagation.REQUIRED或Propagation.REQUIRES_NEW之前启动事务,否则不能使用Propagation.SUPPORTS属性.

我们如何使用Propagation.SUPPORTS进行读取操作而无需启动事务,例如之前使用Propagation.REQUIRED但仍然利用声明式事务管理的好处?

先感谢您.

编码器,这是配置:

<tx:annotation-driven transaction-manager="txManager"/>

<context:component-scan base-package="com.myapps.service.impl" />

<bean id="txManager"
    class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="${db.driverClassName}" />
    <property name="url" value="${db.url}" />
    <property name="username" value="${db.username}" />
    <property name="password" value="${db.password}" />
</bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="mappingResources">
        <list>
            <value>.....</value>
        </list>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">${db.dialect}</prop>
            <prop key="hibernate.format_sql">true</prop>
        </props>
    </property> …
Run Code Online (Sandbox Code Playgroud)

spring hibernate transactions

5
推荐指数
1
解决办法
1985
查看次数

如何将使用Message Listener接收的JMS消息转换为域对象

我在用:

  • 春季3.1.1
  • ActiveMQ 5.6.0

我有两个JMS应用程序:

  • App A使用JmsTemplate使用jmsTemplate.convertAndSend(msg)发送域对象;
  • App B使用Message Listener并注册了Message Converter

转换接收的消息时,将提取空值.

我知道这必须相当简单,但我得到空值,我没有找到一个例子来看我做错了什么.

有人可以解释一下这是如何工作的吗?

域对象

public class MyDomainObj implements Serializable {

private static final long serialVersionUID = -5411260096045103654L;
private String name;
private String msg;

public MyDomainObj() {

}

public MyDomainObj(String name, String msg) {
    this.name = name;
    this.msg = msg;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getMsg() {
    return msg;
}

public void setMsg(String msg) {
    this.msg …
Run Code Online (Sandbox Code Playgroud)

spring jms

5
推荐指数
1
解决办法
1万
查看次数

如何使用RedirectAttributes测试Spring MVC控制器

我在用:

  • 春季3.1
  • JUnit 4.10

我正在尝试使用RedirectAttributes为控制器编写一个junit测试用例.

控制器的签名是:

@RequestMapping(method = RequestMethod.POST)
public String homePOST(@Validated({ IBasic.class }) @ModelAttribute("userCommand") User userCommand,
            BindingResult result, Model model,
            RedirectAttributes flashAttributes)
Run Code Online (Sandbox Code Playgroud)

JUnit测试用例是:

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations = { "/root-context.xml", "/servlet-context.xml" })
public class HomeControllerTest {

    @Autowired
    private RequestMappingHandlerAdapter handlerAdapter;

    @Autowired
    private RequestMappingHandlerMapping handlerMapping;

    @Test
    public void testHomePOST() {
        MockHttpServletRequest request = new MockHttpServletRequest("POST", "/");
        request.addParameter("username", "user1");
        request.addParameter("password", "mypasswd");

        MockHttpServletResponse response = new MockHttpServletResponse();

        Object handler;

        try {
            handler = handlerMapping.getHandler(request).getHandler();

            ModelAndView modelAndView = handlerAdapter.handle(request,
                    response, handler);

            assertViewName(modelAndView, "redirect:/myview");
        } catch …
Run Code Online (Sandbox Code Playgroud)

junit spring-mvc

2
推荐指数
1
解决办法
6186
查看次数

使用build-helper-maven-plugin的目标"regex-property"解析属性时可能出现的错误?

要求是我必须使用正则表达式解析系统属性,以便从值中删除点.

执行示例是:mvn install -Dsomeversion = 1.3

pom.xml配置是:

<plugin>
 <groupId>org.codehaus.mojo</groupId>
 <artifactId>build-helper-maven-plugin</artifactId>
 <version>1.8</version>
 <executions>
  <execution>
   <id>regex-property</id>
   <goals>
    <goal>regex-property</goal>
   </goals>
   <configuration>
    <name>someversion.parsed</name>
    <value>$\{someversion}</value>
    <regex>(.*)[\._](.*)</regex>
    <replacement>$1$2</replacement>
    <failIfNoMatch>false</failIfNoMatch>
   </configuration>
  </execution>
 </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

根据插件的文档,在美元登录后必须有反斜杠 <value>

问题是:

  1. 当存在反斜杠时,不会解析系统属性
  2. 如果我删除反斜杠:
    a)系统属性被成功解析
    b)如果执行"mvn install"我得到的参数'value'缺失或不正确的错误,尽管我已配置<failIfNoMatch>false</failIfNoMatch>

任何反馈都将受到高度赞赏

先感谢您

maven

2
推荐指数
1
解决办法
5451
查看次数

标签 统计

spring ×2

hibernate ×1

jms ×1

junit ×1

maven ×1

spring-mvc ×1

transactions ×1