2012-07-31 39 views
8

में काम नहीं कर रहा है मुझे वास्तव में आपकी मदद की ज़रूरत है। मैं इस समस्या पर हफ्तों या महीनों के लिए काम कर रहा हूं। मैं लंबी पोस्ट के लिए क्षमा चाहता हूं, लेकिन मैं जितनी जल्दी हो सके समस्या और मेरी सेटिंग्स को समझाना चाहता हूं। एक javax.faces.webapp.FacesServlet, एक StreamingServlet विस्तार javax.servlet.http.HttpServlet और एक ClientServlet विस्तार org.eclipse.jetty.websocket:सीडीआई इंजेक्शन Servlets

मेरे जावा ईई 6 वेब अनुप्रयोग मुख्य रूप से 3 सर्वलेट्स शामिल .WebSocketServlet। मैं इन Servlets के साथ सीडीआई का उपयोग करना चाहता हूं, लेकिन यह केवल FacesServlet के लिए काम करता है, और अधिक सटीक होने के लिए, बीन्स के लिए जेएसएफ कार्यों को रूट किया जाता है। सीडीआई इंजेक्शन अन्य 2 सर्वलेट्स के साथ काम नहीं करता है।

मेरी परियोजना के लिए सेटअप निम्नानुसार है: मेवेन 3.0.4, जेटी 8.1.4 (जेट्टी-मेवेन-प्लगइन), माईफेसेस 2.1.6, वेल्ड 1.1.8।

फ़ाइल pom.xml CDI के लिए निर्भरता शामिल हैं:

... 
<dependency> 
    <groupId>javax.enterprise</groupId> 
    <artifactId>cdi-api</artifactId> 
    <version>1.1.EDR1.2</version> 
    <scope>provided</scope> 
</dependency> 
<dependency> 
    <groupId>javax.annotation</groupId> 
    <artifactId>jsr250-api</artifactId> 
    <version>1.0</version> 
</dependency> 
<dependency> 
    <groupId>org.jboss.weld.servlet</groupId> 
    <artifactId>weld-servlet</artifactId> 
    <version>${weld.version}</version> 
    <scope>runtime</scope> 
</dependency> 
... 

फ़ाइल src/मुख्य/webapp/वेब-INF/beans.xml केवल CDI को सक्रिय करने के लिए एक खाली सेम तत्व शामिल :

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd"> 
</beans> 

फ़ाइल scr/मुख्य/webapp/वेब-INF/घाट-env.xml के माध्यम से सेम प्रबंधक प्राप्त करने के लिए घाट विशिष्ट विन्यास शामिल JNDI:

<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://www.eclipse.org/jetty/configure.dtd"> 

<Configure id="webAppCtx" class="org.eclipse.jetty.webapp.WebAppContext"> 
    <New id="BeanManager" class="org.eclipse.jetty.plus.jndi.Resource"> 
     <Arg> 
      <Ref id="webAppCtx" /> 
     </Arg> 
     <Arg>BeanManager</Arg> 
     <Arg> 
      <New class="javax.naming.Reference"> 
       <Arg>javax.enterprise.inject.spi.BeanManager</Arg> 
       <Arg>org.jboss.weld.resources.ManagerObjectFactory</Arg> 
       <Arg /> 
      </New> 
     </Arg> 
    </New> 
</Configure> 

फ़ाइल src/मुख्य/webapp/वेब-INF/web.xml सर्वलेट श्रोता और बूटस्ट्रैपिंग CDI के लिए BeanManager संदर्भ शामिल हैं:

... 
<listener> 
    <listener-class>org.jboss.weld.environment.servlet.Listener</listener-class> 
</listener> 

<resource-env-ref> 
    <description>Object factory for the CDI Bean Manager</description> 
    <resource-env-ref-name>BeanManager</resource-env-ref-name> 
    <resource-env-ref-type>javax.enterprise.inject.spi.BeanManager</resource-env-ref-type> 
