Solo  当前访客:3 登录 注册

喧哗博客-http://blog.xuahua.com

繁华过后的沉寂--技术经验分享
浏览次数: 95,037    文章总数: 91    评论总数: 3
存档:
2016 年 09 月 (4)

dubbox框架实例

1,dubbox-service端

 接口与实现一起在service端。使用maven单独打成独立的interface.jar即可。

包名规则如下:

   com.xuahua --根包

   ---------------interfaces --接口包

----------------service --接口实现包

-----------------model --接口使用类对外的Pojo

创建接口类名 com.xuahua.interfaces.DemoService.java

/**
* @author wyong
* 定义测试例子
*/
public interface DemoService {

/**
* @param name
* @return
* 定义方法,与某人打招呼
*/
String sayHello(String name); 


}

 

接口实现类com.xuahua.service.DemoServiceImpl.java

package com.xuahua.service;

import org.springframework.stereotype.Service;

import com.xuahua.interfaces.DemoService;

@Service("demoService")
public class DemoServiceImpl implements DemoService {

	public String sayHello(String name) {
		return "Hello " + name;  
	}


}

 

加载独立的spring_dubbox.xml文件,可以在spring-mvc.xml中最下面增加

<!-- **************************** 导入其他XML文件 **************************** -->
<import resource="spring_dubbo.xml"/>
<!-- **************************** /导入其他XML文件 **************************** -->

spring_dubbo.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:dubbo="http://code.alibabatech.com/schema/dubbo"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
        http://www.springframework.org/schema/beans/spring-beans.xsd  
        http://code.alibabatech.com/schema/dubbo  
        http://code.alibabatech.com/schema/dubbo/dubbo.xsd">  
    <!-- 提供方应用信息,用于计算依赖关系 -->  
    <dubbo:application name="demoService_provider" owner="programmer" organization="dubbox" />  
    <dubbo:monitor protocol= "registry" />
    <!-- 使用zookeeper注册中心暴露服务地址  192.168.0.101 为zookeeper的ip地址及开放端口-->  
    <dubbo:registry protocol="zookeeper" address="192.168.0.101:2181"  />   
    
    <!-- 用dubbo协议在20880端口暴露服务 -->  
    <dubbo:protocol name="dubbo" port="20880" />  
   
    <!-- 声明需要暴露的服务接口 -->  
    <dubbo:service interface="com.xuahua.interfaces.DemoService" ref="demoService"  timeout="6000"/>  
      
    <!-- 具体的实现bean -->  
    <bean id="demoService" class="com.xuahua.service.DemoServiceImpl" />  
</beans>  

 

最后pom.xml文件如下

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.xuahua</groupId>
	<artifactId>dubbo-model-service</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<name>com.xuahua Maven Webapp</name>
	<url>http://maven.apache.org</url>

	<!-- 定义本pom.xml引用版本属性, org.springframework-version,org.hibernate-version,project.build.sourceEncodeing 
		此名可随便取,必须与下面引用相匹配。 -->
	<properties>
		<org.springframework-version>4.0.0.RELEASE</org.springframework-version>
		<org.hibernate-version>4.3.1.Final</org.hibernate-version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.parent.version>2.8.4</project.parent.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>

		<!-- 此处可以添加相关联的,使用的jar包 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>dubbo</artifactId>
			<version>${project.parent.version}</version>
			<exclusions>
				<exclusion>
					<artifactId>spring</artifactId>
					<groupId>org.springframework</groupId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
    <groupId>com.101tec</groupId>
    <artifactId>zkclient</artifactId>
    <version>0.2</version>
