部署 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 的两个依赖项。
我正在尝试使用 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 的两个依赖项。