Spring 4 Java Config Transactions Proxy и Aspecj

Я создаю новый проект, который использует транзакции аспектов. Он также использует устаревшие файлы JAR, содержащие службы, использующие метод прокси, где требуется интерфейс.

Я использую конфигурацию Java, и когда я устанавливаю

@EnableTransactionManagement(mode=AdviceMode.ASPECTJ)

Затем я получаю следующее исключение при доступе к службам стиля прокси из устаревших библиотек:

org.hibernate.LazyInitializationException: could not initialize proxy - no Session

Если я перейду на:

@EnableTransactionManagement(режим=AdviceMode.PROXY)

Тогда я не понимаю проблемы, но я не могу использовать транзакции в стиле аспекта в моем новом проекте.

Я пытался добавить две аннотации @EnableTransactionManagement для каждого режима совета, но это не разрешено.

Вот аннотированный класс

@EnableWebMvc
@Configuration
@ComponentScan("com.mydomain")
@EnableTransactionManagement(mode=AdviceMode.ASPECTJ)
public class ApplicationConfig  extends WebMvcConfigurerAdapter {
...

Я также добавил подключаемый модуль Anspectj maven к устаревшему проекту в надежде, что он будет обрабатывать переплетение во время компиляции и, таким образом, транзакции аспекта будут работать. Но это не решило проблему.

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>aspectj-maven-plugin</artifactId>
    <version>1.7</version>
    <configuration>
        <aspectLibraries>
            <aspectLibrary>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aspects</artifactId>
            </aspectLibrary>
        </aspectLibraries>
        <complianceLevel>1.8</complianceLevel>
        <source>1.8</source>
        <target>1.8</target>
        <showWeaveInfo>true</showWeaveInfo>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>compile</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Возможно ли иметь весеннюю сделку с обоими режимами консультаций? Как бы я это сделал?

Или есть другой способ обойти эту проблему.


person Rian    schedule 27.11.2015    source источник


Ответы (1)


Проблема была с конфигурацией аспекта в устаревшем проекте.

Когда я запустил компиляцию mvn, это стало очевидным. Мне пришлось добавить зависимость:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aspects</artifactId>
    <version>${spring.version}</version>
</dependency>

Это заставило его работать при компиляции с использованием maven, но я бы все равно не работал в eclipse. Мне пришлось щелкнуть правой кнопкой мыши по устаревшему проекту в eclipse:

Configure>Convert to Aspectj Project

Затем я мог развернуться из eclipse, и у меня была поддержка транзакций в устаревших банках.

person Rian    schedule 27.11.2015