</resource-env-ref> 
... 
इन सेटिंग्स मैं हमेशा साथ

रन (पहली पंक्ति सबसे महत्वपूर्ण है):

2012-07-31 11:09:33,546 [main] ERROR org.jboss.weld.environment.jetty.JettyPost72Container - Unable to create JettyWeldInjector. CDI injection will not be available in Servlets, Filters or Listeners 
java.lang.IllegalArgumentException: Cannot load class for org.jboss.weld.environment.jetty.WeldDecorator 
    at org.jboss.weld.environment.servlet.util.Reflections.classForName(Reflections.java:58) 
    at org.jboss.weld.environment.jetty.JettyPost72Container.initialize(JettyPost72Container.java:66) 
    at org.jboss.weld.environment.servlet.Listener.contextInitialized(Listener.java:162) 
    at org.eclipse.jetty.server.handler.ContextHandler.callContextInitialized(ContextHandler.java:764) 
    at org.eclipse.jetty.servlet.ServletContextHandler.callContextInitialized(ServletContextHandler.java:406) 
    at org.eclipse.jetty.server.handler.ContextHandler.startContext(ContextHandler.java:756) 
    at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:242) 
    at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1234) 
    at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:699) 
    at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467) 
    at org.mortbay.jetty.plugin.JettyWebAppContext.doStart(JettyWebAppContext.java:256) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) 
    at org.eclipse.jetty.server.handler.HandlerCollection.doStart(HandlerCollection.java:224) 
    at org.eclipse.jetty.server.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:167) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) 
    at org.eclipse.jetty.server.handler.HandlerCollection.doStart(HandlerCollection.java:224) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) 
    at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:90) 
    at org.eclipse.jetty.server.Server.doStart(Server.java:262) 
    at org.mortbay.jetty.plugin.JettyServer.doStart(JettyServer.java:65) 
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) 
    at org.mortbay.jetty.plugin.AbstractJettyMojo.startJetty(AbstractJettyMojo.java:511) 
    at org.mortbay.jetty.plugin.AbstractJettyMojo.execute(AbstractJettyMojo.java:364) 
    at org.mortbay.jetty.plugin.JettyRunMojo.execute(JettyRunMojo.java:516) 
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) 
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84) 
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) 
    at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) 
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161) 
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320) 
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156) 
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537) 
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196) 
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:141) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352) 
Caused by: java.lang.NoClassDefFoundError: org/eclipse/jetty/servlet/ServletContextHandler$Decorator 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:615) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) 
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) 
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:415) 
    at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:377) 
    at org.jboss.weld.environment.servlet.util.Reflections.classForName(Reflections.java:51) 
    ... 44 more 
Caused by: java.lang.ClassNotFoundException: org.eclipse.jetty.servlet.ServletContextHandler$Decorator 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:415) 
    at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:377) 
    ... 56 more 
जब आवेदन mvn घाट का उपयोग कर चल निम्न त्रुटि मिला

एप्लिकेशन चल रहा था लेकिन अपवाद संदेश कहता है: सीडीआई इंजेक्शन Servlets में उपलब्ध नहीं होगा।

कुछ दिन पहले, मुझे लेख Starting a CDI webapp from Maven with Weld-Servlet and Jetty Plugin और विशेष रूप से अनुभाग सर्कल में इंजेक्शन की अनुमति देने के लिए अंतिम चाल मिली। लेखक बताते हैं कि वेल्ड को सर्लेट्स में @ इंजेक्शन एनोटेशन का उपयोग करने के लिए कुछ जेटी आंतरिक कक्षाओं को सजाने की जरूरत है और हमें जेटी क्लासलोडर को यह बताना होगा कि वेल्ड सर्लेट को सजाने के लिए इस वर्ग को कहां मिलना है।

