jeffy

BlogJava 首页 新随笔 联系 聚合 管理
  70 Posts :: 1 Stories :: 14 Comments :: 0 Trackbacks

#

  JIRA3.5.2

Jira 介绍

Jira 是集项目计划、任务分配、需求管理、错误跟踪于一体的商业软件。目前最新版本为 3.5.2 。下载地址: http://www.atlassian.com/software/jira ,要求注册为用户,选择 Enterprise 版本 atlassian-jira-enterprise-3.5.2-standalone.zip 下载。可以免费试用一个月,网上也有破解方法。方法就是反编译 genkey.class,  更改类包后,再编译执行。 Jira 默认数据库是 hsql 。在 3.1 版本不支持 JDK1.5 ,在 .3.5.2 已经支持 JDK1.5

Jira 安装

假使 JDK1.5.0.04 ,已经设置 JAVA_HOME 的环境变量。

安装 JIRA3.5.2+Tomcat5.0.28+ PostGreSQL 8.1

 1. 把下载的类包解压到 C:\jira3.5.2 目录。

 2. tomcat5.0.28 的目录下面 C:\jakarta-tomcat-5.0.28\conf\Catalina\localhost 添加一个 jira.xml, 内容如下:

<Context path="/jira" docBase="C:\jira3.5.2\atlassian-jira" debug="0" reload="true" reloadable="true">   //  其中 /jira url 的路径, docBase jira web 目录

<Resource name="jdbc/JiraDS" auth="Container" type="javax.sql.DataSource"/>

    <ResourceParams name="jdbc/JiraDS">

          <parameter>

              <name>driverClassName</name>

           <!-- NOTE: if you change the database type, you will need to change it in atlassian-jira/WEB-INF/classes/entityengine.xml -->

                <value>org.postgresql.Driver</value>  //PG 的驱动设置

          </parameter>

          <parameter>

                <name>url</name>

                <value>jdbc:postgresql://localhost/Jira</value> //jdbc:url 设置

            </parameter>

            <parameter>

                 <name>username</name>

                 <value>Administrator</value>    // 访问 PG 数据库的用户名

            </parameter>

            <parameter>

                  <name>password</name>

                  <value>55555555</value>      // 访问 PG 数据库的 password

             </parameter>

 

         <!-- NOTE: If NOT using hsqldb, comment next two parameters out -->

             <!-- Give unused connections 4 secs before eviction. -->

               <parameter>

                   <name>minEvictableIdleTimeMillis</name>

                     <value>4000</value>

                 </parameter>

             <!-- Check for evictions every 5 secs. -->

                <parameter>

                     <name>timeBetweenEvictionRunsMillis</name>

                     <value>5000</value>

                 </parameter>

 

         <parameter>

                  <name>factory</name>

<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>

          </parameter>

                   </ResourceParams>

                    <Resource name="UserTransaction" auth="Container" type="javax.transaction.UserTransaction"/>

                      <ResourceParams name="UserTransaction">

                        <parameter>

                            <name>factory</name>

                            <value>org.objectweb.jotm.UserTransactionFactory</value>

                        </parameter>

                        <parameter>

                            <name>jotm.timeout</name>

                            <value>60</value>

                        </parameter>

                    </ResourceParams>

</Context>

 

3. 修改 Jira 的数据库配置文件 : C:\jira3.5.2 \atlassian-jira\WEB-INF\classes\entityengine.xml ,把数据库类型改为 PG

  <datasource name="defaultDS" field-type-name="postgres72"  schema-name="public"

(pg 版本是 8.1 ,需要 type-name postgres72 )

4. PG jdbc 驱动 postgresql-8.1-404.jdbc3.jar  拷贝到 Tomcat5.0.28 common\lib 目录下面。比较 C:\jira3.5.2\common\lib 下面的类包与 Tomcat5.0.28 common\lib 目录下面的类包,如果 Tomcat5.0.28 common\lib 目录下面缺少,就从 C:\jira3.5.2\common\lib 下面 copy 过来。

5. 点击 Tomcat5.0.28 bin 目录下面的 startup.bat, 开始运行 jira3.5.2

