小编Rap*_*oth的帖子

如何在源代码中引用预定义的数据库条目

我们公司讨论了如何在我们的java源代码中引用某些数据库条目。 情况如下:

java Web 应用程序连接到由 SQL 脚本设置的 MySQL 数据库,JPA/Hibernate 用于 ORM。在这个脚本中,我们在“roles”表中插入了 3 个角色(即用户可以在 Web 应用程序中拥有的角色,即用户表具有角色表的外键)。这些角色具有 SQL 脚本中给出的预定义主键/ID (BIGINT) 和名称 (VARCHAR)。这些角色不用于安全框架,而是用于业务逻辑。目前它看起来像这样:

if(user.getRole.getId()==1) {
     // user is in role A
} else if(user.getRole().getId()==2) {
    // user is in role B
} ...
Run Code Online (Sandbox Code Playgroud)

由于角色必须在编译时由源代码知道(因为逻辑取决于它们),我们必须检查用户是否具有某些角色。现在的问题是如何做到这一点。我们讨论过:

a) 通过 ID 或名称更好地检查 b) 使用字符串/长常量或枚举来检查相等性

a) 我更喜欢检查 ID(因为它不太可能改变,因为我们在数据库设置时使用脚本插入 ID),角色名称更有可能在应用程序的生命周期内改变。

b) 我更喜欢使用常量,因为我不喜欢依赖枚举索引/序数。此外,我们在这里不需要类型安全。我在枚举中看到的唯一优点是它很容易获取所有值,afaik 只有在常量的情况下才有可能通过反射。但是由于我们在数据库上定义了所有角色,因此可以在运行时从那里获取它们。

有什么建议?

java mysql database enums

5
推荐指数
1
解决办法
102
查看次数

Spring数据xml配置模式验证错误

我有一个项目使用Spring(context,transaction,apect)4.1.6.RELEASE和spring-data-jpa 1.8.0.RELEASE并遇到奇怪的错误,假设是由xsd验证引起的.但是,我无法确定原因.奇怪的是,项目运行正常,我的所有bean都被正确识别.

我正在使用Eclipse luna和Spring Tools Suite插件

我从applicationContext.xml中删除了除"jpa:"行之外的所有内容,这会导致问题.已使用STS插件创建xml.

我试图从xsds中删除版本号,但没有成功.

在此输入图像描述

xml eclipse spring spring-data

5
推荐指数
1
解决办法
1367
查看次数

使用 ProcessBuilder 并将参数列表作为单个字符串

我尝试从 Java 程序切换Runtime.exec(command)ProcessBuilder执行 ImageMagick 。convert转换的选项是从用户作为字符串传入的,因此我无法轻松地分离参数以将它们单独传递给 的ProcessBuilder构造函数。在(Unix)命令行上运行的实际命令是

convert -colorspace gray -enhance -density 300 in.pdf out.pdf
Run Code Online (Sandbox Code Playgroud)

我怎样才能让它工作:

public class Demo {
    public static void main(String[] args) throws IOException, InterruptedException {
        String convertOptions = "-colorspace gray -enhance -density 300"; // arguments passed in at runtime
        ProcessBuilder bp = new ProcessBuilder(new String []{"convert",convertOptions,"in.pdf","out.pdf"});
        Process process = bp.start();
        process.waitFor();
    }
}
Run Code Online (Sandbox Code Playgroud)

目前,代码只是运行

java processbuilder

5
推荐指数
1
解决办法
4012
查看次数

当 -dNumRenderingThreads > 1 时,Ghostscript 9.18 (gswin64c.exe) 崩溃

我在将多页 pdf 转换为 tiff 时遇到以下问题:

gswin64c.exe -dNumRenderingThreads=8 -dQUIET -dNOPAUSE -dBATCH -sDEVICE=tiffscaled -sCompression=g4 -r300 -o out.tiff in.pdf
Run Code Online (Sandbox Code Playgroud)

in.pdf是带有嵌入图像(即扫描页)的多页 pdf。

从命令行运行时(“gswin64c.exe 停止工作”),在我的 Windows 64 位环境中,命令崩溃(但并不总是在同一页面上),没有 STDERR 写入控制台。我使用最新的 Ghostscript 版本(9.18)。

仅当我使用-dNumRenderingThreads=1.

这可能是什么原因?

编辑:在版本 9.15 中,转换运行良好,从 9.16 开始,它不再工作。

系统日志错误条目显示:

Faulting application name: gswin64c.exe, version: 0.0.0.0, time stamp: 0x56123d41
Faulting module name: gsdll64.dll, version: 0.0.0.0, time stamp: 0x56123d3d
Exception code: 0xc0000005
Fault offset: 0x000000000007b930
Faulting process id: 0x197c
Faulting application start time: 0x01d16325677e4e24
Faulting application path: C:\Program Files\gs\gs9.18\bin\gswin64c.exe
Faulting module path: C:\Program …
Run Code Online (Sandbox Code Playgroud)

pdf tiff ghostscript

5
推荐指数
1
解决办法
1667
查看次数

Scala数组切片与元组

我尝试Array[Double]使用该slice方法切片1D .我写了一个方法,它将开始和结束索引作为元组返回(Int,Int).

  def getSliceRange(): (Int,Int) = {
    val start =   ...
    val end =  ...
    return (start,end)
  }
Run Code Online (Sandbox Code Playgroud)

我怎样才能getSliceRange直接使用返回值?

我试过了:

myArray.slice.tupled(getSliceRange())
Run Code Online (Sandbox Code Playgroud)

