当前位置:主页 > 云服务器 > 正文

谷歌云_域名解析错误上不了网_三重好礼

时间:2021-07-13 13:29 来源:埃里克云 编辑:埃里克云

核心提示

本文是三个系列教程中的第二篇,涵盖以下主题: REST服务在过去几年中已成为web应用程序中服务间通信的事实标准。OData协议以一种标准的方式简化了RESTful API的提供和使用,例如可...

谷歌云_域名解析错误上不了网_三重好礼

本文是三个系列教程中的第二篇,涵盖以下主题:

REST服务在过去几年中已成为web应用程序中服务间通信的事实标准。OData协议以一种标准的方式简化了RESTful API的提供和使用,例如可以用于向SAPUI5前端应用程序提供来自服务器端后端的业务数据,通常来自数据库。

SAPUI5与OData服务很好地集成,因为OData服务提供的实体可以绑定到UI元素,因此SAPUI5框架负责实现类似CRUD的操作,前端开发人员不需要为使用业务数据服务添加任何样板代码。在服务器端,在大多数场景中,将业务实体(例如关系DBMS中的表)映射到OData实体并将其公开为OData实体(实际上是REST端点)就足够了。对于基于Java的后端应用程序,数据通常存储在关系数据库中,并映射到应用程序代码中的JPA实体。

在本教程中,我们将演示如何将JPA实体作为OData web服务中的OData实体公开,以供SAPUI5前端应用程序使用。在JPA2的情况下,这可以用最少的样板代码来完成,正如我们将要展示的那样。

我们假设您正在为SAP NetWeaver as开发JEE应用程序,并且已经采取了必要的步骤来部署JPA2应用程序(例如,通过遵循我们的教程)。这意味着您使用的是SAP NetWeaver AS Java 7.5 SP03或更新版本!

我们将使用ApacheOlingo框架实现OData服务,特别是ApacheOlingo的2.0.8版本。请注意,sapnetweaver7.5是一个JEE5应用服务器,这意味着它不提供JAX-RS实现。因此,我们必须提供自己的JAX-RS实现。我们决定使用apachecxf,但是如果您愿意,可以使用不同的实现,比如RESTEasy。在我们的场景中,需要以下工件:

commons-codec-1.6.jarcxf-api-2.7.6.jar文件cxf-rt-bindings-xml-2.7.6.jarcxf-rt-core-2.7.6.jarcxf-rt-frontend-jaxrs-2.7.6.jarcxf-rt-transports-http-2.7.6.jargeronimo-javamail_1.4_spec-1.7.1.jargson-2.4.jar文件javax.ws.rs文件-api-2.0-m10.jar标准jaxb-impl-2.1.13.jarolingo-odata2-annotation-processor-api-2.0.8.jarolingo-odata2-annotation-processor-core-2.0.8.jarolingo-odata2-api-2.0.8.jarolingo-odata2-api-annotation-2.0.8.jarolingo-odata2-core-2.0.8.jarolingo-odata2-jpa-processor-api-2.0.8.jarolingo-odata2-jpa-processor-core-2.0.8.jarstax2-api-3.1.1.jar文件woodstox-core-asl-4.2.0.jarwsdl4j-1.6.3.jar文件xmlschema-core-2.0.3.jar

将所有工件捆绑在一个外部库"olingo/lib"DC中,并将api和存档公开为DC的公共部分。

创建一个带有EAR、EJB和WEB DC的JPA2 JEE应用程序,并使它们都依赖于您的WEB-DC中的"olingo/lib"DC。

,编辑网站.xml文件包含以下内容:

我们在这里做了两件事:

