我试图重构一个旧的应用程序,以使用EJB3和JPA.
我们有两个客户端层(一个基于servlet,一个不是),它们都调用委托层,该层调用EJB层,后者又调用DAO.EJB是EJB2(bean管理的持久性),DAO使用手动SQL查询,提交事务和手动关闭连接.
我想用EJB3替换EJB2,并将所有DAO更改为使用JPA.
我首先使用容器管理的事务用EJB3替换EJB2代码.由于hibernate Criteria非常简单,并且可以注入EntityManager,我可以这样做:
@Stateless
public class NewSelfcareBean implements SelfcareTcApi {
@PersistenceContext(unitName="core")
EntityManager em;
public BasicAccount getAccount(String id) {
Criteria crit = getCriteria(BasicAccount.class);
crit.add(Restrictions.eq("id", id));
BasicAccount acc = (BasicAccount) crit.uniqueResult();
}
}
Run Code Online (Sandbox Code Playgroud)
无需单独的DAO层.帐户对象看起来有点像这样:
@Entity
@Table(name="er_accounts")
public class BasicAccount {
@OneToMany( mappedBy="account", fetch=FetchType.LAZY)
protected List<Subscription> subscriptions;
}
Run Code Online (Sandbox Code Playgroud)
但是在我调用EJB来获取帐户对象的servlet层中,我想构建一个可能(或可能不)包含来自BasicAccount的子订阅的响应:
servlet层看起来像这样:
ResponseBuilder rb;
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
...
Account acc = getDelegateLayer().getAccount();
rb.buildSubscriptionResponse(acc.getSubscriptions());
...
}
Run Code Online (Sandbox Code Playgroud)
显然这不起作用,因为当我们返回到servlet层时,事务和实体管理器已经关闭 - 我得到一个LazyInitializationException.
所以我可以看到一些选择:
Hibernate.init(acc.getSubscriptions())- 这将工作,但需要在EJB中完成.假设我重新使用bean作为另一个不需要订阅的客户端方法?不必要的DB调用.我的Zookeeper客户端无法连接到Hadoop集群.
这可以从Linux VM中正常工作,但我使用的是Mac.
我-Dsun.security.krb5.debug=true在JVM上设置了标志并获得以下输出:
Found ticket for solr@DDA.MYCO.COM to go to krbtgt/DDA.MYCO.COM@DDA.MYCO.COM expiring on Sat Apr 29 03:15:04 BST 2017
Entered Krb5Context.initSecContext with state=STATE_NEW
Found ticket for solr@DDA.MYCO.COM to go to krbtgt/DDA.MYCO.COM@DDA.MYCO.COM expiring on Sat Apr 29 03:15:04 BST 2017
Service ticket not found in the subject
>>> Credentials acquireServiceCreds: same realm
Using builtin default etypes for default_tgs_enctypes
default etypes for default_tgs_enctypes: 17 16 23.
>>> CksumType: sun.security.krb5.internal.crypto.RsaMd5CksumType
>>> EType: sun.security.krb5.internal.crypto.Aes128CtsHmacSha1EType
>>> KrbKdcReq send: kdc=oc-10-252-132-139.nat-ucfc2z3b.usdv1.mycloud.com UDP:88, timeout=30000, number …Run Code Online (Sandbox Code Playgroud) 我们正在使用 apache beam 构建一个框架,并且有一些我们根本不需要的用例(例如后期数据)。然而,我们真正需要的是超快的性能。
我正在尝试修改 DirectRunner 使其速度更快。到目前为止,我已经注释掉了 Metrics 和 Enforcements,这使得性能有了小幅提升。我们还删除了 SynchronizedProcessingTimeOutputWatermark 和 SynchronizedProcessingTimeInputWatermark,而不影响我们的用例,这表明可能还有更多(水印?保留?)可以删除。
我意识到这是一个相当模糊的问题,但是我还能删除什么来使其更快?
我的应用程序有一个 SAM 模板。每次我使用新的 API Gateway 阶段名称部署我的 SAM 模板时,它都会替换之前创建的阶段。
所以,发现这篇文章可以帮助我发布指向不同 lambda 版本的不同版本。 https://aws.amazon.com/blogs/compute/using-api-gateway-stage-variables-to-manage-lambda-functions/
但是,为此,我必须在部署后手动更改 API 网关。那么,有什么办法可以使用 AWS SAM 做到这一点吗?
例如,请考虑以下 CloudFormation 模板摘录:
ProxyMethod:
Type: AWS::ApiGateway::Method
Properties:
HttpMethod: ANY
RestApiId: !Ref Api # AWS::ApiGateway::RestApi defined elsewhere
ResourceId: !Ref ProxyResource # AWS::ApiGateway::Resource defined elsewhere
AuthorizationType: NONE #auth is done at the public API layer
Integration:
# client request passed through as-is. "Lambda proxy integration"
Type: AWS_PROXY
Uri: !Join
- ''
- - 'arn:aws:apigateway:'
- !Sub ${AWS::Region}
- ':lambda:path/2015-03-31/functions/${!stageVariables.FunctionArn}/invocations'
IntegrationHttpMethod: ANY
PassthroughBehavior: WHEN_NO_MATCH
Run Code Online (Sandbox Code Playgroud)
这应该允许我使用在运行时确定的 …
amazon-web-services aws-cloudformation aws-lambda aws-api-gateway aws-sam
我正在将项目从jaxb 1.0迁移到2.1.当使用jaxb 2.1(通过ant xjc任务)从xsd生成类时,生成的类缺少没有任何内容的元素:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified">
....
<xs:element name="get-all-services-partners-request"/>
Run Code Online (Sandbox Code Playgroud)
但是,当元素具有内容时会生成文件,如下所示:
<xs:element name="catalog-full-service-request">
<xs:complexType>
<xs:sequence>
<xs:element name="service-id" type="xs:string" minOccurs="0"/>
<xs:element name="log-id" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Run Code Online (Sandbox Code Playgroud)
为什么会这样?前一组生成的类(使用jaxb 1.0)包含所有元素的类,而不仅仅是包含内容的类.
如何让jaxb生成这些缺失的类?我真的没有权利改变xsd(但如果真的有必要可以这样做).
我们有一些测试,我们从shell脚本运行.他们调用系统A,后者又调用系统B.因此,我们有3个独立的JVM.这些测试是完全自动化的,无需人工干预jenkins系统即可运行.
作为测试的一部分,我想拦截从A到B的调用,并检查有关内容的各种内容.呼叫仍然需要到达B,并且B的响应需要不加改变地返回到A.
系统A具有告诉它B在哪里的配置.它们都在我的本地机器上运行,所以显而易见的选择是在测试中启动一个http服务器(可能是jetty),配置A与我的临时服务器通信,然后当我运行我的测试时,服务器将看到所有流量从A发送到B.然后需要将这些请求传递给B,获取响应,并将该响应返回给A.单元测试然后需要将每个请求的内容看作String,并对其进行一些检查.
我过去使用码头做过类似的事情.我之前的存根解决方案做了一些非常相似的事情:但它不是代理调用另一个系统,而是简单地检查了请求并返回了一个虚拟响应.我们被限制使用jetty 6.1 - 使用另一个版本是可行的,但是PITA.
我认为码头可能是最好的解决方案.我可以通过扩展AbstractHandler,然后创建一个新的系统B的http调用来做到这一点.但它会有点混乱.这样做有简单,标准的方法吗?
我有一个检票口下拉菜单选项,当我选择某项时,我想更新表单中的某些组件。使用wicket(1.4)ajax可以正常工作。但是,它将更新包括dropdownchoice本身在内的整个表单。下拉列表中有很多项目(也许是2000年),因此从性能的角度来看并不是很好。
这是页面层次结构:
form (Form)
|----packageDDC (DropDownChoice)
|----pptview (RefreshingView)
|----buy (Button)
packageDDC.add(new AjaxFormComponentUpdatingBehavior("onchange") {
protected void onUpdate(AjaxRequestTarget target) {
//--snip-- update pricepoints which back up the pptview
target.addComponent(form); //ie the form
}
}
Run Code Online (Sandbox Code Playgroud)
在ajax调试窗口中,我可以看到每次都重新发送所有下拉选择选项
我想做的只是通过ajax更新pptview和Button,而不是dropdownchoice的内容。
我尝试将pptview添加到目标中,但是它抱怨RefreshgViews无法通过Ajax更新。我尝试用EnclosureContainer包装pptview,但是检票口也不喜欢(关于setRenderBodyOnly),所以我尝试使用WebMarkupContainer(称为“ pptcontainer”)并将pptview设置为该子视图-但是现在pptview不是更新。相反,它说(在Ajax调试中):
"ERROR: Wicket.Ajax.Call.processComponent: Component with id [[purchaseButton2f]] was not found while trying to perform markup update. Make sure you called component.setOutputMarkupId(true) on the component whose markup you are trying to update."
"ERROR: Wicket.Ajax.Call.processComponent: Component with id [[pptcontainer2e]] was not found while trying to perform markup …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Spring、hibernate/JPA 和 PostgreSQL 数据库来持久保存一个简单的类。
表的列ID是一个 UUID,我想在代码中生成它,而不是在数据库中。
这应该很简单,因为 hibernate 和 postgres 对 UUID 有很好的支持。
每次我创建一个新实例并使用 写入它时save(),都会收到以下错误:
o.h.j.JdbcSQLIntegrityConstraintViolationException: NULL not allowed for column "ID"; SQL statement: INSERT INTO DOODAHS (fieldA, fieldB) VALUES $1, $2) ...
Run Code Online (Sandbox Code Playgroud)
此错误表明它期望在插入行时自动填充 ID 列(使用某些默认值)。
该类看起来像这样:
@lombok.Data
@lombok.AllArgsConstructor
@org.springframework.data.relational.core.mapping.Table("doodahs")
public class Doodah {
@org.springframework.data.annotation.Id
@javax.persistence.GeneratedValue(generator = "UUID")
@org.hibernate.annotations.GenericGenerator(name="UUID", strategy = "uuid2")
@javax.persistence.Column(nullable = false, unique = true)
private UUID id;
//... other fields
Run Code Online (Sandbox Code Playgroud)
我尝试过的事情:
@javax.persistence.Id使用(除了现有的 spring Id 之外)注释该字段@org.hibernate.annotations.Type(type = …java ×4
hibernate ×2
ajax ×1
apache-beam ×1
aws-lambda ×1
aws-sam ×1
ejb ×1
gssapi ×1
hadoop ×1
jaxb ×1
jpa ×1
junit ×1
kerberos ×1
orm ×1
postgresql ×1
unit-testing ×1
uuid ×1
wicket ×1
xml ×1
xsd ×1