2017-05-23 15 views
1

デフォルト設定のすべてSpring-bootはまったく問題ありません。しかし、今は私のアプリケーションをWeblogic 12.2 Serverにデプロイする必要があり、永続性に関するいくつかの問題に直面しています。永続性ユニットのJPA EntityManagerFactoryを「デフォルト」に設定しない方法

永続性ユニットのJPA EntityManagerFactoryを「デフォルト」に設定しないでください。

2017-05-23 08:16:34.608 INFO 30827 - j.LocalContainerEntityManagerFactoryBean []: Building JPA container EntityManagerFactory for persistence unit 'default' 
2017-05-23 08:16:35.090 INFO 30827 - o.hibernate.jpa.internal.util.LogHelper []: HHH000204: Processing PersistenceUnitInfo [ 
    name: default 
    ...] 
2017-05-23 08:16:36.025 INFO 30827 - org.hibernate.Version     []: HHH000412: Hibernate Core {5.0.11.Final} 
2017-05-23 08:16:36.026 INFO 30827 - org.hibernate.cfg.Environment   []: HHH000206: hibernate.properties not found 
2017-05-23 08:16:36.029 INFO 30827 - org.hibernate.cfg.Environment   []: HHH000021: Bytecode provider name : javassist 
2017-05-23 08:16:36.925 INFO 30827 - o.hibernate.annotations.common.Version []: HCANN000001: Hibernate Commons Annotations {5.0.1.Final} 
2017-05-23 08:16:39.632 INFO 30827 - org.hibernate.dialect.Dialect   []: HHH000400: Using dialect: org.hibernate.dialect.Oracle10gDialect 
2017-05-23 08:16:48.205 INFO 30827 - j.LocalContainerEntityManagerFactoryBean []: Initialized JPA EntityManagerFactory for persistence unit 'default' 
2017-05-23 08:16:55.348 INFO 30827 - o.h.h.i.QueryTranslatorFactoryInitiator []: HHH000397: Using ASTQueryTranslatorFactory 

は、だから私は、WebLogicがデフォルトの永続ユニット(のEclipseLink)を使用したり、実際に休止状態にされている場合わからない:アプリケーションの起動によって、私はこれらのログを見ることができますので。だから、私はspring-bootアプリケーションのどこにでも永続性ユニットを明示的に設定しようと考えていました。

デフォルト単位としてhibernateを明示的に設定する方法はありますか?

編集:私はランタイムによって例外を取得するので

私は前にこれを求めていました。 org.eclipse.persistenceライブラリはxmlをアンマーシャリングするために使用されます。私が見

