0

Websphere 8.5.5.10에서 Hibernate5 검색 API를 통해 엔티티를 색인화하려고 시도하는 중 클래스 캐스트 예외가 발생합니다. 트랜잭션은 Spring Transaction에 의해 관리되고있다. 문서 엔티티는 로컬 톰캣에서 올바르게 인덱싱되지만 WebSphere에서는 인덱싱되지 않습니다.java.lang.ClassCastException : com.ibm.ws.tx.jta.TranManagerSet이 javax.transaction.TransactionManager와 호환되지 않습니다.

개체를 색인화하기 위해 RESTFUl 웹 서비스 호출을 만들었습니다.

봄 4.2 최대 절전 모드 코어 5.0.11.Final 최대 절전 모드 검색 5.5.5.Final는

여기 내 설정 파일

<bean id="sessionFactory" 
    class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> 
    <property name="dataSource" ref="datasource" /> 
    <property name="packagesToScan"> 
     <list> 
      <value>model</value> 
     </list> 
    </property> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop> 
      <prop key="hibernate.show_sql">true</prop> 
      <prop key="hibernate.format_sql">false</prop> 
      <prop key="hibernate.default_schema">dev</prop> 
      <prop key="hibernate.generate_statistics">true</prop> 
      <prop key="hibernate.search.default.directory_provider">filesystem</prop> 
      <prop key="hibernate.search.default.indexBase">/var/lucene/indexes</prop> 

     </props> 
    </property> 

</bean> 


<bean id="transactionManager" 
    class="org.springframework.orm.hibernate5.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory" /> 
</bean> 

및 WebSphere 응용 프로그램 로그에 스택 추적입니다 : -

HSEARCH000058 : HSEARCH000116 : MassIndexer 작업 중 예기치 않은 오류가 발생했습니다. org.hibernate.engine.transaction.jta.platform.spi.JtaPlatformException : Could org.hibernate.engine.transaction.jta.platform.internal.AbstractJtaPlatform.retrieveTransactionManager에서 org.hibernate.engine.transaction.jta.platform.internal.WebSphereJtaPlatform.locateTransactionManager (WebSphereJtaPlatform.java:66) 으로는 WebSphere TransactionManager를 를 얻을 (AbstractJtaPlatform.java:87) at org.hibernate.search.batchindexing.impl.BatchTransactionalContext.lookupTransactionManager (BatchTransactionalContext.java:53) at org.hibernate.search.batchindexing.impl.BatchTransactionalContext (BatchTransactionalContext.java:42) (org.apache.org).) at java.util.concurrent.Executors $ RunnableAdapter.call (Executors.java:483) at java.util.concurrent.FutureTask.run (FutureTask.java:274) at java.util.concurrent.ThreadPoolExecutor.runWorker 자바 : java.lang.Thread.run에서 java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:627) 에서 (ThreadPoolExecutor.java:1157) (Thread.java:798) 는에 의해 발생. lang.ClassCastException : com.ibm.ws.tx.jta.TranManagerSet이 javax.transaction.TransactionManager와 호환되지 않음 at org.hibernate.engine.transaction.jta.platform.internal.WebSphereJtaPlatform.locateTransactionManager (WebSphereJtaPlatform.java:63)

내가 뭘 잘못하고 있는지 잘 모르겠다. 인덱스 웹 서비스 호출 외에도 다른 REST 웹 서비스가 정상적으로 실행되고 UI가 예상대로 채워집니다.

도움이 될 것입니다.

답변

1

this article에 따르면, 이것은 java.transaction 패키지의 두 가지 버전 (하나는 websphere, 하나는 GemFire.jar, websphere와 함께 배포 된 lib) 사이의 충돌입니다. GemFire.jar에서

드롭 패키지 javax.transaction :이 도움이 zip -d gemfire.jar javax/transaction/*

희망

는 또한 수정을 제안합니다.

+0

감사하지만 내는 WebSphere 설정이 이미 설정되어 클래스 로더 - 상위 마지막을, 전쟁 클래스 - "응용 프로그램의 각 WAR 파일에 대한 클래스 로더는" – creed

+0

의 javax.transaction.TransactionManager는이다 플랫폼 인터페이스 : 클래스 로더 옵션을 변경해도 도움이되지 않습니다. 응용 프로그램에 충돌 할 수있는 전이 의존성이 포함되어 있지 않은지 확인해야합니다. – Sanne

+0

그러면 첫 번째 해결책을 시도하고'GemFire.jar'를 해킹해야합니다. @ Sanne : 의견 주셔서 감사합니다. 그에 따라 솔루션을 업데이트 할 것입니다. – Benoit

0

이 문제가 발생했습니다.

문제 : 우리는 JPA 2.1을 사용하는 최대 절전 모드 버전을 사용하는 경우 (> 4.3 버전을 최대 절전 모드) , 그것은 웹 스피어의 이전 버전합니다 (JPA 2.1 수정 팩이없는 버전 7, 8.5)과 충돌합니다.

nested exception is java.lang.NoSuchMethodError: javax/persistence/Table.indexes()[Ljavax/persistence/Index; 

해결 방법 1 :이 문제를 해결하려면 한 가지 방법은 JPA 2.1 최대 절전 모드와 함께 제공되는 사용되도록 해당 parent_last에 클래스 로더를 설정하는 것입니다 특히 당신이 볼 것을 제외하고는 이것이다. 그러나 위에서 언급 한 것과 같은 다른 문제가 발생할 것입니다. TransactionManager를 가진

  1. 충돌 동면, 예외 선박은 :

    java.lang.ClassCastException: com.ibm.ws.tx.jta.TranManagerSet incompatible with javax.transaction.TransactionManager

    이 (예를 받는다는 동면 의존성 구성) 다음 병을 제외함으로써 해결할 수 있음은 충돌을 야기 :

    <exclusion> 
        <artifactId>jboss-transaction-api_1.2_spec</artifactId> 
        <groupId>org.jboss.spec.javax.transaction</groupId> 
    </exclusion> 
    
  2. 충돌 최대 절전 모드와 함께 제공되는 예외의 결과로 XML-apis.jar와 :

    javax.xml.parsers.FactoryConfigurationError: Provider for javax.xml.parsers.DocumentBuilderFactory cannot be found

    이 의존성과 같이 최대 절전 모드에서 XML-apis.jar을 제외하여 해결할 수 있습니다

    <exclusion> 
        <artifactId>xml-apis</artifactId> 
        <groupId>xml-apis</groupId> 
    </exclusion> 
    

해결책 2 :
Websphere 클래스가 Hiberna를 방해하지 않도록 사용자 정의 PersistenceProviderResolver를 사용하십시오 테 : 도움을

https://stackoverflow.com/a/37354979/5150013