阅读更多

154顶
42踩

企业架构
Douyu是一种完全采用Java语言开发的、运行于JVM之上的新型基础开发平台。
在web层,Douyu完全抛弃了JSP/Servlet,
在数据库访问层,Douyu不依赖于任何ORM(对像关系映射)框架(如Hibernate)。


Douyu将Java语言编译器、Http服务器、MVC完美整合在一起,
几乎实现了ORM全自动化,同时在Java语言层面引入了权限管理模型。


Douyu内置的Java语言编译器基于OpenJDK Javac编译器(b60版),
并进行了修改和扩充,跟Http服务器结合之后能在控制器层发挥出强大的威力,
你只要修改Java源文件,然后刷新浏览器就能查看运行结果,
同时编译器也是实现ORM自动化的基石。

Douyu内置的Http服务器是基于NIO技术的,
是对Tomcat6及com.sun.net.httpserver(总共1300多个Java源文件)进行大刀阔斧的改造后得来的,
改造后的Http服务器目前只有60个左右的源文件,支持Http1.0/1.1协议。

Douyu内置的权限管理模型目前包含了功能权限、字段权限两类,
功能权限一般对应控制器类中的Action方法,Action方法可以与表单中的按钮关联,
字段权限能控制表单中的字段是否可以查看、修改或隐藏。

Douyu内置的ORM已几乎实现自动化,你只须建个数据库表(如pet),
然后在服务器配置文件中配置数据库驱动、并为每个数据库指定一个包名(如my.oracle.table),
然后就你可以在你的Java源文件中用import my.oracle.table.Pet导入模型类Pet。
Douyu还支持横跨多个数据库的事务,还支持保存点(Savepoint)。

Douyu项目主页目前放在:
http://code.google.com/p/douyu/

下面是一些简单的代码片断:


Hello World


@Controller
public class HelloWorld {
	public void index(PrintWriter out) {
		out.println("Hello World!");
	}
}



自动提取表单参数:


<FORM METHOD=POST ACTION="User/show">
	姓名:<INPUT TYPE="text" NAME="name">
	年龄:<INPUT TYPE="text" NAME="age">
	<INPUT TYPE="submit">
</FORM>


@Controller
public class User {
	public void show(String name, int age) {
		...
	}
}


文件上传


	<FORM ENCTYPE="multipart/form-data" METHOD="POST" ACTION="FileUpload">
    文件1:<INPUT NAME="file1" TYPE="file"><br>
	说明 :<TEXTAREA NAME="description"></TEXTAREA><br>
    <INPUT TYPE="submit" VALUE="上传">
    </FORM>


import com.douyu.http.UploadedFile;

@Controller
public class FileUpload {
	public void index(UploadedFile file1, String description) {
		File f = new File("D:/Douyu/temp/uploadedFiles", file1.getSimpleName());
		file1.saveTo(f);
	}
}


基本的CRUD操作


create table pet(
  id  int not null auto_increment,
  name varchar(50) not null,
  age int,
  primary key(id)
);


import com.douyu.main.Context;
import sql.table.mysql.Pet;

@Controller
public class Crud {
	public void index(Context c) {
		Pet pet = new Pet();
		pet.name("pet1");
		pet.age(3);
		c.insert(pet);

		pet.name("MyPet");
		c.update(pet);

		c.delete(pet);

		Rows<Pet> rows = new Rows<Pet>(Pet.class);
		rows.offset = 1;
		rows.limit = 100;
		c.select(rows);
		for(Pet p : rows.rowList) {
			...
		}
	}
}



横跨多个数据库的事务


import com.douyu.main.Context;
import my.table.oracle.Table1;
import my.table.mysql.Table2;

@Controller
public class Transaction {
	public void index(Context c) {
		Table1 t1 = new Table1();
		t1.f1("1234");
		Table2 t2 = new Table2();
		t2.f2("1234");

		c.beginTransaction();

		c.insert(t1);
		c.insert(t2);

		c.setSavepoint(); 

		t2.f2("abcd");
		c.update(t2);

		c.endTransaction();
	}
}



Douyu将使用两种开源协议:GPL2.0、 Apache License Version 2.0

所有与编译器有关的源代码使用GPL2.0协议(因为OpenJDK Javac编译器是使用这个协议的)
其他源代码使用Apache License Version 2.0协议开源。


