grubby's profile叮叮的小屋...有点漏雨PhotosBlogLists Tools Help

Blog


    November 29

    Spring 2.5 Released

    Summary
    New features include annotation-based dependency injection, auto-detection of Spring components on the classpath via annotations, annotation support for lifecycle methods, a new web controller model for routing requests to annotated methods, a JUnit 4 and TestNG-based integration test framework, and additions to the Spring XML namespaces.

    The Spring project released version 2.5 of the popular enterprise Java framework. New features include full support for Java 6, JDBC 4, JAX-WS-2.0, annotation-based dependency injection, auto-detection of components in the classpath, including the ability to automatically configure those components as Spring managed objects, new AOP features, and many enhancements in the Web tier.

    Additional notable new features include:

    • A new bean name pointcut element in AspectJ pointcut expressions
    • Built-in support for AspectJ load-time weaving based on the LoadTimeWeaver abstraction
    • New XML configuration namespaces "context" and "jms", for maximum convenience
    • A completely revised integration test framework, with first-class support for JUnit 4 and TestNG
    • A new annotation-based controller model for Spring MVC supporting Servlet and Portlet environments
    • Extended SimpleJdbcTemplate functionality, including support for named SQL parameters
    • Officially certified WebSphere support
    • The packaging of Spring Framework jars as OSGi-compliant bundles out of the box
    • The ability to deploy a Spring ApplicationContext as a JCA RAR file, for headless application modules
    • JCA 1.5 message endpoint management, for Spring-managed JMS and CCI message listeners

    What are your favorite new Spring 2.5 features?

    November 27

    Struts1.3.8+Spring2.0+Hibernate3.2+JPA+Transaction Annotation集成

    For integrating Spring2.o into our system, based on recent research , I just make some notes in my site,

    If any problems or mistake please give me clues. :)

     

    Here I ignored the preparations for java library. Please download the required jar from web site.

    1.struts-config.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts-config PUBLIC
      "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
      "http://struts.apache.org/dtds/struts-config_1_3.dtd"
    >
    <struts-config>
        <action-mappings>
            <!--<action path="/user/login" scope="request" type="com.gemini.vms.action.UserLoginAction" />-->
            <action path="/user/login" scope="request" type="org.springframework.web.struts.DelegatingActionProxy" />

        </action-mappings>
    </struts-config>

    Note:If the struts initial failed , make sure your *.jar is right. I have had got the error messages.

     

    2.Spring applicationContext.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:tx="http://www.springframework.org/schema/tx"
           xsi:schemaLocation="
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
        <bean id="sessionFactory"
            class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
            <property name="annotatedClasses">
                <list>
                    <value>com.gemini.vms.pojo.Alert</value>
                    <value>com.gemini.vms.pojo.Attachment</value>
                    <value>com.gemini.vms.pojo.Authority</value>
                    <value>com.gemini.vms.pojo.Candidate</value>
                    <value>com.gemini.vms.pojo.CandidateForRequirement</value>
                    <value>com.gemini.vms.pojo.CodeString</value>
                    <value>com.gemini.vms.pojo.Company</value>
                    <value>com.gemini.vms.pojo.Department</value>
                    <value>com.gemini.vms.pojo.DataTransitionMap</value>
                    <value>com.gemini.vms.pojo.DynamicForm</value>
                    <value>com.gemini.vms.pojo.DynamicFormFieldDefine</value>
                    <value>com.gemini.vms.pojo.DynamicFormGroup</value>
                    <value>com.gemini.vms.pojo.EmailQueue</value>
                    <value>com.gemini.vms.pojo.Engagement</value>
                    <value>com.gemini.vms.pojo.FeedBack</value>
                    <value>com.gemini.vms.pojo.FormValues</value>
                    <value>com.gemini.vms.pojo.InterView</value>
                    <value>com.gemini.vms.pojo.InterViewArrangement</value>
                    <value>com.gemini.vms.pojo.Ratecard</value>
                    <value>com.gemini.vms.pojo.RatecardMap</value>
                    <value>com.gemini.vms.pojo.FeedBack</value>
                    <value>com.gemini.vms.pojo.VmsLog</value>
                    <value>com.gemini.vms.pojo.VmsUser</value>
                </list>
            </property>
            <property name="annotatedPackages">
                <list>
                    <value>com.gemini.vms.pojo</value>
                </list>
            </property>
            <property name="hibernateProperties">
                <props>
                    <prop key="hibernate.dialect">
                        org.hibernate.dialect.MySQLDialect
                    </prop>
                    <prop key="hibernate.show_sql">true</prop>
                    <prop key="hibernate.cglib.use_reflection_optimizer">    true</prop>
                    <prop key="hibernate.proxool.xml">proxoolconf.xml</prop>
                    <prop key="hibernate.proxool.pool_alias">proxoolPool</prop>
                    <prop key="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</prop>
                </props>
            </property>
        </bean>
        <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
            <property name="sessionFactory" ref="sessionFactory"/>
        </bean>
        <!-- This Bean for DAO added hibernate transaction manager-->
        <!-- 
        <bean id="bookDaoTarget" class="com.jdg.spring.demo.jdbc.hibernate.HibernateTemplateBookDao">
            <property name="sessionFactory" ref="sessionFactory"/>
        </bean>
        <bean id="bookDao" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
            <property name="target" ref="bookDaoTarget"/>
            <property name="transactionManager" ref="transactionManager"/>
            <property name="transactionAttributes">
                <props>
                    <prop key="query*">PROPAGATION_REQUIRED,readOnly</prop>
                    <prop key="*">PROPAGATION_REQUIRED</prop>
                </props>
            </property>
        </bean>
        -->
        <!-- This configuration make spring support JPA transcation -->
        <tx:annotation-driven transaction-manager="transactionManager"/>
        <!-- Data Access Object Define -->
        <bean id="userDao" class="com.gemini.vms.dao.impl.UserDaoImpl">
            <property name="sessionFactory" ref="sessionFactory"/>
        </bean>
        <bean id="companyDao" class="com.gemini.vms.dao.impl.CompanyDaoImpl">
            <property name="sessionFactory" ref="sessionFactory"/>
        </bean>
        <bean id="emailQueueDao" class="com.gemini.vms.dao.impl.EmailQueueDaoImpl">
            <property name="sessionFactory" ref="sessionFactory"/>
        </bean>
        <!-- Service Model Define -->
        <bean id="emailBo" class="com.gemini.vms.bo.impl.EmailBoImpl">
            <property name="userDao" ref="userDao"/>
            <property name="emailQueueDao" ref="emailQueueDao"/>
            <property name="mailUtil" ref="mailUtil"/>
        </bean>
        <bean id="jdbcTemplateBo" class="com.gemini.vms.bo.impl.JbcdTemplateImpl">
            <property name="sessionFactory" ref="sessionFactory"/>
        </bean>
        <bean id="mailUtil" class="com.gemini.vms.mail.MailImpl"/>
        <bean id="userBo" class="com.gemini.vms.bo.impl.UserBoImpl">
            <property name="userDao" ref="userDao"/>
            <property name="companyDao" ref="companyDao"/>
            <property name="emailBo" ref="emailBo"/>
            <property name="jdbcTemplate" ref="jdbcTemplateBo"/>
        </bean>
        <bean id="companyBo" class="com.gemini.vms.bo.impl.CompanyBoImpl">
            <property name="userDao" ref="userDao"/>
            <property name="companyDao" ref="companyDao"/>
        </bean>
        <!-- Struts1.3.8 beans configure -->
        <bean name="/user/login" class="com.gemini.vms.action.UserLoginAction" scope="prototype">
            <property name="userBo" ref="userBo"/>
        </bean>
    </beans>

     

    That' all , enjoy on that.

    September 25

    XFire 学习

    XFire 入门

    轻松将 POJO 发布成 Web 服务

    developerWorks
    文档选项

    将此页作为电子邮件发送

    将此页作为电子邮件发送

    将此页作为电子邮件发送

    将此页作为电子邮件发送

    未显示需要 JavaScript 的文档选项

    样例代码



    级别: 初级

    肖 菁, 自由撰稿人

    2007 年 5 月 16 日

    Java 社区一直试图将 POJO 的作用发挥到极致,降低 Java 应用实现的难度,最近的尝试是将 EJB3.0 建立在 POJO 之上;另一方面,SOA 是目前 Java 社区炙手可热的名词,非常多的企业都在努力应用和实施 SOA;XFire 为这两方面的需求提供了一种魔术般的解决方式,我们很快能够发现使用 XFire 创建和发布 Web 服务可以直接基于 POJO,将烦人的继承关系和一大堆其他可能的约束丢在一边。

    POJO、SOA 概述

    被重新审视的 POJO

    POJO(Plain Old Java Object,简单 Java 对象)是 Java 社区中最早的成员(回想您学习 Java 时第一个兴奋的时刻,那个简单的 "Hello World!" 例子),也是最简单、最容易实现的方式。

    然而现实中 Java 的发展已经远远超越了 POJO 的范围,成为面向对象技术应用中最成功的编程语言,尤其是继承、多态的应用为我们造就了一大批开发框架(如 Struts)和标准(如 EJB),随之而来的就是实现的复杂化,我们必须面对一大堆继承关系的限制。比如说:要开发一个基于 Struts 的应用,我们必须了解 Struts 特定的继承关系如 ActionForm、ValidateActionForm;要开发一个 EJB 应用,我们必须继承 EJBObject、SessionEJB 等。

    为了抛开这些限制,降低 Java 应用实现的难度,Java 社区开始重新审视 POJO 的价值,试图将 POJO 的作用发挥到极致,最新的努力是 EJB3.0。Java 社区将 EJB3.0 设计为基于 POJO,而不是为他准备更多的继承关系等限制。

    让人爱恨交加的 SOA

    SOA 已经成为了目前 Java 社区中炙手可热的名词,几乎所有的软件厂商都在讨论它,为他提供解决方案和产品支持,大部分的企业也已经在企业内部实施或者正在考虑实施 SOA。

    然而 SOA 在企业内的实施却不是一项简单的任务,即使抛开新建系统直接基于 SOA 架构实施的因素,要把企业已有系统纳入 SOA 框架也不是一件容易的事情。企业必须在对当前架构深入了解的基础上,对已有系统进行大规模的改造才能满足新的要求。如何经济的从原有技术架构切换到 SOA 架构成为很多企业的难题。




    回页首


    XFire 概述

    XFire 是 codeHaus 组织提供的一个开源框架,它构建了 POJO 和 SOA 之间的桥梁,主要特性就是支持将 POJO 通过非常简单的方式发布成 Web 服务,这种处理方式不仅充分发挥了 POJO 的作用,简化了 Java 应用转化为 Web 服务的步骤和过程,也直接降低了 SOA 的实现难度,为企业转向 SOA 架构提供了一种简单可行的方式。

    XFire 目前最新的版本是 1.2.2,目前支持的特性主要包括:

    • 支持将 Web 服务绑定到 POJO、XMLBeans、JAXB1.1、JAXB2.0 和 Castor;
    • 支持基于 HTTP、JMS、XMPP 等多种协议访问 Web 服务;
    • 支持多种 Web 服务业界重要标准如 SOAP、WSDL、Web 服务寻址(WS-Addressing)、Web 服务安全(WS-Security)等;
    • 支持 JSR181,可以通过 JDK5 配置 Web 服务;
    • 高性能的 SOAP 实现;
    • 服务器端、客户端代码辅助生成;
    • 对 Spring、Pico、Plexus 等项目的支持等。




    回页首


    XFire 安装包

    XFire 框架目前的最新版本是 1.2.6,可以访问 xfire.codehaus.org 下载 XFire 框架的安装包,下载时请选择“全部二进制发布包(Binary Distribution in zip package)”,而不仅仅是“XFire jar 文件(Jar of all XFire modules)”。

    下载完成后,我们可以将下载的 .zip 文件解压缩到任意的文件夹中(后面的章节中使用 % XFIRE_HOME % 表示 XFire 框架的安装目录),解压缩后形成的文件目录结构如下:

    • api(目录)

      api 目录中是 XFire 框架中所有类(class)对应的 API 文档,为开发者使用 XFire 完成应用开发提供帮助。

    • examples(目录)

      examples 目录中包含了所有随 XFire 二进制包发布的实例,包括这些实例的源代码和相关 Web 应用配置内容。

    • lib(目录)

      lib 目录中包含 XFire 运行所需要的外部支持类包(.jar文件),可以根据不同项目所需的 XFire 特性选择所需要的支持类包。保守的方法是在 Web 项目中包含所有的外部支持类包(.jar文件)。

    • manual(目录)

      manual 目录中包含有 XFire 框架的帮助文档,开发者可以从这些帮助文档中学习更多运用 XFire 框架实现 SOA 的知识和技巧。

    • modules(目录)

      modules 目录中包含了 XFire 框架根据不同特性分别编译的二进制包文件。发布基于 XFire 框架的 Web 项目时,可以选择使用该目录下的所有 .jar 文件,也可以选择 XFire-all-1.2.6.jar 文件。

    • XFire-all-1.2.6.jar

      XFire 框架的二进制包文件,包含了全部的模块(modules)。

    • LICENSE.txt

      LICENSE.txt 文件中包含了 XFire 框架的授权协议。

    • NOTICE.txt
    • README.txt

      这两个文件中包含了 XFire 发布时的一些有用的信息。





    回页首


    XFire 框架支撑环境

    XFire框架是一种基于Servlet技术的SOA应用开发框架,要正常运行基于XFire应用框架开发的企业应用,除了XFire框架本身之外,还需要JDK和Servlet容器的支持。

    1.JDK 版本选择、下载和安装

    XFire 支持非常多的特性,其中不同的特性对 JDK 版本的要求有所不同,比如如果项目中选择基于 JSR181 标准发布 Web 服务,我们就需要选择 JDK5 或者以上版本,如果仅仅选择将 Web 服务绑定到最简单的 POJO,我们只需要选择 JDK1.4 版本即可。

    JDK 各版本均可以在 java.sun.com 网站上下载,如何安装 JDK 请参考 SUN 公司的相关技术文档和 JDK 的帮助文档。

    2.Servlet 容器下载和安装

    XFire 是一种基于 Servlet 技术的 SOA 应用开发框架,需要 Servlet 容器的支持。XFire 支持在多种 Servlet 容器中运行,包括 Websphere、Weblogic、TOMCAT 等。为了说明的简单,我们选择使用 TOMCAT(版本5.0.30)作为 XFire 的运行容器,所有配置过程和发布步骤的说明也均是针对 TOMCAT,如果读者使用 TOMCAT 之外的其它 Servlet 容器或者选择了 TOMCAT 的其它版本,下面的配置过程和步骤可能需要做出调整,请读者根据实际 Servlet 容器的帮助文档进行相应调整。

    TOMCAT 各版本均可以在 tomcat.apache.org 网站上下载,如何正确安装 TOMCAT 服务器请参考 TOMCAT 服务器的帮助文档。

    3.xalan

    XFire 需要 xalan 项目的支持,然而 1.2.6 版本中并没有带有相应的 jar 文件,因此请访问 xml.apache.org,下载 xalan 项目的二进制包。




    回页首


    XFire 应用配置

    前面的章节中我们下载和安装了 XFire 安装包和所需要的支持环境,现在我们开始学习如何从零开始创建 XFire 应用开发环境。下面的所有配置过程和发布步骤均针对 TOMCAT(版本5.0.30)服务器,如果选择其它的 Servlet 容器,下面的配置过程和步骤可能需要做出调整,请读者根据实际 Servlet 容器的帮助文档进行相应调整。

    1、创建 Web 应用目录和基本元素

    1. 在 %TOMCAT_HOME%/webapps 目录下创建新的 Web 应用目录 “XFire”

      [注] 其中的 %TOMCAT_HOME% 指向 TOMCAT 的安装目录。

    2. 在 ”XFire”目录下创建 ”WEB-INF”目录、
    3. 在 ” WEB-INF”目录下创建 ”lib”目录和 ”classes”目录
    4. 在 ” WEB-INF”目录下创建 Web 应用描述文件 ”web.xml”, ”web.xml”文件的内容见 清单 1-1

    清单 1-1 WEB-INF\web.xml
                    
    1、	<?xml version="1.0" encoding="ISO-8859-1"?>
    2、	<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    3、	    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4、	    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   
    			http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    5、	    version="2.4">
    6、	
    7、	    <display-name>XFire实例</display-name>
    8、	    <description>
    9、	         基于XFire框架发布Web服务的例子
    10、	    </description>
    11、	
    12、	</web-app>
    

    2、拷贝 XFire 所需的支持类包文件

    拷贝 %XFIRE_HOME%/lib 目录下所有文件到 “1、创建 Web 应用目录和基本元素” 中所创建的 ”lib”目录下,将 %XFIRE_HOME%/XFire-all-1.2.6.jar 文件也拷贝到 “1、创建 Web 应用目录和基本元素” 中所创建的 ”lib”目录下。将 xalan 安装包中的所有 jar 文件和所需要的支持 jar 文件拷贝到相同的 ”lib”目录下。

    [注] 为了减少拷贝的 jar 文件的数目,开发者可以根据项目的需要选择需要拷贝的 jar 文件,而不是全部拷贝,如何根据需要选择拷贝合适的类包文件请访问 XFire 站点

    3、配置 XFire 框架运行所需的 Servlet

    修改 web.xml 文件,在其中增加如下 Servlet 定义内容。

    1、	<servlet>
    2、	    <servlet-name>XFireServlet</servlet-name>
    3、	    <display-name>XFire Servlet</display-name>
    4、	    <servlet-class>
    5、	        org.codehaus.xfire.transport.http.XFireConfigurableServlet
    6、	    </servlet-class>
    7、	  </servlet>
    8、	
    9、	  <servlet-mapping>
    10、	    <servlet-name>XFireServlet</servlet-name>
    11、	    <url-pattern>/servlet/XFireServlet/*</url-pattern>
    12、	  </servlet-mapping>
    13、	
    14、	  <servlet-mapping>
    15、	    <servlet-name>XFireServlet</servlet-name>
    16、	    <url-pattern>/services/*</url-pattern>
    17、	</servlet-mapping>
    

    4、创建 XFire 框架的服务发布文件 services.xml

    1. “1、创建 Web 应用目录和基本元素” 中创建的 classes 目录下新建目录 ”META-INF\xfire”;
    2. 在步骤 a) 中新建的 ”xfire”文件目录下创建新文件 services.xml,文件的默认内容如 清单1-2

    清单 1-2 WEB-INF\classes\META-INF\xfire\services.xml
                    
    1、	<beans xmlns="http://XFire.codehaus.org/config/1.0">
    2、	</beans>
    





    回页首


    将 POJO 发布成 Web 服务

    XFire 框架中,我们有两种方式将 POJO 发布成 Web 服务:

    • 一种方式是直接使用 Web 服务接口和 Web 服务实现类(POJO)来发布;
    • 另一种方式是基于 JSR181 标准和注释技术将被注释的 POJO 发布成 Web 服务;

    下面的章节中我们将学习使用第一种方式来完成 POJO 的 Web 服务发布。我们将使用经典的 ”Hello World!”例子来演示将 POJO 发布成 Web 服务所需要的步骤,不过我们不再是简单的访问一个 Java 方法来输出 ”Hello World!”字符串,而是转为在 SOA 环境下实现:Web 服务客户端通过访问服务器端发布成 Web 服务的 POJO 获得返回的 ”Hello World!”字符串后输出到客户端的控制台上。

    将 POJO 发布成 Web 服务的基本步骤如下:

    1. 创建 Web 服务接口,声明该 Web 服务对外暴露的接口;
    2. 创建 Web 服务实现类,为 Web 服务接口提供实现;
    3. 修改 XFire 框架的服务发布文件 ---- services.xml,将 POJO 发布成 Web 服务。

    下面我们通过创建 ”Hello World!”例子来具体说明如何实现这三个步骤。

    1.创建 Web 服务接口 ---- HelloWorldService

    要将 POJO 发布成 Web 服务,首先需要创建 Web 服务接口,在接口中声明该 Web 服务需要对外暴露的接口。

    我们根据需要创建 Web 服务接口 ” HelloWorldService”,在其中声明一个 ”sayHello”方法,该方法返回 ”String ”类型的内容。” HelloWorldService”接口对应的 Java 文件代码如 清单 1-3
    清单 1-3 WEB-INF\classes\org\vivianj\xfire\pojo\HelloWorldService.java

                    
    1.package org.vivianj.xfire.pojo;
    2.
    3. /**
    4. * HelloWorldService 中声明需要发布成 Web 服务的所有 Java 方法 
    5. * HelloWorldService 作为Web服务接口
    6. */
    7. public interface HelloWorldService {
    8.	/**
    9.	     * sayHello 方法声明了 Web 服务对外暴露的接口
    10.	 * 
    11.	 * @return 返回给客户端的字符串
    12.	 */
    13.	public String sayHello();
    14.}
    

    2.创建 Web 服务实现类 ”HelloWorldServiceImpl”

    创建 Web 服务实现类 ”HelloWorldServiceImpl”,它继承 ”1、创建Web服务接口 ---- HelloWorldService” 中创建的 HelloWorldService 接口,并且为它声明的 ”sayHello”方法提供具体实现: 返回字符串”Hello World!”。 ”HelloWorldServiceImpl”类对应的 Java 文件代码如 清单 1-4
    清单 1-4 WEB-INF\classes\org\vivianj\xfire\pojo\HelloWorldServiceImpl.java

                    
    1.package org.vivianj.xfire.pojo;
    2.
    3./**
    4. * HelloWorldServiceImpl 中为 Web 服务接口中声明的所有 Java 方法提供具体实现 
    5. * HelloWorldServiceImpl 作为 Web 服务的实现类
    6. */
    7.public class HelloWorldServiceImpl implements HelloWorldService {
    8.
    9.	/*
    10.	 * sayHello 方法为 HelloWorldService 服务接口定义的 sayHello 方法提供具体实现
    11.	 *  
    12.	 * @see org.vivianj.XFire.pojo.HelloWorldService#sayHelloToXFire()
    13.	 */
    14.	public String sayHello() {
    15.		return "Hello World!";
    16.	}
    17.
    18.}
    

    3.修改 services.xml,将 POJO 发布成 Web 服务

    我们可以在 WEB-INF\classes\META-INF\XFire\services.xml 文件中的 <beans …> 和 </beans> 元素中间加入如下的 xml 内容将上面创建的 HelloWorldService 发布成 Web 服务。

    1.<service>
    2.	<name>HelloWorldService</name>
    3.	<namespace>http://vivianj.org/HelloWorldService</namespace>
    4.	<serviceClass>
    5.		org.vivianj.xfire.pojo.HelloWorldService
    6.	</serviceClass>
    7.	<implementationClass>
    8.		org.vivianj.xfire.pojo.HelloWorldServiceImpl
    9.	</implementationClass>
    10.</service>
    

    其中各元素的功能如下:

    • service

      service 标签和它所包含的 xml 内容为发布成 Web 服务的 POJO 提供完整的描述。

    • name

      Web 服务被发布时所采用的唯一名称。

    • namespace

      Web 服务发布时所使用的命名空间。

    • serviceClass

      Web 服务接口类的全名,包括包名和类名。

    • implemetationClass

      Web 服务实现类的全名,包括包名和类名。

    更多 service 元素的子元素和它们的用法请参考 XFire 站点

    通过上面的三个步骤,我们已经将新创建的HelloWorldService发布成了Web服务,我们可以使用下面的步骤测试一下创建的Web服务是否能够正常运行:

    1. 编译上面的步骤中创建的 Java 接口和类;
    2. 启动 TOMCAT 服务器。
    3. 等 TOMCAT 服务器完全启动后,打开浏览器,在地址栏中输入 http://localhost:8080/XFire/services/HelloWorldService?wsdl。

    其中 HelloWorldServcie 是配置文件中 service\name 元素所定义的内容,”wsdl”参数表示查看该 Web 服务的 WSDL(Web服务描述语言)文件。

    如果浏览器中出现如下图所示类似的内容,表示 Web 服务发布成功,我们可以编写客户端访问该 Web 服务从服务器获取返回字符串,本文下载资源中提供的下载文件中包含有可供参考的客户端类 org.vivianj.xfire.pojo.client.HelloWorldServiceClient。
    图:浏览器中访问效果

    如果浏览器中出现错误提示,请按照上面的步骤和说明检查已经完成的开发、配置过程是否完全正确。




    回页首


    结束语

    本文中作者首先讲解了 XFire 框架的主要特性,XFire 框架的运行环境以及基于 XFire 框架开发 SOA 应用的基本步骤,并且借助于 SOA 环境下的 ”Hello World!”例子,详细的讲解和演示了如何基于 XFire 框架、经过简单的开发、配置步骤就将一个 POJO 类中包含的方法发布成Web服务。从 ”Hello World!”例子实现的过程中,我们可以发现 XFire 框架最大化的发挥了 POJO 的作用,减少了 SOA 实施时对框架本身的依赖,降低了 SOA 实施的难度,企业实施 SOA 时并不需要增加太多的投入就可以实现目标。




    回页首


    下载

    名字 大小 下载方法
    xfire.war 6 KB HTTP
    关于下载方法的信息


    参考资料 学习


    获得产品和技术


    关于作者

    肖菁是自由撰稿人,致力于研究和推广 JavaEE、Open Source、SOA 技术,发起了开源项目BuildFileDesigner(buildfiledesign.sourceforge.net)和 V-Security(v-security.sourceforge.net)。可以通过电子邮件 cto4u.cn@gmail.com 和他取得联系。

     
    November 29

    jDG 开源项目今天启动!

     
    各位同事,从公司成立到目前没有任何项目。所以身为总经理的我有了一个想法,总结并整理各位同僚在开发中的用到或者遇到的资源,并共享给大家。比如可以是对连接池的封装程序,可以是字符串操作的封装程序....
    现在处于第一阶段,开发包的命名及规范。
    开发包名称:jDG - java david group 取前一位字母
    目录规则   :dg.person.xxx.xxx - 1段表示DG (必须),2段表示个人开发(必须),3段开发者(如david),4段项目名称(如log4j)
          eg:dg.person.david.log4j
          此包下主要是应用log4j的简单配置及使用。可以继续扩展如:.com;.util.................

    ----------
    在创建过程中务必请把注释写得详细,中英文不限。发布者发布以后源代码必须贡献出来,否则不予采纳。(便于今后自动生成doc)
    发布项目中部署规范:
    ../WEB-INF/
     classes - 编译后可执行代码
     lib   - 用到的jar包
     src   - 源代码
    另外:在自己的项目发布前将由总经理室和技术管理中心审判通过才会在DG的共享空间发布!
    ----------
    jDG目的在于同事们之间的互相学习与交流。任何人都可以参加,并提出宝贵意见,经典意见将提交董事会,一经采纳有礼品相送哦~~~

    -----------------------------
    jDG人员状况:
     开发主要负责人及审批负责人:叮叮 【总经理】
     审批负责人 :patrick 【CTO】
     发布人员 :patrick 【CTO】叮叮 【总经理】
     
    =====================
    DG是我用QQ建的一个群,里面都是我的好朋友,很多都是从事技术工作。如果有谁对此感兴趣可以直接跟我联系QQ:17435631
    November 28

    Java is No.1 Today

    Java is No.1 Today
    来源:solidot.org   发表时间:2005-11-26 01:03


    Mats Henricson's blog 提到:今天 SourceForge 上 Java 语言相关的项目数量首次超过了 C++ 的,并成为了No.1;以下列出今日统计出的一个排名:

       1. Java (16738 projects)
       2. C++ (16731 projects)
       3. C (15934 projects)
       4. PHP (12175 projects)
       5. Perl (6209 projects)
       6. Python (4542 projects)
       7. C# (2892 projects)

    2005最为火爆的 Ruby (400 projects) 只占得了很小一席,甚至比 Objective C (739 projects) 还少,当然它已超越了 Lisp (323 projects) 和 Pascal (357 projects)。

    ---------------------------

    Java is the most popular coding language in the world, maybe my chose is right...

    this way will go on and this way always make me headache ...

    November 24

    websphere中session失效

    今天同事遇到一个很奇特的问题.
    我们在tomcat下开发的项目移植到websphere下就不能正常运行了.原因是session竟然很奇怪的失效了.
    找了很多原因都不知道怎么回事.更奇怪的是同样的程序在另外一台websphere下就完全没有问题.对于websphere是否有session过期的设置?
    如果哪位高人经过清多多指点.
     
    -------------------------------
     
    今天一天又没干多少事情.因为昨天忘记了一件很重要的事,被老总,销售,项目经理一顿k,实在没心情做.
    非常谢谢她,有了她我就能忘记烦恼重新开始工作...总觉得跟她说话就非常开心放松....呵呵
    November 23

    JavaMail,Timer在web应用中

    日前,在我目前进展得这个项目还存在一些技术方案制定的问题.
    主要是定时触发一些功能比如:发送邮件,触发手机短信等.在java的applet中或者swing,awt中可以用新开一个线程,将Timer植入.进而监测.但是如今在Tomcat容器中应该如何来布置这个Timer呢?一个简单的servlet或者javabean是不能满足要求的.主要是出于它们生命周期上的考虑.
    查阅资料以后发现serlet有一个方法可以监测到tomcat运行情况,启动和销毁.所以决定采用这个方案,把Timer植入,才能在整个生命周期监测一些系统活动情况.
    发邮件是采用javamail,在oracle中也有utl_email这个包可以发邮件.从今天到这周结束就要完成这几件事情.
     
    --------------------------------
     
    最近事情比较多,烦心的事情也比较多,一直没有到这里来写点东西.
    November 16

    遭遇Exchange...

    前段时间给XXX一台服务器安装了exchange server2003.在测试服务器上已经可以收发邮件了.可是昨天接到新要求,需要一个IE的登陆页面.在网上找了很多资料都没有相关的信息...这下我遇到麻烦了.
    给Exchange绑上IIS也不能有登陆的页面啊,怎么办好呢?
     
    ----------------------------------------
     
    昨晚跟家家去徐家汇一个湘菜馆吃饭,那个清抄痘苗好好吃哦.就是太贵了...
     
    感觉家家最近情绪很低落,以前老是喜欢吵吵闹闹的,但是最近总是郁郁寡欢,看上去也比较憔悴,心事重重的...看到我心里都挺难过的.也不知道怎么安慰她.自从上次事情之后,感觉就像变了一个人.没想到她也有多愁善感的一面.女孩子是不是都是这样的.身为她大哥,how can I do for u?找点好玩的吧.
     
    经过一些事情之后人都是会长大一点.我觉得这也是好事.有些事情早点遇到比晚遇到要好.但是既然事实已经如此,要快点从伤痛中苏醒过来.做回自己.想当初我那么羡慕她整天无忧无虑的.遇到这样的事,也会是一筹莫展.......让自己开心起来,其实是件很难的事情.
     
    ----------------------------------------
      
    今天好多事情啊,今天弄好exchange,还有另外一个项目星期五客户就要看效果......烦啊烦啊!!!说不定今天晚上家都回不成了....
    November 11

    Borland离我们而去?

    Borland离我们而去?
    以Delphi而知名的软件开发工具厂商Borland近日表示,随着集成开发环境(IDE)工具市场的日益萎缩,该公司将逐渐把重点转移到开发咨询服务上,其重点将是程序员、开发流程和开发技术.

    本周一,Borland负责营销和市场战略的副总裁Erik Frieberg表示,IDE工具的黄金时期已经过去,Borland将会逐步转向软件开发咨询业务。

    评论:Erik Frieberg这段话显然太牵强,IDE市场目前正是各大厂家争夺之地,最近的几则消息:BEA Workshop 3.0:http://www.matrix.org.cn/resource/news/272_BEA_Workshop.html
    SUN提供免费的Java Studio Enterprise 8:http://www.matrix.org.cn/resource/news/278_Java_Studio.html


    原因在哪里?
    显然的原因是,随着ECLIPSE的日益强大,borland的市场分额下跌,亏损扩大。第二财季中,软件许可销售收入下滑了29%,只有3800万美元。在第二和第三财季中,Borland亏损额高达1790万美元和480万美元。而另外一边,则是开源和免费的ECLIPSE不断强大。现在,Borland这个昔日和微软在开发工具市场决一雌雄的巨头,甚至不惜做昔日对手微软的配角。

    真的放弃?
    不过,应该说borland并没有完全放弃努力的。

    11月9日国外媒体报道,Borland日前任命微软公司负责MSDN的旧将尼尔森(Tod Nielson)为公司总裁兼首席执行官。在加盟Borland之前,尼尔森效力于甲骨文,担任负责营销和全球伙伴销售支持的副总裁。

    此前,尼尔森还曾在BEA系统公司担任首席营销官。

    Borland公司董事局主席威廉-扈珀(William Hooper)称,选择尼尔森是因为他熟悉Borland的市场及具有丰富的管理经验。


    互联网上很多程序员,都在担忧Borland的离去,Borland这个曾经为我们带来无数欢乐和回忆的公司,似乎已经不顾大家的眷恋,即将只是留在我们记忆当中了。
    -----------------------------------------------------------------
    我的第一个IDE也是delphi,第一份工作也是delphi.
    虽然现在用eclipse..但是borland带给我东西我一辈子都不会忘记..

    November 08

    JAVA培训

    做java已经做了1年多了,对jdk环境还算比较熟悉,struts,hm这些东西也做过一些项目,但是总觉得自己的技术一直都是止步不前.天天都在做项目,而且有时候还是穿插进行...怎么样才能在技术上有一些提高呢?
     
    看到一些朋友去考scjp,scjd.不知道有多大的意义.我也很想去学学.考考.是不是这样能让自己在java方面有更深的认识???
     
    疑惑.......
    November 04

    用存储过程实现远程数据库同步终于完成了

    存储过程研究了2天,终于把远程数据库同步部分完成了.
    总共包括4个procedure,1个function,均已打成package.
    需要源代码请与我联系.
     
    ---------------------
     
    这个礼拜要去李哥家吃饭.然后到徐家汇把爱机修一修(液晶屏换了2次,修了3次了,目前是电源街头松了.).可怜的联想V80,公司给笔记本以后就再也没管它了.想当初陪我度过大学时光的爱机,现在竟然被我这样对待....真应该好好反省一下.
     
    ---------------------
    November 03

    强制删除被用户占用的oracle资源

    ------------------------
    删除数据的时候提示
    "record is locked by another user".
    我也不知道是哪个用户占用了资源,请问大虾我怎么能查询到这个信息.
    怎么能强制的释放这个用户占用的资源???
    ------------------------
     
    在PL/SQL中有一个session观察器,可以强制kill掉,如果还是不行,重启服务就可以了...
    咳...

    oracle PL/SQL 编程

    由于目前系统需要与客户方面系统的数据进行同步,要进行复杂的sql操作,并且同步的要求是一个月一次自动进行.因为pl/sql开发数据库程序方便,故方案考虑为:
    1.在pl/sql中写好程序块
    2.编写bat程序
    3.利用系统的计划任务完成1一个月一次的自动更新.
     
    ------------------
    昨天在写pl/sql程序块的时候因为不是很熟悉语法,所以就是边上网查资料边写了.最后终于写好了一个,这个例子应该可以涵盖package和procedure的语法了.
    - 源程序
    - 包头 申明procedure
    create or replace package TRS_USER_SYNC is
      -- Author  : DAVID
      -- Created : 2005-11-2 16:04:37
      -- Purpose :
     
      -- Public type declarations
     
     
      -- Public constant declarations
      -- Public variable declarations
      -- Public function and procedure declarations
      procedure deletelocal;
      procedure getDatas;
      -- CURSOR fetchData;
    end TRS_USER_SYNC;
    /
    -包体 实现了连接远程数据库的查询
    create or replace package body TRS_USER_SYNC is
      -- Private type declarations
      empName exb_personnel.empName@dblinkjcy%type
      CURSOR fetchData IS
      select empName from exb_personnel@dblinkjcy where empid='1111';
      -- Private constant declarations
      -- Private variable declarations
      -- Function and procedure implementations
      procedure deletelocal is   
      begin
        dbms_output.put_line('hello!');
        -- select t.empName into display from exb_personnel@dblinkjcy t where t.empid='1111' ;
        -- dbms_output.put_line(display);
      end deletelocal;
     
      procedure getDatas IS
      begin
        if fetchData%isopen = false then
          open fetchData;
        end if;
       
        fetch fetchData into empName;
       
        while fetchData%found loop
          dbms_output.put_line(empName);
          if fetchData%rowcount=5 then
            exit;
          end if;
          fetch fetchData into empName;
        end loop;
       
        close fetchData;
       
      end getDatas;
    end TRS_USER_SYNC;
    /
     
    - 创建database link
    create public database link DBLINKJCY.US.ORACLE.COM
      connect to ITS identified by ITS
      using 'david';
     
    ------注意:确定本地数据库配置好了远程数据库的服务名
    用cmd 下 tnsping david

    October 27

    数字电路传输原理

    昨天一个同事问我关于数字电视的设计。本来是做网络应用方面的程序,对数字电视传输原理并不是很了解,于是回去之后问了一个朋友,原来数字电视这么简单。
    具体如下:
    1.数字电视是一个C/S结构的应用.客户端一般是用C语言写,服务器端一般也是用java开发.采用支持java的应用服务器作为容器.
    2.前端利用DOM开发包解析XML返回客户端.
    3.XML基于HTTP协议,把客户端请求发送到服务器,容器用以分析HTTP头的各种信息.
    4.SERVLET负责处理得到的数据,比如:检索,统计...等
     
    以上则是数字电视的一个简单流程.总的来说跟我们普通意义上的WEB应用是差不多的.如果有不祥之处,可以直接与我联系.
    October 21

    JAVA会怎么发展?

    如题。
    今天早上出地铁的时候有人递了一份招聘的报纸,打开看了,招聘高级软件工程师的没有一个是java的职位。
    觉得嗷嗷奇怪,记得以前只要是做软件方面,总会有很多是做JAVA方面的。难道现在JAVA真的越来越不如C了?
     
    奇怪.....