Во-первых, простите мой плохой английский, я просто усердно работаю над своим английским :).
Я пытаюсь найти более простой способ установить более простую связь между внешним и внутренним интерфейсом, потому что я использую ActiveMQ в качестве промежуточного программного обеспечения, ориентированного на сообщения. Таким образом, XML-строка стала носителем запроса.
Например, внешний интерфейс отправляет запрос строки на сервер, включая имя пакета, имя класса, имя метода и список параметров, таким образом, серверу разрешается вызывать правильный метод с помощью этой информации и отправлять вызывать результат обратно в интерфейс. Это работает, но не идеально. Проблема заключается в том, что когда я пытался вызвать метод в классе обслуживания с аннотацией @Transational
и @Service
(что является обычной практикой для подключения к базе данных), транзакция, казалось, не открывалась, запрос и ответ оба получены просто оставил много спящего соединения в процессе работы с базой данных mysql, столько же, сколько потребителям ActiveMQ каждый раз.
Целевой метод в классе обслуживания:
@Service
@Transactional
public class UserService {
@Autowired
private IUserDAO udao;
public User getUserByName(String username) {
return udao.findByUsername(username);
}
}
Метод вызова (часть кода была опущена):
@Component
public class ReflectTool {
public Object invokeMethod(String packageName,String className,String methodName,List paramList) {
BeanFactory beanFactory = new ClassPathXmlApplicationContext("applicationContext.xml");
Object obj = beanFactory.getBean(packageName+"."+className);
Class cla = obj.getClass();
Method method = findMethod(Class cla,String methodName);
return method.invoke(obj, params);
}
}
Я много раз искал ответ, но ни один из них не помог. Например: используйте прокси-объект для вызова, но не целевого объекта, потому что Spring Framework вместо прокси-класса использовал класс прокси с пометкой @Transactional
, чтобы помочь нам управлять транзакцией, но код (AopUtils.isAopProxy(obj)
) возвращает true
, так значит ли это, что объект является именно прокси-объектом, который я получил из контекста Spring? Я не очень знаком с моделью динамических агентов.
Спасибо за ваше внимание, пожалуйста, скажите мне, если я сделал что-то не так.