不过目前Douyu的版本只是0.1.0,还不稳定,所以只是提供了二进制版,
目前我也并不推荐你研究Douyu的源代码,因为这可能会浪费你的时间,
因为Douyu的内部实现变动很频繁,在一年之内,大大小小的版本变更次数已超过100次了,
源代码中的注释也非常少,根本就来不急写,等过几个版本稳定先后再发布源代码。

目前Douyu的开发工作只有我一个人,全凭个人兴趣在家全职开发,
如果你对Douyu的实现有兴趣,想参与进来,我也是欢迎的,
但是你必须对Http协议、JDBC规范、Java语言编译器有相当程度的了解,
否则的话你可能在看Douyu的源代码时很吃力。


要想了解更多内容请看:
Without SSH/JSP/Servlet,不走寻常路,Java可以更酷
http://zhh2009.iteye.com/blog/517796

这篇文章是昨晚在JavaEye刚发布的,详细说明了Douyu的更种用法,
里面也详细说明了Douyu的很多设计理念以及我个人的很多研究心得。

赶快去看看吧。。。
154
42
评论 共 209 条 请登录后发表评论
149 楼 yangjizhong24 2009-11-19 17:27
douyu
ops2000 写道
请想想,难道这样开发的东西,任何一家大公司开发不出来么?商业技术的前进不是单靠一种创意或技术能够成功的,他是技术的远见、标准的妥协、商业的运作等等许多东西的综合。不用说都能想到作者是一个没有经过正规计算机原理系统学习过的勤奋的编码人员,并且没有做过大型系统,顶多开发过网站的技术人员。
有人敢用你这个东西么?如此封闭的一个东西,怎么去和其他系统集成?一个不能和其他系统集成的系统,谁敢买?技术人员从哪招?不说虚的,就说你和Spring的最大区别就是,spring为集成而生,这也正是spring成功的根本。
说白了,作者只是干了一件每个大公司都梦想干的,但实际都不会去干的事情。

这哥们后面说的哥们很赞成,不过楼主有这种动力值得我们钦佩啊。。。毕竟他去做了。。。现在中国就是缺这种人才,这种人多了该多好啊。。。楼主哥们很看好你啊,不管结局怎样没有不曲折的道理,但是离目标会更近
148 楼 tgyd2006 2009-11-19 17:07
很期待作者的照片~~~~~~~~
147 楼 javaxiang 2009-11-19 16:19
caoyangx 写道
其实做这种东西我是很赞成的,不过你为什么要打着WITHOUT SHH、JSP、SERVLET的旗号去烘托你自己呢?我不赞成这种损人利己的做法,Spring之父也说WITHOUT EJB,但是人家真正做到了,你做到了什么就开始喊这种口号?你不怕激起民愤吗?很有争议的标题,建议JE修改一下。如此以往,说不定哪天会出现什么without ruby、python、JavaScript、c++...等标题来强*我们的眼睛。

这位仁兄说的很在理,不过还是要支持博主一下,精神可嘉,期待突破!
146 楼 whaosoft 2009-11-19 16:18
这个标题 ,什么终结者啊
145 楼 caoyangx 2009-11-19 15:04
其实做这种东西我是很赞成的,不过你为什么要打着WITHOUT SHH、JSP、SERVLET的旗号去烘托你自己呢?我不赞成这种损人利己的做法,Spring之父也说WITHOUT EJB,但是人家真正做到了,你做到了什么就开始喊这种口号?你不怕激起民愤吗?很有争议的标题,建议JE修改一下。如此以往,说不定哪天会出现什么without ruby、python、JavaScript、c++...等标题来强*我们的眼睛。
144 楼 lw671579557 2009-11-19 14:55
ue2001 写道
suxuan696 写道
中国人写的东西能用么?不敢相信哈哈,再说了 java又不是你写的 谁稀罕用你那破东西啊 !  java还是SUN公司出来的呢。。。有能力 你们自己去开发个新计算机语言啊!!  哎!  炒作!!!!

我靠看着就来气~敢问您写的东西是人用的吗?

