Развертывание приложения JavaEE на сервере Payara с Oracle Spatial Java API - PullRequest
0 голосов
/ 10 марта 2020

У меня проблема с развертыванием приложения JavaEE на Payara 5.201. Я также использую eclipselink 2.7.6 в качестве постоянной реализации и версию 12.2.0.1 пространственного Java API из oracle, включенного в файл sdoapi.jar. Поскольку я использую maven в качестве системы сборки и этот jar-файл недоступен в mavencentral, я установил его локально, используя следующую команду

mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file -Dfile=/path/to/jar/sdoapi.jar -DgroupId=com.oracle -DartifactId=sdoapi -Dversion=12.2.0.1 -Dpackaging=jar

Приложение прекрасно компилируется. Я получаю следующую ошибку при развертывании приложения на сервере:

Исключение Описание: Ошибка развертывания PersistenceUnit [ctrtmapsPU]. Закройте все фабрики для этого модуля. Внутреннее исключение: java .lang.RuntimeException: java .lang.ClassNotFoundException: oracle .spatial.geometry.JGeometry. Пожалуйста, смотрите server.log для более подробной информации

Это файл Java сущности:

@Entity
@Table(name = "POLIGONO_MOVIL", schema = "DESARROLLO")
@StructConverter(name = "JGeometry", converter = "org.eclipse.persistence.platform.database.oracle.converters" +
        ".JGeometryConverter")
public class PoligonoMovil {
    private Long id;
    private String codpoli;
    private Long unicom;
    private String localidad;
    private String descpoli;
    private String resppoli;
    private JGeometry geometry;

    @Basic
    @Column(name = "ID", nullable = true, precision = 0)
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @Id
    @Column(name = "CODPOLI", nullable = false, length = 15)
    public String getCodpoli() {
        return codpoli;
    }

    public void setCodpoli(String codpoli) {
        this.codpoli = codpoli;
    }

    @Basic
    @Column(name = "UNICOM", nullable = true, precision = 0)
    public Long getUnicom() {
        return unicom;
    }

    public void setUnicom(Long unicom) {
        this.unicom = unicom;
    }

    @Basic
    @Column(name = "LOCALIDAD", nullable = true, length = 100)
    public String getLocalidad() {
        return localidad;
    }

    public void setLocalidad(String localidad) {
        this.localidad = localidad;
    }

    @Basic
    @Column(name = "DESCPOLI", nullable = true, length = 100)
    public String getDescpoli() {
        return descpoli;
    }

    public void setDescpoli(String descpoli) {
        this.descpoli = descpoli;
    }

    @Basic
    @Column(name = "RESPPOLI", nullable = true, length = 50)
    public String getResppoli() {
        return resppoli;
    }

    public void setResppoli(String resppoli) {
        this.resppoli = resppoli;
    }

    @Basic
    @Column(name = "GEOMETRY", nullable = true)
    @Convert(value = "JGeometry")
    public JGeometry getGeometry() {
        return geometry;
    }

    public void setGeometry(JGeometry geometry) {
        this.geometry = geometry;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        PoligonoMovil that = (PoligonoMovil) o;
        return Objects.equals(id, that.id) &&
                Objects.equals(codpoli, that.codpoli) &&
                Objects.equals(unicom, that.unicom) &&
                Objects.equals(localidad, that.localidad) &&
                Objects.equals(descpoli, that.descpoli) &&
                Objects.equals(resppoli, that.resppoli) &&
                Objects.equals(geometry, that.geometry);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, codpoli, unicom, localidad, descpoli, resppoli, geometry);
    }
}

Это файл Java класса обслуживания, который запрашивает для указания c Entity:

@Stateless
public class GeoLocationService {

    @PersistenceContext(unitName = "ctrtmapsPU")
    private EntityManager em;

    public List<PoligonoMovil> obtenerGeometria(String codpoli) {
        CriteriaBuilder cb = em.getCriteriaBuilder();

        CriteriaQuery<PoligonoMovil> cq = cb.createQuery(PoligonoMovil.class);

        Root<PoligonoMovil> root = cq.from(PoligonoMovil.class);

        cq.select(root);

        cq.where(cb.equal(root.get("codpoli"), codpoli));

        TypedQuery<PoligonoMovil> tq = em.createQuery(cq);

        return tq.getResultList();
    }
}

Вот конфигурация персистентности. xml file:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <persistence 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_2.xsd"
             version="2.2">
    <persistence-unit name="ctrtmapsPU">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <jta-data-source>jdbc/ctrtmaps</jta-data-source>
        <class>com.classes.ctrtmaps.domain.PoligonoMovil</class>
        <shared-cache-mode>NONE</shared-cache-mode>
        <properties>
            <property name="eclipselink.logging.level" value="FINE"/>
        </properties>
    </persistence-unit> </persistence>

Я пытался поместить sdoapi.jar в другой папки внутри каталога payara: папка lib для domain1, lib / ext, $ PAYARA_HOME / glassfish / modules, $ PAYARA_HOME / glassfish / lib. Я также проверил, что файл JAR правильно скопирован в папку WEB-INF / lib. Но ничего не работает.

Пожалуйста, помогите мне понять, что я делаю неправильно. Заранее большое спасибо за любые ответы.

...