2016-11-29 12 views
2

Websphere ND 8.5で完全に機能するJSFとCDIに基づいた特定のWebアプリケーションがあります。それにもかかわらず、Liberty Profile 16(WebSphere Application Server 16.0.0.3/wlp-1.0.14)では動作しません。私はすでにそれに配備戦争とリバティプロファイルを開始しようとした場合、それは私がLiberty Profileで同じWAS NDクラスローダーの設定を再現するには

<webApplication id="myWebApp" location="myWebApp.war" name="myWebApp"> 
<classloader delegation="parentFirst"/> 
</webApplication> 

または

<webApplication id="myWebApp" location="myWebApp.war" name="myWebApp"> 
<classloader delegation="parentLast"/> 
</webApplication> 
のいずれかで開始しようとしたときにエラーが同じである

com.ibm.ws.container.service.state.StateChangeException: org.jboss.weld.exceptions.IllegalArgumentException: WELD-001301: Annotation @javax.inject.Named(value=oam_FLOW_BUILDER_FACTORY_BEAN_NAME) is not a qualifier 

を引き起こしました

私はこれらの機能を使用しています:

<featureManager> 
    <feature>webProfile-7.0</feature> 
    <feature>localConnector-1.0</feature> 
    <feature>cdi-1.2</feature> 
    <feature>servlet-3.1</feature> 
</featureManager> 
私は誰かが反射(CDIは、依存する特定の機能)」はdoesnのため、それが原因とされていることを言って聞い

私はmyWebAppなしリバティプロファイルを開始し、私は、Eclipseを経由してWebアプリケーションを追加しようとすると、私は

com.ibm.ws.container.service.state.StateChangeException: org.jboss.weld.exceptions.DefinitionException: Exception List with 1 exceptions: Exception 0 : javax.enterprise.event.ObserverException at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at java.lang.Class.newInstance(Class.java:442) at org.jboss.weld.security.NewInstanceAction.run(NewInstanceAction.java:33) at java.security.AccessController.doPrivileged(Native Method) at org.jboss.weld.injection.Exceptions.rethrowException(Exceptions.java:40) at org.jboss.weld.injection.Exceptions.rethrowException(Exceptions.java:78) at org.jboss.weld.injection.StaticMethodInjectionPoint.invoke(StaticMethodInjectionPoint.java:96) at org.jboss.weld.injection.MethodInvocationStrategy$SpecialParamPlusBeanManagerStrategy.invoke(MethodInvocationStrategy.java:144) at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:309) at org.jboss.weld.event.ExtensionObserverMethodImpl.sendEvent(ExtensionObserverMethodImpl.java:124) at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:287) at org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:265) at org.jboss.weld.event.ObserverNotifier.notifySyncObservers(ObserverNotifier.java:302) at org.jboss.weld.event.ObserverNotifier.notify(ObserverNotifier.java:291) at org.jboss.weld.event.ObserverNotifier.fireEvent(ObserverNotifier.java:160) at org.jboss.weld.event.ObserverNotifier.fireEvent(ObserverNotifier.java:154) at org.jboss.weld.bootstrap.events.AbstractContainerEvent.fire(AbstractContainerEvent.java:53) at org.jboss.weld.bootstrap.events.AbstractDefinitionContainerEvent.fire(AbstractDefinitionContainerEvent.java:44) at org.jboss.weld.bootstrap.events.AfterBeanDiscoveryImpl.fire(AfterBeanDiscoveryImpl.java:62) at org.jboss.weld.bootstrap.WeldStartup.deployBeans(WeldStartup.java:422) at org.jboss.weld.bootstrap.WeldBootstrap.deployBeans(WeldBootstrap.java:83) at com.ibm.ws.cdi.impl.CDIContainerImpl.applicationStarting(CDIContainerImpl.java:149) at com.ibm.ws.cdi.liberty.CDIRuntimeImpl.applicationStarting(CDIRuntimeImpl.java:353) at com.ibm.ws.container.service.state.internal.ApplicationStateManager.fireStarting(ApplicationStateManager.java:29) at com.ibm.ws.container.service.state.internal.StateChangeServiceImpl.fireApplicationStarting(StateChangeServiceImpl.java:51) at com.ibm.ws.app.manager.module.internal.DeployedAppInfoBase.preDeployApp(DeployedAppInfoBase.java:788) at com.ibm.ws.app.manager.module.internal.DeployedAppInfoBase.deployApp(DeployedAppInfoBase.java:815) at com.ibm.ws.app.manager.war.internal.WARApplicationHandlerImpl.install(WARApplicationHandlerImpl.java:66) at com.ibm.ws.app.manager.internal.statemachine.StartAction.execute(StartAction.java:141) at com.ibm.ws.app.manager.internal.statemachine.ApplicationStateMachineImpl.enterState(ApplicationStateMachineImpl.java:1192) at com.ibm.ws.app.manager.internal.statemachine.ApplicationStateMachineImpl.performAction(ApplicationStateMachineImpl.java:1038) at com.ibm.ws.app.manager.internal.statemachine.ApplicationStateMachineImpl.run(ApplicationStateMachineImpl.java:813) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Caused by: java.util.ServiceConfigurationError: com.sun.faces.util.cdi11.CDIUtil: Provider com.sun.faces.util.cdi11.CDIUtilImpl not a subtype at java.util.ServiceLoader.fail(ServiceLoader.java:239) at java.util.ServiceLoader.access$300(ServiceLoader.java:185) at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:376) at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404) at java.util.ServiceLoader$1.next(ServiceLoader.java:480) at com.sun.faces.flow.FlowCDIExtension.afterBeanDiscovery(FlowCDIExtension.java:107) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.jboss.weld.injection.StaticMethodInjectionPoint.invoke(StaticMethodInjectionPoint.java:88) 

