Calculator.java、CalculatorBean.java和ShoppingCart.java,Client.java這幾個程序在以前見過了吧,這裏有改動的地方在ShoppingCartBean.java插入了Calculator .
Calculator.java
package org.jboss.tutorial.injection.bean;
public interface Calculator
{
int add(int x, int y);
int subtract(int x, int y);
}
CalculatorBean.java
package org.jboss.tutorial.injection.bean;
import javax.ejb.Stateless;
@Stateless
public class CalculatorBean implements Calculator
{
public int add(int x, int y)
{
return x + y;
}
public int subtract(int x, int y)
{
return x - y;
}
}
ShoppingCart.java
package org.jboss.tutorial.injection.bean;
import javax.ejb.Remote;
import javax.ejb.Remove;
import java.util.HashMap;
@Remote
public interface ShoppingCart
{
void buy(String product, int quantity);
HashMap<String, Integer> getCartContents();
@Remove void checkout();
}
ShoppingCartBean.java
package org.jboss.tutorial.injection.bean;
import javax.ejb.EJB;
import javax.ejb.Inject;
import javax.ejb.Remove;
import javax.ejb.Stateful;
import java.util.HashMap;
@Stateful
public class ShoppingCartBean implements ShoppingCart
{
private HashMap<String, Integer> cart = new HashMap<String, Integer>();
@Inject(jndiName = "org.jboss.tutorial.injection.bean.Calculator")
private Calculator calculator;
private Calculator set;
@EJB(name="calculator", jndiName = "org.jboss.tutorial.injection.bean.Calculator")
public void setCalculator(Calculator c)
{
set = c;
}
public void buy(String product, int quantity)
{
if (cart.containsKey(product))
{
int currq = cart.get(product);
currq = calculator.add(currq, quantity);
cart.put(product, currq);
int temp = set.add(currq, quantity);
System.out.println("Same effect:"+temp);
}
else
{
cart.put(product, quantity);
}
}
public HashMap<String, Integer> getCartContents()
{
return cart;
}
@Remove
public void checkout()
{
System.out.println("To be implemented");
}
}
在ShoppingCartBean.java中要用Calculator來計算,我們只需要在定義的時候插入 ( Inject ) 就行了,需要注意的這個calculator已經是個Instance 了,不用在 new 了 :) 也可以另外一種方法插入
@Inject org.jboss.tutorial.injection.bean.Calculator
插入reference的時候就不同了:
@EJB(name="calculator", jndiName = "org.jboss.tutorial.injection.bean.Calculator")
在buy方法裏面增加了個整形temp來檢查兩個計算器 (calculator 和 set) 的作用是一樣的。其中set的計算結果將在jboss運行窗口看到。
Client.java
package org.jboss.tutorial.injection.client;
import org.jboss.tutorial.injection.bean.ShoppingCart;
import javax.naming.InitialContext;
import java.util.HashMap;
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 1 memory stick");
cart.buy("Memory stick", 1);
System.out.println("Buying another memory stick");
cart.buy("Memory stick", 1);
System.out.println("Buying a laptop");
cart.buy("Laptop", 1);
System.out.println("Print cart:");
HashMap<String, Integer> fullCart = cart.getCartContents();
for (String product : fullCart.keySet())
{
System.out.println(fullCart.get(product) + " " + product);
}
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 就行了。
討論:
寫了很多篇blog了,但是還不知道怎麼上傳源程序 :)