জার্সি ইনজেকশন ম্যানেজার ফ্যাক্টরির সাথে কাজ বন্ধ করে নি


161

টমক্যাট 8.5.11 এ আমার জার্সি এপিআই চালানোর সময় আমি ত্রুটিটি পেয়েছি যা আমার এপিআই বন্ধ করে দিচ্ছে:

জার্সি আরইএসটি সার্ভারের জন্য এইচটিটিপি স্থিতি 500 - সার্লেটলেট.init () ব্যতিক্রম ছুঁড়েছে

ব্যতিক্রম প্রতিবেদন টাইপ করুন

সার্লেট জার্সি আরইএসটি সার্ভিসের জন্য সার্লেটলেট.ইনিট () বার্তাটি ব্যতিক্রম ছুঁড়েছিল

বিবরণ সার্ভারটি একটি অভ্যন্তরীণ ত্রুটির মুখোমুখি হয়েছে যা এটি এই অনুরোধটি পূরণ করতে বাধা দেয়।

ব্যতিক্রম

javax.servlet.SerletException: সার্লেট জার্সি আরএসটি সার্ভিসের জন্য সার্ভালেট.init () ব্যতিক্রম org.apache.catalina.authenticator.AuthenticatorBase.invoke (প্রমাণীকরণকারীবেজ.জ্যাভা .৪৪৪) org.apache.catalina.valves.ErrorReportvalve.invokevervarve.invo এ ছুঁড়ে ফেলেছে। java: 79) org.apache.catalina.valves.AbstractAccessLogValve.invoke (AbstractAccessLogValve.java:624) org.apache.catalina.connector.CoyoteAdapter.service (coyoteAdapter.java:349) org.apchac.c. পরিষেবা (এইচটিপি 11 প্রসেসর। জাভা: 783) org.apache.coyote.Aststrap প্রসেসরলাইট.প্রসেস (অ্যাবস্ট্রাক্টপ্রসেসরলাইট.জাভা .66) org.apache.coyote.AbstractProtocol $ কানেকশনহ্যান্ডলারের প্রসেস (অ্যাবস্ট্রাক্টপ্রোটোকল। জাজা.এপি.চ্যাটাক.অ্যাটাক)। নেট.নিওএন্ডপয়েন্ট $ সকেটপ্রসেসর.ডোরুন (নিওএন্ডপয়েন্ট.জভা ১৪৪৪৪) org.apache.tomcat.util.net.SketProcessorBase।চালান (সকেটপ্রসেসরবেস.জভা .৪৯) java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java split142) java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:6। থ্রেডস.টাসকথ্রেড $ র‌্যাপিংআরনেবল.আরুন (টাস্কথ্রেড.জভা: )১) জাভা.লাং.ত্রেড.আরুন (থ্রেড.জভা: 4545৫)

মূল কারণ

java.lang.IllegalStateEception: ইনজেকশন ম্যানেজারফ্যাক্টরি পাওয়া যায় নি। org.glassfish.jersey.internal.inject.Injections.lookupInicationManagerFactory (ইনজেকশনস.জভা .97) org.glassfish.jersey.internal.inject.Injections.createInicationManager (ইনজেকশনস.জভা .89) org.glassfish.jersey.server. অ্যাপ্লিকেশন। অ্যাপ্লিকেশন। (অ্যাপ্লিকেশনহ্যান্ডলিরজাভা ২৮.২২) org.glassfish.jersey.servlet.Web কম্পোনেন্ট। (ওয়েবকম্পোনেন্ট.জভা ৩৩৩৫) org.glassfish.jersey.servlet.ServletContainer.init (সার্লেটলেট কনটেনার.জভা স্পেসার) org.glassfish.jersey.servlet। সার্ভলেটকন্টেইনর.ইনটি (সার্লেটলেট কনটেনার.জভা ৩70০) জাভাক্স.সার্লেট.জেনারিক সার্লেট ইন্ডিট (জেনেরিক সার্ভেল.জভা ১৫৫৮) org.apache.catalina.authenticator.AuthenticatorBase.invoke (প্রমাণীকরণকারীবেস.জাভা 74৪৪৪) org.apachevesal ache ত্রুটিআরপোর্টভালভ.ইনভোক (ত্রুটিআরপোর্টপোর্টভালভ.জভা: )৯) org.apache.catalina.valves।

