2012-07-11 175 views
0

我有一个我已成功部署在Glassfish 3.1.2上的osgi包。这是包激活:当我用osgi包重新启动服务器时,Glassfish崩溃

import javax.sql.DataSource; 
import java.sql.SQLException; 

import java.util.Properties; 
import org.DX_57.osgi.SH_27.api.SessionHandle; 
import org.osgi.framework.BundleActivator; 
import org.osgi.framework.BundleContext; 
import org.osgi.framework.Constants; 
import org.osgi.framework.Filter; 
import org.osgi.framework.ServiceReference; 
import org.osgi.framework.ServiceRegistration; 
import org.osgi.util.tracker.ServiceTracker; 

public class SessionHandleActivator implements BundleActivator { 

    // Define Datasource name 
    public static final String DSNAME = "jdbc/Oracle"; 
    public ServiceTracker st; 

    // Register the Java method as OSGI Service when the bundle is deployed 
    @Override 
    public void start(final BundleContext bc) throws Exception { 
     debug("Session Handle 27 Activator started"); 

     /* 
     * Register the Datasource as Service in order to be used into the 
     * bundle later from the Java methods 
     */ 
     Filter filter = bc.createFilter("(&" + "(" + Constants.OBJECTCLASS 
       + "=" + DataSource.class.getName() + ")" + "(jndi-name=" 
       + DSNAME + ")" + ")"); 
     st = new ServiceTracker(bc, filter, null) { 

      @Override 
      public Object addingService(ServiceReference reference) { 

       DataSource ds = (DataSource) bc.getService(reference); 
       try { 
        debug(ds.getConnection().toString()); 
        // For session handle 
        SessionHandle sh = new SessionHandleImpl(); 
        sh.setDataSource(ds); 
        /* 
        * Register the Java methods insight the bundle in order to 
        * be used 
        */ 
        ServiceRegistration registerService = bc.registerService(SessionHandle.class.getName(), sh, new Properties()); 

       } catch (SQLException e) { 
       } 

       return super.addingService(reference); 
      } 

      @Override 
      public void removedService(ServiceReference reference, 
        Object service) { 
       super.removedService(reference, service); 
      } 
     }; 
     st.open(); 
    } 

    // Remove the OSGI service when the bundle is undeployed 
    @Override 
    public void stop(BundleContext bc) throws Exception { 
     boolean ungetService = bc.ungetService(bc.getServiceReference(SessionHandle.class.getName())); 
     st.close(); 
     debug("Session Handle 27 Activator stopped"); 
    } 

    // Show debug information when the OSGI bundle is deployed 
    private void debug(String msg) { 
     System.out.println("BundleActivator: " + msg); 
    } 
} 

当我重新启动GlassFish服务器的服务器崩溃,我得到这个错误堆栈:

[#|2012-07-08T12:38:16.568+0300|INFO|glassfish3.1.2|org.glassfish.osgijavaeebase|_ThreadID=67;_ThreadName=Thread-2;|Expanded at file:/tmp/osgiapp5717459413008665895/|#] 

[#|2012-07-08T12:38:17.205+0300|SEVERE|glassfish3.1.2|javax.enterprise.resource.webcontainer.jsf.config|_ThreadID=50;_ThreadName=Thread-2;|Critical error during deployment: 
com.sun.faces.config.ConfigurationException: java.util.concurrent.ExecutionException: java.net.MalformedURLException: Unknown protocol: jndi 
    at com.sun.faces.config.ConfigManager.getConfigDocuments(ConfigManager.java:674) 
    at com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:324) 
    at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:225) 
    at org.apache.catalina.core.StandardContext.contextListenerStart(StandardContext.java:4750) 
    at com.sun.enterprise.web.WebModule.contextListenerStart(WebModule.java:550) 
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:5366) 
    at com.sun.enterprise.web.WebModule.start(WebModule.java:498) 
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:917) 
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:901) 
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:733) 
    at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:2018) 
    at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1669) 
    at com.sun.enterprise.web.WebApplication.start(WebApplication.java:109) 
    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:301) 
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:461) 
    at com.sun.enterprise.v3.server.ApplicationLoaderService.processApplication(ApplicationLoaderService.java:375) 
    at com.sun.enterprise.v3.admin.adapter.InstallerThread.load(InstallerThread.java:210) 
    at com.sun.enterprise.v3.admin.adapter.InstallerThread.run(InstallerThread.java:108) 
Caused by: java.util.concurrent.ExecutionException: java.net.MalformedURLException: Unknown protocol: jndi 
    at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:252) 
    at java.util.concurrent.FutureTask.get(FutureTask.java:111) 
    at com.sun.faces.config.ConfigManager.getConfigDocuments(ConfigManager.java:672) 
    ... 19 more 
