通常、Spring-boot
のすべてのデフォルト構成は完全に問題ありません。しかし、今度はアプリケーションをWeblogic 12.2サーバーにデプロイする必要があり、永続性に関するいくつかの問題に直面しています。
永続性ユニットのJPAEntityManagerFactoryを「デフォルト」に設定する方法を知りたいだけです。アプリケーションの起動によって、これらのログを確認できるためです。
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のライブラリが私のものをオーバーライドしているということです。
この行で例外が発生します:
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>
はい、構成時に実行できますが、データソース、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: @ M.Deniumからの入力に基づいて、エンティティマネージャファクトリにentityManagerFactory
(default)という名前を付けると、これをさらに簡単に行うことができます。そのため、すべての自動構成はそのままで機能し、エンティティマネージャーファクトリのみを構成することになります。
_ @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;
}
_
@Mに感謝します。 Deinum/@ pvpkiran。
それが誰かを助ける場合、以下はWebSphere ND8.5.5.15で私のために働きます:
@Configuration
public class JPAConfiguration {
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSource());
em.setPackagesToScan(new String[] { "com.example.model" });
em.setPersistenceUnitName("org.hibernate.jpa.HibernatePersistenceProvider");
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
vendorAdapter.setGenerateDdl(false);
em.setJpaVendorAdapter(vendorAdapter);
return em;
}
@Bean
public DataSource dataSource(){
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("Oracle.jdbc.OracleDriver");
dataSource.setUrl("jdbc:Oracle:thin:@xx.xx.xx.xx:xxxx:db");
dataSource.setUsername( "username" );
dataSource.setPassword( "password" );
return dataSource;
}
}
Spring boot2.1.8.RELEASEを使用しています。