[英]Is this class not a Java Bean?
我正在嘗試使用現有的Java類來使用Axis2創建Web服務。
當我向Web服務發送請求時,Axis2顯示以下消息:
[01 Nov 2012 16:37:05:244] classloader.BeanInfoCache: Unable to locate a BeanInfo cache for class ems.shared.Fti (stopClass=class java.lang.Object). This will negatively affect performance!
我不確定該錯誤意味着什么,但是讓我懷疑ems.shared.Fti類是否不能滿足成為Java Bean的所有要求。 您看到這堂課有什么問題嗎?
package ems.shared;
import java.io.Serializable;
public class Fti implements Serializable
{
private static final long serialVersionUID = 7476379431395094501L;
public static final Fti UNDEFINED = new Fti(-1);
public static final Fti BROADCAST = new Fti((int) (Math.pow(2, 20) - 2));
private int fti;
public Fti() {
}
public Fti(int fti)
{
this.fti = fti;
}
public Fti(String fti)
{
try
{
this.fti = Integer.parseInt(fti);
}
catch (NumberFormatException e)
{
throw new IllegalArgumentException(fti + " is not a valid FTI");
}
}
public void setFti(int fti) {
this.fti = fti;
}
public int getFti() {
return fti;
}
public int asInt()
{
return this.fti;
}
@Override
public String toString()
{
return String.valueOf(fti);
}
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + fti;
return result;
}
@Override
public boolean equals(Object obj)
{
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Fti other = (Fti) obj;
if (fti != other.fti)
return false;
return true;
}
}
BeanInfo是獨立的東西。 它最初是JavaBean通過Bean Visual Basic告訴Bean外殼的機制:
http://docs.oracle.com/cd/E23095_01/Platform.93/ATGProgGuide/html/s0503beaninfoexample01.html
BeanInfo實例由JavaBean內省器創建(請參見JRE Javadoc )。 正如duffymo指出的那樣,可以將BeanInfo與JavaBean一起顯式提供,在這種情況下,內省者將簡單地加載該BeanInfo。 這主要用於UI組件,不是必需的。 對於沒有顯式BeanInfo的JavaBean,自省者只是使用反射來構造BeanInfo實例。 這就是您的情況。
關鍵是,JRE不緩存BeanInfo對象。 原因是它不能這樣做,而不會導致類加載器泄漏(請參閱IZ67457 ,以獲取由於嘗試在某些版本的IBM JRE中緩存這些對象而導致的錯誤的示例)。 但是,使用反射構造BeanInfo對象是一項昂貴的操作。 因此,Axis2具有自己的BeanInfo緩存。 該緩存經過精心設計,以避免類加載器泄漏。
您收到的消息(該BTW是警告,而不是錯誤)只是說在您的情況下Axis2無法使用緩存的BeanInfo對象。 可能有兩個原因:要么處於無法緩存BeanInfo對象而不會潛在地導致類加載器泄漏的場景中,要么處於一種可以緩存BeanInfo對象而不會導致類加載器泄漏的場景中。但是BeanInfo緩存不支持該功能(即您在緩存實現中遇到了限制)。
為了進一步分析,需要確定哪個類加載器加載Fti類,哪個類加載器加載BeanInfoCache類(即axis2-kernel JAR)以及這些類加載器如何相互關聯(例如,它們是否由父級關聯) -兒童關系)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.