小编Ale*_*ndr的帖子

列出所有liquibase sql类型

我尝试查找可以在更改日志文件中使用的受支持类型的文档.但找不到它.是否有任何文档,网站或类似的东西,我可以找到所有类型的具体问题.例如,具有不同类型的数据库支持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类型.

java liquibase

74
推荐指数
3
解决办法
8万
查看次数

通过反射改变私人最终领域

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"字段没有像我期望的那样被改变.但是如果我们通过反射获得该字段,则第二个打印显示,它会更新.

java reflection final

50
推荐指数
3
解决办法
5万
查看次数

在JAX RS中,返回Response和Bean或Bean集合(DTO)之间的差异

我正在构建一个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)

我已经看过两个例子,我更喜欢第二种情况,只是为了更容易识别服务方法.我已经检查了对这两种方法的反应,看起来它们是相同的.

思考?

rest jax-rs java-ee-web-profile

43
推荐指数
2
解决办法
3万
查看次数

JPA枚举类型映射.最好的方法

像往常一样,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:这是我能提供的解决方案:

让我们假设有表myEnumcode和名称fields.Java MyEnum枚举,在问题中描述.enumHolder表需要myEnumCode引用 …

java enums jpa hibernate-mapping

33
推荐指数
2
解决办法
6万
查看次数

使用junit @Rule,expectCause()和hamcrest匹配器

我有一个测试:

@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

测试编译好.

请帮帮我,无法理解如何测试异常的原因?

java junit unit-testing maven

24
推荐指数
6
解决办法
2万
查看次数

在多线程环境中重用JAX RS Client(具有resteasy)

根据文件,

"客户端是管理客户端通信基础设施的重量级对象.初始化以及客户端实例的处理可能是一项相当昂贵的操作.因此建议在应用程序中仅构建少量客户端实例."

好吧,我正在尝试将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)你能提供一些示例或文档吗?

java multithreading jax-rs jersey resteasy

16
推荐指数
2
解决办法
9926
查看次数

通过maven和spring使用liquibase文件路径

我使用以下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)

我想对两种情况都有相同的配置.我该如何存档?

java spring liquibase maven

15
推荐指数
2
解决办法
1万
查看次数

Spring contaniner配置中的JPA提供商与方言与供应商的对比

弹簧配置文件的示例:

<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.

这对我来说并不清楚.请解释.

java configuration spring hibernate jpa

11
推荐指数
1
解决办法
2万
查看次数

Spring属性占位符不起作用

我在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"/>

任何想法为什么我得到错误以及如何解决?

java spring tomcat properties maven

6
推荐指数
1
解决办法
2万
查看次数

关闭JAX RS客户端/响应

目前尚不清楚是否必须关闭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 memory-leaks jax-rs

6
推荐指数
1
解决办法
1万
查看次数