</dependency>
		<!-- 下面是springframwork 4.xx 引用的包 -->
		<!-- spring 4 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${org.springframework-version}</version>
			<exclusions>
				<!-- Exclude Commons Logging in favor of SLF4j -->
				<exclusion>
					<groupId>commons-logging</groupId>
					<artifactId>commons-logging</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-orm</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-expression</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aop</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
		<!-- Apache Commons 基础组件 -->
		<dependency>
			<groupId>commons-lang</groupId>
			<artifactId>commons-lang</artifactId>
			<version>2.6</version>
		</dependency>
		<dependency>
			<groupId>commons-collections</groupId>
			<artifactId>commons-collections</artifactId>
			<version>3.2.1</version>
		</dependency>
		<dependency>
			<groupId>commons-beanutils</groupId>
			<artifactId>commons-beanutils</artifactId>
			<version>1.8.3</version>
		</dependency>

		<dependency>
			<groupId>commons-fileupload</groupId>
			<artifactId>commons-fileupload</artifactId>
			<version>1.3</version>
		</dependency>
		<dependency>
			<groupId>commons-codec</groupId>
			<artifactId>commons-codec</artifactId>
			<version>1.8</version>
		</dependency>
		<dependency>
			<groupId>commons-configuration</groupId>
			<artifactId>commons-configuration</artifactId>
			<version>1.10</version>
		</dependency>

		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpclient</artifactId>
			<version>4.3.6</version>
		</dependency>

		<!-- 下面是返回json串时,使用到的处理相关包 Jackson -->
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-annotations</artifactId>
			<version>2.5.1</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-core</artifactId>
			<version>2.5.1</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>2.5.1</version>
		</dependency>
		<dependency>
			<groupId>org.codehaus.jackson</groupId>
			<artifactId>jackson-mapper-asl</artifactId>
			<version>1.9.13</version>
		</dependency>

		<!-- slf4j 日志文件框架使用的jar包 -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>1.7.2</version>
		</dependency>

		<!-- mysql driver 数据库驱动包 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.15</version>
		</dependency>

		<!-- c3p0 datasource 数据库联接池使用的,此处是c3p0 -->
		<dependency>
			<groupId>c3p0</groupId>
			<artifactId>c3p0</artifactId>
			<version>0.9.1.2</version>
		</dependency>
		<!-- druid 联接池,同时也提供内部默认的监控,个人推荐 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>1.0.23</version>
		</dependency>
		<!-- dbcp使用的默认联接池 配合 commons-pool 使用 -->
		<dependency>
			<groupId>commons-dbcp</groupId>
			<artifactId>commons-dbcp</artifactId>
			<version>1.4</version>
		</dependency>
		<dependency>
			<groupId>commons-pool</groupId>
			<artifactId>commons-pool</artifactId>
			<version>1.5.4</version>
		</dependency>


		<!-- 中间件 ibatis -->
		<dependency>
			<groupId>org.apache.ibatis</groupId>
			<artifactId>ibatis-core</artifactId>
			<version>3.0</version>
		</dependency>
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>1.2.3</version>
		</dependency>
		<!-- hiberante 4 -->
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-core</artifactId>
			<version>${org.hibernate-version}</version>
		</dependency>
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-validator</artifactId>
			<version>${org.hibernate-version}</version>
		</dependency>
		<dependency>
			<groupId>org.javassist</groupId>
			<artifactId>javassist</artifactId>
			<version>3.18.1-GA</version>
		</dependency>
		<!-- http-client -->
		<dependency>
			<groupId>commons-httpclient</groupId>
			<artifactId>commons-httpclient</artifactId>
			<version>3.1</version>
		</dependency>
		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpcore</artifactId>
			<version>4.3.3</version>
		</dependency>
		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpmime</artifactId>
			<version>4.3.3</version>
		</dependency>

		<!-- AspectJ -->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjrt</artifactId>
			<version>1.7.4</version>
		</dependency>

		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjweaver</artifactId>
			<version>1.7.4</version>
		</dependency>
		<!-- json-lib -->
		<dependency>
			<groupId>net.sf.json-lib</groupId>
			<artifactId>json-lib</artifactId>
			<version>2.4</version>
			<classifier>jdk15</classifier>
		</dependency>
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.7</version>
		</dependency>
		<!-- memcached -->
		<dependency>
			<groupId>com.whalin</groupId>
			<artifactId>Memcached-Java-Client</artifactId>
			<version>3.0.2</version>
		</dependency>
		<dependency>
			<groupId>com.google.code.maven-play-plugin.spy</groupId>
			<artifactId>spymemcached</artifactId>
			<version>2.6</version>
		</dependency>

		<!-- servlet3 -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>3.0.1</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>2.3</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.8</version>
            <exclusions>
                <exclusion>
                    <groupId>com.sun.jmx</groupId>
                    <artifactId>jmxri</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.sun.jdmk</groupId>
                    <artifactId>jmxtools</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>javax.jms</groupId>
                    <artifactId>jms</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
	</dependencies>
	<build>
		<finalName>dubbo-service</finalName>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-jar-plugin</artifactId>
				<version>3.0.2</version>
				<executions>
					<execution>
						<phase>package</phase>
						<goals>
							<goal>jar</goal>
						</goals>
						<configuration>
							<classifier>interface</classifier>
							<includes>
								<include>**/interfaces/*</include>
								<include>**/model/*</include>
							</includes>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
</project>

 

####################################以上为dubbox-service的配置,########################

2,dubbox-client配置如下

包名规则如下

com.xuahua --------根包名

---------------controller --对外调用的服务,可以在内部使用上面暴露的接口。

 

com.xuahua.controller.DemoController.java 

内容如下

package com.xuahua.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.xuahua.interfaces.DemoService;



/**
 * @author wyong
 * @version 1.0
 * @link QQ343886028
 */
