Question

Classloading solution

Asked by: Fattyman

I am looking for a classloading solution for applets (!!) that loads java classes from different jar-files in a given order. This solution should work with any of these browsers - IE4+ and Netscape 4.5+...
(the applet tag solution is not suitable for me because it isn't possible to determine the order of the jar-files to be loaded)

This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.

Subscribe now for full access to Experts Exchange and get

Instant Access to this Solution

  • Plus...
  • 30 Day FREE access, no risk, no obligation
  • Collaborate with the world's top tech experts
  • Unlimited access to our exclusive solution database
  • Never be left without tech help again

Subscribe Now

Asked On
2000-11-07 at 08:39:26ID11785778
Topics

Java Programming Language

,

Java Standard Edition

,

New to Java Programming

Participating Experts
6
Points
200
Comments
16

Trusted by hundreds of thousands everyday for fast, accurate and reliable tech support.

  • "The time we save is the biggest benefit of Experts Exchange to Warner Bros. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange." Mike Kapnisakis, Warner Bros.
  • "Our team likes having a resource that is more secure than just using Google and most experts using this service really know their stuff. It's nice to look here first versus using Google." Dayna Sellner, Lockheed Martin
  • "Anytime that I've been stumped with a problem, 9 out of 10 times Experts Exchange has either the accepted solution or an open discussion of the potential solution to the problem." Kenny Red, eBay Inc.

See what Experts Exchange can do for you.

Got a question?

We've got the answer.

Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.

Screenshot of Experts Exchange Knowledgebase

Need individual assistance?

Our experts are ready to help.

If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.

Screenshot of Experts Exchange Knowledgebase

Want to learn from the best?

Read articles from industry experts.

Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.

Screenshot of an Article

Working on a long term project?

Store your work and research.

Save solutions to your questions, answers you’ve discovered through searching plus helpful articles in your personal knowledgebase for easy future access.

Screenshot of Experts Exchange Knowledgebase

Access the answers to your technology questions today.

Subscribe Now

30-day free trial. Register in 60 seconds.

What Makes Experts Exchange Unique?

Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Trusted by the world's most respected brands.

image of each brand's logo

Faithfully serving IT professionals since 1996.

Experts Exchange Logo

Try it out and discover for yourself.

Subscribe Now

30-day free trial. Register in 60 seconds.

Related Solutions

  1. Applet and ClassLoader
    Is it possible to create an Applet which could load and execute Applets from another URL? I know about showDocument-method, but I would like to execute Applets in my own Applet's Frames. Is it possible to use some kind of ClassLoader class to do this?
  2. ClassLoaders
    I have a classloader that uses a certain classpath to find resources with. It's not the system classloader. I want to see this class path. How do I do that?

Free Tech Articles

  1. WARNING: 5 Reasons why you should NEVER fix a computer for free.
    It is in our nature to love the puzzle. We are obsessed. The lot of us. We love puzzles. We love the challenge. We thrive on finding the answer. We hate disarray. It bothers us deep in our soul. W...
  2. SCCM OSD Basic troubleshooting
    SCCM 2007 OSD is a fantastic way to deploy operating systems, however, like most things SCCM issues can sometimes be difficult to resolve due to the sheer volume of logs to sift through and the dispe...
  3. Migrate Small Business Server 2003 to Exchange 2010 and Windows 2008 R2
    This guide is intended to provide step by step instructions on how to migrate from Small Business Server 2003 to Windows 2008 R2 with Exchange 2010. For this migration to work you will need the fo...
  4. Create a Win7 Gadget
    This article shows you how to create a simple "Gadget" -- a sort of mini-application supported by Windows 7 and Vista. Gadgets can be dropped anywhere on the desktop to provide instant information, ...
  5. Outlook continually prompting for username and password
    There have been a lot of questions recently regarding Outlook prompting for a username and password whilst using Exchange 2007. There are a few reasons why this would happen and I will try to cover t...
  6. Backup Exchange 2010 Information Store using Windows Backup
    There seems to be quite a lot of confusion around the ability to backup Exchange 2010 using the built in Windows Backup feature. This stems from the omission of this feature prior to Exchange 2007 s...

Cloud Class Webinars

  1. Avoiding Bugs in Microsoft Access
    Alison Balter takes and in-depth look at avoiding bugs in Access. In this webinar you will learn about using the immediate window to debug your applications, invoking the debugger, using breakpoints to troubleshoot, stepping through code, setting the next statement to execute, ...
  2. Top 10 Best New Features in Visio 2010
    Scott Helmers gives live demonstrations of the top 10 new features in Visio 2010. This webinar will teach you how to create compelling diagrams by adding shapes to the page with a single click, linking the shapes in a diagram to data in Excel (or SQL Server, or SharePoint), ...
  3. IT Consultant Business Secrets Revealed
    Michael Munger, Experts Exchange tech pro and IT consultant, pulls back the curtain on his very successful businesses and answers question on every IT consultant and business owner should know about. He shares secrets on what he did to solve the 5 most common problems in IT, ...
  4. Disaster Recovery and Business Continuity
    Quest CTO, Mike Billon, gives an overview of the steps involved in building a dunamic disaster recovery plan. Through case studies and an examination of software/hardware tooles for monitoring and testing, you'll gain a better understandin of where you are, where you want ...
  5. Organize Your Visio Diagrams with Containers and Lists
    Scott Helmers uses cross functional flowcharts, wireframe diagrams, data graphic legends and seating charts to teach you: how to ustilize all three new structured diagram components in Visio 2010, the best practices for organizeing shapes in previous version of Visio, how to organize ...
  6. How to Us Objects, Properties, Events and Methods in Microsoft Access
    Alison Dalter gives an in-depbth look at objects, properties, events and methods in Microsoft Access. In this webinar you will learn about using the object browser, referring to objects, working with properties and methods, working with object variables, understanding the ...

Join the Community

Give a Little. Get a Lot.

Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.

Join the Community

Answers

 

by: CEHJPosted on 2000-11-07 at 10:16:43ID: 5158486

Are you aware you're going to need two signing certificates for doing this?

 

by: omry_yPosted on 2000-11-07 at 18:49:18ID: 5171200

I have some tips for you, but first tell me what exactly you want to do.
btw : you CANT replace the class loader in netscape, not even with a signed applet.
btw2:CHEJ is right.
you probebly need one cetrificate for netscape, and one for explorer.

 

by: FattymanPosted on 2000-11-08 at 00:30:27ID: 5176500

I wrote a classloader for the ie. I signed it. It loaded the classes without problems but when running the applet which resulted from the classes the ie throwed many SecurityExceptions in situations in which no exceptions should bo thrown. I used the security option -low for signing the loader.

 

by: CEHJPosted on 2000-11-08 at 01:10:44ID: 5177082

I wasn't aware you can't manipulate class loaders in Netscape. That's certainly a bummer if true. Be careful with your classloader - it *will* throw security exceptions in unexpected places if you haven't adhered to the delegation model (assuming >=1.2)

 

by: FattymanPosted on 2000-11-08 at 01:58:59ID: 5177900

I found a method "setSigners" in the class "Class". I used to call "classobject.setSigners(Classloader.getSigners())" but that could not solve the problem.

 

by: omry_yPosted on 2000-11-08 at 02:24:11ID: 5178341

this is probebly not related.
I think its a part of Sun security model, but now you are using Explorer security model.

what exactly are you trying to achive with this class loader mambo jambo?

 

by: bazarnyPosted on 2000-11-08 at 05:13:03ID: 5181240

If you need to play with classloaders, you would better switch to Java Plugin/jdk >= 1.2, because 1.1 security model should prohibit use of own classloaders. In 1.2 your classloader should extend SecureClassloader (or you can use URLClassLoader as is). And omry is right, there might be another solution for your original problem.

 

by: MoondancerPosted on 2002-02-09 at 20:44:38ID: 6791876

It's time to clean up this topic area and that means taking care of this question. Your options at this point are:

1. Award points to the Expert who provided an answer, or who helped you most. Do this by clicking on the "Accept Comment as Answer" button that lies above and to the right of the appropriate expert's name.

2. PAQ the question because the information might be useful to others, but was not useful to you. To use this option, you must state why the question is no longer useful to you, and the experts need to let me know if they feel that you're being unfair.

3.  Ask Community Support to help split points between participating experts.  Just comment here with details.

4.  Delete the question because it is of no value to you or to anyone else.  To use this option, you must state why the question is no longer useful to you, and the experts need to let me know if they feel that you're being unfair.

If you elect for option 2, 3 or 4, just post comment with details here and I'll take it from there.  We also request that you review any other open questions you might have and update/close them.  Display all your question history from your Member Profile to view details.

PLEASE DO NOT AWARD THE POINTS TO ME.
____________________________________________

----------------------->>>>>>>>>>>>>>    Hi Experts:

In the event that the Asker does not respond, I would very much appreciate your opinions as to which Expert ought to receive points (if any) as a result of this question.  Likewise, you can also suggest that I PAQ or delete the question.  Please let me know if no response the next 3 days.

NEW topic areas added Feb 8, 2002.  http://www.experts-exchange.com/jsp/zonesAll.jsp

Thank you everyone.

Moondancer :)
Community Support Moderator @ Experts Exchange

 

