太长了,我没仔细看完,不过我想你还是没有理解透EJB
首先,所有的调用如你要调用session bean 或是实体bean,必须通过jndi查找。
实体bean只处理与数据库相关操用。
session bean一般处理逻辑。cmp,当一个实体bean被客户端引用,并执行一个业务方法后,容器会自动的读取bean中的实例字段,然后通过容器与数据库发生关系,保存改变的数据,执行完后,bean被钝化了,并调用ejbPassviate()方法通知bean, 当过一段时间,客户又调用这个bean的某个方法时, 被钝化的bean又被激活。但并不是马上执行这个业务方法,而是由EJB对像首先调用ejbActivate()方法通知bean, bean的实例要激活,然后从数据库中取数据,并自动将数组映射到bean的实例上,然后调用ejbLoad()方法,实例被在一次初始化,最后才执行要执行的业务方法。servlet当然可以通过jndi 去查找主接口的对像
web层首先用户请求可以通过表单发送给服务器,服务器servlet 接收,并能过jndi查找相应主接口,并交由session bean或是Entity bean处理,不过大多数情况都是servlet调用session bean处理逻,需要操作数据库的时候,在通过jndi调用Entity bean
首先,所有的调用如你要调用session bean 或是实体bean,必须通过jndi查找。
实体bean只处理与数据库相关操用。
session bean一般处理逻辑。cmp,当一个实体bean被客户端引用,并执行一个业务方法后,容器会自动的读取bean中的实例字段,然后通过容器与数据库发生关系,保存改变的数据,执行完后,bean被钝化了,并调用ejbPassviate()方法通知bean, 当过一段时间,客户又调用这个bean的某个方法时, 被钝化的bean又被激活。但并不是马上执行这个业务方法,而是由EJB对像首先调用ejbActivate()方法通知bean, bean的实例要激活,然后从数据库中取数据,并自动将数组映射到bean的实例上,然后调用ejbLoad()方法,实例被在一次初始化,最后才执行要执行的业务方法。servlet当然可以通过jndi 去查找主接口的对像
web层首先用户请求可以通过表单发送给服务器,服务器servlet 接收,并能过jndi查找相应主接口,并交由session bean或是Entity bean处理,不过大多数情况都是servlet调用session bean处理逻,需要操作数据库的时候,在通过jndi调用Entity bean
解决方案 »
- spring3+struts2+JPA配置时出现 Unable to find file 警告,求解答。
- SSH开发项目 业务工作流资料库讨论
- 谁能给个myeclipse8.0ga用的hibernatetools呀。hibernate是3.6.0
- 请教各位大侠XFire问题?
- 如何学习j2ee(.net过度到java)
- 请高手帮忙啊?急!!!
- jbuilder 如何直接用WEBLOGIC 部署完了的目录,是不是每次建WEB 应用都要部署一次呢?在线等!!!!
- JTable,高手进来看看~~~
- J2EE平台配件选择
- 求字符串压缩算法
- 我的项目改用STRUTS来得及吗? 请发言
- 一个很简单的问题,急用!
根据超连接的不同,分别调用不同的SERVLET实现接口方法,在每个SERVLET中调用EJBHELPER中的方法,这样流程会清晰很多. VO的使用可以优化EJB性能,但不一定每个字段都对应get/set方法,如果数据库改动频繁,那最好还是别用Entitybean了,可以用petstore模式,你看一下就知道了,就是EJB套用了JAVA的工厂模式,应对经常变化的数据很有效.
RequestDispatcher dispatcher=getServletContext().getRequestDispatcher("ListUser.jsp");
dispatcher.forward(req,res);
在ListUser.jsp中,我有一些疑惑:
Collection myCollection=(Collection)request.getAttribute("list"); //行2
写到这里,我不知道怎么继续了。
在行1,放入atrribute中的集合中到底是什么东东?是UserBean的集合,还是UserBeand的主键的集合??
在行2,我这里取得的myCollection中到底是些什么东东??
如果是userBean或主键的集合,UserBean没有远程能力,不能这样访问吧?另外,采用SessionBean+CMP本身就是为了避免web层直接与CMP交互,这样做岂不将serlvet和bean扯上关系了?--
如果要这样做,你应该为UserBean加上远程接口,这样存在atrribute中的就是UserBean的远程接口(实际上EJB的实现是通过主键来查找每一个记录的,不过这不由你管,你就把他看作远程接口就行了),然后调用相应的GET方法取的数据。如果要避免与CMP交互,你可以构造自己的VO(像你后面做的那样)
----
大部分长的差不多:),不过你应该明白CMP是对应数据库的,VO你可以用来对应界面的业务需求,比如有个页面要显示几个表里的数据,你就可以在session bean里面组织,构造一个可用的业务VO,而且他们所处的位置是不同的,VO是在web层,ENTITY BEAN在数据层(可能还在不同的机器上呢)并且用VO,就会碰到方法一中遇到的问题,添加或减少一个字段,VO,UserManageBean ,serlvet都要做相应更改。
-----
上面已经说了,数据库的改动是影响最大的,不要期望不改代码