我需要转换我的 JSF 2.0 项目,以便它可以部署在 ServiceMix 上。应该在 MANIFEST.MF 中导入什么以及在部署之前应该将什么安装到 ServiceMix?
起初我的网络服务找不到 javax.faces.webapp.FacesServlet 类。在我将它添加到 MANIFEST.MF 中的 Import 后,ServiceMix 无法运行已安装的捆绑包并出现错误:
org.osgi.framework.BundleException: Unresolved constraint in bundle avita [157]: Unable to resolve 157.0: missing requirement [157.0] package; (package=javax.faces.webapp.FacesServlet)
如何安装 package:javax.faces.webapp.FacesServlet
以及 JSF 2.0 工作所需的任何其他包?在我的 Web 服务中,我还使用了 EclipseLink (JPA 2.0)、MySQL JDBC 连接器和 Hibernate。它在 GlassFish v3 上运行良好。
请告诉我我应该如何进行。我搜索了很多,找不到解决方案。
更新:我已将我的测试 facelet 部署到 servicemix,但存在更多问题。在服务组合中,我发布了以下命令来加载所需的库:
install mvn:org.apache.myfaces.core/myfaces-api/1.2.9<br>
install mvn:org.apache.myfaces.core/myfaces-impl/1.2.9<br>
install mvn:commons-beanutils/commons-beanutils/1.8.3<br>
install mvn:commons-collections/commons-collections/3.2.1<br>
install mvn:commons-codec/commons-codec/1.4<br>
install mvn:org.apache.commons/com.springsource.org.apache.commons.digester/1.8.0<br>
install mvn:org.apache.commons/com.springsource.org.apache.commons.discovery/0.4.0<br>
现在我可以查看简单的 facelets。我无法通过实体加载任何具有持久性的页面。我有以下错误:
2012-08-27 11:39:11,180 | WARN | mix-4.4.2/deploy | /avitaTest | ? ? | 108 - org.eclipse.jetty.util - 7.4.5.v20110725 | unavailable
java.lang.IllegalStateException: No Factories configured for this Application. This happens if the faces-initialization does not work at all - make sure that you properly include all configuration settings necessary for a basic faces application and that all the necessary libs are included. Also check the logging output of your web application and your container for any exceptions!
If you did that and find nothing, the mistake might be due to the fact that you use some special web-containers which do not support registering context-listeners via TLD files and a context listener is not setup in your web.xml.
A typical config looks like this;
<listener>
<listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
</listener>
at javax.faces.FactoryFinder.getFactory(FactoryFinder.java:106)[157:org.apache.myfaces.core.api:1.2.9]
at javax.faces.webapp.FacesServlet.init(FacesServlet.java:137)[157:org.apache.myfaces.core.api:1.2.9]
at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:436)[97:org.eclipse.jetty.servlet:7.4.5.v20110725]
at org.eclipse.jetty.servlet.ServletHolder.doStart(ServletHolder.java:260)[97:org.eclipse.jetty.servlet:7.4.5.v20110725]
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:58)[108:org.eclipse.jetty.util:7.4.5.v20110725]
at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:765)[97:org.eclipse.jetty.servlet:7.4.5.v20110725]
at org.eclipse.jetty.servlet.ServletHandler.updateMappings(ServletHandler.java:1215)[97:org.eclipse.jetty.servlet:7.4.5.v20110725]
at org.eclipse.jetty.servlet.ServletHandler.setServletMappings(ServletHandler.java:1273)[97:org.eclipse.jetty.servlet:7.4.5.v20110725]
at org.eclipse.jetty.servlet.ServletHandler.addServletMapping(ServletHandler.java:873)[97:org.eclipse.jetty.servlet:7.4.5.v20110725]
at org.ops4j.pax.web.service.jetty.internal.JettyServerImpl$1.call(JettyServerImpl.java:158)[111:org.ops4j.pax.web.pax-web-jetty:1.0.7]
at org.ops4j.pax.web.service.jetty.internal.JettyServerImpl$1.call(JettyServerImpl.java:154)[111:org.ops4j.pax.web.pax-web-jetty:1.0.7]
at org.ops4j.pax.swissbox.core.ContextClassLoaderUtils.doWithClassLoader(ContextClassLoaderUtils.java:60)[111:org.ops4j.pax.web.pax-web-jetty:1.0.7]
at org.ops4j.pax.web.service.jetty.internal.JettyServerImpl.addServlet(JettyServerImpl.java:153)[111:org.ops4j.pax.web.pax-web-jetty:1.0.7]
at org.ops4j.pax.web.service.jetty.internal.ServerControllerImpl$Started.addServlet(ServerControllerImpl.java:266)[111:org.ops4j.pax.web.pax-web-jetty:1.0.7]
at org.ops4j.pax.web.service.jetty.internal.ServerControllerImpl.addServlet(ServerControllerImpl.java:107)[111:org.ops4j.pax.web.pax-web-jetty:1.0.7]
at org.ops4j.pax.web.service.internal.HttpServiceStarted.registerServlet(HttpServiceStarted.java:248)[113:org.ops4j.pax.web.pax-web-runtime:1.0.7]
at org.ops4j.pax.web.service.internal.HttpServiceStarted.registerServlet(HttpServiceStarted.java:219)[113:org.ops4j.pax.web.pax-web-runtime:1.0.7]
at org.ops4j.pax.web.service.internal.HttpServiceProxy.registerServlet(HttpServiceProxy.java:100)[113:org.ops4j.pax.web.pax-web-runtime:1.0.7]
at org.ops4j.pax.web.extender.war.internal.RegisterWebAppVisitorWC.visit(RegisterWebAppVisitorWC.java:206)[122:org.ops4j.pax.web.pax-web-extender-war:1.0.7]
at org.ops4j.pax.web.extender.war.internal.model.WebApp.accept(WebApp.java:583)[122:org.ops4j.pax.web.pax-web-extender-war:1.0.7]
at org.ops4j.pax.web.extender.war.internal.WebAppPublisher$HttpServiceListener.register(WebAppPublisher.java:170)[122:org.ops4j.pax.web.pax-web-extender-war:1.0.7]
at org.ops4j.pax.web.extender.war.internal.WebAppPublisher$HttpServiceListener.serviceChanged(WebAppPublisher.java:155)[122:org.ops4j.pax.web.pax-web-extender-war:1.0.7]
at org.ops4j.pax.web.extender.war.internal.WebAppPublisher$HttpServiceListener.serviceChanged(WebAppPublisher.java:119)[122:org.ops4j.pax.web.pax-web-extender-war:1.0.7]
at org.ops4j.pax.swissbox.tracker.ReplaceableService.setService(ReplaceableService.java:114)[122:org.ops4j.pax.web.pax-web-extender-war:1.0.7]
at org.ops4j.pax.swissbox.tracker.ReplaceableService.access$100(ReplaceableService.java:28)[122:org.ops4j.pax.web.pax-web-extender-war:1.0.7]
at org.ops4j.pax.swissbox.tracker.ReplaceableService$CollectionListener.serviceAdded(ReplaceableService.java:183)[122:org.ops4j.pax.web.pax-web-extender-war:1.0.7]
at org.ops4j.pax.swissbox.tracker.ServiceCollection$Tracker.addingService(ServiceCollection.java:181)[122:org.ops4j.pax.web.pax-web-extender-war:1.0.7]
at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:896)[karaf.jar:2.2.4]
at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:261)[karaf.jar:2.2.4]
at org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:184)[karaf.jar:2.2.4]
at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:339)[karaf.jar:2.2.4]
at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:273)[karaf.jar:2.2.4]
at org.ops4j.pax.swissbox.tracker.ServiceCollection.onStart(ServiceCollection.java:139)[122:org.ops4j.pax.web.pax-web-extender-war:1.0.7]
at org.ops4j.pax.swissbox.lifecycle.AbstractLifecycle$Stopped.start(AbstractLifecycle.java:121)[122:org.ops4j.pax.web.pax-web-extender-war:1.0.7]
at org.ops4j.pax.swissbox.lifecycle.AbstractLifecycle.start(AbstractLifecycle.java:49)[122:org.ops4j.pax.web.pax-web-extender-war:1.0.7]
at org.ops4j.pax.swissbox.tracker.ReplaceableService.onStart(ReplaceableService.java:146)[122:org.ops4j.pax.web.pax-web-extender-war:1.0.7]
at org.ops4j.pax.swissbox.lifecycle.AbstractLifecycle$Stopped.start(AbstractLifecycle.java:121)[122:org.ops4j.pax.web.pax-web-extender-war:1.0.7]
at org.ops4j.pax.swissbox.lifecycle.AbstractLifecycle.start(AbstractLifecycle.java:49)[122:org.ops4j.pax.web.pax-web-extender-war:1.0.7]
at org.ops4j.pax.web.extender.war.internal.WebAppPublisher.publish(WebAppPublisher.java:81)[122:org.ops4j.pax.web.pax-web-extender-war:1.0.7]
at org.ops4j.pax.web.extender.war.internal.WebXmlObserver.doPublish(WebXmlObserver.java:304)[122:org.ops4j.pax.web.pax-web-extender-war:1.0.7]
at org.ops4j.pax.web.extender.war.internal.WebXmlObserver.addingEntries(WebXmlObserver.java:153)[122:org.ops4j.pax.web.pax-web-extender-war:1.0.7]
at org.ops4j.pax.swissbox.extender.BundleWatcher.register(BundleWatcher.java:186)[122:org.ops4j.pax.web.pax-web-extender-war:1.0.7]
at org.ops4j.pax.swissbox.extender.BundleWatcher.access$000(BundleWatcher.java:45)[122:org.ops4j.pax.web.pax-web-extender-war:1.0.7]
at org.ops4j.pax.swissbox.extender.BundleWatcher$1.bundleChanged(BundleWatcher.java:127)[122:org.ops4j.pax.web.pax-web-extender-war:1.0.7]
at org.apache.felix.framework.util.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:807)[org.apache.felix.framework-3.0.9.jar:]
at org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:729)[org.apache.felix.framework-3.0.9.jar:]
at org.apache.felix.framework.util.EventDispatcher.fireBundleEvent(EventDispatcher.java:610)[org.apache.felix.framework-3.0.9.jar:]
at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:3761)[org.apache.felix.framework-3.0.9.jar:]
at org.apache.felix.framework.Felix.startBundle(Felix.java:1787)[org.apache.felix.framework-3.0.9.jar:]
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:918)[org.apache.felix.framework-3.0.9.jar:]
at org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:1175)[7:org.apache.felix.fileinstall:3.1.10]
at org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:1153)[7:org.apache.felix.fileinstall:3.1.10]
at org.apache.felix.fileinstall.internal.DirectoryWatcher.processAllBundles(DirectoryWatcher.java:1146)[7:org.apache.felix.fileinstall:3.1.10]
at org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:456)[7:org.apache.felix.fileinstall:3.1.10]
at org.apache.felix.fileinstall.internal.DirectoryWatcher.run(DirectoryWatcher.java:263)[7:org.apache.felix.fileinstall:3.1.10]
关于如何解决这个问题的任何想法?我已经添加了:
<listener>
<listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
</listener>
,web.xml
但它并没有解决问题。