This document contains answers to frequently asked questions about
the Tynamo™-TINI server.
Topics:
General
Building
-
The build is reported as successful, but no binary was
built, and it displays this message: "[tini] Could not find
BuildDependency. Make sure you have it in your classpath".
What does this mean?
This usually means that Ant cannot find the TINI tools with which
to convert your classes into a .tini executable. Check
that the tini.path
setting in your build.properties
file is correct. If you've used backslashes ('\'), then ensure
that you use two backslashes when you mean one. For example, if
your TINI firmware is in C:\tini1.17, then specify
tini.path=C:\\tini1.17
The reason for this is that properties files interpret the
backslash as an escape, changing the meaning of the following
character. For example, "\t" represents a tab, and
"\\" represents a single backslash.
The preferred solution, however, is to use forward slashes for all
file separators. For example, use
tini.path=C:/tini1.17
instead.
-
Why does Ant give me the error, 'The <condition> task
doesn't support the nested "isset" element.'?
You need to use Ant version 1.5.x or later.
-
How do I decrease the size of the .tini binary?
Try removing unneeded OneWireContainer objects from the
build by deleting the appropriate lines from
dependency.groups
in the build.properties
file. Servlet reloading also takes up space with lots of
reflection information, so this can also be excluded from the
build. Please see Building
Reloading into the Binary.
Deploying
Servlets
-
How do I add my own 1-Wire servlet?
Well, there are two ways:
- You can include it via the example OneWireServlet.
- Alternatively, you could write your own servlet that has nothing
to do with the 1-Wire example, and map your own request path.
Please see the writing your own
servlets document.
-
How do I add support for more 1-Wire containers?
Simply add the appropriate OneWireContainer object to the
dependency.groups
and reflect.classes
properties in the
build.properties
file.
For example, to add support for the Thermocron iButton, add
"OneWireContainer21" to dependency.groups and
"com.dalsemi.onewire.container.OneWireContainer21" to
reflect.classes .
Execution
-
How do I make the server start faster?
Try removing unnecessary lines from the
servlet.props file.
-
My logs say that my logfiles were mailed, but I don't receive
them. Why is this so?
There is a very strong possibility your mailhost isn't set. You can
accomplish this with the
ipconfig -h <mailhost> Slush
command. Another possibility is that your mail server does not
accept mail with a "From" domain it does not recognize.
-
Why are there frequent
IOException s in the
log?
If the remote connection closes its connection before the server is
finished reading or sending information, then an IOException
will be thrown when attempting to read from or write to the socket
connection. This exception is not ignored by the server since there
may be other reasons for this type of error within your own servlet.
Now, while most errors within a servlet should be wrapped inside a
ServletException , this may not be the case, and so an
IOException may indicate a servlet problem not related
to the connection.
-
My server always responds with a "400 Bad Request" or "Invalid
host." message.
The solution is to comment out the
server.hostname
property in the server configuration
file.
All HTTP/1.1 requests must have a "Host:" header in the request. If
the value of this header does not match the
server.hostname
property, then this message will be returned. Unless you know for
sure that HTTP clients will be requesting this specific host, this
property should not be set.
-
Why does it give me the error, "Insufficient contiguous heap",
when trying to start the server?
The TINI doesn't handle heap fragmentation very well, so even though
your free memory may seem more than sufficient, there may not be a
continuous block of memory with sufficient space for the server. Try
rebooting, and if that doesn't fix the problem, try clearing the heap
and reloading the application.
Note: You can reboot with the '-h' option to clear the heap.
-
Why can't I find or instantiate class X?
If building the server for TINI firmware 1.1x, make sure to include
the full class name in the reflect.classes
build property. Also, be sure to include the correct dependency group
in the dependency.groups
property if needed (1-Wire classes, for example). Lastly, ensure that
the syntax of each entry in the build file is correct. For example,
if a list spans multiple lines, then there should be a ",\" at each
line break.
Note that this problem can also manifest itself as a 404 Not
Found error when trying to access a servlet that "you just
know is there".
-
Why are new sessions created when it should be using a
previously created one?
Make sure to get the session before calling
getOutputStream() . The reason is that session IDs
are usually stored in the headers, and a call to
getOutputStream() does not allow any more headers to
be sent. This is what is meant by a "committed response".
-
Why am I getting a
NullPointerException when
constructing a new URL object?
First, make sure that the appropriate URL handler classes are
included in the build (see
dependency.groups
and
reflect.classes ).
If this does not solve the problem, then make sure you are using
the latest firmware (version 1.17, as of this writing).
There is a bug inside the algorithm that looks for appropriate
handler classes for URL s. It exists in firmware
versions 1.11, 1.02f, and earlier. It is fixed in firmware 1.12
and 1.02g.
-
Why is a
MalformedURLException being thrown
when creating a new URL object?
A MalformedURLException is thrown when the string
could not be parsed as a valid URL, or a valid protocol
implementation could not be found. First check that the
string is correct. Next, ensure that the proper protocol handler
classes are included, either in your source, or in the dependency
classes.
For example, to support the "http" protocol, add "HTTP" to the
dependency.groups
build property and "com.dalsemi.protocol.http.Handler" to
reflect.classes .
In other words, if you're sure the URL is correct, then some
classes are probably missing from the build.
|