没骨气的东西,楼主,别听他们的,坚持自己的想法!做出来再说!
143 楼 zhiblin 2009-11-19 14:06
强烈支持一下!! 
142 楼 indexchen 2009-11-19 13:24
douyu 要实现的主要目标是什么? 不能和现有的技术兼容很难有前途 。 现有的大量投资作为企业不会轻易抛弃的,不要仅仅从技术角度考虑问题。spring能成功就是其能兼容已有的大众技术。
141 楼 ops2000 2009-11-19 11:42
请想想,难道这样开发的东西,任何一家大公司开发不出来么?商业技术的前进不是单靠一种创意或技术能够成功的,他是技术的远见、标准的妥协、商业的运作等等许多东西的综合。不用说都能想到作者是一个没有经过正规计算机原理系统学习过的勤奋的编码人员,并且没有做过大型系统,顶多开发过网站的技术人员。
有人敢用你这个东西么?如此封闭的一个东西,怎么去和其他系统集成?一个不能和其他系统集成的系统,谁敢买?技术人员从哪招?不说虚的,就说你和Spring的最大区别就是,spring为集成而生,这也正是spring成功的根本。
说白了,作者只是干了一件每个大公司都梦想干的,但实际都不会去干的事情。
140 楼 haibo 2009-11-19 11:37
泼盆凉水:你这个东东等于一股脑全做,什么都做,等于什么也做不好---如果想服务器端通吃的话,我们完全可以写CGi来做,,如果客户端通吃的话,完全可以摆脱浏览器的限制,写个特定的httpd客户端,用c通过socket通信来实现,,,---------这样做岂不是重新回到了史前,,,??
139 楼 lib 2009-11-19 11:31
强烈支持一下!!
加油!!
不过也要提醒一句:抬得越高,摔得越狠。
Douyu还是初级版本,低调一些!等稳定了,在慢慢做一些宣传!!
138 楼 caoyangx 2009-11-19 10:55
再好的东西,这么大肆宣扬也臭了,让人期望值太高很容易导致失望。低调点,酒香不怕巷子深。毕竟现在是初级阶段,等真正成熟稳定了那天,怎么折腾都有资格。
希望不要辜负这么多观众的期望,祝你早日成功。
137 楼 huxp 2009-11-19 09:43
只因是中国人写的,纯支持。
136 楼 longer042 2009-11-19 09:28
虽然没用 但是我还是顶你的。。写出这样的东西 算是厉害任务了。。这年头出的框架都是基于servlet的。。。跟你写的都不是一个档次的。。顶你
135 楼 ZHH2009 2009-11-18 23:09
黑暗浪子 写道
几个问题:
权限管理
安全认证
异常处理
国际化
日志管理
不知道这些这个东东是怎么实现的。


Douyu只算是初级阶段吧,
权限管理
安全认证
异常处理
这三个有涉及,
国际化
日志管理还没加入,你有兴趣可以看看论坛中的帖子。

134 楼 ZHH2009 2009-11-18 23:05
fendydeng 写道
很猛很大胆,但我还是忍不住要说,标题党...


见谅吧,这个我刚发完后也觉得好像起得过头了,
但是找不到地方改,有地方可以编辑吗?第一次发新闻。
133 楼 ZHH2009 2009-11-18 23:03
peak 写道
作者的付出会有收获的,呵呵douyu是拼音吗?


谢谢!

是"斗鱼"的拼音,在这里有详细说了:

http://www.javaeye.com/topic/517796?page=12#1247045

132 楼 ZHH2009 2009-11-18 23:00
qbq 写道
不管怎么说
LZ在论坛发的说明写的相当详细
不过建议还是弄成JAVA式的API
比较习惯
毕竟还是JAVA基础上的


API会有JavaDoc的
131 楼 kjj 2009-11-18 21:08
xiaocheng882000 写道
suxuan696 写道
中国人写的东西能用么?不敢相信哈哈,再说了 java又不是你写的 谁稀罕用你那破东西啊 !  java还是SUN公司出来的呢。。。有能力 你们自己去开发个新计算机语言啊!!  哎!  炒作!!!!


别人干点什么事,非得泼上点冷水才舒坦!真受不了!!!

