我目前正在创建一个EJB3数据访问类来处理我的Java EE 6应用程序中的所有数据库操作.现在,由于Java EE 6提供了新的ApplicationScoped注释,我想知道我的EJB应该具有什么状态,或者它应该是无状态的.
让DAO成为@Stateless会话Bean或@ApplicationScopedBean 会更好吗?怎么样@Singleton?这些与DAO相关的选项有何不同?
编辑: 我正在使用Glassfish 3.0.1与完整的Java EE 6平台
我希望我的代码符合PEP-8标准.
但是,每次忘记任何规则时阅读PEP8页面都非常耗时.如果我有一个代码示例,它会更快地演示所有 PEP-8规则.
是否有任何代码示例正是这样做的?
我想尽可能准确地计算多文件Python项目中的代码行,但不要在总计中包含注释,文档字符串或空行.
我首先尝试使用cloc,它可以作为Debian软件包使用.但是cloc将大多数文档字符串视为代码 - 即使它们是注释.(更新:不再 - 最近版本的cloc现在将Python文档字符串视为注释.)
我注意到下面的一些注释说文档字符串应该包含在总数中,因为它们可能被代码用来影响运行时的行为,因此算作程序代码/ data/config的一部分.一个突出的例子是'ply',它要求你用docstrings编写函数,我记得这些函数包含语法和正则表达式,这些都是程序操作的核心.然而,在我看来这是一个非常罕见的例外.大多数时候,文档字符串就像评论一样.具体来说,我知道对于我想要测量的所有代码都是如此.所以我想从我的行数中排除它们.
我目前有一个Bash完成文件,它从一个允许的脚本命令列表(称为"pbt")中完成一个参数.这是工作Bash完成文件:
_pbt_complete()
{
local cur goals
COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]}
goals='asadmin clean deploy'
cur=`echo $cur`
COMPREPLY=($(compgen -W "${goals}" ${cur}))
}
complete -F _pbt_complete pbt
Run Code Online (Sandbox Code Playgroud)
所以,如果我打电话
pbt <tab>
Run Code Online (Sandbox Code Playgroud)
Bash完成所有允许的命令(asadmin,clean,deploy),这没关系.
现在我想在完成时添加"第二"级别.所以例如,如果我输入
pbt asadmin <tab>
Run Code Online (Sandbox Code Playgroud)
它应该完成所有只在asadmin-"环境"中可用的选项(我也将在bash完成文件中定义),例如,pbt asadmin [start-domain|stop-domain]但是如果我输入
pbt deploy <tab>
Run Code Online (Sandbox Code Playgroud)
例如,它应该完成另一组选项pbt deploy [all|current].因此第二个命令的选项应始终取决于第一个命令.我怎么能在完成文件中这样做?
我正在运行Ubuntu,我想获得附加显示器的数量,它们当前的分辨率,如果可能的话,我们想要相互之间的位置.因为我不喜欢解析xrandr的控制台输出 - 至少不是我不需要 - 我想用Python-XLib或类似的Pythonic方法来做.
这是我的显示配置的xrandr输出:
$ xrandr
Screen 0: minimum 320 x 200, current 2960 x 1050, maximum 8192 x 8192
DVI-0 connected 1680x1050+0+0 (normal left inverted right x axis y axis) 473mm x 296mm
1680x1050 60.0*+
1400x1050 60.0
1280x1024 75.0 60.0
1440x900 59.9
1280x960 75.0 60.0
1152x864 75.0
1280x720 75.0
1024x768 75.1 70.1 60.0
832x624 74.6
800x600 72.2 75.0 60.3 56.2
640x480 72.8 75.0 66.7 60.0
720x400 70.1
VGA-0 connected 1280x1024+1680+26 (normal left inverted …Run Code Online (Sandbox Code Playgroud) 谢谢你的时间.
我在Django 1.4上,我有以下代码:它是我的Quest模型的重写保存方法.
@commit_on_success
def save(self, *args, **kwargs):
from ib.quest.models.quest_status_update import QuestStatusUpdate
created = not self.pk
if not created:
quest = Quest.objects.get(pk=self)
# CHECK FOR SOME OLD VALUE
super(Quest, self).save(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
我找不到这样做的聪明方法.对于我正在更新的对象进行新查询以找出旧的实例值,对我来说似乎非常愚蠢.
有一个更好的方法吗?
谢谢你们.
弗朗西斯科
我想要的是一种机制,我在Bash-Terminal上输入的所有命令都由Python脚本包装.Python脚本执行输入的命令,但它增加了一些额外的魔法(例如设置"动态"环境变量).这有可能吗?
我正在运行Ubuntu和Debian Squeezy.
补充说明:
我有一个动态更改的属性文件(某些脚本会随时更改它).我需要该文件中的属性作为所有shell脚本中的环境变量.当然我可以从shell以某种方式解析属性文件,但我更喜欢使用面向对象的样式(尤其是写入),因为它可以用Python(和ConfigObject)完成.
因此,我想用Python脚本包装所有脚本(无需自己修改脚本),这些脚本处理这些属性到所有Shell脚本.这是我目前的用例,但我可以想象,我会发现其他情况,我可以在以后扩展我的包装.
假设我有一个简单的Django REST Framework视图,它扩展了多个模型类,并为一个URL端点中的所有方法提供服务:
class UserAPIView(RetrieveAPIView, DestroyAPIView, BaseObjectAPIView):
permission_classes = (IsAuthenticated, )
serializer_class = UserSerializer
def get_serializer_class(self, *args, **kwargs):
# return different serializer depending on method??
# return UserUpdateSerializer
return UserViewSerializer
def get(self, request, *args, **kwargs):
"""
Retrieve user details
"""
# ...
return Response(data={'result': "OK"}, status=200)
def delete(self, request, pk):
"""
Delete user
"""
# ...
return Response(data={'result': "OK"}, status=200)
def put(self, request, pk):
"""
Change user
"""
# ...
return Response(data={'result': "OK"}, status=200)
Run Code Online (Sandbox Code Playgroud)
现在我需要为每个方法使用不同的序列化器,因为我的get-method将使用与put-method不同的字段,例如序列化器:
class UserViewSerializer(serializers.ModelSerializer):
firstname = serializers.Field(source='firstname') …Run Code Online (Sandbox Code Playgroud) 我的内存泄漏很难在测试环境中重现.因此,我想在一段有限的时间内剖析我的生产服务器,以便了解哪些对象占用了大部分内存.由于使用了greenlets,似乎并不容易描述Gunicorn.
我在跑:
这是我的Gunicorn配置:
CONFIG = {
'environment': {
'DJANGO_SETTINGS_MODULE': 'myapp.settings',
},
'user': 'myapp',
'group': 'myapp',
'args': (
'--bind=127.0.0.1:8088',
'--workers=8',
'--worker-class=socketio.sgunicorn.GeventSocketIOWorker',
'--timeout=300',
'--error-logfile=/var/log/gunicorn/myapp-error.log',
'--max-requests=100',
'--log-level=debug',
'myapp.wsgi:application',
),
}
Run Code Online (Sandbox Code Playgroud)
什么是与Gunicorn一起运行Django时进行内存分析的最佳方法?
我正在使用Glassfish 3.1,B06开发Java EE 6应用程序.为了保护我的应用程序,我正在使用JDBCRealm和编程安全性.这可以很好地检查用户名和密码.但是当谈到声明安全角色时,我遇到了一个问题:
要在Java EE 6中使用安全角色,我必须在EJB部署描述符和Glassfish特定的部署描述符中声明这些角色以链接这些角色(如Java EE 6教程中所述)仅我可以使用方法isCallerInRole(String roleRef)在EJB内部检查权限.
这对我的应用程序来说是不可取的,因为我希望能够动态地和以编程方式添加安全角色,而不必编写XML文件(例如,可以在数据库中定义角色名称).
我刚刚通过GF3源代码进行了调试,并在com.sun.ejb.containers.EjbContextImpl中看到了isCallerInRole的实现.容器从EJB描述符中获取角色:
public boolean isCallerInRole(String roleRef) {
(...)
EjbDescriptor ejbd = container.getEjbDescriptor();
RoleReference rr = ejbd.getRoleReferenceByName(roleRef);
(...)
}
Run Code Online (Sandbox Code Playgroud)
我环顾四周,发现如果我能以某种方式在我的应用程序中获取EJB描述符,我可以添加这样的角色:
EjbDescriptor ejbd = //??? Can i use that descriptor inside my app, or is that "forbidden"?
RoleReference rr = new RoleReference("admin", "Admins are allowed to do everything");
ejbd.addRoleReference(rr);
Run Code Online (Sandbox Code Playgroud)
有人做过这样的事情,还是对此有所了解?是否可以在我的应用程序中使用Ejb部署描述符?还是有更好的方法?
PS或我应该使用MBeans添加角色?在这里找到一个相关的帖子.