2012-05-14 6 views
10

के साथ कैसे एकीकृत कर सकता हूं मैं अपाचे टॉमई सर्वर पर चलाने के लिए जर्सी जेएक्स-आरएस का उपयोग करने वाले कोड को अपग्रेड कर रहा हूं। दुर्भाग्य से जब मैं टॉमई के साथ जर्सी का उपयोग करने की कोशिश करता हूं तो यह त्रुटियों को फेंक देता है।मैं जर्सी को टॉमई/ओपनईजेबी

मैं ग्रहण का उपयोग कर रहा हूं और जेएक्स-आरएस परियोजना पहलू चालू है। यह जर्सी पुस्तकालय को इंगित करता है। मैंने किसी भी लाभ के लिए समस्या को हल करने की कोशिश करने के लिए जर्सी पुस्तकालयों को/lib/निर्देशिका में भी स्थानांतरित कर दिया है। सर्वर ने निम्न त्रुटि फेंकता है:

May 14, 2012 6:26:44 AM com.sun.jersey.api.core.ScanningResourceConfig logClasses 
INFO: Provider classes found: 
class org.codehaus.jackson.jaxrs.JsonParseExceptionMapper 
class org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider 
class org.codehaus.jackson.jaxrs.JsonMappingExceptionMapper 
class org.codehaus.jackson.jaxrs.JacksonJsonProvider 
May 14, 2012 6:26:44 AM org.apache.catalina.core.ApplicationContext log 
SEVERE: StandardWrapper.Throwable 
java.lang.RuntimeException: javax.naming.NameNotFoundException: Name [com] is not bound in this Context. Unable to find [com]. 
at com.sun.jersey.server.impl.cdi.CDIExtension.getInitializedExtension(CDIExtension.java:177) 
at com.sun.jersey.server.impl.cdi.CDIComponentProviderFactory.<init>(CDIComponentProviderFactory.java:92) 
at com.sun.jersey.server.impl.cdi.CDIComponentProviderFactoryInitializer.initialize(CDIComponentProviderFactoryInitializer.java:75) 
at com.sun.jersey.spi.container.servlet.WebComponent.configure(WebComponent.java:576) 
at com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.configure(ServletContainer.java:311) 
at com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:608) 
at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:210) 
at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:373) 
at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:556) 
at javax.servlet.GenericServlet.init(GenericServlet.java:160) 
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1266) 
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1185) 
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1080) 
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5015) 
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5302) 
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1566) 
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1556) 
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source) 
at java.util.concurrent.FutureTask.run(Unknown Source) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
at java.lang.Thread.run(Unknown Source) 
Caused by: javax.naming.NameNotFoundException: Name [com] is not bound in this Context. Unable to find [com]. 
at org.apache.naming.NamingContext.lookup(NamingContext.java:820) 
at org.apache.naming.NamingContext.lookup(NamingContext.java:168) 
at org.apache.naming.SelectorContext.lookup(SelectorContext.java:158) 
at javax.naming.InitialContext.lookup(Unknown Source) 
at com.sun.jersey.server.impl.cdi.CDIExtension$2.stepInto(CDIExtension.java:290) 
at com.sun.jersey.server.impl.cdi.CDIExtension.diveIntoJNDIContext(CDIExtension.java:267) 
at com.sun.jersey.server.impl.cdi.CDIExtension.lookupJerseyConfigJNDIContext(CDIExtension.java:287) 
at com.sun.jersey.server.impl.cdi.CDIExtension.getInitializedExtension(CDIExtension.java:175) 
... 22 more 

web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> 
    <display-name>tomeeTest3</display-name> 

    <servlet> 
    <description>JAX-RS Tools Generated - Do not modify</description> 
    <servlet-name>JAX-RS Servlet</servlet-name> 
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>JAX-RS Servlet</servlet-name> 
    <url-pattern>/jaxrs/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

किसी को भी मैं कैसे यह काम कर सकता है पता है? मैं टॉमई + जैक्स-आरएस सर्वर का उपयोग करने पर भी विचार करता हूं, लेकिन यह जैक्सन एनोटेशन को पहचानने के लिए प्रतीत नहीं होता है।

