我尝试查找可以在更改日志文件中使用的受支持类型的文档.但找不到它.是否有任何文档,网站或类似的东西,我可以找到所有类型的具体问题.例如,具有不同类型的数据库支持clob类型.我必须使用类似的东西:
<property name="clob.type" value="clob" dbms="oracle,h2,hsqldb"/>
<property name="clob.type" value="longtext" dbms="mysql"/>
<column name="clob1" type="${clob.type}">
<constraints nullable="true"/>
</column>
Run Code Online (Sandbox Code Playgroud)
我希望有一个资源可以描述所有liquibase类型.
class WithPrivateFinalField {
private final String s = "I’m totally safe";
public String toString() {
return "s = " + s;
}
}
WithPrivateFinalField pf = new WithPrivateFinalField();
System.out.println(pf);
Field f = pf.getClass().getDeclaredField("s");
f.setAccessible(true);
System.out.println("f.get(pf): " + f.get(pf));
f.set(pf, "No, you’re not!");
System.out.println(pf);
System.out.println(f.get(pf));
Run Code Online (Sandbox Code Playgroud)
输出:
s = I’m totally safe
f.get(pf): I’m totally safe
s = I’m totally safe
No, you’re not!
Run Code Online (Sandbox Code Playgroud)
为什么它以这种方式工作,你能解释一下吗?第一个印刷品告诉我们私人"s"字段没有像我期望的那样被改变.但是如果我们通过反射获得该字段,则第二个打印显示,它会更新.
我正在构建一个REST API.我的问题是,在使用Jersey时,我的服务构建和返回Response对象或返回bean或集合之间有什么区别.我只关心成功的电话,我正在为错误和特殊情况抛出适当的例外.
这是一个例子:
@Produces(MediaType.APPLICATION_JSON)
public Response search(FooBean foo){
List<FooBean> results = bar.search(foo);
return Response.ok(results).build();
}
Run Code Online (Sandbox Code Playgroud)
与
@Produces(MediaType.APPLICATION_JSON)
public List<FooBean> search(FooBean foo){
List<FooBean> results = bar.search(foo);
return results;
}
Run Code Online (Sandbox Code Playgroud)
我已经看过两个例子,我更喜欢第二种情况,只是为了更容易识别服务方法.我已经检查了对这两种方法的反应,看起来它们是相同的.
思考?
像往常一样,Java枚举类型具有相应的代码和名称描述.包含此类字段的Java类将它们包含为Enum:
public enum MyEnum{
SOMEINSTANCE(1, "test1"),
SOMEINSTANCE(2, "test2");
private final int code;
private final String name;
private MyEnum(int code, String name){
this.code = code;
this.name = name;
}
... helper getter for code and name
}
@Entity
puclic class EnumHolder{
private MyEnum myEnum;
}
Run Code Online (Sandbox Code Playgroud)
我是JPA的新手,但我希望有' myEnums'表,看起来像:
code int not null, name varchar(50) not null)
Run Code Online (Sandbox Code Playgroud)
在我的enumHolder表中,我希望有一个myEnumCode指向myEnums表的字段.
使用currenlty支持EnumType.ORDINAL和EnumType.STRING我认为不是一个好主意.
另一个问题.如何myEnums使用Java MyEnum类数据填写表格?你会怎么做?请最好的方法.
PS:这是我能提供的解决方案:
让我们假设有表myEnum与code和名称fields.Java MyEnum枚举,在问题中描述.enumHolder表需要myEnumCode引用 …
我有一个测试:
@Rule
public ExpectedException thrown = ExpectedException.none();
...
@Test
public void testMethod()
{
final String error = "error message";
Throwable expectedCause = new IllegalStateException(error);
thrown.expectCause(org.hamcrest.Matchers.<Throwable>equalTo(expectedCause));
someServiceThatTrowsException.foo();
}
Run Code Online (Sandbox Code Playgroud)
当通过mvn运行测试方法时,我收到错误:
java.lang.NoSuchMethodError:org.junit.rules.ExpectedException.expectCause(Lorg/hamcrest/Matcher;)V
测试编译好.
请帮帮我,无法理解如何测试异常的原因?
根据文件,
"客户端是管理客户端通信基础设施的重量级对象.初始化以及客户端实例的处理可能是一项相当昂贵的操作.因此建议在应用程序中仅构建少量客户端实例."
好吧,我正在尝试将Client本身和WebTarget实例缓存在一个静态变量中,someMethod()在多线程环境中调用:
private static Client client = ClientBuilder.newClient();
private static WebTarget webTarget = client.target("someBaseUrl");
...
public static String someMethod(String arg1, String arg2)
{
WebTarget target = entrTarget.queryParam("arg1", arg1).queryParam("arg2", arg2);
Response response = target.request().get();
final String result = response.readEntity(String.class);
response.close();
return result;
}
Run Code Online (Sandbox Code Playgroud)
但有时(并非总是)我得到一个例外:
BasicClientConnManager的使用无效:仍然分配了连接.确保在分配另一个连接之前释放连接.
如何正确地重用/缓存Client/WebTarget?是否可以使用JAX RS Client API?或者我必须使用一些特定于框架的功能(resteasy/jersey)你能提供一些示例或文档吗?
我使用以下beean在spring上下文中更新方案和初始数据:
<bean id="liquibase" class="liquibase.integration.spring.SpringLiquibase">
<property name="dataSource" ref="dataSource" />
<property name="changeLog" value="classpath:db/changelog/db.changelog-master.xml" />
<property name="dropFirst" value="true" />
</bean>
Run Code Online (Sandbox Code Playgroud)
我还使用Maven liquibase插件生成sql脚本,以便查看创建了哪些表等.
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>2.0.5</version>
<configuration>
<!--mvn initialize liquibase:updateSQL-->
<propertyFile>src/main/resources/db/config/liquibase-gensql-data-access.properties</propertyFile>
<changeLogFile>src/main/resources/db/changelog/db.changelog-master.xml</changeLogFile>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
该db.changelog-master.xml文件包含子liquibase changelog文件.问题是,如何从主人那里引用它们.当我使用Spring时,我必须通过classpath使用以下路径:
<include file="classpath:/db/changelog/db.changelog-1.0.xml"/>
Run Code Online (Sandbox Code Playgroud)
使用Maven时,路径是:
<include file="src/main/resources/db/changelog/db.changelog-1.0.xml"/>
Run Code Online (Sandbox Code Playgroud)
我想对两种情况都有相同的配置.我该如何存档?
弹簧配置文件的示例:
<bean id="jpaDialect" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory"ref="entityManagerFactory"/>
<property name="jpaDialect"ref="jpaDialect"/>
</bean>
<bean id="emf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
</property>
....
</bean>
Run Code Online (Sandbox Code Playgroud)
和persistence.xml jpa文件:
<persistence-unit name="EmployeeService">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
</persistence-unit>
Run Code Online (Sandbox Code Playgroud)
如您所见,jpa提供程序相关信息设置为3次.在事务管理器bean,实体管理器工厂bean和持久性单元配置中:
<property name="jpaDialect"ref="jpaDialect"/>
...
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
</property>
...
<provider>org.hibernate.ejb.HibernatePersistence</provider>
Run Code Online (Sandbox Code Playgroud)
但实际上在我的项目中,我只使用提供程序配置了持久性单元.它奏效了.
所以我的问题是提供商,方言和供应商选择之间的区别是什么?我必须设置所有这些,或者我可以跳过其中一些吗?我可以设置,例如作为EntityMangerFactory的供应商 - Hibernate,作为事务管理器中的方言 - Eclipse和持久性单元配置中的提供者 - 例如,其他东西,TopLink.
这对我来说并不清楚.请解释.
我在stackoverflow.com上看过类似的问题,但没有一个解决方案对我有帮助.我使用的以下配置(maven项目结构):src/main/resources/properties/app.properties文件
#possible values: dev test prod
mode: dev
Run Code Online (Sandbox Code Playgroud)
在Spring配置中:
<context:property-placeholder location="classpath:properties/app.properties"/>
<import resource="classpath:/spring/db/${mode}-datasource-config.xml"/>
Run Code Online (Sandbox Code Playgroud)
基于${mode}我想要导入相应数据源配置文件的值.
当我使用mvn clean install tomcat7:run命令运行嵌入式tomcat7时,我收到错误:
10, 2013 5:52:29 PM org.apache.catalina.core.StandardContext loadOnStartup
SEVERE: Servlet /SpringWebFlow threw load() exception
java.lang.IllegalArgumentException: Could not resolve placeholder 'mode' in string value "classpath:/spring/db/${mode}-datasource-config.xml"
Run Code Online (Sandbox Code Playgroud)
该target/classes/properties/app.properties文件存在.
我正在使用IntelliJ IDEA,在编辑器中我可以单击"$ {mode}" <import resource="classpath:/spring/db/${mode}-datasource-config.xml"/>并在属性文件中查看其值.编辑器本身也改变${mode}为灰色dev显示它可以识别属性值.在编辑器中我看到:<import resource="classpath:/spring/db/dev-datasource-config.xml"/>
任何想法为什么我得到错误以及如何解决?
目前尚不清楚是否必须关闭JAX RS Client / Response实例。如果必须,是否总是?
根据有关Client类的文档:
调用此方法将有效地使客户端实例产生的所有资源目标无效。
WebTarget类没有任何invalidate()/ close()方法,但是Response类具有。根据文件:
关闭基础消息实体输入流(如果可用并打开),并释放与响应关联的任何其他资源(例如,缓冲的消息实体数据)。
...应该在包含未使用的实体输入流的所有实例上调用close()方法,以确保正确清理与该实例关联的资源并防止潜在的内存泄漏。这是典型的客户端方案,在该方案中,应用程序层代码仅处理响应头,而忽略响应实体。
最后一段对我来说不清楚。“未消费的实体输入流”是什么意思?如果我从响应中获得InputSteam或String,是否应该显式关闭响应?
我们可以获得响应结果而无需访问Response实例:
Client client = ...;
WebTarget webTarget = ...;
Invocation.Builder builder = webTarget.request(MediaType.APPLICATION_JSON_TYPE);
Invocation invocation = builder.buildGet();
InputStream reso = invocation.invoke(InputStream.class);
Run Code Online (Sandbox Code Playgroud)
我正在使用RESTeasy实施,并且我希望响应将在resteasy实施内关闭,但我找不到它。谁能告诉我为什么?我知道Response类将实现Closeable接口, 但是即使知道使用Response,也不会关闭它。
java ×9
jax-rs ×3
maven ×3
spring ×3
jpa ×2
liquibase ×2
enums ×1
final ×1
hibernate ×1
jersey ×1
junit ×1
memory-leaks ×1
properties ×1
reflection ×1
rest ×1
resteasy ×1
tomcat ×1
unit-testing ×1