2011-12-07 3 views
0

Apache의 FTP 서버를 사용하고 있습니다. FTP 서버는 글래스 피쉬의 싱글 톤 빈을 통해로드됩니다. 이전에 PropertiesUserManager를 사용할 때 FTP 서버를 실행할 수 있었지만 일부 JPA 논리를 묶어서 UserManager 인터페이스를 구현하는 사용자 정의 클래스 클래스를 작성했습니다. 그러나 클래스 로딩 문제가 있습니다. slf4j-api-1.6.1.jar 파일과 slf4j-jdk14-1.6.1.jar 파일은 glassfish의 lib 폴더에 있으며 glassfish를 다시 시작했습니다. 여기 Apache FTP 서버에 클래스 경로에있는 로깅 jar 패키지가 표시되지 않습니다.

는 스택 추적입니다 :

javax.ejb.EJBException: javax.ejb.CreateException: Initialization failed for Singleton LibertyFTPServer 
    at com.sun.ejb.containers.AbstractSingletonContainer$SingletonContextFactory.create(AbstractSingletonContainer.java:719) 
    at com.sun.ejb.containers.AbstractSingletonContainer.instantiateSingletonInstance(AbstractSingletonContainer.java:449) 
    at org.glassfish.ejb.startup.SingletonLifeCycleManager.initializeSingleton(SingletonLifeCycleManager.java:216) 
    at org.glassfish.ejb.startup.SingletonLifeCycleManager.initializeSingleton(SingletonLifeCycleManager.java:177) 
    at org.glassfish.ejb.startup.SingletonLifeCycleManager.doStartup(SingletonLifeCycleManager.java:155) 
    at org.glassfish.ejb.startup.EjbApplication.start(EjbApplication.java:177) 
    at org.glassfish.internal.data.EngineRef.start(EngineRef.java:130) 
    at org.glassfish.internal.data.ModuleInfo.start(ModuleInfo.java:269) 
    at org.glassfish.internal.data.ApplicationInfo.start(ApplicationInfo.java:286) 
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:461) 
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:240) 
    at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:370) 
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:355) 
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:370) 
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1067) 
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1200(CommandRunnerImpl.java:96) 
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1247) 
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1235) 
    at org.glassfish.admingui.common.util.LocalDeploymentFacility$LocalDFCommandRunner.run(LocalDeploymentFacility.java:143) 
    at org.glassfish.deployment.client.AbstractDeploymentFacility.deploy(AbstractDeploymentFacility.java:406) 
    at org.glassfish.admingui.common.util.DeployUtil.invokeDeploymentFacility(DeployUtil.java:100) 
    at org.glassfish.admingui.common.util.DeployUtil.deploy(DeployUtil.java:76) 
    at org.glassfish.admingui.common.handlers.DeploymentHandler.deploy(DeploymentHandler.java:191) 
    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 com.sun.jsftemplating.layout.descriptors.handler.Handler.invoke(Handler.java:442) 
    at com.sun.jsftemplating.layout.descriptors.LayoutElementBase.dispatchHandlers(LayoutElementBase.java:420) 
    at com.sun.jsftemplating.layout.descriptors.LayoutElementBase.dispatchHandlers(LayoutElementBase.java:394) 
    at com.sun.jsftemplating.layout.event.CommandActionListener.invokeCommandHandlers(CommandActionListener.java:150) 
    at com.sun.jsftemplating.layout.event.CommandActionListener.processAction(CommandActionListener.java:98) 
    at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88) 
    at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:769) 
    at javax.faces.component.UICommand.broadcast(UICommand.java:300) 
    at com.sun.webui.jsf.component.WebuiCommand.broadcast(WebuiCommand.java:166) 
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794) 
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259) 
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:409) 
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1534) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215) 
    at com.sun.webui.jsf.util.UploadFilter.doFilter(UploadFilter.java:223) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) 
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655) 
    at org.apache.catalina.core.StandardPipeline.doChainInvoke(StandardPipeline.java:600) 
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:96) 
    at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162) 
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:326) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:227) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:228) 
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:822) 
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:719) 
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1013) 
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225) 
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) 
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) 
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) 
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) 
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) 
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) 
    at com.sun.grizzly.ContextTask.run(ContextTask.java:71) 
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) 
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) 
    at java.lang.Thread.run(Thread.java:662) 
Caused by: javax.ejb.CreateException: Initialization failed for Singleton LibertyFTPServer 
    at com.sun.ejb.containers.AbstractSingletonContainer.createSingletonEJB(AbstractSingletonContainer.java:545) 
    at com.sun.ejb.containers.AbstractSingletonContainer.access$100(AbstractSingletonContainer.java:79) 
    at com.sun.ejb.containers.AbstractSingletonContainer$SingletonContextFactory.create(AbstractSingletonContainer.java:717) 
    ... 71 more 
