Spring EJB - WEB - ELASTICSEARCH - JPA - CRUD - БИЗНЕС-МЕТОД Ошибка связи

У меня проблемы, и я застрял в разработке своего проекта. Я начал разрабатывать хобби-проект, основанный на весенних рамках, и через некоторое время части проекта начали совмещаться. Существует два основных модуля: один - модуль EJB, другой - модуль WEB. Репозитории и основные EJB-компоненты хранятся в модуле EJB и используются из модуля WEB. Так как я уже пользовался эластичным поиском, и меня впечатлило, насколько быстро и эффективно можно обрабатывать данные, я подумал, что собираюсь интегрировать их в свой хобби-проект.

Чтобы интегрировать asticsearch, я принял соответствующие меры и добавил необходимые библиотеки в файл pom проекта. На первый взгляд казалось, что все работает хорошо, но позже оказалось, что это не так. Я создал репозитории, чтобы протестировать их, и я был счастлив, и когда я тестировал другое будущее, которое работало совершенно раньше, меня приветствовало следующее исключение:

11: 41: 25,213 ОШИБКА [io.undertow.request] (задание по умолчанию-33) UT005023: Запрос обработки исключительной ситуации в /axyz-web/test/test: org.springframework.web.util.NestedServletException: сбой отправки обработчика; вложенным исключением является java.lang.LinkageError: нарушение ограничения загрузчика: при разрешении метода интерфейса "com.myproject.axyz.beans.stateless.user.UserManagementLocal.findUsers(Lorg/springframework/data/domain/Pageable;)Lorg/springframework/data/ домен / страница;" загрузчик классов (экземпляр org/jboss/modules/ModuleClassLoader) текущего класса, com/myproject/axyz/spring/controllers/test/TestController и загрузчик классов (экземпляр org/jboss/modules/ModuleClassLoader) для Класс, определяющий метод, com / myproject / axyz / beans / stateless / user / UserManagementLocal, имеет различные объекты Class для типа org / springframework / data / domain / Pageable, используемого в подписи

В первый раз я подумал, что скомпилировал разные версии spring-boot-data-asticsearch как проекта war, так и ejb (потому что я хочу использовать хранилища crud для эластичного поиска в моем веб-проекте), и после некоторого исследования я заметил, что мои подозрения подтвердились,

Во-первых, я удалил зависимость из WEB-проекта, поскольку она зависит от модуля EJB, и снова скомпилировал проект, а затем развернул его. Итак, spring-boot-data-asticsearch был скомпилирован в модуль EJB.

Следующее сообщение, которое я получил, было следующим:

