在我的JSF项目工作区中,我有一个Java项目 A 和一个使用Java项目的Weblogic EJB项目 B 。
在生成EAR时,我可以看到项目A和B的jar在EAR中以及工作区中的其他项目中。
但是,在尝试从B中的A访问类时,我发现了一个未找到类的异常。
Ejb项目 B 具有managedbean/dao/ejb/delegate
,此时EJB根本没有被调用。实例化了managedbean,并且从另一个动作调用我调用了调用违规类的方法(loadWorklist)。
我缺少任何特定的设置吗?
请注意,这在UNIX服务器的weblogic 9.2中部署为EAR。 所有必需的jar都是在运行时从EAR内部加载的,只缺少项目A中的类。
错误的堆栈跟踪:
javax.faces.FacesException: Error calling action method of component with id worklistForm:_idJsp131
at org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:72)
at javax.faces.component.UICommand.broadcast(UICommand.java:109)
at javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:97)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:171)
at org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:32)
Truncated. see log file for complete stacktrace
javax.faces.el.EvaluationException: Exception while invoking expression #{worklistManagedBean.loadWorklist}
at org.apache.myfaces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:156)
at org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:61)
at javax.faces.component.UICommand.broadcast(UICommand.java:109)
at javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:97)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:171)
Truncated. see log file for complete stacktrace
java.lang.NoClassDefFoundError: com/tcs/nextgen/workflow/util/WorkflowUtil
at com.ultimatix.nextgen.worklist.managedbean.WorklistManagedBean.loadWorklist(WorklistManagedBean.java:36)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
Truncated. see log file for complete stacktrace
耳结构:
EAR
|
|-META-INF
|-library1.jar
|-library2.jar
|-A.jar
|-B.jar
由于这是一个现有的遗留应用程序,因此jar不在APP-INF / lib中。
答案 0 :(得分:1)
如果模块B
使用模块A
中的类,则必须在模块A
的{{1}}的类路径中声明模块MANIFEST.MF
。此文件中的类路径条目是相对的,因此由于模块处于同一级别,因此您可以指定B
。其他常用库可以放在A.jar
中,并自动添加到类路径中。但是,这是WebLogic特定的行为。