小编ple*_*and的帖子

使用 Scala 3 宏重写方法

我正在尝试使用 Scala 3 宏和 TASTY 重写方法。我想重写任何类型的任何方法。现在我从这个简单的案例开始。

我有一个测试基类:

class TestClass {
  def func(s: String) = "base"
}
Run Code Online (Sandbox Code Playgroud)

我想实现这一点,但是通过使用 TASTY,我发现不可能调用new A带有引号和拼接的泛型类型:

'{
    new TestClass() {
       override def func(s: String) = "override"
    }
}.asExprOf[A]
Run Code Online (Sandbox Code Playgroud)

我打印了上述代码的 AST,并且几乎成功地重新创建了它。问题是我无法调用new生成的类 - 我没有找到访问新类的符号或类型的方法。我也尝试Symbol.requiredClass()使用新名称,尽管它返回了一些符号,但在宏扩展期间出现错误,未找到该类。

我的问题是:

  • 是否可以在不显式调用:的new Class {}情况下派生自定义类型?
  • 是否ClassDef.copy注册一个可以帮助创建新实例的新名称?
  • 可以手动调用ClassDef创建类的实例吗?
  • Symbol.requiredClass即使之前没有定义,如何使用返回的符号,因为它会返回某些内容?

我创建的代码:

import scala.quoted.*

object NewClass {

  def newClassImpl[A: Type](e: Expr[A])(using Quotes): Expr[A] = {
    import quotes.reflect.*

    val typeRep = TypeRepr.of[A]

    val ret = typeRep.classSymbol.map(_.tree) match …
Run Code Online (Sandbox Code Playgroud)

scala scala-macros scala-3

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

EntityManager JNDI - 找不到名称

您好我在Tomcat 7服务器上创建了一个JNDI资源,我正在尝试通过persistence.xml使用它,但是我收到一个错误,即在上下文中找不到资源名称.我尝试在网上找到其他解决方案,但没有为我工作.有谁看到了什么问题?在我的server.xml片段下面:

<GlobalNamingResources>
    <!-- Editable user database that can also be used by
         UserDatabaseRealm to authenticate users
    -->
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml"/>

    <Resource name="jdbc/myds" auth="Container"
              type="javax.sql.DataSource"
              maxActive="10" maxIdle="3" maxWait="10000"
              username="boardgames" password="boardgames"
              driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
               url="jdbc:sqlserver://localhost:1433;databaseName=boardgames;integratedSecurity=true;"

            />


</GlobalNamingResources>
Run Code Online (Sandbox Code Playgroud)

我还在web.xml中添加了资源引用:

 <resource-ref>
    <description>DB Connection</description>
    <res-ref-name>jdbc/mydb</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>
Run Code Online (Sandbox Code Playgroud)

persistence.xml中:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence"   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://java.sun.com/xml/ns/persistence    http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="persistence_sample" transaction-type="RESOURCE_LOCAL">

    <!--
   <provider>org.hibernate.ejb.HibernatePersistence</provider>


   <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    -->
    <non-jta-data-source>java:/comp/env/jdbc/myds</non-jta-data-source>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServer2008Dialect"/>        <!-- Enable Hibernate's automatic …
Run Code Online (Sandbox Code Playgroud)

java tomcat jpa jndi persistence.xml

2
推荐指数
1
解决办法
8215
查看次数

标签 统计

java ×1

jndi ×1

jpa ×1

persistence.xml ×1

scala ×1

scala-3 ×1

scala-macros ×1

tomcat ×1