Caused by: java.net.MalformedURLException: Unknown protocol: jndi 
    at java.net.URL.<init>(URL.java:617) 
    at java.net.URL.<init>(URL.java:480) 
    at java.net.URL.<init>(URL.java:429) 
    at java.net.URI.toURL(URI.java:1096) 
    at com.sun.faces.config.ConfigManager$ParseTask.call(ConfigManager.java:922) 
    at com.sun.faces.config.ConfigManager$ParseTask.call(ConfigManager.java:867) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:166) 
    at com.sun.faces.config.ConfigManager.getConfigDocuments(ConfigManager.java:658) 
    ... 19 more 
Caused by: java.lang.IllegalStateException: Unknown protocol: jndi 
    at org.apache.felix.framework.URLHandlersStreamHandlerProxy.parseURL(URLHandlersStreamHandlerProxy.java:372) 
    at java.net.URL.<init>(URL.java:612) 
    ... 27 more 
|#] 

[#|2012-07-08T12:38:17.233+0300|SEVERE|glassfish3.1.2|org.apache.catalina.core.StandardContext|_ThreadID=50;_ThreadName=Thread-2;|PWC1306: Startup of context failed due to previous errors|#] 

[#|2012-07-08T12:38:17.244+0300|SEVERE|glassfish3.1.2|org.apache.catalina.core.StandardContext|_ThreadID=50;_ThreadName=Thread-2;|PWC1305: Exception during cleanup after start failed 
org.apache.catalina.LifecycleException: PWC2769: Manager has not yet been started 
    at org.apache.catalina.session.StandardManager.stop(StandardManager.java:873) 
    at org.apache.catalina.core.StandardContext.stop(StandardContext.java:5571) 
    at com.sun.enterprise.web.WebModule.stop(WebModule.java:527) 
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:5384) 
    at com.sun.enterprise.web.WebModule.start(WebModule.java:498) 
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:917) 
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:901) 
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:733) 
    at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:2018) 
    at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1669) 
    at com.sun.enterprise.web.WebApplication.start(WebApplication.java:109) 
    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:301) 
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:461) 
    at com.sun.enterprise.v3.server.ApplicationLoaderService.processApplication(ApplicationLoaderService.java:375) 
    at com.sun.enterprise.v3.admin.adapter.InstallerThread.load(InstallerThread.java:210) 
    at com.sun.enterprise.v3.admin.adapter.InstallerThread.run(InstallerThread.java:108) 
|#] 

[#|2012-07-08T12:38:17.245+0300|SEVERE|glassfish3.1.2|org.apache.catalina.core.ContainerBase|_ThreadID=50;_ThreadName=Thread-2;|ContainerBase.addChild: start: 
org.apache.catalina.LifecycleException: java.lang.RuntimeException: com.sun.faces.config.ConfigurationException: java.util.concurrent.ExecutionException: java.net.MalformedURLException: Unknown protocol: jndi 
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:5389) 
    at com.sun.enterprise.web.WebModule.start(WebModule.java:498) 
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:917) 
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:901) 
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:733) 
    at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:2018) 
    at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1669) 
    at com.sun.enterprise.web.WebApplication.start(WebApplication.java:109) 
    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:301) 
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:461) 
    at com.sun.enterprise.v3.server.ApplicationLoaderService.processApplication(ApplicationLoaderService.java:375) 
    at com.sun.enterprise.v3.admin.adapter.InstallerThread.load(InstallerThread.java:210) 
    at com.sun.enterprise.v3.admin.adapter.InstallerThread.run(InstallerThread.java:108) 
Caused by: java.lang.RuntimeException: com.sun.faces.config.ConfigurationException: java.util.concurrent.ExecutionException: java.net.MalformedURLException: Unknown protocol: jndi 
    at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:292) 
    at org.apache.catalina.core.StandardContext.contextListenerStart(StandardContext.java:4750) 
    at com.sun.enterprise.web.WebModule.contextListenerStart(WebModule.java:550) 
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:5366) 
    ... 14 more 
Caused by: com.sun.faces.config.ConfigurationException: java.util.concurrent.ExecutionException: java.net.MalformedURLException: Unknown protocol: jndi 
    at com.sun.faces.config.ConfigManager.getConfigDocuments(ConfigManager.java:674) 
    at com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:324) 
    at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:225) 
    ... 17 more 
Caused by: java.util.concurrent.ExecutionException: java.net.MalformedURLException: Unknown protocol: jndi 
    at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:252) 
    at java.util.concurrent.FutureTask.get(FutureTask.java:111) 
    at com.sun.faces.config.ConfigManager.getConfigDocuments(ConfigManager.java:672) 
    ... 19 more 
Caused by: java.net.MalformedURLException: Unknown protocol: jndi 
    at java.net.URL.<init>(URL.java:617) 
    at java.net.URL.<init>(URL.java:480) 
    at java.net.URL.<init>(URL.java:429) 
    at java.net.URI.toURL(URI.java:1096) 
    at com.sun.faces.config.ConfigManager$ParseTask.call(ConfigManager.java:922) 
    at com.sun.faces.config.ConfigManager$ParseTask.call(ConfigManager.java:867) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:166) 
    at com.sun.faces.config.ConfigManager.getConfigDocuments(ConfigManager.java:658) 
    ... 19 more 
