SNMP4J でトラップ送信

SNMP4J トラップ受信を Google guice で書いたので、今度は送信するもの。
PDU に Variable データは1個だけで任意のトラップ番号を送るもの。

import org.apache.log4j.Logger;
import org.snmp4j.CommunityTarget;
import org.snmp4j.PDU;
import org.snmp4j.PDUv1;
import org.snmp4j.Snmp;
import org.snmp4j.mp.SnmpConstants;
import org.snmp4j.smi.Address;
import org.snmp4j.smi.GenericAddress;
import org.snmp4j.smi.Integer32;
import org.snmp4j.smi.IpAddress;
import org.snmp4j.smi.OID;
import org.snmp4j.smi.OctetString;
import org.snmp4j.smi.VariableBinding;
import org.snmp4j.transport.DefaultUdpTransportMapping;
import com.google.inject.Inject;
/**
 * SNMP トラップ送信.
 * コンストラクタで送信先のSNMP宛先 アドレスを指定する。
 * 特別なアノテーションにより、SNMP宛先アドレスの、Google guice インジェクトを
 * 次のように約束されている。
 *     @Inject public SnmpTrapSender(@SnmpIPaddress String sendIP)
 * これにより、SnmpTrapSenderFactory で SnmpTrapSenderインスタンスを生成するか、
 * new 演算子を使うかである。
 */

public final class SnmpTrapSender{
   String sendIP;
   /**
    * コンストラクタ
    * @param sendIP SNMP宛先アドレス
    */

   @Inject
   public SnmpTrapSender(@SnmpIPaddress String sendIP){
      this.sendIP = sendIP;
   }
   /**
    * トラップ送信.
    * void send(targetIP,trapno,type,1); の呼び出しと同じ効果があります。
    * @param targetIP ターゲットIP
    * @param trapno 任意トラップ番号
    * @param type org.snmp4j.PDUv1.LINKDOWN か、org.snmp4j.PDUv1.LINKUP を指定します。
    */

   public void send(String targetIP,int trapno,int type){
      this.send(targetIP,trapno,type,1);
   }
   /**
    * トラップ送信.
    * @param targetIP ターゲットIP
    * @param trapno 任意トラップ番号
    * @param type org.snmp4j.PDUv1.LINKDOWN か、org.snmp4j.PDUv1.LINKUP を指定します。
    * @param retry UDP通信の為、この回数分送信します。
    */

   public void send(String targetIP,int trapno,int type,int retry){
      int loops = retry > 1 ? retry : 1;
      for(int i=0;i < loops;i++){
         Address targetAddress = GenericAddress.parse("udp:"+SnmpTrapSender2.this.sendIP+"/162");
         CommunityTarget target = new CommunityTarget();
         target.setCommunity(new OctetString("public"));
         target.setAddress(targetAddress);
         target.setVersion(SnmpConstants.version1);

         PDUv1 pdu = new PDUv1();
         pdu.setType(PDU.V1TRAP);

         VariableBinding vb = new VariableBinding();
         vb.setOid(new OID("1.3.6.1.2.1.2.2.1.1"));
         vb.setVariable(new Integer32(trapno));
         pdu.add(vb);
         pdu.setEnterprise(new OID("1.3.6.1.2.1.11"));
         pdu.setTimestamp(System.currentTimeMillis());
         pdu.setAgentAddress(new IpAddress(targetIP));
         pdu.setGenericTrap(type);


         try{
         DefaultUdpTransportMapping udpTransportMap = new DefaultUdpTransportMapping();
         Snmp snmp = new Snmp(udpTransportMap);
         snmp.send(pdu,target);
         snmp.close();

         this.logger.debug("## Trap send target = "+target.toString());
         this.logger.debug("## Trap send PDUv1  = "+pdu.toString());
         }catch(Exception e){
            this.logger.error("## SnmpTrapSender._SendThread Exception : "+e.getMessage(),e);
         }
      }
   }
}
----------------------------------------------------
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Injector;
/**
 * SnmpTrapSender 生成ファクトリ
 */

public final class SnmpTrapSenderFactory{
   private SnmpTrapSenderFactory(){}
   
   /**
    * SNMP受信しているIPを指定して作成する
    */

   public static SnmpTrapSender create(final String ip){
      Injector injector = Guice.createInjector(new AbstractModule(){
            @Override
            protected void configure(){
               binder().bind(String.class).annotatedWith(SnmpIPaddress.class).toInstance(ip);
            }
         }
      );
      return injector.getInstance(SnmpTrapSender.class);
   }
}
==============================================================
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import com.google.inject.BindingAnnotation;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD,ElementType.PARAMETER})
@BindingAnnotation
public @interface SnmpIPaddress{
}
--------------------------------------------------
実行は、、
SnmpTrapSender snmpsender = SnmpTrapSenderFactory.create("111.11.111.11");
snmpsender.send("222.22.222.22",201,PDUv1.LINKDOWN,3);