Я знаю, что не рекомендуется делать транзакционный контроллер, но хочу попробовать решение, обсуждаемое здесь
Согласно документации Spring MVC 17.3.2 :
Обычная ошибка при работе с аннотированными классами контроллеров возникает при применении функциональности, которая требует создания прокси для объекта контроллера (например, методы @Transactional). Обычно вы вводите интерфейс для контроллера, чтобы использовать динамические прокси JDK. Чтобы сделать это, вы должны переместить аннотации @RequestMapping, а также любые другие аннотации на уровне типа и метода (например, @ModelAttribute, @InitBinder) в интерфейс, так как механизм отображения может только «видеть» интерфейс, предоставляемыйproxy.
Я должен иметь возможность сделать метод RestController транзакционным, если я "переместлю все аннотации методов на его интерфейс"?
В этом предположении я написал следующие коды, которые до сих порне дал мне транзакционный метод doSth ():
public interface SomeController{
@Transactional
@RequestMapping(...)
void doSth()
}
@RestController
public class SomeControllerImpl implements SomeController{
@Override
public void doSth(){...}
}
web.xml
<servlet>
<servlet-name>someServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>...</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>someServlet</servlet-name>
<url-pattern>...</url-pattern>
</servlet-mapping>
context.spring.xml
<jee:jndi-lookup id="dataSource" jndi-name="jdbc/project" resource-ref="true" />
<tx:annotation-driven />
<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager" />
Может кто-нибудь помочь объяснить, почему это не работает и есть ли способ сделать метод в RestController транзакционным?