2016-08-19 4 views
1

Wir versuchen, Spring-Boot-Embedded-Server für die Entwicklung und Weblogic für die Produktion zu verwenden. Scheint so, als ob dies einfach sein sollte, da eine WAR-Datei einfach zu erstellen ist und in jedem Container funktionieren sollte - genau wie das Java-Mantra von einmal schreiben, irgendwo laufen. Bisher war ein großer Schmerz und nicht sicher, dass es wirklich möglich ist.Spring Boot in WebLogic

Wenn jemand etwas Einblick hat, würde ich lieben, von Ihnen zu hören.

Ich habe eine schreckliche Zeit zu versuchen, eine Spring-Boot-App in einem Web-Logik-Container zu arbeiten. Weblogic 12.2.1 (Hinweis: Dies ist die neueste Version von Weblogic)

  1. Ausgabe 1 - aus irgendeinem Grunde Web-Logik will die JerseyServletContainerInitializer laden. Dies verursacht eine Klasse nicht gefunden Ausnahme und kann nicht weiter kommen. Meine Kludis, schreibe einen neuen JerseyServletContainerInitializer (mit dem richtigen Paket) und mit meinem Code bereitstellen. bringt mich an der Klasse nicht gefunden Problem in Federcode.

    Ausgabe 2 - slf4j findet mehrere Implementierungen - das extra ein von WebLogic ist, die (andere Anwendungen auf dem Server verwenden sie) nicht entfernt werden kann, aber das ist die einzige Lösung nach SLF4J. Nicht um alles hilfreich.

    Ausgabe 3 - Weblogic bietet mehrere persistente Anbieter, die Frühling scheint zu finden und zu versuchen und die Eclipse-Persistenz Provider eher als die den Winterschlaf Provider zuordnen. (Wir verwenden keine Persistenz.xml). dies führt zu java.lang.ClassCastException: org.eclipse.persistence.jpa.PersistenceProvider nicht javax.persistence.spi.PersistenceProvider

    gegossen werden kann

Caused by: java.lang.ClassCastException: org.eclipse.persistence.jpa.PersistenceProvider cannot be cast to javax.persistence.spi.PersistenceProvider 
     at javax.persistence.Persistence$1.isLoaded(Persistence.java:110) 
     at org.hibernate.validator.internal.engine.resolver.JPATraversableResolver.isReachable(JPATraversableResolver.java:46) 
     at org.hibernate.validator.internal.engine.resolver.DefaultTraversableResolver.isReachable(DefaultTraversableResolver.java:128) 
     at org.hibernate.validator.internal.engine.resolver.CachingTraversableResolverForSingleValidation.isReachable(CachingTraversableResolverForSingleValidation.java:36) 
     at org.hibernate.validator.internal.engine.ValidatorImpl.isReachable(ValidatorImpl.java:1612) 
     at org.hibernate.validator.internal.engine.ValidatorImpl.isValidationRequired(ValidatorImpl.java:1597) 
     at org.hibernate.validator.internal.engine.ValidatorImpl.validateMetaConstraint(ValidatorImpl.java:609) 
     at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraint(ValidatorImpl.java:580) 
     at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForSingleDefaultGroupElement(ValidatorImpl.java:524) 
     at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForDefaultGroup(ValidatorImpl.java:492) 
     at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:457) 
     at org.hibernate.validator.internal.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:407) 
     at org.hibernate.validator.internal.engine.ValidatorImpl.validate(ValidatorImpl.java:205) 
     at org.springframework.validation.beanvalidation.SpringValidatorAdapter.validate(SpringValidatorAdapter.java:92) 
     at org.springframework.validation.DataBinder.validate(DataBinder.java:852) 
     at org.springframework.boot.bind.PropertiesConfigurationFactory.validate(PropertiesConfigurationFactory.java:350) 
     at org.springframework.boot.bind.PropertiesConfigurationFactory.doBindPropertiesToTarget(PropertiesConfigurationFactory.java:271) 
     at org.springframework.boot.bind.PropertiesConfigurationFactory.bindPropertiesToTarget(PropertiesConfigurationFactory.java:241) 
     at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.postProcessBeforeInitialization(ConfigurationPropertiesBindingPostProcessor.java:   334) 
     at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.postProcessBeforeInitialization(ConfigurationPropertiesBindingPostProcessor.java:   289) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:408) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1570) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
     at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
     at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1192) 
     at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1116) 
     at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014) 
     at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:813) 
     at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:741) 
     at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:185) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1143) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1046) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
     at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 

Mein weblogic.xml sieht aus wie

http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.4/weblogic-web-app.xsd „>