Caused by: org.eclipse.persistence.exceptions.DescriptorException: 
Exception Description: No conversion value provided for the value [ToConfirm] in field [@SubStatus]. 
Mapping: org.eclipse.persistence.oxm.mappings.XMLDirectMapping[subStatus-->@SubStatus] 
Descriptor: XMLDescriptor(at.myCompany.bookingHubClient.schema.BookingHubUserTypes.BookResponse --> [DatabaseTable(BookResponse)]) 
    at org.eclipse.persistence.exceptions.DescriptorException.noFieldValueConversionToAttributeValueProvided(DescriptorException.java:1066) 
    at org.eclipse.persistence.mappings.converters.ObjectTypeConverter.convertDataValueToObjectValue(ObjectTypeConverter.java:226) 
    at org.eclipse.persistence.jaxb.JAXBEnumTypeConverter.convertDataValueToObjectValue(JAXBEnumTypeConverter.java:119) 
    at org.eclipse.persistence.oxm.mappings.XMLDirectMapping.convertDataValueToObjectValue(XMLDirectMapping.java:528) 
    at org.eclipse.persistence.oxm.mappings.XMLDirectMapping.getAttributeValue(XMLDirectMapping.java:296) 
    at org.eclipse.persistence.oxm.mappings.XMLDirectMapping.getAttributeValue(XMLDirectMapping.java:1) 
    at org.eclipse.persistence.internal.oxm.XMLDirectMappingNodeValue.attribute(XMLDirectMappingNodeValue.java:169) 
    at org.eclipse.persistence.internal.oxm.record.UnmarshalRecordImpl.startElement(UnmarshalRecordImpl.java:922) 
    at org.eclipse.persistence.internal.oxm.record.SAXUnmarshallerHandler.startElement(SAXUnmarshallerHandler.java:373) 
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:509) 
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:380) 
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDriver.scanRootElementHook(XMLNSDocumentScannerImpl.java:614) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3135) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:880) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606) 
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:118) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777) 
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141) 
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213) 
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:643) 
    at weblogic.xml.jaxp.WebLogicXMLReader.parse(WebLogicXMLReader.java:133) 
    at weblogic.xml.jaxp.RegistryXMLReader.parse(RegistryXMLReader.java:173) 
    at org.eclipse.persistence.internal.oxm.record.XMLReader.parse(XMLReader.java:243) 
    at org.eclipse.persistence.internal.oxm.record.SAXUnmarshaller.unmarshal(SAXUnmarshaller.java:401) 
    at org.eclipse.persistence.internal.oxm.record.SAXUnmarshaller.unmarshal(SAXUnmarshaller.java:654) 
    at org.eclipse.persistence.internal.oxm.XMLUnmarshaller.unmarshal(XMLUnmarshaller.java:581) 
    at org.eclipse.persistence.jaxb.JAXBUnmarshaller.unmarshal(JAXBUnmarshaller.java:323) 
    at org.glassfish.jersey.jaxb.internal.XmlRootElementJaxbProvider.readFrom(XmlRootElementJaxbProvider.java:140) 
    at org.glassfish.jersey.jaxb.internal.AbstractRootElementJaxbProvider.readFrom(AbstractRootElementJaxbProvider.java:134) 
    at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.invokeReadFrom(ReaderInterceptorExecutor.java:256) 
    at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.aroundReadFrom(ReaderInterceptorExecutor.java:235) 
    at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor.proceed(ReaderInterceptorExecutor.java:155) 
    at org.glassfish.jersey.message.internal.MessageBodyFactory.readFrom(MessageBodyFactory.java:1085) 
    at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:852) 
    at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:786) 
    at org.glassfish.jersey.client.ClientResponse.readEntity(ClientResponse.java:326) 
    at org.glassfish.jersey.client.InboundJaxrsResponse$1.call(InboundJaxrsResponse.java:115) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:228) 
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:419) 
    at org.glassfish.jersey.client.InboundJaxrsResponse.runInScopeIfPossible(InboundJaxrsResponse.java:267) 
    at org.glassfish.jersey.client.InboundJaxrsResponse.readEntity(InboundJaxrsResponse.java:112) 
    at at.myCompany.bookingHubClient.client.RestClient.doWSCallBook(RestClient.java:85) 
    at at.myCompany.thirdPartyBookingService.service.impl.hotel.BookResponseServiceImpl.getBookResponse(BookResponseServiceImpl.java:36) 
    ... 78 common frames omitted 

確かにそこの変換の問題ですが、上のTomcatの実行と私はどんなeclipseライブラリを使用していけません。つまり、weblogicのライブラリはどれも私のものをオーバーライドしています。この行で

例外occours:

javax.ws.rs.core.Response bookResponse = response.readEntity(BookResponse.class); 

任意のアイデアを再度実行しているアプリを取得するには?

これは私のweblogic.xmlのです:

<?xml version="1.0" encoding="UTF-8"?> 
<wls:weblogic-web-app 
    xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-web-app" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-web-app 
     http://xmlns.oracle.com/weblogic/weblogic-web-app/1.4/weblogic-web-app.xsd"> 
    <wls:context-root>/third-party-booking-service</wls:context-root> 
    <wls:container-descriptor> 
     <wls:prefer-application-packages> 
      <wls:package-name>org.slf4j.*</wls:package-name> 
      <wls:package-name>org.springframework.*</wls:package-name> 
      <wls:package-name>com.google.common.*</wls:package-name> 
      <wls:package-name>javax.annotation.*</wls:package-name> 
      <wls:package-name>com.sun.jersey.*</wls:package-name> 
      <wls:package-name>org.codehaus.jackson.jaxrs.*</wls:package-name> 
      <wls:package-name>org.jboss.logging.*</wls:package-name> 
      <wls:package-name>org.hibernate.*</wls:package-name> 
      <wls:package-name>com.fasterxml.*</wls:package-name> 
      <wls:package-name>org.glassfish.jersey.jaxb.*</wls:package-name> 
      <wls:package-name>antlr.*</wls:package-name> 
     </wls:prefer-application-packages> 
    </wls:container-descriptor> 