मैं इस विशेष जानकारी के लिए बहुत लंबा इंतजार कर रहा था। मैं भी आदेश फ़ाइल घाट-context.xml को शामिल करने में pom.xml अद्यतन

<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd"> 

<Configure id="webAppCtx" class="org.eclipse.jetty.webapp.WebAppContext"> 
    <Set name="serverClasses"> 
     <Array type="java.lang.String"> 
      <Item>org.eclipse.jetty.servlet.ServletContextHandler.Decorator</Item> 
     </Array> 
    </Set> 
</Configure> 

: तो मैं फ़ाइल src/मुख्य/webapp/वेब-INF/घाट-context.xml जोड़ा (अंतिम पंक्ति):

... 
<plugin> 
    <groupId>org.mortbay.jetty</groupId> 
    <artifactId>jetty-maven-plugin</artifactId> 
    <version>${jetty.version}</version> 
    <configuration> 
     <webApp> 
      <contextPath>/${project.build.finalName}</contextPath> 
     </webApp> 
     <jettyEnvXml>src/main/webapp/WEB-INF/jetty-env.xml</jettyEnvXml> 
     <contextXml>src/main/webapp/WEB-INF/jetty-context.xml</contextXml> 
     ... 

अब उपरोक्त त्रुटि गायब हो गई है।

... 
log4j.logger.org.jboss.weld=DEBUG, stdout 
log4j.additivity.org.jboss.weld=false 
... 

जब अनुप्रयोग मैं वेल्ड लॉग संदेशों निम्नलिखित प्राप्त करें: मुझे लगता है कि कम पल :)

src/मुख्य/संसाधन/log4j.properties में के लिए बहुत खुश मैं वेल्ड लिए लॉग स्तर में वृद्धि हुई थी :

