2010-03-24 27 views
10

EJB3 uygulamamdan Glassfish 3.0.1 üzerinde çalışan bir MongoDB örneğine bağlanmam gerekiyor. Mongo projesi bir dizi sürücü sağlıyor ve bunları bağımsız bir Java uygulamasında kullanabiliyorum.Glassfish'te 3. parti kütüphaneleri nasıl kullanılır?

Bunları bir Java EE uygulamasında nasıl kullanırım? Ya da belki daha iyi bir ifadeyle: bir EJB konteynerinde çalışırken uygulamam için bir 3. parti kütüphanesi nasıl kullanılabilir olur? Şu anda

, ben çalışır kütüphaneden ithal etmek bir fasulye dağıtmanın Java.lang.NoClassDefFoundError alıyorum:

[#|2010-03-24T11:42:15.164+0100|SEVERE|glassfishv3.0|global|_ThreadID=28;_ThreadName=Thread-1;|Class [ com/mongodb/DBObject ] not found. Error while loading [ class mvs.core.LocationCacheService ]|#] 
[#|2010-03-24T11:42:15.164+0100|WARNING|glassfishv3.0|javax.enterprise.system.tools.deployment.org.glassfish.deployment.common|_ThreadID=28;_ThreadName=Thread-1;|Error in annotation processing: java.lang.NoClassDefFoundError: com/mongodb/DBObject|#] 

[#|2010-03-24T11:42:15.259+0100|SEVERE|glassfishv3.0|javax.enterprise.system.core.com.sun.enterprise.v3.server|_ThreadID=28;_ThreadName=Thread-1;|Exception while loading the app 
org.glassfish.deployment.common.DeploymentException: java.lang.NoClassDefFoundError: com/mongodb/DBObject 
at org.glassfish.weld.WeldDeployer.event(WeldDeployer.java:171) 
at org.glassfish.kernel.event.EventsImpl.send(EventsImpl.java:125) 
at org.glassfish.internal.data.ApplicationInfo.load(ApplicationInfo.java:224) 
at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:338) 

NetBeans proje eklemeden çalıştı (Özellikleri -> Kütüphaneler -> Derleme -> Jar ekle, 'Package' seçeneğini etkinleştir ve ayrıca jar dosyasını $ GF_HOME/glassfish/domain/domain1/lib (burada mysql-connector zaten ikamet ediyor) olarak kopyalamayı denedim.

Kitaplığı kapsayıcıya 'kaydettirmem' gerekir mi? Annotation ile referans mı? Kütüphaneyi dahil etmek için kapsayıcı sınıf yolunu uzatmak?

cevap

17

Hmm ... Bu "sürücüyü" glassfishv3/glassfish/domains/domain1/lib/ext içine koymamalısınız?

+0

@Pascal: thank you! Bunu ben de denedim sandım. Her neyse, bir çekicilik gibi çalışır. Bu iyi bir yol mu? Bu dağıtımın bir parçası olmamalı mı? – Hank

+1

@Hank MongoDB sürücüsünün nasıl kullanıldığını bilmiyorum, ancak konteyner tarafından kullanılmıyorsa (JDBC sürücüsü bir bağlantı havuzu oluşturmak gibi) veya etki alanı uygulamaları arasında paylaşılmıyorsa, belki de paketlemelisiniz uygulamanızın içinde. –

9

Paylaşılan lib'leri etki alanınızın lib/ext dosyasına koyabilirsiniz. commons-logging ve jdbc sürücüleri genellikle bu alan yoluna eklenir.

Ortak Sınıf Loader

GlassFish v2 paylaşılan kütüphaneleri ile başa çıkmak için doğru yolu olarak ortak sınıf yükleyicisi tanımlayan iyi tanımlanmış Sınıf Yükleyici hiyerarşi vardır. Yani için kütüphaneleri ve domains/domain1/lib içinde diğer çerçeve JAR'leri koyarak uzun bir hikaye kısa yapmak yapmak için gereken tek şey.

lib/değil/lib ext

bana soru soran kişi çekirdek Java EE sınıfları böyle ilginç bir ClassNotFoundError tetiklenen /domain1/lib/ext alanlarda kütüphaneleri koyarak çalıştı vardı javax.servlet.http.HttpServlet. Wai Chan o etki/domain1/lib/ext açıklamak gecikmedi Shing onun kavanozları herhangi olacak yerleştirilen web uygulaması çerçeveler anlamına gelen bir JDK uzantısı olarak düşünülebilir yapar -Djava.ext.dirs parçasıdır webcontainer uygulama sınıflarından önce olarak yüklendikleri için,sınıflandırma zincirinde sınıf yükleyicide daha yüksektir. Glassfish Sınıf yükleyici hiyerarşisi vardır kendi

+0

Yukarıdakileri GlassFish v3 ile denediniz mi? –

+0

glassfish3'ü en kısa sürede deneyecek ama henüz değil :) http://blogs.sun.com/alexismp/entry/glassfish_equivalent_to_websphere_s –

+0

Bu, GlassFish v3/3.1 ile de çalışır. PGSQL sürücüsünü son birkaç kurulumum için glassfish/lib'e koydum ve herhangi bir ek yapılandırma olmadan çalışıyor. – SplinterReality

2

Benim durumumda Oracle Express Edition 11gR2 ve Glassfish 3.1 kullanıyordum./ $ GF_HOME/glassfish/modüllerin içine Kişisel kütüphanelerini koymak

C:\Program Files\glassfish-3.1.2.2\glassfish\lib 
0

deneyin: benim durumumda çalışır 2 ve TEK yolu içinde ojdbc6 koyuyordum. Kirli, ama işe yarayacak.