Runnig Spring через Daemon как автономный
Я пытаюсь запустить Spring через сервис Daemon как отдельное приложение, конечно.
Я настроил скрипт run.sh и добавил к нему все фреймворки Spring jars.
Теперь я пытаюсь выполнить мой начальный класс из классов Daemon следующим образом:
Код: открытый класс FeedDaemon реализует Daemon {public FeedDaemon () {}
protected final static Logger log = LoggerFactory.getLogger(FeedDaemon.class);
protected boolean shouldBeRunning = false;
protected ProviderFactory runner = null;
@Override
public void destroy()
{
runner = null;
}
@Override
public void init(DaemonContext arg0) throws Exception
{
runner = new ProviderFactory();
}
public void start() throws RuntimeError, ConfigError
{
log.info("Starting daemon");
runner.start();
}
public void stop() throws Exception
{
log.info("Starting Shutting daemon ...");
runner.stop();
}
}
Код:
package com.spring.test;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.spring.aspect.Spring3HelloWorld;
import com.spring.beans.ParkingCar.CarBean;
import com.spring.beans.ParkingCar.CarMaker;
import com.spring.beans.ParkingCar.FourWheelsVechile;
import com.spring.beans.ParkingCar.TwoWheelsVechile;
import com.spring.beans.ParkingCar.Vechile;
import com.spring.beans.ParkingCar.VechileDetails;
import com.spring.beans.calculator.CalculateNumbersHolderBean;
import com.spring.beans.calculator.CalculateStrategyBean;
import com.spring.beans.calculator.CalculatorBean;
public class Spring3HelloWorldTest
{
static Logger logger = Logger.getLogger(Spring3HelloWorldTest.class);
public static void execute()
{
try
{
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
logger.debug("3");
Vechile fourWheelsVechile = (FourWheelsVechile) context.getBean("Ambulance");
fourWheelsVechile.drive();
CarMaker carMaker = (CarMaker) context.getBean("carMaker");
CarBean carBean = carMaker.createNewCar();
carBean.driveCar();
}
catch (Throwable e)
{
logger.error(e);
}
}
}
И я получаю эту ошибку:
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.commons.daemon.support.DaemonLoader.load(DaemonLoader.java:164)
Caused by: java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext
at com.spring.runner.FeedDaemon.init(FeedDaemon.java:37)
... 5 more
Caused by: java.lang.ClassNotFoundException: org.springframework.context.ApplicationContext
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
... 6 more
Cannot load daemon
Service exit with a return value of 3
вот мой скрипт run.sh:
export JAVA_HOME = /.. / FIXGW = /.. / FIXGW CLASSPATH = $ FIXGW / lib / FeedHandler.jar: $ FIXGW / lib / FixSpring.jar: $ FIXGW / lib / org.springframework.web-sources-3.1.1.RELEASE.jar:$FIXGW/ Lib / org.springframework.web.struts-источники-3.1.1.RELEASE.jar:$FIXGW/ Lib/org.springframework.web.servlet-источники-3.1.1.RELEASE.jar:$FIXGW/ Lib / org.springframework.web.portlet-источники-3.1.1.RELEASE.jar:$FIXGW/ Lib / org.springframework.test-источники-3.1.1.RELEASE.jar:$FIXGW/ Библиотека / org.springframework.orm-источники-3.1.1.RELEASE.jar:$FIXGW/ Lib / org.springframework.jms-источники-3.1.1.RELEASE.jar:$FIXGW/ Библиотека /org.springframework.jdbc-sources-3.1.1.RELEASE.jar:$FIXGW/ Lib/org.springframework.context.support-источники-3.1.1.RELEASE.jar:$FIXGW/ Lib / org.springframework.aspects-источники-3.1.1.RELEASE. баночка: $ FIXGW / Lib / org.springframework.transaction-источники-3.1.1.RELEASE.jar:$FIXGW/ Lib/org.springframework.oxm-источники-3.1.1.RELEASE.jar:$FIXGW/ Библиотека / орг.springframework.instrument-источники-3.1.1.RELEASE.jar:$FIXGW/ Библиотека / org.springframework.instrument.tomcat-так urces-3.1.1.RELEASE.jar:$FIXGW/ Библиотека /org.springframework.expression-источники-3.1.1.RELEASE.jar:$FIXGW/ Библиотека / org.springframework.core-источники-3.1.1.RELEASE. баночка: $ FIXGW / Lib/org.springframework.context-источники-3.1.1.RELEASE.jar:$FIXGW/ Lib / org.springframework.beans-источники-3.1.1.RELEASE.jar:$FIXGW/ Библиотека / орг.springframework.asm-источники-3.1.1.RELEASE.jar:$FIXGW/ Lib / org.springframework.aop-источники-3.1.1.RELEASE.jar:$FIXGW/ Библиотека / Обще-демон-1.0.3.jar
cd $ FIXGW /../jsvc -user fox \ -XX: + DisableExplicitGC -XX: + UseConcMarkSweepGC -XX: SurvivorRatio = 16 \ -Dlog4j.configuration = файл:$FIXGW/conf/log4j.properties \ -outfile /dev/null \ -errfile $FIXGW/logs/error.log \ -verbose -classpath $CLASSPATH \ com.spring.runner.FeedDaemon
Любая идея?
спасибо Рэй
2 ответа
Весенние банки не в classpath. Проверьте это мой ответ. Добавьте все библиотеки в classpath через командную строку (конечно, в вашем сценарии оболочки).
Ну, теперь я вижу твою проблему. У вас есть исходные файлы в classpath. Те упоминаются как org.springframework.web.servlet-sources-3.1.1.RELEASE.jar
в то время как скомпилированные банки упоминаются как org.springframework.web.servlet-3.1.1.RELEASE.jar
Похоже, вы добавили все jar-файлы, содержащие исходный код Spring Java (не скомпилированный код). Вместо этого вы должны добавить банки без имен...-sources... в путь к классам.