私はこのOSGiバンドル書かれています:OSGIバンドルからメソッドを呼び出す方法は?
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package CryptoLib;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class cryptoSha {
public cryptoSha() {
}
/** method for converting simple string into SHA-256 hash */
public String stringHash(String hash) throws NoSuchAlgorithmException{
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(hash.getBytes());
byte byteData[] = md.digest();
/** convert the byte to hex format */
StringBuilder sb = new StringBuilder();
for (int i = 0; i < byteData.length; i++) {
sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
}
return sb.toString();
}
}
をし、これがActicatorクラスです:
package com.CL_67;
import CryptoLib.cryptoSha;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
public class Activator implements BundleActivator {
private static BundleContext context;
public void start(BundleContext context) throws Exception {
Activator.context = context;
context.registerService(cryptoSha.class.getName(), new cryptoSha(), null);
System.out.println("Module CL-67 is Loaded ...");
}
public void stop(BundleContext context) throws Exception {
context.ungetService(context.getServiceReference(cryptoSha.class.getName()));
Activator.context = null;
System.out.println("Module CL-67 is Unloaded ...");
}
}
これは、バンドルを呼び出すEARパッケージです:
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.osgi.framework.BundleContext;
@Named("loginController")
@SessionScoped
public class userCheck extends HttpServlet implements Serializable {
public userCheck(){
}
@WebServlet(name = "CL_67", urlPatterns = {"/CL_67"})
public class cryptoSha extends HttpServlet {
@Inject
cryptoSha stringHash;
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println(cryptoSha.stringHash("test"));
}
}
}
私は正常にコンパイルJBoss 7.1.0にデプロイしてください。しかし、EARパッケージを起動すると何も起こりません。私がコード内のどこが間違っているのかを教えてもらえますか?
種類について、 ピーター
EDIT: は、残念ながら私は、Javaプログラミングに新たなんだと私は、彼らがどのように動作するか理解していない例では、コードの一部。あなたは私の例を手伝ってくれてとても親切ですか?私はこのコードを将来どのように適切な方法で書かなければならないかを知る必要があります。誰かがコードを修復しますか?
ありがとうございます。 ピーター
具体的なクラスの名前の下で、具体的なクラスをサービスとして登録するという全く無意味さを指摘していませんでした。クライアントがそのクラスの可視性を持っている場合、なぜOSGiサービスを経由するのではなく、直接インスタンス化しないのでしょうか? –