培训最后一天,报表~
感觉普元的报表有点水晶的味道,弄了个分组报表,又建数据源又建数据集有设行分组,列分组的,赶紧挺麻烦,没有用润乾好使,虽然润乾工作量也挺大
看来老板要贴了心上普元了,接下来可能要实战了,不知道啥样,现在有两点困难;
1\、普元报的错误,无从下手,不知道哪出的毛病,比如有时在展现层的毛病,而在逻辑处理层报错,摸不着头脑啊。
2、普元的构件不熟悉,据说有1000多个构件,不像java api一样按照功能分的包,它是按层分的包,业务逻辑层构件、运算层构件、展现层构件。要实现一个功能怎么能知道构件包里有没有现成的,恐怕这只能慢慢熟悉那些构件库了
3、觉得普元的报表系统不怎么样,至少没有什么让人耳目一新的,工作流系统还挺强,对工作流不熟悉,不敢说什么,然后就是可维护性,可扩展性,可能一直是自己写代码的,看不见代码总觉得不踏实最然功能实现了并以更迅速的
4、听头儿说这是未来软件开发的趋势,听得我直郁闷,未来开发就是这么托构件然后用连线一拉基本完事儿了吗?!得,要不我还是转行做小买卖去吧,呜呜,总的来说,觉得这种模式对程序员个人的发展没多大好处,核心代码都被封装好了,不知道什么是类,对象,方法,面向对象,也能轻而易举做软件工程师了,呵呵,工程师以后不值钱喽。
自己的一点感觉,胡侃一通,不知道合不合乎逻辑,在前面的blog里有朋友留言说"千万别被普元忽悠了",哈哈,不知道那位兄弟的理由是什么,想多听听大家的意见,望广留言,多谢多谢多谢!!!
例子1:Entity的格式
<root>
<data>
<myEntity>
<myField1>1234</myField1>
<myField2>This is demo</myField2>
</myEntity>
</data>
</root>
例子2:EntityList的格式为
<root>
<data>
<list length=2>
<myEntity name="test1">
<myField1>1234</myField1>
<myField2>This is demo</myField2>
</myEntity>
<myEntity name="test2">
<myField1>2345</myField1>
<myField2>This is demo</myField2>
</myEntity>
<list>
</data>
</root>
通过Xpath来访问数据,比如
/root/data /myEntity将访问到例子1中的<myEntity>实体
/root/data/myEntity/ myField1 将访问到例子1中的myField1,结果为1234
/root/data/list/myEntity[@name="test1"]将访问例子2中的<myEntity name="test1"> 实体
/root/data/list/myEntity[@name="test1"]/myField1将访问例子2中的myField1,值为1234
第四天还没来得及写呢,现在已经是第五天了呵呵
昨天临时以前的项目要改写东西,听的断断续续
还是一些关于工作流的知识,只是更加复杂一下,跟着文档一个劲儿的复制黏贴
也不知道所以然
据说下午还要考试,晕
摘要: 今天接着培训普元EOS讲rishWeb和工作流上午实现了一个在一个table中实现增删改查,有个控件datacell,一下子就把我搞蒙了, 一个劲儿的复制黏贴,也不知道哪是哪,看起来好像类似与那个.net中的那个DataGrid,关键是还不大明白那些输入输出参数应该以什么套路配置。应该是在开始的时候就配置输入输出参数,但是又是如何跳回到jsp的呢,<datacell:datacell ...
阅读全文
一直苦恼与不能实现广域网的版本控制,终于发现Google code就提供这种服务,它使用Subversion来控制版本,下了一个
TortoiseSVN 1.5.1
装上,捣鼓了半天终于上传上Google code了,哈哈。有成就感
这两天有搞了个eclipse插件
subclipse,运行起来以后无论commit还是update都提示错误:
Attempted to lock an already-locked dir
通过搜索,解决办法是 执行clearup操作,就好了
记录在这,Subversion还要继续研究
今天剖析了昨天三下两下生成的增删改查的代码(能看到的代码也仅仅限于jsp页面中的一些标签),其他的要看的话都是xml,要用EOS的设计器看才是类似于流程图的东西
感觉看不到亲切的java代码很不爽,呵呵
然后练习自定义运算逻辑,这下自己写类了呵呵,eos能够由向导自动生成类和方法体,就像Myeclipse中新建struts的action一样,发现eos的方法都是静态的,都是返回一个int整型值,参数列表也都是Document doc, BizContext param,看起来只有方法名可以自定义了,呵呵!
之前说过普元这套东西都是用xml格式传递参数的,这里就是从param中获取xml,然后拆解每个要用到的节点,来获取传入的参数,然后经过处理后把返回值再放到xml节点中,好费劲。
然后是handler,为了灵活的加入新的处理,可以在一个业务逻辑的前后加入多个handler,跟一般的过滤器写法没什么差别。
然后是jsp Tag自定义,也是继承了javax.servlet.jsp.tagext.TagSupport,没有普元的东西
再然后是复杂查询,多表查询,他是创建一个查询实体,就是视图啦
一天下来对普元EOS了解的多了些,它以方法为单位作为构成构件,以达到重用的目的,各个层之间以xml格式作为联系,开发人员基本上已图形化开发,不接触底层技术,给程序员的门槛降低了(大学生就业更难了呵呵),开发系统开始工业化,把零件装起来,螺丝拧上就OK了
可能经历实际开发了,会有多一些不一样的感触吧
还是没闹明白难道这就是所谓SOA吗???
普元EOS,面向构件的开发
公司要购进普元的EOS开发工具,组织为期5天的培训
为了今天的培训我把我的笔记本系统都重装了,折腾了半天装数据库,装EOS,装EOS补丁,不知道干嘛不做一个集成了补丁的安装包
安装过程中要配置数据库,要初始化数据库,会向数据库中自动建好多表,然后安装成功后可以在服务控制台管理。
首先做了个HelloWorld
界面就是这样的
首先新建一个构件包(面向构件的开发嘛),每个构建包下有页面构件page,展现逻辑构件pr,业务逻辑构件biz,数据逻辑构件data等等。
我的理解就是每个构件就相当于分层架构中的一层,page就是jsp页面,pr是Struts的action,biz是spring的bean,data是hibernate的映射,普元在这之上又进行了封装,以前我们在各个层之间传递数据通常由一个DTO数据传递对象,而普元在各个层用xml来传递,普元把普遍通用的实现逻辑处理都封装成了构件,我们只要调用构件就行了。
之后又来了复杂点有刺激的,通过向导实现对一个单表的增删改查,向导跟vs.net中的那个数据连接,数据适配器拖到页面上选择表,选择字段,就自动生成了增删改查,只是vs.net中可以看到生成的C#的代码,而普元生成的只是一堆xml。
原来一天未必能完成的事,现在十分钟做完,能傻瓜的都傻瓜了,真的也要下岗了。
哦,对了,这些和SOA怎么联系上呢?
要提供给客户一个下载xml文件备份的功能
思路确定了
生成xml
在服务器指定目录创建文件
取得文件路径,弹出下载框
Java语言:
01 <%@ page contentType="text/html;charset=UTF-8" language="java"%>
02 <%@ page import="java.io.*" %>
03 <%
04 String pathurl = (String)request.getAttribute("pathurl");
05 if(pathurl !=null && !pathurl.equals("")){
06
07 String addressReport = application.getRealPath("/")+"saveFiles"+File.separator+pathurl;
08 //String addressReport = PageConstraint.XML_PATH_SEND+pathurl;
09 addressReport = addressReport.replace(File.separator,File.separator+File.separator);
10
11 // 设置响应头和下载保存的文件名
12 response.setContentType("APPLICATION/OCTET-STREAM;charset=UTF-8");
13 response.setHeader("Content-Disposition",
14 "attachment; filename=\"" + pathurl + "\"");
15
16 // 打开指定文件的流信息
17 java.io.FileInputStream fileInputStream =
18 new java.io.FileInputStream(addressReport);
19
20 写出流信息
21 int i;
22 while ((i=fileInputStream.read()) != -1) {
23 out.write(i);
24 }
25
26 fileInputStream.close();
27 out.close();
28
29 }
30 %>
这么写在jsp文件中的代码,开始试验没有问题,但是如果xml中有中文,就会是乱码,xml文件是使用utf8生成的,猜想可能是在流读取的时候编码不对,于是在网上搜得了下面这样的写法,通过InputStreamReader设置了编码UTF-8
测试成功
Java语言:
01 <%@ page contentType="text/html;charset=UTF-8" language="java"%>
02 <%@ page import="java.io.*" %>
03 <%
04 String pathurl = (String)request.getAttribute("pathurl");
05 if(pathurl !=null && !pathurl.equals("")){
06
07 String addressReport = application.getRealPath("/")+"saveFiles"+File.separator+pathurl;
08 //String addressReport = PageConstraint.XML_PATH_SEND+pathurl;
09 addressReport = addressReport.replace(File.separator,File.separator+File.separator);
10
11 // 设置响应头和下载保存的文件名
12 response.setContentType("APPLICATION/OCTET-STREAM;charset=UTF-8");
13 response.setHeader("Content-Disposition",
14 "attachment; filename=\"" + pathurl + "\"");
15
16 // 打开指定文件的流信息
17 java.io.FileInputStream fileInputStream =
18 new java.io.FileInputStream(addressReport);
19
20 // 写出流信息
21 //int i;
22 //while ((i=fileInputStream.read()) != -1) {
23 //out.write(i);
24 //}
25
26 //fileInputStream.close();
27 //out.close();
28
29 InputStreamReader reader=new InputStreamReader(fileInputStream,"UTF-8");
30 int i=0;
31 while((i=reader.read())!=-1){
32 out.write(i);
33
34 }
35 reader.close();
36 fileInputStream.close();
37 out.close();
38 }
39 %>
总结:还是对java的流相关只是掌握不清啊,不能熟练运用
一哥们在学C#,同时学的是sqlServer2005,是啊,我接触C#那会儿才.net1.1,现在都3.x了
让我帮忙调式一下程序,而我的机器尚没有sql05,只有sql2000,期间听说过05和2000可以同时安装,装吧,要不没法附加他那2005的数据库,费了好大劲装好了,开始附加数据库,但是死活附加不上去,错误提示:执行Transact_SQL语句或批处理时发生了异常。未能在sysindexes中找到数据库ID 9 对象ID 1 对应的行,请对sysindexes运行DBCC CHECKTABLE
按照提示,执行 DBCC CHECKTABLE 还是没有效果
遂在google上搜,有网友遇到这个问题是因为同时装了sql2000,卸载了2000重装sql2005就成功了
晕,这下功夫耗大了
卸载吧,同学提供了一个干净卸载的工具来卸载,早就知道卸载sql2000卸不干净,重装会出问题,于是采用此工具
“微软的Windows_Installer_清理实用工具msicuu2”
可谁知道,这东西帮了倒忙,好像得先运行卸载程序,再运行这个“微软的Windows_Installer_清理实用工具msicuu2”可以帮忙将注册表之类的垃圾清理掉,但是我直接运行了这个“微软的Windows_Installer_清理实用工具msicuu2”,结果sql2000还在并且可以运行,在控制面板卸载,提示 找不到D:\Program Files\Microsoft SQL Server\MSSQL\Uninst.isu
晕,这是干啥的啊
接着google
找到一网友的播客http://www.anywolfs.com/liuhui/article.asp?id=257,提出了解决办法,用之,终于可以卸载了
接着卸载sql2005,哎,等等,现在是不是可以附加了呢,试,.....还是不行,呵呵
卸载吧
哦?从控制面板貌似sql05也卸载不了了,卸了好几次也没反应啊,倒是不报错
试了好几次,貌似选哪个都不好使,点下一步,一会儿窗口就自己消失了
啊,啊啊,晕,先睡觉,明儿再搞定05
谁位大哥遇到过,提示一下啊......
今天开发中遇到一个奇怪的hibernate错误
我的数据库中一个表中有个字段名叫id,但是它并不是主键
用hibernate映射后为
XML语言:
1 <id name="apprId" type="java.lang.Long">
2 <column name="APPR_ID" precision="11" scale="0" />
3 <generator class="assigned" />
4 </id>
5 <property name="Id" type="java.lang.Long">
6 <column name="ID" precision="11" scale="0" />
7 </property>
而我当执行这样的hibernate的HQL的时候
SQL语言:
1 from RcUApprInfo as model where model.Id = ?
hibernate解析成sql语句竟然是
SQL语言:
1 select ...... from rc_u_appr_info where as model where model.APPR_ID = ?
跟踪了好几遍,都是这样
在确定自己的代码没问题后,想到可能是hibernate理解错了
于是将Id改成了别的名
再试,竟然没问题了
难道hibernate将凡是叫Id的都认为成主键??不解 不解
早上上班来,打开电脑,看到一则最新消息,google发布自己的浏览器了
9月3日消息 9月3日凌晨,谷歌中国与全球同步推出其开源浏览器Google Chrome测试版,中文名为谷歌浏览器.
下载地址为:http://www.google.com/chrome
记得前几天还看见csdn上新闻说google澄清不会出浏览器跟IE竞争,晕,现在成现实了,google的所有服务差不多用了个遍,这个也不例外,下了一个,惊讶下载文件竟然只有几百K,开始安装才知道也是采用windows live那样的安装方式,还要下载一通。
终于安装完啦,打开
第一感觉很简单,把所有空间都给了页面显示,就像IE按了F11一样,因为在公司是使用代理上网,纳闷的是我也没有配置代理居然一下就能上网,于是打开选项查找,有个设置代理的按钮,点击打开的竟然是IE的选项窗口,google的浏览器调用IE的internate选项,这不是成了遨游?
引用:面向服务的体系结构(service-oriented architecture,SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种这样的系统中的服务可以以一种统一和通用的方式进行交互。
今天公司组织了一个SOA培训,请的
普元公司的工程师来的,按工程师的话说SOA是一种方法,这种方法已经由来已久了也算,在欧美国家早就用这种方法来开发标准的软件系统,那是不是能成为SOA是一种方法呢,呵呵
培训中,工程师演示了普元的产品,他们的一个开发工具EOS包含了AppFream,Report,RishWeb,WorkFlow,软件开发的各个层面都覆盖到了,俺的个娘啊,感觉就是要是这些东西用起来还要我们这些程序员干嘛,只要项目经理就行了,项目经理跟客户确认好需求,然后用普元的工具一通拖拽画出流程图,完了,这就完工了,流程图画出的同时我们的应用也能运行了,看效果吧,呵呵
貌似,做测试的也可以下岗了,因为每一步都是自动生成的,并且可以监控每一步的运行情况。
半天的培训下来,突然有种危机感,如果总经理真的决定在我们部门推行这个EOS系统,那我们岂不是离下岗不远啦?
程序员真不如民工喽。。。
自己的一点点理解 ,功力尚浅,呵呵,欢迎拍砖
忙里偷闲
一直想写一个blog程序
架子打起来了,用struts1.2+hibernate
如何为用户的url做转向,比如
http://www.blogjava.net/liuspring,怎样转向属于liuspring的文章、留言、评论啊等等,简单的说就是liuspring的页面,
这个问题可把我难住了(功力太浅),于是google上搜开源的blog系统,看他们的源码,首先下的
roller,费了好大劲把系统配起来了,运行起来那个高兴,接下来晕了,新版本是
struts2,还没研究过,看了一下好像struts2能很容易实现我要的,可是我用的是1.x啊,接着搜,
Pebble,
blojsom ,
DLOG4J ,
myblog,都试用了,其中
blojsom使用了一个servlet,在里面解析URI,比如请求的地址是/blog/spring/,那么就被解析成/blogView.do?go=spring,以这个地址转向,从而被struts的控制器接收。
这里得用(并且redirectURL必须是相对路径,用完整路径好像还不行,在我这报404错误)
1httpServletRequest.getRequestDispatcher(redirectURL.toString())
2 .forward((ServletRequest)httpServletRequest, (ServletResponse)httpServletResponse);
不能用
1httpServletResponse.sendRedirect(redirectURL.toString());
因为这样是使IE重定向,请求的URL也随之改变,这个圈儿就转不下去了。
又建立了一个过滤器,用以判断session中的用户是否是当前访问的博客的管理员,比如访问/blog/spring/,判断session中保存的用户是否是spring,然后往request,setAttribute中放一个标示,标示是否具有管理员权限,在jsp页面中获取这个参数以决定是否显示后台管理连接。
到这里,最基本,最挠头的问题暂时解决了,感觉肯定有更加方便、更加精妙、更加简单的方法,只是功力还没涉到那么深,哪位博友看到了不胜赐教,接下来还要攻克的,如何产生静态html页面,如何rss......