を取得Liberty Profileで動作しますが、WAS NDで動作します。正直なところ、私はこれが最終的な説明ではないと思います。私は、クラスローダーに関連するいくつかのトリックだと思っています。

全体のライブラリのリストです:のWebSphere ND 8.5では

"wsdl4j.jar" "all-themes-1.0.10.jar" "axis.jar" "check-sessionid.jar" "commons-discovery-0.2.jar" "commons-logging.jar" "javax.faces-2.2.8.jar" "javax.servlet_3.0.0.jar" "javax-inject.jar" "jaxrpc.jar" "joda-time-2.9.4.jar" "jsf-api-2.2.8.jar" "jsf-impl-2.2.8.jar" "log4j-1.2.17.jar" "log4j-boot.jar" "lombok.jar" "ojdbc6.jar" "primefaces-5.1.RC1.jar" "primefaces-5.1.RC1-sources.jar" "saaj.jar" 

私はsuccessfulyこれらの設定を使用して同じWeb aplicationを開始します。

1 - Server固有のアプリケーション設定:クラスローダポリシー

2 - クラスローダの順序:親クラスローダで最初にロードされるクラス

3 - WARクラスローダポリシー:各WARのクラスローダアプリケーションでファイル

4 - 共有ライブラリ:

cells:hohmlweb01-aixCell01:nodes:hohmlweb01-aixNode01:servers:Sistemas_MyCompany_HML 

Cell=hohmlweb01-aixCell01, Profile=Dmgr01>Shared Libraries > icefaces4.0.0 Classpath: /home/sisorb/icefaces-ace-4.0.0.jar /home/sisorb/icepush-4.0.0.jar /home/sisorb/icefaces-4.0.0.jar /home/sisorb/jfreechart-1.0.19.jar 
Shared Libraries > jsf_versao_228 Classpath: /home/sisorb/jsf-api-2.2.8.jar /home/sisorb/jsf-impl-2.2.8.jar /home/sisorb/javax.faces-2.2.8.jar 

誰かが、少なくとも、そのようなを再現する方法を私に伝えることができた場合はリバティーND構成は、それが非常にappreciattedされるプロフィールました。おそらく、私は同じクラスの読み込み設定を複製することで問題を解決できます。

