按死亡顺序记录消息有不同的方法:
FATAL
ERROR
WARN
INFO
DEBUG
TRACE
我如何决定何时使用哪个?
什么是一个很好的启发式使用?
我有Order一个列表的类,OrderTransactions我用一对多的Hibernate映射映射它,如下所示:
@OneToMany(targetEntity = OrderTransaction.class, cascade = CascadeType.ALL)
public List<OrderTransaction> getOrderTransactions() {
return orderTransactions;
}
Run Code Online (Sandbox Code Playgroud)
这些Order还有一个字段orderStatus,用于使用以下条件进行过滤:
public List<Order> getOrderForProduct(OrderFilter orderFilter) {
Criteria criteria = getHibernateSession()
.createCriteria(Order.class)
.add(Restrictions.in("orderStatus", orderFilter.getStatusesToShow()));
return criteria.list();
}
Run Code Online (Sandbox Code Playgroud)
这有效,结果如预期.
现在这里是我的问题:为什么,当我明确地设置fetch类型时EAGER,Orders会在结果列表中多次出现?
@OneToMany(targetEntity = OrderTransaction.class, fetch = FetchType.EAGER, cascade = CascadeType.ALL)
public List<OrderTransaction> getOrderTransactions() {
return orderTransactions;
}
Run Code Online (Sandbox Code Playgroud)
如何更改我的Criteria代码以使用新设置达到相同的结果?
我看到很多关于OSGi的演讲,我认为这对于实施更好的模块化听起来很有希望.显然,"热部署"和"并行运行不同版本的x"也是市长的卖点.
我想知道OSGi承诺解决的问题是否是一个问题......?它让我想起OO的早期时代,类似的声称是女仆:
当OO是新的时,最重要的论点是可重用性.人们普遍声称,当使用面向对象时,人们只需要"一次写入",然后就可以"随处使用".
在实践中,我只看到这个适用于一些非常低级的例子.我认为这样做的原因是编写可重用的代码很难.从技术上讲,但从界面设计的角度来看.您必须预测未来的客户将如何使用您的课程并提前做出正确的选择.根据定义,这很困难,因此潜在的可重用性益处通常无法实现.
有了OSGi,我怀疑在这里我们可能会再次陷入承诺,我们没有真正拥有的问题的潜在解决方案.或者如果我们拥有它们,我们没有足够大的数量和严重程度,以便购买OSGi以获得帮助."Hotdeployment",例如模块的子集的绝对是一个好主意,但多久它真正的工作?多久没有,因为事实证明你对特定问题的模块化是错误的?如何在多个模块之间共享模型实体?这些模块都必须同时更换吗?或者,您是否将对象展平为基元并仅使用模块间通信中的对象,以便能够保持接口契约?
应用OSGi时最困难的问题是,我认为,使模块化"正确".类似于在OO中使用OSGi获取类的接口,问题保持不变,这次是更大规模,包甚至服务级别.
正如您可能已经猜到的那样,我目前正在尝试评估OSGi以用于项目.我们遇到的主要问题是随着代码库的增长而增加复杂性,并且我希望在具有越来越多定义的交互的较小模块中打破系统.
谢谢!
我正在寻找一种方法来计算非常大的文件的SHA-1校验和,而无需立即将它们完全加载到内存中.
我不知道SHA-1实现的细节,因此想知道是否有可能这样做.
如果你知道SAX XML解析器,那么我所寻找的东西就是类似的东西:通过一次只将一小部分加载到内存来计算SHA-1校验和.
我发现的所有示例,至少在Java中,总是依赖于将文件/字节数组/字符串完全加载到内存中.
如果你甚至知道实现(任何语言),那么请告诉我!
我有一个POJO使用服务来做某事:
public class PlainOldJavaObject {
private IService service;
public String publicMethod(String x) {
return doCallService(x);
}
public String doCallService(String x) {
if(service == null) {
throw new RuntimeException("Service must not be null");
}
return service.callX(x);
}
public interface IService {
String callX(Object o);
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个Groovy测试用例:
class GTest extends GroovyTestCase {
def testInjectedMockIFace() {
def pojo = new PlainOldJavaObject( service: { callX: "very groovy" } as IService )
assert "very groovy" == pojo.publicMethod("arg")
}
def testMetaClass() {
def pojo = …Run Code Online (Sandbox Code Playgroud) groovy unit-testing programming-languages dynamic-languages mocking
所以我终于让我的依赖项与Grails一起工作了.现在,我的IDE(例如IntelliJ或Eclipse)如何利用它?或者我真的必须手动管理我的IDE在"开发时"知道哪些类?
如果BuildConfig.groovy脚本设置正确(参见此处),您将能够使用vi或您喜欢的编辑器编写代码,没有任何麻烦,然后运行grails compile将解析并将依赖项下载到常春藤缓存中,然后关闭 ...
但是,如果您使用的是Eclipse或IntelliJ等IDE,则在编码时需要手头的依赖项.显然 - 因为这些动物需要它们进行"实时"错误检测/编译过程.
现在,虽然您可以编写所有在您的IDE都不知道的地方闪烁着鲜红色的类,但它肯定不是很有趣 ......
Maven支持或正式调用的任何东西都与pom文件一起生活,不需要额外的"jar目录"指针,至少在IntelliJ中.我希望能够对Grails依赖项做同样的事情.
目前我在其中定义它们,BuildConfig.groovy另外我在当地磁盘上复制/粘贴当前的jar并让IDE指向它.
不太令人满意,因为我在代码更改方面的高度不稳定的项目模块环境中工作.这种情况将我直接导入"jar地狱",因为我的"开发和构建依赖"很容易失去同步,我必须手动管理,也就是说,我的脑子......
而我的大脑应该忙于其他的事情 ......
谢谢!拉乌尔
PS:我目前正在使用Grails 1.2M4和IntelliJ 92.105.但是随意添加Grails的未来版本和不同的未来IDE的答案,因为 ...
我必须从对象列表中序列化JSON.生成的JSON必须如下所示:
{
"status": "success",
"models": [
{
"model": {
"id": 23,
"color": "red"
}
},
{
"model": {
"id": 24,
"color": "green"
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
当我简单地序列化时,我错过了类型/键"模型":
List<Model> list = new ArrayList<Model>(); // add some new Model(...)
Response r = new Response("success", list); // Response has field "models"
Run Code Online (Sandbox Code Playgroud)
相反,我得到这个:
{
"status": "success",
"models": [
{
"id": 23,
"color": "red"
},
{
"id": 24,
"color": "green"
}
]
}
Run Code Online (Sandbox Code Playgroud)
如何为每个对象添加"模型"而无需编写具有属性"模型"的愚蠢包装类?
我的课程看起来像这样:
public class Response {
private String status;
private List<Model> models; …Run Code Online (Sandbox Code Playgroud) 在尝试解决SNAPSHOT maven依赖项遇到的问题时遇到了一些问题(参见此处).
运行时grails dependency-report,列出了缓存的依赖项,或多或少如下:
acme-adapter-api by com.acme
108 kB (0 kB downloaded, 108 kB in cache)
正如这个答案所暗示的那样,在更新依赖关系而不增加版本号时会遇到麻烦,导致缓存未被清空,并且SNAPSHOT依赖关系不会被重新获取,正如人们所期望的那样.
我到处都看了,也在%HOME%\.grails目录和床下;-)但找不到任何看起来像缓存的东西.
它在哪里,所以我可以手动删除它?或者甚至更好,我怎样才能grails compile有力地清理它?
谢谢!
拉乌尔
PS:我正在使用Grails 1.2M4
我尝试运行Aperture SDK 2.1附带的SampleFTPExportPlugIn.我不得不调整基本SDK设置和手动PluginManager.Framework文件夹复制到/库/框架,描述在这里.
所有编译和Aperture 3.2.3现在提供菜单项File/Export/FTP.
选择"FTP"导出方法并因此触发插件代码时,Aperture会发生EXC_BAD_ACCESS崩溃.当尝试获取对以下内容的引用时,非法内存访问在initWithAPIManager类的方法中发生:SampleFTPExportPlugInApertureExportManager
_exportManager = [[_apiManager apiForProtocol:@protocol(ApertureExportManager)] retain];
Run Code Online (Sandbox Code Playgroud)
这是在Aperture将控制交给插件后执行的第二行,似乎是ApertureExportManager在任何Aperture插件中获取引用的标准方法(我还没有找到任何替代方法来实现相同的功能)任何地方).
这里的堆栈跟踪:
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: 0x000000000000000d, 0x0000000000000000
VM Regions Near 0:
-->
__TEXT 0000000100000000-0000000100798000 [ 7776K] r-x/rwx SM=COW /Applications/Aperture.app/Contents/MacOS/Aperture
Application Specific Information:
objc_msgSend() selector name: class
objc[3000]: garbage collection is OFF
Performing @selector(a_exportPlugIn:) from sender NSMenuItem 0x111d2a540
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 libobjc.A.dylib 0x00007fff8711c090 objc_msgSend_vtable2 + 16
1 com.apple.CoreFoundation 0x00007fff8381e25f …Run Code Online (Sandbox Code Playgroud)