这个思路其实是为了解决title 中文问题的时候发现的。当时想着,实在不行我就自己做
一个DataSource的定义。SmartGWT 里,DataSource就是它的元数据核心。
这里,DataSource实际上有两个,
其一是客户端的 com.smartgwt.client.data.DataSource,这部分是开源的,可以自己随意创建。
另一个是服务器端的 com.isomorphic.datasource.DataSource, 这个是SmartGwtEE 里面的
内容,非开源的,而且只能在Server端使用,不能在客户端使用。
而我想做的动态DataSource,指的是在客户端定义一个DataSource,这里都可以用java类来描述
各个Field,包括类型什么的。而在服务端,根据客户端定义的DataSource自动生成一个服务端的
DataSource,这样就可以根据需要进行灵活的定义,而且所有的定义都通过java代码来进行,又可以
进行编译期检查,还可以绕过中文乱码问题。
当然,现在中文乱码问题解决了,这个需求就显得不那么迫切。把思路记录一下,以后有需要的时候再
来用这个思路实现动态的DataSource。
1. 在server.properties里面,定义缺省的 datasource repo:
datasources.repo.default: org.simon.xxx.server.MyDSRepo
2. MyDSRepo 继承自FileSystemDSRepo,这个实际上是SmartGWT 缺省的DSRepo
3. 在public DataSource loadDS( String dsName) 方法当中,判断是不是动态的DataSource ,
如果是,那么根据客户端的DataSource Class是否有变化,来决定是否生成一个新的 ds.xml文件,
然后还交给 super来装载。
如何判断客户端的DataSource Class是否有变化,是个问题。当然也可以不生成ds.xml文件,但是这样
就不能利用 DSRepo的cache机制了。具体的实现,等需要时再说,目前没碰到这种需求,但是不得不说,
SmartGwtEE还是为扩展留下了各种机制的。