当前位置: 首页 > news >正文

专业搭建网站公司asp 网站

专业搭建网站公司,asp 网站,网站后台上传缩略图,做网站的得花多少钱XA事务非常有用#xff0c;而且开箱即用#xff0c;今天的Play 2.0不支持它们。 在这里#xff0c;我展示了如何添加该支持#xff1a; 首先#xff0c;介绍一些XA有用的示例#xff1a; –如果您使用来自两个不同persistence.xml的实体#xff0c;则JPA使用两个物理连… XA事务非常有用而且开箱即用今天的Play 2.0不支持它们。 在这里我展示了如何添加该支持 首先介绍一些XA有用的示例 –如果您使用来自两个不同persistence.xml的实体则JPA使用两个物理连接–这两个连接可能需要在一个事务中提交因此XA是您唯一的选择 –提交数据库更改同时向JMS提交消息。 例如您想保证在成功将订单异步提交到数据库后发送了一封电子邮件。 还有其他方法但是JMS提供了一种事务性的方法来完成此任务而不必考虑故障。 –由于多种政治原因遗留系统负责不同数据库服务器的不同部门/不同预算中的任何原因而写入物理上不同的数据库。 –请参阅http://docs.codehaus.org/display/BTM/FAQ#FAQ-WhywouldIneedatransactionmanager 因此从我的角度来看XA是Play需要“支持”的东西。 添加支持非常容易。 我创建了一个基于Bitronix的播放插件。 资源是在Bitronix JNDI树中配置的为什么Play会使用配置文件而不是JNDI 无论如何...您可以使用“ withXaTransaction”启动事务 def someControllerMethod Action {withXaTransaction { ctx TicketRepository.addValidation(user.get, bookingRef, ctx)ValidationRepository.addValidation(bookingRef, user.get, ctx)}val tickets TicketRepository.getByEventUid(eventUid)Ok(views.html.ticketsInEvent(eventUid, getTickets(eventUid), user, eventValidationForm))} ctx对象是XAContext我自己的类它使您可以查找资源如数据源或在发生故障时设置回滚。 因此验证存储库使用ScalaQuery我使用“ withSession”而不是“ withTransaction”来完成此操作 def addValidation(bookingRef: String, validator: User, ctx: XAContext) {val ds ctx.lookupDS(jdbc/maxant/scalabook_admin)Database.forDataSource(ds) withSession { implicit db: Session Validations.insert(Validation(bookingRef, validator.email, new java.sql.Timestamp(now)))}} 票务回购使用JMS执行以下操作 def addValidation(user: User, bookingRef: String, ctx: XAContext) {val xml {bookingRef}{user.email}val qcf ctx.lookupCF(jms/maxant/scalabook/ticketvalidations)val qc qcf.createConnection(ticketValidation,password)val qs qc.createSession(false, Session.AUTO_ACKNOWLEDGE)val q qs.createQueue(ticketValidationQueue) //val q ctx.lookup(QUEUE).asInstanceOf[Queue]val sender qs.createProducer(q)val m qs.createTextMessage(xml.toString)sender.send(m)sender.closeqs.closeqc.close} 我已经通过编写MySQL并将JMS消息发送给JBossHornetQ进行了测试它似乎运行良好除了让hornetQ与Bitronix一起玩是个bit子-参见此处 https //community.jboss.org/ 线程/ 206180tstart 0 。 XA支持的scala代码为 package ch.maxant.scalabook.play20.plugins.xasupportimport play.api.mvc.RequestHeader import play.api.mvc.Results import play.api.mvc.Request import play.api.mvc.AnyContent import play.api.mvc.Result import play.api.mvc.Action import play.api.mvc.Security import play.api._ import play.api.mvc._ import play.api.data._ import play.api.data.Forms._ import ch.maxant.scalabook.persistence.UserRepository import bitronix.tm.TransactionManagerServices import java.util.Hashtable import javax.naming.Context._ import javax.naming.InitialContext import javax.sql.DataSource import bitronix.tm.BitronixTransaction import java.io.File import org.scalaquery.session.Database import org.scalaquery.SQueryException import scala.collection.mutable.ListBuffer import java.sql.Connection import java.sql.SQLException import org.scalaquery.session.Session import bitronix.tm.BitronixTransactionManager import javax.jms.ConnectionFactoryclass XAContext {private val env new Hashtable[String, String]()env.put(INITIAL_CONTEXT_FACTORY, bitronix.tm.jndi.BitronixInitialContextFactory)private val namingCtx new InitialContext(env);var rollbackOnly falsedef lookup(name: String) {namingCtx.lookup(name)}def lookupDS(name: String) {lookup(name).asInstanceOf[DataSource]}def lookupCF(name: String) {lookup(name).asInstanceOf[ConnectionFactory]} }trait XASupport { self: Controller private lazy val tm play.api.Play.current.plugin[XASupportPlugin] match {case Some(plugin) plugin.tmcase None throw new Exception(There is no XASupport plugin registered. Make sure it is enabled. See play documentation. (Hint: add it to play.plugins))}/*** Use this flow control to make resources used inside f commit with the XA protocol.* Conditions: get resources like drivers or connection factories out of the context passed to f.* Connections are opened and closed as normal, for example by the withSession flow control offered * by ScalaQuery / SLICK.*/def withXaTransaction[T](f: XAContext T): T {tm.begin//get a ref to the transaction, in case when we want to commit we are no longer on the same thread and TLS has lost the TX.//we have no idea what happens inside f! they might spawn new threads or send work to akka asynclyval t tm.getCurrentTransactionLogger(XASupport).info(Started XA transaction t.getGtrid())val ctx new XAContext()var completed falsetry{val result f(ctx)completed trueif(!ctx.rollbackOnly){Logger(XASupport).info(committing t.getGtrid() ...)t.commitLogger(XASupport).info(committed t.getGtrid())}result}finally{if(!completed || ctx.rollbackOnly){//in case of exception, or in case of set rollbackOnly trueLogger(XASupport).warn(rolling back (completed completed /ctx.rollbackOnly ctx.rollbackOnly)t.rollback}}} }class XASupportPlugin(app: play.Application) extends Plugin {protected[plugins] var tm: BitronixTransactionManager nulloverride def onStart {//TODO how about getting config out of jar!val file new File(., app/bitronix-default-config.properties).getAbsolutePathLogger(XASupport).info(Using Bitronix config at file)val prop System.getProperty(bitronix.tm.configuration, file) //defaultSystem.setProperty(bitronix.tm.configuration, prop) //override with default, if not set//start the TMtm TransactionManagerServices.getTransactionManagerLogger(XASupport).info(Started TM with resource config TransactionManagerServices.getConfiguration.getResourceConfigurationFilename)}override def onStop {//on graceful shutdown, we want to shutdown the TM tooLogger(XASupport).info(Shutting down TM)tm.shutdownLogger(XASupport).info(TM shut down)}} 随便使用代码我免费提供它-)如果不起作用请不要抱怨;-) 看到此插件扩展并将其转换成更多生产版本真是太好了。 Play更好地原生支持事务管理器包括从JNDI中获取资源。 祝您编程愉快别忘了分享 参考来自Zoo博客The Kitchen的 JCG合作伙伴 Ant Kutschera的Play 2.0框架和XA事务 。 翻译自: https://www.javacodegeeks.com/2012/10/play-20-framework-and-xa-transactions.html
http://www.pierceye.com/news/64378/