by: heyhey_Posted on 2002-12-21 at 09:02:33ID: 7617721

No comment has been added lately, so it's time to clean up this TA.
I will leave a recommendation in the Cleanup topic area that this question is:

- To be PAQ'ed and points NOT refunded
 
Please leave any comments here within the
next seven days.

PLEASE DO NOT ACCEPT THIS COMMENT AS AN ANSWER !

heyhey
Cleanup Volunteer

 

by: omry_yPosted on 2002-12-21 at 11:12:50ID: 7617988

I can give a skeleton for a classloader that will work okay in explorer, and will allow loaded code to run with full premissions (given that the classloader itself is trusted), and a skeleton for a classloader which will do the same for sun vm (netscape 6, explorer with java plugin).
with some simple modifications, it can be adapter to load classes from jar files.

Fattyman, are you interested?
Heyhey, if he is not around, I am willing to post it to get the points.

   Omry.

 

by: heyhey_Posted on 2002-12-21 at 11:15:22ID: 7617994

> Heyhey, if he is not around, I am willing to post it to get the points.

ok, post it here and I would recommend your comment for the points :)

 

by: omry_yPosted on 2002-12-21 at 11:23:45ID: 7618013

:-)
tommorow. (its at work.. ahem ahem).

 

by: heyhey_Posted on 2002-12-21 at 11:28:33ID: 7618024

