Jboss Ejb3.0—Injection

Calculator.javaCalculatorBean.javaShoppingCart.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

buildrun 就行了。

 

 

討論:

寫了很多篇blog了,但是還不知道怎麼上傳源程序 :)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章