你可将实体BEAN和会话BEAN分开来,这样即便于修改,也可解决你的问题
解决方案 »
- tomcat报的这个错误太古怪了!!!!!!!!
- 问特简单问题,白送分啦!!!
- IBATIS中ResultSet遇到问题,急!!!!
- 求助!关于java中web service的开发与调用
- struts1中怎么配置两个Form?
- Java中接口的概念?
- 关于空间定位问题
- 菜鸟问题:从weblogic服务器内怎么和其他机器上的应用程序通信?
- 急!请问谁有java和xml结合使用的例子或资料、信息,在下感激不尽!!
- 报错ParameterMap cannot be cast to java.util.HashMap的问题
- 请问如何:读取java类文件,获取其功能接口
- HttpURLConnection问题(solaris 5.8+jdk1.4.2)
到底是用一个还是两个ejb module,我认为这要看你的项目的规模了。规模不大,完全可以放在一个ejb module里啊。你若强行分开,想实现低的耦合和高的内聚,那么就要分析模块之间的到底有哪些逻辑关系。采用哪一种方案都有它好处和不足,这就具体看你偏重哪方面的需要了,例如需要在效率和易维护性上做一个trade-off等。
----------------
tmd翻翻书会死啊。书上写的清清楚楚,懒的可以了。就会叫叫叫,叫能成为高手哇,那我早成神了。s-h-i-t
J2EE的有J2EE 1.4基础教程,JSP 高级开发与应用,J2EE 应用与BEA WEBLOGIC SERVER,用J2EE和UML开发JAVA企业级应用程序,开发工具有JBUILDER 精髓,还有数据库方面的书。但这些上都没有我问的这些问题,所以才来者求助你们这些高手!你可能会说再去买这方面的书,但我们已经买了那么多了,这些对于我们这些还没有毕业的学生已是不小的一个开销,实在没多余的再投资了,在网上也找了一些电子教材,但很不幸也都没有关于我问的问题,所以我就又想起了CSDN,在我眼里论坛里的高手们都是一些热心帮助我们这些菜鸟的好人至少也能给我推荐一些资料不至于我再花冤枉钱,你说我乱叫可以,但说我懒我却绝对不同意!上面我说的书虽说没看完但也看了大部分了,J2EE我是三月份开始学的,J2EE体系结构,J2EE的各种技术JSP SERVLET EJB JDBC 等这些都是从头学的,我也没有什么人指导,纯粹是自学,这中间也走了不少弯路,如今快毕业了我们又赶着做这个设计,没时间在一点点摸索了所以我想请一些高手指点一下,少走点弯路,尽快把毕业设计做好!
如果你是高手嫌我只会叫不自己动手,自己保留意见就行了,何必说出来伤了大家的和气,坏了论坛的风气,如果你不是高手那就更没有理由指责我了!做好你自己的事就行!!!
所以我这个帖子诸位能帮就帮一下,小弟自当感激,自会重分相送,不够另开贴放分!
不想帮也没事,随便顶顶也可以不过不要在这乱骂,不欢迎!
所以我这个帖子诸位能帮就帮一下,小弟自当感激,自会重分相送,不够另开贴放分!
不想帮也没事,随便顶顶也可以不过不要在这乱骂,不欢迎!
------------------------------------------
小伙子,有前途。推荐,精通EJB(第二版),www.cnforyou.com上有卖,原价59,优惠价50,送书上门。如果不想买的化可以到书店去看,多数书店开架卖,代个笔记本(不是笔记本电脑哦)去抄几个例子也行。网上也有电子版的,我见过,因为我有书了,所以就没留意。你可以自己搜搜。另,你那个学校的,如果是北京科技的,我到可以考虑借给你看看。
--------------------------------------
EJB是什么:EJB是一种提供分布是计算的规范,应用程序不管ejb的物理位置,应用程序都可以通过jndi查找,rmi技术调用来进行计算。EJB2.0提供的本地接口(local),是为了解决远程接口(remote)的性能问题,使得在同一个虚拟机上运行的ejb可以不用远程调用,大大提高性能。但对程序员开发来说区别并不大。仅仅在于:使用了EJBLocalHome和EJBLocalObject。EntityBean的使用:实体bean的性能有些问题,你不能完全依靠实体bean实现数据库持久层。至少在进行查询时使用jdbc要灵活和容易的多,性能上也会好很多。可以用实体bean实现增删该的功能,和进行没有关联的简单的查询。建议使用dao模式隔离应用程序和数据库,这样即使改动数据库或数据库访问方式也可以不影响应用程序。不要在servlet和jsp中调用dao,使用session调用dao。实体bean的话,能不用就不用,尽可能使用jdbc(开发调试都简单,性能也不错),可以留几个实体bean装装样子。不是实体bean不好,学习成本使用成本维护成本高而已。
另外:搞清楚你的毕业设计是技术上的实践还是真正的用户项目,前者的话你想怎么搞都没关系,后者的话达到目的(满足项目需求)才是重要的。
只不过是在lookup方法的ejb jndi名字前加上前缀java:comp/env/。通过jndi查找bean本身就花费巨大,我不知道这样对性能会有多大提升?我想应该还有其他方法吧!听君一席话,我也不在这“乱叫“了,自己动手丰衣足食!不过有热心人想帮一下的话,小弟欢迎,感激不尽!
import javax.sql.DataSource;
import java.util.Hashtable;
import javax.naming.*;
import javax.ejb.*;
import javax.rmi.PortableRemoteObject;import javax.jms.JMSException;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;import com.rm.exception.*;
import com.rm.ejb.dao.*;
import com.rm.ejb.counter.*;public class ServiceLocator {
private static ServiceLocator serviceLocatorRef = null;
private static Hashtable ejbHomeCache = null;
private static Hashtable dataSourceCache = null;
private static Hashtable queueConnectionFactoryCache = null;
public static final int COUNTER = 0;
public static final int TITLEDAO = 1;
public static final int EDITORDAO = 2; private static final String COUNTER_JNDINAME = "counter/Counter";
private static final String TITLEDAO_JNDINAME = "title/TitleDAO";
private static final String EDITORDAO_JNDINAME = "editor/EditorDAO";
private static final String SUBSCRIPTIONDB_JNDINAME = "java:/subscriptionDS"; private static final Class COUNTERCLASSREF = CounterHome.class;
private static final Class TITLECLASSREF = TitleDAOHome.class;
private static final Class EDITORCLASSREF = EditorDAOHome.class; static {
serviceLocatorRef = new ServiceLocator();
}
private ServiceLocator(){}
public static ServiceLocator getInstance(){
return serviceLocatorRef;
}
static private String getServiceName(int pServiceId) throws
ServiceLocatorException {
String serviceName = null;
switch (pServiceId) {
case COUNTER:
serviceName = COUNTER_JNDINAME;
break;
case TITLEDAO:
serviceName = TITLEDAO_JNDINAME;
break;
case EDITORDAO:
serviceName = EDITORDAO_JNDINAME;
break;
default:
throw new ServiceLocatorException(
"Unable to locate the service request"
+ " in ServiceLocator.getServiceName() method. ");
}
return serviceName;
}
static private Class getEJBHomeRef(int pServiceId) throws ServiceLocatorException{
Class homeRef = null;
switch (pServiceId) {
case COUNTER:
homeRef = COUNTERCLASSREF;
break;
case TITLEDAO:
homeRef = TITLECLASSREF;
break;
case EDITORDAO:
homeRef = EDITORCLASSREF;
break;
default:
throw new ServiceLocatorException(
"Unable to locate the service request"
+ " in ServiceLocator.getEJBHomeRef() method. ");
}
return homeRef;
}
public EJBHome getEJBHome(int pServiceId) throws ServiceLocatorException{
String serviceName = getServiceName(pServiceId);
EJBHome ejbHome = null;
try {
if (ejbHomeCache.containsKey(serviceName)){
ejbHome = (EJBHome)ejbHomeCache.get(serviceName);
return ejbHome;
}else {
Context ctx = new InitialContext();
Object jndiRef = ctx.lookup(serviceName);
Object portableObj = PortableRemoteObject.narrow(jndiRef,getEJBHomeRef(pServiceId));
ejbHome = (EJBHome)portableObj;
ejbHomeCache.put(serviceName,ejbHome);
return ejbHome;
}
}
catch (NamingException e) {
throw new ServiceLocatorException(
"NamingException in ServiceLocator.getEJBHome() method. ");
}
catch (Exception e) {
throw new ServiceLocatorException(
"General exception in ServiceLocator.getEJBHome() method. ");
}
}
public java.sql.Connection getDBConn(int pServiceId) throws ServiceLocatorException{ String serviceName = getServiceName(pServiceId);
java.sql.Connection conn = null;
try {
if (dataSourceCache.containsKey(serviceName)) {
DataSource ds = (DataSource) dataSourceCache.get(serviceName);
conn = ((DataSource) ds).getConnection();
return conn;
}
else {
Context ctx = new InitialContext();
DataSource newDataSource = (DataSource) ctx.lookup(serviceName);
dataSourceCache.put(serviceName, newDataSource);
return newDataSource.getConnection();
}
}catch (SQLException e) {
throw new ServiceLocatorException(
"A SQLErro has occured in ServiceLocator.getDBConn() method. ");
}
catch (NamingException e) {
throw new ServiceLocatorException(
"A JNDI Naming has occured in ServiceLocator.getEJBHome() method. ");
}
catch (Exception e) {
throw new ServiceLocatorException(
"General exception in ServiceLocator.getEJBHome() method. ");
}
}
public QueueConnection getJMSQueueconn(int pServiceId) throws ServiceLocatorException{
String serviceName = getServiceName(pServiceId);
QueueConnection qc = null;
try {
if (queueConnectionFactoryCache.containsKey(serviceName)){
QueueConnectionFactory qcf = (QueueConnectionFactory)
queueConnectionFactoryCache.get(serviceName);
qc = qcf.createQueueConnection();
}else {
Context ctx = new InitialContext();
QueueConnectionFactory qcf = (QueueConnectionFactory)
ctx.lookup(serviceName);
queueConnectionFactoryCache.put(serviceName,qcf);
qc = qcf.createQueueConnection();
}
}catch (JMSException e){
throw new ServiceLocatorException(
"A JMS exception has occurred in ServiceLocator.getJMSQueueConn()"+e);
}catch(NamingException e){
throw new ServiceLocatorException("A JNDI Naming exception occurred in "+
"ServiceLocator.getJMSQueueConnection()");
}catch (Exception e){
throw new ServiceLocatorException();
}
return qc;
}
}
--------------
以上代码只是提供思路。参考实用j2ee设计模式编程指南 电子工业出版社 wrox出版。或相关j2ee设计模式的书籍。