相关文章:

  • 如何建个人网站sem和网站建设的关系
  • 台州网站制作公司哪家做网站做得好
  • 东莞建设网站企业沟通平台wordpress版权修改插件
  • 易语言做返利网站工艺品网站源码
  • 嘉兴建设教育网站培训中心网站网站建设分为多少模块
  • 湛江做网站软件做两个单页面网站大概多少钱
  • 网站建设问题大全成都专业网站设计公司
  • 阿里云做的网站这么卡的长沙网络营销咨询费用
  • 安庆 做网站网站建设哈尔滨app开发2
  • 做拍卖网站有哪些做外国网用哪些网站
  • 济南环保行业网站开发网站搜索优化
  • 做进口货的电商网站你知道的在线视频观看的
  • 企业网站模板大全长春定制建站企业网站
  • 营口房地产网站开发十大旅游网站排名
  • 网站开发项目需求方案华为用了哪些网络营销方式
  • 可以通过哪些网站注册域名网站 商城 app 建设
  • 系统网站怎么做的建设工程合同包括
  • 安丘做网站雨云服务器
  • 网站如何做提现功能wordpress 给标签加id
  • 南京网站策划公司专业网站优化电话
  • 南京高端网站设计网页传奇单职业
  • 如何建设个人网站宣传片制作公司营业范围要求
  • 怎么做网站推广实际效果好无锡网站建设无锡速联科技
  • 厦门做网站 厦门专业做网站的公司 我想做网站58同城网招聘招聘
  • 网站建设开发服务费怎么做分录如何去注册一个公司
  • 沈阳网站优化培训潍坊企业网站模板
  • 使页面具有动态效果的网站建设技术是12306网站如何做火车票候补
  • 宁夏网站建设联系电话网站标题更改后要多久才能收录
  • 外贸英文网站建设价格中国培训网是国家公认的吗
  • 本科学院网站建设方案龙海市邦策网站建设平台