I'm looking for a way to deploy my Play-Framework-1.0 application on the port 80.
So first I made the zip file with 'dist' command, then I unzipped it.
When I run the command to lauch the application (play-java-1.0-SNAPSHOT/bin/play-java -Dhttp.port=80 -Dhttp.adresse=127.0.0.1), I get this error :
[error] p.c.s.NettyServer - Failed to listen for HTTP on /0.0.0.0:80!
Oops, cannot start the server.
play.core.server.ServerListenException: Failed to listen for HTTP on /0.0.0.0:80!
at play.core.server.NettyServer.play$core$server$NettyServer$$bindChannel(NettyServer.scala:215)
at play.core.server.NettyServer$$anonfun$1.apply(NettyServer.scala:203)
at play.core.server.NettyServer$$anonfun$1.apply(NettyServer.scala:203)
at scala.Option.map(Option.scala:146)
at play.core.server.NettyServer.<init>(NettyServer.scala:203)
at play.core.server.NettyServerProvider.createServer(NettyServer.scala:266)
at play.core.server.NettyServerProvider.createServer(NettyServer.scala:265)
at play.core.server.ServerProvider$class.createServer(ServerProvider.scala:25)
at play.core.server.NettyServerProvider.createServer(NettyServer.scala:265)
at play.core.server.ProdServerStart$.start(ProdServerStart.scala:53)
at play.core.server.ProdServerStart$.main(ProdServerStart.scala:22)
at play.core.server.ProdServerStart.main(ProdServerStart.scala)
Moreover, in the real server, Apache has been installed. So I wonder, whether that will be a problem.
Thanks!
Optionally, also remember that on most systems, running processes on ports lower than 8000 is disabled in default, in such case you need to allow it, i.e. on Unix servers, just using sudo command(prefix).
If you are using a Linux server, you can try 'fuser 80/tcp' to see whether another process is already running on that port (80). If so (there's showing a process-id, when you enter the command), you cannot use the same port for 2 processes.
Either, you have to start the Play-app in a different port or you can kill the already running process by 'sudo fuser -k 80/tcp' and start the Play-app on the same port (80).
It's not possible to have two processes running on the same host listening on the same port.
However, you could run you Play application on different port, e.g. 8080 and set up Apache as a reverse proxy (Nginx would do too, but you mentioned that you already have Apache running on the server) to forward requests to your Play application.
Example guide how to do that:
https://www.digitalocean.com/community/tutorials/how-to-use-apache-http-server-as-reverse-proxy-using-mod_proxy-extension
Related
When I try to check my HTML code, I receive this error.
What should I do?
*'Starting HTTP Preview at localhost' has encountered a problem.
Port 8080 required by HTTP Preview at localhost is already in use. The Server may already be running in another process, or a system process may be using the port. To start this server you will need to stop the other process or change the port number(s).
*
I don't use and install Tomcat, Because I didn't study about jsp yet.
+My operating system is Windows 10.
Port 8080 that your application is trying to use is already occupied by some other application. You have to close that application or use another port for your application.
To find which application is using port 8080, check this post How can you find out which process is listening on a port on Windows?
You should check the state of ports by the command netstat -ano, and you will see an item like this: TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 8940, the last number is the pid of the process which is using the port 8080, you can use task manager to find the progress with this pid and kill it.
I'm new to wiremock, and I'm trying to use it to record the requests & responses of a java application I'm responsible for integration testing.
I know my command will resemble:
java -jar wiremock-1.57-standalone.jar --port 9080 -proxy-all="http://search.twitter.com" --record-mappings --verbose
Port 9080 is the port that my java application is running on, and sends api traffic through.
However, the above command doesn't work because of a java.net.BindException: Address already in use. This makes sense to me, as both the java app and Wiremock are both trying to use the same port.
Therefore, how would I record the api calls with Wiremock?
Thank you.
The port option in the command is for wiremock to run.So you have to give another free port.If you are using some security apis,try to give --https-port also.It starts on both ports.
Wiremock standalone server should be started on separate port. Once both wiremock server and your application are up, you can goto recorder page http://wiremock_server_hort:wiremock_server_port/__admin/recorder and add ur API's link in target URL. Hit API's end point that you want to record and then you will get the mappings in 'mappings' folder (folder will be at same location where wiremock JAR is placed). For further detail check: http://wiremock.org/docs/record-playback/
the port is already in use, so change the port on the command line.
I am trying to start Tomcat from Eclipse, but a problem occured:
Port 8080 required by Tomcat v6.0 Server at localhost is already in use. The server may already be running in another process, or a system process may be using the port. To start this server you will need to stop the other process or change the port number(s).
I tried to list processes connected to this port using command on Windows:
netstat -aon
But on the listing there is no process with PID = 8080. I also tried:
netstat -aon | find "8080"
But it also didn't find anything. Can anyone help me?
PID is the process ID - not the port number. You need to look for an entry with ":8080" at the end of the address/port part (the second column). Then you can look at the PID and use Task Manager to work out which process is involved... or run netstat -abn which will show the process names (but must be run under an administrator account).
Having said that, I would expect the find "8080" to find it...
Another thing to do is just visit http://localhost:8080 - on that port, chances are it's a web server of some description.
Open eclipse go to Servers panel, right click or press F3 to open Overview window and go to Ports (Modify the server ports). You will get the following:
tomcat adminport
HTTP/1.1
AJP/1.3
You can change the port numbers (e.g. HTTP/1.1 port number 8080 to 8082).
In windows " wmic process where processid="pid of the process running" get commandline " worked for me. The
culprit was wrapper.exe process of webhuddle jboss soft.
If no other process is using the port 8080, Eventhough eclipse shows the port 8080 is used while starting the server in eclipse, first you have to stop the server by hitting the stop button in "Configure Tomcat"(which you can find in your start menu under tomcat folder), then try to start the server in eclipse then it will be started.
If any other process is using the port 8080 and as well as you no need to disturb it. then you can change the port.
In my case, there was a conflict with the virtualization function of Windows 10. This problem occurred after installing Hyper-V, virtual machine platform, and hypervisor platform to use hyper-v, docker, and bluestack together.
Even if I check with netstat, it is not a port in use, and even if I restart Windows and change the port, it does not start up saying that it is in use for all ports.
So, by changing the following services to Disabled in Windows Services, the Tomcat problem was solved, but bluestack, docker, etc. execution became impossible.
After starting Tomcat, when I manually changed the services again, bluestack was executed.
Hyper-V Host Compute Service
HV Host Service
Host network service
Network virtualization service
I use eclipse for java EE as my IDE and tomcat as my server. Here's the problem:
Several ports (8080, 8009) required by Tomcat v5.5 Server at localhost are already in use. The server may already be running in another process, or a system process may be using the port. To start this server you will need to stop the other process or change the port number.
It is as the exception says - you have a running instance of Tomcat (or, less likely, something else), that's taking ports 8080 and/or 8009. What to do:
if you've started tomcat, find it and stop it: using /etc/init.d/tomcat stop, or administrative tools > services > apache tomcat > stop, or shutdown.sh / shutdown.bat
if it is not you, find the process of tomcat and kill it (task manager on windows, and something like ps ux on nix)
if you don't find it, reboot
It looks like you have a Tomcat running already. It is possible that Eclipse couldn't stop Tomcat and now that it tries to run it again, it can't. Find and kill the existing process or reboot.
Issue the tasklist command in command prompt.
It should display tomcat as one of the processes. You can kill it by issuing either taskkill /IM "image_name" or taskkill /PID "process_id"
Others have mentioned that you could try and track down what's using those ports (perhaps another instance of Tomcat?), and kill it. However it might be that Windows itself is using them.
Killing the rogue program, or rebooting, might cure the problem for now, but to prevent this happening again, you need to reserve the ports you need. KB812873 explains how to do this.
Disclaimer: This KB article is for Windows Server 2003 and Windows 2000, and it's a while since I had to do this (for a few Windows Server 2003 installations). However I imagine it's the same for Windows 7. If not, someone will correct me :-)
Several ports (8080, 8009) required by Tomcat v5.5 Server at localhost are already in use.
You are not required to run Tomcat on 8080 or 8009. I am using Eclipse 8.6. I have set my Tomcat port to 8086 for eg.
Here are the steps to do it:
Stop Tomcat.
Click on the Run/Stop/Restart dropdown button
Select MyEclipse Tomcat
Click Configure Connector
Change port to whichever one you think is free.
To make sure you see these options make sure you have the latest version of MyEclipse.
What I need to do is running a Java application which is a RESTful service server side writtern by Restlet. And this service will be called by another app running on Google App Engine.
Because of the restriction of GAE, every http call is limited to port 80 and 443 (http and https) with HttpUrlConnection class. As a result, I have to deploy my server side application on port 80 or 443.
However, because the app is running on Ubuntu, and those ports under 1024 cannot be accessed by non-root user, then a Access Denied exception will be thrown when I run my app.
The solutions that have come into my mind includes:
Changing the security policy of JRE, which is the files resides in /lib/security/java.policy, to grantjava.net.SocketPermission "*.80" "listen, connect, accept, resolve" permission。However, neither using command line to include this file or overrides the content in JRE's java.policy file, the same exception keeps coming out.
try to login as a root user, however because my unfamiliarity with Unix, I don't know how to do it.
another solution I haven't try is to map all calls to 80 to a higher port like 1234, then I can deploy my app on 1234 without problem, and GAE call send request to port 80. But how to connect the missing gap is still a problem.
Currently I am using a "hacking" method, which is to package the application into a jar file, and sudo running the jar file with root privilege. It works now, but definitely not appropriate in the real deployment environment.
So if anyone have any idea about the solution, thanks very much!
You can use iptables to redirect using something like this:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport http -j REDIRECT --to-ports 8080
Make the changes permanent (persist after reboot) with:
iptables-save
Solution 1: It won't change anything, this is not a Java limitation, it's the OS that is preventing you to use privileged port numbers (ports lower than 1024).
Solution 2: Not a good idea IMO, there are good reasons to not run a process as root.
Solution 3: Use setcap or iptables. See this previous question.
A much easier solution is to set up a reverse proxy in Apache httpd, which Ubuntu will run for you on port 80 from /etc/init.d.
There are also ways of getting here with iptables, but I don't have recent personal experience. I've got such a proxy running right now.