<wls:weblogic-version>12.1.3</wls:weblogic-version> 
<wls:context-root>ola/</wls:context-root> 
<wls:container-descriptor> 
    <wls:prefer-web-inf-classes>false</wls:prefer-web-inf-classes> 

    <wls:prefer-application-packages> 
     <wls:package-name>javax.persistence.*</wls:package-name> 
     <wls:package-name>org.glassfish.*</wls:package-name> 
     <wls:package-name>antlr.*</wls:package-name> 
     <wls:package-name>org.slf4j.*</wls:package-name> 
     <wls:package-name>org.hibernate.*</wls:package-name> 
     <wls:package-name>javassist.*</wls:package-name> 
     <wls:package-name>org.springframework.*</wls:package-name> 
     <wls:package-name>com.sun.research.*</wls:package-name> 
     <wls:package-name>javax.annotation.*</wls:package-name> 
     <wls:package-name>org.jvnet.hk2.*</wls:package-name> 
     <wls:package-name>org.jvnet.tiger_types.*</wls:package-name> 
    </wls:prefer-application-packages> 

</wls:container-descriptor> 

Ich versuche nicht, eine web.xml zu verwenden.

Meine Hauptklasse ist



    package com.cc.ola.launch; 

    import org.springframework.boot.autoconfigure.SpringBootApplication; 
    import org.springframework.boot.builder.SpringApplicationBuilder; 
    import org.springframework.boot.context.web.SpringBootServletInitializer; 
    import org.springframework.boot.orm.jpa.EntityScan; 
    import org.springframework.cache.annotation.EnableCaching; 
    import org.springframework.context.annotation.Configuration; 
    import org.springframework.context.annotation.EnableMBeanExport; 
    import org.springframework.context.annotation.Profile; 
    import org.springframework.data.jpa.repository.config.EnableJpaRepositories; 
    import org.springframework.jms.annotation.EnableJms; 
    import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; 
    import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; 
    import org.springframework.transaction.annotation.EnableTransactionManagement; 
    import org.springframework.web.WebApplicationInitializer; 

    @Profile("test") 
    @Configuration 
    @SpringBootApplication(scanBasePackages = "com.cc") 
    @EntityScan(basePackages = "com.cc.ola") 
    @EnableJpaRepositories(basePackages = { "com.cc.ola" }) 
    @EnableCaching 
    @EnableJms 
    @EnableMBeanExport 
    @EnableTransactionManagement 
    @EnableWebSecurity 
    @EnableGlobalMethodSecurity(jsr250Enabled = true, prePostEnabled = true) 
    public class LaunchFromWebLogic extends SpringBootServletInitializer implements WebApplicationInitializer { 

     @Override 
     protected SpringApplicationBuilder configure(final SpringApplicationBuilder application) { 
      System.out.println("loading spring application"); 
      return application.sources(LaunchFromWebLogic.class); 
     } 
    } 

ich all die Dokumente gelesen habe kann ich Dutzende Male finden.

Ich habe den Beispielcode versucht @https://github.com/DISID/disid-proofs.git setzt, die aber nicht funktioniert entweder

+0

Hat Ihre Hauptklasse WebApplicatioinitializee implementiert. Beispiel wird wie öffentliche Klasse sein Anwendung erweitert SpringBootServletInitializer implementiert WebApplicationInitializer {} – rajadilipkolli

+0

Ich denke, Sie haben [das Dokument] überprüft (http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto- weblogic) schon? –

Antwort

0

ich eine Lösung für Ihr Problem SLF4J vorschlagen kann. In Ihrem weblogic.xml, fügen Sie den folgenden Tag unter dem Container-Beschreiber-Tag:

<prefer-application-resources> 
    <resource-name>org/slf4j/impl/StaticLoggerBinder.class</resource-name> 
</prefer-application-resources> 

ich auch 12.2 mit bin.1 und obwohl ich es aus verschiedenen Gründen immer noch nicht zum Laufen bringen kann, war ich nicht mit dem Persistenzproviderproblem konfrontiert. In meinem Fall hat weblogic Hibernate 5 problemlos aufgenommen. Verwenden Sie die Federstarter in Ihrem POM? Welche Version von Boot verwenden Sie?

Vielleicht fügen Sie Ihr POM zu der Frage hinzu?

0

Obwohl vor anderthalb Jahren, werde ich nur eine Antwort geben, falls jemand anderes mit diesem Problem kommt.

Das Problem stammt wahrscheinlich von einer Annotation des Aufrufs @Valid, d. H. Der Stacktrace zeigt, dass er eine Vor-Methodenvalidierung unter Verwendung der Hibernate-Validator-Bibliothek durchführt.

Der Validator überprüft, ob die Klasse mit javax.persistence.Persistence geladen wurde, die an PersistenceProviderContextHolder delegiert ist, um die PersistenceProvider zu finden. Der Standard prüft die in /META-INF/services definierten Dienste und findet zwei (Eclipse und Hibernate) und gibt das erste (!) Zurück.

Wenn Sie den Tipp in dieser Frage verwenden (Weblogic 10.3.3 trying to load org.eclipse.persistence.jpa.PersistenceProvider instead of configured Hibernate Provider) und eine neue PersistenceProviderContextHolder bereitstellen, die nur Hibernate zurückgibt, wird das den Zweck erfüllen. Es wäre jedoch gut, die Registrierung unter contextClosed durch Setzen auf Null aufzuheben.