From owner-freebsd-java@FreeBSD.ORG Wed Jun 4 19:10:02 2003 Return-Path: Delivered-To: freebsd-java@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 9887937B401 for ; Wed, 4 Jun 2003 19:10:02 -0700 (PDT) Received: from ms-smtp-01.southeast.rr.com (ms-smtp-01.southeast.rr.com [24.93.67.82]) by mx1.FreeBSD.org (Postfix) with ESMTP id C00B543FA3 for ; Wed, 4 Jun 2003 19:10:01 -0700 (PDT) (envelope-from mmercer@nc.rr.com) Received: from nc.rr.com (rdu88-246-041.nc.rr.com [24.88.246.41]) h5524Z5J028500 for ; Wed, 4 Jun 2003 22:04:35 -0400 (EDT) Sender: mmercer@ms-smtp-01.southeast.rr.com Message-ID: <3EDEA678.D6EDF17D@nc.rr.com> Date: Wed, 04 Jun 2003 22:10:00 -0400 From: Michael E Mercer X-Mailer: Mozilla 4.8 [en] (X11; U; Linux 2.4.2 i386) X-Accept-Language: en MIME-Version: 1.0 To: "'FreeBSD Java mailing list'" Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Subject: UnsatisfiedLinkError running nio example code NBTimeServer X-BeenThere: freebsd-java@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list Reply-To: mmercer@nc.rr.com List-Id: Porting Java to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 05 Jun 2003 02:10:02 -0000 Hello, > uname -a FreeBSD 4.8-STABLE FreeBSD 4.8-STABLE #1: Sat May 31 21:15:33 EDT 2003 i386 > java -version java version "1.4.1-p3" Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1-p3-mmercer_13_may_2003_19_57) Java HotSpot(TM) Client VM (build 1.4.1-p3-mmercer_13_may_2003_19_57, mixed mode) When I compiled the example code below and tried to run it, I get the following error... > java NBTimeServer Exception in thread "main" java.lang.UnsatisfiedLinkError: init at sun.nio.ch.DevPollArrayWrapper.init(Native Method) at sun.nio.ch.DevPollArrayWrapper.(DevPollArrayWrapper.java:59) at sun.nio.ch.DevPollSelectorImpl.(DevPollSelectorImpl.java:54) at sun.nio.ch.DevPollSelectorProvider.openSelector(DevPollSelectorProvider.java:18) at NBTimeServer.acceptConnections(NBTimeServer.java:67) at NBTimeServer.(NBTimeServer.java:56) at NBTimeServer.main(NBTimeServer.java:120) > cat NBTimeServer.java /* * @(#)NBTimeServer.java 1.4 01/12/13 * A non blocking Internet time server implemented using * the New I/O (NIO) facilities added to J2SE v 1.4. * * Copyright 2001-2002 Sun Microsystems, Inc. All Rights Reserved. * * Redistribution and use in source and binary forms, with or * without modification, are permitted provided that the following * conditions are met: * * -Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * -Redistribution in binary form must reproduct the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * Neither the name of Sun Microsystems, Inc. or the names of * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * This software is provided "AS IS," without a warranty of any * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY * EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY * DAMAGES OR LIABILITIES SUFFERED BY LICENSEE AS A RESULT OF OR * RELATING TO USE, MODIFICATION OR DISTRIBUTION OF THE SOFTWARE OR * ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE * FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, * SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF * THE USE OF OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. * * You acknowledge that Software is not designed, licensed or * intended for use in the design, construction, operation or * maintenance of any nuclear facility. */ import java.io.*; import java.nio.*; import java.nio.channels.*; import java.nio.channels.spi.*; import java.net.*; import java.util.*; // Listen on a port for connections and write back the current time. public class NBTimeServer { private static final int DEFAULT_TIME_PORT = 8900; // Constructor with no arguments creates a time server on default port. public NBTimeServer() throws Exception { acceptConnections(this.DEFAULT_TIME_PORT); } // Constructor with port argument creates a time server on specified port. public NBTimeServer(int port) throws Exception { acceptConnections(port); } // Accept connections for current time. Lazy Exception thrown. private static void acceptConnections(int port) throws Exception { // Selector for incoming time requests Selector acceptSelector = SelectorProvider.provider().openSelector(); // Create a new server socket and set to non blocking mode ServerSocketChannel ssc = ServerSocketChannel.open(); ssc.configureBlocking(false); // Bind the server socket to the local host and port InetAddress lh = InetAddress.getLocalHost(); InetSocketAddress isa = new InetSocketAddress(lh, port); ssc.socket().bind(isa); // Register accepts on the server socket with the selector. This // step tells the selector that the socket wants to be put on the // ready list when accept operations occur, so allowing multiplexed // non-blocking I/O to take place. SelectionKey acceptKey = ssc.register(acceptSelector, SelectionKey.OP_ACCEPT); int keysAdded = 0; // Here's where everything happens. The select method will // return when any operations registered above have occurred, the // thread has been interrupted, etc. while ((keysAdded = acceptSelector.select()) > 0) { // Someone is ready for I/O, get the ready keys Set readyKeys = acceptSelector.selectedKeys(); Iterator i = readyKeys.iterator(); // Walk through the ready keys collection and process date requests. while (i.hasNext()) { SelectionKey sk = (SelectionKey)i.next(); i.remove(); // The key indexes into the selector so you // can retrieve the socket that's ready for I/O ServerSocketChannel nextReady = (ServerSocketChannel)sk.channel(); // Accept the date request and send back the date string Socket s = nextReady.accept().socket(); // Write the current time to the socket PrintWriter out = new PrintWriter(s.getOutputStream(), true); Date now = new Date(); out.println(now); out.close(); } } } // Entry point. public static void main(String[] args) { // Parse command line arguments and // create a new time server (no arguments yet) try { NBTimeServer nbt = new NBTimeServer(); } catch(Exception e) { e.printStackTrace(); } } }