do you work on Sundays ?

 

by: omry_yPosted on 2002-12-22 at 03:19:08ID: 7619981

Yeah, but I don't work on fridays :-)

here are two classloaders that allow code to load classes from a given directory.
the loaded classes have full premissions.
of course, the code using the class loaders should be signed.

======================= MS secure class loader ===========
import java.io.*;
import com.ms.security.*;



public class MSSecureDirectoryClassLoader extends SecurityClassLoader
{
    private File baseDir;      
    private FileInputStream fis;
   
    private PermissionSet perms;

   
   
    /**
     * Constructs a new SecuredDirectoryClassLoader with a given base directory.
     * @param baseDir - The directory of the requested class.
     */
   
    public MSSecureDirectoryClassLoader(File baseDir)
    {
        this.baseDir = baseDir;      
        PermissionDataSet pds = new PermissionDataSet();
        pds.setFullyTrusted(true);
        perms = new PermissionSet(pds);
       
      }                                                                                                                                                                               
   

    /**
     * Loads a class from the initial directory with a given class name.
     * @param name - The requested class name.
     * @param resolve - A boolean value to indicate whether to resolve this class.
     * @exception ClassNotFoundException - if class was not found.
     */
   
    protected synchronized Class loadClass(String name, boolean resolve) throws ClassNotFoundException
    {
        // First, check if the class has already been loaded
       
        Class c = findLoadedClass(name);
       
       
        if (c == null)
        {
               // the class is a system class , load it from the classpath.
              try
              {
                    c = findSystemClass(name);


              }catch (ClassNotFoundException ex){}


              //the class is not from the telmap package but was not found in the classpath. try to load it from the given directory..
              if (c ==null)
              {
                    try
                    {
                          c = readLocalClass(name);
                    }catch(Exception ex)
                    {
                          throw new  ClassNotFoundException("Class \""+name+"\" was not found at " + baseDir);
                    }
              }

        }
       
        // resolve the class.
        if (resolve)
        {
            resolveClass(c);
        }
       
       
        return c;
    }
   
   
    /**
     * Loads a class from the local drive, and defines it using security parameters.
     * @param name - The requested class name.       
     * @exception Exception - if class was not found or if defining it is not possible.
     */
    private Class readLocalClass(String name) throws Exception
    {
        try{
           
            byte[] class_data = readClass(name);                        
           
           
            return  defineClass(name,
                                class_data,
                                0,
                                class_data.length,
                                perms,
                                (java.security.Principal)null);
           
           
        }catch(Exception ex){
            throw ex;                              
        }
    }

