EJB 분산 원격 호출의 간단한 예입니다.[소스 코드 첨부]
원격 분포식 응용 프로그램이라고 하면 모두 현재의 클라우드 컴퓨팅을 연상할 수 있다.분포식 기반 구조.
이전의 코드를 뒤져서 여기에 붙여서 분포식에 대한 몇 가지 견해를 여러분과 함께 배웁니다.
안타깝게도 EJB라는 분포식은 많이 사용되지 않는다. 큰 프로젝트가 아니라 대기업에서 EJB를 사용하는 사람이 거의 없다.일반인이 RMI나 웹 서비스로 할 수 있는 것은 기업이 너무 높은 대가를 치르지 않는다.물론 더 간단한 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>
마지막으로 상기 자바 파일을jar 패키지로 포장합니다.
테스트 클래스를 작성하여 테스트를 진행하다.자바 프로젝트 [클라이언트]를 새로 만듭니다.방금 포장한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가 다르게 쓰여 있습니다.
원본 주소: 링크 열기 클릭
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Exception Class에서 에러 코드 해석 ~초기초편~직장에서 C# 프로젝트가 내뿜는 오류 코드를 구문 분석하고 오류의 위치를 확인하기 위해 Exception class를 활용할 수 있었습니다. 지금까지 Exception Class 에 대해서 별로 파악할 수 없었기 때...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.