11: 54: 08,407 ОШИБКА [org.springframework.web.context.ContextLoader] (Пул потоков ServerService - 382) Сбой инициализации контекста: org.springframework.beans.factory.BeanDefinitionStoreException: непредвиденное исключение при синтаксическом анализе документа XML из ресурса ServletConINF [ /applicationContext.xml]; вложенным исключением является org.springframework.beans.FatalBeanException: класс [org.springframework.data.elasticsearch.config.ElasticsearchNamespaceHandler] для пространства имен [ http://www.springframework.org/schema/data/elasticsearch] не выполняет.springframework.beans.factory.xml.NamespaceHandler] интерфейс.

Хорошо, в следующем раунде я скомпилировал spring-boot-data-asticsearch в модуль EAR и установил область действия для библиотеки в обоих модулях.

Как это:

УШНОЙ МОДУЛЬ:

        <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        <version>${spring.boot.framework.version}</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>com.xyz.xy</groupId>
        <artifactId>xyz-ejb</artifactId>
        <version>1.0-SNAPSHOT</version>
        <type>ejb</type>
    </dependency>
    <dependency>
        <groupId>com.xyz.xy</groupId>
        <artifactId>xyz-web</artifactId>
        <version>1.0-SNAPSHOT</version>
        <type>war</type>
    </dependency>
</dependencies>

<build>
    <resources>
        <resource>
            <filtering>true</filtering>
            <directory>src/test/resources</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <excludes>
                <exclude>**/*local.properties</exclude>
            </excludes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
        </resource>
    </resources>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-ear-plugin</artifactId>
            <version>2.8</version>
            <configuration>
                <version>6</version>
                <defaultLibBundleDir>lib</defaultLibBundleDir>
                <!------- 
                FINAL DESPAIR
                <modules>
                    <jarModule>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
                        <bundleFileName>spring-boot-starter-elasticsearch.jar</bundleFileName>
                    </jarModule>
                </modules> 

                --------------------------->
            </configuration>
        </plugin>
    </plugins>
</build>

EJB МОДУЛЬ:

    <dependencies>
    <dependency>
        <groupId>org.eclipse.persistence</groupId>
        <artifactId>javax.persistence</artifactId>
        <version>2.1.0</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.persistence</groupId>
        <artifactId>eclipselink</artifactId>
        <version>2.5.2</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.4</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.persistence</groupId>
        <artifactId>org.eclipse.persistence.jpa.modelgen.processor</artifactId>
        <version>2.5.2</version>
        <scope>compile</scope>
    </dependency>

    <dependency>
        <groupId>commons-collections</groupId>
        <artifactId>commons-collections</artifactId>
        <version>3.2.2</version>
    </dependency>
    <dependency>
        <groupId>commons-lang</groupId>
        <artifactId>commons-lang</artifactId>
        <version>2.6</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>commons-jxpath</groupId>
        <artifactId>commons-jxpath</artifactId>
        <version>1.3</version>
    </dependency>
    <dependency>
        <groupId>commons-configuration</groupId>
        <artifactId>commons-configuration</artifactId>
        <version>1.10</version>
    </dependency>
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>7.0</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-orm</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>cglib</groupId>
        <artifactId>cglib</artifactId>
        <version>3.2.1</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <!-- For JBOSS -->
    <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjrt -->
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjrt</artifactId>
        <version>1.8.10</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.5.4</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>aopalliance</groupId>
        <artifactId>aopalliance</artifactId>
        <version>1.0</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>${spring.version}</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>${spring.version}</version>
        <scope>compile</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-expression -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-expression</artifactId>
        <version>${spring.version}</version>
        <scope>compile</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.6</version>
        <scope>compile</scope>
    </dependency>

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

    <!--  SPRING BOOT -->

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
        <version>${spring.boot.framework.version}</version>
        <scope>compile</scope>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.data</groupId>
                <artifactId>spring-data-commons</artifactId>
            </exclusion>
        </exclusions>
    </dependency>


    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        <version>${spring.boot.framework.version}</version>
        <scope>provided</scope>
    </dependency>


    <!-- dependency>
        JUST ANOTHER TRYING.......
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-elasticsearch</artifactId>
        <version>2.1.4.RELEASE</version>
    </dependency -->

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>${spring.boot.framework.version}</version>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
        </exclusions>
        <scope>compile</scope>
    </dependency>   


    <!-- END  -->
</dependencies>


<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.jboss.arquillian</groupId>
            <artifactId>arquillian-bom</artifactId>
            <version>1.1.11.Final</version>
            <scope>import</scope>
            <type>pom</type>
        </dependency>
    </dependencies>
</dependencyManagement>


<build>
    <resources>
        <resource>
            <filtering>true</filtering>
            <directory>src/test/resources</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <excludes>
                <exclude>**/*local.properties</exclude>
            </excludes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
        </resource>
    </resources>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>${spring.boot.framework.version}</version>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
                <compilerArguments>
                    <endorseddirs>${endorsed.dir}</endorseddirs>
                </compilerArguments>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-ejb-plugin</artifactId>
            <version>2.3</version>
            <configuration>
                <ejbVersion>3.1</ejbVersion>
                <addClasspath>true</addClasspath>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.8</version>
            <executions>
                <execution>
                    <phase>validate</phase>
                    <goals>
                        <goal>copy</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${endorsed.dir}</outputDirectory>
                        <silent>true</silent>
                        <artifactItems>
                            <artifactItem>
                                <groupId>javax</groupId>
                                <artifactId>javaee-endorsed-api</artifactId>
                                <version>7.0</version>
                                <type>jar</type>
                            </artifactItem>
                        </artifactItems>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

ВЕБ-МОДУЛЬ:

     .... Spring dependencies ......
    <dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-expression</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>${spring.version}</version>
    </dependency>
    ............

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        <version>${spring.boot.framework.version}</version>
        <scope>provided</scope>
    </dependency>

    <!--
        EJB MODULE 
    -->
    <dependency>
        <groupId>MY EJB PROJECT</groupId>
        <artifactId>MY EJB PROJECT-ejb</artifactId>
        <version>1.0-SNAPSHOT</version>
        <scope>provided</scope>
    </dependency>
    <build>
    <resources>
        <resource>
            <filtering>true</filtering>
            <directory>src/test/resources</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <excludes>
                <exclude>**/*local.properties</exclude>
            </excludes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
        </resource>
    </resources>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.19.1</version>
            <configuration>
                <skipTests>${test.skip}</skipTests>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
                <compilerArguments>
                    <endorseddirs>${endorsed.dir}</endorseddirs>
                </compilerArguments>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.4.1</version>
            <executions>
                <execution>
                    <phase>${shade.phase}</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <minimizeJar>true</minimizeJar>
                <artifactSet>
                    <includes>
                        <include>com.google.guava:guava</include>
                        <include>net.sf.trove4j:trove4j</include>
                        <include>org.mvel:mvel2</include>
                        <include>com.fasterxml.jackson.core:jackson-core</include>
                        <include>com.fasterxml.jackson.dataformat:jackson-dataformat-smile</include>
                        <include>com.fasterxml.jackson.dataformat:jackson-dataformat-yaml</include>
                        <include>joda-time:joda-time</include>
                        <include>io.netty:netty</include>
                        <include>com.ning:compress-lzf</include>
                    </includes>
                </artifactSet>
                <relocations>
                    <relocation>
                        <pattern>com.google.common</pattern>
                        <shadedPattern>org.elasticsearch.common</shadedPattern>
                    </relocation>
                    <relocation>
                        <pattern>gnu.trove</pattern>
                        <shadedPattern>org.elasticsearch.common.trove</shadedPattern>
                    </relocation>
                    <relocation>
                        <pattern>jsr166y</pattern>
                        <shadedPattern>org.elasticsearch.common.util.concurrent.jsr166y</shadedPattern>
                    </relocation>
                    <relocation>
                        <pattern>jsr166e</pattern>
                        <shadedPattern>org.elasticsearch.common.util.concurrent.jsr166e</shadedPattern>
                    </relocation>
                    <relocation>
                        <pattern>org.mvel2</pattern>
                        <shadedPattern>org.elasticsearch.common.mvel2</shadedPattern>
                    </relocation>
                    <relocation>
                        <pattern>com.fasterxml.jackson</pattern>
                        <shadedPattern>org.elasticsearch.common.jackson</shadedPattern>
                    </relocation>
                    <relocation>
                        <pattern>org.joda</pattern>
                        <shadedPattern>org.elasticsearch.common.joda</shadedPattern>
                    </relocation>
                    <relocation>
                        <pattern>org.jboss.netty</pattern>
                        <shadedPattern>org.elasticsearch.common.netty</shadedPattern>
                    </relocation>
                    <relocation>
                        <pattern>com.ning.compress</pattern>
                        <shadedPattern>org.elasticsearch.common.compress</shadedPattern>
                    </relocation>
                </relocations>
                <filters>
                    <filter>
                        <artifact>*:*</artifact>
                        <excludes>
                            <exclude>META-INF/license/**</exclude>
                            <exclude>META-INF/*</exclude>
                            <exclude>META-INF/maven/**</exclude>
                            <exclude>LICENSE</exclude>
                            <exclude>NOTICE</exclude>
                            <exclude>/*.txt</exclude>
                            <exclude>build.properties</exclude>
                        </excludes>
                    </filter>
                </filters>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.3</version>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.8</version>
            <executions>
                <execution>
                    <phase>validate</phase>
                    <goals>
                        <goal>copy</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${endorsed.dir}</outputDirectory>
                        <silent>true</silent>
                        <artifactItems>
                            <artifactItem>
                                <groupId>javax</groupId>
                                <artifactId>javaee-endorsed-api</artifactId>
                                <version>7.0</version>
                                <type>jar</type>
                            </artifactItem>
                        </artifactItems>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

ВЕРСИЯ ЧИСЛА

    <properties>
     <spring.boot.framework.version>1.5.5.RELEASE</spring.boot.framework.version>
     <spring.version>4.3.8.RELEASE</spring.version>
     <org.springframework.version>4.3.8.RELEASE</org.springframework.version>
</properties>

Пример подключения:

    <elasticsearch:repositories base-package="com.xxxxxxxxxxxxxxxxxxx.spring.elasticsearch.repositories"/>  

<elasticsearch:transport-client id="esClient" cluster-nodes="localhost:9300" />

<bean id="esConnection" class="com.xxxxxxxxxxxxxx.core.elasticsearch.ESConnection" init-method="init"  scope="session">
    <constructor-arg name="con" ref="container"></constructor-arg>
    <property name="client" ref="esClient"></property>
</bean>

<bean name="elasticsearchTemplate" class="org.springframework.data.elasticsearch.core.ElasticsearchTemplate">
    <constructor-arg name="client" ref="esClient"/>
</bean>

Я также попытался исключить Spring-data-commons (потому что Pageable и Page и другие компоненты определены в этой библиотеке) и скомпилировать его отдельно в WEB-модуль, но эффекты были одинаковыми, и я хочу использовать asticsearch и его хранилища отдельно в обоих модулях.

В заключение, если я не скомпилирую библиотеку asticsearch в свой WEB-модуль, она никогда не сможет интерпретировать XML или создание bean-компонентов (я тоже пробовал аннотации JAVA, пробовал более новые версии, ситуация была такая же), поэтому Я не знаю, что я могу сделать, чтобы решить эту проблему, потому что ошибки компоновки произошли, если библиотека скомпилирована в WEB-модуль.

У кого-нибудь есть идеи, как решить эту проблему? Это вообще возможно?

0 ответов

Другие вопросы по тегам