5just自用框架---服务器端的编写
架构使用
服务器端 :
服务器端要提供远程业务逻辑接口给各个客户端使用.这个接口要建在logic包下
这里说的接口不是java中的interface,它是一个方法必须返回一个规定好的类类型.
第一步 :
在你的EJB项目下META-INF目录(该目录下存放启动配置文件的),创建dbconfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<config>
<!--配置数据源的集合-->
<data-sources>
<data-source id="linuxsir">
<jndi-data-source>
java:/MySqlDS
</jndi-data-source>
</data-source>
</data-sources>
<!--默认使用这个数据源-->
<use-data-soruce>linuxsir</use-data-soruce>
<remote_load package="{classpath}/org/src/load/loadconfig.xml">远程代理类配置文件</remote_load>
<filepath path="${classpath}/META-INF/cache_config.xml">存放加载配置文件</filepath>
</config>
第二步:创建DAO
创建数据库和表,创建个包名称如com.just.dao,
在此包下创建类CityDAO.
CityDAO提供构造方法传入Connection
然后提供个查询的方法返回List,里面装入Form类型
第三步:创建远程接口
创建logicRemote接口com.just.logic.TestRemote里面提供个方法返回Object方法
这个很重要请看代码:
public class Test {
//接收Connection
private Connection con;
public Test(Connection con) {
this.con = con;
}
//调用DAO方法,并接收结果
public Object queryALL(int id){
List list=null;
try {
list = dao.queryList();
} catch (SQLException e1) {
e1.printStackTrace();
return e1.getMessage();//有错误直接返回就可以了
}
//放入迭代类(5just自定义的)
BeanToXMLEnumeration be = new BeanToXMLEnumeration();
try {
be.addBean(list, Address.class, null, null);
return be.invoke();
} catch (Exception e) {
e.printStackTrace();return e.getMessage()
}
}
第四步:创建代理类
找到dbconfig.xml里
<remote_loadpackage="{classpath}/org/src/load/loadconfig.xml"> 远程代理类配置文件</remote_load>
查看loadconfig.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<hosts>
<host name="core">
<package>org.src.load.core</package>
</host>
<host name="home">
<package>org.src.load.core.home</package>
<amend></amend>
</host>
</hosts>
hosts是主机集合,子节点host是一个主机,name为远程代理的代号
看package节点中的值,这就是代理包的path找到这个包然后建立个类
例如我们创建
org.src.load.core.home包,在此包中创建类Chui
private Object object;
public Object getObject() {
return object;
}
public void setObject(Object object) {
this.object = object;
}
public Chui(HttpServletRequest request){
int id =Integer.parseInt((String)request.getAttribute("id"));
Transaction tr=null; //事务类
try {
tr = new Transaction();
} catch (NamingException e1) {
e1.printStackTrace();
}
tr.setCache(Integer.parseInt(""+ToolEL.getBeanValue(
ConfigFactory.newInstance("home"),"config[home].[homecore].[cachetype]")
));
tr.setclassname("com.just.logic.Test"); //调用服务器端的Test类
tr.setMethodName("queryALL"); //调用Test类的queryALL方法
tr.addParam(int.class,id); //给queryALL方法赋参数
tr.setTime(Long.parseLong(""+ToolEL.getBeanValue(Config
Factory.newInstance("home"),"config[home].[homecore].[time]")));
tr.setUsedatasource(true);
XmlObject xo = tr.executeResult(); //执行queryALL方法并接收返回的XmlObject类型
try {
System.out.println(xo.asXML()); //打印数据库中的结构
} catch (IOException e1) {
e1.printStackTrace();
}
ProxyBean xt = new ProxyBean(this,xo); //调用代理类,放入本身的类对象和 queryALL方法返回的 XmlObject
try {
this.object = xt.getBeans(); //把类的属性赋值成代理对象服务器端
} catch (Exception e) {
e.printStackTrace();
}
}