@Controller
@RequestMapping("/demo")
public class DemoController {

	@Autowired
	DemoService demoService;
//	
	@RequestMapping("/index")
	public String index(Model model){
		String result =demoService.sayHello("xuahua");
		System.out.println("======="+result);
		
		//此处是模拟调用请求,本人测试,服务端默认参数,超过5000个必定会抛出异常。
//		for(int i=0;i<1000;i++){
//			new Thread(new DemoController.process(demoService,String.valueOf(i))).start();
//		}
		return "index";
	}
	 
	/**
	 * @author wyong
	 * 此处只是做了一个多线程请求,模拟压力测试。。
	 
	class process implements Runnable {
		DemoService demoService;
		String name;
		public process(DemoService demoService,String name){
			this.demoService = demoService;
			this.name = name;
			Thread.currentThread().setName(name);
		}
		public void run() {
			 long s = System.currentTimeMillis();
			 String result =demoService.sayHello(name);
			 long b = System.currentTimeMillis();
			System.out.println(Thread.currentThread().getName()+"=>"+result+",cost=>"+(b-s)+"ms");
		}
		
	}*/
}

 

spring_dubbox.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:dubbo="http://code.alibabatech.com/schema/dubbo"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
        http://www.springframework.org/schema/beans/spring-beans.xsd  
        http://code.alibabatech.com/schema/dubbo  
        http://code.alibabatech.com/schema/dubbo/dubbo.xsd">  
   
   <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
  <dubbo:application name="consumer-of-helloworld-web"  />
  <dubbo:monitor protocol= "registry" />
  
    <!-- 使用zookeeper注册中心暴露服务地址  192.168.0.101 为zookeeper的ip地址及开放端口--> 
 <dubbo:registry protocol = "zookeeper" address="192.168.0.101:2181" /> 
 <dubbo:protocol name="dubbo"  port="20880" />
 
 <!-- 对于初始化,强制使用 demoService 参数init="true" -->
	<dubbo:reference id="demoService" interface="com.xuahua.interfaces.DemoService" check="false" timeout="5000" /> 
</beans>  

 

同样在spring-mvc.xml配置最后面引入

<!-- **************************** 导入其他XML文件 **************************** -->
<import resource="spring_dubbo.xml" />
<!-- **************************** /导入其他XML文件 **************************** -->

 

