Skip to content

zh_autoGenSchema

Ray edited this page Jul 13, 2021 · 4 revisions

自动生成Breeze Schema

当Java项目需要与其他语言远程交互时,可以对Java项目中的对象生成Breeze Schema,然后通过breeze-generator,使用Schema自动创建其他语言的Breeze Message对象,进行远程交互。

在项目中引入breeze-maven-plugin

  1. 配置maven plugin
    <build>
        <plugins>            
            <plugin>
                <groupId>com.weibo</groupId>
                <artifactId>breeze-maven-plugin</artifactId>
                <version>0.1.4</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>schema</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <!-- <xmlPath>${basedir}/src/main/resources</xmlPath> -->
                    <classes>
                        <class>com.weibo.Mytest</class>
                        <class>com.weibo.Mytest$InnerTest</class>
                    </classes>
                </configuration>
            </plugin>
        </plugins>
    </build>

Motan服务依赖的对象生成Schema

可以通过配置configuration中的xmlPath配置项,指定需要扫描的目录,当执行 mvn breeze:schema 生成schema时,会扫描对应路径中所有的xml文件, 如果文件中包含motan:referer配置项,则会对motan:referer中的interface中所有方法的入参及返回值进行检测,并生成对应的Schema文件。

xmlPath的默认路径是${basedir}/src/main/resources, 也就是说,如果Motan rpc的配置文件如果放在默认路径中的话,是不需要配置xmlPath参数的。

对普通Java Bean对象生成Schema

除了支持对Motan rpc服务接口自动生成Schema外,也可以指定类名来生成Schema。

可以通过在configuration中配置classes列表项,来指定想要生成Schema的类名。如果是内部类的话,需要使用主类名$内部类名方式书写类名

Schema生成目录及文件规则

执行 mvn breeze:schema 后会按照configuration自动生成Schema,生成信息会输出到maven执行日志中。

生成后的scheam统一放在META-INF/breeze目录下,每个类对应一个.breeze的Schema文件。

项目编译时这些Schema文件也会被一同打包,编译后的.breeze文件头中会包含生成时对应类的版本信息,便于查看及进行版本管理。

注意事项

  1. 类中的所有的public成员或者有publicgetter方法的成员才会被schema描述。
  2. 自动生成schema后可以check一下是否包含了所有需要序列化的字段,如果自动生成出现任何问题会在maven执行日志中打印相关信息
  3. 自动生成schema适合针对已存在的java服务进行breeze改造,一旦生成schema后,建议逐步使用通过schema自动生成的java对象进行替换,后续通过schema对bean类进行维护,可以避免后续bean类变更导致的兼容性问题。
  4. 一旦自动生成schema后,后续对bean类的修改需要满足兼容要求,比如所有成员的位置会映射为index,因此必须是严格有序的,后续增加新成员时必须在最后面追加,不能插入到原成员中间。
  5. 每次类对象变更时会自动生成新的schema,并且检查和上次schema的兼容性,如果出现不兼容情况会build失败,请根据maven报错信息进行修改。
  6. 如果某个类或者类中的成员无法自动生成对应schema,可以参考自定义Serializer为该类实现自定义序列化。然后根据自定义序列化的行为,编写对应的schema。

使用Schema生成不同语言Breeze对象

参见breeze-generator

Clone this wiki locally