... 
2012-07-31 12:00:08,968 [main] INFO org.jboss.weld.Bootstrap - WELD-000101 Transactional services not available. Injection of @Inject UserTransaction not available. Transactional observers will be invoked synchronously. 
2012-07-31 12:00:09,109 [main] DEBUG org.jboss.weld.Bootstrap - WELD-000103 Enabled alternatives for Manager 
Enabled alternatives: [] [] 
Registered contexts: [interface javax.enterprise.context.SessionScoped, interface javax.enterprise.context.ApplicationScoped, interface javax.enterprise.context.Dependent, interface javax.enterprise.context.RequestScoped, interface javax.enterprise.context.ConversationScoped, interface javax.inject.Singleton] 
Registered beans: 0 
: [] [] 
2012-07-31 12:00:09,109 [main] DEBUG org.jboss.weld.Bootstrap - WELD-000104 Enabled decorator types for Manager 
Enabled alternatives: [] [] 
Registered contexts: [interface javax.enterprise.context.SessionScoped, interface javax.enterprise.context.ApplicationScoped, interface javax.enterprise.context.Dependent, interface javax.enterprise.context.RequestScoped, interface javax.enterprise.context.ConversationScoped, interface javax.inject.Singleton] 
Registered beans: 0 
: [] 
2012-07-31 12:00:09,109 [main] DEBUG org.jboss.weld.Bootstrap - WELD-000105 Enabled interceptor types for Manager 
Enabled alternatives: [] [] 
Registered contexts: [interface javax.enterprise.context.SessionScoped, interface javax.enterprise.context.ApplicationScoped, interface javax.enterprise.context.Dependent, interface javax.enterprise.context.RequestScoped, interface javax.enterprise.context.ConversationScoped, interface javax.inject.Singleton] 
Registered beans: 0 
: [] 
2012-07-31 12:00:09,171 [main] INFO org.jboss.weld.environment.jetty.JettyPost72Container - Jetty7 detected, JSR-299 injection will be available in Listeners, Servlets and Filters. 
2012-07-31 12:00:09,265 [main] DEBUG org.jboss.weld.Bootstrap - WELD-000106 Bean: Implicit Bean [javax.enterprise.inject.spi.InjectionPoint] with qualifiers [@Default] 
2012-07-31 12:00:09,265 [main] DEBUG org.jboss.weld.Bootstrap - WELD-000106 Bean: org.jboss.weld.bean-flat-Built-in-org.jboss.weld.context.DependentContext 
2012-07-31 12:00:09,281 [main] DEBUG org.jboss.weld.Bootstrap - WELD-000106 Bean: Managed Bean [class de.telexiom.cardiom.util.MediaType] with qualifiers [@Any @Default] 
2012-07-31 12:00:09,281 [main] WARN org.jboss.weld.interceptor.util.InterceptionTypeRegistry - Class 'javax.ejb.PostActivate' not found, interception based on it is not enabled 
2012-07-31 12:00:09,281 [main] WARN org.jboss.weld.interceptor.util.InterceptionTypeRegistry - Class 'javax.ejb.PrePassivate' not found, interception based on it is not enabled 
2012-07-31 12:00:09,281 [main] DEBUG org.jboss.weld.Bootstrap - WELD-000106 Bean: Managed Bean [class de.telexiom.cardiom.web.LoginBean] with qualifiers [@Any @Default] 
2012-07-31 12:00:09,281 [main] DEBUG org.jboss.weld.Bootstrap - WELD-000106 Bean: org.jboss.weld.bean-flat-Built-in-org.jboss.weld.context.http.HttpRequestContext 
2012-07-31 12:00:09,281 [main] DEBUG org.jboss.weld.Bootstrap - WELD-000106 Bean: org.jboss.weld.bean-flat-Built-in-org.jboss.weld.context.http.HttpSessionContext 
2012-07-31 12:00:09,281 [main] DEBUG org.jboss.weld.Bootstrap - WELD-000106 Bean: Managed Bean [class de.telexiom.cardiom.web.CustomerBean] with qualifiers [@Any @Default @Named] 
2012-07-31 12:00:09,281 [main] DEBUG org.jboss.weld.Bootstrap - WELD-000106 Bean: org.jboss.weld.bean-flat-Built-in-org.jboss.weld.context.bound.BoundConversationContext 
2012-07-31 12:00:09,281 [main] DEBUG org.jboss.weld.Bootstrap - WELD-000106 Bean: org.jboss.weld.bean-flat-Built-in-org.jboss.weld.context.ApplicationContext 
2012-07-31 12:00:09,281 [main] DEBUG org.jboss.weld.Bootstrap - WELD-000106 Bean: Managed Bean [class de.telexiom.cardiom.util.LocaleBean] with qualifiers [@Any @Default @Named] 
2012-07-31 12:00:09,281 [main] DEBUG org.jboss.weld.Bootstrap - WELD-000106 Bean: org.jboss.weld.bean-flat-Built-in-org.jboss.weld.context.bound.BoundRequestContext 
2012-07-31 12:00:09,281 [main] DEBUG org.jboss.weld.Bootstrap - WELD-000106 Bean: org.jboss.weld.bean-flat-Built-in-org.jboss.weld.context.SingletonContext 
2012-07-31 12:00:09,281 [main] DEBUG org.jboss.weld.Bootstrap - WELD-000106 Bean: Implicit Bean [javax.enterprise.inject.Instance] with qualifiers [@Default] 
2012-07-31 12:00:09,296 [main] DEBUG org.jboss.weld.Bootstrap - WELD-000106 Bean: Managed Bean [class de.telexiom.cardiom.DataReader] with qualifiers [@Any @Default @Named] 
2012-07-31 12:00:09,296 [main] DEBUG org.jboss.weld.Bootstrap - WELD-000106 Bean: Managed Bean [class de.telexiom.cardiom.SessionBean] with qualifiers [@Any @Default @Named] 
2012-07-31 12:00:09,296 [main] DEBUG org.jboss.weld.Bootstrap - WELD-000106 Bean: Managed Bean [class de.telexiom.cardiom.ConnectionTable] with qualifiers [@Any @Default @Named] 
2012-07-31 12:00:09,296 [main] DEBUG org.jboss.weld.Bootstrap - WELD-000106 Bean: org.jboss.weld.bean-flat-Built-in-org.jboss.weld.context.http.HttpConversationContext 
2012-07-31 12:00:09,296 [main] DEBUG org.jboss.weld.Bootstrap - WELD-000106 Bean: Managed Bean [class de.telexiom.cardiom.servlet.ClientServlet] with qualifiers [@Any @Default] 
2012-07-31 12:00:09,296 [main] DEBUG org.jboss.weld.Bootstrap - WELD-000106 Bean: org.jboss.weld.bean-flat-Built-in-org.jboss.weld.context.RequestContext 
2012-07-31 12:00:09,296 [main] DEBUG org.jboss.weld.Bootstrap - WELD-000106 Bean: org.jboss.weld.bean-flat-Built-in-javax.enterprise.context.Conversation 
2012-07-31 12:00:09,296 [main] DEBUG org.jboss.weld.Bootstrap - WELD-000106 Bean: Implicit Bean [javax.enterprise.event.Event] with qualifiers [@Default] 
2012-07-31 12:00:09,296 [main] DEBUG org.jboss.weld.Bootstrap - WELD-000106 Bean: Managed Bean [class de.telexiom.cardiom.CustomerListBean] with qualifiers [@Any @Default] 
2012-07-31 12:00:09,296 [main] DEBUG org.jboss.weld.Bootstrap - WELD-000106 Bean: Managed Bean [class de.telexiom.cardiom.Customer] with qualifiers [@Any @Default] 
2012-07-31 12:00:09,296 [main] DEBUG org.jboss.weld.Bootstrap - WELD-000106 Bean: Managed Bean [class de.telexiom.cardiom.servlet.StreamingServlet] with qualifiers [@Any @Default] 
2012-07-31 12:00:09,296 [main] DEBUG org.jboss.weld.Bootstrap - WELD-000106 Bean: org.jboss.weld.bean-flat-Built-in-org.jboss.weld.context.bound.BoundSessionContext 
2012-07-31 12:00:09,296 [main] DEBUG org.jboss.weld.Bootstrap - WELD-000106 Bean: Managed Bean [class de.telexiom.cardiom.SessionInfo] with qualifiers [@Any @Default] 
2012-07-31 12:00:09,312 [main] DEBUG org.jboss.weld.Reflection - WELD-000601 interface javax.inject.Named is missing @Target. Weld will use this annotation, however this may make the application unportable. 
2012-07-31 12:00:09,312 [main] DEBUG org.jboss.weld.Bootstrap - WELD-000100 Weld initialized. Validating beans 
... 

