小编dds*_*dds的帖子

我如何@Inject CDI @ApplicationScoped bean到@RequestScoped JAX-RS bean?

我已经将@ApplicationScopedCDI注释添加到一个简单的bean:

@ApplicationScoped
public class History {
Run Code Online (Sandbox Code Playgroud)

并尝试将其@Inject转换为JAX-RS(resteasy)bean:

@RequestScoped
@Path("/history")
public class HistoryAPI {

@Inject
private History history;
Run Code Online (Sandbox Code Playgroud)

但历史仍然无效.我beans.xml在WEB-INF中有一个文件.我已经尝试了很多关于这个主题的变化,但是虽然app服务器(Wildfly)承认它是从CDI开始我无法让注入工作.我缺少什么想法?谢谢.

ETA:我试过一个空的beans.xml和几个变种,最新的是:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:weld="http://jboss.org/schema/weld/beans"
       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://docs.jboss.org/cdi/beans_1_0.xsd
                           http://jboss.org/schema/weld/beans http://jboss.org/schema/weld/beans_1_1.xsd">
</beans>
Run Code Online (Sandbox Code Playgroud)

java jax-rs resteasy cdi

5
推荐指数
1
解决办法
2648
查看次数

Java,缓冲区延迟分配,按需可释放并作为byte []寻址

我试图通过扩展现有的Java程序来实现概念验证内存感知调度功能.该程序使用缓冲区的形式byte [].因为我的目的byte []是有问题的,因为

  1. 他们是垃圾收集
  2. 它们被预先分配而不是懒惰(JVM似乎触及它在创建缓冲区时分配的所有页面)
  3. 它们使JVM分配越来越多的内存,而这些内存并没有返回给操作系统.

为了实现我的目标,我希望缓冲区是懒惰分配的内存(仅在写入时分配的页面)并且可以按需释放.这与C++中的情况类似.另外,尽可能地,我想尽量减少对现有代码库的更改.

我看着nio.ByteBuffer不安全的班级.不适合我的情况,因为

  1. java.nio.ByteBuffers似乎没有懒惰的分配.当我分配一个空的1GB缓冲区时,程序的RSS立即变为1GB.
  2. Unsafe.allocateMemory懒惰分配,但我不知道如何引用它byte [].

有什么方法可以解决这个问题吗?以任何方式查看分配的内存Unsafe.allocateMemory()byte []?或者将现有更改byte []为指向分配给Unsafe的内存?

谢谢

java memory-management

5
推荐指数
1
解决办法
158
查看次数

为什么我一次只能从 okhttp.Response InputStream 读取 2048 个字节?

我正在使用 OkHttp GET 请求下载文件:

import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;
...
OkHttpClient okClient = new OkHttpClient();
Request request = Request.Builder().url(url).get();
Response response = okClient.newCall(request).execute();
Run Code Online (Sandbox Code Playgroud)

我从响应正文中读取并用 一个 装饰它,BufferedInputStream缓冲区大小为 4096:

BufferedInputStream in = new BufferedInputStream(response.body().byteStream(), 4096);
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试从缓冲区读取时,第一次读取返回 1179 个字节。之后,我一次只能读取 2048 个字节:

byte[] buffer = new byte[4096];
while (true) {
    int bytesRead = in.read(buffer); //bytesRead is always 2048, except the first read
    if (bytesRead == -1) break;
}
Run Code Online (Sandbox Code Playgroud)

几个相关问题:

  1. 什么可能导致第一次读取返回 1179 个字节?某种文件头?
  2. 为什么从InputStream被分页的读取到 2048 字节的大小,而不是BufferedInputStream包装器指定的值?
  3. 有没有办法配置OkHttpClient …

java networking android okhttp okio

5
推荐指数
1
解决办法
4222
查看次数

REST Jackson JsonDeserialize,升级后的StackOverflowError

在以前版本的jackson(1.9.2)中,以下代码运行良好:

import org.codehaus.jackson.map.JsonDeserializer;
import org.codehaus.jackson.JsonParser;
import org.codehaus.jackson.map.DeserializationContext;
...
@JsonDeserialize(using = RoleDeserializer.class)
public interface RoleDto {}

public class RoleDeserializer extends SomeSharedDeserializer<RoleDto> {}

public class SomeSharedDeserializer<T> extends JsonDeserializer<T> {
    @Override
    public T deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException
    {
        return jp.readValueAs(getImplementation());
    }

    public Class<? extends T> getImplementation(){ ... returns some generated implementation of RoleDto }
}
Run Code Online (Sandbox Code Playgroud)

在我们迁移到最后一个jackson版本(Wildfly 8.2提供的1.9.13)后,我们得到了一个例外:

com.fasterxml.jackson.databind.JsonMappingException:无法构造RoleDto的实例,问题:抽象类型需要映射到具体类型,具有自定义反序列化器,或者使用其他类型信息进行实例化

好的,就像在jackson使用的新包装一样,我们将它们升级为:

import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.deser.std.JsonNodeDeserializer;
Run Code Online (Sandbox Code Playgroud)

解串器现在可见(先前的异常消失了),但是,我们得到了StackOverflowError异常.com.fasterxml.jackson.databind.ObjectMapper读取值(第3023行):

