neo4j源码分析2-启动源码跟踪

本文详细介绍了Neo4j启动过程的源码调试,从CommunityEntryPoint开始,逐步跟进,揭示了初始化阶段的关键步骤,包括不同类型的KernelExtension加载。在GraphDatabaseFacadeFactory.newFacade部分,调试深入到高潮,探讨了查询引擎的加载细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

来自:http://www.k6k4.com/blog/show/aaaqtuv1y1547605773440

1.第一遍调试

第一遍就是打断点,然后查看调用栈,忽略过多的线程。

找到 CommunityEntryPoint,打一个断点,调试,不断F5进入,F6单步执行,F跳出。

  1. new CommunityBootstrapper(),ServerBootstrapper.start(boot,args)

  2. ServerBootstrapper 中的初始化关键代码: private GraphDatabaseDependencies dependencies = GraphDatabaseDependencies.newDependencies(); 这个dependencies貌似来头很大。F5进入
    public static GraphDatabaseDependencies newDependencies()

    1. KernelExtensionFactory factory : Service.load( KernelExtensionFactory.class)
      这段代码似乎跳不进去,反正最后得到了7个:

      0 = {LuceneKernelExtensionFactory@675} “KernelExtension:LuceneKernelExtensionFactory[lucene]”
      1 = {LuceneSchemaIndexProviderFactory@679} “KernelExtension:LuceneSchemaIndexProviderFactory[lucene]”
      2 = {NativeLuceneFusionSchemaIndexProviderFactory@680} “KernelExtension:NativeLuceneFusionSchemaIndexProviderFactory[lucene+native]”
      3 = {BoltKernelExtension@681} “KernelExtension:BoltKernelExtension[bolt-server]”
      4 = {ShellServerExtensionFactory@682} “KernelExtension:ShellServerExtensionFactory[shell]”
      5 = {UdcKernelExtensionFactory@683} “KernelExtension:UdcKernelExtensionFactory[kernel udc]”
      6 = {JmxExtensionFactory@684} “KernelExtension:JmxExtensionFactory[kernel jmx]”

    2. List<QueryEngineProvider> queryEngineProviders = asList( Service.load( QueryEngineProvider.class ) );

      这段代码和前面一样,不过加载的是查询引擎的的class,我们暂且跳过!

    3. return new GraphDatabaseDependencies( null, null, new ArrayList<>(), kernelExtensions,)

  3. ServerBootstrapper.start( Bootstrapper boot, String... argv )

    1. `CommunityBootstrapper(AbstractNeoServer).start`

        1. `server = createNeoServer( config, dependencies, userLogProvider );`

            1. `new CommunityNeoServer( config, dependencies, logProvider );`
            
            
            // 初始化很多属性

    		protected abstract WebServer createWebServer();

			// 放在代码后面的属性
			private final Dependencies dependencyResolver = new Dependencies( new Supplier<DependencyResolver>()
    		{
   
   
    		    @Override
    		    public DependencyResolver get()
    		    {
   
   
    		        Database db = dependencyResolver.resolveDependency( Database.class );
    		        return db.getGraph().getDependencyResolver();
    		    }
    		} );
			
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值