|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
比如模式、敏捷方法什么的,这些思想好,但是实施的人没有理解而且没有正确运用这些知识导致了开发周期的延长。比如说对象,通过getName()方法不能获取对象的名字。
每一个bean大概会有良多办法,一样平常我们经由过程一个delegate来挪用sessionbean中的办法,而非间接挪用sessionbean,delegate中只是复杂的对每一个绝对应的sessionbean的public办法的复杂封装,在挪用的时分省往了每次对home的查找和ejb对象的create,可是大概我们的bean会有良多办法,假如每一个bean都写如许一个delegate,如许事情量就会很年夜,并且也方便于今后体系的移植,好比说,本来利用ejb完成,如今要改用jdo间接操纵数据库,而经由过程使用java的reflect手艺,就可以较好地完成这些请求。起首,界说了一个FacadeDelegate的笼统类,用来完成对sessionbean的home的查找,代码以下:
importjavax.ejb.*;
importtestejb.util.common.*;
importtestejb.util.resource.*;
publicabstractclassFacadeDelegate{
privatestaticStringtype=Resource.RemoteType;
publicFacadeDelegate(){
}
publicEJBHomegetHome(StringjindiName,ClassclassName)
{
EJBHomehome=null;
ServerLocatorAdapteradapter=ServerLocatorAdapter.getInstance();
try
{
home=(EJBHome)adapter.getHome(type,jindiName,className);
}
catch(Exceptione)
{
System.err.println(e.getMessage()+jindiName+className.toString());
}
returnhome;
}
}
个中ServerLocatorAdapter是一个用来依据是local仍是remote挪用ejb对象而经由过程分歧的办法查找home的类,假如type为local则挪用LocalServerLocate中的办法,假如type为remote则挪用RemoteServerLocate中的办法,取得home。代码以下:
importjava.util.*;
importjava.lang.reflect.*;
importtestejb.util.resource.*;
publicclassServerLocatorAdapter{
privateMapcache;//用来缓存home
privatestaticServerLocatorAdapterme;
publicstaticServerLocatorAdaptergetInstance()
{
if(me==null)
me=newServerLocatorAdapter();
returnme;
}
//获得home
publicObjectgetHome(Stringtype,StringjndiHomeName,ClassclassName)throwsException
{
Objecthome=null;
if(cache.containsKey(jndiHomeName))
returncache.get(jndiHomeName);
if(Resource.LocalType.equals(type))
{
home=getLocalHome(jndiHomeName,className);
cache.put(jndiHomeName,home);
returnhome;
}
if(Resource.RemoteType.equals(type))
{
home=getRemoteHome(jndiHomeName,className);
cache.put(jndiHomeName,home);
returnhome;
}
returnhome;
}
//获得localhome
privateObjectgetLocalHome(StringjndiHomeName,ClassclassName)throwsException
{
ClassmyClass=Class.forName(Resource.LocalClass);
//Resource.LocalClass=”testejb.util.common.LocalServerLocator
Methodmethod=myClass.getMethod(Resource.LocalConstractMethod,null);
//Resource.LocalConstractMethod=”getInstance”
LocalServerLocatorlocal=null;
local=(LocalServerLocator)method.invoke(myClass,null);
returnlocal.getLocalHome(jndiHomeName,className);
}
//获得remotehome
privateObjectgetRemoteHome(StringjndiHomeName,ClassclassName)throwsException
{
ClassmyClass=Class.forName(Resource.RemoteClass);
//Resource.RemoteClass=”testejb.util.common.RemoteServerLocator”
Methodmethod=myClass.getMethod(Resource.RemoteConstractMethod,null);
//Resource.RemoteConstractMethod=”getInstance”
RemoteServerLocatorremote=null;
remote=(RemoteServerLocator)method.invoke(myClass,null);
returnremote.getHome(jndiHomeName,className);
}
privateServerLocatorAdapter(){
//为cache供应线程平安的包管
cache=Collections.synchronizedMap(newHashMap());
}
}
<p>
还是要自己一点一点写代码,然后编译,改错再编译好那。还有最重要的是.net网页编程的编译环境非常好,你甚是不需要了解太多工具,对于简单的系统,你可以之了解一些语法就哦了。 |
|