小编Pre*_*ton的帖子

具有实例变量的无状态会话bean

我有一个无状态会话bean,它包含一个公共方法,几个私有方法和一些实例级变量.下面是一个伪代码示例.

private int instanceLevelVar

public void methodA(int x) { 
  this.instanceLevelVar = x;
  methodB();
}

private void methodB() {
  System.out.println(instanceLevelVar);
}
Run Code Online (Sandbox Code Playgroud)

我所看到的是,methodB正在打印未传递给MethodA的值.最好我可以告诉它从同一个bean的其他实例打印值.什么会导致这个?

我应该指出代码在99.9%的时间内按预期工作.但是,.01%对我来说是一个严重的问题/担忧.

我明白,如果我有不同的公共方法,那么我可能不会在调用之间获得相同的bean,这会导致这种行为.但是,在这种情况下,唯一的调用是单个公共方法.容器(在这种情况下是Glassfish)是否仍会在私有方法调用之间交换bean?

(编辑)我将"类级别"重命名为"实例级别",因为这引起了一些混乱.

java glassfish stateless-session-bean java-ee

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

如何编写接受二进制文件的restful Web服务(pdf)

我正在尝试在java中编写一个宁静的Web服务,它将采用一些字符串参数和一个二进制文件(pdf)参数.

我理解如何做字符串,但我已经挂断了二进制文件.任何想法/例子?

这是我到目前为止所拥有的

@GET
@ConsumeMime("multipart/form-data")
@ProduceMime("text/plain")
@Path("submit/{client_id}/{doc_id}/{html}/{password}")
public Response submit(@PathParam("client_id") String clientID,
                   @PathParam("doc_id") String docID,
                   @PathParam("html") String html,
                   @PathParam("password") String password,
                   @PathParam("pdf") File pdf) {
  return Response.ok("true").build();
}
Run Code Online (Sandbox Code Playgroud)

由于我发布了这个已删除答案的链接,所以这是我的实现.

@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.TEXT_PLAIN)
@Path("submit")
public Response submit(@FormDataParam("clientID") String clientID,
                   @FormDataParam("html") String html,
                   @FormDataParam("pdf") InputStream pdfStream) {

    try {
        byte[] pdfByteArray = DocUtils.convertInputStreamToByteArrary(pdfStream);
    } catch (Exception ex) {
        return Response.status(600).entity(ex.getMessage()).build();
    }
}


...

