NOTICE: This version of the NSF Unidata web site (archive.unidata.ucar.edu) is no longer being updated.
Current content can be found at unidata.ucar.edu.

To learn about what's going on, see About the Archive Site.

Permissions and threads

Greetings all,

I have a small visad application which I am running as an applet, either
from Netscape with the Java plug-in or using the AppletViewer. The
applet sits on a web server with visad.jar. When run, it communicates
via RMI to a server program running on another machine (which in turn
talks to some weather databases via JDBC).

The applet uses DisplayImplJ3D to show a map of weather stations, with
their period of operation in the z-axis.

I've included the code below in case it is relevant.

The thing basically works, but with one annoying aspect. I have to grant
the codebase http:...visad.jar AllPermission to avoid getting the
following message when I rotate the 3D display:

Exception occurred during Behavior execution:
java.lang.SecurityException: Access denied to ThreadGroup not owned by
applet
        at
sun.applet.AppletSecurity.getThreadGroup(AppletSecurity.java:241)
        at java.lang.Thread.init(Thread.java:251)
        at java.lang.Thread.<init>(Thread.java:325)
        at visad.util.ThreadPool$ThreadMinnow.<init>(ThreadPool.java:63)

        at visad.util.ThreadPool.queue(ThreadPool.java:166)
        at visad.ActionImpl.notifyAction(ActionImpl.java:263)
        at visad.DisplayImpl.controlChanged(DisplayImpl.java:682)
        at visad.Control.incTick(Control.java:98)
        at visad.Control.changeControl(Compiled Code)
        at
visad.java3d.ProjectionControlJ3D.setMatrix(ProjectionControlJ3D.java
:82)
        at visad.MouseHelper.processEvent(MouseHelper.java:371)
        at visad.java3d.MouseBehaviorJ3D.processStimulus(Compiled Code)
        at javax.media.j3d.BehaviorScheduler.processBehaviors(Compiled
Code)
        at javax.media.j3d.BehaviorScheduler.run(Compiled Code)

I don't like granting codeBases AllPermission, but if I try granting all
the other permissions I still seem to get the exception. Can anybody
help?

Here is the visad code:
      RealTupleType stationSpan
          new RealTupleType(RealType.Latitude,
RealType.Longitude,RealType.Time);

      int nstations=testquery.stations.size();

      System.out.println("Number of stations to plot "+nstations);

      float span[][]=new float[3][2];

      Gridded3DSet[] accum = new Gridded3DSet[nstations];

      for (int i=0;i<nstations;i++){

        ClientStation current=(ClientStation)
testquery.stations.elementAt(i);

        java.util.Date dummytime=current.operational.getEnd();
        if (dummytime==null)
          dummytime=localCalendar.getTime();

        span[0][0]=(float) current.latitude;
        span[1][0]=(float) current.longitude;
        span[2][0]=(float) current.operational.getStart().getTime();

        span[0][1]=(float) current.latitude;
        span[1][1]=(float) current.longitude;
        span[2][1]=(float) dummytime.getTime();

        accum[i] = new Gridded3DSet(stationSpan,span,2);
      }

      UnionSet happyUnion = new UnionSet(stationSpan,accum);

        final DataReference stations_ref = new
DataReferenceImpl("stations");
        stations_ref.setData(happyUnion);

        // create a Display using Java3D
         DisplayImpl display = new DisplayImplJ3D("image display");

        // map earth coordinates to display coordinates
        display.addMap(new ScalarMap(RealType.Latitude, Display.YAxis));
        display.addMap(new ScalarMap(RealType.Longitude,
Display.XAxis));
        display.addMap(new ScalarMap(RealType.Time, Display.ZAxis));

      GraphicsModeControl mode=display.getGraphicsModeControl();
      mode.setScaleEnable(true);

        // link the Display to rivers_ref
        display.addReference(stations_ref);

        try {
          BaseMapAdapter baseMap = new BaseMapAdapter(new
URL("http://mayumi.narc.affrc.go.jp/~matthewl/visadapplet/OUTLSUPW";));
          baseMap.setLatLonLimits(latMin,latMax,longMin,longMax);
          Data mapData = baseMap.getData();

          DataReference mapRef = new DataReferenceImpl("mapData");
          mapRef.setData(mapData);

          ConstantMap[] rendMap;
          rendMap = new ConstantMap[1];
          rendMap[0] = new ConstantMap(-.99, Display.ZAxis);
          display.addReference(mapRef, rendMap);

        } catch (Exception mapop) {
      mapop.printStackTrace();
        }

        // create JPanel in JFrame
        panel3D.setLayout(new BoxLayout(panel3D, BoxLayout.Y_AXIS));
        panel3D.setAlignmentY(JPanel.TOP_ALIGNMENT);
        panel3D.setAlignmentX(JPanel.LEFT_ALIGNMENT);

        // add display to JPanel
        panel3D.add(display.getComponent());


-- 
Matthew Laurenson
National Agriculture Research Center
Ministry of Agriculture, Forestry and Fisheries
3-1-1 Kannondai
Tsukuba
Ibaraki 305-8666
JAPAN

ph       +81-298-38-7025
fax      +81-298-38-8551

  • 1999 messages navigation, sorted by:
    1. Thread
    2. Subject
    3. Author
    4. Date
    5. ↑ Table Of Contents
  • Search the visad archives: