Приложение JBoss AS7, развернутое на Mac, не может найти com.apple.laf.AquaLookAndFeel

Мы переходим на JBoss AS7 со старой версии JBoss и используем JFreeChart в одной части нашего приложения:

chart = ChartFactory.createStackedBarChart( "", "", "Data", dataset,
            PlotOrientation.HORIZONTAL, true, false, false );

Когда мы нажимаем на эту строку, мы получаем трассировку стека ниже, указывающую, что com.apple.laf.AquaLookAndFeel не может быть найден. Мы видим эту проблему только на Mac, что имеет смысл, учитывая имя пакета com.apple.laf. Запуск на сервере Linux, кажется, работает нормально. Есть ли что-то, что нам нужно сделать, чтобы AS7 на Mac распознавал классы внешнего вида Apple?

Все Mac, на которых я пробовал это, полностью обновлены с 26.04.12. Я не смог найти тот, который имеет некоторые из старых JVM.

Трассировки стека:

15:38:30,125 SEVERE [javax.enterprise.resource.webcontainer.jsf.lifecycle] (http--0.0.0.0-8080-1) JSF1054: (Phase ID: RENDER_RESPONSE 6, View ID: /blah/blah/blah/blahInfo.xhtml) Exception thrown during phase execution: javax.faces.event.PhaseEvent[source=com.sun.faces.lifecycle.LifecycleImpl@3dc264b1]
15:38:30,129 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/mgmt].[Faces Servlet]] (http--0.0.0.0-8080-1) Servlet.service() for servlet Faces Servlet threw exception: java.lang.ClassNotFoundException: com.apple.laf.AquaLookAndFeel from [Module "deployment.blah_war-1001.0-SNAPSHOT.war:main" from Service Module Loader]
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:423)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120)
    at java.lang.Class.forName0(Native Method) [classes.jar:1.6.0_31]
    at java.lang.Class.forName(Class.java:247) [classes.jar:1.6.0_31]
    at javax.swing.SwingUtilities.loadSystemClass(SwingUtilities.java:1856) [classes.jar:1.6.0_31]
    at javax.swing.UIManager.setLookAndFeel(UIManager.java:563) [classes.jar:1.6.0_31]
    at javax.swing.UIManager.initializeDefaultLAF(UIManager.java:1329) [classes.jar:1.6.0_31]
    at javax.swing.UIManager.initialize(UIManager.java:1422) [classes.jar:1.6.0_31]
    at javax.swing.UIManager.maybeInitialize(UIManager.java:1410) [classes.jar:1.6.0_31]
    at javax.swing.UIManager.getDefaults(UIManager.java:645) [classes.jar:1.6.0_31]
    at javax.swing.UIManager.getColor(UIManager.java:687) [classes.jar:1.6.0_31]
    at org.jfree.chart.JFreeChart.<clinit>(JFreeChart.java:261) [jfreechart-1.0.13.jar:]
    at org.jfree.chart.ChartFactory.createStackedBarChart(ChartFactory.java:950) [jfreechart-1.0.13.jar:]
    at this.is.our.code.DisplayChart.buildChart(DisplayChart.java:73) [classes:]

На данный момент мы смогли обойти эту проблему, указав внешний вид и поведение системы по умолчанию при запуске JBoss:

-Dswing.defaultlaf=javax.swing.plaf.metal.MetalLookAndFeel

Это больше похоже на взлом, поэтому, если есть лучший способ, мы бы хотели попробовать это.

2 ответа

Решение

Я не совсем уверен, как проверить, где именно это добавить, но вам нужно добавить com.apple.laf,com.apple.laf.resources как зависимости. В GUI CLI, который поставляется с AS 7, это определено в JAVA_OPTS с -Djboss.modules.system.pkgs=com.apple.laf,com.apple.laf.resources, Вы можете добавить это к вашему standalone.conf или же domain.conf в зависимости от того, в каком режиме вы работаете.

Вы также можете просто попробовать добавить Dependencies: com.apple.laf,com.apple.laf.resources на ваш MANIFEST.MF в вашем развертывании тоже. Я не уверен, что это сработает, но, вероятно, стоит проверить.

Не уверен, если связано, но для меня добавление fork="true к <java ...> помогло задание в файле Ant.

Источник: http://lists.apple.com/archives/java-dev/2004/Oct/msg00529.html

Другие вопросы по тегам