我想在耳内使用最新的hibernate版本,而无需升级服务器上的jar.我按照此处给出的说明进行操作 - http://jaitechwriteups.blogspot.com/2008/08/how-to-upgrade-hibernate-in-jboss.html.
但是现在的问题是应用程序没有把jboss-local-jdbc.rar放在deploy文件夹中.
2009-07-21 09:01:50,347 INFO [org.jboss.system.ServiceConfigurator] Problem configuring service jboss.jca:service=DataSourceBinding,name=MockDS
org.jboss.deployment.DeploymentException: Exception setting attribute ConnectionManager = jboss.jca:service=LocalTxCM,name=MockDS on mbean jboss.jca:service=DataSourceBinding,name=MockDS; - nested throwable: (javax.management.InvalidAttributeValueException: Set attribute has class class javax.management.ObjectName loaded from null that is not assignable to attribute class class javax.management.ObjectName loaded from org.jboss.mx.loading.UnifiedClassLoader3@1babddb{ url=file:/C:/servers/jboss-4.2.2.GA/server/default/tmp/deploy/tmp22267hibernate_upgrade_test.ear ,addedOrder=43})
at org.jboss.system.ServiceConfigurator.setAttribute(ServiceConfigurator.java:707)
at org.jboss.system.ServiceConfigurator.configure(ServiceConfigurator.java:382)
at org.jboss.system.ServiceConfigurator.internalInstall(ServiceConfigurator.java:462)
at org.jboss.system.ServiceConfigurator.install(ServiceConfigurator.java:171)
at org.jboss.system.ServiceController.install(ServiceController.java:226)
at sun.reflect.GeneratedMethodAccessor23.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
Run Code Online (Sandbox Code Playgroud)
任何的想法 ?
我有一种情况,我必须加载一个命名类.如果com.example.myclass在我的类路径中有多个具有相同名称的类(比方说),我必须同时加载它们.我正在使用派生自我的CustomLoader类的'loadClass()'方法java.lang.ClassLoader.我没有改变父类的行为,只是简单地调用父类的方法.我的问题是,如果有两个具有相同名称的类,我只能加载其中一个.我已经扫描了网络上的解决方案,但没有找到任何解决方案.我通过创建一个新的类加载器实例找到了许多重新加载类的解决方案,但在我的情况下,新实例可能最终会再次加载第一个类.这个问题可以解决吗?
编辑:我忘了提到具有相同名称的两个类在不同的jar文件中.
编辑:Jon和Stephen都提供了相同的解决方案,但我只能标记一个作为答案.对不起:(.我已经投了两个答案了.
您好我有以下问题:
在卸载过程中,我加载了一个JAR(jdbc-driver).
URL pDriverJar = jarToDelete.toURI().toURL();
URL[] lURLList = new URL[]{pDriverJar};
URLClassLoader lLoader = new URLClassLoader(lURLList, Thread.currentThread().getContextClassLoader());
Thread.currentThread().setContextClassLoader(lLoader);
Class<?> aClass = Class.forName("jdbc.Driver"); // was Oracle: oracle.jdbc.OracleDriver but should not be important
if(jarToDelete.delete()){
System.out.println("deleted");
}else {
jarToDelete.deleteOnExit();
}
Run Code Online (Sandbox Code Playgroud)
在终止JVM之后,jar仍然存在.
作为一个workarround,我创建了一个临时文件,并将Jar复制到该tempfile.但是现在Tempfile不会被删除.
我读过,如果ClassLoad是GC,可以删除加载的jar.
有没有人有想法,如何删除此文件?
我想开发一个小应用程序,让用户通过将它们放在特定目录(例如extension/*.rb)中自动添加自己的类.
启动应用程序后,我想加载所有文件并加载此文件中包含的所有类.之后我想打电话给一个特定的方法.
在伪代码中,它看起来像这样:
for each file in extensions/*.rb
arr = loadclasses(file)
for each class in arr
obj = class.new_instance
obj.run
end
end
Run Code Online (Sandbox Code Playgroud) 为什么Java虚拟机不从数据库加载类(类似于.NET的GAC)?据我了解,目前它必须在类路径上读取和扫描每个JAR的清单,以便找到类文件.不会使用数据库(如SQLite)来提升启动时间吗?
我们正在将现有代码转换为OSGi环境.在我们的一个(尚未)OSGi包中,我们有代码执行XSLT转换.一段XSLT包含一个java扩展函数,用于创建唯一的数值.Java类也驻留在bundle中.这是样式表的一个片段:
<xsl:template match="m:property">
<xsl:variable name="uniqueDataStreamName" select="concat(../@id,'/',@name)" />
<xsl:variable name="uniqueDataStreamId"
select="java:com.xyz.TransformationUtils.makeDataStreamIdFromUniqueName($uniqueDataStreamName)" />
<data id="{number($uniqueDataStreamId)}">
<tag>
<xsl:value-of select="$uniqueDataStreamName" />
</tag>
<current_value>
<xsl:value-of select="@value" />
</current_value>
</data>
Run Code Online (Sandbox Code Playgroud)
作为参考,这是如何设置和调用转换:
protected Templates createTemplates(Source xsltSource) {
try {
TransformerFactory tf = TransformerFactory.newInstance();
Templates templates = tf.newTemplates(xsltSource);
return templates;
} catch (TransformerException e) {
throw new RuntimeException(e);
}
}
protected byte[] transform(byte[] input) throws TransformerException {
ByteArrayOutputStream out = new ByteArrayOutputStream(2048);
templates.newTransformer().transform(
new StreamSource(new ByteArrayInputStream(input)),
new StreamResult(out));
return out.toByteArray();
}
Run Code Online (Sandbox Code Playgroud)
在非OSGi environemnt中运行时,它可以工作.在OSGi框架中运行时,它会失败,因为无法编译样式表,因为找不到类TransformationUtils.我有点明白 - 加载jaxp转换器实现的类加载器在我们的bundle中没有看到扩展类.但是,我很难找到解决方案.我尝试过使用OSGi:使用Xalan和Xerces捆绑无济于事.
我的问题是:如何解决这个问题?它可以?
我编写了一个在Tomcat 6中部署的自定义MBean.其任务之一是查询数据库值.我这样做是通过使用JNDI加载数据库资源 - 资源是在Tomcat的server.xml中定义的.
问题是,当我创建javax.naming.InitialContext它的实例时会抛出一个ClassNotFoundException无法找到的实例org.apache.naming.java.javaURLContextFactory.该类catalina.jar由公共类加载器加载并加载.包含我的MBean代码的jar由共享类加载器加载.
关于如何解决这个问题的任何想法?
要注意:我的MBean是由我在其中定义的ContextListener加载的tomcat/conf/web.xml.我也在一个webapp中定义它web.xml没有任何区别.我无法真正移动我的jar以便由公共类加载器加载,因为它依赖于共享类加载器加载的类.
提前致谢,
将
我有一个MDB EJB,里面有静态块.我在第一次运行应用程序时(即部署时)使用静态块来初始化一些组件.MDB EJB部署在除Admin_Server之外的单独服务器(My_Server)上.
问题是静态块被调用两次!
另外,我打印了服务器名称和pid,它们在两者中都是相同的:
System.out.println("server name: " + System.getProperty("weblogic.Name"));
System.out.println("pid: " + ManagementFactory.getRuntimeMXBean().getName().split("@")[0]);
Run Code Online (Sandbox Code Playgroud)
我也注意到一些奇怪的行为.基本上,我附加了一个Shutdown Hook(从静态块内部),在关闭应用程序时向我发送电子邮件.
我该如何解决这个问题?
一些额外的信息:
Weblogic version: 10.3.0
EJB version: 3.0
Run Code Online (Sandbox Code Playgroud) 对于我的论文,我试图用图片处理一些事情,完成它的一个步骤是找到图片中的角落.经过一些冲浪,我发现它可以用Moravec的角点检测算法实现.幸运的是,我发现Moravec的算法已经由JFeatureLib在此链接上实现:https://code.google.com/p/jfeaturelib/source/browse/src/main/java/de/lmu/ifi/dbs/jfeaturelib/ pointDetector/Moravec.java R = 8d96a8fa9a43a0ec7e7084b40169be56bddd6f36
(当然我在Eclipse的构建路径中导入了从JFeatureLib给出的jar文件)所以我在项目的链接中使用了代码,并编写了一些代码来调用它.这是我创建一个Frame的代码,打开图片并在该链接上调用Moravec算法:
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class Compare{
public Compare(){
JFrame frame = new JFrame("Find corners in picture");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = (JPanel)frame.getContentPane();
JLabel label = new JLabel();
label.setIcon(new ImageIcon("house.jpg"));
panel.add(label);
frame.setLocationRelativeTo(null);
frame.pack();
frame.setVisible(true);
}
public static void main (String[] args){
SwingUtilities.invokeLater(new Runnable(){
public void run(){
new Compare();
}
});
Moravec picture = new Moravec();
}
}
Run Code Online (Sandbox Code Playgroud)
关键是它在线上返回一个错误
Moravec picture = new Moravec();
Run Code Online (Sandbox Code Playgroud)
这个错误是这样的:
Exception in …Run Code Online (Sandbox Code Playgroud) 我对SLF4J很感兴趣,因为它似乎是唯一的Java库(至少我可以解释),它在运行时使用这种所谓的" 动态绑定 "类来定义行为.
通过这个,我的意思是,如果你slf4j-api在编译类路径中包含,你现在可以访问该JAR中包含的所有API类(Loggers和LoggerFactories等),但它们的实际运行时行为是no-op(什么都不做),除非你包含一个运行时类路径上的" SLF4J绑定 ",例如slf4j-simple(将日志语句发送到STDOUT和STDERR),或者slf4j-log4j,然后期望Log4J配置等.
就像我上面所说的,这种类型的动态绑定行为似乎是SLF4J项目所特有的.
我想知道为什么?一般来说,在日志记录之外,哪种场景可以保证这种动态绑定作为解决方案?对我来说,它似乎是经典依赖注入(Spring,Guice)的替代方案,几乎将注入推迟到运行时("JIT")确定运行时类路径上可用的匹配类.
所以我问:这个解决方案是否唯一有理由只解决日志记录问题?如果是这样,为什么?如果没有,那么还有哪些其他问题需要这种方法作为解决方案?