D
D
Has anyone managed to get Tomcat to send to a serial port?
I've downloaded and installed the Java Communications API (version 2)
and Tomcat 5.0.25. Both work separately. The whole lot uses Java
1.4.0.
My servlet is below, but when I invoke it, I get a log and an
exception:
"Serial port is already in use."
javax.servlet.ServletException
comms.Send.init(Send.java:55)
javax.servlet.GenericServlet.init(GenericServlet.java:211)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:793)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:702)
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:571)
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:644)
java.lang.Thread.run(Thread.java:536)
At some point, I'm going to need to find a way of limiting the
poolsize for
this servlet to 1 only too.
Cheers
D.
--------------------------------
Source:
package comms;
import java.io.IOException;
import java.iutputStream;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.comm.*;
import javax.servlet.ServletException;
import javax.servlet.SingleThreadModel;
import javax.servlet.http.*;
public class Send extends HttpServlet implements SingleThreadModel
{
/** The output stream which writes to the Com port. */
PrintWriter out = null;
public void init() throws ServletException
{
// Open the serial port.
Enumeration portList = CommPortIdentifier.getPortIdentifiers();
while (portList.hasMoreElements())
{
CommPortIdentifier portId = (CommPortIdentifier)
portList.nextElement();
if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL)
{
//if (portId.getName().equals("/dev/term/a")) {
if (portId.getName().equals("COM1"))
{
SerialPort serialPort = null;
try
{
serialPort = (SerialPort)(portId.open("SendApplet",
2000));
out = new PrintWriter(serialPort.getOutputStream());
serialPort.setSerialPortParams(9600,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
}
catch (PortInUseException e)
{
System.out.println("Serial port is already in
use.");
throw(new ServletException());
}
catch (IOException e)
{
System.out.println("Failed to connect to output
stream.");
throw(new ServletException());
}
catch (UnsupportedCommOperationException e)
{
System.out.println("Failed to set comms params.");
throw(new ServletException());
}
}
}
}
}
public void destroy()
{
// Release the serial port.
}
public void doGet(HttpServletRequest req, HttpServletResponse resp)
{
System.out.println("doGet.");
doWork(req, resp);
}
public void doPost(HttpServletRequest req, HttpServletResponse
resp)
{
System.out.println("doPost.");
doWork(req, resp);
}
public void doWork(HttpServletRequest req, HttpServletResponse
resp)
{
// Take the msg param and send it to COM1.
String msg = req.getParameter("msg");
System.out.println("Sending["+msg+"].");
if (msg != null)
{
out.println(msg);
}
}
}
I've downloaded and installed the Java Communications API (version 2)
and Tomcat 5.0.25. Both work separately. The whole lot uses Java
1.4.0.
My servlet is below, but when I invoke it, I get a log and an
exception:
"Serial port is already in use."
javax.servlet.ServletException
comms.Send.init(Send.java:55)
javax.servlet.GenericServlet.init(GenericServlet.java:211)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:793)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:702)
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:571)
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:644)
java.lang.Thread.run(Thread.java:536)
At some point, I'm going to need to find a way of limiting the
poolsize for
this servlet to 1 only too.
Cheers
D.
--------------------------------
Source:
package comms;
import java.io.IOException;
import java.iutputStream;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.comm.*;
import javax.servlet.ServletException;
import javax.servlet.SingleThreadModel;
import javax.servlet.http.*;
public class Send extends HttpServlet implements SingleThreadModel
{
/** The output stream which writes to the Com port. */
PrintWriter out = null;
public void init() throws ServletException
{
// Open the serial port.
Enumeration portList = CommPortIdentifier.getPortIdentifiers();
while (portList.hasMoreElements())
{
CommPortIdentifier portId = (CommPortIdentifier)
portList.nextElement();
if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL)
{
//if (portId.getName().equals("/dev/term/a")) {
if (portId.getName().equals("COM1"))
{
SerialPort serialPort = null;
try
{
serialPort = (SerialPort)(portId.open("SendApplet",
2000));
out = new PrintWriter(serialPort.getOutputStream());
serialPort.setSerialPortParams(9600,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
}
catch (PortInUseException e)
{
System.out.println("Serial port is already in
use.");
throw(new ServletException());
}
catch (IOException e)
{
System.out.println("Failed to connect to output
stream.");
throw(new ServletException());
}
catch (UnsupportedCommOperationException e)
{
System.out.println("Failed to set comms params.");
throw(new ServletException());
}
}
}
}
}
public void destroy()
{
// Release the serial port.
}
public void doGet(HttpServletRequest req, HttpServletResponse resp)
{
System.out.println("doGet.");
doWork(req, resp);
}
public void doPost(HttpServletRequest req, HttpServletResponse
resp)
{
System.out.println("doPost.");
doWork(req, resp);
}
public void doWork(HttpServletRequest req, HttpServletResponse
resp)
{
// Take the msg param and send it to COM1.
String msg = req.getParameter("msg");
System.out.println("Sending["+msg+"].");
if (msg != null)
{
out.println(msg);
}
}
}