PS:この質問はもともと他のフォーラムで作成されましたが、私はまったく答えが得ていないので、私も(https://developer.ibm.com/answers/questions/323283/how-can-i-reproduce-same-was-nd-classloader-setup.html

*改行 私のようにConfigureListenerコメントここに私の疑問を共有しています提案*

<display-name>CallCenter</display-name> 
<!--<listener> 
     <listener-class>com.sun.faces.config.ConfigureListener</listener-class> 
    </listener> --> 
    <listener> 
     <listener-class> 
      com.mycomp.Inicialize 
     </listener-class> 
    </listener> 
    <servlet> 
     <servlet-name>Faces Servlet</servlet-name> 
     <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Faces Servlet</servlet-name> 
     <url-pattern>*.jsf</url-pattern> 
    </servlet-mapping> 
    <context-param> 
     <param-name>primefaces.THEME</param-name> 
     <param-value>glass-x</param-value> 
     <!-- <param-value>bluesky</param-value> --> 
    </context-param> 
    <context-param> 
     <description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description> 
     <param-name>javax.faces.STATE_SAVING_METHOD</param-name> 
     <param-value>client</param-value> 
    </context-param> 
  • 2016/11月/ 30午前12:30ブラジルの時点で "javax.faces-2.2.8.jar" "jsf-api-2.2.8.jar" "jsf-impl-2.2.8.jar"を削除しました "all-themes-1.0.10.jar"を残しました。 "axis.jar" "check-sessionid.jar" "commons-discovery-0.2.jar" "commons-logging.jar" "javax.servlet_3.0.0.jar" "javax-inject.jar" "jaxrpc.jar" " joda-time-2.9.4.jar "" log4j-1.2.17.jar "" log4j-boot.jar "" lombok.jar "" ojdbc6.jar "" primefaces-5.1.RC1。

    Application Error 
    SRVE0777E: Exceção lançada pela classe de aplicativo 'javax.faces.webapp.FacesServlet.service:230' 
    javax.servlet.ServletException: javax.el.PropertyNotFoundException: Não alcançável no destino, identificador 'dashBean' resolvido como nulo 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:230) 
    at [internal classes] 
    Caused by: org.apache.myfaces.view.facelets.el.ContextAwarePropertyNotFoundException: javax.el.PropertyNotFoundException: Não alcançável no destino, identificador 'dashBean' resolvido como nulo 
    at org.apache.myfaces.view.facelets.el.ContextAwareTagValueExpression.setValue(ContextAwareTagValueExpression.java:157) 
    ... 1 more 
    Caused by: javax.el.PropertyNotFoundException: Não alcançável no destino, identificador 'dashBean' resolvido como nulo 
    at org.apache.el.parser.AstValue.getTarget(AstValue.java:72) 
    ... 1 more 
    

    *を追加しました2016/11月/ 30:jarファイル」 "primefaces-5.1.RC1-sources.jar" "saaj.jar" "wsdl4j.jar"

は、それから私は、新しいエラーを得ました2h30pmブラジル時の

のfaces-config.xmlの

<?xml version="1.0" encoding="UTF-8"?> 
<faces-config 
    xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd" 
    version="2.2"> 

    <application> 
    <action-listener>org.primefaces.application.DialogActionListener</action-listener> 
    <navigation-handler>org.primefaces.application.DialogNavigationHandler</navigation-handler> 
    <view-handler>org.primefaces.application.DialogViewHandler</view-handler> 
</application> 

</faces-config> 

のWebsphereリバティプロフィール - server.xmlを

<featureManager> 
    <feature>localConnector-1.0</feature> 
    <feature>cdi-1.2</feature> 
    <feature>jsf-2.2</feature> 
</featureManager> 

*を追加しました2016年11月30日16:40にブラジルの時間後に削除された2つの以上のjarファイル(javax.servlet_3.0.0とのjavax-注入)

FFDC *「com.ibm.wsspi.injectionengine作成。 InjectionException:java.lang.NoClassDefFoundErrorが:ServletContextEvent com.ibm.ws.webcontainer.webapp.WebApp.loadListener 672"

* FFDCが深くログ文です我々は

のWebSphereリバティはFFDC

