2009-06-26 13 views
0

Ich habe native Methode in Java-Bean-Code hinzugefügt.Java-Bean mit JNI?

Dann habe ich .dll-Datei in System32-Ordner kopiert.

während der Verwendung von Javabean in JSP.

es gibt einen Fehler:

HTTP-Status 500 -

Typ Ausnahmebericht

Nachricht

Beschreibung Der Server hat einen internen Fehler(), die sie von der Erfüllung dieser Anforderung verhindert.

Ausnahme

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) 

Ursache

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) 

Ursache

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) 

Anmerkung Der vollständige Stack-Trace die Ursache in den Apache Tomcat/6.0.20 Protokolle verfügbar . Apache Tomcat/6.0.20

Java Bean-Code:

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();  
} 

Antwort

0

ich einen Kommentar hinterlassen kann nicht, aber ..

  1. ist Ihr Servlet-Container auf der gleichen Maschine Fenster, die die DLL auf?
  2. enthält die System.getProperty ("java.library.path") den Ordner system32 (aus einem JSP)?

die Antwort auf beide Fragen sollten dafür sein ‚Ja‘

+0

Hallo Ryan, Ich verwendete die gleiche. DLL (innerhalb System32 Ordner) für Servlet funktioniert es gut. Und ich renne die separate Konsole pgm, um die "java.library.path" zu finden, es zeigt auch System32 Ordner. – krishnakumar

+0

Sie müssen etwas tun wie: test.jsp: <% out.print ("Meine dll sollte irgendwo hier sein:" + System.getProperty ("java.library.path")); %> –

+0

hi ryan, Ich habe versucht, die gleiche .dll in einer anderen Servlet-Seite.Es zeigt einen Fehler ".dll in einem anderen Klassenlader geladen" .So dass ich versuche den JNI-Wrapper in Java-Bean zu erstellen. mit dem ich kann viele Instanzen meine Erwähnung seiner Bereich Attribut als "Anwendung" in Verwendung Bean-Tag erstellen. Wenn Sie irgendeinen Vorschlag dazu haben, lassen Sie es mich wissen. danke – krishnakumar

0

Hallo ich habe die Lösung für diesen Beitrag zu arbeiten.

aber nicht mit Java-Bean.

Ich schrieb den JNI-Wrapper in einer Klasse.

und ich erstellte das Objekt in JSP-Programm.