总结:可以看出AM偏向于事务控制。
1.可以共享的AM实例
使用JDeveloper的项目属性对话框.可以可视化地配置共享数据缓存(在JDeveloper上选择你的工程,双击就会打开项目属性对话框,选择Business Component-->Application Module instance,即可配置共享AM)。
可以选择在Application之间还是Session间共享AM实例。在Application之间共享意味着允许多个session的请求去共享同一个由AM 池管理生命周期的AM实例。Session间的共享是指一个用户在session内是同一个AM实例。
共享的AM的AppModuleNameShared 配置的下面两个属性将会被设置。
jbo.ampool.isuseexclusive=false
jbo.ampool.maxpoolsize=1
如果手动地改变了这两个值,那么在运行时将不会得到共享的AM实例。
2.AM与数据库连接
对于所有的AM而言,默认允许所有的根AM有它自己的数据库连接。如果你的应用定义了多个可分享的AM,你可以定义一个命名的事务给每个根AM来定制数据库连接。命名的事务是一个任意的字符,被定义为jbo.shared.txn值。在运行时拥有相同jbo.shared.txn值的AM将会共享相同的数据库连接实体缓存。
3.一个简单的测试用例测试AM的方法
public static void main(String[] args) { String amDef = "com.dana.services.am.common.EMailAM"; String config = "EmailAMLocal"; EMailAMImpl am = (EMailAMImpl)Configuration.createRootApplicationModule(amDef,config); am.sendEmailByRule(); Configuration.releaseRootApplicationModule(am, true); }
4.如何在AM中执行SQL语句
public Number getMaxAlarmId() { java.sql.Statement statement = this.getTransactionInternal().createStatement(ResultSet.TYPE_FORWARD_ONLY); String max = ""; try { statement.execute("select max(alarm_id)as max from mss_raw_alarm"); ResultSet resultSet = statement.getResultSet(); if (resultSet.next()) { max = resultSet.getString("max"); } resultSet.close(); statement.close(); } catch (SQLException e) { e.printStackTrace(); } if(max!=null&&!"".equals(max)) try { return new Number(max); } catch (SQLException e) { e.printStackTrace(); } return null; }
5.用AM生成异步的Web Service
默认情况下,AM将创建同步的web service方法,如果需要异步的web service需要在Service Interface 界面选择生成异步web service方法。
参见下图[img]
[/img]