启动之后, IE 中输入 http://localhost:8080/jira 正常情况就能启动,它会提示你要求输入 License Key, 把破解的 license key 输入即可。

posted @ 2006-03-23 13:51 Live-in Java 阅读(451) | 评论 (0)编辑 收藏

     摘要: 1、快速入门 (1)模板 + 数据模型 = 输出 l         FreeMarker基于设计者和程序员是具有不同专业技能的不同个体的观念 l         他们是分工劳动的:设计者专注于表示——创建HTML文件、图片、W...  阅读全文
posted @ 2006-03-02 17:17 Live-in Java 阅读(413) | 评论 (0)编辑 收藏

     摘要: 一、Axis安装1.测试环境    JDK 1.5    Servlet Container: Tomcat 5.5 2.下载地址:http://ws.apache.org/axis/3.解压缩安装包,将$AXIS_UNZIP_PATH\axis-version\webapps下的axis包拷贝到$TOMCAT_HOME\web...  阅读全文
posted @ 2006-03-02 17:08 Live-in Java 阅读(551) | 评论 (0)编辑 收藏

. 综述
0.1 目标
配置一个可扩展、高可用、有负载均衡和错误恢复的 Tomcat 集群

0.2 许可协议
GNU Free Documentation License 允许任意转载,但请保持本文档的完整性如有修改,务请通知作者

1. 下载
1.1
Tomcat
1.2 Tomcat 会话复制库

2. 安装
2.1 第一个 Tomcat

    $tar vfxz jakarta-tomcat-4.1.27.tar.gz
    $cp -R jakarta-tomcat-4.1.27 /www/server/tomcat1

2.2 第二个 Tomcat
# 暂时不安装,等配置好的一个 Tomcat 后,直接复制得到副本,在副本的基础上修改得到

2.3 JK2
# 请参考
《Linux 下安装支持 JSP/PHP 的 WEB server》一文编译.

3. 配置
3.1 Apache 的 JK2 配置文件 workers2.properties
# 这个是 Apache 的 JK2 配置文件,位于 Apache 安装目录下的 conf 目录中,如果原来没有这个文件,新建一个
# 内容如下