を記録プロフィール見ることができます
Exception = com.ibm.wsspi.injectionengine.InjectionException 
Source = com.ibm.ws.webcontainer.webapp.WebApp.loadListener 
probeid = 672 
Stack Dump = com.ibm.wsspi.injectionengine.InjectionException: java.lang.NoClassDefFoundError: ServletContextEvent 
    at com.ibm.ws.webcontainer.osgi.webapp.WebApp.inject(WebApp.java:1282) 
    at com.ibm.ws.webcontainer.osgi.webapp.WebApp.injectAndPostConstruct(WebApp.java:1424) 
    at com.ibm.ws.webcontainer.osgi.webapp.WebApp.injectAndPostConstruct(WebApp.java:1412) 
    at com.ibm.ws.webcontainer.osgi.webapp.WebApp.loadListener(WebApp.java:818) 
    at com.ibm.ws.webcontainer.webapp.WebApp.loadLifecycleListeners(WebApp.java:2251) 
    at com.ibm.ws.webcontainer.webapp.WebApp.initialize(WebApp.java:1039) 
    at com.ibm.ws.webcontainer.webapp.WebApp.initialize(WebApp.java:6545) 
    at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost.startWebApp(DynamicVirtualHost.java:466) 
    at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost.createRunnableHandler(DynamicVirtualHost.java:264) 
    at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost.createRunnableHandler(DynamicVirtualHost.java:329) 
    at com.ibm.ws.http.internal.VirtualHostImpl.discriminate(VirtualHostImpl.java:251) 
    at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink.ready(HttpDispatcherLink.java:301) 
    at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:471) 
    at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.handleNewRequest(HttpInboundLink.java:405) 
    at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.processRequest(HttpInboundLink.java:285) 
    at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.ready(HttpInboundLink.java:256) 
    at com.ibm.ws.tcpchannel.internal.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:174) 
    at com.ibm.ws.tcpchannel.internal.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:83) 
    at com.ibm.ws.tcpchannel.internal.WorkQueueManager.requestComplete(WorkQueueManager.java:504) 
    at com.ibm.ws.tcpchannel.internal.WorkQueueManager.attemptIO(WorkQueueManager.java:574) 
    at com.ibm.ws.tcpchannel.internal.WorkQueueManager.workerRun(WorkQueueManager.java:929) 
    at com.ibm.ws.tcpchannel.internal.WorkQueueManager$Worker.run(WorkQueueManager.java:1018) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.NoClassDefFoundError: ServletContextEvent 
    at java.lang.Class.getDeclaredMethods0(Native Method) 
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) 
    at java.lang.Class.getDeclaredMethods(Class.java:1975) 
    at org.jboss.weld.annotated.slim.backed.SecurityActions.getDeclaredMethods(SecurityActions.java:41) 
    at org.jboss.weld.annotated.slim.backed.BackedAnnotatedType$BackedAnnotatedMethods.computeValue(BackedAnnotatedType.java:194) 
    at org.jboss.weld.annotated.slim.backed.BackedAnnotatedType$BackedAnnotatedMethods.computeValue(BackedAnnotatedType.java:188) 
    at org.jboss.weld.util.LazyValueHolder.get(LazyValueHolder.java:35) 
    at org.jboss.weld.annotated.slim.backed.BackedAnnotatedType$EagerlyInitializedLazyValueHolder.<init>(BackedAnnotatedType.java:156) 
    at org.jboss.weld.annotated.slim.backed.BackedAnnotatedType$BackedAnnotatedMethods.<init>(BackedAnnotatedType.java:188) 
    at org.jboss.weld.annotated.slim.backed.BackedAnnotatedType$BackedAnnotatedMethods.<init>(BackedAnnotatedType.java:188) 
    at org.jboss.weld.annotated.slim.backed.BackedAnnotatedType.<init>(BackedAnnotatedType.java:63) 
    at org.jboss.weld.annotated.slim.backed.BackedAnnotatedType.of(BackedAnnotatedType.java:44) 
    at org.jboss.weld.resources.ClassTransformer$TransformClassToBackedAnnotatedType.load(ClassTransformer.java:83) 
    at org.jboss.weld.resources.ClassTransformer$TransformClassToBackedAnnotatedType.load(ClassTransformer.java:80) 
    at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3599) 
    at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2379) 
    at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2342) 
    at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2257) 
    at com.google.common.cache.LocalCache.get(LocalCache.java:4000) 
    at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:4004) 
    at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4874) 
    at org.jboss.weld.util.cache.LoadingCacheUtils.getCacheValue(LoadingCacheUtils.java:49) 
    at org.jboss.weld.util.cache.LoadingCacheUtils.getCastCacheValue(LoadingCacheUtils.java:74) 
    at org.jboss.weld.resources.ClassTransformer.getBackedAnnotatedType(ClassTransformer.java:175) 
    at org.jboss.weld.resources.ClassTransformer.getBackedAnnotatedType(ClassTransformer.java:194) 
    at org.jboss.weld.manager.BeanManagerImpl.createAnnotatedType(BeanManagerImpl.java:1215) 
    at com.ibm.ws.cdi.impl.managedobject.AbstractManagedObjectFactory.getInjectionTarget(AbstractManagedObjectFactory.java:177) 
    at com.ibm.ws.cdi.impl.managedobject.AbstractManagedObjectFactory.createManagedObject(AbstractManagedObjectFactory.java:204) 
    at com.ibm.ws.cdi.impl.managedobject.CDIManagedObjectFactoryImpl.createManagedObject(CDIManagedObjectFactoryImpl.java:60) 
    at com.ibm.ws.webcontainer.osgi.webapp.WebApp.inject(WebApp.java:1258) 
    ... 24 more 