我们引入了一个ODataClassloaderFilter,它过滤到OData端点的所有请求。这也是避免运行时类加载问题所必需的。过滤器本身只是再次设置ODataServiceFactory,我们将很快看到:公共类ODataFilter扩展了筛选器{@覆盖public void init(FilterConfig FilterConfig)抛出ServletException{}@覆盖public void destroy(){}@覆盖public void doFilter(ServletRequest请求、ServletResponse响应、FilterChain链)抛出IOException、ServletException{请求.setAttribute(ODataServiceFactory.FACTORY\u CLASSLOADER\u标签,ODataServiceFactory.class.getClassLoader());链.doFilter(请求、响应);}}在ODataServiceFactory中,我们使用与JPA相关的对象(如EntityManager)初始化Olingo框架。公共类ODataServiceFactory扩展了ODataJPAServiceFactory{private static final String PERSISTENCE\u UNIT\u;专用静态最终位置记录器=Location.getLocation位置(ODataServiceFactory.class类);private static final String USER\u TRANSACTION\u JNDI\u;私有实体管理服务实体管理服务;公共ProcessODataServiceFactory(){EntityManager服务=ServiceLocator.getServiceInstance(EntityManagerService.class类, EarDc.ODATA\u耳,EjbDc.ODATA\u EJB文件);}受保护的EntityManager getEntityManager(){返回EntityManager服务。getProcessEntityManager();}受保护的字符串getPersistenceUnitName(){返回单位名称;}@覆盖public ODataJPAContext initializeODataJPAContext()引发ODataJPARuntimeException{初始上下文初始上下文;试试看{initialContext=新建initialContext();ODataJPAContext ODataJPAContext=getODataJPAContext();oDataJPAContext.setEntityManager文件(getEntityManager());oDataJPAContext.setPersistenceUnitName(getPersistenceUnitName());oDataJPAContext.setContainerManaged文件(正确);oDataJPAContext.getODataContext().setDebugMode(true);final UserTransaction UserTransaction=(UserTransaction)initialContext.lookup文件(用户\事务\ JNDI \名称);setODataJPATransaction(新的ODataJPATransaction(){@覆盖public void rollback(){试试看{用户事务.回滚();}捕获(IllegalStateException | SecurityException | SystemException e){记录器.error("回滚问题:"+ExceptionUtils.getStackTrace异常(e) );抛出新的OdataJpaException("回滚期间出错。");}}@覆盖public boolean isActive(){试试看{返回userTransaction.getStatus() == Status.Status\u活动;}catch(系统异常e){记录器.error("isActive有问题:"+ExceptionUtils.getStackTrace异常(e) );返回false;}}@覆盖public void commit(){试试看{用户事务.commit();}catch(SecurityException | IllegalStateException | RollbackException | HeuristicMixedException)|启发式回滚异常|系统异常(e){记录器.error("提交问题:"+ExceptionUtils.getStackTrace异常(e) );抛出新的OdataJpaException("提交期间出错。");}}@覆盖public void begin(){试试看{userTransaction.begin开始();}catch(不支持异常|系统异常e){记录器.error("begin有问题:"+ExceptionUtils.getStackTrace异常(e) );抛出新的OdataJpaException("Error beging transaction.");}}});返回oDataJPAContext;}捕获(NamingE){投掷奥达aJPARuntimeException.throweException异常(奥达)aJPARuntimeException.ENTITY\u MANAGER\u未初始化,e);}}@SuppressWarnings("未选中")@覆盖publicT getCallback(类callbackInterface){如果(callbackInterface.isAssignableFrom(ODataErrorCallback.class类)) {return(T)new CustomErrorCallback();}T回调=超级.getCallback(回调接口);返回回调;}}

  • <strong>数据库_太原网站建设公司_高性价比</strong> 数据库_太原网站建设公司_高性价比

    解决上述问题,请遵循以下步骤: 2。在Fiori-BI启动板中设置验证选项卡和CMS可见: 1。\SAP BusinessObjects Enterprise XI4.0\warfiles\webapps\BOE\WEB-INF\config\custom\ 如果您使用的是BI平台安装的Tomc...

  • <strong>京东云_企业邮箱排名_年度促销</strong> 京东云_企业邮箱排名_年度促销

    场景:在这个场景中,我将解释如何使用计算视图中的计算列来计算学生平均分。 计算视图用于组合其他分析视图、属性视图和其他计算视图以及基本列表。它们用于执行复杂的计算...

  • <strong>对象存储_长沙网站建设公司_9元</strong> 对象存储_长沙网站建设公司_9元

    在特拉华的最后几天,我们正在研究物联网方面的创新。除此之外,我们还创建了一些智能数据流,并在designstudio中使用它们。现在为了创建一些真实的演示,我们需要一个物联网模...

  • <strong>香港带宽_oa系统数据库设计_免费申请</strong> 香港带宽_oa系统数据库设计_免费申请

    This blog is the part 2 of the 5-part blog-series. In this blog, we will introduce OData Interfaces which are exposed from SAP Process Orchestration (from 7.40 onwards) (SAP PO) can be exposed as Open APIs and managed through SAP API Man...

  • <strong>全站加速_企业邮箱用哪家的好_测评</strong> 全站加速_企业邮箱用哪家的好_测评

    亲爱的合作伙伴 由SAP主题专家主持的Enablement Insights网络研讨会每月在我们的各个合作伙伴协作室举行一次。这些会议室使您能够轻松地与同事协作、分享知识并提高知识的趣味性,以...

  • <strong>域名注册_关系数据库是以_优惠</strong> 域名注册_关系数据库是以_优惠

    最近我们在结算WBS元素时遇到了两个错误。我们使用WBS元素来记录成本,然后先将其结算给AuC,然后再将其结算给主要资产。 我们在2017财年,我们的关闭资产年度是2015年,这意味着...

  • <strong>天翼云_常用数据库管理系统_免费6个月</strong> 天翼云_常用数据库管理系统_免费6个月

    达芬奇可能是指数思维的最早采用者之一。 达芬奇500多年前出生在半农村的托斯卡纳,父母收入微薄。尽管他很少接受正规教育,但他能够推断出有关建筑学、工程学、数学、城市规...

  • <strong>金山云_白雪公主百度云_优惠</strong> 金山云_白雪公主百度云_优惠

    在本系列的第一篇博客中,我讨论了什么是保证交付,它是如何工作的,以及为什么您应该将它用于流项目和适配器。如果您错过了它,您可以阅读这里的介绍。 现在,在第二部分中...

  • <strong>美国服务器_分布式数据库有哪些_免费申</strong> 美国服务器_分布式数据库有哪些_免费申

    美国作家、未来主义者阿尔文·托夫勒(Alvin Toffler)通常被引用为这句名言的创始者:"21世纪的文盲将不是那些不会读和写的人,而是那些不会学习、忘却和重新学习的人。"然而,托...