部署 spring 启动到 websphere 8.5.5.5

Deploy spring boot to websphere 8.5.5.5

我正在尝试使用 jpa、hibernate、jersey 为 websphere 构建一个 spring 引导项目。

当我知道 websphere 仅支持 JPA 2.0 后,我找到了这篇文章(Halo, I am article) 并尝试遵循它。但是它似乎对我不起作用。抛出异常

Caused by: java.lang.ClassCastException: com.ibm.websphere.persistence.PersistenceProviderImpl incompatible with javax.persistence.spi.PersistenceProvider at javax.persistence.Persistence.isLoaded(Persistence.java:77) at org.hibernate.validator.internal.engine.resolver.JPATraversableResolver.isReachable(JPATraversableResolver.java:56) at org.hibernate.validator.internal.engine.resolver.DefaultTraversableResolver.isReachable(DefaultTraversableResolver.java:137) at org.hibernate.validator.internal.engine.resolver.CachingTraversableResolverForSingleValidation.isReachable(CachingTraversableResolverForSingleValidation.java:46) at org.hibernate.validator.internal.engine.ValidatorImpl.isReachable(ValidatorImpl.java:1396) ... 137 more

我的pom.xml设置如下 ` org.springframework.boot spring-boot-starter-parent 1.2.7.RELEASE

<properties>
    <start-class>com.jersey.Application</start-class>
    <jersey-version>2.7</jersey-version>
    <jackson-version>2.4.3</jackson-version>
    <java.version>1.7</java.version>
    <servlet-api.version>3.0.1</servlet-api.version>
</properties>

<dependencies>
    <!-- Spring -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.hibernate</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jersey</artifactId>
    </dependency>

    <!-- End Spring -->

    <!-- Jackson -->
    <dependency>
        <groupId>com.fasterxml.jackson.jaxrs</groupId>
        <artifactId>jackson-jaxrs-json-provider</artifactId>
        <version>${jackson-version}</version>
    </dependency>
    <!-- End Jackson -->

    <!-- Guava -->
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>18.0</version>
    </dependency>
    <!-- End Guava -->

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>4.2.15.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>4.2.15.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate.javax.persistence</groupId>
        <artifactId>hibernate-jpa-2.0-api</artifactId>
        <version>1.0.0.Final</version>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.2</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

<repositories>
    <repository>
        <id>spring-releases</id>
        <url>http://repo.spring.io/libs-release</url>
    </repository>
</repositories>
<pluginRepositories>
    <pluginRepository>
        <id>spring-releases</id>
        <url>http://repo.spring.io/libs-release</url>
    </pluginRepository>
</pluginRepositories>`

我想知道部署 spring 启动到 websphere 是否有遗漏?

更新

我做了什么 1)添加hibernate版本并降级到4.2.15:Final 2) 将 parent last 设置为 class loader

我想知道是否有可以部署到 websphere 的完整示例?

没有缺少的依赖,有一个太多了。您不应该包含 hibernate-jpa-2.0-api,因为 WebSphere 已经提供了 JPA API 类,因此如果您将范围设置为为该依赖项提供,它应该可以工作:

<dependency>
    <groupId>org.hibernate.javax.persistence</groupId>
    <artifactId>hibernate-jpa-2.0-api</artifactId>
    <version>1.0.0.Final</version>
    <scope>provided</scope>
</dependency>

这适用于容器提供的所有 Java EE API。它们不应包含在您的部署中。

另一点,可以简化您的 pom.xml:要更改 Hibernate 版本,Spring Boot 提供了一个 属性 来显式管理版本。只需将以下内容添加到您的属性标签中:

<hibernate.version>4.2.15.Final</hibernate.version>

然后你可以删除 hibernate 的排除标签以及对 hibernate-core 和 hibernate-entitymanager 的两个依赖项。