$vi workers2.properties
    [shm]
    file=${serverRoot}/logs/shm.file
    size=1048576
 
    # First Tomcat
    [channel.socket:tomcat1]
    port=11009
    host=127.0.0.1
 
    [ajp13:tomcat1]
    channel=channel.socket:tomcat1
 
    # Second Tomcat
    [channel.socket:tomcat2]
    port=12009
    host=127.0.0.1
 
    [ajp13:tomcat2]
    channel=channel.socket:tomcat2
 
    # Load Balance
    [lb:lb1]
    worker=ajp13:tomcat1
    worker=ajp13:tomcat2
 
    # Uri mapping
    [uri:/*.jsp]
    group=lb:lb1

3.2 第一个 Tomcat 的 JK2 配置文件 jk2.properties
# 这个是第一个 Tomcat 的 JK2 配置文件,位于第一个 Tomcat 安装目录下的 conf 目录中
# 找到 channelSocket.port=8009
# 取消注释,并修改为

    channelSocket.port=11009

3.3 第一个 Tomcat 的配置文件 server.xml
# 这个是第一个 Tomcat 的配置文件,位于第一个 Tomcat 安装目录下的 conf 目录中
# 找到

    <Server port="8005" shutdown="SHUTDOWN" debug="0">

# 修改为

    <Server port="11005" shutdown="SHUTDOWN" debug="0">

# 开启 JK2 AJP connector,关闭其它 connector (也就是把其它的 connector 删除或注释掉)
#
修改 JK2 AJP connector 的端口为 11009,修改后的 connector 可能会象下面的样子

    <Connector className="org.apache.ajp.tomcat4.Ajp13Connector"
        port="11009"
        minProcessors="5"
        maxProcessors="75"
        acceptCount="10"
        debug="0"/>

# 为需要集群支持的 webapp context,添加如下manager

    <Valve className="org.apache.catalina.session.ReplicationValve"
        filter=".*\.gif;.*\.jpg;.*\.jpeg;.*\.js"
        debug="0"/>
    <Manager className="org.apache.catalina.session.InMemoryReplicationManager"
        debug="10"
        printToScreen="true"
        saveOnRestart="false"
        maxActiveSessions="-1"
        minIdleSwap="-1"
        maxIdleSwap="-1"
        maxIdleBackup="-1"
        pathname="null"
        printSessionInfo="true"
        checkInterval="10"
        expireSessionsOnShutdown="false"
        serviceclass="org.apache.catalina.cluster.mcast.McastService"
        mcastAddr="228.1.2.3"
        mcastPort="45566"
        mcastFrequency="500"
        mcastDropTime="5000"
        tcpListenAddress="auto"
        tcpListenPort="4001"
        tcpSelectorTimeout="100"
        tcpThreadCount="2"
        useDirtyFlag="true">
        </Manager>

3.4 第一个 Tomcat 的启动脚本 catalina.sh
# 这个是第一个 Tomcat 的 启动脚本,位于第一个 Tomcat 安装目录下的 bin 目录中
# 添加启动环境变量如下

    JAVA_HOME=/usr/java/jdk
      CATALINA_HOME=/www/server/tomcat1

# 此处的 JAVA_HOME 指向系统实际安装 JDK 的路径
#
此处的 CATALINA_HOME 指向第一个 Tomcat 的安装路径

3.5 由第一个 Tomcat 复制得到第二个 Tomcat

    cp -R tomcat1 tomcat2

3.6 第二个 Tomcat 的 JK2 配置文件 jk2.properties
# 参考 3.2
# 修改 channelSocket.port 为

    channelSocket.port=12009

# 注意和第一个 Tomcat 的差别

3.7 第二个 Tomcat 的配置文件 server.xml
# 参考 3.3
# 修改关闭端口为

    <Server port="12005" shutdown="SHUTDOWN" debug="0">

# 修改 JK2 AJP connector 的端口为 12009,修改后的 connector 可能会象下面的样子

    <Connector className="org.apache.ajp.tomcat4.Ajp13Connector"
        port="12009"
        minProcessors="5"
        maxProcessors="75"
        acceptCount="10"
        debug="0"/>

# 注意和第一个 Tomcat 的差别

3.8 第二个 Tomcat 的启动脚本 catalina.sh
# 参考 3.4
# 添加启动环境变量如下

    JAVA_HOME=/usr/java/jdk
      CATALINA_HOME=/www/server/tomcat2

# 此处的 JAVA_HOME 指向系统实际安装 JDK 的路径
#
此处的 CATALINA_HOME 指向第二个 Tomcat 的安装路径
#
注意和第一个 Tomcat 的差别

4. 完成
4.1 重起 Apache

     $apache/bin/apachectl graceful

4.2 启动第一个 Tomcat

     $tomcat1/bin/catalina.sh start

4.3 启动第二个 Tomcat

     $tomcat2/bin/catalina.sh start

5. 参考文献
http://www-900.ibm.com/developerWorks/cn/java/l-jetspeed/
http://www.filip.net/tomcat/
(申明:本文来源于网络,摘录于此,仅为日后方便查看)

posted @ 2006-03-02 17:05 Live-in Java 阅读(258) | 评论 (0)编辑 收藏

扬子江:http://blog.video.com.cn/andy/subject/177.shtml
posted @ 2006-03-02 16:21 Live-in Java 阅读(238) | 评论 (0)编辑 收藏

WebWork项目建立在XWork项目上。入口Servlet是WebWork项目中定义的ServletDispatcher,而Action在XWork项目中定义。
XWork Action接口的execute()方法没有参数,不像Struts Action那样接受request, response参数,所以XWork Action能够脱离Web环境被直接调用,便于单元测试。
这里引入了一个问题。没有了request参数,那么XWork Action如何获得request parameters作为输入数据?又通过什么桥梁(Struts用request.setAttribute)把结果数据传送到View层?
在Web Work中,只能通过Action本身的getter, setter属性来传送输入参数和输出结果。
比如,我们有这样一个实现了XWork Action接口的类,


YourAction implements Action{
int productId = null;
String productName = null;
public void setProductId(int productId){this.productId = productId;}
public String getProductName(){return productName;}
public String execute(){
productName = findNameById(productId);
return “success”;
}
}
这个类里面的productId将接受request输入参数,productName是输出到页面显示的结果。
比如,这样的请求,http://yourhost/yourapp/MyAction.action?productId=1
Web Work会把1填到YourAction的productId里面,然后执行execute()方法,JSP里的语句<ww:property value=“productName”>会把YourAction的productName显示在页面上。

如果一个Web Framework采用了这种屏蔽Action的request, response参数的设计方式,一般也同时会采用这种Action和输入输出数据结合成一体的解决方式。类似的情形也存在于Tapestry和Maverick中,后面会讲到。

当WebWork ServletDispatcher接收到HTTP Request的时候,首先把所有相关的信息(包括request, response, session, servlet config, servelt context, 所有request参数)等存放到AcationContext中,然后根据Interceptor配置信息,生成一个YourAction的动态代理类对象。实际上运行的正是这个代理对象,如同Servlet Filter的工作机制一般,所有注入的Interceptor方法会先于Actio方法运行。

我们来看一下Action和Interceptor的地位:Action没有参数,无法获得ActionContext;而Interceptor接受的ActionInvoication参数拥有包括ActionContext在内的所有重要信息。
这种权力分配的不平等,注定了Action的作用非常有限,只限于调用商业逻辑,然后返回一个成功与否标志。所有与外部Web世界打交道、协调内部工作流程的重担,都责无旁贷地落在Interceptor的肩上。
我们可以设想一个极端的例子。我们声明一批不做任何事情的空Action,我们只是需要它们的空壳类名;我们制作一批对应的Interceptor,所有的转发控制、商业逻辑都在Interceptor上实现,然后把Interceptor都注入到对应的空Action。这在理论上是完全可行的。
在Web海洋的包围中,Action可少,Interceptor不可少。Action是一个孤岛,如果没有外来盟友Interceptor的协助,只能在自己的小范围内独立作战(比如Unit Test),而对整体大局的作战目标无法产生影响。
下面我们来看一下Action是如何在Interceptor的全程监管下工作的。
在WebWork中,我们需要如下配置XWork.xml。
<xwork>

<!-- Include webwork defaults (from WebWork-2.1 JAR). -->
<include file="webwork-default.xml" />
<!-- Configuration for the default package. -->
<package name="default" extends="webwork-default">
<!-- Default interceptor stack. -->
<default-interceptor-ref name=" defaultStack" />
<!-- Action: YourAction. -->
<action name="youraction" class="yourapp.YourAction">
<result name="success" type="dispatcher">
YourAction.jsp
</result>
</action>
</package>
</xwork>

webwork-default.xml里面的相关定义如下:
<interceptors>
<interceptor name="validation" class="com.opensymphony.xwork.validator.ValidationInterceptor"/>
<interceptor name="static-params" class="com.opensymphony.xwork.interceptor.
StaticParametersInterceptor"/>
<interceptor name="params" class="com.opensymphony.xwork.interceptor.ParametersInterceptor "/>
<interceptor name="conversionError" class="com.opensymphony.webwork.interceptor.
WebWorkConversionErrorInterceptor"/>
<interceptor-stack name="defaultStack">
  <interceptor-ref name="static-params"/>
  <interceptor-ref name="params"/>
  <interceptor-ref name="conversionError"/>
</interceptor-stack>
</interceptors>

从上述的配置信息中可以看出,YourAction执行execute()方法的前后,会被
defaultStack所定义的三个Intercepter截获。这些Interceptor的任务之一就是把输入参数设置到Action的对应属性当中。
如果我们需要加入对YourAction的属性的验证功能,只要把上述定义中的validation Interceptor加入到defaultStack中就可以了。当然,实际工作还没有这么简单,一般来说,还要为每个进行属性验证的Action的都配置一份validation.xml。
XWork Interceptor能够在Package和Action级别上,进行截获处理。
Servlet Filter能够在URL Patten级别上,进行截获处理。虽然实际上,Servlet Filter截获的是Servlet,但某些情况下,可以达到和截获一批Action的同样效果。
比如,在Web Work中,我们可以为所有admin package的Action,加入一个Interceptor,当检查到当前Session的用户没有admin权限时,统一返回一个警告页面:您没有足够的权限执行这个操作。
我们看到也可以为所有URL Pattern为“admin/*.action”的URL定义一个Servlet Filter,当检查到当前Session的用户没有admin权限时,统一返回一个警告页面:您没有足够的权限执行这个操作。
WebWork的Interceptor配置是相当灵活的,相当于对Action实现了AOP。Interceptor相当于Aspect,基类AroundInterceptor的before(), after()方法相当于Advice。
另外,XWork也提供了从XML配置文件装配Component的机制,相当于实现了对于Component的IoC。
 
                                                               (申明:本文来源于网络,摘录于此,仅为日后方便查看)
posted @ 2006-03-02 16:02 Live-in Java 阅读(967) | 评论 (0)编辑 收藏

    和Webwork1.x不同,Webwork2的Action执行完后,其Result对应一个 Result Type,而这个Result Type完全可以根据具体应用或环境自己进行 定义,只需实现com.opensymphony.xwork.Result接口。Result Type使得Action的执行结果表现形式可以灵活多变!下面这会举例说明,这里先看看Webwork2提供的几种Result Type的定义,该定义在webwork-default.xml中,xwork.xml文件包含了该文件,自定义的Result Type可以直接写在 xwork.xml中:
  <result-types>
    <result-type name="dispatcher" class="com.opensymphony.webwork.dispatcher.ServletDispatcherResult" default="true"/>
    <result-type name="redirect" class="com.opensymphony.webwork.dispatcher.ServletRedirectResult"/>
    <result-type name="velocity" class="com.opensymphony.webwork.dispatcher.VelocityResult"/>
    <result-type name="chain" class="com.opensymphony.xwork.ActionChainResult"/>
    <result-type name="xslt" class="com.opensymphony.webwork.views.xslt.XSLTResult"/>
    <result-type name="jasper" class="com.opensymphony.webwork.views.jasperreports.JasperReportsResult"/>
    <result-type name="freemarker" class="com.opensymphony.webwork.views.freemarker.FreemarkerResult"/>
  </result-types>
  其大多都有location和parse两个参数,location指明action执行后接着去哪里,parse指明是否对location进行OGNL表达式解析。
 
  1) dispatcher
    action执行完后,请求会导向对应的View,Webwork2幕后其实是用RequestDispatcher来处理的,所以原Request/Response对象会接着传递,原Request中的Atrributes不会丢失,这点与下面的redirect是不同的。
 
  2) redirect
    对上次的响应将重定向到指定的位置,redirect是重新产生一个新的Request,原来Request保存的东西将不再有效,比如不能通过requet.getAtrribute 取得原来set的对象,也不能取得action的实例,errors,field errors等,因为Action是建立在Single-thread model上的。

  3) chain
    action链,特殊的View调用方式,一个action执行完接着调用另一个action。有个必须的参数actionName,指明紧接着调用的另一action对象。如:
    <result name="success" type="chain">
        <param name="actionName">bar</param>
        <param name="namespace">/foo</param>
    </result>
  执行后接着调用下面的action:
    <action name="bar" class="myPackage.barAction">
        ...
    </action>

  4) velocity
  5) freemarker
  6) jasperreports
  7) xslt
    以上都是用不同技术的产生不同的View。

  下面我举个自定义Result Type的示例,假如我有个Action testSendmail,根据处理结果将给指用户发送一份email。自定义一个Result Type,实现Result接口。
   
    com.mycompany.webwork.example.SendmailResult
    有三个必须参数:from ,to, subject,一个可选参数 body。
  在xwork.xml中定义如下:
  <result-types>
    <result-type name="sendmail" class="com.mycompany.webwork.example.SendmailResult"/>
  </result-types>
 
  action定义:
  <action name="testSendmail" class="com.mycompany.webwork.example.TestSendMailAction">
    <result name="success" type="sendmail">
        <param name="from">root@sina.com</param>
        <param name="to">user@sina.com</param>
        <param name="subject">hello,webwork!</param>
    </result>
    <result name="error" type="dispatcher">
        <param name="location">error.jsp</param>
    </result>
  </action>
 
  SendmailResult.java

  package com.opensymphony.webwork.example;

  import com.opensymphony.xwork.ActionInvocation;
  import com.opensymphony.xwork.Result;

  public class SendmailResult implements Result {
    private String to;
    private String from;
    private String subject;
    private String body;

    public void execute(ActionInvocation invocation) throws Exception {
    //TODO 实现Email发送部分
    System.out.println("sending mail....");
    System.out.println("   To:" + to);
    System.out.println("   From:" + from);
    System.out.println("Subject:" + subject);
    }

    public String getBody() {
    return body;
    }

    public void setBody(String body) {
    this.body = body;
    }

    public String getFrom() {
    return from;
    }

    public void setFrom(String from) {
    this.from = from;
    }

    public String getSubject() {
    return subject;
    }

    public void setSubject(String subject) {
    this.subject = subject;
    }

    public String getTo() {
    return to;
    }

    public void setTo(String to) {
    this.to = to;
    }
  }

  写个简单的测试Action:
  package com.opensymphony.webwork.example;
 
  import com.opensymphony.xwork.ActionSupport;

  public class TestSendMailAction extends ActionSupport {
    public String execute() throws Exception {
      return SUCCESS;
    }
  }

  测试jsp,把它放在webwork-example/下:

  testsendmail.jsp

  <%@ taglib prefix="ww" uri="webwork" %>
  <html>
  <head><title>Test sendmail restul type</title></head>
  <body>
 
  <form action="testSendmail.action">
    <input type="Submit" value="Submit"/>
  </form>
  </body>
  </html>

         (申明:本文来源于网络,摘录于此,仅为日后方便查看)
posted @ 2006-03-02 15:45 Live-in Java 阅读(1752) | 评论 (0)编辑 收藏

     摘要: 在osworkflow中最最核心的东西就是工作流定义的xml文件。尽管它并不是一定要定义成xml文件。但是xml格式是一种标准的通用的格式。OSWorkflow引擎只负责了“流程的运转”,当然这个运转会根据你所定义的Action和condtion来判断。 这个xml文件为某一个给定的工作流进行描述steps、states,transitions,和functionality。下面阐述一下此xml...  阅读全文
posted @ 2006-03-02 11:48 Live-in Java 阅读(985) | 评论 (0)编辑 收藏

银狐999:http://blog.csdn.net/james999/archive/2004/10/29/158653.aspx
gigix:          http://gigix.blogdriver.com/gigix/113138.html  
http://dev2dev.bea.com.cn/bbs/jishudata/ArticleShow.jsp?Id=12#4_1_2

posted @ 2006-03-02 10:12 Live-in Java 阅读(196) | 评论 (0)编辑 收藏

OGNL(Object Graph Navigation Language)TapestryOGNL结合的很完美。OGNL是一种Java表达式语言,它被用来读取和更新对象的属性。OGNL比建立在JSP2.0标签库之上的表达式语言更简单功能也更强大。OGNL不仅仅提供属性的访问,它包括了精确的表达式和方法的调用。也能访问类的静态域。也可以创建新的对象,包括ListMap对象。简单的OGNL表达式是属性的名字。如:foo,这就等同于调用了方法getFoo()(或者是setFoo()如果表达式是用来更新属性的)。当属性的名字是连续的属性名时,导航功能就起作用了。如:foo.bar.baz,它就等于getFoo().getBar().getBaz() 。不过要注意的是foobar这些属性不能为空。 OGNL允许两个对象(如页和页所包含的组件)来共享信息。

posted @ 2006-03-01 11:43 Live-in Java 阅读(1422) | 评论 (1)编辑 收藏

仅列出标题
共7页: 上一页 1 2 3 4 5 6 7 下一页