2016-08-19 3 views
1

개발을위한 스프링 부트 내장 서버와 프로덕션을위한 웹 로직을 사용하려고합니다. 전쟁 파일이 생성하기 쉽고 모든 컨테이너에서 작동해야하므로 쉽게 작성해야합니다. 한 번만 작성하고 실행하면되는 Java mantra와 같습니다. 지금까지 큰 고통이 있었지만 실제로 가능하지는 않습니다.WebLogic에서의 스프링 부트

누군가 통찰력이 있다면, 나는 당신의 의견을 듣고 싶습니다.

웹 로직 컨테이너에서 작동하는 스프링 부팅 응용 프로그램을 만들려고 무서운 시간을 보내고 있습니다. 웹 로직 12.2.1

  1. 1 호 (주이 웹 로직의 최신 버전입니다) - 어떤 이유로 웹 로직에 대한 JerseyServletContainerInitializer를로드하려고합니다. 이로 인해 클래스가 발견되지 않고 예외가 발생하고 더 이상 얻을 수 없습니다. 내 kludge, JerseyServletContainerInitializer (올바른 패키지 포함) 및 코드 작성. 클래스를 통과하지 못해서 스프링 코드가 이되었습니다.

    문제 2 - slf4j가 WebLogic에서 을 제거 할 수 없으므로 (서버의 다른 앱인 ) SLF4j에 따르면 유일한 해결책입니다. 에 도움이되지 않습니다.

    3 호 - Weblogic은 봄이 찾아 내고 최대 절전 모드 공급자가 아닌 일식 지속성 공급자를 찾아서 매핑하려고 시도하는 여러 영구 공급자를 제공합니다. (우리는 persistence.xml을 사용하지 않습니다). 이 java.lang.ClassCastException가 결과 : org.eclipse.persistence.jpa.PersistenceProvider이 에 javax.persistence.spi.PersistenceProvider

  2. 캐스팅 할 수없는

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) 

내 weblogic.xml의 외모

같은

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> 

나는 web.xml 파일을 사용하지하려합니다. 나는이 문서를 모두 읽은 나는 수십 번을 찾을 수 있습니다



    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); 
     } 
    } 

내 주요 클래스입니다.

내가 배포하지만

+0

기본 클래스가 웹 응용 프로그램 초기화를 구현 했습니까? 예제는 public class와 비슷합니다. Application extends SpringBootServletInitializer는 WebApplicationInitializer를 구현합니다. { – rajadilipkolli

+0

[doc] (http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto- weblogic) 이미? –

답변

0

내가 당신의 SLF4J 문제에 대한 해결책을 제안 할 수 있습니다 중 하나가 작동하지 않습니다 https://github.com/DISID/disid-proofs.git @ 샘플 코드를 시도했습니다. weblogic.xml에서 container-descriptor 태그 아래에 다음 태그를 추가하십시오.

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

저는 12.2도 사용하고 있습니다.1과 나는 여전히 여러 가지 이유로 작동하지 않을 수 있지만, 나는 지속성 공급자 문제에 직면하지 않았다. 필자의 경우, weblogic은 아무런 문제없이 Hibernate 5를 선택했다. POM에 스프링 스타터를 사용하고 있습니까? 어떤 버전의 Boot를 사용하고 있습니까?

아마도 POM을 질문에 추가 하시겠습니까?

0

1 년 6 개월 전이지만 다른 누구도이 문제로이 문제가 발생하는 경우를 대비하여 답변을 드리겠습니다.

호출시 @Valid 주석의 문제 일 가능성이 있습니다. 즉 stacktrace는 Hibernate Validator 라이브러리를 사용하여 일부 사전 방법 유효성 검사를 수행함을 보여줍니다.

javax.persistence.Persistence을 사용하여 클래스가로드되었는지 확인하고 PersistenceProviderContextHolder에 위임하여 PersistenceProvider을 찾습니다. 기본 사용자는 /META-INF/services에 정의 된 서비스를 검사하고 2 개 (일식 및 최대 절전 모드)를 찾고 첫 번째 (!)를 반환합니다.

이 질문 (Weblogic 10.3.3 trying to load org.eclipse.persistence.jpa.PersistenceProvider instead of configured Hibernate Provider)의 팁을 사용하고 Hibernate 만 반환하는 새로운 PersistenceProviderContextHolder을 제공하면 트릭을 수행 할 수 있습니다. 그러나 contextClosed에 등록을 취소하려면 null로 설정하는 것이 좋습니다.