2010-09-27 25 views
12

Özel sınıf yükleyicilerle kendimi uygulamaya çalışıyorum ve bazı sorularım var. JVM'yi özel sınıf yükleyicimi global olarak kullanması için bir yol var mı? Örneğin, Tomcat 6 altında çalışan küçük bir uygulama yazdım. Sunucu uygulaması kapsayıcı tarafından yönetiliyor, sınıf yükleyicimi nereye koymalıyım? Buna ek olarak, webapp bazı 3. parti kavanozları kullanıyor, bu kavanozların sınıf yüklerini kontrol edebilir miyim?Özel sınıf yükleyicim varsayılan olarak nasıl ayarlanır?

Tek başına uygulama durumunda yukarıdaki yanıtlar farklı mıdır?

Teşekkürler!

cevap

12

Bir JVM bağımsız değişken olarak sistem varsayılan sınıf yükleyicisi ayarlayabilirsiniz: Tomcat bir java uygulaması olarak başladıkça, %TOMCAT_HOME%\bin\run.bat veya $TOMCAT_HOME/bin/run.sh yürütülebilir en çok bu parametreyi ayarlayabilirsiniz

java -Djava.system.class.loader 
    =com.test.YourCustomClassLoader com.test.YourMainClass 

. tamamlanması için

Düzenleme: Eğer de Sistemi sınıf yükleyici olarak classloader ayarlarsanız, Tomcat bileşen sınıfları, farklı kütüphaneler ve kendi sınıfları yüklemek için kullanılacak . Sınıf yükleyicinizin yalnızca uygulama sınıflarınız için kullanılmasını istiyorsanız (kitaplıklar vb.), Içeriğiniz için bir Loader öğesi yapılandırmalısınız. Yükleyici öğesi, context.xml dosyasında tanımlanabilen Context öğenizin içinde tanımlanmalıdır. fazla bilgi:

+0

Bazı nedenlerden dolayı java.lang.Error: java.lang.IllegalStateException: recursive invocation. Yaptığım şey buydu: ClassLoader sınıflandırma, bir ClassLoader parametresi olarak c'tor sağlayan, -Djava.system.class.loader kullanarak yapılandırdı ve ... Boom! VM'nin başlatılması sırasında hata oluştu :-(Herhangi bir şeyi özledim mi? – Seffy

+0

Kodunuzda bir görüş belirtmeden, emin olamadım. –

+0

Elimde küçük bir Ana Uygulama ile test ettim ve tamam çalışıyor. –

İlgili konular