但这给了我一个编译错误:

Error:(162, 13) missing arguments for method slice in trait IndexedSeqOptimized;
follow this method with `_' if you want to treat it as a partially applied function
  myArray.slice.tupled(getSliceRange())
Run Code Online (Sandbox Code Playgroud)

arrays scala tuples

5
推荐指数
1
解决办法
255
查看次数

加载包含相同符号的两个本机库时内存问题

我正在尝试使用JNA同时操作本机的,非线程安全的Fortran库.由于库不是线程安全的,我尝试实例化同一个库的不同副本,但显然它们似乎共享内存地址.如果我修改一个库中的一个变量,则将另一个库中的变量修改为.此行为使得无法在单独的线程中以完全方式运行它们.

以下代码示例演示了我的意思:

code.f:

  subroutine set(var)
     implicit none
     integer var,n
     common/conc/n
     n=var
  end subroutine

  subroutine get(var)
     implicit none
     integer var,n
     common/conc/n
     var=n
  end subroutine
Run Code Online (Sandbox Code Playgroud)

此文件的编译和复制如下:

gfortran -shared -O2 code.f -o mylib.so -fPIC
cp mylib.so mylib_copy.so
Run Code Online (Sandbox Code Playgroud)

然后我使用JNA访问这两个:

import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.ptr.IntByReference;

public class JNA {
    public interface MyLib extends Library {
        public void set_(IntByReference var);
        public void get_(IntByReference var);
    }

    public static void main(String[] args) {
        System.setProperty("jna.library.path", ".");
        MyLib lib = (MyLib) Native.loadLibrary("mylib.so", MyLib.class);
        MyLib lib_copy = (MyLib) Native.loadLibrary("mylib_copy.so", MyLib.class); …
Run Code Online (Sandbox Code Playgroud)

fortran native jna

5
推荐指数
1
解决办法
127
查看次数

将现有变量标记为隐式方法的候选

我尝试编写一个应该使用周围范围变量的方法.问题是我无法访问定义变量的代码部分.像这样的东西:

object Example extends App {

  val myvar = 1.0 // cannot change that code

  def myMethod()(implicit value:Double) = {
      print(value)
  }

  myMethod()
}
Run Code Online (Sandbox Code Playgroud)

这失败了,因为myMethod无法找到合适的隐含value.

value除了定义指向的新隐式变量之外,还有一种方法可以在定义之后将其"标记" 为隐式value吗?

背景:我们使用Spark-Notebook 自动创建SparkContext(命名sc).作为sc社区中此变量的一个众所周知的名称,我们不希望引入另一个变量名称.

scala implicit

5
推荐指数
1
解决办法
454
查看次数

如何处理加载了 JNA 的库

我正在使用 JNA 来加载本机库:

MyLibrary INSTANCE = (MyLibrary) Native.loadLibrary("mylibrary.so", MyLibrary.class);
Run Code Online (Sandbox Code Playgroud)

现在我想清理并处置图书馆。我已经读过该dispose方法,但这是在类上定义的NativeLibrary,我应该如何调用它?

无论如何,有必要这样做吗?我正在大规模地将 jna 与 Apache Spark 一起使用,因此我加载了该库数千次,我想知道如果我明确调用 nit ,是否还有任何资源保持打开状态dispose

编辑:我已经看到了问题Jna, Unload Dll from java classdynamic,但它没有为我的问题提供解决方案。

没有公认的答案。人们建议调用NativeLibrary.dispose(),但NativeLibrary. 如果我尝试转换我的库实例(类型为Library),则会收到类转换异常。

jna

5
推荐指数
1
解决办法
4316
查看次数

在IntelliJ Scala工作表中使用Apache Spark

我尝试使用最新的Scala-Plugin在IntelliJ 2016.3中运行带有Scala 2.10.5的Apache Spark 1.6.3。该项目是一个maven项目。

如果我尝试使用创建一个新的SparkContext:

val sparkConf = new SparkConf()
val sc = new SparkContext(sparkConf.setAppName("Spark-Scala-Demo").setMaster("local[*]"))
Run Code Online (Sandbox Code Playgroud)

我懂了

17/01/16 14:05:28 ERROR SparkContext: Error initializing SparkContext.
java.lang.ClassNotFoundException: org.apache.spark.rpc.netty.NettyRpcEnvFactory
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)
    at org.apache.spark.util.Utils$.classForName(Utils.scala:175)
    at org.apache.spark.rpc.RpcEnv$.getRpcEnvFactory(RpcEnv.scala:41)
Run Code Online (Sandbox Code Playgroud)

该代码在IntelliJ scala控制台以及定义主方法的普通类中都可以正常运行。

那么,scala工作表有什么不同?

scala intellij-idea apache-spark

5
推荐指数
1
解决办法
373
查看次数

排序后的数据帧分区数?

spark如何确定使用后的分区数orderBy?我一直认为生成的数据框有spark.sql.shuffle.partitions,但这似乎不是真的:

val df = (1 to 10000).map(i => ("a",i)).toDF("n","i").repartition(10).cache

df.orderBy($"i").rdd.getNumPartitions // = 200 (=spark.sql.shuffle.partitions)
df.orderBy($"n").rdd.getNumPartitions // = 2 
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,spark 都可以+- Exchange rangepartitioning(i/n ASC NULLS FIRST, 200),那么第二种情况下的分区数怎么会是 2?

apache-spark apache-spark-sql

5
推荐指数
1
解决办法
1956
查看次数