使用JPA,DDL生成属性:
@Column
final String someString;
Run Code Online (Sandbox Code Playgroud)
将会 someString varchar(255) null
@Column(length = 1337)
final String someString;
Run Code Online (Sandbox Code Playgroud)
会屈服someString varchar(1337) null.
但我怎样才能让它产生someString varchar(max) null呢?
是否可以使用length-attribute,还是需要使用columnDefinition-attribute?
我正在尝试发布mvn,但由于git问题而失败.在没有这个问题之前我已经多次这样做了,我真的不明白为什么/如何发生这种情况.
我首先得到它做mvn release:prepare,但通过将下面显示的最后一行添加到我的root-pom来解决它:
<artifactId>maven-release-plugin</artifactId>
<configuration>
<preparationGoals>clean install</preparationGoals>
<pushChanges>false</pushChanges>
Run Code Online (Sandbox Code Playgroud)
但是现在,当我尝试执行mvn release:perform时,我再次收到错误消息:
[INFO] Executing: cmd.exe /X /C "git clone file://C\Users\torbjornk\nfr\MyProject/ C:\Users\torbjornk\nfr\MyProject\target\checkout"
[INFO] Working directory: C:\Users\torbjornk\nfr\MyProject\target
[ERROR] The git-clone command failed.
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Unable to checkout from SCM
Provider message:
The git-clone command failed.
Command output:
fatal: 'C:/Program Files (x86)/Git' does not appear to be a git repository
fatal: The remote end hung up unexpectedly
Run Code Online (Sandbox Code Playgroud)
我不知道我的git-installation-folder应该是一个git存储库!在错误发生之前记录的git clone-command也不包含对此文件夹的引用.
在我工作的地方,我们遇到了JVM在我们的一个应用程序中耗尽堆空间的问题.我已经做了一些搜索导致这种情况的原因,包括使用分析器查看堆转储,但现在我几乎陷入困境.
首先,关于有问题的系统:它是一个使用Spring和Hibernate的Java应用程序来保存有关组织的记录.该系统由一组Web服务客户端组成,用于从负责此类数据的政府机构中检索有关组织的数据.此外,系统使用此类数据保留本地数据库,充当Web服务调用的缓存,以便第一次请求有关组织的信息,将其保存在本地关系数据库中,并将其用于检索以下请求的数据.Hibernate用于与此数据库通信.
如前所述,问题是在一段时间后,应用程序开始与OutOfMemoryError崩溃:java堆空间.我已经使用Eclipse + MAT查看了堆转储,并将罪魁祸首确定为Hibernate SessionFactoryObjectFactory,占用了大约85%的已分配内存(所有内存都保留了内存).我发现确切地确定在其中保留了什么类型的对象有点困难.在顶层有Glassfish WebappClassLoader,其中包含org.hibernate.impl.SessionFactoryObjectFactory.包含在这是一个org.hibernate.util.FastHashMap,其中包含一个java.util.HashMap.它包含许多条目,每个条目包含一个HashMap条目,一个org.hibernate.impl.SessionFactoryImpl和一个String.HashMap-entry依次包含相同的三个对象,一个HashMap-entry,一个SessionFactoryImpl和一个String,这个结构重复了很多次.该SessionFactoryImpls包含多个对象,最显着的org.hibernate.persister.entity.SingleTableEntityPersister,里面包含了一些字符串和HashMaps这样的.一些字符串引用域对象中的变量,一些字符串包含sql语句.
乍一看,这个对象占用了不必要的内存量(转储文件是800MB,其中650MB被占用SessionFactoryObjectFactory),所以我启用了对象加载和卸载的日志记录,并尝试向系统询问有关的数据.组织(通过来自其他系统的Web服务调用).我在这里注意到的是,有很多用于加载对象的消息,但很少有关于卸载对象的消息(唯一有卸载对象的对象).这让我相信,一旦一个对象(比如一个组织)被加载到内存中,它就永远不会被卸载,这意味着随着时间的推移,系统将耗尽内存.(这是基于日志中发现的内容的公平假设吗?)
然后,我试着找到原因,但这要困难得多.作为由Hibernate加载的对象将生活,只要他们的会话的生活,我试图改变会议分别处理的方式,通过更换调用Spring的HibernateDaoSupport#getSession(),对HibernateDaoSupport#getSessionFactory().getCurrentSession().这对问题没有任何影响.我也尝试添加对...的调用getCurrentSession().flush()以及.clear()一些Dao方法的finally块,也没有任何附加效果.(Dao方法都注释了@Transactional,这应该意味着会话应该只在@Transactional-method中存活,并且对方法的连续调用应该在调用getCurrentSession()(?)时获得不同的会话)
所以,现在我在提出其他领域进行检查时几乎陷入困境.有没有人有一个想法或一些关于在哪里寻找和寻找什么的指针?
堆转储显示有很多实例org.hibernate.impl.SessionFactoryImpl,这是否符合预期?(我原本以为应该只有一个SessionFactory实例,或者几个tops.)
编辑:
我想我实际上已经解决了这个问题:
事实证明,在webservice-classes中处理对其他对象的依赖是一个问题.这是通过ClassPathXmlApplicationContext(...)在webservice类的构造函数中调用new来解决的.这导致为每个请求(或至少每个会话)加载了很多对象,这些对象没有再次卸载(主要是Hibernate SessionFactoryImpl).我已经改变了webservice-classes,所以他们注入了他们的依赖,并形成了我迄今为止使用的探查器,多个SessionFactoryImpl对象的问题已经解决了.
我认为从GlassFish 2.x升级到GlassFish 3.x可能会使问题恶化,可能在如何实例化webservice-classes方面存在一些差异.
我正在使用一个使用Spring MVC的Web应用程序.
它在Glassfish 3.0.1上运行良好,但是当迁移到Glassfish 3.1时,它开始表现得很奇怪.有些页面只是部分显示,或者根本没有显示任何内容,并且在日志中有很多此类消息:
[#|2012-08-30T11:50:17.582+0200|WARNING|glassfish3.1|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=69;_ThreadName=Thread-1;|StandardWrapperValve[SpringServlet]: PWC1406: Servlet.service() for servlet SpringServlet threw exception
org.springframework.beans.NotReadablePropertyException: Invalid property 'something' of bean class [com.something.Something]: Bean property 'something' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?
at org.springframework.beans.BeanWrapperImpl.getPropertyValue(BeanWrapperImpl.java:729)
at org.springframework.beans.BeanWrapperImpl.getNestedBeanWrapper(BeanWrapperImpl.java:576)
at org.springframework.beans.BeanWrapperImpl.getBeanWrapperForPropertyPath(BeanWrapperImpl.java:553)
at org.springframework.beans.BeanWrapperImpl.getPropertyValue(BeanWrapperImpl.java:719)
at org.springframework.validation.AbstractPropertyBindingResult.getActualFieldValue(AbstractPropertyBindingResult.java:99)
at org.springframework.validation.AbstractBindingResult.getFieldValue(AbstractBindingResult.java:226)
at org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:120)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getBindStatus(AbstractDataBoundFormElementTag.java:178)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getPropertyPath(AbstractDataBoundFormElementTag.java:198)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.getName(AbstractDataBoundFormElementTag.java:164)
at org.springframework.web.servlet.tags.form.AbstractDataBoundFormElementTag.writeDefaultAttributes(AbstractDataBoundFormElementTag.java:127)
at org.springframework.web.servlet.tags.form.AbstractHtmlElementTag.writeDefaultAttributes(AbstractHtmlElementTag.java:421)
at org.springframework.web.servlet.tags.form.TextareaTag.writeTagContent(TextareaTag.java:95)
at org.springframework.web.servlet.tags.form.AbstractFormTag.doStartTagInternal(AbstractFormTag.java:102)
at org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:79)
Run Code Online (Sandbox Code Playgroud)
错误消息不正确,因为有问题的属性没有setter-method(通过构造函数获取其值).但就像我说的那样,使用Glassfish 3.0.1时,只有在使用Glassfish 3.1的新服务器上使用它时才会出现问题. …
我遇到了Hibernate和合并的奇怪问题.
有问题的类的结构如下:
Project --> CaseWorkerA --|> CaseWorker --|> User
Run Code Online (Sandbox Code Playgroud)
所以基本上我有一个Project类,它包含对CaseWorkerA的引用,CaseWorkerA是CaseWorker的子类,它也是User的子类.
在代码中:
public class Project {
[...]
private CaseWorkerA caseWorkerA;
@ManyToOne(fetch = FetchType.EAGER)
@Cascade({ org.hibernate.annotations.CascadeType.SAVE_UPDATE, org.hibernate.annotations.CascadeType.PERSIST,
org.hibernate.annotations.CascadeType.REFRESH, org.hibernate.annotations.CascadeType.MERGE })
@JoinColumn(name = "CaseWorker_A")
public CaseWorkerA getCaseWorkerA() {
return caseWorkerA;
}
}
Run Code Online (Sandbox Code Playgroud)
然后我们有User-hierarchy:
public class User {
[...]
}
public class CaseWorker extends User {
private CaseWorkerStatus status;
@Enumerated(EnumType.STRING)
public CaseWorkerStatus getStatus() {
return status;
}
[...]
}
public class CaseWorkerA extends CaseWorker {
[...]
}
Run Code Online (Sandbox Code Playgroud)
然后,在Dao类中有一个方法用于存储项目:
public class ProjectDao {
[...]
public …Run Code Online (Sandbox Code Playgroud) 我需要使用mockito和powermock来模拟一个不使用参数的私有void方法.
该方法属于间谍的实例.
我知道我需要这样做的事实表明代码不好但我正在使用一个旧项目将单元测试从一个测试框架转换到另一个测试框架.
如果有人有任何建议,将不胜感激.
谢谢!
到目前为止,我试过这个:
PowerMockito.doNothing().when(Whitebox.invokeMethod(spy,"method",null));
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
No method found with name 'method' with parameter types: [ <none> ]
Run Code Online (Sandbox Code Playgroud) 我有一个REST服务,它接受了许多查询参数,其中包括字符串列表.我使用RestAssured来测试这个REST服务,但是我遇到了将列表传递给服务的一些问题.
我的REST服务:
@GET
@Consumes(Mediatyper.JSON_UTF8)
@Produces(Mediatyper.JSON_UTF8)
public AggregerteDataDTO doSearch(@QueryParam("param1") final String param1,
@QueryParam("param2") final String param2,
@QueryParam("list") final List<String> list) {
Run Code Online (Sandbox Code Playgroud)
我的RestAssured测试:
public void someTest() {
final String url = BASE_URL + "/search?param1=2014¶m2=something&list=item1&list=item2";
final String json = given()
.expect()
.statusCode(200)
.when()
.get(url)
.asString();
Run Code Online (Sandbox Code Playgroud)
当我打印网址时,它看起来像这样:
HTTP://本地主机:9191 /应用/ REST /搜索参数1 = 2014&参数2 =东西与列表= ITEM1和列表= ITEM2
当我在浏览器中尝试此URL时,REST服务正确获取包含2个元素的列表.但是,当我通过我的RestAssured-test运行时,只会注意到后者的params,给我一个1元素的列表(包含"item2").
我正在使用Guava Ordering,以便根据与实体对应的id列表的顺序对实体列表进行排序.在某些情况下,两个列表之间存在不匹配(id来自Web GUI,而来自数据库的实体),因为多个用户可以操纵相同的enitity.
在这些情况下,Ordering抛出一个IncomparableValueException.我想捕获此异常,以便向用户显示提供信息的错误消息.但是,我无法,因为例外是包本地的,而不是公共的.这导致异常处理代码比它应该更麻烦(我必须捕获ClassCastException而不是..)
为什么这个例外首先不公开?由于它被抛出Guava框架,我希望能够抓住它.
可能还会在我的原始版本(13.0.2)中添加,例外有javadoc +一个TODO说"make public and document",在最新版本(18.0)中,javadoc和TODO都消失了,异常仍然是包-本地.
我做了一个 Spring Boot 测试来测试 JMS 的消耗。
测试看起来像这样:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD)
public class UpdateThingByJmsIntegrationTest {
@Test
@Rollback(false)
public void updateThingByJmsUpdatesDatabase() throws InterruptedException {
final Thing thing = new ThingBuilder().withId(null).build();
final TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);
transactionTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
transactionTemplate.execute(transactionStatus -> {
thingRepository.save(thing);
return thing;
});
final String xml = String.format(
"<thingDto><id>%s</id><name>something else</name><location>somewhere</location></thingDto>",
thing.getId());
jmsMessagingTemplate.convertAndSend(thingUpdateQueue, xml);
Thread.sleep(1500L);
final Thing updatedThing = thingRepository.getOne(thing.getId());
assertNotNull(updatedThing);
assertEquals("something else", updatedThing.getName());
assertEquals("somewhere", updatedThing.getLocation());
}
Run Code Online (Sandbox Code Playgroud)
Thing因此,我在数据库中保存一个,然后发送一条 JMS 消息来更新Thing. 由于 JMS 消耗发生在与测试本身不同的线程中,因此我等待,然后尝试验证是否Thing已更新。 …
我有一个项目,其中3个war-modules包装在耳模块中.我的问题是每个库模块都包含在每个war-modules中,以及ear-module中,这使得生成的ear-file非常大(目前大约190MB).
我遵循了关于使用maven制作瘦小战争的教程:http://maven.apache.org/plugins/maven-war-plugin/examples/skinny-wars.html
有了这个,我设法将耳朵的大小降低到45MB左右,这很好,但是当我试图部署到glassfish时,它抱怨了一些错过的课程.
我发现这是因为对appfuse-struts的依赖,它被打包为war-file.这包括在其中一个战争项目中使用战争依赖性.
由于制作瘦战争的教程表明,战争中发现的所有依赖关系也必须在耳边定义.我试过这个,但appfuse-struts依赖是一个warpath使得这不起作用.(当只向war pom添加war依赖时,它会抱怨它找不到某些类,并且在添加warpath依赖时,maven也会抱怨它不知道warpath是什么.)
当战争使用warpath依赖时,有没有人知道用瘦小的战争制造耳朵的方法?
java ×7
hibernate ×3
maven ×3
appfuse ×1
ddl ×1
ear ×1
git ×1
glassfish ×1
guava ×1
inheritance ×1
jersey ×1
jpa ×1
memory-leaks ×1
mockito ×1
powermock ×1
rest ×1
rest-assured ×1
skinny-war ×1
spring-boot ×1
spring-mvc ×1
sql-server ×1
unit-testing ×1
war ×1