dubbx-client工程pom.xml配置如下

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.xuahua</groupId>
	<artifactId>dubbo-module-client</artifactId>
	<packaging>war</packaging>
	<version>1.0</version>
	<name>com.xuahua Maven Webapp</name>
	<url>http://maven.apache.org</url>

	<!-- 定义本pom.xml引用版本属性, org.springframework-version,org.hibernate-version,project.build.sourceEncodeing 
		此名可随便取,必须与下面引用相匹配。 -->
	<properties>
		<org.springframework-version>4.0.0.RELEASE</org.springframework-version>
		<org.hibernate-version>4.3.1.Final</org.hibernate-version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.parent.version>2.8.4</project.parent.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
		<!-- 从provider工程打包放到nexus上面后,再引用 -->
		<dependency>
			<groupId>com.xuahua.interfaces</groupId>
			<artifactId>demoService</artifactId>
			<version>1.0</version>
		</dependency>
		<!-- 此处可以添加相关联的,使用的jar包 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>dubbo</artifactId>
			<version>${project.parent.version}</version>
			<exclusions>
				<exclusion>
					<artifactId>spring</artifactId>
					<groupId>org.springframework</groupId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>com.101tec</groupId>
			<artifactId>zkclient</artifactId>
			<version>0.2</version>
		</dependency>

		<!-- 下面是springframwork 4.xx 引用的包 -->
		<!-- spring 4 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${org.springframework-version}</version>
			<exclusions>
				<!-- Exclude Commons Logging in favor of SLF4j -->
				<exclusion>
					<groupId>commons-logging</groupId>
					<artifactId>commons-logging</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-orm</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-expression</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aop</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
		<!-- Apache Commons 基础组件 -->
		<dependency>
			<groupId>commons-lang</groupId>
			<artifactId>commons-lang</artifactId>
			<version>2.6</version>
		</dependency>
		<dependency>
			<groupId>commons-collections</groupId>
			<artifactId>commons-collections</artifactId>
			<version>3.2.1</version>
		</dependency>
		<dependency>
			<groupId>commons-beanutils</groupId>
			<artifactId>commons-beanutils</artifactId>
			<version>1.8.3</version>
		</dependency>

		<dependency>
			<groupId>commons-fileupload</groupId>
			<artifactId>commons-fileupload</artifactId>
			<version>1.3</version>
		</dependency>
		<dependency>
			<groupId>commons-codec</groupId>
			<artifactId>commons-codec</artifactId>
			<version>1.8</version>
		</dependency>
		<dependency>
			<groupId>commons-configuration</groupId>
			<artifactId>commons-configuration</artifactId>
			<version>1.10</version>
		</dependency>

		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpclient</artifactId>
			<version>4.3.6</version>
		</dependency>

		<!-- 下面是返回json串时,使用到的处理相关包 Jackson -->
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-annotations</artifactId>
			<version>2.5.1</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-core</artifactId>
			<version>2.5.1</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>2.5.1</version>
		</dependency>
		<dependency>
			<groupId>org.codehaus.jackson</groupId>
			<artifactId>jackson-mapper-asl</artifactId>
			<version>1.9.13</version>
		</dependency>

		<!-- slf4j 日志文件框架使用的jar包 -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>1.7.2</version>
		</dependency>

		<!-- mysql driver 数据库驱动包 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.15</version>
		</dependency>

		<!-- c3p0 datasource 数据库联接池使用的,此处是c3p0 -->
		<dependency>
			<groupId>c3p0</groupId>
			<artifactId>c3p0</artifactId>
			<version>0.9.1.2</version>
		</dependency>
		<!-- druid 联接池,同时也提供内部默认的监控,个人推荐 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>1.0.23</version>
		</dependency>
		<!-- dbcp使用的默认联接池 配合 commons-pool 使用 -->
		<dependency>
			<groupId>commons-dbcp</groupId>
			<artifactId>commons-dbcp</artifactId>
			<version>1.4</version>
		</dependency>
		<dependency>
			<groupId>commons-pool</groupId>
			<artifactId>commons-pool</artifactId>
			<version>1.5.4</version>
		</dependency>


		<!-- 中间件 ibatis -->
		<dependency>
			<groupId>org.apache.ibatis</groupId>
			<artifactId>ibatis-core</artifactId>
			<version>3.0</version>
		</dependency>
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>1.2.3</version>
		</dependency>
		<!-- hiberante 4 -->
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-core</artifactId>
			<version>${org.hibernate-version}</version>
		</dependency>
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-validator</artifactId>
			<version>${org.hibernate-version}</version>
		</dependency>
		<dependency>
			<groupId>org.javassist</groupId>
			<artifactId>javassist</artifactId>
			<version>3.18.1-GA</version>
		</dependency>
		<!-- http-client -->
		<dependency>
			<groupId>commons-httpclient</groupId>
			<artifactId>commons-httpclient</artifactId>
			<version>3.1</version>
		</dependency>
		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpcore</artifactId>
			<version>4.3.3</version>
		</dependency>
		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpmime</artifactId>
			<version>4.3.3</version>
		</dependency>

		<!-- AspectJ -->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjrt</artifactId>
			<version>1.7.4</version>
		</dependency>

		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjweaver</artifactId>
			<version>1.7.4</version>
		</dependency>
		<!-- json-lib -->
		<dependency>
			<groupId>net.sf.json-lib</groupId>
			<artifactId>json-lib</artifactId>
			<version>2.4</version>
			<classifier>jdk15</classifier>
		</dependency>
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.7</version>
		</dependency>
		<!-- memcached -->
		<dependency>
			<groupId>com.whalin</groupId>
			<artifactId>Memcached-Java-Client</artifactId>
			<version>3.0.2</version>
		</dependency>
		<dependency>
			<groupId>com.google.code.maven-play-plugin.spy</groupId>
			<artifactId>spymemcached</artifactId>
			<version>2.6</version>
		</dependency>

		<!-- servlet3 -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>3.0.1</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>2.3</version>
			<scope>provided</scope>
		</dependency>

	</dependencies>