    public InputStream getResourceAsStream(String name)
    {
        try
        {
            return new ByteArrayInputStream(readFile(new File(baseDir,name)));
        }
        catch (IOException ex)
        {
            return null;
        }
    }


   
    private byte[] readClass(String className) throws IOException
    {
        PolicyEngine.assertPermission(PermissionID.FILEIO);
        className = replaceAll(className,".",File.separator);
        return readFile(new File(baseDir,(className.endsWith(".class")) ? className : className + ".class"));
    }

    private static byte[] readFile(File file) throws IOException
    {
        byte data[] = new byte[(int)file.length()];
        DataInputStream fin = null;
        try
        {
            fin = new DataInputStream(new FileInputStream(file));
            fin.readFully(data);
            return data;
        }
        finally
        {
            if(fin != null) fin.close();
        }
    }
   
     private static String replaceAll(String where, String what, String with)
     {
            StringBuffer buf = new StringBuffer(where.length());
            int whatLength = what.length();

            int startIndex = -1;
            int lastIndex = 0;
            while((startIndex = where.indexOf(what,lastIndex))!= -1)
            {
                    buf.append(where.substring(lastIndex,startIndex)).append(with);
                    lastIndex = startIndex+whatLength;
            }
            buf.append(where.substring(lastIndex));
            return buf.toString();
     }

}
==========================================================


======================= SUN secure class loader ==========
import java.io.*;
import java.net.MalformedURLException;
import java.security.*;

class DirectoryClassLoader extends ClassLoader
{
    private ProtectionDomain pd;

    private File baseDir;

    public DirectoryClassLoader(File baseDir)
    {
        this.baseDir = baseDir;
        try
        {
            CodeSource codeSource = new CodeSource(baseDir.toURL(),null);
            Permissions permissions = new Permissions();

            permissions.add(new AllPermission());
            pd = new ProtectionDomain(codeSource,permissions);
        }
        catch (MalformedURLException ex)
        {
            ex.printStackTrace();
            return;
        }
    }


    protected Class findClass(String name) throws ClassNotFoundException
    {
        try
        {
            byte classBytes[] = readClass(name);
            Class cl = defineClass(name,classBytes,0,classBytes.length,pd);
            return cl;
        }
        catch (IOException ex)
        {
            throw new ClassNotFoundException("Unable to load class " + name + " from " + baseDir);
        }
    }

    public InputStream getResourceAsStream(String name)
    {
        try
        {
            return new ByteArrayInputStream(readFile(new File(baseDir,name)));
        }
        catch (IOException ex)
        {
            return null;
        }
    }

    private byte[] readClass(String className) throws IOException
    {
        className = Utils.replaceAll(className,".",File.separator);
        return readFile(new File(baseDir,className + ".class"));
    }

    private static byte[] readFile(File file) throws IOException
    {
        byte data[] = new byte[(int)file.length()];
        FileInputStream fin = null;
        try
        {
            fin = new FileInputStream(file);
            fin.read(data);
            return data;
        }
        finally
        {
            if(fin != null) fin.close();
        }
    }
}
==========================================================



 

by: heyhey_Posted on 2002-12-26 at 08:06:27ID: 7632726

.... based on additional code posted by expert ....

I will leave a recommendation in the Cleanup topic area that this question is:

- points to omry_y
 
heyhey
Cleanup Volunteer

 

by: NetminderPosted on 2002-12-28 at 12:54:49ID: 7640240

Per recommendation, force-accepted.

Netminder
EE Admin

20120131-EE-VQP-002

3 Ways to Join

30-Day Free Trial

The Experts

98% positive feedback on 31,087 answers since March 2000. angeliii is a Microsoft Most Valuable Professional for his work with MS SQL Server & Develoment.

He has also proven his knowledge of Visual Basic Programming, PHP Scripting and Oracle Databases.

The Experts

97% positive feedback on 10,752 answers since July 2000. lrmoore has more than 18 years experience in the networking industry.

The six-time Mircosoft MVPs specialties include firewalls, virtual private networking, and network management.

Testimonials

"...and excellent source for support... Kind of like having your very own IT dept." Electriciansnet

Testimonials

"I was apprehensive at signing up at first. However... it has already made my life as an IT administrator much easier." JaCrews

Testimonials

"WOW! You guys have great, active, and knowledgeable people on here." moore50

Business Clients

Business Clients

In the Press

"If you’ve got a question... Experts Exchange can supply an answer.”

In the Press

"...an invaluable aid for both IT professionals and those who require tech support."

In the Press

"where IT professionals provide quick answers on just about any topic"

Business Account Plans

Loading Advertisement...