    DeserializationContext ctxt = createDeserializationContext(jp, cfg);
    JsonDeserializer<Object> deser = _findRootDeserializer(ctxt, valueType);
    // ok, let's get the …
Run Code Online (Sandbox Code Playgroud)

java rest json jackson deserialization

5
推荐指数
1
解决办法
2652
查看次数

如何将inputStream对象发送到Java EJBean?

我有一个会话bean的Java客户端,我想发送一个inputStream,如下所示:

注意:我正在使用EJB 3.0

public class SenderSimulator {

public static void main(String[] arg){
    Properties p = new Properties();
    p.put("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
    p.put("java.naming.provider.url", "jnp://localhost:1099");
    p.put("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");

    try {
        Context context = new InitialContext(p);
        RogersBatchImporter  bean = (RogersBatchImporter)context.lookup("RogersImporterBean/remote");
        InputStream in = new FileInputStream("filePath");           
        System.out.println("Result: " + bean.processBatch(in));  // line 29
    } catch (NamingException e) {
        e.printStackTrace();
    } catch (LogConfigurationException e) {
        e.printStackTrace();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

}

但它抛出以下异常:

Exception in thread "main" java.lang.reflect.UndeclaredThrowableException

at $Proxy0.processBatch(Unknown Source)

at package.main(SenderSimulator.java:29)

Caused by: …
Run Code Online (Sandbox Code Playgroud)

java java-ee ejb-3.0

4
推荐指数
1
解决办法
9489
查看次数

从命令行覆盖 gradle project.ext 参数

我有一个 gradle 构建,其中使用另一个 gradle 文件中的属性:

构建.gradle

apply from: "props.gradle"
Run Code Online (Sandbox Code Playgroud)

props.gradle只是文件中具有 groovy 语法的一组属性

ext {
    jdbcJarFile = "/jdbc/lib/ojdbc6.jar"
    system_oracle_driver = "oracle.jdbc.driver.OracleDriver"
    system_db_admin_user = "system"
}
Run Code Online (Sandbox Code Playgroud)

稍后在构建中我可以像这样访问此属性:

project.property("jdbcJarFile")
Run Code Online (Sandbox Code Playgroud)

props.gradle我需要的是一种覆盖命令行中定义的任何属性的方法。

例如

gradle build -PjdbcJarFile=new/path
Run Code Online (Sandbox Code Playgroud)

但是当我尝试这样做时,我仍然得到props.gradle.

我需要能够覆盖每个属性,并且该文件中有数十个属性。此处无法手动检查每个属性。

我该如何解决这个问题?

Gradle 版本是 2.12。

groovy gradle

4
推荐指数
1
解决办法
2319
查看次数

推土机MappingException NoSuchMethodException初始化

我在一个项目的代码中。尝试将对象RRREC类型转换为RR_REC类型时出现错误。

RRREC类:

 public class RRREC{
    protected String owner;
    protected RRINFRATYPE infraType;
    // getter and setter
 }
Run Code Online (Sandbox Code Playgroud)

RR_REC类:

public class RR_REC{
    protected String localOwner;
    protected RR_INFRA_TYPE localInfraType;
    // getter and setter
}
Run Code Online (Sandbox Code Playgroud)

RRINFRATYPE类:

public enum RRINFRATYPE {

  V_6_ADDRESS("V6ADDRESS"),
  OBJECT("OBJECT"),
  ZONE("ZONE"),
  V_4_REVERSEZONE("V4REVERSEZONE"),
  V_6_REVERSEZONE("V6REVERSEZONE"),
  NODE("NODE"),
  ALL("ALL");
  private final String value;

  RRINFRATYPE(String v) {
     value = v;
  }

  public String value() {
    return value;
  }

  public static RRINFRATYPE fromValue(String v) {
    for (RRINFRATYPE c: RRINFRATYPE.values()) { …
Run Code Online (Sandbox Code Playgroud)

java dozer

3
推荐指数
1
解决办法
6581
查看次数

WildFly和旧的EJB2代码

我们有一个包含大量遗留EJB2内容的项目以及用EJB3编写的新代码.所以我们想将它从JBoss AS 7迁移到WildFly.

WildFly是否支持EJB2?

我试图找到有关这方面的信息,但只发现2013年6月10日的信息

"支持...已在此版本中成为可选项,其描述将移至单独的EJB可选功能文档"

java ejb-2.x wildfly

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

命令"window.location.href"无法处理HTML(Bootstrap框架)

我目前正在开展一个大学项目,我需要创建一个简单的登录屏幕,将用户重定向到另一个登陆页面.由于我是网络编程的新手,我搜索了一些函数,发现最常用的命令是window.location.href,这对我的代码不起作用.这里是:

<button class="btn btn-lg btn-primary btn-block" type="submit" onclick="validation(this.form)">Sign in</button>
  </form>

<script language = "Javascript">
    function validation(form){
        if(form.inputEmail.value=="user@user.com" && form.inputPassword.value=="user123"){
                window.location.href('form.html');
        } 
        else {
            alert("Invalid e-mail or password.");
        }           
    }
</script>
Run Code Online (Sandbox Code Playgroud)

我已经检查了路径,但输入有效用户名和密码时唯一有效的方法是 window.open()

html javascript twitter-bootstrap

0
推荐指数
1
解决办法
9358
查看次数