2009-06-26 8 views
0

J'ai ajouté la méthode native dans le code bean java.Java bean avec JNI?

Puis j'ai copié le fichier .dll dans le dossier System32.

lors de l'utilisation de javabean dans JSP.

il donne une erreur:

HTTP Status 500 -

Type d'exception rapport

un message

Description Le serveur a rencontré une erreur interne() qui l'a empêché de remplir cette demande.

exception

org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.UnsatisfiedLinkError: BeanDir.mysimplebean.sayHello()Ljava/lang/String; 
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:522) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:398) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 

causes profondes

javax.servlet.ServletException: java.lang.UnsatisfiedLinkError: BeanDir.mysimplebean.sayHello()Ljava/lang/String; 
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:862) 
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:791) 
    org.apache.jsp.jsp.callbean_jsp._jspService(callbean_jsp.java:124) 
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 

causes profondes

java.lang.UnsatisfiedLinkError: BeanDir.mysimplebean.sayHello()Ljava/lang/String; 
    BeanDir.mysimplebean.sayHello(Native Method) 
    org.apache.jsp.jsp.callbean_jsp._jspService(callbean_jsp.java:112) 
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 

note La trace complète de la pile de la cause racine est disponible dans les journaux Apache Tomcat/6.0.20 . Apache Tomcat/6.0.20

code Java Bean:

package BeanDir; 
import java.util.*; 
//This file must be compiled Manually using javac 
//cd D:\tomcat\webapps\examples\WEB-INF\classes\BeanDir\mysimplebean.java 
public class mysimplebean 
{ 
    static 
    { 
     String s=System.getProperty("java.library.path"); 
     System.setProperty("java.library.path",s); 
     System.loadLibrary("HelloWorld"); 
    } 
    public String getceoname() 
    { 
     String ceonameval = "Tom Hanks CEO of Tom Hanks INC";   
     return ceonameval; 
    } 
    public String ceoemail() 
    { 
     String ceoemailval = "[email protected]";  
     return ceoemailval; 
    } 
    public double findtakehome(int salary,String designation) 
    {   
     double takehomeamt; 
     if(designation=="Developer") 
     { 
      takehomeamt = salary+salary*0.15; //15 % Raise in Salary 
     } 
     else 
     { 
      takehomeamt = salary+salary*0.10; //10 % Raise in Salary 
     } 
     return takehomeamt; 
    } 
    public native String sayHello();  
} 

Répondre

0

Je ne peux pas laisser un commentaire, mais ..

  1. est votre conteneur de servlet sur la même machine Windows que la dll est sur?
  2. Est-ce que System.getProperty ("java.library.path") inclut le dossier system32 (à partir d'un jsp)?

la réponse à ces deux questions devraient être « oui » pour que cela fonctionne

+0

Salut ryan, J'ai utilisé le même fichier .dll (à l'intérieur du dossier system32) pour le servlet cela fonctionne très bien. Et je lance la console séparée pgm pour trouver le "java.library.path" il montre également le dossier system32. – krishnakumar

+0

Vous devez faire quelque chose comme: test.jsp: <% out.print ("Ma DLL devrait être quelque part ici:" + System.getProperty ("java.library.path")); %> –

+0

salut ryan, j'ai essayé d'utiliser le même .dll dans un autre page.It servlet affiche une erreur « chargé .dll dans une autre classe chargeur » .Donc que je suis en train de créer l'emballage JNI dans Java Bean. avec cela je peux créer beaucoup d'instance en mentionnant son attribut de portée comme "application" dans l'étiquette de bean d'utilisation. Si vous avez des suggestions à ce sujet, faites-le moi savoir. merci – krishnakumar

0

Salut j'a la solution pour ce poste.

mais pas avec le bean Java.

J'ai écrit le wrapper JNI dans une classe. J'ai créé l'objet dans le programme JSP.