Caused by: java.lang.Exception: java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder 
    at com.sun.ejb.containers.interceptors.CallbackInvocationContext.proceed(CallbackInvocationContext.java:117) 
    at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doCallback(SystemInterceptorProxy.java:138) 
    at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.init(SystemInterceptorProxy.java:120) 
    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 com.sun.ejb.containers.interceptors.CallbackInterceptor.intercept(InterceptorManager.java:965) 
    at com.sun.ejb.containers.interceptors.CallbackChainImpl.invokeNext(CallbackChainImpl.java:65) 
    at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:394) 
    at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:377) 
    at com.sun.ejb.containers.AbstractSingletonContainer.createSingletonEJB(AbstractSingletonContainer.java:536) 
    ... 73 more 
Caused by: java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder 
    at org.slf4j.LoggerFactory.<clinit>(LoggerFactory.java:60) 
    at org.apache.ftpserver.impl.DefaultFtpServerContext.<init>(DefaultFtpServerContext.java:63) 
    at org.apache.ftpserver.FtpServerFactory.<init>(FtpServerFactory.java:51) 
    at regina.eis.filemonitor.ejb.LibertyFTPServer.applicationStartup(LibertyFTPServer.java:64) 
    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 com.sun.ejb.containers.interceptors.BeanCallbackInterceptor.intercept(InterceptorManager.java:1010) 
    at com.sun.ejb.containers.interceptors.CallbackChainImpl.invokeNext(CallbackChainImpl.java:65) 
    at com.sun.ejb.containers.interceptors.CallbackInvocationContext.proceed(CallbackInvocationContext.java:113) 
    ... 84 more 
Caused by: java.lang.ClassNotFoundException: org.slf4j.impl.StaticLoggerBinder not found by slf4j.api [95] 
    at org.apache.felix.framework.ModuleImpl.findClassOrResourceByDelegation(ModuleImpl.java:787) 
    at org.apache.felix.framework.ModuleImpl.access$400(ModuleImpl.java:71) 
    at org.apache.felix.framework.ModuleImpl$ModuleClassLoader.loadClass(ModuleImpl.java:1768) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
    ... 95 more 

그리고 여기에 싱글 콩 나는 sun-web.xml에의 클래스 로더 태그의 위임 속성을 변경하여 적절한 클래스 로딩을 얻을 수있었습니다

@Singleton 
@Startup 
public class LibertyFTPServer { 
private FtpServer ftpServer; 
@Resource(name="connectionFactory", mappedName="connectionFactory") 
private QueueConnectionFactory connectionFactory; 
@Resource(name="ftpSessionQueue", mappedName="ftpSessionQueue") 
private Queue ftpSessionQueue; 
@Resource(name="accountValidatorQueue", mappedName="accountValidatorQueue") 
private Queue accountValidatorQueue; 
@Resource(name="userManagerQueue", mappedName="userManagerQueue") 
private Queue userManagerQueue; 
@EJB 
private DoctypeLookupDAO doctypeLookupDAO; 

public static final String REMOTE_SERVER_ADDRESS = "0.0.0.0"; 
public static final String USER_PROPERTIES = "C:/user.properties"; 
private static Logger LOGGER = 
    Logger.getLogger(LibertyFTPServer.class.getName()); 

@PostConstruct 
public void applicationStartup() { 
    LOGGER.info("The application is starting"); 


    final Ftplet ftplet = new ImageConversionFtplet(connectionFactory, ftpSessionQueue); 

    final ConnectionConfigFactory connectionConfigFactory = new ConnectionConfigFactory(); 
    connectionConfigFactory.setAnonymousLoginEnabled(false); 


    final FtpServerFactory ftpServerFactory = new FtpServerFactory(); 
    ftpServerFactory.setConnectionConfig(connectionConfigFactory.createConnectionConfig()); 

    final ListenerFactory listenerFactory = new ListenerFactory(); 



    final UserManagerFactory userManagerFactory = new UserManagerFactory() { 
     @Override 
     public UserManager createUserManager() { 
      LOGGER.finer("Creating a user manager"); 
      return new EJBUserManager(connectionFactory, accountValidatorQueue, userManagerQueue); 
     } 
    }; 



    listenerFactory.setServerAddress(REMOTE_SERVER_ADDRESS); 
    listenerFactory.setIdleTimeout(20); 

    // iterates through the list of port numbers and adds the same listener to 
    // each document type 
    listenerFactory.setPort(21); 
    ftpServerFactory.addListener("default", listenerFactory.createListener()); 

    ftpServerFactory.setUserManager(userManagerFactory.createUserManager()); 

    final Map<String, Ftplet> ftpletMap = new HashMap<String, Ftplet>(); 

    ftpletMap.put("default", ftplet); 

    ftpServerFactory.setFtplets(ftpletMap); 
    ftpServer = ftpServerFactory.createServer(); 
    try { 
     ftpServer.start(); 
    } catch (FtpException ex) { 

    } 
} 


    @PreDestroy 
    public void applicationShutdown() { 
     ftpServer.stop(); 
    } 
} 

답변

0

에게있어 진실에서 거짓으로.

<class-loader delegate="false">; 내가 sun-web.xml에 지금 가지고있는 것입니다.

관련 문제