मैं सर्वलेट 3.0 एपीआई उपयोग करते हैं, StreamingServlet और ClientServlet एनोटेशन के माध्यम से कॉन्फ़िगर किया गया है।

@WebServlet(value = "/stream", initParams = @WebInitParam(name = "maxIdleTime", value = "0")) 
public class StreamingServlet extends HttpServlet 
{ 
    @Inject 
    private ConnectionTable connectionTable; 
    ... 

@WebServlet(value = "/push", loadOnStartup = 1, initParams = @WebInitParam(name = "maxIdleTime", value = "0")) 
public class ClientServlet extends WebSocketServlet 
{ 
    @Inject 
    private ConnectionTable connectionTable; 

    @Inject 
    private DataReader dataReader; 
    ... 

(नहीं) इंजेक्शन गुण कॉलिंग, मैं हमेशा NullPointerExceptions मिलती है: समस्या यह है कि आवेदन सेम scoped connectionTable और DataReader इंजेक्शन नहीं हैं। Web.xml के माध्यम से Servlets को कॉन्फ़िगर करते समय भी समस्या बनी हुई है। मेरे पास गलत काम करने के बारे में कोई और विचार नहीं है। जेटी और मेवेन के साथ संयोजन में सीडीआई के बारे में सभी लेख पढ़ना, मुझे आश्चर्य है कि क्या मैं इन इंजेक्शन समस्याओं में से एकमात्र हूं।

मेरे जेएसएफ बीन कक्षा उपयोगकर्ताबीन.जावा इंजेक्शन काम करता है, मुझे गुण कनेक्शन के लिए सेटटर विधियों का उपयोग करने की आवश्यकता नहीं हैटेबल और डेटा रीडर प्रारंभ करने के लिए।

DataReader निर्माता में नीचे उत्पादन बयानों का उपयोग करना (और यह भी ConnectionTable कक्षा में)

@ApplicationScoped 
public class DataReader implements Serializable 
{ 
    ... 
    public DataReader() 
    { 
     System.out.println("DataReader.DataReader(): " + this); 
    } 
    ... 

2 DataReader उदाहरण हैं जिनमें stdout पर दिखाने के बारे में चिंता:

... 
2012-07-31 14:03:04,843 [qtp5435124-17] DEBUG org.jboss.weld.JSF - WELD-000504 Resuming conversation with id null 
31.07.2012 14:03:05 org.apache.myfaces.util.ExternalSpecifications isUnifiedELAvailable 
INFO: MyFaces Unified EL support enabled 
DataReader.DataReader(): [email protected] 
ConnectionTable.ConnectionTable(): [email protected] 

2012-07-31 14:03:19,093 [qtp5435124-16] DEBUG org.jboss.weld.JSF - WELD-000504 Resuming conversation with id null 
DataReader.DataReader(): [email protected] 

पहले फॉर्म-आधारित प्रमाणीकरण के बाद 5 लाइनें मुद्रित की जाती हैं और पिछली 2 पंक्तियां तब दिखाई देती हैं जब मेरी जेएसएफ कार्रवाई पहली बार संभाली जाती है जहां इंजेक्शन डेटा रीडर संपत्ति का उपयोग किया जाता है। चूंकि सेम आवेदन स्कॉप्ड हैं, इसलिए मैं वास्तव में 2 कन्स्ट्रक्टर पास के बारे में सोचता हूं। लेकिन आवेदन के व्यवहार से मुझे लगता है कि इसमें कुछ भी गलत नहीं है।

मेरी आखिरी धारणा यह है कि सर्वलेट अलग-अलग, स्वतंत्र संदर्भ या कंटेनर या उस तरह कुछ में रहते हैं। क्योंकि 2 अन्य Servlets में FacesContext प्राप्त करना भी संभव नहीं है: FacesContext.getCurrentInstance()शून्य देता है। लेकिन मुझे नहीं पता कि यह किसी भी तरह से महत्वपूर्ण है या नहीं।

मुझे आशा है कि कोई भी समस्या का पता लगाने में मेरी सहायता कर सकता है। अग्रिम धन्यवाद

सेबस्टियन

+0

यह मेरा सरल जेट्टी CDI सेटिंग है । मैं चाहता हूं कि यह एक संकेत बन जाए। https://gist.github.com/3613597 – user1644660

उत्तर

6

हम्म ... आपके विन्यास बहुत मेरा के समान दिखता है। जो मुझे नहीं पता था वह 'जावा-वेब-एपी' मेवेन आर्टेफैक्ट था। मैंने इसे एक नई परियोजना और वॉयला में देखा ... यह काम करता है। तब मैंने जेएसएफ और वेबसॉकेट के लिए लगातार समर्थन जोड़ा और यह फिर से काम नहीं किया। अंत में, मुझे पता चला कि त्रुटि क्या थी: मैंने 'pty.xml' पर निर्भरता के रूप में 'जेटी-सर्वर' आर्टेफैक्ट जोड़ा लेकिन मैंने कोई दायरा नहीं लगाया। तो मैं गलत सर्वर libs या ऐसा कुछ उपयोग कर रहा था। अब 'प्रदत्त' स्कोप का उपयोग करते समय

<dependency> 
    <groupId>org.eclipse.jetty</groupId> 
    <artifactId>jetty-server</artifactId> 
    <version>${jetty.version}</version> 
    <scope>provided</scope> 
</dependency> 

सब कुछ काम करने लगता है और निर्भरता इंजेक्शन भी servlets में काम कर रहा है।

