构件开发常见问题和错误的解决方案和处理方法
問題及解決方案:
?1. 構件開發完成后,啟動后如何對構件框架結構進行查看?
?問題原因:為便于構件開發者對構件的整體進行把握,需要看到構件的框架結構。
解決方案:在當前構件開發的包中,新建一個HelloWord類,包含main函數,并在函數中對構件進行啟動。示例代碼如下所示:
啟動SmcavsExplorer的代碼 ????Factory?factory?=?FactoryFactory????????????.getFactory(FactoryFactory.SMCAVS_BACKEND);
????HashMap?context?=?new?HashMap();
????context.put("name",?"Connection");
????context.put("definition",?"ustb.compbase.db.connection.Connection");
????Component?root?=?(Component)?factory.newComponent(
????????????"ustb.smcavs.explorer.BasicSmcavsExplorer",?context);
????Smcavs.getLifeCycleController(root).startFc();
錯誤及處理方法:
1. 無效綁定:不對應的簽名。異常內容是:
Exception in thread "main" ustb.smcavs.adl.ADLException: Invalid binding: incompatible signatures (ustb/compbase/db/connection/Connection.smcavs:11)
?at ustb.smcavs.adl.bindings.TypeBindingLoader.checkBinding(TypeBindingLoader.java:119)
?at ustb.smcavs.adl.bindings.BindingLoader.checkBinding(BindingLoader.java:122)
?at ustb.smcavs.adl.bindings.BindingLoader.checkNode(BindingLoader.java:82)
?at ustb.smcavs.adl.bindings.BindingLoader.checkNode(BindingLoader.java:96)
?at ustb.smcavs.adl.bindings.BindingLoader.load(BindingLoader.java:54)
?at ustb.smcavs.adl.bindings.UnboundInterfaceDetectorLoader.load(UnboundInterfaceDetectorLoader.java:58)
?at ustb.smcavs.adl.BasicFactory.newComponent(BasicFactory.java:144)
?at ustb.compbase.db.connection.HelloWorld.main(HelloWorld.java:35)
問題原因:綁定關系無效。
解決方案:檢查構件描述文件中的各個節點的definition,signature等相關信息及綁定關系項是否書寫正確。
2. 實例化異常:未定義smcavs.provider的值。內容是:
ustb.smcavs.task.core.TaskExecutionException: An error occurs while executing task :"T2476072[CreateTypeTask()]"
?at ustb.smcavs.task.core.BasicScheduler.doSchedule(BasicScheduler.java:112)
?at ustb.smcavs.task.core.BasicScheduler.schedule(BasicScheduler.java:47)
?at ustb.smcavs.adl.BasicFactory.newComponent(BasicFactory.java:161)
?at ustb.compbase.db.connection.HelloWorld.main(HelloWorld.java:35)
Caused by: ustb.smcavs.api.factory.InstantiationException: The smcavs.provider value is not defined
?at ustb.smcavs.util.Smcavs.getBootstrapComponent(Smcavs.java:93)
?at ustb.smcavs.adl.types.SmcavsTypeBuilder.createInterfaceType(SmcavsTypeBuilder.java:68)
?at ustb.smcavs.adl.types.TypeCompiler$CreateTypeTask.execute(TypeCompiler.java:138)
?at ustb.smcavs.task.core.BasicScheduler.doSchedule(BasicScheduler.java:110)
?... 3 more
Exception in thread "main" ustb.smcavs.adl.ADLException: Unable to execute some of the tasks
?at ustb.smcavs.adl.BasicFactory.newComponent(BasicFactory.java:164)
?at ustb.compbase.db.connection.HelloWorld.main(HelloWorld.java:35)
Caused by: ustb.smcavs.task.core.TaskExecutionException: An error occurs while executing task :"T2476072[CreateTypeTask()]"
?at ustb.smcavs.task.core.BasicScheduler.doSchedule(BasicScheduler.java:112)
?at ustb.smcavs.task.core.BasicScheduler.schedule(BasicScheduler.java:47)
?at ustb.smcavs.adl.BasicFactory.newComponent(BasicFactory.java:161)
?... 1 more
Caused by: ustb.smcavs.api.factory.InstantiationException: The smcavs.provider value is not defined
?at ustb.smcavs.util.Smcavs.getBootstrapComponent(Smcavs.java:93)
?at ustb.smcavs.adl.types.SmcavsTypeBuilder.createInterfaceType(SmcavsTypeBuilder.java:68)
?at ustb.smcavs.adl.types.TypeCompiler$CreateTypeTask.execute(TypeCompiler.java:138)
?at ustb.smcavs.task.core.BasicScheduler.doSchedule(BasicScheduler.java:110)
?... 3 more
問題原因:未定義java虛擬機的smcavs運行環境變量。
解決方案:在run configuration中的 arguments標簽中的vm auguments文本框內輸入:
-Dsmcavs.provider=ustb.smcavs.julia.Julia
點擊run,即可。
3. 構件的實現需要實現BindingController 接口,因為構件類型包含客戶端接口。
Exception in thread "main" ustb.smcavs.adl.ADLException: Unable to execute some of the tasks
?at ustb.smcavs.adl.BasicFactory.newComponent(BasicFactory.java:164)
?at ustb.compbase.db.operation.HelloWorld.main(HelloWorld.java:35)
Caused by: ustb.smcavs.task.core.TaskExecutionException: An error occurs while executing task :"T6510044[CreateTask(SelectOperation,primitive,ustb.compbase.db.operation.SelectOperation)]"
?at ustb.smcavs.task.core.BasicScheduler.doSchedule(BasicScheduler.java:112)
?at ustb.smcavs.task.core.BasicScheduler.schedule(BasicScheduler.java:47)
?at ustb.smcavs.adl.BasicFactory.newComponent(BasicFactory.java:161)
?... 1 more
Caused by: InstantiationException: The component implementation class 'ustb.compbase.db.operation.SelectOperation' must implement the BindingController interface, since the component type contains client interfaces
?at ustb.smcavs.julia.generated.C974eb5d4_0.checkFcContentClass(C974eb5d4_0.java:239)
?at ustb.smcavs.julia.generated.C974eb5d4_0.newFcInstance(C974eb5d4_0.java:67)
?at ustb.smcavs.julia.generated.C3bdbaf28_0.newFcInstance(C3bdbaf28_0.java:45)
?at ustb.smcavs.adl.implementations.SmcavsImplementationBuilder.createComponent(SmcavsImplementationBuilder.java:74)
?at ustb.smcavs.adl.implementations.ImplementationCompiler$CreateTask.execute(ImplementationCompiler.java:245)
?at ustb.smcavs.task.core.BasicScheduler.doSchedule(BasicScheduler.java:110)
?... 3 more
問題原因:構件調用了客戶端接口,但沒有實現BindingController接口
解決方案:在構件實現代碼中implements BindingController接口并實現其相應的方法。
4. 構件Explorer視圖中接口和構件的連接線錯位,致使看不清楚構件與接口的連接情況。
問題原因:視圖中接口的排列順序為字典順序,而構件的順序是按照描述文件中的順序。
解決方案:因為字典順序為系統平臺確定下來的,可以在構件描述文件中修改構件的順序,使之與接口的連接順序一致即可。
轉載于:https://www.cnblogs.com/destimarve/archive/2010/12/08/component_problems.html
總結
以上是生活随笔為你收集整理的构件开发常见问题和错误的解决方案和处理方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: css框架之960 Grid Syste
- 下一篇: WCF 第五章 行为 以属性为服务操作行