</project>

 

特别要注意pom.xml中标红的,那是我使用dubbox-server工程打出来的接口jar包,我上传到了本地仓库中。如果你直接放到了lib中,就不需要此引用。

完整源码包下载

dubbox-service

dubbox-client

 

 

 

 

阿里云服务器初始化

1,阿里云磁盘分区查看 fdisk -l
2,格式化  mkfs -t ext3  /dev/xvdb
3,建立挂载目录 mkdir /data
4,赋予权限 chmod 777 /data
5,挂载 mount /dev/xvdb /data
6,自动挂载 vim /etc/fstab 最后一行添加 /dev/xvdb              /data                   ext3    defaults        0 0
7,reboot
 

Struts2配置详解_配置Action

转载地址:http://blog.csdn.net/ldl420783321/article/details/7546607

Struts2的核心功能是action,对于开发人员来说,使用Struts2主要就是编写action,action类通常都要实现com.opensymphony.xwork2.Action接口,并实现该接口中的execute()方法。

该方法如下:

   public String execute() throws Exception

Struts2并不是要求所有编写的action类都要实现Action接口,也可以直接编写一个普通的Java类作为action,只要实现一个返回类型为String的无参的public方法即可:

    public String  xxx()

在实际开发中,action类很少直接实现Action接口,通常都是从com.opensymphony.xwork2.ActionSupport类继承,ActionSupport实现了Action接口和其他一些可选的接口,提供了输入验证,错误信息存取,以及国际化的支持,选择从ActionSupport继承,可以简化action的定义。

开发好action之后,好需要对action进行配置,以告诉Struts2框架,针对某个URL的请求应该交由哪个action进行处理。

 

 

1.    Action映射:
  action
映射是Struts2框架中的基本 工作单元action映射就是将一个请求URL(action的名字)映射到一个action类,当一个请求匹配某个action的名字时,框架就使用这个映射来确定如何处理请求。
                   action
元素的完整属性表

属性

是否必须

说明

name

action的名字,用于匹配URL

class

