MyEclipse、JBoss开发EJB-EntityBean学习

软件:MyEclipse9.0,jboss-6.1.0.Final,apache-tomcat-6.0.35,MySQL Server 5.1,jdk1.6.0_21

 

根据《MyEclipse 6 Java 开发中文教程》中的第十六章开发EJB应用,学习EntityBean,并根据文中内容做练习。

1、创建数据源

从JBoss 的安装目录下的docs\examples\jca 中找到配置文件mysql-ds.xml,修改下数据库连接串、用户名、密码,因为跨服务器访问,所以再加上<use-java-context>false</use-java-context>标签,

<jndi-name>MySqlDS</jndi-name>
<use-java-context>false</use-java-context>
<connection-url>jdbc:mysql://localhost:3306/housingfund</connection-url>

修改完毕后复制到JBoss 的安装目录下的server\default\deploy 下,并把Mysql驱动jar拷贝到server\default\lib 下,然后启动JBoss,可在输出信息中看到:

在查看JBoss 的JNDI,可在Global JNDI Namespace 下看到:

这样,数据源就配置好了。

 

2、使用JPA + 会话 Bean 的方式来实现远程访问数据库

按照16.6 开发实体Bean一节中所述,创建自己的EntityBean,完成后,项目目录结构如下图所示:

将项目打成jar包部署到JBoss根目录的server\default\deploy下,控制台信息输出如下:

可在Global JNDI Namespace 下看到:

发布成功。

 

3、客户端测试程序

新建web项目,新建一个信息录入页面,servlet中主要代码如下:

 

public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		String name = request.getParameter("name");
		String sex = request.getParameter("sex");
		String telephone = request.getParameter("telephone");
		String address = request.getParameter("address");
		Customer customer = new Customer();
		customer.setName(name);
		customer.setSex(Integer.valueOf(sex));
		customer.setTelephone(telephone);
		customer.setAddress(address);
		Context ctx = null;
		Properties properties = new Properties();
		properties.setProperty(Context.PROVIDER_URL, "jnp://localhost:1099");
		properties.setProperty(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory"); 	
		properties.setProperty(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
		try {
			ctx = new InitialContext(properties);
			Object object = ctx.lookup("CustomerFacade/remote");
			CustomerFacadeRemote dao = (CustomerFacadeRemote) object;
			dao.save(customer);
			List<Customer> customerList = new ArrayList<Customer>();
			customerList = dao.findAll(null);
			request.setAttribute("customerList", customerList);
			ctx.close();
		} catch (NamingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		RequestDispatcher dispatcher = request.getRequestDispatcher("index.jsp");
		dispatcher.forward(request, response);
		
	}


Jboss生成的JNDI名称,默认命名规则如下:
如果把EJB应用打包成后题为.jar的模块文件,默认的全局JNDI名称是
本地接口:EJB-CLASS-NAME/local
远程接口:EJB-CLASS-NAME/remote
部署到tomcat目录下然后启动,IE中访问,页面操作完成后保存,tomcat控制台报错(心碎,报错…):

javax.naming.NoInitialContextException: Cannot instantiate class: org.jnp.interfaces.NamingContextFactory [Root exception is java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory]
	at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:657)
	at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
	at javax.naming.InitialContext.init(InitialContext.java:223)
	at javax.naming.InitialContext.<init>(InitialContext.java:197)
	at com.bdjx.servlet.CustomerServlet.doPost(CustomerServlet.java:80)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
	at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:877)
	at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:594)
	at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1675)
	at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:247)
	at com.sun.naming.internal.VersionHelper12.loadClass(VersionHelper12.java:46)
	at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:654)
	... 18 more


赶紧google一下,网上好多都说是没引入jbossall-client.jar或者引入的client包不全,可是我在MyEclipse中查看了下项目目录下这些jar包都是有的啊,总共172个,client文件

夹下所有的jar包啊,来回测试好多次,还是报错,最后发现tomcat中发布的项目目录中只有一个jbossall-client.jar,这个里面是没有.class文件的,恍然大悟啊,于是,项目->右键->Build Path->Configure Build Path->Add External JARs,打开client目录,选中所有jar,重新部署后启动tomcat,IE中访问项目,又报错,定睛一看,松了口气,常见的问题:

2012-8-14 14:54:13 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet jsp threw exception
java.lang.NullPointerException
	at org.apache.jsp.index_jsp._jspInit(index_jsp.java:24)
	at org.apache.jasper.runtime.HttpJspBase.init(HttpJspBase.java:52)
	at org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:164)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:340)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
	at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:877)
	at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:594)
	at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1675)
	at java.lang.Thread.run(Thread.java:619)


一定是引入到jar里面有与tomcat的lib里面的jar相冲突的内容,仔细检查后,删除client中引入的jboss-el-api_2.2_spec.jar、jboss-jsp-api_2.2_spec.jar、jboss-servlet-api_3.0_spec.jar这三个包,重新部署后,启动tomcat,然后访问,一切OK!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值