【问题标题】:Deploy spring boot to websphere 8.5.5.5将spring boot部署到websphere 8.5.5.5
【发布时间】:2016-02-26 12:04:21
【问题描述】:

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

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

原因:java.lang.ClassCastException:com.ibm.websphere.persistence.PersistenceProviderImpl 与 javax.persistence.spi.PersistenceProvider 不兼容 在 javax.persistence.Persistence$1.isLoaded(Persistence.java:77) 在 org.hibernate.validator.internal.engine.resolver.JPATraversableResolver.isReachable(JPATraversableResolver.java:56) 在 org.hibernate.validator.internal.engine.resolver.DefaultTraversableResolver.isReachable(DefaultTraversableResolver.java:137) 在 org.hibernate.validator.internal.engine.resolver.CachingTraversableResolverForSingleValidation.isReachable(CachingTraversableResolverForSingleValidation.java:46) 在 org.hibernate.validator.internal.engine.ValidatorImpl.isReachable(ValidatorImpl.java:1396) ... 137 更多

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

<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 boot部署到websphere有什么遗漏吗?

更新

我做了什么 1)添加休眠版本并降级到4.2.15:Final 2)将父级设置为类加载器

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

【问题讨论】:

    标签: spring hibernate jpa websphere-8


    【解决方案1】:

    没有缺少的依赖,有一个太多了。您不应该包含 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 的两个依赖项。

    【讨论】:

    • 感谢您的快速回复。在我将 jpa2.0 设置为提供或删除它后,同样的异常抛出
    • java.lang.ClassCastException 仍然抛出。有没有我需要做的编码或我缺少的配置?
    • 你能粘贴mvn dependency:tree的输出吗?
    • 这个问题解决了,hibernate-jpa-2.0-api应该设置为provided,这样应用中就没有jpa api了。邓尼,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2014-03-09
    • 2014-09-04
    • 2022-08-10
    • 1970-01-01
    • 2016-09-08
    • 2018-06-21
    • 2018-01-31
    • 1970-01-01
    相关资源
    最近更新 更多