অ্যাপ্লিকেশনটি গ্রেড সহ নিম্নলিখিত নির্ভরতাগুলির সাথে নির্মিত:

dependencies {
    compile (
        // REST
        "org.glassfish.jersey.containers:jersey-container-servlet:2.+",
        "javax.servlet:javax.servlet-api:4.+",
        // REST Token
        "org.bitbucket.b_c:jose4j:0.+",
        // MongoDB
        "org.hibernate.ogm:hibernate-ogm-bom:5.+",
        "org.hibernate.ogm:hibernate-ogm-infinispan:5.+",
        "org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.+",
        "org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.+",
        "org.jboss.narayana.jta:narayana-jta:5.+",
        "org.jboss:jboss-transaction-spi:7.+",
        "log4j:log4j:1.+",
        "org.hibernate.ogm:hibernate-ogm-mongodb:5.+",
        "org.bouncycastle:bcprov-jdk15on:1.+"
    ) }

এই ডাউনলোডগুলি jersey-common-2.26-b04.jarযার অন্তর্ভুক্ত অনুপস্থিত শ্রেণি রয়েছে /org/glassfish/jersey/internal/inject/InjectionManagerFactory। জারের ফাইলটি টমক্যাট ফোল্ডারের নীচে স্থাপন করা হয়WEB-INF/lib

এখানে কী ভুল হতে পারে? গ্রেড স্ক্রিপ্ট একই টমক্যাট সংস্করণ দিয়ে গত কয়েক মাসে কাজ করেছে।


1
আমি 19/05-তে জার্সির একটি নতুন সংস্করণ দেখতে পেয়েছি - এই সমস্যাটি কিনা তা পরীক্ষা করে দেখুন, আমার বর্তমানে একই সমস্যা রয়েছে
রোমান ক্যাসলার


এই টিউটোরিয়ালটি আমাকে এই সমস্যাটি সংশোধন করতে সহায়তা করেছে crunchify.com/…
জেসিবয়েড

উত্তর:


316

এই নির্ভরতা যুক্ত করুন:

<dependency>
    <groupId>org.glassfish.jersey.inject</groupId>
    <artifactId>jersey-hk2</artifactId>
    <version>2.28</version>
</dependency>

cf. https://stackoverflow.com/a/44536542/1070215

আপনার জার্সি নির্ভরতা সংস্করণগুলি মিশ্রিত না করার বিষয়টি নিশ্চিত করুন। এই উত্তরে সংস্করণটি "2.28" বলেছে, তবে আপনার অন্যান্য জার্সি নির্ভরতার সংস্করণগুলি যে কোনও সংস্করণ ব্যবহার করুন।


2
আমার জন্য ২.২26 প্রকাশের সংস্করণ নিয়ে কাজ করেছেন। প্রোডাকশন কোডে বিটা সংস্করণ ব্যবহার করতে চাননি।
সানগানাস

2
ধন্যবাদ, এটি সঠিক উত্তর। 2.26 সঙ্গে কাজ করে
মারিও

1
ব্যাখ্যা জন্য দেখুন
পল সামসোথা

2
এটি আমার জন্য ছিল - সংস্করণ 2.28।
absmiths

আমার জন্য বিজার কি ছিল তা ছিল এটি কাজ করছে এবং তারপরে এটি পোস্ট করা অনুসারে উপরের অন্তর্ভুক্তিটি না করা পর্যন্ত এটি কাজ করা বন্ধ করে দিয়েছে। যাইহোক, আপনাকে ধন্যবাদ। আমার মূল সংস্করণটি ছিল ২.৩০ এবং আমার ইনজেকশন সংস্করণটি উপরে যেমন ২.২৮।
বিজার

127

জার্সি ২.২26 এবং আরও পুরানো সংস্করণগুলির সাথে পিছনে সামঞ্জস্যপূর্ণ নয়। যে পিছনে কারণ বর্ণনা করা হয়েছে রিলিজ নোট :

দুর্ভাগ্যক্রমে, ২.২26 এ পিছনের দিকে অসম্পূর্ণ পরিবর্তনগুলি করা দরকার ছিল। কংক্রিটলি জার্সি-মালিকানাধর্মী রিঅ্যাকটিভ ক্লায়েন্ট এপিআই সম্পূর্ণরূপে চলে গেছে এবং এটি আর সমর্থন করা যায় না - এটি জ্যাকস-আরএস ২.১-এ প্রবর্তিত যাটার সাথে বিরোধিতা করে (এটি জার্সির জন্য "স্পোর্ট খেলার মাঠ হওয়ার" জন্য মূল্য) "।"।