संपादित करें: मुझे लगता है कि मुद्दा यह है कि ओपनईजेबी सीडीआई जर्सी के साथ आने वाले सीडीआई के साथ संघर्ष कर रहा है। कैसे इसे ठीक करूँ मेरे पास कोई विचार नहीं है?

+0

क्या आप अपनी वेब.एक्सएमएल फ़ाइल सामग्री पोस्ट कर सकते हैं ? –

+0

web.xml पोस्ट किया गया। – Greg

+0

ग्रेग - क्या आपने कभी इस समस्या को हल किया है? मुझे लगता है कि एक ही समस्या है। – Brian

उत्तर

10

जी उठने! बस अगर कोई इस समस्या में अभी भी चल रहा है।

मेरे पास एक जर्सी एप्लिकेशन था जो टॉमकैट पेची में उत्सुक था और इस तरह से विस्फोट हुआ जब मैंने इसे टॉमई ले जाया। समस्या यह है कि टॉमईई के पास पहले से ही अपने स्वयं के जेएक्स-आरएस कार्यान्वयन (इस लेखन के समय टोमी-जैक्सर्स-1.5.0) है, जो जर्सी-बंडल जार के साथ संघर्ष करता है।

सभी मैं इस समस्या से छुटकारा पाने के करना पड़ा जर्सी जार को हटाने और web.xml में सर्वलेट घोषणा और मानचित्रण बाहर टिप्पणी

यह एक पुनः आरंभ, और वाइला दें था! बस याद रखें कि यूआरएल थोड़ा अलग होगा। उदाहरण के लिए, एक डिफ़ॉल्ट जर्सी इंस्टॉल पर आपके पास http://localhost/rest/represent/me हो सकता है और जब आप उसी ऐप को टॉमई में ले जाते हैं तो यह http://localhost/represent/me

यदि आप ग्रहण की तरह आईडीई का उपयोग कर रहे हैं तो यह आपको नहीं मिल सकता है जार, बस प्रोजेक्ट गुणों में जाएं और लक्ष्य रनटाइम को टॉमईई पर सेट करें (आपको एक सर्वर इंस्टेंस जोड़ना होगा) और आपको जाने के लिए अच्छा होना चाहिए।

साझा करें और आनंद लें।

+0

क्या कुछ लोग पुष्टि कर सकते हैं कि यह काम करता है?यदि वे करते हैं तो मैं इसे उत्तर के रूप में चिह्नित करूंगा। – Greg

+1

मैंने इस फिक्स को सत्यापित किया। निष्पादन के लिए मैंने युद्ध फ़ाइल से पुस्तकालयों को हटा दिया और – Brian

+1

तैनात किया यह केवल वैध हो सकता है, यदि आप टॉमई के जेएक्स-आरएस संस्करण पर जर्सी का उपयोग करने का प्रयास करते हैं। वेबप्रोफाइल संस्करण में कोई जेएक्स-आरएस शामिल नहीं है, इसलिए हमें वहां एक अलग समाधान की आवश्यकता है। – Jack

0

आप सर्वलेट को पैरामीटर के रूप प्रदाता वर्गों के पैकेज जोड़ना चाहिए:

<servlet> 
<servlet-name>ServletAdaptor</servlet-name> 
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
    <init-param> 
    <param-name>com.sun.jersey.config.property.packages</param-name> 
    <param-value>your.package.name</param-value> 
    </init-param> 