Caused by: java.lang.IllegalStateException: Unknown protocol: jndi 
    at org.apache.felix.framework.URLHandlersStreamHandlerProxy.parseURL(URLHandlersStreamHandlerProxy.java:372) 
    at java.net.URL.<init>(URL.java:612) 
    ... 27 more 
|#] 

[#|2012-07-08T12:38:17.250+0300|INFO|glassfish3.1.2|org.apache.catalina.startup.ContextConfig|_ThreadID=12;_ThreadName=Thread-2;|No default web.xml|#] 

[#|2012-07-08T12:38:17.253+0300|WARNING|glassfish3.1.2|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=50;_ThreadName=Thread-2;|java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: java.lang.RuntimeException: com.sun.faces.config.ConfigurationException: java.util.concurrent.ExecutionException: java.net.MalformedURLException: Unknown protocol: jndi 
java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: java.lang.RuntimeException: com.sun.faces.config.ConfigurationException: java.util.concurrent.ExecutionException: java.net.MalformedURLException: Unknown protocol: jndi 
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:921) 
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:901) 
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:733) 
    at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:2018) 
    at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1669) 
    at com.sun.enterprise.web.WebApplication.start(WebApplication.java:109) 
    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:301) 
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:461) 
    at com.sun.enterprise.v3.server.ApplicationLoaderService.processApplication(ApplicationLoaderService.java:375) 
    at com.sun.enterprise.v3.admin.adapter.InstallerThread.load(InstallerThread.java:210) 
    at com.sun.enterprise.v3.admin.adapter.InstallerThread.run(InstallerThread.java:108) 
|#] 

[#|2012-07-08T12:38:17.254+0300|SEVERE|glassfish3.1.2|javax.enterprise.system.core.com.sun.enterprise.v3.server|_ThreadID=50;_ThreadName=Thread-2;|Exception while invoking class com.sun.enterprise.web.WebApplication start method 
java.lang.Exception: java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: java.lang.RuntimeException: com.sun.faces.config.ConfigurationException: java.util.concurrent.ExecutionException: java.net.MalformedURLException: Unknown protocol: jndi 
    at com.sun.enterprise.web.WebApplication.start(WebApplication.java:138) 
    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:301) 
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:461) 
    at com.sun.enterprise.v3.server.ApplicationLoaderService.processApplication(ApplicationLoaderService.java:375) 
    at com.sun.enterprise.v3.admin.adapter.InstallerThread.load(InstallerThread.java:210) 
    at com.sun.enterprise.v3.admin.adapter.InstallerThread.run(InstallerThread.java:108) 
|#] 

[#|2012-07-08T12:38:17.254+0300|SEVERE|glassfish3.1.2|javax.enterprise.system.core.com.sun.enterprise.v3.server|_ThreadID=50;_ThreadName=Thread-2;|Exception while loading the app|#] 

[#|2012-07-08T12:38:17.258+0300|INFO|glassfish3.1.2|org.glassfish.osgihttp|_ThreadID=12;_ThreadName=Thread-2;|standardContext = StandardEngine[glassfish-web].StandardHost[__asadmin].StandardContext[/osgi]|#] 

[#|2012-07-08T12:38:17.301+0300|SEVERE|glassfish3.1.2|javax.enterprise.system.core.com.sun.enterprise.v3.server|_ThreadID=50;_ThreadName=Thread-2;|Exception while loading the app|#] 

你能帮助我解决这个问题?

+0

P1。向用户报告(at)glassfish.java.net – sahoo 2012-07-12 17:35:59

+0

我已经这样做了:http://java.net/jira/browse/GLASSFISH-18893和http://www.java.net/forum/topic/glassfish/ glassfish/error-when-trying-restart-glassfish-osgi-bundles-server-crash – user1285928 2012-07-12 18:04:13

回答

1

我认为你重启时你的包太早启动。有些东西注册了jndi url协议,第一次很好,因为它在部署它时已经发生了,但是在第一次发生时,OSGi环境被重新启动,并且在JNDI注册为有效协议之前很早重新启动。

我不是Glassfish大师,我不确定什么是最好的方式来进行,也许你可以通过指定org.osgi.framework.storage.clean来阻止整个复苏过程,也许你可以增加开始你的包的级别(所以它会在晚些时候开始),并防止这个问题,也许你可以以某种方式检测何时jndi协议被注册并等待?

+0

这可能会有所帮助,设置开始级别对我来说似乎是解决这个问题最直接的方法。 http://stackoverflow.com/questions/6611387/setting-startlevel-for-osgi-bundle – 2012-07-16 13:21:46

相关问题