posts - 36, comments - 30, trackbacks - 0, articles - 3

     摘要: 要实现向编辑器增加活动,我们应该在面板上选一种活动(开始活动,普通活动,结束活动),拖到编辑器中。为此我们必须在面板和编辑器中分别加监听。修改WorkflowProcessEditor类 在编辑器的GraphicalViewer加监听 protectedvoid initializeGraphicalViewer() {     ...  阅读全文

posted @ 2008-01-04 08:49 笑看人生 阅读(1384) | 评论 (0)编辑 收藏

     摘要:     为了实现流程编辑器,光有我们建立的模型,控制器和视图还不够,我们还必须新建一个编辑器类,为此,我们要新建一个插件项目,我们新建的插件项目com.example.workflow结构如下:     为了实现一个编辑器,我们必须扩展org.eclipse.ui.editors这个扩展点,这个可...  阅读全文

posted @ 2008-01-03 08:54 笑看人生 阅读(2838) | 评论 (3)编辑 收藏

     摘要:     这一节,我们讲控制器的设计,在gef框架中,控制器作为连接模型和视图的桥梁,它主要根据用户的操作来修改模型,并且刷新视图。在前面我们定义了流程模型(WorkflowProcess),活动模型(AbstractActivity),转移模型(Transition),在这里我们分别定义相应的控制器(EditPart),首先我们定义流程模型对应的控制器(Wo...  阅读全文

posted @ 2008-01-02 16:51 笑看人生 阅读(900) | 评论 (0)编辑 收藏

     摘要:     我自从进入公司后,一直从事有关gef方面的开发工作,在这期间,走过不少弯路,仅仅是把GEF框架弄明白,就费了很大力气,所以,现在想写一点东西出来,供初学者阅读。     GEF(Graphical Editing Framework)是图形化编辑器开发的工具,比较典型的应用就是IBM 的Rose,它是一个...  阅读全文

posted @ 2008-01-02 15:32 笑看人生 阅读(3504) | 评论 (5)编辑 收藏

在二的基础上,我们再给这个简单web应用增加声明式事务,声明式事务原来是EJB所引以为自豪的地方,现如今Spring框架的AOP也支持这功能,关于AOP的内容,这儿不想太深入,有兴趣的读者,可以参见本blog上有关Spring AOP方面的介绍,为了增加声明式事务,我们只需修改Spring的配置文件applicationContext.xml,

1.首先我们在配置文件中增加事务管理器,由于本应用采用了Hibernate,所以我们采用HibernateTransactionManager,配置如下:

1<bean  id="transactionManager" 
2class="org.springframework.orm.hibernate.HibernateTransactionManager">
3    <property name="sessionFactory">
4      <ref local="sessionFactory"/>
5    </property>
6 </bean>

2.要在Sping使用声明式事务,我们得用TransactionProxyFactoryBean,它的作用就是把方法包裹在事务中,配置如下:

 1<bean id="bookService" 
 2class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
 3    <property name="transactionManager">
 4      <ref local="transactionManager"/>
 5    </property>
 6    <property name="target">
 7      <ref local=" registerTarget"/>
 8    </property>
 9    <property name="transactionAttributes">
10      <props>
11    <prop key="save*">
12PROPAGATION_REQUIRED,-OrderException 
13</prop>
14      </props>
15    </property>
16 </bean>
17

下面我们简单解释一下上面配置的意思:transactionManager属性引用一个事务管理器,在这里我们引用HibernateTransactionManager,target属性指定被代理的对象,transactionAttributes属性的save*表示在代理对象中所有以save开头的方法,PROPAGATION_REQUIRED表示代理对象中所有以save开头的方法都必须在事务中运行,-OrderException表示在执行以save开头的方法时,如果有OrderException异常抛出,则事务立即回滚。

完整的applicationContext.xml的配置如下:

 1<?xml version="1.0" encoding="UTF-8"?>
 2<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
 3 
 4<beans>    
 5 
 6    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
 7       <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
 8       <property name="url" value="jdbc:mysql://localhost/register"/>
 9       <property name="username" value="root"/>
10       <property name="password" value="root"/>
11    </bean>    
12 
13    <!-- Hibernate SessionFactory -->
14    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
15       <property name="dataSource" ref="dataSource"/>
16       <property name="mappingDirectoryLocations">
17           <value>classpath:test\register\entity\</value>
18       </property>
19       <property name="hibernateProperties">
20           <props>
21              <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
22              <prop key="hibernate.show_sql">true</prop>
23              <prop key="hibernate.generate_statistics">true</prop>
24           </props>
25       </property>       
26    </bean>    
27    
28    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
29    <property name="sessionFactory">
30      <ref local="sessionFactory"/>
31    </property>
32 </bean>
33 
34   <bean id="registerService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
35    <property name="transactionManager">
36      <ref local="transactionManager"/>
37    </property>
38    <property name="target">
39      <ref local=" registerTarget"/>
40    </property>
41    <property name="transactionAttributes">
42      <props>        
43        <prop key="save*">PROPAGATION_REQUIRED,-OrderException</prop>
44      </props>
45    </property>
46 </bean>
47 
48   <bean id="registerDAO" class="test.register.dao.RegisterDAO">
49        <property name="sessionFactory" ref="sessionFactory"/>       
50 </bean>
51 
52   <bean id="registerTarget" class="test.register.service.RegisterService">
53        <property name="registerDAO" ref="registerDAO"/>      
54 </bean> 
55 
56</beans>
57

3.同时还要修改action-servlets.xml文件

1<?xml version="1.0" encoding="UTF-8"?>
2<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
3<beans>    
4    <bean name="/register" 
5class="test.register.action.RegisterAction">
6       <property name="registerService" ref="registerTarget"/>     
7    </bean>     
8</beans>
9




posted @ 2008-01-02 10:11 笑看人生 阅读(454) | 评论 (0)编辑 收藏

1.我们已经搭建完了基本框架,接下来加入日志功能,只需修改原来的web.xml,增加一些配置信息:

 1<!--通知Spring Log4j配置文件的位置 -->
 2<context-param>
 3    <param-name>log4jConfigLocation</param-name>
 4    <param-value>/WEB-INF/log4j.properties</param-value>
 5</context-param>
 6 
 7<!--Spring默认刷新Log4j配置文件的间隔,单位为millisecond-->
 8<context-param>
 9    <param-name>log4jRefreshInterval</param-name>
10    <param-value>60000</param-value>
11</context-param>
12 
13<!--在应用启动时,由Spring负责加载Log4j-->
14<listener>
15    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
16</listener>

2.接下来我们定义log4j.properties

 1# Global logging configuration
 2log4j.rootLogger=DEBUG,console,file
 3 
 4## APPENDERS ##
 5# define an appender named console, which is set to be a ConsoleAppender
 6log4j.appender.console=org.apache.log4j.ConsoleAppender
 7 
 8# define an appender named file, which is set to be a RollingFileAppender
 9log4j.appender.file=org.apache.log4j.RollingFileAppender
10# replace <CATALINA_HOME> with your true path
11log4j.appender.file.File=D:/eclipse/workspace/login/log.txt
12 
13## LAYOUTS ##
14# assign a SimpleLayout to console appender
15log4j.appender.console.layout=org.apache.log4j.SimpleLayout
16 
17# assign a PatternLayout to file appender
18log4j.appender.file.layout=org.apache.log4j.PatternLayout
19log4j.appender.file.layout.ConversionPattern=%t%p-%m%n

在log4j.properties中,我们定义了日志级别是DEBUG,日志信息输出目的地是控制台(console)和文件(file)。

3.这样我们就可以在程序代码中进行日志操作了:

 1package test.register.action;
 2 
 3import javax.servlet.http.HttpServletRequest;
 4import javax.servlet.http.HttpServletResponse;
 5 
 6import org.apache.log4j.LogManager;
 7import org.apache.log4j.Logger;
 8import org.apache.struts.action.Action;
 9import org.apache.struts.action.ActionForm;
10import org.apache.struts.action.ActionForward;
11import org.apache.struts.action.ActionMapping;
12import org.apache.struts.action.DynaActionForm;
13 
14import test.register.entity.Register;
15import test.register.service.RegisterService;
16 
17public class RegisterAction extends Action{
18       
19       private static final Logger log = LogManager.getLogger(RegisterAction.class);
20       
21       private RegisterService registerService;
22 
23       public RegisterService getRegisterService() {
24              return registerService;
25       }

26 
27       public void setRegisterService(RegisterService registerService) {
28              this.registerService = registerService;
29       }

30 
31       public ActionForward execute(ActionMapping mapping,
32                                                               ActionForm form, 
33                                                 HttpServletRequest request, 
34                                    HttpServletResponse response) 
35       throws Exception {
36              log.info("save register");
37              Register r = (Register)((DynaActionForm)form).get("register"); 
38              getRegisterService().saveRegister(r);           
39              return mapping.findForward("success");
40       }
     
41       
42}

4.在上面log4j.properties中,我们指定日志输入文件用了绝对路径,这在很多时候不方便,为此我们作如下修改:在web.xml中增加一个上下文参数

1<context-param>
2    <param-name>webAppRootKey</param-name>
3    <param-value>webLogin.root</param-value>
4</context-param>

增加系统变量,变量名为webAppRootKey,变量值可以指定应用部署的目录,这样就可以在log4j.properties对日志输出的文件路径作如下修改:

log4j.appender.file.File=${webLogin.root}/log.txt


posted @ 2008-01-02 10:06 笑看人生 阅读(565) | 评论 (0)编辑 收藏

     摘要: 这个Web应用很简单,就是实现一个用户注册页面,当用户在register.jsp页面输入注册信息,点保存,如果成功,进入registerSuccess.jsp页面。这个应用虽然很小,但它也有三层组成,表示层由Struts框架负责,业务层由Spring框架负责,持久层由Hibernate框架负责。 开发环境:MyEclipse 5+ MySQL4 + Struts1.3.5 + Spring2.0...  阅读全文

posted @ 2008-01-02 09:43 笑看人生 阅读(1927) | 评论 (0)编辑 收藏

仅列出标题
共4页: 上一页 1 2 3 4