Comment définir JPA EntityManagerFactory pour l'unité de persistance de ne PAS "par défaut"
Noramlly toutes les configurations par défaut de Spring-boot
sont tout à fait bien. Mais maintenant, j'ai besoin de déployer mon application Weblogic 12.2 Serveur et je suis confronté à quelques problèmes concernant la persistance.
Je me demandais comment définir la JPA EntityManagerFactory pour l'unité de persistance de ne PAS "par défaut". Parce que par le démarrage de l'application, je peux voir ces journaux:
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
Donc je ne sais pas si weblogic est utiliser par défaut l'unité de persistance (eclipselink) ou de mise en veille prolongée. Je pensais donc à définir l'unité de persistance explicitement nulle part dans mon spring-boot
application.
Est-il possible de définir hiberner comme unité par défaut explicite?
EDIT:
J'ai demandé ça avant, car j'obtiens une exception d'exécution. Le org.eclipse.persistence
bibliothèques sont utilisées pour la unmarshalling 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
Sûr que je vois il y a un problème de conversion, mais sur tomcat sa course et que je n'utilise pas tout eclipse
bibliothèques. Donc, s'entend de toute bibliothèque de weblogic est primordial de la mine.
L'exception occours à cette ligne:
javax.ws.rs.core.Response bookResponse = response.readEntity(BookResponse.class);
Une idée pour obtenir l'application fonctionne à nouveau?
C'est mon 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>
- Comme vous pouvez le voir à partir de votre enregistrement il utilise hibernate. Aussi, il est juste un nom de l'unité d'utilisation (ce qui vous aurait généralement spécifier dans le
persistence.xml
il n'a rien à voir avec ce qui fournie est utilisée). - merci pour le commentaire. J'ai demandé avant de beause certains d'eclipse.la persistance bibliothèques sont utilisées. J'ai édité ma question. Peut-être que vous avez une idée.
- Mais c'est quelque chose de complètement différent (et vous n'aurez pas à résoudre que, en spécifiant un autre nom de l'unité). Vous êtes à l'aide de JAX-RS et vous n'êtes probablement pas de livraison avec votre demande. Par conséquent, votre application va utiliser le JAX-RS libs de votre conteneur qui ne peuvent pas voir votre hibernate classes (une classe différente chargeurs) et, partant, à l'aide de la valeur par défaut de l'éclipse classes. Je vous conseille de configurer explicitement jax-rs et vous voulez probablement pour passer de chargement de classe, le parent-dernier (ou tout ce qui est nommé dans WebLogic).
Vous devez vous connecter pour publier un commentaire.
Oui, vous pouvez le faire lorsque vous configurez, mais vous avez besoin pour configurer votre source de données, transactionManager et Entitymanager vous-même. Quelque chose comme ce qui ne
Dans ce cas de persistance de l'unité est nommé comme notDefaultDb. Ceci est fait par cette ligne
em.setPersistenceUnitName("notDefaultDb")
EDIT : sur la Base des données de @M. Denium, cela peut être fait même plus simple si vous avez le nom de votre entité gestionnaire de l'usine
entityManagerFactory
(par défaut) . Afin que tous les Auto-configuration fonctionne hors de la boîte et vous vous retrouvez configuration de la seule entité gestionnaire de l'usine.EntityManagerFactory
et il suffit de laisser le nomentityManagerFactory
pour empêcher le manuel de configuration de toutes les autres choses liées.