জার্সি কোডে আরও একটি বড় পরিবর্তন হ'ল জার্সি কোরকে কোনও নির্দিষ্ট ইনজেকশন কাঠামোর থেকে আলাদা করার চেষ্টা করা। আপনার এখন যেমন হতে পারে, জার্সি ২.x হ'ল (খুব!) এইচকে 2 এর উপর বেশ শক্তভাবে নির্ভরশীল, যা কখনও কখনও সমস্যার কারণ হয় (উদাহরণস্বরূপ অন্যান্য ইনজেকশন পাত্রে চালিত হওয়ার সময়। জার্সি এখন এটি নিজের ইনজেকশন ফ্যাসাদকে সংজ্ঞায়িত করে , যা সঠিকভাবে প্রয়োগ করার পরে সমস্তগুলি প্রতিস্থাপন করে অভ্যন্তরীণ জার্সি ইনজেকশন।


আপাতত নিম্নলিখিতগুলির নির্ভরতা ব্যবহার করা উচিত:

ম্যাভেন

<dependency>
    <groupId>org.glassfish.jersey.inject</groupId>
    <artifactId>jersey-hk2</artifactId>
    <version>2.26</version>
</dependency>

Gradle

compile 'org.glassfish.jersey.core:jersey-common:2.26'
compile 'org.glassfish.jersey.inject:jersey-hk2:2.26'


11
দীর্ঘশ্বাস ত্যাগ করুন ... জার্সি যদি ব্রেকিং পরিবর্তন করে তবে সংস্করণটি 3.0
এড়িয়ে

1
@ ট্র্যাওরিজম আমার মনে হচ্ছে যে তারা জ্যাক্স-আরএস প্রধান সংস্করণটির সাথে সামঞ্জস্য রেখে বড় সংস্করণটি রাখতে চান। এটাই আমার কাছে বোধগম্য।
পল সামসোথা

এছাড়াও জার্সি-কমন কোনও প্রয়োজন হয় না ( ম্যানুয়ালি যোগ করতে)। এটি ইতিমধ্যে জার্সি-সার্ভারের মাধ্যমে টানা উচিত, যা জার্সি-ধারক-সার্লেট-কোর বা অন্য কোনও "প্রধান" জার্সি নির্ভরতা ব্যবহার করে আপনাকে টানতে হবে। প্রশ্নের মধ্যে থাকা ত্রুটি থেকে মুক্তি পেতে কেবল প্রয়োজনীয় নির্ভরতা হ'ল জার্সি-এইচকে 2 (বা জার্সি-সিডি 2-সে, যেমন এখানে উল্লেখ করা হয়েছে )।
পল সামসোথা

@ লুইসএফ, এটি অপ্রয়োজনীয় জার্সি-সাধারণ নির্ভরতা অন্তর্ভুক্ত না করা হলে এটি সঠিক হবে। এটি ইতিমধ্যে একটি ট্রানজিটিভ নির্ভরতা।
পল সামসোথা

47

এখানে কারণ আছে। জার্সি ২.২26 থেকে শুরু করে জার্সি একটি হার্ড নির্ভরতা হিসাবে এইচকে ২ কে সরিয়ে ফেলেছে । এটি নির্ভরশীলতা ইঞ্জেকশন সরবরাহকারীর পক্ষে InjectionManagerএবং হিসাবে আকারে একটি এসপিআই তৈরি করেছে InjectionManagerFactory। সুতরাং জার্সি চালানোর জন্য, আমাদের একটি বাস্তবায়ন করতে হবে InjectionManagerFactoryএটির দুটি বাস্তবায়ন রয়েছে, যা এইচকে 2 এবং সিডিআইয়ের জন্য । এইচকে 2 নির্ভরতা হ'ল jersey-hk2অন্যরা কথা বলছে।

<dependency>
    <groupId>org.glassfish.jersey.inject</groupId>
    <artifactId>jersey-hk2</artifactId>
    <version>2.26</version>
</dependency>

সিডিআই নির্ভরতা হয়

<dependency>
    <groupId>org.glassfish.jersey.inject</groupId>
    <artifactId>jersey-cdi2-se</artifactId>
    <version>2.26</version>
</dependency>

এই (জার্সি-সিডি 2-সে) কেবলমাত্র এসই পরিবেশের জন্য ব্যবহার করা উচিত নয় EE পরিবেশের জন্য।

অন্যদের নিজস্ব নির্ভরতা ইনজেকশন কাঠামো সরবরাহ করতে মঞ্জুরি দেওয়ার জন্য জার্সি এই পরিবর্তন করেছে। InjectionManagerঅন্যরা গাইসের জন্য একটি বাস্তবায়নের চেষ্টা করেছে, যদিও তাদের অন্য কোনও বাস্তবায়নের কোনও পরিকল্পনা নেই ।


1
নোট করুন যে সিডিআই (জার্সি-সিডি 2-সে) ব্যবহারের জন্য মেটা-আইএনএফ-তে একটি বিন.এক্সএমএল কনফিগারেশন প্রয়োজন। অন্যথায় নিম্নলিখিত ব্যতিক্রম নিক্ষেপ করা হবে: java.lang.IllegalStateException: WELD-ENV-000016: META-INF-তে বিস.এক্সএমএল ফাইল অনুপস্থিত
মার্কো মন্টেল

এই উত্তরটি আমাকে এতগুলি অসঙ্গতি দিয়ে হেঁটে নিয়েছে, জার্সি-সিডি 2-সে সম্পর্কে স্পষ্ট করার জন্য +1 কেবলমাত্র এসই ব্যবহার করা উচিত
ড্যানিয়েল আরেচিগা

11

কোন ডিআই জার্সিতে স্টাফ ইনজেক্ট করতে চয়ন করুন:

বসন্ত 4:

<dependency>
  <groupId>org.glassfish.jersey.ext</groupId>
  <artifactId>jersey-spring4</artifactId>
</dependency>

বসন্ত 3:

<dependency>
  <groupId>org.glassfish.jersey.ext</groupId>
  <artifactId>jersey-spring3</artifactId>
</dependency>

HK2:

<dependency>
    <groupId>org.glassfish.jersey.inject</groupId>
    <artifactId>jersey-hk2</artifactId>
</dependency>

2
এটা এত সহজ না. আপনি কেবল বসন্তের জন্য এইচকে 2 স্যুইচআউট করতে পারবেন না। jersey-springইন্টিগ্রেশন এখনও ফণা অধীন একটি HK2 সেতু ব্যবহার এটি কাজ করা হয়।
পল সামসোথা

2

আমি এটি সমাধান করার একমাত্র উপায় হ'ল:

org.glassfish.jersey.core জার্সি-সার্ভার {ers জার্সি-2-সংস্করণ}

<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet</artifactId>
    <version>${jersey-2-version}</version>
</dependency>

<dependency>
    <groupId>org.glassfish.jersey.inject</groupId>
    <artifactId>jersey-hk2</artifactId>
    <version>${jersey-2-version}</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.glassfish.jersey.core/jersey-common -->
<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-common</artifactId>
    <version>${jersey-2-version}</version>
</dependency>

<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet-core</artifactId>
    <version>${jersey-2-version}</version>
</dependency>

সুতরাং, কেবলমাত্র আমি যুক্ত করলে jersey-container-servletএবং jersey-hk2এটি ত্রুটি ছাড়াই চলতে পারে


0

আমি যতদূর দেখতে পাচ্ছি নির্ভরতাগুলি ২.২26-বি0৩ এবং ২.২26-বি0৪ (এইচকে ২ কে সংকলন থেকে টেস্টকম্পাইলে স্থানান্তরিত করা হয়েছিল) এর মধ্যে বদলে গেছে ... জার্সি নির্ভরতাগুলির মধ্যে কিছু পরিবর্তন হতে পারে যা এখনও সম্পূর্ণ হয়নি (বা যার ফলে বাড়ে একটি বাগ).

তবে, এখনই সহজ সমাধানটি হ'ল একটি পুরানো সংস্করণ :-)


-2

এখানে নতুন নির্ভরতা (আগস্ট 2017)

    <!-- https://mvnrepository.com/artifact/org.glassfish.jersey.core/jersey-common -->
<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-common</artifactId>
    <version>2.0-m03</version>
</dependency>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.