  1. आप जेट्टी Maven प्लगइन का <jettyEnvXml> तत्व स्थापित करने के लिए नहीं है:

    मैं अपने पोम के बारे में दो और प्रश्न हैं?

  2. फिर जेटी मेवेन प्लगइन में आप < वेबएप कॉन्फिग > तत्व का उपयोग करते हैं। मैं < वेब ऐप > तत्व का उपयोग कर रहा था क्योंकि यह ग्रहण कोड पूर्ण होने से जाना जाता है। क्या इन तत्वों में से एक दूसरे के पक्ष में बहिष्कृत है?

8

त्रुटि स्पष्ट है:

java.lang.NoClassDefFoundError: org/eclipse/jetty/servlet/ServletContextHandler$Decorator 

वेल्ड ऊपर जेट्टी सर्वर वर्ग नहीं मिल रहा। जेटी के क्लासलोडिंग तंत्र की वजह से यह वर्ग नहीं मिल सकता है। घाट के WebAppClassloader सर्वर कक्षाओं का एक डिफ़ॉल्ट सूची है कि यह भार नहीं होगा है: "। -org.eclipse.jetty.servlet" देख http://wiki.eclipse.org/Jetty/Reference/Jetty_Classloading

Server Classes 
-org.eclipse.jetty.continuation.    don't hide continuation classes 
-org.eclipse.jetty.jndi.      don't hide naming classes 
-org.eclipse.jetty.plus.jaas.    don't hide jaas classes 
-org.eclipse.jetty.websocket.    don't hide websocket extension 
-org.eclipse.jetty.servlet.DefaultServlet don't hide default servlet 
org.eclipse.jetty.       hide all other jetty classes 

जेट्टी इस वर्ग लोड करने के लिए, आप जोड़ने की जरूरत अनुमति देने के लिए Jetty-web.xml में सर्वर वर्ग सूची में।

<Configure class="org.eclipse.jetty.webapp.WebAppContext"> 
    <Call name="prependServerClass"><Arg>-org.eclipse.jetty.servlet.</Arg></Call> 
</Configure> 

या, निम्नलिखित विधि कॉल यदि आप एम्बेडेड घाट का उपयोग कर रहे हैं:

context.prependServerClass("-org.eclipse.jetty.servlet."); 
1

किसी @Roosevelt लाइ की सलाह लागू करने के लिए कोशिश कर रहा है के लिए, मैं विधि घाट-वेब में कहा जाता है का नाम बदल दिया। xml से <Call name="addServerClass"><Arg>-org.eclipse.jetty.servlet.</Arg></Call> क्योंकि मुझे NoSuchMethod अपवाद मिल रहा था।

इस रूप में इस सटीक त्रुटि संदेश के साथ docs here

जेट्टी (8.1.14.v20131031)

1

मेरे 3 दिन के अनुभव में संकेत दिया,

java.lang.NoClassDefFoundError: javax/enterprise/inject/spi/InjectionTarget

था है कि में cdi-api.jar फ़ाइल asinstall/glassfish/modules को cdi-api-1.2.jar नाम दिया गया था। नाम को cdi-api.jar पर बदल दिया गया और त्रुटि गायब हो गई।

चश्मा:

  • Glassfish 4.1 (एक ज़िप फ़ाइल के रूप में डाउनलोड),
  • jdk1.8.0_45,
  • ओएस एक्स 10.7.5