程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Jboss Ejb3.0 Entity Bean

Jboss Ejb3.0 Entity Bean

編輯:關於JAVA

Order.Java

package org.jboss.tutorial.entity.bean;

import Javax.persistence.CascadeType;

import Javax.persistence.Entity;

import Javax.persistence.FetchType;

import Javax.persistence.GeneratorType;

import Javax.persistence.Id;

import Javax.persistence.OneToMany;

import Javax.persistence.Table;

import Javax.persistence.Id;

import Javax.persistence.CascadeType;

import Javax.persistence.FetchType;

import Java.util.ArrayList;

import Java.util.Collection;

@Entity

@Table(name = "PURCHASE_ORDER")

//If the table name isn't specifIEd it defaults to the bean name

//of the class. For instance, the LineItem EJB would be mapped to

//the LINEITEM table

public class Order implements Java.io.Serializable

{

private int id;

private double total;

private Collection lineItems;

@Id(generate = GeneratorType.AUTO)

public int getId()

{

return id;

}

public void setId(int id)

{

this.id = id;

}

public double getTotal()

{

return total;

}

public void setTotal(double total)

{

this.total = total;

}

public void addPurchase(String product, int quantity, double price)

{

if (lineItems == null) lineItems = new ArrayList();

LineItem item = new LineItem();

item.setOrder(this);

item.setProduct(product);

item.setQuantity(quantity);

item.setSuBTotal(quantity * price);

lineItems.add(item);

total += quantity * price;

}

//CascadeType.ALL specifIEs that when an Order is created,

//any LineItems held in the lineItems collection will be created

//as well (CascadeType.PERSIST). If the Order is delete from

//persistence storage, all related LineItems will be

//deleted (CascadeType.REMOVE). If an Order instance is

//reattached to persistence storage, any changes to the

//LineItems collection will be merged with persistence

//storage (CascadeType.MERGE).

//FetchType.EAGER specifIEs that when the Order is loaded

//whether or not to prefetch the relationship as well.

//If you want the LineItems to be loaded on demand, then specify FetchType.LAZY.

// The mappedBy attribute specifIEs that this is a bi-directional

//relationship that is managed by the order property on the LineItem entity bean.

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy="order")

public Collection getLineItems()

{

return lineItems;

}

public void setLineItems(Collection lineItems)

{

this.lineItems = lineItems;

}

}

加了不少英文注釋,希望能看得懂。

@Table(name = "PURCHASE_ORDER")

指名數據庫(jboss的數據庫為hsqldb)中對應得表的名字,默認為class的名字,比如下面的LineItem就沒有@table。(order.java , LineItem.Java都為o/r映射,值得互相對照)

@Id(generate = GeneratorType.AUTO)

遞增,同數據庫裡的相同。必須在getter方法上標注。

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy="order")

關系:order和LineItem為1對多的關系。在這裡CascadeType.ALL是指明當建立一個Order被實例化後,都應該同時同時建立LineItem。注釋裡的就是根據兩者建立時間的不同,定義了不同的CascadeType。

LineItem.Java

package org.jboss.tutorial.entity.bean;

import Javax.persistence.Entity;

import Javax.persistence.GeneratorType;

import Javax.persistence.Id;

import Javax.persistence.JoinColumn;

import Javax.persistence.ManyToOne;

import Javax.persistence.Entity;

@Entity

public class LineItem implements Java.io.Serializable

{

private int id;

private double suBTotal;

private int quantity;

private String product;

private Order order;

@Id(generate = GeneratorType.AUTO)

public int getId()

{

return id;

}

public void setId(int id)

{

this.id = id;

}

public double getSuBTotal()

{

return suBTotal;

}

public void setSubtotal(double suBTotal)

{

this.subtotal = suBTotal;

}

public int getQuantity()

{

return quantity;

}

public void setQuantity(int quantity)

{

this.quantity = quantity;

}

public String getProduct()

{

return product;

}

public void setProduct(String product)

{

this.product = product;

}

//The @JoinColumn specifIEs the foreign key column within the LineItem table.

@ManyToOne

@JoinColumn(name = "order_id")

public Order getOrder()

{

return order;

}

public void setOrder(Order order)

{

this.order = order;

}

}

ShoppingCart.Java

package org.jboss.tutorial.entity.bean;

import Javax.ejb.Remote;

import Javax.ejb.Remove;

@Remote

public interface ShoppingCart

{

void buy(String product, int quantity, double price);

Order getOrder();

@Remove void checkout();

}

ShoppingCartBean.Java

package org.jboss.tutorial.entity.bean;

import Javax.persistence.EntityManager;

import Javax.ejb.Inject;

import Javax.ejb.Remove;

import Javax.ejb.Stateful;

@Stateful

public class ShoppingCartBean implements ShoppingCart

{

@Inject

private EntityManager manager; //The EntityManager is used to do querying,

//creating, find by primary key, and removal of entity beans.

private Order order;

public void buy(String product, int quantity, double price)

{

if (order == null) order = new Order();

order.addPurchase(product, quantity, price);

}

public Order getOrder()

{

return order;

}

@Remove

public void checkout()

{

manager.persist(order);

}

}

EntityManager的作用可大了,可以用於查詢,創建,刪除實體Bean,這裡插入個EntityManager,主要是在最後用戶離開時,在數據庫裡保存數據,相當於保存個object。運行完ClIEnt.Java後就可以在hsqldb上看到有purchase_order 和 LineItem 的兩張表。HypersonicDatabase ,找到startDatabaseManager然後下面有個invoke,點擊就可以訪問hsqldb了。

ClIEnt.Java

package org.jboss.tutorial.entity.clIEnt;

import org.jboss.tutorial.entity.bean.LineItem;

import org.jboss.tutorial.entity.bean.Order;

import org.jboss.tutorial.entity.bean.ShoppingCart;

import Javax.naming.InitialContext;

public class ClIEnt

{

public static void main(String[] args) throws Exception

{

InitialContext ctx = new InitialContext();

ShoppingCart cart = (ShoppingCart) ctx.lookup(ShoppingCart.class.getName());

System.out.println("Buying 2 memory sticks");

cart.buy("Memory stick", 2, 500.00);

System.out.println("Buying a laptop");

cart.buy("Laptop", 1, 2000.00);

System.out.println("Print cart:");

Order order = cart.getOrder();

System.out.println("Total: $" + order.getTotal());

for (LineItem item : order.getLineItems())

{

System.out.println(item.getQuantity() + " " + item.getProduct() + " " + item.getSuBTotal());

}

System.out.println("Checkout");

cart.checkout();

}

}

這裡附上log4j.properties 在jboss-EJB-3.0_PrevIEw_5.zip 裡面沒有這個老是顯示缺少appender。有了這個將在該目錄下生成個record.log日志文件。

log4j.propertIEs

log4j.appender.R=org.apache.log4j.RollingFileAppender

log4j.appender.R.File=record.log

log4j.appender.R.layout=org.apache.log4j.PatternLayout

log4j.appender.R.layout.ConversionPattern=%p %d{hh:mm:ss} %t %c{1} -%m%n

log4j.appender.R.MaxBackupIndex=1

log4j.appender.R.MaxFileSize=100KB

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) -%m%n

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.rootLogger=stdout,R

運行:參考installing.Html

Windows下

打開命令提示符cmd,到 jboss_home/bin

Run.bat –c all

用ant

先build後run 就行了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved