0%

在SAP hybris的单体测试中,出现如下错误信息:

1
2
3
4
5
ERROR \[main\] (junit) \[FlexibleSearch\] Flexiblesearch error: could not translate value expression 'session.catalogversions'
ERROR \[main\] (junit) \[FlexibleSearch\] query was 'SELECT {cat.pk} FROM {Category AS cat} WHERE NOT EXISTS ({ {SELECT {pk} FROM {CategoryCategoryRelation AS rel JOIN Category AS super ON {rel.source}={super.PK} } WHERE {rel:target}={cat.pk} AND {super.catalogVersion}={cat.catalogVersion} }}) AND {cat.catalogVersion} = ?catalogVersion'
ERROR \[main\] (junit) \[FlexibleSearch\] translated query was: SELECT item\_t0.PK FROM junit\_categories item\_t0 WHERE (NOT EXISTS (SELECT item\_t1.PK FROM junit\_cat2catrel item\_t1 JOIN junit\_categories item\_t2 ON item\_t1.SourcePK = item\_t2.PK WHERE ( item\_t1.TargetPK = item\_t0.PK AND item\_t2.p\_catalogversion = item\_t0.p\_catalogversion ) AND ((item\_t1.TypePkString=? AND item\_t2.TypePkString IN (?,?,?,?) AND (( item\_t2.p\_catalogversion IN (?))) ))) AND item\_t0.p\_catalogversion = ?) AND (item\_t0.TypePkString IN (?,?,?,?) AND (( item\_t0.p_catalogversion IN (?))) )
ERROR \[main\] (junit) \[LogRunListener\] Test method testCategoryNav(org.training.renderer.CategoryNavComponentRendererTest) failed!!
de.hybris.platform.servicelayer.search.exceptions.FlexibleSearchException: could not translate value expression 'session.catalogversions'

Java代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/**
*
*/
package org.training.renderer;

import de.hybris.platform.catalog.CatalogVersionService;
import de.hybris.platform.catalog.model.CatalogVersionModel;
import de.hybris.platform.category.CategoryService;
import de.hybris.platform.category.model.CategoryModel;
import de.hybris.platform.servicelayer.ServicelayerTransactionalTest;

import java.util.Collection;

import javax.annotation.Resource;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;


/\*\*
\* @author lwang
*
*/
public class CategoryNavComponentRendererTest extends ServicelayerTransactionalTest
{

@Resource(name = "categoryService")
private CategoryService categoryService;

@Resource(name = "catalogVersionService")
private CatalogVersionService catalogVersionService;

@Test
public void testCategoryNav()
{
final CatalogVersionModel catalogVersion = catalogVersionService.getCatalogVersion("uaProductCatalog", "Online");
Assert.assertNotNull(catalogVersion);
final Collection<CategoryModel> categoryList = categoryService.getRootCategoriesForCatalogVersion(catalogVersion);
Assert.assertNotNull(categoryList);
}
}

之所以会出现错误,是因为程序没有加载hybris框架通常需要的一些环境变量。 在测试用例中加入如下代码可以解决问题。

1
2
3
4
5
6
7
@Before
public void setUp() throws Exception
{
createCoreData();
createDefaultCatalog();
createHardwareCatalog();
}
Read more »

在SAP hybris中添加自定义的CMS Component,需要注意以下几点: 参考链接: https://wiki.hybris.com/pages/viewpage.action?pageId=294094319

  1. 在addon中添加,可免去对accelerator的修改
  2. 在//resources//web/spring/-web-spring.xml中添加renderer和rendererMapping的定义
  3. 使用ant命令安装addon

/-web-spring.xml的代码示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
<bean id="yourComponentRenderer" class="org.training.renderer.yourComponentRenderer">
<property name="typeService" ref="typeService" />
<property name="uiExperienceService" ref="defaultUiExperienceService" />
<property name="cmsComponentService" ref="cmsComponentService" />
<property name="modelService" ref="modelService" />
<property name="uiExperienceViewPrefixMap" ref="uiExperienceViewPrefixMap" />
<property name="unknownUiExperiencePrefix" value="desktop" />
</bean>

<bean id="yourComponentRendererMapping" parent="addonCmsComponentRendererMapping">
<property name="typeCode" value="yourComponent" />
<property name="renderer" ref="yourComponentRenderer" />
</bean>
Read more »

Sony面试的一些问题记录一下。   时间:9月26日 地点:品川本社 面试官:4人 问题:

  • 自我介绍
  • 简历细节的确认
  • 离职的动机
  • 来日本工作的动机
  • 介绍一下迄今为止所经历的项目中的成功和失败经验
  • 你自己的卖点(Sales Point)是什么
  • 对这个岗位的理解
  • 业余时间做过什么项目
  • 有什么问题
    • 岗位具体的工作内容是什么
    • 同样年龄段的人都是怎样的工作风格
    • 该岗位对英语作了一些具体要求,实际工作中和海外的团队有何种交流合作
Read more »

ngix存在的意义在哪里?

在python的web开发中,我用flask框架写了一个小程序,部署的时候,我用到了uwsgi来做容器。
在学习uwsgi部署的过程中,另一个关键词nginx频繁的跳出来。这两者通常是成对出现的。
你有没有和我一样的困惑,为什么有了uwsgi我们还需要nginx?
我是说,既然uwsgi能够展现你想要的内容,那nginx存在的意义在哪里?
首先,nginx是一个HTTP 服务器。如果你是学Java出身的,说到HTTP服务器你应该会想到Apache。
类似的uwsgi可以比喻为tomcat。 nginx官方网站上给出的一张图片很好的揭示了nginx的角色。
architecture-nginx

ngix的主要功能

我所理解的nginx的主要功能,有以下几个部分:

  • nginx处理静态内容请求更专业、快速
  • nginx可以缓存请求。如果让uwsgi来直接接受请求的话,uwsgi需要花费大量的时间来等待request,这本身对web应用所在的主机是很大的资源浪费。
  • 分发请求。假如你有好几个web应用,分布在不同的主机上,nginx可以把请求分发到各自的web应用来进行处理。这一特点是nginx可以用来做负载均衡器。
  • 相比web容器,nginx的漏洞更少更安全
  • nginx可以更好的处理HTTPS
  • nginx有网关(gateway)的作用,可以过滤访问IP。
Read more »

在python中有很多方法将datetime的字符串转换为 utc timestamp 网上找了好多,看起来都纷繁复杂。本文就想简单的做好一件事,就是将datetime的字符串转换为utc timestamp。 理解这个转换的关键,在于理解python中所有的日期字符串都被python解读为local time。 也就是说,同样是’2015/10/27 00:00:00’这个字符串,虽然身处东京的我和身在伦敦的你看到的是同一个字符串,但他们本身被python解读为两个不同地方的日期和时间。 如果想让python不去理会时差,而只想要utc格式的时间戳的话,用calendar.timegm()函数即可实现。 现举例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
\# -*- coding: utf-8 -*-
\_\_author\_\_ = 'leo'

from datetime import datetime
import calendar
import time


def local\_to\_utc(date_value):
utc\_timetuple = datetime.strptime(date\_value, '%Y/%m/%d %H:%M:%S').timetuple()
ts = calendar.timegm(utc_timetuple)
return ts * 1000


def local\_timestamp(date\_value):
utc\_timetuple = datetime.strptime(date\_value, '%Y/%m/%d %H:%M:%S').timetuple()
ts = time.mktime(utc_timetuple)
return int(ts) * 1000


date_str = '2015/10/27 00:00:00'
print local\_to\_utc(date_str)
print local\_timestamp(date\_str)

最后打印的结果,可以看到两个函数输出的时间戳是不一样的。(P.S.笔者在东九区)

1445904000000
1445871600000

Read more »

在使用SSRS,也就是SQL Server Report Service(SQL Server 报表)的过程中,如果你在寻找下面3个问题的答案,本文可能会帮到你。

  • 针对每个数据分组重新设定页码
  • 让表头在每个页面都能显示
  • 让数据在合理的位置分页

针对每个数据分组重新设定页码

在Details上设置属性,Group里面的ResetPageNumber设置为True,即可让每一个新的分组数据重新设定页码。 group  

让表头在每个页面都能显示

