J2EE之wildfly 实践4 --SpringMvc 服务访问DAS服务

wildfly 实践4 --SpringMvc 服务访问DAS服务

注:此web服务部署在50.253机器上,即与DAS服务分开部署

 (转载请注明来源:cnblogs coder-fang)

  1.   wildfly 实践3 一样,创建maven 工程,如图:
  2. 修改pom文件,如下:
    <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/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>    
        <groupId>com.sanjian.wildfly</groupId>
        <artifactId>ticketui</artifactId>
        <version>0.1</version>
        <packaging>war</packaging>
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    
            <spring-version>4.1.0.RELEASE</spring-version>
        </properties>
        <dependencies>
            <dependency>
                <groupId>com.sanjian.wildfly</groupId>
                <artifactId>ticket-agency-db</artifactId>
                <version>0.1</version>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>servlet-api</artifactId>
                <version>2.5</version>
                <scope>provided</scope>
            </dependency>
            <!-- spring -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring-version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>${spring-version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context-support</artifactId>
                <version>${spring-version}</version>
            </dependency>
            
            
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aop</artifactId>
                <version>${spring-version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aspects</artifactId>
                <version>${spring-version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>4.1.4.RELEASE</version>
            </dependency>
    
    
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-core</artifactId>
                <version>2.8.1</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>2.1.0</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-annotations</artifactId>
                <version>2.1.0</version>
            </dependency>
    
            <dependency>
                <groupId>org.codehaus.jackson</groupId>
                <artifactId>jackson-core-lgpl</artifactId>
                <version>1.9.6</version>
            </dependency>
            <dependency>
                <groupId>org.codehaus.jackson</groupId>
                <artifactId>jackson-core-asl</artifactId>
                <version>1.9.4</version>
            </dependency>
            <dependency>
                <groupId>org.codehaus.jackson</groupId>
                <artifactId>jackson-mapper-asl</artifactId>
                <version>1.9.5</version>
            </dependency>
            <dependency>
                <groupId>org.codehaus.jackson</groupId>
                <artifactId>jackson-mapper-lgpl</artifactId>
                <version>1.9.6</version>
            </dependency>
            
            <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
            <dependency>
                <groupId>commons-fileupload</groupId>
                <artifactId>commons-fileupload</artifactId>
                <version>1.3.2</version>
            </dependency>
            
            <!-- EJB -->
            
    
            <dependency>
                <groupId>org.jboss.spec.javax.transaction</groupId>
                <artifactId>jboss-transaction-api_1.2_spec</artifactId>
                <version>1.0.0.Final</version>
            </dependency>
            <dependency>
                <groupId>org.jboss.spec.javax.ejb</groupId>
                <artifactId>jboss-ejb-api_3.2_spec</artifactId>
                <version>1.0.0.Final</version>
            </dependency>
            <dependency>
                <groupId>org.jboss</groupId>
                <artifactId>jboss-ejb-client</artifactId>
                <version>2.0.1.Final</version>
            </dependency>
            <dependency>
                <groupId>org.jboss.xnio</groupId>
                <artifactId>xnio-api</artifactId>
                <version>3.2.2.Final</version>
            </dependency>
            <dependency>
                <groupId>org.jboss.xnio</groupId>
                <artifactId>xnio-nio</artifactId>
                <version>3.2.2.Final</version>
    
                
            </dependency>
            <dependency>
                <groupId>org.jboss.remoting3</groupId>
                <artifactId>jboss-remoting</artifactId>
                <version>3.3.3.Final</version>            
            </dependency>
            <dependency>  
                <groupId>jboss</groupId>  
                <artifactId>jnp-client</artifactId>  
                <version>4.2.2.GA</version>  
            </dependency>  
            
            <dependency>
                <groupId>org.jboss.sasl</groupId>
                <artifactId>jboss-sasl</artifactId>
                <version>1.0.4.Final</version>            
            </dependency>
            <dependency>
                <groupId>org.jboss.marshalling</groupId>
                <artifactId>jboss-marshalling-river</artifactId>
                <version>1.4.2.Final</version>
            </dependency>
                     
        </dependencies>
        <!-- spring end -->
        <build>
            <finalName>${project.artifactId}</finalName>
            <plugins>
                <plugin>
                    <groupId>org.wildfly.plugins</groupId>
                    <artifactId>wildfly-maven-plugin</artifactId>
                    <version>1.0.2.Final</version>
                    <configuration>
                        <filename>${project.build.finalName}.war</filename>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.1</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                    </configuration>
                </plugin>
    
            </plugins>
        </build>
    </project>
    View Code
  3. 在WEB-INF下创建相关配置文件,目录如下:
  4.   web.xml配置如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
      <display-name>ticket ui</display-name>
      <context-param>
        <param-name>webAppRootKey</param-name>
        <param-value>webapp.root</param-value>
      </context-param>  
      <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
                /WEB-INF/applicationContext.xml
            </param-value>
      </context-param>
      <context-param>
        <param-name>spring.profiles.default</param-name>
        <param-value>production</param-value>
      </context-param>
      <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>
      <servlet>
        <servlet-name>restappServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>/WEB-INF/servlet-context.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
        <servlet-name>restappServlet</servlet-name>
        <url-pattern>/</url-pattern>
      </servlet-mapping>
      <filter>
        <filter-name>characterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
          <param-name>encoding</param-name>
          <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
          <param-name>forceEncoding</param-name>
          <param-value>true</param-value>
        </init-param>
      </filter>
      <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>
    
    </web-app>
    View Code
  5. servlet-context.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:jee="http://www.springframework.org/schema/jee"
        xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
        xmlns:task="http://www.springframework.org/schema/task" xmlns:aop="http://www.springframework.org/schema/aop"
        xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:util="http://www.springframework.org/schema/util"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
        http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
        http://www.springframework.org/schema/util  http://www.springframework.org/schema/util/spring-util-3.0.xsd 
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd  ">
    
        <mvc:annotation-driven />
          <context:component-scan base-package="com.ticket.controller" /> 
    
    
    
        <bean
            class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />
        <bean id="defaultAnnotationHandlerMapping"
            class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
    
        <bean id="annotationMethodHandlerAdapter"
            class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
            <property name="messageConverters">
                <list>
                    <bean
                        class="org.springframework.http.converter.BufferedImageHttpMessageConverter" />
                    <bean
                        class="org.springframework.http.converter.ByteArrayHttpMessageConverter" />
                    <bean
                        class="org.springframework.http.converter.StringHttpMessageConverter">
                        <property name="supportedMediaTypes">
                            <list>
                                <value>text/html;charset=utf-8</value>
                                <value>text/xml</value>
                                <value>text/plain</value>
                            </list>
                        </property>
                    </bean>
                    <bean id="mappingJacksonHttpMessageConverter"
                        class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                        <property name="supportedMediaTypes">
                            <list>
                                <value>application/json;charset=UTF-8</value>
                            </list>
                        </property>
                    </bean>
                </list>
            </property>
        </bean>
        <!-- 配置文件上传解析器 -->
        <bean id="multipartResolver"
            class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
            <property name="defaultEncoding" value="utf-8" />
            <property name="maxUploadSize" value="10485760" />
            <property name="maxInMemorySize" value="40960" />
             <!--resolveLazily属性启用是为了推迟文件解析,以便在UploadAction 中捕获文件大小异常-->  
            <property name="resolveLazily" value="true"/>    
        </bean>
    </beans>
    View Code
  6. applicationContext.xml配置如下,此处为预留配置,还未加相关bean:
    <?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:jee="http://www.springframework.org/schema/jee"
        xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
        xmlns:task="http://www.springframework.org/schema/task" xmlns:aop="http://www.springframework.org/schema/aop"
        xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:util="http://www.springframework.org/schema/util"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
        http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
        http://www.springframework.org/schema/util  http://www.springframework.org/schema/util/spring-util-3.0.xsd 
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd  ">
    
    </beans>
  7. jboss-ejb-client.xml配置如下:
    <jboss-ejb-client xmlns="urn:jboss:ejb-client:1.0">
        <client-context>
            <ejb-receivers>
                <remoting-ejb-receiver outbound-connection-ref="remote-ejb-connection"/>
            </ejb-receivers>
        </client-context>
    </jboss-ejb-client>
  8. 创建 com.ticket.controller.MainController,代码片段如下:
    @Controller
    @RequestMapping(value = "/")
    public class MainControll{
        private static final Logger logger = Logger.getLogger("MainControll");
        private static Context ctx;
        
        private SiteManagerRemote siteRemote;
    @PostConstruct
        public void setup() throws NamingException{
            try {
                
                MainControll.ctx = new InitialContext();
                siteRemote = (SiteManagerRemote) ctx.lookup("ejb:/ticket-agency-db//SiteManager!com.sanjian.boundary.SiteManagerRemote");
    }
    catch(Exception e){
    }}
    
    @RequestMapping(value = "/show/{status}",method=RequestMethod.GET)    
        @ResponseBody
        public Object showSeats(HttpSession session,@PathVariable int status) {
            
            HashMap<String, Object> ret = new HashMap<String, Object>();
            
            try {
                
                
                
                QueryResult<Site> st = siteRemote.listSites(status);
                
                //siteRemote.saveSite(s,p);
                ret.put("data", st.getResultlist());
                ret.put("total", st.getTotalrecord());
                
    
        
            } catch (Exception e) {
                
                e.printStackTrace();
                ret.put("error", e.getMessage());
            }
    
            return ret;
        }
    
    }
    View Code
  9. 运行Run->RunConfiguration,如图:
  10. 确保本机(50.253)中的wildfly 已运行,点击上图中的Run按钮。
  11. 成功的代码片段如下:
    [INFO] Scanning for projects...
    [INFO]                                                                         
    [INFO] ------------------------------------------------------------------------
    [INFO] Building ticketui 0.1
    [INFO] ------------------------------------------------------------------------
    [INFO] 
    [INFO] >>> wildfly-maven-plugin:1.0.2.Final:deploy (default-cli) > package @ ticketui >>>
    [INFO] 
    [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ ticketui ---
    [INFO] Using 'UTF-8' encoding to copy filtered resources.
    [INFO] Copying 0 resource
    [INFO] 
    [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ ticketui ---
    [INFO] Changes detected - recompiling the module!
    [INFO] Compiling 2 source files to E:StudyCodeWorkSpace	icket-agency	icket-agency-ui	argetclasses
    [WARNING] /E:/StudyCode/WorkSpace/ticket-agency/ticket-agency-ui/src/main/java/com/ticket/controller/MainControll.java: E:StudyCodeWorkSpace	icket-agency	icket-agency-uisrcmainjavacom	icketcontrollerMainControll.java使用了未经检查或不安全的操作。
    [WARNING] /E:/StudyCode/WorkSpace/ticket-agency/ticket-agency-ui/src/main/java/com/ticket/controller/MainControll.java: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。
    [INFO] 
    [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ ticketui ---
    [INFO] Using 'UTF-8' encoding to copy filtered resources.
    [INFO] Copying 0 resource
    [INFO] 
    [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ ticketui ---
    [INFO] Nothing to compile - all classes are up to date
    [INFO] 
    [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ ticketui ---
    [INFO] 
    [INFO] --- maven-war-plugin:2.2:war (default-war) @ ticketui ---
    [INFO] Packaging webapp
    [INFO] Assembling webapp [ticketui] in [E:StudyCodeWorkSpace	icket-agency	icket-agency-ui	argetticketui]
    [INFO] Processing war project
    [INFO] Copying webapp resources [E:StudyCodeWorkSpace	icket-agency	icket-agency-uisrcmainwebapp]
    [INFO] Webapp assembled in [420 msecs]
    [INFO] Building war: E:StudyCodeWorkSpace	icket-agency	icket-agency-ui	arget	icketui.war
    [INFO] WEB-INFweb.xml already added, skipping
    [INFO] 
    [INFO] <<< wildfly-maven-plugin:1.0.2.Final:deploy (default-cli) < package @ ticketui <<<
    [INFO] 
    [INFO] --- wildfly-maven-plugin:1.0.2.Final:deploy (default-cli) @ ticketui ---
    十二月 13, 2016 4:36:14 下午 org.xnio.Xnio <clinit>
    INFO: XNIO version 3.2.2.Final
    十二月 13, 2016 4:36:14 下午 org.xnio.nio.NioXnio <clinit>
    INFO: XNIO NIO Implementation Version 3.2.2.Final
    十二月 13, 2016 4:36:14 下午 org.jboss.remoting3.EndpointImpl <clinit>
    INFO: JBoss Remoting version 4.0.3.Final
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 12.776 s
    [INFO] Finished at: 2016-12-13T16:36:21+08:00
    [INFO] Final Memory: 24M/204M
    [INFO] ------------------------------------------------------------------------
    View Code
  12. 打开浏览器,输入 http://localhost:8080/ticketui/show/2,则显示出从数据库读取出的json文本。

 阶段总结:至此 WEB服务访问EJB服务的实践已完成,项目较大的话业务服务也可完全独立出SessionBean,如果同学们无法完成,则大部分可能的问题都是配置问题,分布式的业务服务大体流程即为如此,文笔不好,谅解。

原文地址:https://www.cnblogs.com/coder-fang/p/6170552.html