Action实现类的完整类名

method

执行Action类时调用的方法

convert

应用于action的类型转换的完整类名



 

 

 

 

       例如:
<action name="user" class="org.lesson05.UserAction">

                <result name="success">/user.jsp</result>

        </action>

 

    2. 使用method属性
           在配置action时,我们可以通过action元素的method属性来指定action调用的
       
 方法,所指定的方法,必须遵循与execute方法相同的格式。
          
 Struts2.xml文件中,我们可以为同一个action类配置不同的别名,并使用
        method
属性。
          
 Struts.xml文件中为同一个Action类配置不同的别名
            
<!-- 使用method属性 -->

<package name="methods" namespace="/"

extends="struts-default">

        <!-- 对应着MethodAction里面的execute方法 -->

        <action name="list" class="org.lesson05.MethodAction">

            <result name="success">/Methods/list.jsp</result>

        </action>

        <!-- 对应着MethodAction里面的add方法 -->

        <action name="add" class="org.lesson05.MethodAction"

method="add">

            <result name="success">/Methods/add.jsp</result>

        </action>

        <!-- 对应着MethodAction里面的edit方法 -->

        <action name="edit" class="org.lesson05.MethodAction"

method="edit">

            <result name="success">/Methods/edit.jsp</result>

        </action>

        <!-- 对应着MethodAction里面的delete方法 -->

        <action name="delete"

class="org.lesson05.MethodAction"

 method="delete">

            <result name="success">/Methods/delete.jsp</result>

        </action>

</package>

对应的MethodAction类,代码如下:
            
importcom.opensymphony.xwork2.ActionSupport;

public class MethodAction extends ActionSupport

{

 

    @Override

    public String execute() throws Exception

    {

       return SUCCESS;

    }

   

    public String add() throws Exception

    {

       return SUCCESS;

    }

   

    public String edit() throws Exception

    {

       return SUCCESS;

    }

   

    public String delete() throws Exception

    {

       return SUCCESS;

    }

}

           使用actionmethod属性可以任意指定处理请求的方法(只要该方法和execute

方法具有相同的格式),这样就可以在同一个类中完成相关的任务,而不需要去编写不

同的Action类。

           注意:Struts2在根据action元素的method属性查找方法时有两种途径:

           1.查找与method属性值完全一致的方法.
2.
查找doMethod()形式的方法.

   3.动态方法调用:

         另外一种无需配置就可以直接调用Action中的非execute方法的方式,是使用

Struts2的动态方法调用。

   动态方法调用是在action的名字中使用感叹号(!)来标识要调用的方法名,其语法格

式为 actionName!methodName.action

   例如,我们配置了如下的action

   <action name="user" class="org.lesson05.UserAction">

            <result name="success">/Methods/list.jsp</result>

   </action>

          当请求/user!delete.action时,就会自动调用UserAction中的delete()

提示,这种调用方式会带来安全隐患!

 

4模拟Struts1中的ForwardAction
             <action name="user">

       <result>/index.jsp</result>

              </action>

      这样写就可以了.

 

   5.默认的action

         如果请求一个不存在的action,结果将是HTTP404错误。在Struts2中,可以指定一个默认的action,如果一个请求没有其他的action匹配,那么默认的action将被执行。

         默认的action使用default-action-ref元素来声明,如下所示:

          <!-- 默认action -->

<package name="defaultAction" namespace="/default"

extends="struts-default">

        <default-action-ref name="error"></default-action-ref>    

        <action name="defaultaction"

class="org.lesson05.DefaultAction">

            <result name="success">/defaultAction.jsp</result>

        </action>

        <action name="error">

            <result>/error.jsp</result>

        </action>

    </package>

   注意:根据struts-2.0.dtd中定义的package元素的内容模型,