在详细模式里面找到表头的Static,然后设置KeepWithGroup属性为After,RepeatOnNewPage为True。 如果表头之前还有上一层分组的Static,上一层分组的上述两个属性要分别设为Before和True。 在同一个分组的Static的RepeatOnNewPage不能设置为不同的值,所以同样设定为了True, 但是不希望在后续页面继续显示的部分,其KeepWithGroup只要设定为Before,就不会随后续数据分页而再次出现了。repeatonnewpage

让数据在合理的位置分页

在希望保持为一个整体的Group上设置KeepTogether为True,就会尽量让同一组的数据在同一页面显示。 keeptogether

Read more »

最近为了考取Java 7的Gold资格而补课,多线程这一块看了好长一段时间才算有点头绪。 下面几点算是心得吧。明白这些东西之后,join()也差不多可以理解了。

  • 主线程和主线程生成的子线程是两个独立的东西。start()之后都是各自奔向终点。
  • 如果子线程跑得快,主线程无法对它进行interrupt()操作。 因为人家已经结束了,你再发号施令已经晚了。
  • 被interrupt()的子线程不会就此终止,而是会恢复原来的执行。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    public class Sample11_5 {

    public static void main(String\[\] args) {

    try {
    ThreadA a = new ThreadA();
    a.start();
    System.out.println("main : sleep start.");
    Thread.sleep(1000);
    System.out.println("main : sleep end.");
    a.interrupt();
    } catch (InterruptedException e) {

    }
    }

    }

    class ThreadA extends Thread{
    @Override
    public void run() {
    try {
    System.out.println("Thread A : sleep start");
    Thread.sleep(5000);
    System.out.println("Thread A : sleep end");
    } catch (InterruptedException e) {
    System.out.println("Catch Thread A interrupted");
    }
    System.out.println("Thread A finished.");
    }
    }
    执行结果如下:

main : sleep start.
Thread A : sleep start
main : sleep end.
Catch Thread A interrupted
Thread A finished.

Read more »

2015年上半期的自我评价和上司面谈结束了。 科长一如既往的说你稍微改一下这个写法就可以了,如果没有意见我们就谈到这把。 我说科长且慢,“中长期职业规划”您看了没,我写了一些。 然后引出了离职的话题,科长说那实在是很遗憾,我会跟部长汇报的,下周给你消息。   然后,我就这么提出了辞职。   职业生涯刚刚起步,当初心急火燎的进了公司,心想背靠一个大公司,自己应该会得心应手吧。 可这两年过去了,每一天想的都是我他妈为什么在这里浪费时间。 又想起nissan的广告词,说的太让人心潮澎湃。

2種類の人間がいる。 やりたいことやっちゃう人とやらない人。 やりたいことやってきたこの人生。 おかげで痛い目にもあってきた。 散々恥もかいてきた。 誰かの言うことを素直に聞いてりゃ、 今よりずっと楽だったかもしれない。 でもね、これだけは言える。 やりたいことやっちゃう人生のほうが、間違いなく面白い。 俺はこれからもやっちゃうよ あんたはどうする?

Read more »

在windows下对SQL Server2008数据库进行定时备份,需要做以下工作: 1.编写备份数据库的bat文件,内容形似: backup database testdb to disk=’d:\backup\testdb.bak’  >> .\backup.log 2.编写copy数据库备份文件并重命名的bat文件,形似: SET DT=%DATE:0,4%%DATE:5,2%%DATE:~8,2% COPY D:\backup.bak  D:\backup%DT%.bak >> .\copy.log 2.建立两个windows计划任务,分别选定时间和周期执行上述备份bat文件。 这样就可以实现sql server的定时备份策略了。

Read more »

在SSH和Extjs的整合过程中,需要Grid从服务器端读取json格式的数据显示在前端,在action的class中配置了service属性,并通过spring对该service进行注入。  

1
2
3
4
5
private String userID;
private String userName;
private String delFlg;
private List<User> userList;
private UserService userService;

  在struts2中,如果struts.xml中将action的返回结果定义成了json类型,strut2就自动将该action的属性全部json序列化,但是service却无法序列化, 于是需要在struts.xml中将相应的action的配置更改一下。如下所示:

1
2
3
4
5
6
7
<action name="searchUser" method="search" class="searchUserAction">
<result type="json">
<param name="excludeProperties">
userService
</param>
</result>
</action>

  exludeProperties即可将不需要json序列化的属性排除在外。

Read more »