public static byte[] convertInputStreamToByteArrary(InputStream in) throws IOException {
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    final int BUF_SIZE = 1024;
    byte[] …
Run Code Online (Sandbox Code Playgroud)

java rest web-services attachment

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

如何让maven从JNA项目下载platform.jar

我有以下POM条目

<dependency>
    <groupId>net.java.dev.jna</groupId>
    <artifactId>jna</artifactId>
    <version>3.3.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

当我构建我的项目时,它会下载以下文件:

  • JNA-3.3.0.jar
  • JNA-3.3.0.jar.sha1
  • JNA-3.3.0.pom
  • JNA-3.3.0.jar.sha1

如果您访问http://download.java.net/maven/2/net/java/dev/jna/jna/3.3.0/上的存储库,您会看到还有许多其他文件.为什么Maven没有下载其他文件?

如果你打开jna-3.3.0.pom,你会看到

<plugins>
  <!-- fake out maven and install the binary artifact -->
  <plugin>
    <groupId>org.jvnet.maven-antrun-extended-plugin</groupId>
    <artifactId>maven-antrun-extended-plugin</artifactId>
    <executions>
      <execution>
        <phase>package</phase>
        <goals>
          <goal>run</goal>
        </goals>
        <configuration>
          <tasks>
            <!--<ant dir="." target="dist" />-->
            <attachArtifact file="dist/jna.jar" />
            <attachArtifact file="dist/platform.jar" classifier="platform" type="jar" />
            <attachArtifact file="dist/src-mvn.zip" classifier="sources" type="jar"/>
          </tasks>
        </configuration>
      </execution>
    </executions>
  </plugin>
</plugins>
Run Code Online (Sandbox Code Playgroud)

我怀疑这个问题与pom中的评论"假冒maven并安装二进制工件"有关.

maven-2 jna

12
推荐指数
2
解决办法
8707
查看次数

我需要列出用java.lang.ApplicationShutdownHooks注册的钩子

我有一个第三方应用程序,它有一个错误,导致它只需要1时注册多个关闭挂钩.

我的问题是如何查看已注册的关闭钩子是什么?我想迭代它们然后调用remove方法.保存挂钩的集合是私有静态的,不包含访问者.我们已经尝试过反射,但由于类是包私有,我们必须使我们的破解程序部分java.lang是一个禁止的包.

有任何想法吗?

/*
 * %W% %E%
 *
 * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 */
class ApplicationShutdownHooks {
static {
    Shutdown.add(1 /* shutdown hook invocation order */,
        new Runnable() {
            public void run() {
                runHooks();
            }
        });
}

/* The set of registered hooks */
private static IdentityHashMap<Thread, Thread> hooks = new IdentityHashMap<Thread, Thread>();

private void ApplicationShutdownHooks() {}

/* Add a new shutdown hook.  Checks the …
Run Code Online (Sandbox Code Playgroud)

java reflection

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

我是否有JAXB类加载器泄漏

我在Glassfish上部署了一个应用程序.随着时间的推移,加载的班级数量攀升至数百万,而我的permgen似乎也在增加.

为了帮助排除故障,我将以下内容添加到我的jvm参数中.-XX:+ PrintGCDetails -XX:+ TraceClassUnloading -XX:+ TraceClassLoading

现在,在观看输出时,我看到一遍又一遍地加载相同的类.基本上每次调用Web服务时都会使用JAXB来处理xml.

[从JVM_DefineClass加载com.strikeiron.ZIPCodesInRadius $ JaxbAccessorF_userID ] [ 从JVM_DefineClass加载com.strikeiron.ZIPCodesInRadius $ JaxbAccessorF_userID ]

这是否表示泄漏?如果是,我该如何解决?

java memory-leaks permgen classloader

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

好的,所以我现在加密了我的数据在哪里可以隐藏密钥?

我有一个包含敏感信息的数据库.我可以在读写操作上加密/解密数据.问题是我需要将密钥存储在应用程序中.如果某人已经破解了他们的方式,他们可以访问数据库,那么他们也可以抓住应用程序(java)解释它并拉动密钥.

这似乎是最好的减速带.还有哪些其他解决方案?

security encryption encryption-asymmetric

9
推荐指数
2
解决办法
626
查看次数

我需要帮助使用MAT找到我的内存泄漏

我正在使用MAT来比较两个堆转储.我每天都在堆垃圾堆,每天增加约200兆.我认为泄漏与java.util.zip相关,因为该表显示了什么,也因为我们最近添加了一个新的进程来拉链和解压缩大量文件.(见图)

堆转储直方图比较

在这一点上,我打开了支配者并过滤了.Inflater.这产生了一个庞大的java.util.zip.Inflater列表.现在我想看看是什么让这些打开,所以我选择了一个并运行了GC根路径,不包括弱引用和软引用(见图).

GC根

看起来这与罐子膨胀有关,与我的过程无关.在这一点上,我陷入困境,需要一些建议.

编辑1

肖恩询问了ThreadLocals.如果你看看没有过滤器的dominator_tree,你会发现java.lang.ApplicationShutdownHooks是堆的58%.如果我扩展其中一些条目,你会发现它们似乎在ThreadLocalMap中.我怎么能找到它们放在那里的东西?

在此输入图像描述

编辑2

肖恩的评论让我走上了正确的轨道.我正在使用Glassfish v 2.0,它有内存泄漏.它不断创建新的LogManagers并将它们添加到ApplicationShutdownHooks集合中.

我通过破解ApplicationShutdownHooks并手动从集合中删除对象来解决这个问题.

java memory-leaks

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

Hibernate自定义UserType不起作用

我已经创建了一个UserType(见下文)来处理我们的mySQL数据库中的情况,我们一直在将空日期保存为0000-00-00 00:00:00.

当我尝试使用null为dispDT持久保存我的实体时(见下文),它会生成此异常:"javax.persistence.PersistenceException:org.hibernate.PropertyValueException:not-null属性引用null或transient值:myEntity.dispDt"

通过在MySQLTimeStampUserType中的每个方法中设置断点,我可以看到它调用deepCopy方法并且从不调用nullSafeSet方法.我认为nuyllSafeSet方法的重点是允许我在持久化之前操纵该值.我究竟做错了什么?

实体注释

@Basic(optional = false)
@Column(name = "disp_dt")
@Type(type = "mypackage.MySQLTimeStampUserType")
//    @Temporal(TemporalType.TIMESTAMP)
private Date dispDt;
Run Code Online (Sandbox Code Playgroud)

用户类型类

public class MySQLTimeStampUserType implements UserType {

private static final int[] SQL_TYPES = {Types.TIMESTAMP};

public int[] sqlTypes() {
    return SQL_TYPES;
}

public Class returnedClass() {
    return Date.class;
}

public boolean equals(Object x, Object y) throws HibernateException {
    if (x == y) {
        return true;
    } else if (x == null || y == null) {
        return false;
    } else {
        return …
Run Code Online (Sandbox Code Playgroud)

java hibernate usertype

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

如何将祖先复制到后代

假设我有一只动物,现在我想把它变成一只狗.我如何在java中执行此操作?

现在我有一个看起来像的构造函数

public Dog(Animal animal) {
  this.setProperty(animal.getProperty);
  ...
}
Run Code Online (Sandbox Code Playgroud)

虽然这有效,但它很脆弱.还有其他建议吗?

java inheritance clone copy

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