default-acion-ref必须在action元素之前使用。

   如果请求的是/default/defaultaction1.action,框架找不到映射到defaultaction1action,那么名为erroraction将被调用。

    注意:每个包中都可以有它自己默认的action,但是每一个名称空间应该只有一个默认action。如果具有相同名称空间的多个包中都声明了默认action,那么哪一个action才是默认的将无法保证。

    注意:默认action只对action的访问有效。如果你访问一个非action的资源,例如/user.jsp,而该页面不存在,这时仍会看到HTTP404错误。如果想为整个Web应用程序指定默认页面,需要在web.xml文件中对HTTP404错误指定相应的错误处理页面。

 

6.通配符映射

      随着Web应用程序的增加,所需的Action也会更多,从而导致大量的action映射,使用通配符可以减少action配置的数量,使一些具有类似行为的Action或者Action方法可以使用通用的样式来配置。

      通配符即星号(*),用于匹配0个或多个字符,在配置action时,可以在action元素的name属性中使用星号(*)来匹配任意的字符。

             以下是在action映射中使用通配符:
              
 <action name="news*"          

class="org.struts2.lesson05.News{1}Action">

                    <result name="success">/WEB-INF/News/{1}.jsp</result>

        </action>

      我们在action元素的name属性中使用了通配符(*),允许这个映射匹配所有以/news开始的URL,例如/newsAdd,/newsEdit,/newsDelete,但是,如果请求的是/newsEdit/add,那么这个映射就不会被匹配。

      在上面,有一个特殊的记号{1},这是作为占位符使用的,它将被通配符所匹配的值替换,例如访问/newsEdit,通配符(*)匹配的部分是Edit,那么,这个值将替换{1},最终调用的类是org.struts2.lesson05.NewsEditAction,Action

   执行成功后导向的结果页面是/WEB-INF/News/Edit.jsp

      action映射和action结果中,通配符匹配的值可以用记号{N}来访问,N是从19的数字,指出替换的是哪一个通配符匹配的值。整个请求URL可以用记号{0}来访问。例如如下的action映射:
    
 <action name="*_*" class="org.struts2.lesson05.{1}Action"  

method="{2}">

            <result>/WEB-INF/News/{0}.jsp</result>

        </action>

      当访问/News_delete时,name属性中的第一个”*”匹配News,第二个”*”匹配deleteclass属性中使用的记号是{1},所以被News所替换,method属性中使用的记号是{2},于是被delete所替换。结果映射中使用的记号是{0},于是被整个URL替换,即News_delete所替换。整个替换后的结果是:当请求/News_delete时,框架调用NewsAction实例的delete方法对请求进行处理。执行成功后,请求被导向到/WEB-INF/News/News_delete.jsp页面。

      通配符方法设置的另一种常见方式是使用后缀通配符,即将”*”放在action名字的后面,在”*”和名字前缀之间使用一个特殊字符作为分隔,常用的特殊字符是下划线(_),当然也可以使用其他字符。例如:

               <action name="News_*"

class="org.struts2.lesson05.NewsAction" method="{1}">

                    <result>/WEB-INF/News/{0}.jsp</result>

        </action>

       当请求/News_delete时,调用的是NewsAction实例的delete方法,当请求/News_edit的时候,调用的是NewsAction实例的edit方法

No provider available for the service 有更新!

1,在搭建dubbo生产者与消费者过程中,启动生产者正常。。

启动消费者时,提示报错。

报错如下  http://file.xuahua.com/blog/2016/0901/QQ%E5%9B%BE%E7%89%8720160901112511.png

 

配置如下:

生产者 配置文件独立的 spring-dubbo.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:dubbo="http://code.alibabatech.com/schema/dubbo"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
        http://www.springframework.org/schema/beans/spring-beans.xsd  
        http://code.alibabatech.com/schema/dubbo  
        http://code.alibabatech.com/schema/dubbo/dubbo.xsd">  
   
    <!-- 具体的实现bean -->  
    <bean id="demoService" class="com.xuahua.service.DemoServiceImpl" />  
      
    <!-- 提供方应用信息,用于计算依赖关系 -->  
    <dubbo:application name="demoService_provider" owner="programmer" organization="dubbox" />  
   
    
    <!-- 使用zookeeper注册中心暴露服务地址 -->  
    <dubbo:registry protocol="zookeeper" address="192.168.0.101:2181"  />   
    
    <!-- 用dubbo协议在20880端口暴露服务 -->  
    <dubbo:protocol name="dubbo" port="20880" />  
   
    <!-- 声明需要暴露的服务接口 -->  
    <dubbo:service interface="com.xuahua.interfaces.DemoService" ref="demoService"  timeout="3000" />  
      