中国人怎么啦,自卑别拉上别人好不 !!
130 楼 bsq519 2009-11-18 20:54
希望能越来越好。

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • VC_MFC中CRecordset类详解

    CRecordset类的详细说明和MFC中使用CRecordset类的详细方法

  • CRecordset类

    CRecordset类代表一个记录集,是MFC的ODBC类中最重要、功能最强大的类。 #include 1.      动态集、快照、光标和光标库 在多任务操作系统或网络环境中,多个用户可以共享同一个数据源。共享数据的一个主要问题是如何协调各个用户对数据源的修改。例如,当某一个应用改变了数据源中的记录时,别的连接至该数据源的应用应该如何处理。对于这个问题,基于MFC的ODBC应用程序可以采

  • CRecordset::AddNew()函数

        调用此函数来添加一个新的记录到数据表中,你必须调用成员函数Requery来查看新添加到记录。记录的字段初始值为NULL。为了完成完整的操作,你必须调用Update函数来更新保存你对数据源的改动。    注意:    如果你连续执行批量的记录操作,你不能使用AddNew函数。它将导致失败中断。尽管CRecordset类没有提供一个方法来做批量的记录操作,但是你可以利用ODBC API SQL

  • 单独使用CRecordSet (转)

    单独使用CRecordSet (转)[@more@]闻怡洋 Mailto:wyy_cq@21cn.com"&gt;wyy_cq@21cn.com .NET/"&gt;http://www.vchelp.net/ 一般情况下A...

  • 有关MFC ODBC类对打开的CRecordset数据集无法进行更新操作释疑

             在用MFC数据库类CDatabase和CRecordset类声明的对像无法对打开的数据集进行编辑、添加、删除。偶然间让我碰到个这样的问题让我费了不少精神,不知道为什么数据库能正常打开,数据集也正常Open。可是就是没办法进入编辑状态,老是会弹出“记录集只读”的提示。----------------------------------------------------------

  • 使用CRecordset update()函数不能更新

    最近做一个有数据库编程的项目,使用了CRecordset类。总结下心得,方便自己,方便后学的人。     在中介绍了有关CRecordset类的具体用法。那么有以下两个 问题:    1.CRecordview这个类做了什么?      它继承自CFormview,在OnInitialUpdate()函数中调用了CRecordset类的open()方法。      因为vc++并不能直接

  • MFC的CRECORDSET对数据库的操作 .

    MFC数据库操作系列—数据中间层(CRECORDSET) MFC数据库接口分为两种:ODBC和OLE DB 。ODBC而言提供开放的访问方式,使用较为简单,但是需要注册数据库,这导致在部署应用程序的时候需要重新布置数据库,并且个人意见:数据库操作不涉及大量的数据交换建议使用。   CRECORDSET为数据库和应用程序之间交换数据提供和很好的封装。掌握CRECORDSET必要的字段和方法功能

  • CRecordset类学习记录

    这里写自定义目录标题CRecordset类简介快照和动态集的区别CRecordset类成员数据成员构造记录集属性记录集更新操作记录集定位操作其他记录集操作记录集重载函数 CRecordset类简介 CRecordset对象代表从一个数据源选择的一组记录的集合,被称作“记录集”。CRecordset对象可以以两种形式使用:动态集和快照。动态集是与其它用户的更新保持同步的动态数据集。快照是数据的静态视图。每一种形式都代表打开记录集时固定的一组记录。但是当滚动到动态集中的一个记录时,动态集将反映后来由其它用户或由

  • 如何使用CRecordSet类---入门指导

        大家好,我是北京邮电大学的一名学生,Jamie lee。前不久学习了数据库的编程,在这里总结一下,如大家分享一下入门的经验。   先大体介绍我做的数据库编程用到的技术。有ODBC,MFC中CRecordset,MySQL数据库和它的相应工具--SQL Manager Lite for MySQL。看到这个多陌生的东东肯定很挠头吧。其实很简单的,你自己也可以用一天搞定。前提是看完我篇心得,呵呵。   1.首先用你的数据库管理软件,建立一个你要处理的数据库。因为我用的是MySQL,所以我用SQL Man

  • VC数据库编程 MFC中相关类

    CRecordSet类     一般情况下AppWizard会在数据库应用程序中自动产生CRecordset的派生类,并将派生类和某个数据源中的表联系起来也可以和视图上的子窗口联系起来。但是有时这样做会影响到程序的灵活性,这时候我们可以单独使用CRecordSet类。利用CRecordSet类我们可以执行SQL语句,并可以读出结果集中数据。     首先我们需要包含头文件afxdb

  • 一个在vs2005+上创建一个基于CRecordView的对话框

    在vs2005+之上 好像基类没有CRecordView类,要想建立一个基于CRecordView的类,我暂时没有找到好的方法,只能手动添加了。。。 这里的SSS是你要创建的类的名字; #if !defined(AFX_SSS_H__4F498E08_A53F_46D5_B438_AD50C0E3A6F1__INCLUDED_) #define AFX_SSS_H__4F498E08_A53

Global site tag (gtag.js) - Google Analytics