关于waf,请教各位高手。

我最近辛辛苦苦把petStore研究了一编,现在想模仿着扩展waf用在公司的项目里,但是在使用中发现StateMachine中用Class.forName不能找到我定义的类,我甚至在前面加入import语句也不行。
在WAF里,StateMachine(java类)被一个作为EJBController的sessionBean调用(Local接口),使用Class.forName方法实例化一个EJBAction类,但是部署上weblogic上后此处始终抛出java.lang.ClassNotFoundException。为什么呢?我将war和jar打成一个ear一起包部署的。
此情况我在其他地方也遇到过。类似一个stateful session bean作为类工厂,使用完整类名实例化具体的业务类。
我的J2EE水平有待提高,所以我不能确定是哪里的问题,只是怀疑是部署的问题,使session Bean不能找到业务类,但是?Why? 怎么做呢? 诚心请教各位高手!!!小弟先谢了!!!
环境:jbuilder8 + weblogic7

//EJBController:
/**
* EJB控制器EJB的Session Bean实现。
* 更多的细节参考StateMachine。
*/
public class EJBControllerLocalEJB implements SessionBean {

protected StateMachine sm;
protected SessionContext sc;

public EJBControllerLocalEJB() {}


public void ejbCreate() {
sm = new StateMachine(this, sc);
}

/** 就是这里调用了StateMachine, 此时ev中包含了完整的EJBAction类路径*/

public EventResponse processEvent(Event ev) throws EventException {
return (sm.processEvent(ev));
}

public void setSessionContext(SessionContext sc) {
this.sc = sc;
}

public void ejbRemove() {
sm = null;
}

public void ejbActivate() {}

public void ejbPassivate() {}
}

//这是StateMachine部分源码
public class StateMachine
implements java.io.Serializable {

private EJBControllerLocalEJB ccejb;
private HashMap attributeMap;
private HashMap actionMap;
private SessionContext sc;

public StateMachine(EJBControllerLocalEJB ccejb, SessionContext sc) {
this.ccejb = ccejb;
this.sc = sc;
attributeMap = new HashMap();
actionMap = new HashMap();
}

//操作事件
public EventResponse processEvent(Event ev) throws EventException {
//取得EJBAction的类名
String actionName = ev.getEJBActionClassName();
EventResponse response = null;
if (actionName != null) {
EJBAction action = null;
try {
//控制EJBAction的instance,调用过就放入actionMap,待用
if (actionMap.get(actionName) != null) {
action = (EJBAction) actionMap.get(actionName);
}
else {
//实例化具体的EJBAction
//就是这里出的错!actionName是完整且正确的类路径!!!
action = (EJBAction) Class.forName(actionName).newInstance();
actionMap.put(actionName, action);
}
}
catch (Exception ex) {
System.err.println("StateMachine: error loading " + actionName + " :" +
ex);
}
if (action != null) {
action.init(this);
// do the magic
action.doStart();
response = action.perform(ev);
action.doEnd();
}
}
return response;
}

"使用Class.forName方法实例化一个EJBAction类,但是部署上weblogic上后此处始终抛出java.lang.ClassNotFoundException。"

你这个问题很早就讨论过,Weblogic和Jboss一样,动态反射时寻找一个Jar包是先从EJB层开始寻找,所以你应该在EJB中将Class.forName的类打包进去。

感谢板桥大哥,一句话就点到了,我已经解决。同时也发现Jbuilder中后很多Buge,让我折腾了一上午。再次感谢!