有没有办法将Spring bean自动转换为应用程序上下文XML中定义的类?我想避免在两个位置放置关于bean的类型信息....在xml配置文件中以及在代码中作为强制转换.
例如,给定此配置文件
<bean id="bean-name" class="SimpleSpringBean" scope="prototype">
<property name="myValue" value="simple value"></property>
</bean>
Run Code Online (Sandbox Code Playgroud)
我可以这样调用ApplicationContext.getBean("bean-name")以避免直接将返回类型转换为SimpleStringBean.我知道我也可以打电话ApplicationContext.getBean("bean-name", SimpleSpringBean.class)来避免演员本身,但我仍然有2个地方的类型信息.
看起来Spring可以获取类info(ApplicationContext.getType)或者从bean本身获取类型,但没有办法在没有程序员干预的情况下自动转换类型.
我不确定"元数据管理"是否是正确的术语......
基本上,我有一位客户要求就他们拥有的数据仓库项目提出有关"元数据管理"工具的建议.我猜这个术语与创建像数据字典这样的东西有关,但我在这个领域的经验相对较少,而且我从无知的角度提问.
我被告知(但还没有看到第一手资料)客户端目前正在使用Excel作为"元数据管理"的当前工具,但是想要更强大的东西.
如果有人能够阐明这个术语以及可能的一些开源解决方案,我会很感激.
我打算建议一个像MoinMoin这样的免费维基,以便他们可以创建一个"网络"术语,但我不确定这是不是正确的道路.
我有一个 Jena 本体模型 ( OntModel ),我正在以编程方式对其进行修改。该模型最初是使用默认的 ModelFactory 方法创建的,以创建本体模型(无参数)。问题是,随着程序的运行和模型的更改,默认的 Jena Reasoner 将运行(并且运行、运行和运行)。这个过程对于我所需要的来说太慢了,并且会在大型数据集上耗尽内存。
我将程序更改为使用不同的本体模型工厂方法来创建没有推理器的模型。这运行得非常快并且没有出现我之前看到的内存问题(即使对于非常大的数据集)。这种方法的问题是我只能通过直接使用它的直接类类型来访问数据(我无法使用它的父类访问对象)。
例如,假设我有两个类资源,“花”和“种子”。这些继承自一个共同的父母,“植物材料”。我的程序获取所有“种子”,运行一个名为“grow”的方法,它将“种子”对象转换为“花”对象。在使用 Reasoner(甚至是微型 Reasoner)时,“增长”方法运行速度太慢并且内存不足。如果我关闭 Reasoner,则无法使用“植物材料”类访问所有“花”和“种子”。
有没有一种首选的方式(一种快乐的媒介)来做到这一点......允许使用它们的超类访问对象的能力,同时又快又不占用内存?
我一直在寻找一种在运行“增长”方法时“关闭推理器”的方法,然后在方法完成后将其返回。这有可能吗?
我有一个由wsgen通过maven生成的Web服务.当我将服务部署到Glassfish时,它将服务器URL放入WSDL中.我们的Glassfish服务器由Apache代理服务器提供.
这一切都意味着当有人访问我们的WSDL并查看他们看到的服务端点和soap地址位置时
http://app server url/service...
Run Code Online (Sandbox Code Playgroud)
代替
http://proxy server url/service...
Run Code Online (Sandbox Code Playgroud)
我想我需要对一些项目做一些澄清......
这个端点地址重要吗?如果端点地址与他们将调用以调用服务的代理服务器的URL不匹配,客户端是否仍然能够运行.这基本上问了" WSDL到Web服务,因为接口是对象 ".
更新:在回答第一个问题时,它确实看起来" 作为接口的Web服务的WSDL是对象 ".WSDL中指定的端点地址并不重要.事实上,在不同于WSDL中指定的端点上调用Web服务操作是相对简单的,如此处所述.
// Create service and proxy from the generated Service class. HelloService service = new HelloService(); HelloPort proxy = service.getHelloPort();// Override the endpoint address ((BindingProvider)proxy).getRequestContext().put( BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://new/endpointaddress"); proxy.sayHello("Hello World!");
当我们部署到Glassfish时,会自动生成WSDL.有没有一种简单的方法可以通过应用服务器设置覆盖Glassfish中生成的端点地址.如果是这样,我可以创建一个设置来自动将代理服务器URL放入生成的WSDL中.
如果1确实很重要,我们不能以2的方式覆盖它,那么它基本上意味着我们需要为开发和生产做单独的构建.这并不"感觉正确",因为在我看来,部署到另一台服务器时我们唯一需要做的就是将现有(和经过测试)的战争从一个环境中丢弃到新服务器上.
我看到一个奇怪的错误信息,我正在寻找一些关于问题可能是什么的想法.我对使用JPA有点新意.
我有一个应用程序,我使用Spring的Entity Manager Factory(LocalContainerEntityManagerFactoryBean),EclipseLink作为我的ORM提供程序,连接到MySQL DB并使用Maven构建.我不确定这些是否重要......
当我将此应用程序部署到Glassfish时,应用程序按预期工作.
问题是,我创建了一组独立的单元测试,以便在Glassfish之外运行,但这些测试无法正常工作.我收到以下错误(我已经编辑了一些类名)
com.xyz.abc.services.persistence.entity.MyEntity cannot be cast to com.xyz.abc.services.persistence.entity.MyEntity
Run Code Online (Sandbox Code Playgroud)
该对象不能转换为相同类型的类?怎么可能?
这是一段错误的代码片段
Query q = entityManager.createNamedQuery("MyEntity.findAll");
List entityObjects = q.getResultList();
for (Object entityObject: entityObjects) {
com.xyz.abc.services.persistence.entity.MyEntity entity = (com.xyz.abc.services.persistence.entity.MyEntity) entityObject;
Run Code Online (Sandbox Code Playgroud)
以前,我有这个代码产生相同的错误:
CriteriaQuery cq = entityManager.getCriteriaBuilder().createQuery();
cq.select(cq.from(com.xyz.abc.services.persistence.entity.MyEntity.class));
List entityObjects = entityManager.createQuery(cq).getResultList();
for (Object entityObject: entityObjects) {
com.xyz.abc.services.persistence.entity.MyEntity entity = (com.xyz.abc.services.persistence.entity.MyEntity) entityObject;
Run Code Online (Sandbox Code Playgroud)
此代码的问题与我部署到服务器的问题相同.
如果它有帮助,这是最里面的例外
Caused by: java.lang.ClassCastException: com.xyz.abc.services.persistence.entity.MyEntity cannot be cast to com.xyz.abc.services.persistence.entity.MyEntity
at com.xyz.abc.services.persistence.entity.factory.MyEntityFactory.createBeans(MyEntityFactory.java:47)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:115)
... …Run Code Online (Sandbox Code Playgroud) 我有一个利用JPA的Java Web应用程序.persistence.xml使用jta-data-source标记在文件中指定数据库实例.
我想在同一个(glassfish)服务器上部署Web应用程序的第二个副本,但指向另一个数据库实例.
实现这一目标的最佳方法是什么?我认为理想情况下,我想persistence.xml在战争之外放置一个覆盖文件(在类路径的某个地方?).我不确定在哪里放置它或如何以一种它不会与我的其他实例混淆的方式来定义它.我可以看到我们以这种方式托管一些实例(SaaS),我希望配置超出部署的战争,这样就不会成为维护问题.出于安全原因,不能在客户端之间共享数据库实例.
我相信这不是我们小组的一个独特问题.其他人用来解决这个问题的最佳实践或解决方案是什么?
我有一个GWT CellTable - 它是一个非常简单的表,只有一个字符串列.
我想要做的是将此表的行拖到放置目标(实际上是另一个表).我一直试图弄清楚如何附加一个可拖动的事件,如本视频〜23:00所述.
我可以将可拖动标志设置为TRUE的CellTable元素.
我还没有这么远,但我确信我很快就会在目标表上设置drop handler时遇到类似的问题.
如果有人可以发表一个例子或指出我正确的方向,我将不胜感激.
我之前使用过Spring(并且喜欢它),但是我想看看Guice.
有没有办法使用Guice将地图或列表等内容初始化为bean?
例如,我在Spring之前完成了以下操作,以便将我想要处理的项目列表注入到某个bean中.
<property name="FilesToProcess">
<list>
<value>file1.xml</value>
<value>file2.xml</value>
</list>
</property>
Run Code Online (Sandbox Code Playgroud)
我怎么能在Guice这样做?
我在JUnit测试期间使用标准日志记录注意到一些奇怪的行为.JUnit是否将标准输出重定向到不同的流?我怎样才能访问它?
这是一个简单的JUnit测试,演示了我所描述的行为.
@Test
public void logMessage() {
// set up new logger with output directed to standard out
Logger logger = Logger.getLogger("my.test.logger");
logger.addHandler(new StreamHandler(System.out, new SimpleFormatter()));
// log a warning message
logger.warning("logger message"); // message 1
// turn off parent handlers
logger.setUseParentHandlers(false);
// log a second warning message
logger.warning("second logger message"); // message 2
// print somehting to standard output
System.out.println("standard output message"); //message 3
}
Run Code Online (Sandbox Code Playgroud)
请注意,我创建了一个新的记录器,只是将其日志消息发送到标准输出(System.out).
这是Junit输出
Testsuite: com.my.FormatterTest
Feb 19, 2009 12:02:33 PM com.my.FormatterTest logMessage
WARNING: logger message …Run Code Online (Sandbox Code Playgroud) 我有一组带时间戳的值,我想放在一个有序的集合中.
public class TimedValue {
public Date time;
public double value;
public TimedValue(Date time, double value) {
this.time = time;
this.value = value;
}
}
Run Code Online (Sandbox Code Playgroud)
用于对此集合进行排序的业务逻辑表示,值必须按降序排序,除非它比最新值早7天以上.
所以作为测试,我想出了以下代码......
DateFormat dateFormatter = new SimpleDateFormat("MM/dd/yyyy");
TreeSet<TimedValue> mySet = new TreeSet<TimedValue>(new DateAwareComparator());
mySet.add(new TimedValue(dateFormatter.parse("01/01/2009"), 4.0 )); // too old
mySet.add(new TimedValue(dateFormatter.parse("01/03/2009"), 3.0)); // Most relevant
mySet.add(new TimedValue(dateFormatter.parse("01/09/2009"), 2.0));
Run Code Online (Sandbox Code Playgroud)
如您所见,最初第一个值比第二个值更相关,但是一旦将最终值添加到集合中,第一个值已过期且应该是最不相关的.
我的初步测试表明这应该有效...... TreeSet会在添加更多值时动态重新排序整个列表.
但即使我看到它,我也不确定我是否相信它.
在添加每个元素时,排序的集合是否会重新排序整个集合?以这种方式(即性能)使用排序集合是否有任何问题?在添加所有值后手动对列表进行排序会更好(我猜它会是这样)?
后续行动:
尽可能多(甚至在某种程度上)怀疑,已排序的集合不支持这种"动态重新排序"的方式.我相信我的初步测试是"偶然"工作.随着我在集合中添加更多元素,"订单"迅速崩溃.感谢所有出色的回复,我重构了我的代码以使用许多人建议的方法.
我正在玩gorilla.muxGo 的图书馆.我有以下配置,但我无法找出达到该HelloWorldXml方法的URL .
func main() {
router := mux.NewRouter()
router.HandleFunc("/{name}.xml", HelloWorldXml).
PathPrefix("/products/")
router.HandleFunc("/hello/{name}", HelloWorld)
http.Handle("/", router)
http.ListenAndServe(":8787",nil)
}
Run Code Online (Sandbox Code Playgroud)
什么是正确的URL使用? http://localhost:8787/products/MyName.xml返回404.
具体来说,我想打电话给MKCOL通过HttpClient通过吊索REST API创建的Apache贾卡拉比特的文件夹.
我试过变种了
BasicHttpEntityEnclosingRequest request = new BasicHttpEntityEnclosingRequest("MKCOL", restUrl);
Run Code Online (Sandbox Code Playgroud)
但到目前为止还没有骰子.我猜这不像我做的那么困难.
我也看到有MkColMethod类似的东西
MkColMethod mkColMethod = new MkColMethod(restUrl);
Run Code Online (Sandbox Code Playgroud)
但我不知道如何利用它.我认为它可能适用于以前版本的HttpClient.我正在使用4.x.
java ×8
glassfish ×2
jpa ×2
spring ×2
casting ×1
classloader ×1
collections ×1
comparator ×1
database ×1
eclipselink ×1
go ×1
gorilla ×1
guice ×1
gwt ×1
httpclient ×1
jackrabbit ×1
javabeans ×1
jena ×1
junit ×1
logging ×1
metadata ×1
semantics ×1
sling ×1
web-services ×1
webdav ×1
wsgen ×1