2016-09-09 15 views
0

私はJavaサーバーとしてGlassfish 4.1.1を使用しています。 @Pathアノテーションを持つJAX-RSクラスの@Stateless Beanを簡単に@Injectしようとしています。ここで私は取得しています例外である:ここではGlassFish 4.1.1:Java EE 7で@Statelessを@InjectできないJAX-RSアプリケーション

javax.servlet.ServletException: A MultiException has 1 exceptions. They are: 
1. org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at SystemInjecteeImpl(requiredType=MongoCollectionStore,parent=DemoJaxrsApp,qualifiers={},position=-1,optional=false,self=false,unqualified=null,310751270) 

は私のJAX-RSの設定です:

import javax.ws.rs.ApplicationPath; 
import javax.ws.rs.core.Application; 

@ApplicationPath("/rest") 
public class JaxrsAppConfig extends Application { 

} 

これは私のJAX-RSリソースクラスがどのように見えるかです:

@Path("/tn-collection") 
@Produces(MediaType.APPLICATION_JSON) 
@Consumes(MediaType.APPLICATION_JSON) 
public class DemoJaxrsApp { 

    @Inject 
    MongoCollectionStore mongoCollectionStore; 

    @POST 
    public List<CollectionTO> getColl() { 
     return mongoCollectionStore.findAll(); 
    } 
} 

I 2つの依存関係のみを使用しています:

<dependency> 
     <groupId>org.mongodb</groupId> 
     <artifactId>mongo-java-driver</artifactId> 
     <version>3.3.0</version> 
    </dependency> 

    <dependency> 
     <groupId>com.google.code.gson</groupId> 
     <artifactId>gson</artifactId> 
     <version>2.3.1</version> 
    </dependency> 

It依存関係の問題ではありません。 Java EE 7には設定ファイルがないため、xmlファイル(Netbeans 8.1で生成されたPOM.xmlおよびnb-configuration.xml以外)は使用していません。私は何がうまくいかないのか分かりません。

誰でもこのお手伝いをしてください。UnsatisfiedDependencyException問題がありますか?

UPDATE:

ここでは私のMongoCollectionStore Javaクラスです:

@Stateless 
public class MongoCollectionStore { 

    public List<CollectionTO> findAll(MongoConfig mongoConfig) { 
     List<CollectionTO> tuples = new ArrayList<>(); 
     Gson gson = new Gson(); 

     MongoClient mongoClient = new MongoClient("127.0.0.1", 27017); 
     MongoDatabase mongoDB = mongoClient.getDatabase("Demo"); 
     MongoCollection<Document> coll = mongoDB.getCollection("DemoCollection"); 

     try(MongoCursor<Document> cursor = coll.find().iterator()) { 
      while (cursor.hasNext()) { 
       String jsonDoc = cursor.next().toJson(); 
       CollectionTO tuple = gson.fromJson(jsonDoc, CollectionTO.class); 

       tuples.add(tuple); 
      } 
     } 

     return tuples; 
    } 
} 
+0

'MongoCollectionStore'クラスとは何ですか?これは存在しません[APIドキュメント](http://api.mongodb.com/java/3.3/)。あなたはこれのためのチュートリアルに従った?もしそうなら、それはあなたが逃した余分なクラスを実装したチュートリアルかもしれない? – Mike

+0

私が作成した '@ Stateless'ビーンズです。それも含めてみましょう。ところで、Netbeansの「@ Injectededed」フィールドの前に「I」の記号(インジェクションポイントを示しています)が表示されています。つまり、実装されています。 –

+0

'beans.xml'をプロジェクトに追加しましたか? –

答えて

0

私は、インターネット上でこの問題を見やCDI Beanが唯一の別のCDI Beanに注入することができることが判明しました。両方ともコンテナで管理する必要があります。だから、私はDemoJaxrsApp@RequestScopedをCDI Beanにするために作った。 Googleからのここに来る人たちのために

、オリジナル(およびより精巧な)答えはここで見つけることができます:私はまだ知らない Inject an EJB into JAX-RS (RESTful service)

ことの一つは、そのI @Injectは私の@RequestScopedクラス内@StatelessリソースエドときそのリソースはEJBでしたか?それとも、CDI Beanですか?それはまったく別の質問ですね。

関連する問題