`
baobeituping
  • 浏览: 1068680 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

EJB3 (一)【开发Entity Bean】

阅读更多

首先开发服务端:在IDE中一定记得是NEW一个EJB工程

1.开发Bean class

package dev.com.titan.domain;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="CABIN")
public class Cabin implements Serializable{
 
 private int id;
 private String name;
 private int deckLevel;
 private int shipId;
 private int bedCount;
 
 @Id
 @Column(name="ID")
 public int getId() {
  return id;
 }
 public void setId(int id) {
  this.id = id;
 }
 
 @Column(name="NAME")
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 
 @Column(name="DECK_LEVEL")
 public int getDeckLevel() {
  return deckLevel;
 }
 public void setDeckLevel(int deckLevel) {
  this.deckLevel = deckLevel;
 }
 
 @Column(name="BED_COUNT")
 public int getBedCount() {
  return bedCount;
 }
 public void setBedCount(int bedCount) {
  this.bedCount = bedCount;
 }
 @Column(name="SHIP_ID")
 public int getShipId() {
  return shipId;
 }
 public void setShipId(int shipId) {
  this.shipId = shipId;
 }

}

注释:

@Entity注解告知persistence provider 这是一个映射到数据库的实体类,并且可以受管于EntityManager服务。

@Table告知EJB容器,该BEAN类被映射到哪一张数据库表。

BEAN类一定要实现Serializable接口。

@Column表示对应映射到数据库中的字段名字,如果没有该标志,那么默认按照属性的名字来命名。

@Id 表示该属性为实体的主键。

 

2.定义persistence.xml文件

<?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="titan" transaction-type="JTA">
  <jta-data-source>java:/TitanDB</jta-data-source>
 </persistence-unit>
</persistence>

 

黑色字体部分表示告诉EJB容器要用到哪个数据源。

 

3.配置JBoss的数据库连接池

在/server/default/deploy目录中建立一个mysql-ds.xml文件,内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<datasources>

    <local-tx-datasource>
        <jndi-name>TitanDB</jndi-name>
        <connection-url>jdbc:mysql://localhost:3306/ejb</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>

 

黑体字部分的名字必须和你的persistence.xml文件中的黑体字部分一致。

 

mysql-ds.xml文件用于配置mysql的数据源。实际上,该文件可以在/docs/examples/jca目录中找到,读者只需要将数据库名、用户名和密码以及jndi名改成自己的就可以了。最后将修改后的mysql-ds.xml文件复制到deploy目录中(必须叫这个文件名)。

连接mysql数据库需要一个jdbc驱动(jar文件),将该文件复制到/server/default/lib目录中。

 

4.开发接口和实现类

接口:

package dev.com.titan.travelagent;

import javax.ejb.Remote;

import dev.com.titan.domain.Cabin;

@Remote
public interface TravelAgentRemote {
 
 public void createCabin(Cabin cabin);
 
 public Cabin findCabin(int id);
 

}
实现类:

package dev.com.titan.travelagent;

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

import dev.com.titan.domain.Cabin;

@Stateless
public class TravelAgentBean implements TravelAgentRemote {
 
 @PersistenceContext(unitName="titan") private EntityManager manager;
 public void createCabin(Cabin cabin) {
  manager.persist(cabin);

 }

 public Cabin findCabin(int id) {
  // TODO Auto-generated method stub
  return manager.find(Cabin.class, id);
 }

}

红色部分表示告诉容器去寻找unitName=titan的数据源,而该数据源对应的配置在persistence.xml中,然后根据该配置去EJB容器中找到java:/TitanDB的数据源。

@PersistenceContext

注解来获得ENTITYMANAGER服务的访问,从此来创建和查找CABIN实体,他告知EJB容器,必须用以个EntityManager实例来设置manager数据成员。

EJB容器发现数据成员类型为EntityManager,便知道将数据成员设置为一个指向 EntityManager服务的引用,此服务指向我们在persistence.xml文件里定义的unit.我们可以利用EntityManager 的persist()和find()方法来对实体类进行操作。

然后部署到JBOSS中,可以通过IDE的部署功能直接部署到JBOSS中。

 

创建数据库表:

CREATE TABLE `cabin` (
  `ID` int(11) NOT NULL auto_increment,
  `SHIP_ID` int(11) default NULL,
  `BED_COUNT` int(11) default NULL,
  `NAME` varchar(255) default NULL,
  `DECK_LEVEL` int(11) default NULL,
  PRIMARY KEY  (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

 

开发客户端:

首先将服务端打成一个JAR包,考到客户端中。

然后导入开发JBOSS客户端所需要的jbossall-client.jar

首先在你的SRC目录下新建一个jndi.properties:

#jboss
java.naming.provider.url = 192.168.61.135:1099
java.naming.factory.initial = org.jnp.interfaces.NamingContextFactory

 

客户端代码:

package com;

import java.util.Properties;

import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;

import dev.com.titan.domain.Cabin;
import dev.com.titan.travelagent.TravelAgentRemote;


public class Client {

 private static InitialContext context = null;
 static
 {
  try {
   buildInitialContext();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
 public static void buildInitialContext()
 {
  try {
   
   
    context = new InitialContext();
   
   
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
 
 public static InitialContext getInitialContext()
 {
  if(context==null)
  {
   buildInitialContext();
  }
  return context;
 }
 
 public static void main(String[] args) {
  try {
   
   InitialContext context = getInitialContext();

 //如果采用这种方式来得到InitialContext那么系统会自动去读SRC目录下的jndi.properties文件

//下面的JNDI可以通过http://192.168.61.135:8080/jmx-console/

//然后找到Global JNDI Namespace,下找到你所发布的EJB服务的JNDI名字

 

   Object ref = context.lookup("TravelAgentBean/remote");
   
   TravelAgentRemote dao = (TravelAgentRemote)PortableRemoteObject.narrow(ref,TravelAgentRemote.class);
   //客户端通过PortableRemoteObject.narrow(ref,TravelAgentRemote.class);方法将Object ref窄化成一个   TravelAgentRemote应用
   Cabin c = new Cabin();
   c.setName("tuping");
   c.setDeckLevel(1);
   c.setShipId(1);
   c.setBedCount(3);
   dao.createCabin(c);
   Cabin c2 = dao.findCabin(1);
   System.out.println(c2.getName()); 
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
 

}

运行得到结果:tuping

 

调用成功!

分享到:
评论

相关推荐

    EJB详解 sessionbean entitybean MDB

    Enterprise JavaBeans(EJB)是Java EE平台的核心组件之一,用于构建可扩展的、安全的、分布式的企业级应用程序。EJB 提供了一系列的服务,如生命周期管理、代码生成、持久性管理、安全性、事务处理、锁和并发管理,...

    EJB3开发Entity

    EJB3是EJB规范的一个重要版本,它在EJB2的基础上进行了许多简化和改进,使得开发更加高效且易于理解。本文将深入探讨EJB3中的Entity Bean,它是EJB3中的持久化组件,用于代表数据库中的实体。 1. **实体Bean的概念*...

    ejb2EntityBean

    EJB2.0的EntityBean部署在Weblogic

    EJB2.0 Entity bean(PDF)

    这个PDF文档,"EJB2.0 Entity bean",可能包含了关于如何设计、实现和使用EJB2.0实体Bean的详细教程和指南。 在Java 2企业版(J2EE)框架中,EJB(Enterprise JavaBeans)是服务器端的组件模型,主要分为三种类型:...

    ejb3实例(包括sessionbean和entitybean)

    EJB 3是其一个重要的版本,它引入了许多改进,简化了开发流程,使其更易于使用和理解。 Session Bean是EJB中的一个关键类型,它代表了一种无状态或有状态的业务逻辑组件。无状态会话Bean适用于那些不需持久化用户...

    ejb3-entitybean-maven-archetype source code

    总之,“ejb3-entitybean-maven-archetype”是一个强大的工具,可以帮助Java开发者快速搭建符合EJB 3规范的实体Bean项目,并结合Maven的便利性,提升开发效率。通过深入研究这个模板的源码和相关博客,我们可以更好...

    EJB3.0开发Message Driven Bean

    ### EJB3.0开发Message Driven Bean #### 一、概述 Enterprise JavaBeans (EJB) 是一种基于Java的应用程序编程接口(API),用于开发分布式企业级应用。EJB3.0作为Java EE5规范的一部分,引入了许多简化开发的新特性...

    Ejb开发实体bean

    3. **开发实体Bean**:实体Bean需要实现特定的接口,如`javax.ejb.EntityBean`或使用注解`@Entity`(在Java EE 5及以后版本)。这些Bean通常使用JPA(Java Persistence API)进行持久化操作,通过ORM(对象关系映射...

    EJB3.0开发Session Bean.rar

    虽然EJB 3.0规范主要讨论Session Bean,但还包含了对实体Bean(Entity Bean)的支持,这些Bean与数据库中的记录对应。`@Entity`注解用于声明一个持久化的Java类,而`@Table`, `@Id`, `@GeneratedValue`等注解则用于...

    EJB3.0开发Entity.rar

    综上所述,EJB 3.0 Entity Bean的开发涉及了JPA、ORM、事务管理、查询语言等多个方面,通过注解驱动的编程方式,使得开发者能更高效地构建可扩展且可靠的业务层。了解并掌握这些知识点对于进行企业级Java应用开发至...

    Jboss下开发ejb应用之一实体bean的应用

    标题:“Jboss下开发ejb应用之一实体bean的应用” 首先,理解EJB实体Bean的含义至关重要。实体Bean代表持久化的业务对象,它们与数据库中的记录相对应,负责存储和检索数据。EJB 3.0引入了注解驱动的开发方式,大大...

    EJB3.0开发Entity

    标题和描述都提到了"EJB3.0开发Entity",这指向了企业级Java开发中的一个关键主题:使用EJB3.0规范进行实体(Entity)的开发。EJB(Enterprise JavaBeans)是Java平台为企业级应用提供的组件模型,EJB3.0是其重要的...

    EJB2.0 Entity bean(PDF) .zip_EJB2 enti_EJB2.0 P_ejb_ejb2 CMP sup

    EJB 2.0实体Bean(Entity Bean) 实体Bean代表了业务逻辑中的持久化数据对象,它们与数据库中的记录相对应。在EJB 2.0中,实体Bean分为两种类型:CMP(容器管理持久性)和BMP(Bean管理持久性)。 #### 1.1 容器...

    Xdoclet生成SessionBean 和 EntityBean代码(初识ejb)

    在EJB 2.1规范下,SessionBean和EntityBean的开发往往需要编写大量的接口和部署描述符,而Xdoclet通过在Java源代码中使用特定的Javadoc注释,可以自动化完成这些任务。 **Xdoclet简介** Xdoclet最初是由Rickard ...

    Jboss下开发ejb应用之一会话bean的应用

    EJB分为三种主要类型:会话Bean(Session Beans)、实体Bean(Entity Beans)和消息驱动Bean(Message-driven Beans)。 二、会话Bean 会话Bean代表客户端的临时业务逻辑,它们不持久化数据,而是处理业务逻辑并...

    java EJB3实现三种Bean设计文档.doc

    本文档主要介绍了在Java EJB3环境中,如何实现三种不同类型的Bean:实体Bean(Entity Bean)、会话Bean(Session Bean)和消息驱动Bean(Message-Driven Bean)。 1. 开发环境: - **MyEclipse 7.0**:这是一个...

    EJB3.0开发Session Bean

    **EJB3.0开发Session Bean** Enterprise JavaBeans(EJB)是Java平台企业版(Java EE)的核心组件之一,用于构建可扩展、安全且事务处理能力强大的分布式应用程序。EJB 3.0是EJB规范的一个重大改进,极大地简化了...

    ejb实体bean实例

    3. **查询语言(JPA QL)**:除了基本的CRUD操作,还可以使用JPA的查询语言(JPQL)执行更复杂的SQL查询,如`SELECT e FROM EntityBean e WHERE e.property = :value`。 ### 四、EJB实体Bean的生命周期管理 EJB...

Global site tag (gtag.js) - Google Analytics