我有一个无状态会话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中编写一个宁静的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) 我有以下POM条目
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>3.3.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
当我构建我的项目时,它会下载以下文件:
如果您访问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并安装二进制工件"有关.
我有一个第三方应用程序,它有一个错误,导致它只需要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) 我在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)解释它并拉动密钥.
这似乎是最好的减速带.还有哪些其他解决方案?
我正在使用MAT来比较两个堆转储.我每天都在堆垃圾堆,每天增加约200兆.我认为泄漏与java.util.zip相关,因为该表显示了什么,也因为我们最近添加了一个新的进程来拉链和解压缩大量文件.(见图)

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

看起来这与罐子膨胀有关,与我的过程无关.在这一点上,我陷入困境,需要一些建议.
编辑1
肖恩询问了ThreadLocals.如果你看看没有过滤器的dominator_tree,你会发现java.lang.ApplicationShutdownHooks是堆的58%.如果我扩展其中一些条目,你会发现它们似乎在ThreadLocalMap中.我怎么能找到它们放在那里的东西?

编辑2
肖恩的评论让我走上了正确的轨道.我正在使用Glassfish v 2.0,它有内存泄漏.它不断创建新的LogManagers并将它们添加到ApplicationShutdownHooks集合中.
我通过破解ApplicationShutdownHooks并手动从集合中删除对象来解决这个问题.
我已经创建了一个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中执行此操作?
现在我有一个看起来像的构造函数
public Dog(Animal animal) {
this.setProperty(animal.getProperty);
...
}
Run Code Online (Sandbox Code Playgroud)
虽然这有效,但它很脆弱.还有其他建议吗?
java ×7
memory-leaks ×2
attachment ×1
classloader ×1
clone ×1
copy ×1
encryption ×1
glassfish ×1
hibernate ×1
inheritance ×1
java-ee ×1
jna ×1
maven-2 ×1
permgen ×1
reflection ×1
rest ×1
security ×1
usertype ×1
web-services ×1