</beans> 

 

消费者配置文件 spring_dubbo.xml

 <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->  
    <dubbo:application name="demoService_consumer" owner="programmer" organization="dubbox" />  
  
    <!-- 使用zookeeper注册中心暴露服务地址 -->  
 
    <dubbo:registry protocol="zookeeper" address="192.168.0.101:2181" />  
  
    <!-- 生成远程服务代理,可以像使用本地bean一样使用demoService -->  
    <dubbo:reference id="demoService"  
        interface="com.xuahua.interfaces.DemoService" check="false" />  

之前定义的interface接口文件  DemoService.java

package com.xuahua.interfaces;

import java.util.List;

/**
 * @author wyong
 * 定义测试例子
 */
public interface DemoService {

	/**
	 * @param name
	 * @return
	 * 定义方法,与某人打招呼
	 */
	String sayHello(String name);  
	  
    /**
     * @return
     * 用户列表
     */
    public List getUsers(); 
}

 

此文件与实现在生产端布署。所以实现文件为

DemoServiceImpl.java

package com.xuahua.service;

import java.util.ArrayList;
import java.util.List;




import org.springframework.stereotype.Service;

import com.xuahua.interfaces.DemoService;
import com.xuahua.model.User;

@Service("demoService")
public class DemoServiceImpl implements DemoService {

	public String sayHello(String name) {
		return "Hello " + name;  
	}

	public List getUsers() {
		 List list = new ArrayList();  
         User u1 = new User();  
         u1.setName("jack");  
         u1.setAge(20);  
         u1.setSex("男");  
           
         User u2 = new User();  
         u2.setName("tom");  
         u2.setAge(21);  
         u2.setSex("女");  
           
         User u3 = new User();  
         u3.setName("rose");  
         u3.setAge(19);  
         u3.setSex("女");  
           
         list.add(u1);  
         list.add(u2);  
         list.add(u3);  
         return list;  
	}

}

 

其中的User.java 自己定义了三个属性。

package com.xuahua.model;

public class User extends BaseEntity {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	String name;
	Integer age;
	String sex;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}

}

以上为生产者的配置以及实现。

把DemoService接口打成独立 的jar。放到消费者端lib包中。

消费者端,实现

ackage com.xuahua.controller;

import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.xuahua.interfaces.DemoService;
import com.xuahua.model.User;

@Controller
@RequestMapping("/demo")
public class DemoController {

	DemoService demoService;
	
	
    //定义此方法Uri 请求路径为 /demo/index
	@RequestMapping("/index")
	public String index(Model model){
		List<User> users = demoService.getUsers();
		if(users!=null && !users.isEmpty()){
			for(User u : users){
				System.out.println(u.getName()+"--"+demoService.sayHello(u.getName()));
			}
		}
		System.out.println("=========");
		//默认会读取配置文件中 spring-webmvc.xml 中配置;
		//路径 /WEB-INF/views/index.jsp
		return "index";
	}


	public DemoService getDemoService() {
		return demoService;
	}


	public void setDemoService(DemoService demoService) {
		this.demoService = demoService;
	}

}

 

问题怎么解决?等待揭晓答案。。。。

从二个方面入手。

1,telnet 192.168.0.101 2181 是否ok

2,从消费者发起telnet 192.168.0.38 20880

输入命令应该可以看到提供的服务。

以上记录下。

 

公告

喧哗博客--繁华过后的沉寂--技术经验分享^-^
Copyright (c) 2009-2019, b3log.org & hacpai.com