`
Ivan_Pig
  • 浏览: 386788 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

坎坷的Struts2+EJB3入门程序

阅读更多
最近在看Struts2和EJB3,出于好奇,就想试试用部署在tomcat上的struts2去访问部署在jboss上的EJB3程序。对于EJB3之前只用过里面的jpa,感觉很好用,或者说注释很方便,比xml好用。谁知就这个程序耗了我三四个晚上的时间。现在终于搞定了,记录一下,也帮助后来者少走弯路。(感谢论坛id:小疯子的热情帮助^-^)
首先是Struts2的前端页面,so easy!!输入用户名密码,提交。。。。
代码如下:
         <form action="login.action" method="post">
		name:<input type="text" name="name"/><br>
		password:<input type="password" name="psd"/><br>
		<input type="submit" value="submit">
	</form>


配置web.xml文件
    <filter>
  	<filter-name>struts2</filter-name>
  	    <filter-class>
                org.apache.struts2.dispatcher.FilterDispatcher
            </filter-class>
         </filter>
  
    <filter-mapping>
  	<filter-name>struts2</filter-name>
  	<url-pattern>/*.action</url-pattern>
    </filter-mapping>

接着是struts2.xml文件
<struts>
	<!-- Add packages here -->
	<package name="struts2" extends="struts-default">
	   <action name="login" class="org.ivan.struts2.LoginAction">
	     <result name="success">success.jsp</result>
	     <result name="failture">failture.jsp</result>
	   </action>
	</package>
</struts>


Action类
package org.ivan.struts2;

import java.util.Properties;

import javax.naming.*;

import org.ivan.ejb.CheckBean;
import org.ivan.struts2.bean.Point;
import org.jnp.interfaces.NamingContextFactory;


public class LoginAction{
	
	private String name;
	private String psd;
	private int age;
	private Point point;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPsd() {
		return psd;
	}

	public void setPsd(String psd) {
		this.psd = psd;
	}


	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public Point getPoint() {
		return point;
	}

	public void setPoint(Point point) {
		this.point = point;
	}
	
	public String execute() throws Exception {
	     if ("Ivan".equals(name.trim()) && "dd".equals(password.trim())) {
			return true;
		}
		return false;
			}
	}

这些东西随便找本struts2的书籍,一看就知道了,不多说。
程序往tomcat里一部署就搞定了。。
到这里都没遇到问题。

下面编写EJB程序,一个sessionbean,有个方法check,接收name和password参数,验证是否为Ivan和dd。
代码如下:
package org.ivan.ejb;

public interface CheckBean {
	boolean check(String name,String password);
}

实现类
package org.ivan.ejb.impl;

import java.util.List;

import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.Query;

import org.ivan.ejb.CheckBean;
import org.ivan.ejb.jpa.UserBean;
import org.ivan.ejb.util.JPAUtil;

@Stateless
@Remote
public class CheckBeanImpl implements CheckBean {

	
	@Override
	public boolean check(String name, String password) {
		if ("Ivan".equals(name.trim()) && "dd".equals(password.trim())) {
			return true;
		}
		return false;
			}

}


ok.依然很顺。部署到jboss4.22上,看见这个bean了。

一直到这里都没卡住。。。。。窃喜。。。。
下面问题来了,开始两个程序的相互调用。
修改Action类里的execute方法。改成如下代码。

public String execute() throws Exception {
          /*------------1---------------*/
		Properties props = new Properties();

		props.setProperty("java.naming.factory.initial",
		"org.jnp.interfaces.NamingContextFactory");

		props.setProperty("java.naming.provider.url", "jnp://localhost:1099");
		
            
		InitialContext context = new InitialContext(props);
            /*--------------2----------------*/
		CheckBean checker = (CheckBean) context.lookup("CheckBeanImpl/remote");
		if (checker.check(name, psd)) {
			return "success";
		}
		return "failture";
	}

就这几行代码,我就折腾了一个晚上。。。。。晕。
首先,在1处,如果不创建Properties类,而写配置文件的话找不到配置文件。。。。它老找tomcat下的相应属性。(可能位置没放对,目前不清楚,待会再试试!)
再来,改成了目前这样的代码,运行,提示找不到org.jnp.interfaces.NamingContextFactory。。。。又搞一小时,需要把jboss目录下的client目录下的jar包添加到struts2程序的lib里。
接着,说找不到CheckBean接口。。。我已经把struts项目引了ejb项目了,依然没用,最后,拷贝了一份CheckBean到struts里面。

好不容易啊,终于有结果了。。。

再进一步,jpa访问数据库来验证数据。
数据库就两字段,name,password....
接着是EntityBean
package org.ivan.ejb.jpa;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity(name="user")
public class UserBean {
	@Id
	private String name;
	private String password;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}
}



继续,修改CheckBeanImpl里的代码,调用EntityBean访问数据库。
package org.ivan.ejb.impl;

import java.util.List;

import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import org.ivan.ejb.CheckBean;
import org.ivan.ejb.jpa.UserBean;
import org.ivan.ejb.util.JPAUtil;

@Stateless
@Remote
public class CheckBeanImpl implements CheckBean {

	@PersistenceContext(unitName="loginDS")      //注入EntityManager,现在很流行注入啊,呵呵
	EntityManager em ;
	@Override
	public boolean check(String name, String password) {
//		if ("Ivan".equals(name.trim()) && "dd".equals(password.trim())) {
//			return true;
//		}
//		return false;
		
		String sql = "SELECT u FROM user u WHERE u.name = :n AND u.password = :p";
		Query query = em.createQuery(sql);
		query.setParameter("n", name);
		query.setParameter("p", password);
		List<UserBean> us = query.getResultList();
		if(us.size() > 0){
			return true;
		}
		return false;
	}

}


配置persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 
    <persistence-unit name="loginDS">
    
         <provider>
           org.apache.openjpa.persistence.PersistenceProviderImpl
        </provider>
        
        <jta-data-source>java:/MySqlDS</jta-data-source>
        
        <class>org.ivan.ejb.jpa.UserBean</class>
        
        
    </persistence-unit>
</persistence>



好了,问题来了。。。。
它死活找不到数据源,网上搜了半天。。。。SessionBean访问数据源好像只能通过jta来配。。。。jta....从来没接触过。。就这个问题,郁闷了两天。最后终于解决了。。。
首先,到jboss-4.2.2.GA\docs\examples\jca目录下,看看,一堆配置文件。。。我用的mysql,就拷贝mysql-ds.xml到jboss-4.2.2.GA\server\default\deploy目录下。修改内容如下。
<datasources>
  <local-tx-datasource>
    <jndi-name>MySqlDS</jndi-name>
    <connection-url>jdbc:mysql://localhost:3306/login</connection-url>
    <driver-class>com.mysql.jdbc.Driver</driver-class>
    <user-name>root</user-name>
    <password>root</password>
    <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
    <metadata>
       <type-mapping>mySQL</type-mapping>
    </metadata>
  </local-tx-datasource>
</datasources>



应该很好懂吧。。。这就配置了mysql的数据源了。然后在persistence.xml里调用。
这一句
<jta-data-source>java:/MySqlDS</jta-data-source>

呼,再运行,又报错。。。。。找不到mysql驱动。。。。。晕,这些东西我早放程序里面去了。。。。
火了,直接把jar包给拷贝到了jboss的lib里去了。。。。。。
搞定。。。晕。。。




哎,花了一周时间就写了这么个程序。还从没花这么长时间来入门的。单独的struts2,ejb3程序也就一次搞定的。两者结合就搞出这么多毛病来。
要学的东西实在是太多了啊。。。
jta,jndi,rmi,jboss......
之前只用过tomcat,jetty等web容器,也用过glassfish,也就当web容器用。。。看来应用服务器要复杂得多啊。努力。。。。
分享到:
评论
2 楼 TaoistWar 2010-01-29  
你这也算整合?只是简单的累积到一起了。
1 楼 liyaxi 2009-02-15  
感谢了, 好人!

相关推荐

    struts1+2入门与精通(高清pdf格式)

    本教程“Struts1+2入门与精通”旨在帮助初学者和有经验的开发者理解并掌握这两个版本的核心概念和技术。 **Struts1**: 1. **基础架构**:Struts1基于Model-View-Controller设计模式,它将业务逻辑、数据表示和用户...

    java高手真经 高级编程卷 卷2(4卷)

    (2)EJB入门样例 EJBTest.zip //03.EJB入门样例——HelloWorld EJBTestJava.zip //03.Java测试客户端 EJBTestJSP.zip //03.JSP测试客户端 SessionBeanTest.zip //04.会话Bean开发样例 MDBTest.zip //...

    java高手真经 高级编程卷 卷3(4卷)

    (2)EJB入门样例 EJBTest.zip //03.EJB入门样例——HelloWorld EJBTestJava.zip //03.Java测试客户端 EJBTestJSP.zip //03.JSP测试客户端 SessionBeanTest.zip //04.会话Bean开发样例 MDBTest.zip //...

    java高手真经 高级编程卷 卷4(4卷)

    (2)EJB入门样例 EJBTest.zip //03.EJB入门样例——HelloWorld EJBTestJava.zip //03.Java测试客户端 EJBTestJSP.zip //03.JSP测试客户端 SessionBeanTest.zip //04.会话Bean开发样例 MDBTest.zip //...

    java高手真经 高级编程卷 光盘内容 卷1(4卷)

    (2)EJB入门样例 EJBTest.zip //03.EJB入门样例——HelloWorld EJBTestJava.zip //03.Java测试客户端 EJBTestJSP.zip //03.JSP测试客户端 SessionBeanTest.zip //04.会话Bean开发样例 MDBTest.zip //...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 1.2.3 业务逻辑组件 1.3 J2EE容器 1.3.1 容器服务 1.3.2 容器类型 1.4 ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 1.2.3 业务逻辑组件 1.3 J2EE容器 1.3.1 容器服务 1.3.2 容器类型 1.4 ...

    EJB3与Struts与Spring整合开发(SSE)

    SSE入门程序的配置文件,比如struts.xml、spring-context.xml和ejb-jar.xml,是理解和学习整合的关键。struts.xml定义了Action及其对应的视图,spring-context.xml配置了Spring的bean和依赖关系,ejb-jar.xml则包含...

    SSH(Struts+spring+hibernate)整合资料

    jsp2.0(1) Spring(1) C#游戏编程(附几个游戏的源代码)(1) 使用ADO.NET和XML开发数据库应用程序(1) EJB-CMP_CMR(1) JSP(1) c#连接数据库完整代码(1) Hibernate(1) 语言规范(1) 2.0(1) Struts(1) 绝对值得下载的资料...

    泰牛程序员 韩顺平 JavaEE全套 第15部分 Struts2基础入门

    根据给定文件的信息,我们可以提炼出以下关于“泰牛程序员 韩顺平 JavaEE全套 第15部分 Struts2基础入门”的相关知识点。 ### 一、JavaEE概述 Java Platform, Enterprise Edition(JavaEE)是由Oracle公司维护的一...

    EJB3.pdf EJB3 文档 资料

    掌握EJB3的基本知识是必要的,包括理解EJB的体系结构,例如基于STRUTS+EJB3.0的应用架构。对于开发者而言,熟练掌握如何进行EJB打包、如何进行WEB应用和企业应用打包,以及如何处理第三方类库的集成等问题,是提升...

    J2EE电子商务系统开发从入门到精通:基于Struts和Hibernate技术实现

    ### J2EE电子商务系统开发从入门到精通:基于Struts和Hibernate技术实现 #### J2EE概论 - **双层架构与多层架构的区别**: - 双层架构通常指的是客户端/服务器(Client/Server, C/S)架构,这种架构下的应用程序在...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 1.2.3 业务逻辑组件 1.3 J2EE容器 1.3.1 容器服务 1.3.2 容器类型 1.4 ...

    j2ee入门心得,EJB,Java WEB 开发

    ### j2ee入门心得,EJB,Java WEB 开发 #### 关键知识点概述: - **Java Web开发基础**:包括对JSP、Servlet等基础知识的理解。 - **MVC框架的应用**:如Struts 1与Struts 2的区别及应用场景。 - **Spring框架**:...

    巴巴运动网源码 巴巴运动网 EJB+JPA+SSH

    【巴巴运动网源码 巴巴运动网 EJB+JPA+SSH】是一个与电子商务相关的项目源码,其中融合了多种技术栈,包括EJB(Enterprise JavaBeans)、JPA(Java Persistence API)以及SSH(Struts + Spring + Hibernate)。...

    struts_基础知识和入门

    ### Struts基础知识与入门详解 #### 一、MVC概念解析 MVC(Model-View-Controller)是一种广泛应用于软件工程的设计模式,特别是在Web应用程序开发领域。它将应用程序分为三个核心部分:模型(Model)、视图(View)和...

    struts2文本教程

    3. **Struts2入门**: 入门教程会涵盖如何搭建Struts2环境,包括添加依赖、配置web.xml、创建Action类、编写struts.xml配置文件等内容。还会介绍Struts2的核心概念,如Model-View-Controller(MVC)模式、...

    Struts2_基础

    Struts2是一个强大的Java web应用程序框架,用于构建和维护可扩展、高效且易于管理的Web应用。本资料包主要涵盖了Struts2的基础知识,包括框架的概述、开发环境的搭建、用户登录实现、表单处理与验证、拦截器机制...

    struts入门经验

    Struts是Java Web开发中的一个开源框架,它主要用于构建基于MVC(Model-View-Controller)模式的应用...阅读“Struts入门经验1.txt”和“Struts入门经验2.txt”文件将提供更具体的操作步骤和技巧,进一步帮助你上手。

Global site tag (gtag.js) - Google Analytics