<load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
<servlet-name>ServletAdaptor</servlet-name> 
<url-pattern>/jaxrs/*</url-pattern> 
</servlet-mapping> 

आपका प्रदाता कक्षाएं इस तरह दिखना चाहिए:

package your.package.name; 

@Path("/test") 
public class StatsServlet { 
    @PUT 
    @Produces(MediaType.TEXT_HTML) 
    public String doPutHtml() { 
     return "Hello!"; 
    } 
} 
+0

का उपयोग न करने का फैसला किया है, हालांकि एक अच्छा प्रयास है, फिर भी यह वही त्रुटि फेंक रहा है। – Greg

8

मैं भी इस सटीक अपवाद के साथ इस समस्या में भाग गया हूं, और दुर्भाग्य से grauwulf का जवाब मेरे लिए काम नहीं किया।

मेरे मामले में, मेरे पास टोमे + 1.5.2, जर्सी 1.1x है, और मैं वसंत 3.x का भी उपयोग कर रहा हूं।

ठीक वास्तव में काफी आसान था:

  1. Tomee system.properties फ़ाइल ({tomee}/conf/system.properties डिफ़ॉल्ट रूप से) का पता लगाएं।
  2. वहां से com.sun.jersey.server.impl.cdi.lookupExtensionInBeanManager=true

जोड़ें, यह सिर्फ मेरे लिए काम किया।क्रेडिट देने के लिए जहां यह देय है, मैंने इसे blog post पर पाया।

रुचि का

, मैं अपने युद्ध की निर्भरता के साथ मेरी {tomee}/lib फ़ोल्डर को अव्यवस्थित से बचने के लिए पसंद करते हैं, तो मैं भी पाया है कि आप आसानी से {tomee}/conf/tomee.xml को संशोधित करने, और (रूट <tomee /> नोड के अंदर) निम्नलिखित नोड जोड़कर एक अतिरिक्त lib जोड़ सकते हैं :

<tomee> 
    <Service 
    id="extra-libs-enricher" 
    class-name="org.apache.openejb.assembler.classic.enricher.AdditionalLibClassLoaderEnricherObserver"> 
     path = /path/to/your/libs 
    </Service> 
</tomee> 
कि Service, जिसका नाम मनमाना है साथ

, आप नहीं एक path पारित कर सकते हैं, जिस पर यह "additional-lib" को चूक इशारा करते हैं। पारित पथ डिफ़ॉल्ट रूप से उपयोग किया जाएगा, लेकिन यदि यह निर्देशिका नहीं है, तो यह एक सिस्टम प्रॉपर्टी पर वापस आ जाएगा, जिसे system.properties फ़ाइल में जोड़ा जा सकता है। सिस्टम प्रॉपर्टी है: openejb.enricher.additional-lib

openejb.enricher.additional-lib=/fallback/path/to/your/libs 

इस प्रणाली संपत्ति केवल पथ Service को पारित कर दिया है, तो चेक किया जाता है, या उसके डिफ़ॉल्ट मान, काम नहीं करता है और केवल एक Service अगर tomee.xml फाइल में रखा गया है। इसका id अप्रासंगिक है।

+0

मैं अपने मैवेन 3 प्रोजेक्ट में जर्सी 1.11 का उपयोग कर रहा हूं और इसलिए मेरे पैक किए गए युद्ध में। टॉमई 1.5.2 वेबप्रोफाइल का उपयोग करके मैं com.sun.jersey.server.impl.cdi.lookupExtensionInBeanManager = मेरे tomee system.properties को सच जोड़ सकता था और यह अभी काम करता था। धन्यवाद! आपके द्वारा लिंक किए गए ब्लॉग पोस्ट की शर्मिंदगी इस बारे में अधिक जानकारी प्रदान नहीं करती है कि यह कैसे पाया गया और यह कैसे काम करता है। मुझे लगता है कि संपत्ति के प्रकार खुद के लिए बोलता है। – Justin

+0

यह मेरे लिए धन्यवाद, धन्यवाद – Biscuit128

1

बस इस समस्या के साथ आया: टॉमई + जर्सी ... समस्या यह थी कि मैं ग्रहण में "टॉमईई" का उपयोग कर रहा था "वर्कस्पेस मेटाडाटा का उपयोग करें" ... और किसी भी तरह जब इस तरह कॉन्फ़िगर किया गया तो सर्वर कॉन्फ़िगरेशन टॉमईई के कई विवरण याद करता है configs (अर्थात् conf/system.properties - जहां हम घोषणा करते हैं: "com.sun.jersey.server.impl.cdi.lookupExtensionInBeanManager = true")। जब मैंने इसे "टॉमकैट इंस्टॉलेशन का उपयोग करें" में बदल दिया, तो समस्या दूर हो गई। आप के रूप में निम्नलिखित छवि में देखा ग्रहण में TomEE सर्वर डबल-क्लिक करके इस कॉन्फ़िगर कर सकते हैं और "उपयोग बिलाव स्थापना" का चयन करें,:

enter image description here

0

मैं इसे पता लगाया नीचे और pickypg सही है। मैं टोमी-मैवेन-प्लगइन का उपयोग करके टॉमई 1.5.2 के साथ काम करने में सक्षम था। मुझे बिल्कुल पता नहीं चला है, लेकिन यह समस्या जर्सी के आंकड़ों के बाद होती है जब जावा में एक बीन प्रबंधक होता है: comp/BeanManager और संदर्भ को देखने का प्रयास करता है।

<plugin> 
    <groupId>org.apache.openejb.maven</groupId> 
    <artifactId>tomee-maven-plugin</artifactId> 
    <version>1.0.1</version> 
    <configuration> 
     <tomeeHttpPort>${http.port}</tomeeHttpPort> 
     <tomeeVersion>1.5.2</tomeeVersion> 
     <args>-Dcom.sun.jersey.server.impl.cdi.lookupExtensionInBeanManager=true</args> 
    </configuration> 
</plugin> 

यहां जर्सी के एक्सार्ट हैं जहां यह इस मुद्दे पर चल रहा है।

public CDIComponentProviderFactory(Object bm, ResourceConfig rc, WebApplication wa) { 
     beanManager = (BeanManager)bm; 
     // work around proxying bug in Weld 
     if (CDIExtension.lookupExtensionInBeanManager) { 
      extension = Utils.getInstance(beanManager, CDIExtension.class); 
     } 
     else { 
      // NOTE THIS IS WHAT IS BEING EXECUTED WHEN FLAG IS SET TO FALSE 
      extension = CDIExtension.getInitializedExtension(); 
     } 
     extension.setWebApplication(wa); 
     extension.setResourceConfig(rc); 
    } 

/* 
* Returns the instance of CDIExtension that was initialized previously in this same thread, if any. 
*/ 
public static CDIExtension getInitializedExtension() { 
    try { 
     InitialContext ic = InitialContextHelper.getInitialContext(); 
     if (ic == null) { 
      throw new RuntimeException(); 
     } 
     return (CDIExtension)lookupJerseyConfigJNDIContext(ic).lookup(JNDI_CDIEXTENSION_NAME); 
    } catch (NamingException ex) { 
     throw new RuntimeException(ex); 
    } 
} 