</wls:weblogic-web-app> 
+0

ログからわかるように、ハイバネートが使用されています。また、これは単に使用するユニットの名前です(これは 'persistence.xml'で一般的に指定しますが、これは何が使われているかとは関係ありません)。 –

+0

@ M.Deinumはコメントをいただきありがとうございます。私はいくつかのeclipse.persistenceライブラリが使われる前にそれを聞いた。私は私の質問を編集しました。多分あなたはアイディアを持っています。 – Patrick

+0

しかしそれはまったく違うものです(別のユニット名を指定することで修正できません)。あなたはJAX-RSを使用しており、おそらくあなたのアプリケーションでそれを出荷していないでしょう。したがって、あなたのアプリケーションは、あなたのハイバーネームクラス(異なるクラスローダー)を見ることができないので、デフォルトのEclipseクラスを使用して、あなたのコンテナからJAX-RSライブラリを使用することになります。 jax-rsを明示的に設定することをお勧めします。親ラスト(またはWebLogicで名前が付けられたもの)をロードするクラスを切り替えることをお勧めします。 –

答えて

0

はいあなたが設定するとき、あなたがそれを行うことができますが、あなたのデータソースを設定する必要があり、のTransactionManagerと自分でのEntityManager。このようなものは、実行します

@Configuration 
@EnableJpaRepositories(
    entityManagerFactoryRef = "notDefaultEntityManagerFactory", 
    transactionManagerRef = "notDefaultTransactionManager", 
    basePackageClasses = notDefaultRepository.class) 
public class SomesqlDb{ 

    @Bean 
    public DataSource dataSourcenotDefault() { 
     return getDataSource(poolSize, driverClassName, jdbcUrl, userName, password); 
    } 

    @Bean(name = "notDefaultTransactionManager") 
    PlatformTransactionManager notDefaultTransactionManager(EntityManagerFactory notDefaultEntityManagerFactory) { 
     JpaTransactionManager txManager = new JpaTransactionManager(); 
     txManager.setEntityManagerFactory(notDefaultEntityManagerFactory); 
     return txManager; 
    } 

    @Bean(name = "notDefaultEntityManagerFactory") 
    LocalContainerEntityManagerFactoryBean notDefaultEntityManagerFactory() { 
     LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); 
     em.setDataSource(dataSourcenotDefault()); 
     em.setPackagesToScan(notDefaultRepository.class.getPackage().getName(), notDefaultBi.class.getPackage().getName()); 
     em.setPersistenceUnitName("notDefaultDb"); 

     HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); 
     vendorAdapter.setGenerateDdl(false); 
     em.setJpaVendorAdapter(vendorAdapter); 
     return em; 
    } 
} 

この場合、持続ユニットの名前はnotDefaultDbです。これは、この行でem.setPersistenceUnitName("notDefaultDb")

EDIT行われます:あなたはあなたのエンティティマネージャファクトリはentityManagerFactory(デフォルト)と名前を付けた場合をM.Denium @からの入力に基づいて、これがさらに簡単に行うことができます。そのため、すべての自動設定がそのままの状態で機能し、エンティティマネージャファクトリのみを設定することになります。

@Bean 
    LocalContainerEntityManagerFactoryBean entityManagerFactory() { 
     LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); 
     em.setDataSource(dataSourcenotDefault()); 
     em.setPackagesToScan(notDefaultRepository.class.getPackage().getName(), notDefaultBi.class.getPackage().getName()); 
     em.setPersistenceUnitName("notDefaultDb"); 

     HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); 
     vendorAdapter.setGenerateDdl(false); 
     em.setJpaVendorAdapter(vendorAdapter); 
     return em; 
    } 
+0

あなたはしないでください...'EntityManagerFactory'を設定するだけで、他のすべての関連するものを手動で設定しないようにするには、' entityManagerFactory'という名前を残すだけです。 –

+0

@ M.Deinumあなたは正しいです。私はそれに応じて答えを更新します。 – pvpkiran

関連する問題