Почему мое Java-приложение работает локально, но при доставке в IBM Cloud выдает эту ошибку - PullRequest
0 голосов
/ 02 марта 2019

Я создал приложение, которое использует JPA, а также сервлеты с JAX-RS.

Когда я запускаю приложение локально, я могу запросить мой сервер с помощью curl и получить правильный ответ на все запросы GET и POST.Однако, когда я размещаю сервер в IBM Cloud и запрашиваю его с помощью curl, я получаю сообщение об ошибке: «Отсутствует поставщик сохраняемости для EntityManager».

Что вызывает несоответствие между локальным и удаленным (IBM Cloud) окружения и что я могу сделать, чтобы это исправить?


persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    <persistence-unit name="ibmcloud">
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    <non-jta-data-source>java:comp/DefaultDataSource</non-jta-data-source>
        <class>entities.Comment</class>
        <properties>
            <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.format_sql" value="true"/>
            <property name="hibernate.use_sql_comments" value="true"/>

        </properties>
    </persistence-unit>
</persistence>

.travis.yml

language: java
jdk: oraclejdk8
sudo: false
before_install:
   mvn install -DskipTests=true -Dmaven.javadoc.skip=true -B -V
before_deply:
   cf login -u $BLUEMIX_USER -o $BLUEMIX_ORG
script:
   mvn test -B
language: java
git:
  depth: 1
dist: trusty
cache:
  directories:
  - "$HOME/.m2"
deploy:
  edge: true
  provider: bluemixcloudfoundry
  username: $BLUEMIX_USER
  password: $BLUEMIX_PASSWORD
  organization: $BLUEMIX_ORG
  space: $BLUEMIX_SPACE
  manifest: manifest.yml
  app_name: ibmcloudapp
  region: eu-gb
  api: https://api.eu-gb.bluemix.net
  skip_cleanup: true

manifest.yml

applications:
 - name: ibmcloud
   path: target/ibmcloud.war
   instances: 1
   random-route: true

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.dotheminimum</groupId>
    <artifactId>ibmcloud</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <failOnMissingWebXml>false</failOnMissingWebXml>
    </properties>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/javax.ws.rs/javax.ws.rs-api -->
<dependency>
    <groupId>javax.ws.rs</groupId>
    <artifactId>javax.ws.rs-api</artifactId>
    <version>2.1.1</version>
</dependency>
        <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>5.4.0</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>5.4.0</version>
        <scope>test</scope>
    </dependency>
        <!-- https://mvnrepository.com/artifact/org.hibernate.javax.persistence/hibernate-jpa-2.1-api -->
<!-- <dependency>
    <groupId>org.hibernate.javax.persistence</groupId>
    <artifactId>hibernate-jpa-2.1-api</artifactId>
    <version>1.0.2.Final</version>
</dependency> -->
<!-- https://mvnrepository.com/artifact/javax.persistence/javax.persistence-api -->
<dependency>
    <groupId>javax.persistence</groupId>
    <artifactId>javax.persistence-api</artifactId>
    <version>2.2</version>
</dependency>       
    </dependencies>
    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.1</version>
            </plugin>
        </plugins>
    </build>
</project>

Исходный код дляприложение размещено здесь

1 Ответ

0 голосов
/ 03 марта 2019

Проблема заключалась в том, что мой файл "persistence.xml" находился в папке "src / main / java / META-INF" вместо "src / main / resources / META-INF".

Моя локальная средасмог найти файл, но IBM Cloud не смог.После изменения пути к «persistence.xml» файл был обнаружен IBM Cloud.

Если бы я был исчерпывающим, я смог бы найти свое решение в комментариях к первому результату поискасвязан с Билли Фростом ( Нет поставщика сохраняемости для EntityManager с именем )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...