Hi guys,

i tried to get phoenix (james) to work with commons daemon. And by now i
really have no  idea why it no work and whats the problem. This just
drives my crazy.. So maybe a other commiter has a idee .. or maybe Peter
Royal ( he worked on avalon if im not wrong).. 

 I created a jar called phoenix-daemon-loader.jar which contains just
one class which is needed for jsvc to invoke phoenix. The class will be
posted on the end of the email.. I compiles jsvc and move it to the bin
path of james. I also moved the commons-daemon.jar and
phoenix-daemon-loader.jar in the dir.

Then i tried to start phoenix (james) with jsvc by calling:

[EMAIL PROTECTED]:/tmp/james-3.0-dev/bin# ./jsvc
-Djava.ext.dirs=/tmp/james-3.0-dev/lib:/tmp/james-3.0-dev/tools/lib
-Djava.security.manager
-Djava.security.policy=jar:file:/tmp/james-3.0-dev/bin/phoenix-loader.jar\!/META-INF/java.policy
  -Dphoenix.home=/tmp/james-3.0-dev -Djava.io.tmpdir=/tmp/james-3.0-dev/temp 
-cp commons-daemon.jar:phoenix-daemon-loader.jar:phoenix-loader.jar  -wait 30 
-nodetach -errfile error.log 
org.apache.avalon.phoenix.launcher.CommonsDaemonLauncher

This should be right from the docs of commons daemon. But phoenix get
not started. See error.log:

org.apache.avalon.phoenix.containerkit.lifecycle.LifecycleException:
Component named "nntpserver" failed to pass through the
 Starting stage. (Reason: java.net.BindException: Permission denied).
        at
org.apache.avalon.phoenix.containerkit.lifecycle.LifecycleHelper.fail(LifecycleHelper.java:354)
        at
org.apache.avalon.phoenix.containerkit.lifecycle.LifecycleHelper.startup(LifecycleHelper.java:226)
        at
org.apache.avalon.phoenix.components.application.DefaultApplication.startup(DefaultApplication.java:530)
        at
org.apache.avalon.phoenix.components.application.DefaultApplication.doRunPhase(DefaultApplication.java:478)
        at
org.apache.avalon.phoenix.components.application.DefaultApplication.runPhase(DefaultApplication.java:409)
        at
org.apache.avalon.phoenix.components.application.DefaultApplication.start(DefaultApplication.java:180)
        at
org.apache.avalon.framework.container.ContainerUtil.start(ContainerUtil.java:260)
        at
org.apache.avalon.phoenix.components.kernel.DefaultKernel.startup(DefaultKernel.java:295)
        at
org.apache.avalon.phoenix.components.kernel.DefaultKernel.addApplication(DefaultKernel.java:376)
        at
org.apache.avalon.phoenix.components.deployer.DefaultDeployer.deploy(DefaultDeployer.java:357)
        at
org.apache.avalon.phoenix.components.embeddor.DefaultEmbeddor.deployFile(DefaultEmbeddor.java:542)
        at
org.apache.avalon.phoenix.components.embeddor.DefaultEmbeddor.deployFile(DefaultEmbeddor.java:535)
        at
org.apache.avalon.phoenix.components.embeddor.DefaultEmbeddor.deployFiles(DefaultEmbeddor.java:520)
        at
org.apache.avalon.phoenix.components.embeddor.DefaultEmbeddor.deployDefaultApplications(DefaultEmbeddor.java:509)
        at
org.apache.avalon.phoenix.components.embeddor.DefaultEmbeddor.execute(DefaultEmbeddor.java:268)
        at
org.apache.avalon.phoenix.frontends.CLIMain.run(CLIMain.java:198)
        at java.lang.Thread.run(Thread.java:595)
Caused by: java.net.BindException: Permission denied
        at java.net.PlainSocketImpl.socketBind(Native Method)
        at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:359)
        at java.net.ServerSocket.bind(ServerSocket.java:319)
        at java.net.ServerSocket.<init>(ServerSocket.java:185)
        at
org.apache.avalon.cornerstone.blocks.sockets.DefaultServerSocketFactory.createServerSocket(DefaultServerSocketFac
tory.java:74)
        at
org.apache.james.core.AbstractJamesService.initializeServerSocket(AbstractJamesService.java:376)
        at
org.apache.james.core.AbstractJamesService.initialize(AbstractJamesService.java:352)
        at
org.apache.avalon.framework.container.ContainerUtil.initialize(ContainerUtil.java:244)
        at
org.apache.avalon.phoenix.containerkit.lifecycle.LifecycleHelper.startup(LifecycleHelper.java:200)
        ... 15 more


But why ? i start it as root .. I also tried to use ports higher then
1024. Same problem.. Any idea what i missed ?

BTW, i wrote a sample application which just bind ports and get started
with jsvc. No problems there. So the porblems seems to be in phoenix..

bye
Norman

CommonsDaemonLauncher.class:
package org.apache.avalon.phoenix.launcher;

import org.apache.avalon.phoenix.launcher.Main;
import org.apache.commons.daemon.Daemon;
import org.apache.commons.daemon.DaemonContext;
import org.apache.commons.daemon.DaemonController;

import java.util.Hashtable;
import java.util.Observable;
import java.util.Observer;

/**
 * Phoenix launcher using Commons daemon.
 */
public class CommonsDaemonLauncher implements Daemon, Observer
{

    private DaemonContext    m_context;

    private DaemonController m_controller;

    private String[]         m_args;

    public void init(final DaemonContext daemonContext) throws Exception
    {
        m_context = daemonContext;
        m_controller = m_context.getController();
        m_args = m_context.getArguments();
    }

    public void start() throws Exception
    {
        final Hashtable data = new Hashtable();
        data.put(Observer.class.getName(), this);
        Main.startup(m_args, data, false);
    }

    public void stop()
    {
        Main.shutdown();
    }

    public void destroy()
    {
    }

    public void update(final Observable observable, final Object arg)
    {
        final String command = (null != arg) ? arg.toString() : "";
        if (command.equals("restart"))
        {
            log("CommonsDaemon: restart requested.");

            m_controller.reload();
            log("CommonsDaemon: restart completed.");
        }
        else if (command.equals("shutdown"))
        {
            log("CommonsDaemon: shutdown requested.");
            m_controller.shutdown();

            log("CommonsDaemon: shutdown completed.");

        }
        else
        {
            throw new IllegalArgumentException("Unknown action " +
command);
        }
    }

    private void log(final String message)
    {
        System.out.print("CommonsDaemon: ");
        System.out.println(message);
        System.out.flush();
    }
}


Attachment: signature.asc
Description: Dies ist ein digital signierter Nachrichtenteil

Reply via email to