...

/* 
* Setting this system property to "true" will force use of the BeanManager to look up the bean for the active CDIExtension, 
* rather than going through a thread local. 
*/ 
private static final String LOOKUP_EXTENSION_IN_BEAN_MANAGER_SYSTEM_PROPERTY = "com.sun.jersey.server.impl.cdi.lookupExtensionInBeanManager"; 

public static final boolean lookupExtensionInBeanManager = getLookupExtensionInBeanManager(); 

private static boolean getLookupExtensionInBeanManager() { 
    return Boolean.parseBoolean(System.getProperty(LOOKUP_EXTENSION_IN_BEAN_MANAGER_SYSTEM_PROPERTY, "false")); 
} 
0

मैं ऐसा करने में सक्षम था और है कि मैं क्या किया अगर कोई समाधान की तलाश में है

यह मैं क्या किया: * मैं उपयोग कर रहा हूँ नेटबीन 7.3.1 * मैंने टोमे \ conf \ system.properties -> com.sun.jersey.server.impl.cdi.lookupExtensionInBeanManager = true * में निम्नलिखित पंक्तियां जोड़ दीं * मैंने नेटबीन से जर्सी पुस्तकालयों को जोड़ा जो कि 01 है* ध्यान दें कि पुस्तकालय मेरे ऐप्स के वेब-आईएनएफ \ lib में हैं * अतिरिक्त जानकारी मैं जेएसएफ के लिए मोज़रारा का उपयोग करने में भी सक्षम था अगर कोई दिलचस्पी लेता है तो मैं आपको बता सकता हूं कि

संबंधित मुद्दे