EJB分布式远程调用的小例子的简单实现。[附源码]

EJB分布式远程调用的小例子的简单实现[附源码,欢迎学习研究。]

说起远程分布式应用大家可能都会联想到现在的云计算。基于分布式的架构。

翻出以前的代码,贴在这里,和大家一起学习关于分布式的几点见解。

可惜EJB这种分布式用的不多,不是一些大的项目,大的企业几乎少有人会用到EJB。一般人用RMI或WebService就能完成的东东,没有企业会付出太高的代价。当然还有更简单的基于HTTPURLCOnnection实现的。总之不管哪种都是远程调用的一种实现,这里说下EJB分布式的远程调用。

EBJ是基于接口的编程,所有它一定会有相应的接口级实现类。调用者无须关心如何实现。只用相应接口接收即可。

首先,使用创建一个EBJ项目。[服务端]

定义一个远程接口。用注解@Remote标注。[@Local表示本地。]

package com.tudou.t1Test; import java.util.List; import javax.ejb.Remote; @Remote public interface StudentDao { public List<Student> queryStudents(); public boolean addStu(Student student); }

以及它的实现类[@stateless表示的是无状态会话bean,@statefull表示的是有状态会话bean,区别是前者比后者效率高,但是不能保留后者那种在会话中的数据]:

package com.tudou.t1Test; import java.util.List; import javax.ejb.Stateless; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.Query; @Stateless public class StudentDaoBean implements StudentDao { // 动态生成entityManager @PersistenceContext public EntityManager em; public boolean addStu(Student student) { try { em.persist(student); } catch (Exception e) { return false; } return true; } @SuppressWarnings("unchecked") public List<Student> queryStudents() { Query query = em.createQuery("select s from Student as s"); return query.getResultList(); } }
<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> <persistence-unit name="StudentPu" transaction-type="JTA"> <jta-data-source>java:/MySqlDS</jta-data-source> <properties> <property name="hibernate.show_sql" value="true" /> <property name="hibernate.format_sql" value="true" /> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" /> <property name="hibernate.hbm2ddl.auto" value="update" /> </properties> </persistence-unit> </persistence>

以上的配置文件persistence.xml文件来自JBOSS目录jboss/docs/examples/jca下的mysql-ds.Xml中,JNDI必须保持一致。[注:tomcat不支持分布式,JBOSS和WEBLOGIC可以实现]

附:mysql-ds.xml

<datasources> <local-tx-datasource> <jndi-name>MySqlDS</jndi-name> <connection-url>jdbc:mysql://10.3.34.83:3306/test</connection-url> <driver-class>com.mysql.jdbc.Driver</driver-class> <user-name>root</user-name> <password>root</password>


最后将以上java文件打包成jar包。


编写测试类,进行测试。新建一个java项目[客户端]。导入刚才打包的jar。

package com.tudou.test; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Properties; import java.util.TimeZone; import javax.naming.Context; import javax.naming.InitialContext; import org.junit.BeforeClass; import org.junit.Test; import com.tudou.t1Test.Student; import com.tudou.t1Test.StudentDao; public class TestStu { private static StudentDao studentDao; @BeforeClass public static void setUpBeforeClass() throws Exception { Properties p = new Properties(); // weblogic值为weblogic.jndi.WLInitialContextFactory // JBOSS为org.jnp.interfaces.NamingContextFactory p.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); // Weblogic为 t3://localhost:7001 p.setProperty(Context.PROVIDER_URL, "localhost"); InitialContext init = new InitialContext(p); // weblogic为LoginBean#后面是实现类的全路径,包括包名 // 此时接口中必须配置为:@Stateless(mappedName="LoginBean") studentDao = (StudentDao) init.lookup("StudentDaoBean/remote"); } @Test public void loginTest() { TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); sdf.setTimeZone(timeZone); String times = sdf.format(new Date()); Student s1 = new Student("scce005", "tudou", times); Student s2 = new Student("scce002", "doudou", times); Student s3 = new Student("scce003", "qq", times); Student s4 = new Student("scce004", "yaerfeng", times); boolean flag1 = studentDao.addStu(s1); boolean flag2 = studentDao.addStu(s2); boolean flag3 = studentDao.addStu(s3); boolean flag4 = studentDao.addStu(s4); if (flag1 == true) { System.out.println("用户1添加成功!!!"); } else { System.out.println("添加失败!!!"); } if (flag2 == true) { System.out.println("用户2添加成功!!!"); } else { System.out.println("添加失败!!!"); } if (flag3 == true) { System.out.println("用户3添加成功!!!"); } else { System.out.println("添加失败!!!"); } if (flag4 == true) { System.out.println("用户4添加成功!!!"); } else { System.out.println("添加失败!!!"); } List<Student> lists = studentDao.queryStudents(); if (lists != null) { System.out.println("学号\t\t姓名\t\t入学日期"); for (Student s : lists) { System.out.println(s.getStuNo() + "\t" + s.getStuName() + "\t\t" + s.getCreateDate()); } } else { System.out.println("里面是空的"); } } }
在测试之下。服务端必须先启动,可以开多个客户端进行测试。注释中有写jboss和weblogic使用的不同。

源码地址: 点击打开链接
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值