2009-03-24 13 views
6

Belirli bir Java paketi/kütüphanesinden yararlanmak için Java'da bir Thrift sunucusu yazdım ama bir java programcısı değilim.Kavanoz başlangıcında java sınıfları/kütüphaneleri önyükleniyor mu?

Problem; Sunucuya ilk RPC çağrısı için bir zaman aşımı görüyorum. Alt talep talepleri herhangi bir sorun olmaksızın ve sadece belirli (ancak zorunlu) dillerde yazılmış etki eden istemciler tarafından yürütülür.

Şu anki düşüncem, sunucunun yanıtta zaman aşımına uğramasıdır, çünkü ilk çağrıda, istek için gereken tüm kitaplıkları yüklemesi gerekir. Bazı Thrift istemci uygulamaları, zaman aşımını diğerlerinden daha iyi idare etmek zorundadır;

İlk adımda gecikme olmadığından .jar dosyasını ilk başlattığımda kullandığım kütüphaneleri önceden yüklemek için java'da bir yol var mı?

özüm: Sorunum (ve daha ileri sürülenler), müşteri (ler) den zaman aşımını arttırarak sorunu çözdüm. Bununla birlikte, birlikte çalışılan şeylere yardımcı olmak için static/Class.forName yanıtını da uygulamıştım. Teşekkürler!

+0

Bazı varolan [java sınıfı önyükleyicinin] bir göz atmak isteyebilirsiniz (https://github.com gibi bir şey olabilir/jermainexu/ClassPreloader). – StarPinkER

cevap

3

Sunucu yayılmadan önce bir yük çalıştırabilirsiniz. Sunucu, sınıflar ve ortamın nasıl yüklendiğini belirtmediniz, ancak sınıf yüklendiğinde bir sınıf statik başlatıcısının çalışacağı gerçeğinden faydalanabilirsiniz. Eğer bir "ana" yöntemiyle kaçıyorsun yüzden, eğer senin sınıf bu

public class Foo { 

    static { 
    //this will be run when the class is loaded 
    try { Class.forName("fully.qualified.class.name.that.i.want.to.Load"); } 
    catch ... 
    } 

    public static void main (string args[]) 
    { 
    //run my server... 
    } 
} 
+0

Bu çözüm, kırılgandır. Daha iyi bir çözüm, tüm gerekli sınıfları yükleyecek elden önce kukla bir eylem yapmaktır. SendRequest ("/ dev/null") gibi bir şey iyi olurdu. Ama temel fikir tamamdır. –

2

Denemek istediğiniz bir şey, Java sunucusunun içinde basit bir istemci yazmaktır. Bu istemci hiçbir şey yapmaz, ancak başlatıldığında sınıfları zorlayarak başlatıldığında sunucuda bazı yöntemleri çağırır. Bu küçük istemcinin bir sonuç almasından (veya geri çağırmasından) sonra, sunucuyu "dış dünya tarafından erişilebilir" duruma sokar.

0

Sunucuyu açmadan hemen önce bağlantı kurmanızı öneririm. Bu, (çoğu) ilgili tembel başlatma işleminin gerçekleştirilmesini sağlayacaktır.