Caused by: java.lang.ClassNotFoundException: ServletContextEvent 
    at com.ibm.ws.classloading.internal.AppClassLoader.findClassCommonLibraryClassLoaders(AppClassLoader.java:488) 
    at com.ibm.ws.classloading.internal.AppClassLoader.findClass(AppClassLoader.java:271) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at com.ibm.ws.classloading.internal.AppClassLoader.findOrDelegateLoadClass(AppClassLoader.java:466) 
    at com.ibm.ws.classloading.internal.AppClassLoader.loadClass(AppClassLoader.java:438) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 54 more 
+0

ここでは、BalusCの答えを詳しく見てみましょう.1a http://stackoverflow.com/a/30128396/3864977 – wtlucy

答えて

1

2番目のスタックトレースから、アプリケーションのjarファイルの1つがCDI拡張機能を登録しているように見えます。この拡張が呼び出されると、CDI11Utilサービスを読み込もうとしますが、期待される型のオブジェクトを取得しません。

私はそれがこれを行うjsf-impl.jarかもしれないと思う。 webProfile-7.0機能(JSFを含む)を使用しているので、アプリケーションに独自のJSF実装を提供するべきではありません。この瓶を外してみることができますか?

サーブレット、faces、injectまたはjsf API jarは、サーバーがアプリケーション用にこれらのクラスを提供するため、必要ないはずです。

Libertyのデフォルトのクラスローダー設定は、あなたの質問に記述されているとおりです(クラスローダーは最初に親です。各WARには独自のクラスローダーがあります)。

+0

Azquelt、私はあなたの提案を試みました(jsf-impl.jarを削除しましたが、私はちょうど数分前にWtlucyにコメントしました – DemeCarvO

1

前述のように、webProfile-7.0機能には、アプリケーションにバンドルしているjsf- * jarsと同じEE機能(JSF 2.2)を提供するjsf-2.2機能が含まれています。この問題は、使用するJSF実装を1つ選択することで解決できます。

1)アプリケーションでJSF実装をバンドルする:サーバー定義からwebProfile-7.0機能を削除し、必要な(JSF以外の)機能のみを有効にします。

2)アプリケーションからjsf-apiおよびjsf-impl jarを削除します。これは推奨されるルートです:WebSphere Libertyは、MyFaces JSF 2.2実装を提供します。 Here is some additional information for configuring the jsf-2.2 feature

+0

Wtlucy、私はあなたの2番目の提案を試みましたが、基本的にはJSF implementaioが選択されているという特定のエラーメッセージがありました。ポルトガル語の完全なメッセージは「[ADVERT'NCNIC] JSFG0853W:JSFの実装はMyFebをMyFebappで実行し、Sun RI ConfigureListenerレジストリを使用しています」というメッセージが翻訳されました。 – DemeCarvO

+0

この警告は、アプリケーションのweb.xmlにMojarra ConfigureListenerが登録されていることを示しています。 LibertyのMyFaces実装を使用したいので、そのリスナーを削除できます。 – wtlucy

+0

Wtlucy、同じエラーメッセージが表示されます。私はweb.xmlを追加しています – DemeCarvO

関連する問題