2

今日、私のインターンの1人が私のところに来て、次のクラスをどこで見つけることができるか尋ねました。

com.ibm.ws.logging.object.hpel.WsLogRecord

通常、findjar.comのようなものがそれを見つけますが、この場合は見つけられませんでした。最終的にJarExplorerを使用して、次の場所にあるWAS 8ライブラリでそれを見つけましたが、そのプロセスは非効率的でした。

{server root}\plugins\com.ibm.hpel.logging.jar

この投稿の目的は、それがどこにあるかについての洞察を提供することですが、オンラインのユーティリティが必要な洞察を提供しない場合にクラスを見つけるための最良の方法は何かを尋ねることでもあります。

ありがとう、ジェレミー

4

3 に答える 3

2

WebSphereの実行中のインスタンスでそれを見つけるために私が行うことは、DeveloperWorksの記事で説明されている手法を使用して特定のクラスを提供するjarを見つけるJSPをデプロイすることです。

後世のために、ここにそのJSPのソースがあります:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
    <title>Servlet Container Class Finder</title>
</head>
<body>
<h2>Servlet Container Class Finder</h2>
<p>Enter the fully-qualified name of a Java class
(e.g. org.apache.oro.text.regex.Perl5Compiler) in the field below. The
servlet will attempt to load the class and, if successful, query the
class' <em>java.security.CodeSource</em> for the location of the class
using the following methods:
    <pre>
    Class.forName(className).getProtectionDomain().getCodeSource()
    </pre>
</p>
<p>
<%
    String className = request.getParameter("className");
    String prefill = "";
    if (className != null)
    {
        prefill = className;
        if (className.trim().length() != 0)
        {
            try
            {
                java.security.ProtectionDomain pd = Class.forName(className).getProtectionDomain();
                if (pd != null)
                {
                    java.security.CodeSource cs = pd.getCodeSource();
                    if (cs != null)
                    {
                        out.println(cs);
                    }
                    else
                    {
                        out.println("No CodeSource found");
                    }
                }
                else
                {
                    out.println("No ProtectionDomain found");
                }
            }
            catch (Throwable t)
            {
                out.println(t);
            }
        }
    }
%>
</p>
<form method="post" action="<%= request.getRequestURI()%>">
    <p>
    Class Name: <input type="text" name="className" value="<%= prefill %>" size="40"/>
    <input type="submit" value="Submit"/>
    </p>
</form>
<p>
    Code taken from 
    <a href="http://www.ibm.com/developerworks/websphere/techjournal/0406_brown/0406_brown.html">
    this DeveloperWorks article</a>.
</p>
</body>
</html>
于 2012-08-18T15:24:16.277 に答える
1

com.ibm.ws.logging.object.WsLogRecord(hpelを除く)の下でWsLogRecordを見つけることができました。eclipseを使用してcom.ibm.ws.logging.objectの下を調べましたが、hpelは見つかりませんでしたが、WsLogRecordは見つかりました。jd-eclipseで実際のクラスを見ることができました。.classのコメントは、ファイルの場所(C:\ IBM \ SDP \ runtimes \ base_v7 \ plugins \ com.ibm.ws.runtime.jar)を示しています。findjar.comでも見つからなかったようで、.jarはIBMのすぐに使えるコードとして提供されていました。これはオンラインでそれを見つける方法の答えではないと思いますが、私はそれを見つけて、上記の手順でクラスを見ることができました。

于 2012-08-17T14:17:22.413 に答える
1

他のすべてが失敗し、Eclipse Quick Type Hierarchyを使用してクラスを見つけることができない場合は、クラスがどのjarに存在するかを示し、次の行に沿ってシェルスクリプトを使用します。

for f in `find /path/to/websphere/lib -name "*.jar"` 
do    
   FOUND=`jar tvf $f | grep WsLogRecord`
   if [[ -n $FOUND ]]
   then
       echo "Found in $f:"
       echo $FOUND
   fi
done
于 2012-08-17T14:35:57.987 に答える