2013-08-02 9 views
8

Biz topoloji oluştururken bir nesne geçmeleri gerekiyor. Nesneyi TopplogyContext üzerinden geçmek mümkün mü ve evet ise, nasıl? Veya bir topoloji gönderirken bir cismi iletmek için başka bir yol var mı, teslim etmeden önce cıvatanın üzerinde bir tutamak/kontrol sahibi olabilir mi?Topoloji içeriğinden bir nesneyi fırtına kullanırken bir cıvataya nasıl erişebilirim? cıvata bu nesne dayalı bazı ek işleme olduğunu erişebilir ve bunu böylece

Hepimiz cıvataları erişebilir ve bu topoloji için tüm cıvataların içinde yapıcı bir uygulamasını zorlamak için gerek yoktur, böylece bir metin yoluyla nesneyi geçmesi gerekiyor. Yani, aynı API yapmak için herhangi bir API olup olmadığını bilmek ister misiniz?

cevap

11

Sen geçebilir nesneleri serileştirilebilir olması koşuluyla, fırtına yapılandırma haritasındaki nesne. Topolojideki herhangi bir oluğun veya cıvatanın hazırlık() yönteminde bu nesneyi alabilirsiniz.

Bu topoloji sunulmasına ilişkin yapılandırma haritasına da nesneyi koymak nasıl:

prepare(Map stormConf,TopologyContext context) { 

    MyObject myPreciousObject = (MyObject) stormConf.get("my.object"); 

} 
3

Ne demek istediğini çok emin değilim, ama cıvata sınıfı daima başlatma üzerinde bir parametre alabilir ve nesne ile size topoloji oluştururken geçmek istediklerini başlatabilir.

TopologyBuilder builder = new TopologyBuilder(); 
builder.setSpout("spout", new mySpout()); 
builder.setBolt("bolt", new myBolt1(myObj)).shuffleGrouping("spout"); 

Ve cıvata yapıcı argüman olarak bu nesneyi geçirebilir.

Düzenleme: Bir yapıcısına açıkça geçmeden erişilebilir olmasını verileri isterseniz, yine her zaman bu veri ve cıvata erişime bunu saklamak için statik bir sınıf yapabilirsiniz

+0

:

Config conf = new Config(); MyObject myPreciousObject = new MyObject("precious"); conf.put("my.object",myPreciousObject); StormSubmitter.submitTopology(args[0], conf, builder.createTopology()); 

Bu, bir cıvata veya emzikli hazırlamak() yönteminde geri almak nasıl Bu güçlerden biri cıvata implementation..it türlü çözmek yaptı iken bana "myObj" o topoloji bina için tüm cıvataların hayata geçirilecek aynı nesne ile kurucusunu kullanmak ... Biz sorunsuz cıvatasını "myObj" geçmesi gerekiyor tüm cıvatalar için topolojide ... – user1996684

+2

@ user1996684 Açıkça bir kurucuya aktarmadan erişilebilir olmalı, bu verileri saklamak ve cıvata nesnelerine erişmek için daima bir statik sınıf yapabilirsiniz. – Munim