what shall i do then??
please

解决方案 »

  1.   

    老大 ,我用的是WINDOWS,
    我是超级用户,
    怎么可能出现权限问题呢?
      

  2.   

    错误是 Output directory 不存在
      

  3.   

    ouput path存在呀!
    我用的是JBUILDER
      

  4.   

    你可以把JBuilder的完整配置贴出来
      

  5.   

    我几乎没有作什么呀,
    我先建立了一个工程文件,
    然后建了Enterprise Bean1.x,
    Module处是新建的。然后就是编译了
      

  6.   

    然后 在还要添加好多东西呢 你可以看看了,做ejb最麻烦的就是配置了
    怎么可能这么简单。!!!!!!
      1. 首先新建一文件夹,2. 如:D:\myproject,3. 作为新项目的路径。(强烈建议)
    4. 建项目:  在JBuilder中工具栏中New,5. 在Object Gallery对话框中New选项卡,6. 选Project,7. OK.   将Project Name改为account、将Root Path 改为刚才新建的文件夹。     直到finish。
    8. 设置server类型:JBuilder5.0以上的用户,9. 右击项目文件,10. property,11. servers选项卡,12. 通过浏览将最上排的Application Server改为WebLogic Application Server 5.1,13. Web Server可以不14. 选。如使用JBuilder4.0,在property对话框中,15. 选enterprise选项卡,16. 修改Application Servers即可。
    17. 建立EJB组:新建,18. Enterprise选项卡,19. Empty EJB Group 项,20. ok后将Name改为account。
    21. 添加entity bean: 新建,22. Enterprise选项卡,23. Enterprise JavaBean项,24. 确认其EJB groups为account.ejbgrp,25. Next后将classname改为AccountBean。  Options中,26. 选最后一项Container Managed Permission EJB 1.1 entity bean,27. 并将Primary key class 改为 java.lang.Integer。
    28. 添加 session bean:步骤如上,29. 将Name改为ObjIdBuilderBean,30. Options选第二项Stateful session bean。
    31. 为了加快开发学习的过程,32. 在\account目录下已存在各文件,33.  你可以将他们copy到你相应的目录下(D:\myproject\account\src\account\)并覆盖原有文件。然后,34. 在Jbuilder中按Add(工具栏第二行第一个),35. 将原来没有的文件添加到项目中来。同36. 时,37. 将文件依次Make (右击文件名,38. 快捷菜单中有),39. 看看是否有错。如有,40. 则可能是文件路径错,41. 更改每个文件中的import以及package 试试。
    42. 项目文件介绍:
    account.ejbgrp是EJB group文件,负责管理所有的EJB文件、EJB的部署(deploy)以及*.jar文件的生成。你可以双击它后,看到所有的EJB结构,部署描述符(deployment descriptor,源文件为*.XML文件)。AcountBean.java是(Container Managed Persistence)Entity Bean,其中包含了各种方法的实现。Account.java是其Remote Interface,定义了各种商业方法的接口。AccountHome.java是其Home Interface,定义了Bean的生成、查询、删除等方法的申明。ObjIdBuilderBean.java是(Stateful) Session Bean,ObjIdBuilder.java是其Remote Interface,ObjIdBuilderHome.java是其Home Interface。ContextFactory.java是一个定义Server Context(上下文类)的类。运用该类,就可通过JNDI定位Home Object,继而建立EJBObject,调用EJB。 注:给class命名时注意命名规则,类名首字母要大写。覆盖后\account\下应有7个文件。
    三、EJB的部署
    1. 建立数据源:  控制面板->管理工具->数据源 (ODBC)->用户DSN->添加   ->SQLServer,2. 名3. 称:test; 服4. 务器:SNOOPY。  下一步后:选SQLServer验证,5. 将登录的Id和密码都设为intranet。下一步后:选“改变默认数据库”,6. 改为test。
    7. 建立与数据库的连接:  在JBuilder中,8. 左上角窗口中双击account.ejbgrp,9. 左下角窗口中单击account,10. 右面窗口显示entity bean的属性。(这些工作都要在文件覆盖过后进行)  
    2.1 设persistence选项卡:      persistence type:container; tables:employee。  在container managed fields 中,将objId  选为isPK(通过check),成为主键;同时将column name(数据库中字段)自上至下依次设为objid(注意大小写), account, password, 分别与field name(bean中字段)objId, account, password相对应,完成与数据库中对应字段的连接。
    2.2 设property选项卡:     add按钮,   Name:pool-name;type:Sting;  Value:employeePool;这样完成了连接池的建立。(注:连接池:动态Web站点往往用数据库存储的信息生成Web页面,每一个页面请求导致一次数据库访问。连接数据库不仅要开销一定的通讯和内存资源,还必须完成用户验证、安全上下文配置这类任务,因而往往成为最为耗时的操作。如果某个基于数据库的Web应用只需建立一次初始连接,不同页面请求能够共享同一连接,就能获得显著的性能改善,连接池就是这么一个东东)
    2.3 设finders选项卡:   method:findByAccount();  where clause:$0=account;作用:findByAccount()是一个本地接口中定义而未实现的查询函数,通过finder 选项卡的设置,让容器自动为其生成一个符合where clause条件的SQL查询语句,并在该函数被调用时完成对数据库的操作(这就是所谓的方法插入,其实不过如此,这点SQL语句我都不会写?通过container插入方法再查询慢的像蜗牛,大家了解一下吧)。
    11. 编译连接:  左上角窗口中右击account.ejbgrp,12. Make。  如果编译无错,13. 其树下就会产生一个account.jar的打包文件(可用winRAR解压)。该文件用于在weblogic中部署时用,14. 包含了所有的class文件和部署操作符。
    15. 配置weblogic:  
    4.1先将myproject中的account.jar文件copy到weblogic\myserver\目录下(可以覆盖)。
    4.2在weblogic目录下有一weblogic.properties文件,右击用UltraEditer-32打开(如果装了的话)。
    实现连接池pool: 在WEBLOGIC DEMO CONNECTION POOL PROPERTIES段(以一排######开头)的结尾处(下一排###########之前)。加入以下代码:
       weblogic.jdbc.connectionPool.employeePool=\
           url=jdbc:odbc:test,\
           driver=sun.jdbc.odbc.JdbcOdbcDriver,\
           loginDelaySecs=1,\
           initialCapacity=2,\
           maxCapacity=10,\
           capacityIncrement=2,\
           props=user=intranet;password=intranet;
    weblogic.allow.reserve.weblogic.jdbc.connectionPool.employeePool=everyone
    这样就完成了JDBC-ODBC桥的连接。
    4.3 部署*.jar文件:WEBLOGIC EJB DEMO PROPERTIES段的结尾。加入weblogic.ejb.deploy=\
            c:/weblogic/myserver/account.jar
    15.4  双击weblogic目录下的starweblogic文件,15.5 启动Server,15.6 看看是否连接、部署无误。(deploy成功的标15.7 志:startWeblogic后,15.8 DOS窗口一直执行到Weblogic Server Started,15.9 并且每行中间基本上都是“<I>”,而15.10 不15.11 是出错标15.12 记“<E>”且跟着一串at,15.13 告诉你哪儿有Exception。)
    注:1.所加代码的行首不能有"#","#"代表注释。
    2.行尾有"\"的代表续行符。其余有的行尾有";",而有的没有。
    3.可以不把*.jar文件copy到weblogic\myserver下,只要deploy时weblogic.ejb.deploy=\
    <绝对路径>/*.jar就可以(注意路径中用"/")。(此条:Beginner can omit it)
    四、测试
    1. 首先在weblogic目录下双击startweblogic,2. 使server 运行(这时Bean才有效)。
    3. 新建,4. enterprise选项卡,5. EJB test client项,6. 建立一个测试程序。同7. 时,8. 为方便测试,9. 右击account.jpx,10. property,11. run选项卡,12. 将compile before running 点为不13. 选。
    14. 在测试程序中第361行左右,15. main()函数中添加如下代码:
        try{
          client.create("mqiao","mqiao");
          Account account=client.findByAccount("mqiao");
          if(account!=null){
            System.out.println("The password of mqiao is"+account.getPassword());
          }else{
            System.out.println("The account doesn't exist.");
          }
        }catch(Exception e){
          e.printStackTrace();
    }
    对该测试程序Run了以后,你可以在测试窗口中看到运行的状态:创建bean,调用方法,每条命令执行所花时间,命令执行的结果。
    16. 另一个应用  新建一EJB test client,17. 在main()中添加如下代码:
    Account account=client.findByAccount("mqiao");
          if(account!=null && account.isValid("mqiao")){
            System.out.println("The password of mqiao is correct.");
          }else{
            System.out.println("Password Invalid.");
          }
        }catch(Exception e){
          e.printStackTrace();
    }
    这里要调用isValid()方法,该方法的实现在AccountBean.java中:
    public boolean isValid(String aPassword){
        if(password==null&&aPassword==null){
           return true;
        }else if(password!=null&&password.trim().equals(aPassword)){
          return true;
        }else {
        return false;
        }
      }
    因为SQLServer中字符串一般是定长的,最后往往会填有空格。这就会导致equals()方法将正确的密码判错。所以在equals()之前先trim()以下。但trim()对空字符串会判错,我又增加了一些逻辑处理。注:每当对bean修改后,必须全项目的重新编译,并用新的*.jar文件覆盖weblogic中的*.jar。
    五、小结
    通过了以上步骤,我们经历了EJB的配置、建立、部署、测试的全过程。经过了这些实际操作过程,再配合书本上系统的理论学习,相信你可以对EJB的机理有一定的了解。
    我们通过copy源程序的方法,是想封装一些比较复杂的问题,程序的执行过程可以参考TestClient源程序了解。
    采用TestClient测试的作用是检验EJB有没有错,但应用时往往采用JSP->Servlet->Session Bean->Entity Bean or DAO的结构,这次暂不介绍。附:大体介绍
    Session Bean-ObjIdBuilder负责动态生成id号,
    Entity Bean-Account在创建的过程中,调用ObjIdBuilder,产生一个objid,并配合create()中的两个参数,在数据库中建立一条记录。其余的函数可由名字联想。
    FAQ:
    有很多同事反映第四步--测试无法进行,其实是第三步--deploy有错。
    可以看看4.4中deploy成功的标志。 
    deploy出错,很多是因为一/2没
      

  7.   

    就像snowredfox(スノーの路人乙) 说的那样,问题的解决大多要靠自己,因为很多问题虽然现象相同,但是原因不一定相同。就比如lifeis(人就是直立行走的驴) 自己说的:
    老大 ,我用的是WINDOWS,
    我是超级用户,
    怎么可能出现权限问题呢?真的没有遇到过权限问题吗?你将一个word文件设置为只读,然后打开编辑一下再存盘,你可以修改吗?还不是需要另存为吗!
    我想大多数人用win2000都是使用超级用户,超级用户也要受基本的条件制约,他不是万能用户,仅仅多的是管理权限!你使用超级用户可以删除正在使用的系统文件吗?很多问题需要你自己检查!一个小小的不同都可能造成很大的问题!解决问题的方式也有很多啊!你可以试试建一个新的工程,看看是否有同样的问题啊!解决问题不能只认一个死道理!要注意方式和方法!
      

  8.   

    你的问题有一个可能的原因就是你将输出包直接放在了weblogic的发布目录下,而你的weblogic正启动着,这样,你的发布包就不能生成,没有写权限了!
    超级用户也不能避免正在使用中的文件不能修改的问题。
      

  9.   

    兄弟们是这样的,我的配置没有问题。
    问题在我创建ENTITY BEAN时候编译不出错,。
    但是SESSION BEAN时候就出错,怎么办呀???
      

  10.   

    对不起,刚才的那些话可能说得不是很好,我原来没有用过jbuilder+weblogic,我一直在用jbuilder+jboss,刚才我试了一下,发现和你的问题一样,然后我修改了一下就可以不出现错误了,方法如下:
    打开EJB Module的属性窗口,选择最上面的paths标签,再选择weblogic 6.x标签,钩掉Use EJBC to generate stub files
    你试试这个对你能不能好用。
    祝好运。反正我现在没有出现异常了,但是进一步的问题我就不是很清楚了,我原来使用的是jboss,我对weblogic不熟。
    ^_^
      

  11.   

    cherami(cherami) ( 
    谢谢,成功了,
    可你能不能解释一下EJBC to generate stub files是什么意思呀?
      

  12.   

    这个我也不是很清楚,只是误打误中吧。
    就stub而言,就是RMI中负责客户端的网络通讯的中介,应该是J2EE中自己带的功能,可能WEBLOGIC因为其它原因有自己的实现方式,因此可以进行修改和生成。