• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Jeanne Boyarsky
  • Bear Bibeault
  • Knute Snortum
  • Liutauras Vilda
Sheriffs:
  • Tim Cooke
  • Devaka Cooray
  • Paul Clapham
Saloon Keepers:
  • Tim Moores
  • Frits Walraven
  • Ron McLeod
  • Ganesh Patekar
  • salvin francis
Bartenders:
  • Tim Holloway
  • Carey Brown
  • Stephan van Hulst

JNI and J2EE  RSS feed

 
Ranch Hand
Posts: 45
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hello,

I have some java code that calls native code library thru' JNI. So I have corresponding .h and .dll in the same directory as the class with native method declaration. This works fine in a simple Java project when I have testJNI.java in default package and testJNI.h and mydll.dll in same folder.

Now, in J2EE environment, where should this all go? If I put everything (.java, .class, .h and .dll) under one package - say com.abc.utils, it can't find that library at runtime giving me UnsatisfiedLinkError

What am I missing? Do I need to set somethings?
Thanks,
P.Ingle
 
Bartender
Posts: 10336
Eclipse IDE Hibernate Java
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Define "J2EE environment". Are you trying to call JNI code from an EJB? Because that's not allowed from an EJB.
 
P. Ingle
Ranch Hand
Posts: 45
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
No, I am calling native code from simple java class - a utility class.

My code works fine when .java is under default package and as soon as I move everything under com.abc.utils package, it fails to load the library.

So I guess the question is where do dll and .h go and do I need to set any classpath variable for it to find that .h and .dll from code under a package??

Thanks,
P.Ingle
 
P. Ingle
Ranch Hand
Posts: 45
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
ok, I tried following - they both fail at two different points

1.

have crypto.dll, jcrypto.h, jcrypto.class and jcrypto.java in same package com.abc.utils (jcrypto.java declares native methods,loads dll and has main method)

When I run it, it fails to find dll itself - failing at
System.loadLibrary("crypto");
giving me java.lang.UnsatisfiedLinkError: Can't find library crypto (crypto.dll) in java.library.path

By thw way, I also tried moving crypto.dll to c:\dllLib and running jaa code with Djava.library.path=C:\dllLib option - it gives me same error - can't find dll itself.


2. I moved crypto.dll at the same level directory com is
MyJNIProject
|
|-----com (and all package directories below it - com.abc.Utils)
|
|-----crypto.dll

com.abc.Utils has jcrypto.java, jcrypto.class, jcrypto.h

This way, it loads library, goes to 'main' but when I call the native method, it fails there giving me following error:

java.lang.UnsatisfiedLinkError: EncryptString

3.
Whole thing works smoothly when I have everything directly under MyJNIProject (jcrypto.java being in default package)
so MyJNIProject has jcrypto.java, jcrypto.class, jcrypto.h and crypto.dll
directly in it.

Any clue how to work it in case 1 and 2???
 
That which doesn't kill us makes us stronger. I think a piece of pie wouldn't kill me. Tiny ad:
RavenDB is an Open Source NoSQL Database that’s fully transactional (ACID) across your database
https://coderanch.com/t/704633/RavenDB-Open-Source-NoSQL-Database
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
Boost this thread!