私は、Geotools を使用するアプリケーションを開発しています。Geotools は、Java Advanced Imaging (JAI) API を使用して Glassfish で実行されます。Netbeans からアプリケーションを EJB jar ファイルとして実行すると、CDI スキャン中に ClassNotFoundException が発生するため、デプロイに失敗します。
com.google.common.collect.ComputationException: org.jboss.weld.resources.spi.ResourceLoadingException: Error loading class org.autogena.skyserver.data.filetypes.SwathFile
at com.google.common.collect.ComputingConcurrentHashMap.compute(ComputingConcurrentHashMap.java:218)
....
Caused by: org.jboss.weld.resources.spi.ResourceLoadingException: Error loading class org.autogena.skyserver.data.filetypes.SwathFile
at org.jboss.weld.resources.ClassTransformer.loadClass(ClassTransformer.java:189)
.....
Caused by: java.lang.NoClassDefFoundError: javax/media/jai/PropertySource
at java.lang.ClassLoader.defineClass1(Native Method)
....
Caused by: java.lang.ClassNotFoundException: javax.media.jai.PropertySource
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
ただし、EJB モジュールを EAR ファイルにパッケージ化すると、上記の例外は発生せず、問題なくロードされるようです。
Mac では JAI コア クラスがシステム拡張ライブラリにあるため、クラスパスに表示されないことに困惑しています。
クラスのロードに関しては、EJB jar と EAR ファイルに違いはありますか?それとも、Glassfish / Weld で大きな違いがありますか?
考えてみてください-とにかく私のprjectが使用するライブラリをglassfishはどのように見つけますか-それらはejb jarファイルにパッケージ化されていないようです-netbeansはここでボンネットの下で何か賢いことをしていますが、それはどういうわけか斜めになっていますか?
ありがとう、ジョシュ