|
以下の節では、Oracle Communications Converged Application Server の SipServletSnmpTrapRuntimeMBean を使用して SIP サーブレット内から SNMP トラップを生成する方法について説明します。
Oracle Communications Converged Application Server ドメイン内での SNMP のコンフィグレーションについては、『操作ガイド』の「SNMP のコンフィグレーション」を参照してください。
Oracle Communications Converged Application Server では、実行時 MBean として SipServletSnmpTrapRuntimeMBean が含まれています。これを使用することで、アプリケーション開発者は SNMP トラップを簡単に生成できます。Oracle Communications Converged Application Server の MIB には、アプリケーションによって生成されるトラップ用に予約された 7 個の新しい OID が含まれます。それぞれの OID はアプリケーションがトラップに割り当てる重要度に対応しており、重要度の最も低いものから順番に並べると次のようになります。
アプリケーションからトラップを生成するには、SipServletSnmpTrapRuntimeMBean のインスタンスを取得して、目的のトラップの重要度に対応するメソッドを実行します (sendInfoTrap()、sendWarningTrap()、sendErrorTrap()、sendNoticeTrap()、sendCriticalTrap()、sendAlertTrap()、sendEmergencyTrap())。各メソッドにはパラメータが 1 つあり、このパラメータには生成するトラップ メッセージの文字列値を指定します。
この方法で SNMP トラップを生成すると、Oracle Communications Converged Application Server は自動的に、サーブレット名、アプリケーション名、さらに呼び出し側サーブレットに関連付けられている Oracle Communications Converged Application Server インスタンスの名前を送信します。
SipServletSnmpTrapRuntimeMBean を取得するには、呼び出し側の SIP サーブレットがサーブレット コンテキストから MBean ルックアップを実行できなければなりません。機能を有効化するには、Oracle Communications Converged Application Server 管理者の role-name エントリを sip.xml デプロイメント記述子内の security-role と run-as ロール要素に割り当てる必要があります。コード リスト 12-1 に sip.xml ファイルのサンプルを強調表示した必須ロール要素と共に示します。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sip-app
PUBLIC "-//Java Community Process//DTD SIP Application 1.0//EN"
"http://www.jcp.org/dtd/sip-app_1_0.dtd">
<sip-app>
<display-name>My SIP Servlet</display-name>
<distributable/>
<servlet>
<servlet-name>myservlet</servlet-name>
<servlet-class>com.mycompany.MyServlet</servlet-class>
<run-as>
<role-name>weblogic</role-name>
</run-as>
</servlet>
<servlet-mapping>
<servlet-name>myservlet</servlet-name>
<pattern>
<equal>
<var>request.method</var>
<value>INVITE</value>
</equal>
</pattern>
</servlet-mapping>
<security-role>
<role-name>weblogic</role-name>
</security-role>
</sip-app>
SNMP トラップを発生する SIP サーブレットはすべて、最初に SipServletSnmpTrapRuntimeMBean への参照を取得する必要があります。コード リスト 12-2 に MBean を取得するメソッドのサンプル コードを示します。
public SipServletSnmpTrapRuntimeMBean getServletSnmpTrapRuntimeMBean() {MBeanHome localHomeB = null;
SipServletSnmpTrapRuntimeMBean ssTrapMB = null;
try
{Context ctx = new InitialContext();
localHomeB = (MBeanHome)ctx.lookup(MBeanHome.LOCAL_JNDI_NAME);
ctx.close();
} catch (NamingException ne){ne.printStackTrace();
}
Set set = localHomeB.getMBeansByType("SipServletSnmpTrapRuntime"); if (set == null || set.isEmpty()) { try { throw new ServletException("Unable to lookup type 'SipServletSnmpTrapRuntime'"); } catch (ServletException e) {e.printStackTrace();
}
}
ssTrapMB = (SipServletSnmpTrapRuntimeMBean) set.iterator().next();
return ssTrapMB;
}
コード リスト 12-3 は、コード リスト 12-2 のメソッドを使用して、SIP INVITE への応答時に MBean インスタンスを通じて SIP サーブレットから SNMP トラップを生成する方法を示しています。
public class MyServlet extends SipServlet {private SipServletSnmpTrapRuntimeMBean sipServletSnmpTrapMb = null;
public MyServlet () {}
public void init (ServletConfig sc) throws ServletException {super.init (sc);
sipServletSnmpTrapMb = getServletSnmpTrapRuntimeMBean();
}
protected void doInvite(SipServletRequest req) throws IOException { sipServletSnmpTrapMb.sendInfoTrap("Rx Invite from " + req.getRemoteAddr() + "with call id" + req.getCallId());}
}
|